On 10/1/2019 2:05 PM, Raphaël Zumer wrote:
> Signed-off-by: Raphaël Zumer <rzu...@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@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to