mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avformat/nutenc: add mode that omits the index
When the index is not written, several data tables become unneeded, reducing memory and cpu requirements. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
df889be0a8
commit
82beb46e65
@ -717,6 +717,8 @@ Change the syncpoint usage in nut:
|
|||||||
@item @var{timestamped} extend the syncpoint with a wallclock field.
|
@item @var{timestamped} extend the syncpoint with a wallclock field.
|
||||||
@end table
|
@end table
|
||||||
The @var{none} and @var{timestamped} flags are experimental.
|
The @var{none} and @var{timestamped} flags are experimental.
|
||||||
|
@item -write_index @var{bool}
|
||||||
|
Write index at the end, the default is to write an index.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@example
|
@example
|
||||||
|
@ -106,6 +106,7 @@ typedef struct NUTContext {
|
|||||||
AVRational *time_base;
|
AVRational *time_base;
|
||||||
struct AVTreeNode *syncpoints;
|
struct AVTreeNode *syncpoints;
|
||||||
int sp_count;
|
int sp_count;
|
||||||
|
int write_index;
|
||||||
int64_t max_pts;
|
int64_t max_pts;
|
||||||
AVRational *max_pts_tb;
|
AVRational *max_pts_tb;
|
||||||
#define NUT_BROADCAST 1 // use extended syncpoints
|
#define NUT_BROADCAST 1 // use extended syncpoints
|
||||||
|
@ -1019,6 +1019,7 @@ static int nut_write_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
}
|
}
|
||||||
put_packet(nut, bc, dyn_bc, 1, SYNCPOINT_STARTCODE);
|
put_packet(nut, bc, dyn_bc, 1, SYNCPOINT_STARTCODE);
|
||||||
|
|
||||||
|
if (nut->write_index) {
|
||||||
if ((ret = ff_nut_add_sp(nut, nut->last_syncpoint_pos, 0 /*unused*/, pkt->dts)) < 0)
|
if ((ret = ff_nut_add_sp(nut, nut->last_syncpoint_pos, 0 /*unused*/, pkt->dts)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -1033,6 +1034,7 @@ static int nut_write_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
nus->keyframe_pts[j] = AV_NOPTS_VALUE;
|
nus->keyframe_pts[j] = AV_NOPTS_VALUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
av_assert0(nus->last_pts != AV_NOPTS_VALUE);
|
av_assert0(nus->last_pts != AV_NOPTS_VALUE);
|
||||||
|
|
||||||
coded_pts = pkt->pts & ((1 << nus->msb_pts_shift) - 1);
|
coded_pts = pkt->pts & ((1 << nus->msb_pts_shift) - 1);
|
||||||
@ -1157,7 +1159,7 @@ static int nut_write_trailer(AVFormatContext *s)
|
|||||||
write_headers(s, bc);
|
write_headers(s, bc);
|
||||||
|
|
||||||
ret = avio_open_dyn_buf(&dyn_bc);
|
ret = avio_open_dyn_buf(&dyn_bc);
|
||||||
if (ret >= 0 && nut->sp_count) {
|
if (ret >= 0 && nut->sp_count && nut->write_index) {
|
||||||
write_index(nut, dyn_bc);
|
write_index(nut, dyn_bc);
|
||||||
put_packet(nut, bc, dyn_bc, 1, INDEX_STARTCODE);
|
put_packet(nut, bc, dyn_bc, 1, INDEX_STARTCODE);
|
||||||
}
|
}
|
||||||
@ -1180,6 +1182,7 @@ static const AVOption options[] = {
|
|||||||
{ "default", "", 0, AV_OPT_TYPE_CONST, {.i64 = 0}, INT_MIN, INT_MAX, E, "syncpoints" },
|
{ "default", "", 0, AV_OPT_TYPE_CONST, {.i64 = 0}, INT_MIN, INT_MAX, E, "syncpoints" },
|
||||||
{ "none", "Disable syncpoints, low overhead and unseekable", 0, AV_OPT_TYPE_CONST, {.i64 = NUT_PIPE}, INT_MIN, INT_MAX, E, "syncpoints" },
|
{ "none", "Disable syncpoints, low overhead and unseekable", 0, AV_OPT_TYPE_CONST, {.i64 = NUT_PIPE}, INT_MIN, INT_MAX, E, "syncpoints" },
|
||||||
{ "timestamped", "Extend syncpoints with a wallclock timestamp", 0, AV_OPT_TYPE_CONST, {.i64 = NUT_BROADCAST}, INT_MIN, INT_MAX, E, "syncpoints" },
|
{ "timestamped", "Extend syncpoints with a wallclock timestamp", 0, AV_OPT_TYPE_CONST, {.i64 = NUT_BROADCAST}, INT_MIN, INT_MAX, E, "syncpoints" },
|
||||||
|
{ "write_index", "Write index", OFFSET(write_index), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, E, },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user