Ronald S. Bultje:
> ---
>  libavformat/ivfenc.c | 11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/libavformat/ivfenc.c b/libavformat/ivfenc.c
> index 0951f56..e22625b 100644
> --- a/libavformat/ivfenc.c
> +++ b/libavformat/ivfenc.c
> @@ -23,7 +23,7 @@
>  
>  typedef struct IVFEncContext {
>      unsigned frame_cnt;
> -    uint64_t last_pts, sum_delta_pts;
> +    uint64_t last_pts, sum_delta_pts, first_duration;
>  } IVFEncContext;
>  
>  static int ivf_init(AVFormatContext *s)
> @@ -86,6 +86,8 @@ static int ivf_write_packet(AVFormatContext *s, AVPacket 
> *pkt)
>      avio_write(pb, pkt->data, pkt->size);
>      if (ctx->frame_cnt)
>          ctx->sum_delta_pts += pkt->pts - ctx->last_pts;
> +    else
> +        ctx->first_duration = pkt->duration;
>      ctx->frame_cnt++;
>      ctx->last_pts = pkt->pts;
>  
> @@ -97,12 +99,15 @@ static int ivf_write_trailer(AVFormatContext *s)
>      AVIOContext *pb = s->pb;
>      IVFEncContext *ctx = s->priv_data;
>  
> -    if ((pb->seekable & AVIO_SEEKABLE_NORMAL) && ctx->frame_cnt > 1) {
> +    if ((pb->seekable & AVIO_SEEKABLE_NORMAL) &&
> +        (ctx->frame_cnt > 1 || (ctx->frame_cnt == 1 && 
> ctx->first_duration))) {
>          int64_t end = avio_tell(pb);
>  
>          avio_seek(pb, 24, SEEK_SET);
>          // overwrite the "length" field (duration)
> -        avio_wl32(pb, ctx->frame_cnt * ctx->sum_delta_pts / (ctx->frame_cnt 
> - 1));
> +        avio_wl32(pb, ctx->frame_cnt > 1 ?
> +                  ctx->frame_cnt * ctx->sum_delta_pts / (ctx->frame_cnt - 1) 
> :
> +                  ctx->first_duration);
>          avio_wl32(pb, 0); // zero out unused bytes
>          avio_seek(pb, end, SEEK_SET);
>      }
> 
Shouldn't we not always use the duration of the last packet for the
duration and not only when it is the only packet?

- Andreas
_______________________________________________
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