[FFmpeg-devel] [PATCH] avcodec/utils: fix check for invalid timebase when decoding subtitles

Andreas Cadhalpun andreas.cadhalpun at googlemail.com
Sun Dec 27 20:29:16 CET 2015


On 27.12.2015 20:10, Hendrik Leppkes wrote:
> Invalid timebases have a zero numerator, not denominator.

A timebase with zero numerator is probably invalid, but a timebase
with zero denominator is not even well defined.
So this comment doesn't seem quite right.

> Fixes a integer divison by zero.
> ---
>  libavcodec/utils.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/libavcodec/utils.c b/libavcodec/utils.c
> index 19f3f0a..33295ed 100644
> --- a/libavcodec/utils.c
> +++ b/libavcodec/utils.c
> @@ -2435,7 +2435,7 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
>          } else {
>              avctx->internal->pkt = &pkt_recoded;
>  
> -            if (avctx->pkt_timebase.den && avpkt->pts != AV_NOPTS_VALUE)
> +            if (avctx->pkt_timebase.num && avpkt->pts != AV_NOPTS_VALUE)
>                  sub->pts = av_rescale_q(avpkt->pts,
>                                          avctx->pkt_timebase, AV_TIME_BASE_Q);
>              ret = avctx->codec->decode(avctx, sub, got_sub_ptr, &pkt_recoded);
> 

If avctx->pkt_timebase.den is 0, calling av_rescale_q here will trigger the
av_assert2(c > 0) in av_rescale_rnd, so removing this check isn't good.

Why not check for both num and den?

Best regards,
Andreas


More information about the ffmpeg-devel mailing list