From 82beb46e65e5f820b187355bf757725c22a59c45 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Thu, 29 May 2014 03:32:44 +0200 Subject: [PATCH] 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 --- doc/muxers.texi | 2 ++ libavformat/nut.h | 1 + libavformat/nutenc.c | 5 ++++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/muxers.texi b/doc/muxers.texi index c1cf18607b..ce9d1108c7 100644 --- a/doc/muxers.texi +++ b/doc/muxers.texi @@ -717,6 +717,8 @@ Change the syncpoint usage in nut: @item @var{timestamped} extend the syncpoint with a wallclock field. @end table 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 @example diff --git a/libavformat/nut.h b/libavformat/nut.h index d7a462ef6f..943081caf6 100644 --- a/libavformat/nut.h +++ b/libavformat/nut.h @@ -106,6 +106,7 @@ typedef struct NUTContext { AVRational *time_base; struct AVTreeNode *syncpoints; int sp_count; + int write_index; int64_t max_pts; AVRational *max_pts_tb; #define NUT_BROADCAST 1 // use extended syncpoints diff --git a/libavformat/nutenc.c b/libavformat/nutenc.c index 74ba1e8d5a..0bed15ae0d 100644 --- a/libavformat/nutenc.c +++ b/libavformat/nutenc.c @@ -1019,6 +1019,7 @@ static int nut_write_packet(AVFormatContext *s, AVPacket *pkt) } 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) return ret; @@ -1032,6 +1033,7 @@ static int nut_write_packet(AVFormatContext *s, AVPacket *pkt) for (j=nut->sp_count == 1 ? 0 : nut->sp_count; j<2*nut->sp_count; j++) nus->keyframe_pts[j] = AV_NOPTS_VALUE; } + } } av_assert0(nus->last_pts != AV_NOPTS_VALUE); @@ -1157,7 +1159,7 @@ static int nut_write_trailer(AVFormatContext *s) write_headers(s, 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); 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" }, { "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" }, + { "write_index", "Write index", OFFSET(write_index), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, E, }, { NULL }, };