[FFmpeg-devel] H.261 patch to detect Iframe in H.261 decoder

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Mon Feb 10 18:04:58 EET 2025


Jerome GORIN:
> -    skip_bits1(&s->gb); /* freeze picture release off */
> +    intra_flag = get_bits1(&s->gb); /* Intra 1 = I-frame, 0 = P-frame */
>  
> +    if (intra_flag){
> +        s->pict_type = AV_PICTURE_TYPE_I;
> +    }else{
> +        s->pict_type = AV_PICTURE_TYPE_P;
> +    }
> +    
>      format = get_bits1(&s->gb);
>  
>      // only 2 formats possible
> @@ -498,10 +504,8 @@ static int h261_decode_picture_header(H261DecContext *h)
>      if (skip_1stop_8data_bits(&s->gb) < 0)
>          return AVERROR_INVALIDDATA;
>  
> -    /* H.261 has no I-frames, but if we pass AV_PICTURE_TYPE_I for the first
> -     * frame, the codec crashes if it does not contain all I-blocks
> -     * (e.g. when a packet is lost). */
> -    s->pict_type = AV_PICTURE_TYPE_P;
> +
> +    

H.261 does not guarantee that a picture with the freeze picture release
bit set is an actual keyframe; the macroblocks can nevertheless be inter
coded (such a bitstream could cause a segfault with your patch because
it tries to access references that aren't there).

- Andreas



More information about the ffmpeg-devel mailing list