diff --git a/libavcodec/h263.h b/libavcodec/h263.h index e1e0dd7ded..dec660eaa2 100644 --- a/libavcodec/h263.h +++ b/libavcodec/h263.h @@ -64,6 +64,8 @@ extern uint8_t ff_mba_length[7]; extern uint8_t ff_h263_static_rl_table_store[2][2][2*MAX_RUN + MAX_LEVEL + 3]; +extern const enum AVPixelFormat ff_h263_hwaccel_pixfmt_list_420[]; + int ff_h263_decode_motion(MpegEncContext * s, int pred, int f_code); av_const int ff_h263_aspect_to_info(AVRational aspect); diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index 663fe90244..9714632006 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -738,6 +738,17 @@ av_log(avctx, AV_LOG_DEBUG, "%"PRId64"\n", rdtsc()-time); return (ret && (avctx->err_recognition & AV_EF_EXPLODE))?ret:get_consumed_bytes(s, buf_size); } +const enum AVPixelFormat ff_h263_hwaccel_pixfmt_list_420[] = { +#if CONFIG_VAAPI + AV_PIX_FMT_VAAPI_VLD, +#endif +#if CONFIG_VDPAU + AV_PIX_FMT_VDPAU, +#endif + AV_PIX_FMT_YUV420P, + AV_PIX_FMT_NONE +}; + AVCodec ff_h263_decoder = { .name = "h263", .type = AVMEDIA_TYPE_VIDEO, @@ -750,5 +761,5 @@ AVCodec ff_h263_decoder = { CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY, .flush = ff_mpeg_flush, .long_name = NULL_IF_CONFIG_SMALL("H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2"), - .pix_fmts = ff_hwaccel_pixfmt_list_420, + .pix_fmts = ff_h263_hwaccel_pixfmt_list_420, }; diff --git a/libavcodec/h264.c b/libavcodec/h264.c index 0b22613bdf..aa2b1a7910 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -61,6 +61,23 @@ static const uint8_t div6[QP_MAX_NUM + 1] = { 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, }; +static const enum AVPixelFormat h264_hwaccel_pixfmt_list_420[] = { +#if CONFIG_H264_DXVA2_HWACCEL + AV_PIX_FMT_DXVA2_VLD, +#endif +#if CONFIG_H264_VAAPI_HWACCEL + AV_PIX_FMT_VAAPI_VLD, +#endif +#if CONFIG_H264_VDA_HWACCEL + AV_PIX_FMT_VDA_VLD, +#endif +#if CONFIG_H264_VDPAU_HWACCEL + AV_PIX_FMT_VDPAU, +#endif + AV_PIX_FMT_YUV420P, + AV_PIX_FMT_NONE +}; + static const enum AVPixelFormat hwaccel_pixfmt_list_h264_jpeg_420[] = { #if CONFIG_H264_DXVA2_HWACCEL AV_PIX_FMT_DXVA2_VLD, @@ -2823,7 +2840,7 @@ static enum PixelFormat get_pixel_format(H264Context *h) h->avctx->codec->pix_fmts : h->avctx->color_range == AVCOL_RANGE_JPEG ? hwaccel_pixfmt_list_h264_jpeg_420 : - ff_hwaccel_pixfmt_list_420); + h264_hwaccel_pixfmt_list_420); } break; default: diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index 4df51a22a9..8aa31222b3 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -1176,6 +1176,20 @@ static const enum AVPixelFormat pixfmt_xvmc_mpg2_420[] = { AV_PIX_FMT_XVMC_MPEG2_MC, AV_PIX_FMT_NONE }; +static const enum AVPixelFormat mpeg12_hwaccel_pixfmt_list_420[] = { +#if CONFIG_MPEG2_DXVA2_HWACCEL + AV_PIX_FMT_DXVA2_VLD, +#endif +#if CONFIG_MPEG2_VAAPI_HWACCEL + AV_PIX_FMT_VAAPI_VLD, +#endif +#if CONFIG_MPEG1_VDPAU_HWACCEL | CONFIG_MPEG2_VDPAU_HWACCEL + AV_PIX_FMT_VDPAU, +#endif + AV_PIX_FMT_YUV420P, + AV_PIX_FMT_NONE +}; + static enum AVPixelFormat mpeg_get_pixelformat(AVCodecContext *avctx) { Mpeg1Context *s1 = avctx->priv_data; @@ -1190,7 +1204,7 @@ static enum AVPixelFormat mpeg_get_pixelformat(AVCodecContext *avctx) return AV_PIX_FMT_VDPAU_MPEG2; } else { if (s->chroma_format < 2) - return avctx->get_format(avctx, ff_hwaccel_pixfmt_list_420); + return avctx->get_format(avctx, mpeg12_hwaccel_pixfmt_list_420); else if (s->chroma_format == 2) return AV_PIX_FMT_YUV422P; else diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c index ebc74a74b6..3f889932d2 100644 --- a/libavcodec/mpeg4videodec.c +++ b/libavcodec/mpeg4videodec.c @@ -2270,7 +2270,7 @@ AVCodec ff_mpeg4_decoder = { CODEC_CAP_FRAME_THREADS, .flush = ff_mpeg_flush, .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2"), - .pix_fmts = ff_hwaccel_pixfmt_list_420, + .pix_fmts = ff_h263_hwaccel_pixfmt_list_420, .profiles = NULL_IF_CONFIG_SMALL(mpeg4_video_profiles), .update_thread_context = ONLY_IF_THREADS_ENABLED(ff_mpeg_update_thread_context), }; diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index 08d4cbbf8f..96cb6a7ae5 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -130,23 +130,6 @@ const enum AVPixelFormat ff_pixfmt_list_420[] = { AV_PIX_FMT_NONE }; -const enum AVPixelFormat ff_hwaccel_pixfmt_list_420[] = { -#if CONFIG_DXVA2 - AV_PIX_FMT_DXVA2_VLD, -#endif -#if CONFIG_VAAPI - AV_PIX_FMT_VAAPI_VLD, -#endif -#if CONFIG_VDA - AV_PIX_FMT_VDA_VLD, -#endif -#if CONFIG_VDPAU - AV_PIX_FMT_VDPAU, -#endif - AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE -}; - static void mpeg_er_decode_mb(void *opaque, int ref, int mv_dir, int mv_type, int (*mv)[2][4][2], int mb_x, int mb_y, int mb_intra, int mb_skipped) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index cd11ecd92c..7e031db821 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -802,7 +802,6 @@ void ff_MPV_motion(MpegEncContext *s, int ff_alloc_picture(MpegEncContext *s, Picture *pic, int shared); extern const enum AVPixelFormat ff_pixfmt_list_420[]; -extern const enum AVPixelFormat ff_hwaccel_pixfmt_list_420[]; /** * permute block according to permuatation. diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c index 403bac8fff..6a76b1dc06 100644 --- a/libavcodec/vc1dec.c +++ b/libavcodec/vc1dec.c @@ -5687,6 +5687,20 @@ static const AVProfile profiles[] = { { FF_PROFILE_UNKNOWN }, }; +static const enum AVPixelFormat vc1_hwaccel_pixfmt_list_420[] = { +#if CONFIG_DXVA2 + AV_PIX_FMT_DXVA2_VLD, +#endif +#if CONFIG_VAAPI + AV_PIX_FMT_VAAPI_VLD, +#endif +#if CONFIG_VDPAU + AV_PIX_FMT_VDPAU, +#endif + AV_PIX_FMT_YUV420P, + AV_PIX_FMT_NONE +}; + AVCodec ff_vc1_decoder = { .name = "vc1", .type = AVMEDIA_TYPE_VIDEO, @@ -5698,7 +5712,7 @@ AVCodec ff_vc1_decoder = { .flush = ff_mpeg_flush, .capabilities = CODEC_CAP_DR1 | CODEC_CAP_DELAY, .long_name = NULL_IF_CONFIG_SMALL("SMPTE VC-1"), - .pix_fmts = ff_hwaccel_pixfmt_list_420, + .pix_fmts = vc1_hwaccel_pixfmt_list_420, .profiles = NULL_IF_CONFIG_SMALL(profiles) }; @@ -5714,7 +5728,7 @@ AVCodec ff_wmv3_decoder = { .flush = ff_mpeg_flush, .capabilities = CODEC_CAP_DR1 | CODEC_CAP_DELAY, .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 9"), - .pix_fmts = ff_hwaccel_pixfmt_list_420, + .pix_fmts = vc1_hwaccel_pixfmt_list_420, .profiles = NULL_IF_CONFIG_SMALL(profiles) }; #endif