[FFmpeg-devel] [PATCH] avformat/ivf: Change the length field to 32 bits
Raphaël Zumer
rzumer at tebako.net
Tue Oct 1 20:44:31 EEST 2019
Thank you for the review. I have left the encoded value as 64 bits and
split the patch into two in the v2 just sent: one for the decoder
change in field size, and one for the encoder comments.
On Tue, 2019-10-01 at 14:25 -0300, James Almer wrote:
> On 10/1/2019 2:05 PM, Raphaël Zumer wrote:
> > Signed-off-by: Raphaël Zumer <rzumer at tebako.net>
> > ---
> > libavformat/ivfdec.c | 3 ++-
> > libavformat/ivfenc.c | 5 +++--
> > 2 files changed, 5 insertions(+), 3 deletions(-)
> >
> > diff --git a/libavformat/ivfdec.c b/libavformat/ivfdec.c
> > index 40ae464b76..2fdb6f5a04 100644
> > --- a/libavformat/ivfdec.c
> > +++ b/libavformat/ivfdec.c
> > @@ -53,7 +53,8 @@ static int read_header(AVFormatContext *s)
> > st->codecpar->height = avio_rl16(s->pb);
> > time_base.den = avio_rl32(s->pb);
> > time_base.num = avio_rl32(s->pb);
> > - st->duration = avio_rl64(s->pb);
> > + st->duration = avio_rl32(s->pb);
> > + avio_rl32(s->pb); // unused
>
> avio_skip(s->pb, 4);
>
> This part is good either way.
>
> >
> > st->need_parsing = AVSTREAM_PARSE_HEADERS;
> >
> > diff --git a/libavformat/ivfenc.c b/libavformat/ivfenc.c
> > index adf72117e9..e135a78213 100644
> > --- a/libavformat/ivfenc.c
> > +++ b/libavformat/ivfenc.c
> > @@ -53,7 +53,7 @@ static int ivf_write_header(AVFormatContext *s)
> > avio_wl16(pb, par->height);
> > avio_wl32(pb, s->streams[0]->time_base.den);
> > avio_wl32(pb, s->streams[0]->time_base.num);
> > - avio_wl64(pb, 0xFFFFFFFFFFFFFFFFULL);
> > + avio_wl64(pb, 0xFFFFFFFFFFFFFFFFULL); // length is overwritten
> > at the end of muxing
> >
> > return 0;
> > }
> > @@ -83,7 +83,8 @@ static int ivf_write_trailer(AVFormatContext *s)
> > size_t end = avio_tell(pb);
> >
> > avio_seek(pb, 24, SEEK_SET);
> > - avio_wl64(pb, ctx->frame_cnt * ctx->sum_delta_pts / (ctx-
> > >frame_cnt - 1));
> > + // overwrite the "length" field (duration)
> > + avio_wl32(pb, ctx->frame_cnt * ctx->sum_delta_pts / (ctx-
> > >frame_cnt - 1));
>
> The value in the unused field will be 0xFFFFFFFF after this change
> instead of 0, since you're writing 32 bits as duration instead of 64
> where the high 32 bits (corresponding to the unused field) are
> zeroed.
> That means the ivf demuxer prior to this patch will read bogus
> duration
> values from ivf files created after this patch.
>
> Just leave the muxer as is.
>
> > avio_seek(pb, end, SEEK_SET);
> > }
> >
> >
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-devel
mailing list