lavc: Add hardware config metadata for decoders supporting hardware output

This includes a pointer to the associated hwaccel for decoders using
hwaccels - these will be used later to implement the hwaccel setup
without needing a global list.

Also added is a new file listing all hwaccels as external declarations -
this will be used later to generate the hwaccel list at configure time.
This commit is contained in:
Mark Thompson 2017-10-26 00:18:40 +01:00
parent 24cc0a53e9
commit 758fbc54fe
16 changed files with 372 additions and 1 deletions

View File

@ -32,6 +32,7 @@
#include "avcodec.h"
#include "decode.h"
#include "hwaccel.h"
#include "internal.h"
typedef struct CuvidContext
@ -1094,6 +1095,19 @@ static const AVOption options[] = {
{ NULL }
};
static const AVCodecHWConfigInternal *cuvid_hw_configs[] = {
&(const AVCodecHWConfigInternal) {
.public = {
.pix_fmt = AV_PIX_FMT_CUDA,
.methods = AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX |
AV_CODEC_HW_CONFIG_METHOD_INTERNAL,
.device_type = AV_HWDEVICE_TYPE_CUDA
},
.hwaccel = NULL,
},
NULL
};
#define DEFINE_CUVID_CODEC(x, X) \
static const AVClass x##_cuvid_class = { \
.class_name = #x "_cuvid", \
@ -1127,6 +1141,7 @@ static const AVOption options[] = {
AV_PIX_FMT_P010, \
AV_PIX_FMT_P016, \
AV_PIX_FMT_NONE }, \
.hw_configs = cuvid_hw_configs, \
};
#if CONFIG_HEVC_CUVID_DECODER

View File

@ -33,6 +33,7 @@
#include "flv.h"
#include "h263.h"
#include "h263_parser.h"
#include "hwaccel.h"
#include "internal.h"
#include "mpeg_er.h"
#include "mpeg4video.h"
@ -759,4 +760,16 @@ AVCodec ff_h263p_decoder = {
.flush = ff_mpeg_flush,
.max_lowres = 3,
.pix_fmts = ff_h263_hwaccel_pixfmt_list_420,
.hw_configs = (const AVCodecHWConfigInternal*[]) {
#if CONFIG_H263_VAAPI_HWACCEL
HWACCEL_VAAPI(h263),
#endif
#if CONFIG_MPEG4_VDPAU_HWACCEL
HWACCEL_VDPAU(mpeg4),
#endif
#if CONFIG_H263_VIDEOTOOLBOX_HWACCEL
HWACCEL_VIDEOTOOLBOX(h263),
#endif
NULL
},
};

View File

