[FFmpeg-devel] [PATCH 1/4] avformat/nutenc: don't use header_count to store different variables
Andriy Gelman
andriy.gelman at gmail.com
Mon Nov 9 01:49:48 EET 2020
On Mon, 09. Nov 00:04, Andreas Rheinhardt wrote:
> Andriy Gelman:
> > From: Andriy Gelman <andriy.gelman at gmail.com>
> >
> > Currently, header_count is used to store both the elision header count
> > and the header repetition count (number of times headers have been written
> > to output). Fix this by using a separate variable to store repetition
> > count.
> >
> > Signed-off-by: Andriy Gelman <andriy.gelman at gmail.com>
> > ---
> > libavformat/nut.h | 3 ++-
> > libavformat/nutenc.c | 4 ++--
> > 2 files changed, 4 insertions(+), 3 deletions(-)
> >
> > diff --git a/libavformat/nut.h b/libavformat/nut.h
> > index a4409ee23d..a990d3832e 100644
> > --- a/libavformat/nut.h
> > +++ b/libavformat/nut.h
> > @@ -103,7 +103,8 @@ typedef struct NUTContext {
> > unsigned int time_base_count;
> > int64_t last_syncpoint_pos;
> > int64_t last_resync_pos;
> > - int header_count;
> > + int header_count; // elision header count
> > + int header_rep_count; // number of times headers written
> > AVRational *time_base;
> > struct AVTreeNode *syncpoints;
> > int sp_count;
> > diff --git a/libavformat/nutenc.c b/libavformat/nutenc.c
> > index 1dcb2be1b1..87adef6f7e 100644
> > --- a/libavformat/nutenc.c
> > +++ b/libavformat/nutenc.c
> > @@ -684,7 +684,7 @@ static int write_headers(AVFormatContext *avctx, AVIOContext *bc)
> > }
> >
> > nut->last_syncpoint_pos = INT_MIN;
> > - nut->header_count++;
> > + nut->header_rep_count++;
> >
> > ret = 0;
> > fail:
> > @@ -988,7 +988,7 @@ static int nut_write_packet(AVFormatContext *s, AVPacket *pkt)
> > data_size += sm_size;
> > }
> >
> > - if (1LL << (20 + 3 * nut->header_count) <= avio_tell(bc))
> > + if (1LL << (20 + 3 * nut->header_rep_count) <= avio_tell(bc))
> > write_headers(s, bc);
> >
> > if (key_frame && !(nus->last_flags & FLAG_KEY))
> >
> 1. You are not the first to notice this:
> https://patchwork.ffmpeg.org/project/ffmpeg/patch/20200505141657.10787-2-andreas.rheinhardt@gmail.com/
The goal of my set was to help user in [1] by adding option to insert periodic
headers (see patch 3).
http://ffmpeg.org/pipermail/ffmpeg-user/2020-November/050690.html
> 2. Your patch is incomplete: header_count is also used in write_trailer.
> If you use the correct value there, you will have to update lots of
> fate-tests (see the above commit). (The fate updates of that old patch
> need to be updated (and were incomplete anyway because I did not ran
> tests for gpl-components*).
It has been dead code since the header elision support was added.
Would it make sense to remove that code in write_trailer()? This would simplify
your patch.
> 3. The reason the above patch (or rather patchset) has not been applied
> is that there is actually a subtle bug with chapters: Users are allowed
> to add new chapters after writing the header (some muxer then write the
> chapters when writing the trailer). Yet this doesn't work with nut right
> now: See the commit message of the preceding patch
> (https://patchwork.ffmpeg.org/project/ffmpeg/patch/20200505141657.10787-1-andreas.rheinhardt@gmail.com/)
> for details.
I'd have to look at your set in more detail, but I thought repeated headers had
to be the same as original ones. From the spec:
"Headers may be repeated, but if they are, then all mandatory headers MUST be
repeated and repeated headers MUST be identical."
--
Andriy
More information about the ffmpeg-devel
mailing list