[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