@ -47,6 +47,7 @@
#include "h264_mvpred.h"
#include "h264_ps.h"
#include "golomb.h"
#include "hwaccel.h"
#include "mathops.h"
#include "me_cmp.h"
#include "mpegutils.h"
@ -1059,6 +1060,30 @@ AVCodec ff_h264_decoder = {
.capabilities = /*AV_CODEC_CAP_DRAW_HORIZ_BAND |*/ AV_CODEC_CAP_DR1 |
AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS |
AV_CODEC_CAP_FRAME_THREADS,
.hw_configs = (const AVCodecHWConfigInternal*[]) {
#if CONFIG_H264_DXVA2_HWACCEL
HWACCEL_DXVA2(h264),
#endif
#if CONFIG_H264_D3D11VA_HWACCEL
HWACCEL_D3D11VA(h264),
#endif
#if CONFIG_H264_D3D11VA2_HWACCEL
HWACCEL_D3D11VA2(h264),
#endif
#if CONFIG_H264_NVDEC_HWACCEL
HWACCEL_NVDEC(h264),
#endif
#if CONFIG_H264_VAAPI_HWACCEL
HWACCEL_VAAPI(h264),
#endif
#if CONFIG_H264_VDPAU_HWACCEL
HWACCEL_VDPAU(h264),
#endif
#if CONFIG_H264_VIDEOTOOLBOX_HWACCEL
HWACCEL_VIDEOTOOLBOX(h264),
#endif
NULL
},
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_EXPORTS_CROPPING,
.flush = flush_dpb,
.init_thread_copy = ONLY_IF_THREADS_ENABLED(decode_init_thread_copy),

View File

@ -41,6 +41,7 @@
#include "hevc_data.h"
#include "hevc_parse.h"
#include "hevcdec.h"
#include "hwaccel.h"
#include "profiles.h"
const uint8_t ff_hevc_pel_weight[65] = { [2] = 0, [4] = 1, [6] = 2, [8] = 3, [12] = 4, [16] = 5, [24] = 6, [32] = 7, [48] = 8, [64] = 9 };
@ -3510,4 +3511,28 @@ AVCodec ff_hevc_decoder = {
AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_FRAME_THREADS,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_EXPORTS_CROPPING,
.profiles = NULL_IF_CONFIG_SMALL(ff_hevc_profiles),
.hw_configs = (const AVCodecHWConfigInternal*[]) {
#if CONFIG_HEVC_DXVA2_HWACCEL
HWACCEL_DXVA2(hevc),
#endif
#if CONFIG_HEVC_D3D11VA_HWACCEL
HWACCEL_D3D11VA(hevc),
#endif
#if CONFIG_HEVC_D3D11VA2_HWACCEL
HWACCEL_D3D11VA2(hevc),
#endif
#if CONFIG_HEVC_NVDEC_HWACCEL
HWACCEL_NVDEC(hevc),
#endif
#if CONFIG_HEVC_VAAPI_HWACCEL
HWACCEL_VAAPI(hevc),
#endif
#if CONFIG_HEVC_VDPAU_HWACCEL
HWACCEL_VDPAU(hevc),
#endif
#if CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL
HWACCEL_VIDEOTOOLBOX(hevc),
#endif
NULL
},
};

View File

@ -20,6 +20,7 @@
#define AVCODEC_HWACCEL_H
#include "avcodec.h"
#include "hwaccels.h"
#define HWACCEL_CAP_ASYNC_SAFE (1 << 0)
@ -39,4 +40,55 @@ typedef struct AVCodecHWConfigInternal {
} AVCodecHWConfigInternal;
// These macros are used to simplify AVCodecHWConfigInternal definitions.
#define HW_CONFIG_HWACCEL(format, device, name) \
&(const AVCodecHWConfigInternal) { \
.public = { \
.pix_fmt = AV_PIX_FMT_ ## format, \
.methods = AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX | \
AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, \
.device_type = AV_HWDEVICE_TYPE_ ## device, \
}, \
.hwaccel = &name, \
}
#define HW_CONFIG_INTERNAL(format) \
&(const AVCodecHWConfigInternal) { \
.public = { \
.pix_fmt = AV_PIX_FMT_ ## format, \
.methods = AV_CODEC_HW_CONFIG_METHOD_INTERNAL, \
.device_type = AV_HWDEVICE_TYPE_NONE, \
}, \
.hwaccel = NULL, \
}
#define HW_CONFIG_AD_HOC_HWACCEL(format, name) \
&(const AVCodecHWConfigInternal) { \
.public = { \
.pix_fmt = AV_PIX_FMT_ ## format, \
.methods = AV_CODEC_HW_CONFIG_METHOD_AD_HOC, \
.device_type = AV_HWDEVICE_TYPE_NONE, \
}, \
.hwaccel = &name, \
}
#define HWACCEL_DXVA2(codec) \
HW_CONFIG_HWACCEL(DXVA2_VLD, DXVA2, ff_ ## codec ## _dxva2_hwaccel)
#define HWACCEL_D3D11VA2(codec) \
HW_CONFIG_HWACCEL(D3D11, D3D11VA, ff_ ## codec ## _d3d11va2_hwaccel)
#define HWACCEL_NVDEC(codec) \
HW_CONFIG_HWACCEL(CUDA, CUDA, ff_ ## codec ## _nvdec_hwaccel)
#define HWACCEL_VAAPI(codec) \
HW_CONFIG_HWACCEL(VAAPI, VAAPI, ff_ ## codec ## _vaapi_hwaccel)
#define HWACCEL_VDPAU(codec) \
HW_CONFIG_HWACCEL(VDPAU, VDPAU, ff_ ## codec ## _vdpau_hwaccel)
#define HWACCEL_VIDEOTOOLBOX(codec) \
HW_CONFIG_HWACCEL(VIDEOTOOLBOX, VIDEOTOOLBOX, ff_ ## codec ## _videotoolbox_hwaccel)
#define HWACCEL_D3D11VA(codec) \
HW_CONFIG_AD_HOC_HWACCEL(D3D11VA_VLD, ff_ ## codec ## _d3d11va_hwaccel)
#define HWACCEL_XVMC(codec) \
HW_CONFIG_AD_HOC_HWACCEL(XVMC, ff_ ## codec ## _xvmc_hwaccel)
#endif /* AVCODEC_HWACCEL_H */

74
libavcodec/hwaccels.h Normal file
View File

@ -0,0 +1,74 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVCODEC_HWACCELS_H
#define AVCODEC_HWACCELS_H
#include "avcodec.h"
extern AVHWAccel ff_h263_vaapi_hwaccel;
extern AVHWAccel ff_h263_videotoolbox_hwaccel;
extern AVHWAccel ff_h264_d3d11va_hwaccel;
extern AVHWAccel ff_h264_d3d11va2_hwaccel;
extern AVHWAccel ff_h264_dxva2_hwaccel;
extern AVHWAccel ff_h264_nvdec_hwaccel;
extern AVHWAccel ff_h264_vaapi_hwaccel;
extern AVHWAccel ff_h264_vdpau_hwaccel;
extern AVHWAccel ff_h264_videotoolbox_hwaccel;
extern AVHWAccel ff_hevc_d3d11va_hwaccel;
extern AVHWAccel ff_hevc_d3d11va2_hwaccel;
extern AVHWAccel ff_hevc_dxva2_hwaccel;
extern AVHWAccel ff_hevc_nvdec_hwaccel;
extern AVHWAccel ff_hevc_vaapi_hwaccel;
extern AVHWAccel ff_hevc_vdpau_hwaccel;
extern AVHWAccel ff_hevc_videotoolbox_hwaccel;
extern AVHWAccel ff_mpeg1_nvdec_hwaccel;
extern AVHWAccel ff_mpeg1_vdpau_hwaccel;
extern AVHWAccel ff_mpeg1_videotoolbox_hwaccel;
extern AVHWAccel ff_mpeg1_xvmc_hwaccel;
extern AVHWAccel ff_mpeg2_d3d11va_hwaccel;
extern AVHWAccel ff_mpeg2_d3d11va2_hwaccel;
extern AVHWAccel ff_mpeg2_nvdec_hwaccel;
extern AVHWAccel ff_mpeg2_dxva2_hwaccel;
extern AVHWAccel ff_mpeg2_vaapi_hwaccel;
extern AVHWAccel ff_mpeg2_vdpau_hwaccel;
extern AVHWAccel ff_mpeg2_videotoolbox_hwaccel;
extern AVHWAccel ff_mpeg2_xvmc_hwaccel;
extern AVHWAccel ff_mpeg4_nvdec_hwaccel;
extern AVHWAccel ff_mpeg4_vaapi_hwaccel;
extern AVHWAccel ff_mpeg4_vdpau_hwaccel;
extern AVHWAccel ff_mpeg4_videotoolbox_hwaccel;
extern AVHWAccel ff_vc1_d3d11va_hwaccel;
extern AVHWAccel ff_vc1_d3d11va2_hwaccel;
extern AVHWAccel ff_vc1_dxva2_hwaccel;
extern AVHWAccel ff_vc1_nvdec_hwaccel;
extern AVHWAccel ff_vc1_vaapi_hwaccel;
extern AVHWAccel ff_vc1_vdpau_hwaccel;
extern AVHWAccel ff_vp9_d3d11va_hwaccel;
extern AVHWAccel ff_vp9_d3d11va2_hwaccel;
extern AVHWAccel ff_vp9_dxva2_hwaccel;
extern AVHWAccel ff_vp9_nvdec_hwaccel;
extern AVHWAccel ff_vp9_vaapi_hwaccel;
extern AVHWAccel ff_wmv3_d3d11va_hwaccel;
extern AVHWAccel ff_wmv3_d3d11va2_hwaccel;
extern AVHWAccel ff_wmv3_dxva2_hwaccel;
extern AVHWAccel ff_wmv3_nvdec_hwaccel;
extern AVHWAccel ff_wmv3_vaapi_hwaccel;
extern AVHWAccel ff_wmv3_vdpau_hwaccel;
#endif /* AVCODEC_HWACCELS_H */

View File

@ -515,6 +515,18 @@ static void mediacodec_decode_flush(AVCodecContext *avctx)
ff_mediacodec_dec_flush(avctx, s->ctx);
}
static const AVCodecHWConfigInternal *mediacodec_hw_configs[] = {
&(const AVCodecHWConfigInternal) {
.public = {
.pix_fmt = AV_PIX_FMT_MEDIACODEC,
.methods = AV_CODEC_HW_CONFIG_METHOD_AD_HOC,
.device_type = AV_HWDEVICE_TYPE_NONE,
},
.hwaccel = NULL,
},
NULL
};
#if CONFIG_H264_MEDIACODEC_DECODER
AVCodec ff_h264_mediacodec_decoder = {
.name = "h264_mediacodec",
@ -529,6 +541,7 @@ AVCodec ff_h264_mediacodec_decoder = {
.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING,
.caps_internal = FF_CODEC_CAP_SETS_PKT_DTS,
.bsfs = "h264_mp4toannexb",
.hw_configs = mediacodec_hw_configs,
};
#endif
@ -546,6 +559,7 @@ AVCodec ff_hevc_mediacodec_decoder = {
.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING,
.caps_internal = FF_CODEC_CAP_SETS_PKT_DTS,
.bsfs = "hevc_mp4toannexb",
.hw_configs = mediacodec_hw_configs,
};
#endif
@ -562,6 +576,7 @@ AVCodec ff_mpeg2_mediacodec_decoder = {
.close = mediacodec_decode_close,
.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING,
.caps_internal = FF_CODEC_CAP_SETS_PKT_DTS,
.hw_configs = mediacodec_hw_configs,
};
#endif
@ -578,6 +593,7 @@ AVCodec ff_mpeg4_mediacodec_decoder = {
.close = mediacodec_decode_close,
.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING,
.caps_internal = FF_CODEC_CAP_SETS_PKT_DTS,
.hw_configs = mediacodec_hw_configs,
};
#endif
@ -594,6 +610,7 @@ AVCodec ff_vp8_mediacodec_decoder = {
.close = mediacodec_decode_close,
.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING,
.caps_internal = FF_CODEC_CAP_SETS_PKT_DTS,
.hw_configs = mediacodec_hw_configs,
};
#endif
@ -610,5 +627,6 @@ AVCodec ff_vp9_mediacodec_decoder = {
.close = mediacodec_decode_close,
.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING,
.caps_internal = FF_CODEC_CAP_SETS_PKT_DTS,
.hw_configs = mediacodec_hw_configs,
};
#endif

View File

@ -34,6 +34,7 @@
#include <stdatomic.h>
#include "avcodec.h"
#include "hwaccel.h"
#include "internal.h"
#include "libavutil/avassert.h"
#include "libavutil/buffer.h"
@ -835,6 +836,11 @@ AVHWAccel ff_vc1_mmal_hwaccel = {
.pix_fmt = AV_PIX_FMT_MMAL,
};
static const AVCodecHWConfigInternal *mmal_hw_configs[] = {
HW_CONFIG_INTERNAL(MMAL),
NULL
};
static const AVOption options[]={
{"extra_buffers", "extra buffers", offsetof(MMALDecodeContext, extra_buffers), AV_OPT_TYPE_INT, {.i64 = 10}, 0, 256, 0},
{"extra_decoder_buffers", "extra MMAL internal buffered frames", offsetof(MMALDecodeContext, extra_decoder_buffers), AV_OPT_TYPE_INT, {.i64 = 10}, 0, 256, 0},
@ -867,6 +873,7 @@ static const AVOption options[]={
.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_MMAL, \
AV_PIX_FMT_YUV420P, \
AV_PIX_FMT_NONE}, \
.hw_configs = mmal_hw_configs, \
};
FFMMAL_DEC(h264, AV_CODEC_ID_H264)

View File

@ -36,6 +36,7 @@
#include "avcodec.h"
#include "bytestream.h"
#include "error_resilience.h"
#include "hwaccel.h"
#include "idctdsp.h"
#include "internal.h"
#include "mpeg_er.h"
@ -2890,7 +2891,22 @@ AVCodec ff_mpeg1video_decoder = {
.caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM,
.flush = flush,
.max_lowres = 3,
.update_thread_context = ONLY_IF_THREADS_ENABLED(mpeg_decode_update_thread_context)
.update_thread_context = ONLY_IF_THREADS_ENABLED(mpeg_decode_update_thread_context),
.hw_configs = (const AVCodecHWConfigInternal*[]) {
#if CONFIG_MPEG2_NVDEC_HWACCEL
HWACCEL_NVDEC(mpeg1),
#endif
#if CONFIG_MPEG1_VDPAU_HWACCEL
HWACCEL_VDPAU(mpeg1),
#endif
#if CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL
HWACCEL_VIDEOTOOLBOX(mpeg1),
#endif
#if CONFIG_MPEG1_XVMC_HWACCEL
HWACCEL_XVMC(mpeg1),
#endif
NULL
},
};
AVCodec ff_mpeg2video_decoder = {
@ -2909,6 +2925,33 @@ AVCodec ff_mpeg2video_decoder = {
.flush = flush,
.max_lowres = 3,
.profiles = NULL_IF_CONFIG_SMALL(ff_mpeg2_video_profiles),
.hw_configs = (const AVCodecHWConfigInternal*[]) {
#if CONFIG_MPEG2_DXVA2_HWACCEL
HWACCEL_DXVA2(mpeg2),
#endif
#if CONFIG_MPEG2_D3D11VA_HWACCEL
HWACCEL_D3D11VA(mpeg2),
#endif
#if CONFIG_MPEG2_D3D11VA2_HWACCEL
HWACCEL_D3D11VA2(mpeg2),
#endif
#if CONFIG_MPEG2_NVDEC_HWACCEL
HWACCEL_NVDEC(mpeg2),
#endif
#if CONFIG_MPEG2_VAAPI_HWACCEL
HWACCEL_VAAPI(mpeg2),
#endif
#if CONFIG_MPEG2_VDPAU_HWACCEL
HWACCEL_VDPAU(mpeg2),
#endif
#if CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL
HWACCEL_VIDEOTOOLBOX(mpeg2),
#endif
#if CONFIG_MPEG2_XVMC_HWACCEL
HWACCEL_XVMC(mpeg2),
#endif
NULL
},
};
//legacy decoder

View File

@ -25,6 +25,7 @@
#include "libavutil/internal.h"
#include "libavutil/opt.h"
#include "error_resilience.h"
#include "hwaccel.h"
#include "idctdsp.h"
#include "internal.h"
#include "mpegutils.h"
@ -2855,4 +2856,19 @@ AVCodec ff_mpeg4_decoder = {
.profiles = NULL_IF_CONFIG_SMALL(ff_mpeg4_video_profiles),
.update_thread_context = ONLY_IF_THREADS_ENABLED(mpeg4_update_thread_context),
.priv_class = &mpeg4_class,
.hw_configs = (const AVCodecHWConfigInternal*[]) {
#if CONFIG_MPEG2_NVDEC_HWACCEL
HWACCEL_NVDEC(mpeg4),
#endif
#if CONFIG_MPEG4_VAAPI_HWACCEL
HWACCEL_VAAPI(mpeg4),
#endif
#if CONFIG_MPEG4_VDPAU_HWACCEL
HWACCEL_VDPAU(mpeg4),
#endif
#if CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL
HWACCEL_VIDEOTOOLBOX(mpeg4),
#endif
NULL
},
};

View File

@ -41,6 +41,19 @@
#include "qsv_internal.h"
#include "qsvdec.h"
const AVCodecHWConfigInternal *ff_qsv_hw_configs[] = {
&(const AVCodecHWConfigInternal) {
.public = {
.pix_fmt = AV_PIX_FMT_QSV,
.methods = AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX |
AV_CODEC_HW_CONFIG_METHOD_AD_HOC,
.device_type = AV_HWDEVICE_TYPE_QSV,
},
.hwaccel = NULL,
},
NULL
};
static int qsv_init_session(AVCodecContext *avctx, QSVContext *q, mfxSession session,
AVBufferRef *hw_frames_ref, AVBufferRef *hw_device_ref)
{

View File

@ -33,6 +33,7 @@
#include "libavutil/pixfmt.h"
#include "avcodec.h"
#include "hwaccel.h"
#include "qsv_internal.h"
typedef struct QSVContext {
@ -70,6 +71,8 @@ typedef struct QSVContext {
int nb_ext_buffers;
} QSVContext;
extern const AVCodecHWConfigInternal *ff_qsv_hw_configs[];
int ff_qsv_process_data(AVCodecContext *avctx, QSVContext *q,
AVFrame *frame, int *got_frame, AVPacket *pkt);

View File

@ -226,6 +226,7 @@ AVCodec ff_hevc_qsv_decoder = {
AV_PIX_FMT_P010,
AV_PIX_FMT_QSV,
AV_PIX_FMT_NONE },
.hw_configs = ff_qsv_hw_configs,
.bsfs = "hevc_mp4toannexb",
};
#endif
@ -268,6 +269,7 @@ AVCodec ff_h264_qsv_decoder = {
AV_PIX_FMT_P010,
AV_PIX_FMT_QSV,
AV_PIX_FMT_NONE },
.hw_configs = ff_qsv_hw_configs,
.bsfs = "h264_mp4toannexb",
};
#endif

View File

@ -190,6 +190,7 @@ AVCodec ff_mpeg2_qsv_decoder = {
.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12,
AV_PIX_FMT_QSV,
AV_PIX_FMT_NONE },
.hw_configs = ff_qsv_hw_configs,
};
#endif
@ -225,6 +226,7 @@ AVCodec ff_vc1_qsv_decoder = {
.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12,
AV_PIX_FMT_QSV,
AV_PIX_FMT_NONE },
.hw_configs = ff_qsv_hw_configs,
};
#endif
@ -260,5 +262,6 @@ AVCodec ff_vp8_qsv_decoder = {
.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12,
AV_PIX_FMT_QSV,
AV_PIX_FMT_NONE },
.hw_configs = ff_qsv_hw_configs,
};
#endif

View File

@ -29,6 +29,7 @@
#include "avcodec.h"
#include "blockdsp.h"
#include "get_bits.h"
#include "hwaccel.h"
#include "internal.h"
#include "mpeg_er.h"
#include "mpegvideo.h"
@ -1144,6 +1145,27 @@ AVCodec ff_vc1_decoder = {
.flush = ff_mpeg_flush,
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY,
.pix_fmts = vc1_hwaccel_pixfmt_list_420,
.hw_configs = (const AVCodecHWConfigInternal*[]) {
#if CONFIG_WMV3_DXVA2_HWACCEL
HWACCEL_DXVA2(wmv3),
#endif
#if CONFIG_WMV3_D3D11VA_HWACCEL
HWACCEL_D3D11VA(wmv3),
#endif
#if CONFIG_WMV3_D3D11VA2_HWACCEL
HWACCEL_D3D11VA2(wmv3),
#endif
#if CONFIG_WMV3_NVDEC_HWACCEL
HWACCEL_NVDEC(wmv3),
#endif
#if CONFIG_WMV3_VAAPI_HWACCEL
HWACCEL_VAAPI(wmv3),
#endif
#if CONFIG_WMV3_VDPAU_HWACCEL
HWACCEL_VDPAU(wmv3),
#endif
NULL
},
.profiles = NULL_IF_CONFIG_SMALL(ff_vc1_profiles)
};
@ -1160,6 +1182,27 @@ AVCodec ff_wmv3_decoder = {
.flush = ff_mpeg_flush,
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY,
.pix_fmts = vc1_hwaccel_pixfmt_list_420,
.hw_configs = (const AVCodecHWConfigInternal*[]) {
#if CONFIG_VC1_DXVA2_HWACCEL
HWACCEL_DXVA2(wmv3),
#endif
#if CONFIG_VC1_D3D11VA_HWACCEL
HWACCEL_D3D11VA(wmv3),
#endif
#if CONFIG_VC1_D3D11VA2_HWACCEL
HWACCEL_D3D11VA2(wmv3),
#endif
#if CONFIG_VC1_NVDEC_HWACCEL
HWACCEL_NVDEC(wmv3),
#endif
#if CONFIG_VC1_VAAPI_HWACCEL
HWACCEL_VAAPI(wmv3),
#endif
#if CONFIG_VC1_VDPAU_HWACCEL
HWACCEL_VDPAU(wmv3),
#endif
NULL
},
.profiles = NULL_IF_CONFIG_SMALL(ff_vc1_profiles)
};
#endif

View File

@ -23,6 +23,7 @@
#include "avcodec.h"
#include "get_bits.h"
#include "hwaccel.h"
#include "internal.h"
#include "profiles.h"
#include "thread.h"
@ -1794,4 +1795,22 @@ AVCodec ff_vp9_decoder = {
.init_thread_copy = ONLY_IF_THREADS_ENABLED(vp9_decode_init_thread_copy),
.update_thread_context = ONLY_IF_THREADS_ENABLED(vp9_decode_update_thread_context),
.profiles = NULL_IF_CONFIG_SMALL(ff_vp9_profiles),
.hw_configs = (const AVCodecHWConfigInternal*[]) {
#if CONFIG_VP9_DXVA2_HWACCEL
HWACCEL_DXVA2(vp9),
#endif
#if CONFIG_VP9_D3D11VA_HWACCEL
HWACCEL_D3D11VA(vp9),
#endif
#if CONFIG_VP9_D3D11VA2_HWACCEL
HWACCEL_D3D11VA2(vp9),
#endif
#if CONFIG_VP9_NVDEC_HWACCEL
HWACCEL_NVDEC(vp9),
#endif
#if CONFIG_VP9_VAAPI_HWACCEL
HWACCEL_VAAPI(vp9),
#endif
NULL
},
};