X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fmpeg12dec.c;h=85bb7b0705856247bfdb00eb9ee7a8b4a094e8ac;hb=dd2b0c1cde152a9898d70b336a216ffac54103f7;hp=25e281dbc3367d3768be20bd4f945b31c27dcdf9;hpb=76aec9e6b4a2aabe659013198620276822420ad9;p=ffmpeg diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c index 25e281dbc33..85bb7b07058 100644 --- a/libavcodec/mpeg12dec.c +++ b/libavcodec/mpeg12dec.c @@ -56,6 +56,8 @@ typedef struct Mpeg1Context { int has_stereo3d; uint8_t *a53_caption; int a53_caption_size; + uint8_t afd; + int has_afd; int slice_count; int save_aspect_info; int save_width, save_height, save_progressive_seq; @@ -1659,6 +1661,18 @@ static int mpeg_field_start(MpegEncContext *s, const uint8_t *buf, int buf_size) *stereo = s1->stereo3d; s1->has_stereo3d = 0; } + + if (s1->has_afd) { + AVFrameSideData *sd = + av_frame_new_side_data(s->current_picture_ptr->f, + AV_FRAME_DATA_AFD, 1); + if (!sd) + return AVERROR(ENOMEM); + + *sd->data = s1->afd; + s1->has_afd = 0; + } + if (HAVE_THREADS && (avctx->active_thread_type & FF_THREAD_FRAME)) ff_thread_finish_setup(avctx); } else { // second field @@ -2264,6 +2278,7 @@ static void mpeg_decode_user_data(AVCodecContext *avctx, { Mpeg1Context *s = avctx->priv_data; const uint8_t *buf_end = p + buf_size; + Mpeg1Context *s1 = avctx->priv_data; if (buf_size > 29){ int i; @@ -2290,7 +2305,13 @@ static void mpeg_decode_user_data(AVCodecContext *avctx, if (flags & 0x40) { if (buf_end - p < 1) return; +#if FF_API_AFD +FF_DISABLE_DEPRECATION_WARNINGS avctx->dtg_active_format = p[0] & 0x0f; +FF_ENABLE_DEPRECATION_WARNINGS +#endif /* FF_API_AFD */ + s1->has_afd = 1; + s1->afd = p[0] & 0x0f; } } else if (buf_end - p >= 6 && p[0] == 'J' && p[1] == 'P' && p[2] == '3' && p[3] == 'D' && @@ -2302,7 +2323,6 @@ static void mpeg_decode_user_data(AVCodecContext *avctx, S3D_video_format_type == 0x04 || S3D_video_format_type == 0x08 || S3D_video_format_type == 0x23) { - Mpeg1Context *s1 = avctx->priv_data; s1->has_stereo3d = 1;