Message ID | 20171214150259.3897-1-nfxjfg@googlemail.com |
---|---|
State | New |
Headers | show |
On Thu, Dec 14, 2017 at 7:10 AM wm4 <nfxjfg@googlemail.com> wrote: > Explicitly identify decoder/encoder wrappers with a common name. This > saves API users from guessing by the name suffix. For example, they > don't have to guess that "h264_qsv" is the h264 QSV implementation, and > instead they can just check the AVCodec .codec and .wrapper_name fields. > > Explicitly mark AVCodec entries that are hardware decoders or most > likely hardware decoders with new AV_CODEC_CAPs. The purpose is allowing > API users listing hardware decoders in a more generic way. The proposed > AVCodecHWConfig does not provide this information fully, because it's > concerned with decoder configuration, not information about the fact > whether the hardware is used or not. > > AV_CODEC_CAP_HYBRID exists specifically for QSV, which can have software > implementations in case the hardware is not capable. > > Based on a patch by Philip Langdale <philipl@overt.org>. > --- > doc/APIchanges | 4 ++++ > libavcodec/audiotoolboxdec.c | 1 + > libavcodec/audiotoolboxenc.c | 1 + > libavcodec/avcodec.h | 26 ++++++++++++++++++++++++++ > libavcodec/cuviddec.c | 3 ++- > libavcodec/libcelt_dec.c | 1 + > libavcodec/libfdk-aacdec.c | 1 + > libavcodec/libfdk-aacenc.c | 1 + > libavcodec/libgsmdec.c | 2 ++ > libavcodec/libgsmenc.c | 2 ++ > libavcodec/libilbc.c | 1 + > libavcodec/libkvazaar.c | 2 ++ > libavcodec/libmp3lame.c | 1 + > libavcodec/libopencore-amr.c | 1 + > libavcodec/libopenh264dec.c | 1 + > libavcodec/libopenh264enc.c | 1 + > libavcodec/libopenjpegdec.c | 1 + > libavcodec/libopenjpegenc.c | 1 + > libavcodec/libopusdec.c | 1 + > libavcodec/libopusenc.c | 1 + > libavcodec/librsvgdec.c | 1 + > libavcodec/libshine.c | 1 + > libavcodec/libspeexdec.c | 1 + > libavcodec/libspeexenc.c | 1 + > libavcodec/libtheoraenc.c | 1 + > libavcodec/libtwolame.c | 1 + > libavcodec/libvo-amrwbenc.c | 1 + > libavcodec/libvorbisenc.c | 1 + > libavcodec/libvpxdec.c | 2 ++ > libavcodec/libvpxenc.c | 2 ++ > libavcodec/libwavpackenc.c | 1 + > libavcodec/libwebpenc.c | 1 + > libavcodec/libwebpenc_animencoder.c | 1 + > libavcodec/libx264.c | 3 +++ > libavcodec/libx265.c | 1 + > libavcodec/libxavs.c | 1 + > libavcodec/libxvid.c | 1 + > libavcodec/libzvbi-teletextdec.c | 1 + > libavcodec/mediacodecdec.c | 18 ++++++++++++------ > libavcodec/mmaldec.c | 3 ++- > libavcodec/nvenc_h264.c | 9 ++++++--- > libavcodec/nvenc_hevc.c | 6 ++++-- > libavcodec/qsvdec_h2645.c | 6 ++++-- > libavcodec/qsvdec_other.c | 9 ++++++--- > libavcodec/qsvenc_h264.c | 3 ++- > libavcodec/qsvenc_hevc.c | 3 ++- > libavcodec/qsvenc_jpeg.c | 3 ++- > libavcodec/qsvenc_mpeg2.c | 3 ++- > libavcodec/v4l2_m2m_dec.c | 2 ++ > libavcodec/v4l2_m2m_enc.c | 2 ++ > libavcodec/vaapi_encode_h264.c | 3 ++- > libavcodec/vaapi_encode_h265.c | 3 ++- > libavcodec/vaapi_encode_mjpeg.c | 2 ++ > libavcodec/vaapi_encode_mpeg2.c | 3 ++- > libavcodec/vaapi_encode_vp8.c | 3 ++- > libavcodec/vaapi_encode_vp9.c | 3 ++- > libavcodec/version.h | 4 ++-- > libavcodec/videotoolboxenc.c | 3 ++- > 58 files changed, 136 insertions(+), 30 deletions(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index 4af69c64bd..b4451ab193 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -15,6 +15,10 @@ libavutil: 2017-10-21 > > API changes, most recent first: > > +2017-xx-xx - xxxxxxc - lavc 58.7.100 - avcodec.h > + Add AV_CODEC_CAP_HARDWARE, AV_CODEC_CAP_HYBRID, and > AVCodec.wrapper_name, > + and mark all AVCodecs accordingly. > + > 2017-xx-xx - xxxxxxx - lavu 56.4.100 / 56.7.0 - stereo3d.h > Add view field to AVStereo3D structure and AVStereo3DView enum. > > diff --git a/libavcodec/audiotoolboxdec.c b/libavcodec/audiotoolboxdec.c > index 3711665bbd..5c0a9de8f6 100644 > --- a/libavcodec/audiotoolboxdec.c > +++ b/libavcodec/audiotoolboxdec.c > @@ -597,6 +597,7 @@ static av_cold int ffat_close_decoder(AVCodecContext > *avctx) > .bsfs = bsf_name, \ > .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, \ > .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | > FF_CODEC_CAP_INIT_CLEANUP, \ > + .wrapper_name = "at", \ > }; > > FFAT_DEC(aac, AV_CODEC_ID_AAC, "aac_adtstoasc") > diff --git a/libavcodec/audiotoolboxenc.c b/libavcodec/audiotoolboxenc.c > index c47fbd1b2d..71885d1530 100644 > --- a/libavcodec/audiotoolboxenc.c > +++ b/libavcodec/audiotoolboxenc.c > @@ -619,6 +619,7 @@ static const AVOption options[] = { > }, \ > .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, \ > .profiles = PROFILES, \ > + .wrapper_name = "at", \ > }; > > static const uint64_t aac_at_channel_layouts[] = { > diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h > index 5db6a81320..7ea53b82f6 100644 > --- a/libavcodec/avcodec.h > +++ b/libavcodec/avcodec.h > @@ -1045,6 +1045,20 @@ typedef struct RcOverride{ > */ > #define AV_CODEC_CAP_LOSSLESS 0x80000000 > > +/** > + * Codec is backed by a hardware implementation. Typically used to > + * identify a non-hwaccel hardware decoder. For information about > hwaccels, use > + * avcodec_get_hw_config() instead. > + */ > +#define AV_CODEC_CAP_HARDWARE (1 << 17) > + > +/** > + * Codec is potentially backed by a hardware implementation, but not > + * necessarily. This is used instead of AV_CODEC_CAP_HARDWARE, if the > + * implementation provides some sort of internal fallback. > + */ > +#define AV_CODEC_CAP_HYBRID (1 << 18) > + > /** > * Pan Scan area. > * This specifies the area which should be displayed. > @@ -3377,6 +3391,18 @@ typedef struct AVCodec { > const AVClass *priv_class; ///< AVClass for the private > context > const AVProfile *profiles; ///< array of recognized > profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} > > + /** > + * Group name of the codec implementation. > + * This is a short symbolic name of the wrapper backing this codec. A > + * wrapper uses some kind of external implementation for the codec, > such > + * as an external library, or a codec implementation provided by the > OS or > + * the hardware. > + * If this field is NULL, this is a builtin, libavcodec native > decoder. > + * If non-NULL, this will be the suffix in AVCodec.name in most cases > + * (usually AVCodec.name will be of the form > "<codec_name>_<wrapper_name>"). > + */ > + const char *wrapper_name; > + > /***************************************************************** > * No fields below this line are part of the public API. They > * may not be used outside of libavcodec and can be changed and > diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c > index 96d56f406a..c23033c7e3 100644 > --- a/libavcodec/cuviddec.c > +++ b/libavcodec/cuviddec.c > @@ -1127,13 +1127,14 @@ static const AVCodecHWConfigInternal > *cuvid_hw_configs[] = { > .decode = cuvid_decode_frame, \ > .receive_frame = cuvid_output_frame, \ > .flush = cuvid_flush, \ > - .capabilities = AV_CODEC_CAP_DELAY | > AV_CODEC_CAP_AVOID_PROBING, \ > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING > | AV_CODEC_CAP_HARDWARE, \ > .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_CUDA, \ > AV_PIX_FMT_NV12, \ > AV_PIX_FMT_P010, \ > AV_PIX_FMT_P016, \ > AV_PIX_FMT_NONE > }, \ > .hw_configs = cuvid_hw_configs, \ > + .wrapper_name = "cuvid", \ > }; > > #if CONFIG_HEVC_CUVID_DECODER > diff --git a/libavcodec/libcelt_dec.c b/libavcodec/libcelt_dec.c > index 878e4cc673..75b438b285 100644 > --- a/libavcodec/libcelt_dec.c > +++ b/libavcodec/libcelt_dec.c > @@ -137,4 +137,5 @@ AVCodec ff_libcelt_decoder = { > .close = libcelt_dec_close, > .decode = libcelt_dec_decode, > .capabilities = AV_CODEC_CAP_DR1, > + .wrapper_name = "libcelt", > }; > diff --git a/libavcodec/libfdk-aacdec.c b/libavcodec/libfdk-aacdec.c > index a0110da62b..677b11088b 100644 > --- a/libavcodec/libfdk-aacdec.c > +++ b/libavcodec/libfdk-aacdec.c > @@ -385,4 +385,5 @@ AVCodec ff_libfdk_aac_decoder = { > .priv_class = &fdk_aac_dec_class, > .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | > FF_CODEC_CAP_INIT_CLEANUP, > + .wrapper_name = "libfdk", > }; > diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c > index ca0f4bf722..d47137b227 100644 > --- a/libavcodec/libfdk-aacenc.c > +++ b/libavcodec/libfdk-aacenc.c > @@ -428,4 +428,5 @@ AVCodec ff_libfdk_aac_encoder = { > .profiles = profiles, > .supported_samplerates = aac_sample_rates, > .channel_layouts = aac_channel_layout, > + .wrapper_name = "libfdk", > }; > diff --git a/libavcodec/libgsmdec.c b/libavcodec/libgsmdec.c > index a503215f67..89e1de0fed 100644 > --- a/libavcodec/libgsmdec.c > +++ b/libavcodec/libgsmdec.c > @@ -135,6 +135,7 @@ AVCodec ff_libgsm_decoder = { > .decode = libgsm_decode_frame, > .flush = libgsm_flush, > .capabilities = AV_CODEC_CAP_DR1, > + .wrapper_name = "libgsm", > }; > #endif > #if CONFIG_LIBGSM_MS_DECODER > @@ -149,5 +150,6 @@ AVCodec ff_libgsm_ms_decoder = { > .decode = libgsm_decode_frame, > .flush = libgsm_flush, > .capabilities = AV_CODEC_CAP_DR1, > + .wrapper_name = "libgsm", > }; > #endif > diff --git a/libavcodec/libgsmenc.c b/libavcodec/libgsmenc.c > index e25db95181..c9e7ba056e 100644 > --- a/libavcodec/libgsmenc.c > +++ b/libavcodec/libgsmenc.c > @@ -126,6 +126,7 @@ AVCodec ff_libgsm_encoder = { > .close = libgsm_encode_close, > .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, > AV_SAMPLE_FMT_NONE }, > + .wrapper_name = "libgsm", > }; > #endif > #if CONFIG_LIBGSM_MS_ENCODER > @@ -139,5 +140,6 @@ AVCodec ff_libgsm_ms_encoder = { > .close = libgsm_encode_close, > .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, > AV_SAMPLE_FMT_NONE }, > + .wrapper_name = "libgsm", > }; > #endif > diff --git a/libavcodec/libilbc.c b/libavcodec/libilbc.c > index c4c054fa5d..9a56cc8785 100644 > --- a/libavcodec/libilbc.c > +++ b/libavcodec/libilbc.c > @@ -193,4 +193,5 @@ AVCodec ff_libilbc_encoder = { > AV_SAMPLE_FMT_NONE }, > .defaults = ilbc_encode_defaults, > .priv_class = &ilbc_enc_class, > + .wrapper_name = "libbilbc", > }; > diff --git a/libavcodec/libkvazaar.c b/libavcodec/libkvazaar.c > index 25e7b32f5f..41a1bbb45e 100644 > --- a/libavcodec/libkvazaar.c > +++ b/libavcodec/libkvazaar.c > @@ -305,4 +305,6 @@ AVCodec ff_libkvazaar_encoder = { > .close = libkvazaar_close, > > .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | > FF_CODEC_CAP_INIT_CLEANUP, > + > + .wrapper_name = "libkvazaar", > }; > diff --git a/libavcodec/libmp3lame.c b/libavcodec/libmp3lame.c > index 5e26743f29..ecdd2e334c 100644 > --- a/libavcodec/libmp3lame.c > +++ b/libavcodec/libmp3lame.c > @@ -349,4 +349,5 @@ AVCodec ff_libmp3lame_encoder = { > 0 }, > .priv_class = &libmp3lame_class, > .defaults = libmp3lame_defaults, > + .wrapper_name = "libmp3lame", > }; > diff --git a/libavcodec/libopencore-amr.c b/libavcodec/libopencore-amr.c > index d509804315..516f625720 100644 > --- a/libavcodec/libopencore-amr.c > +++ b/libavcodec/libopencore-amr.c > @@ -378,6 +378,7 @@ AVCodec ff_libopencore_amrwb_decoder = { > .close = amr_wb_decode_close, > .decode = amr_wb_decode_frame, > .capabilities = AV_CODEC_CAP_DR1, > + .wrapper_name = "libopencore_amrwb", > }; > > #endif /* CONFIG_LIBOPENCORE_AMRWB_DECODER */ > diff --git a/libavcodec/libopenh264dec.c b/libavcodec/libopenh264dec.c > index d12e715117..b7ed85d175 100644 > --- a/libavcodec/libopenh264dec.c > +++ b/libavcodec/libopenh264dec.c > @@ -147,4 +147,5 @@ AVCodec ff_libopenh264_decoder = { > .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS | > FF_CODEC_CAP_INIT_THREADSAFE | > FF_CODEC_CAP_INIT_CLEANUP, > .bsfs = "h264_mp4toannexb", > + .wrapper_name = "libopenh264", > }; > diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c > index 1152d0036f..fdadb101f5 100644 > --- a/libavcodec/libopenh264enc.c > +++ b/libavcodec/libopenh264enc.c > @@ -301,4 +301,5 @@ AVCodec ff_libopenh264_encoder = { > .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, > AV_PIX_FMT_NONE }, > .priv_class = &class, > + .wrapper_name = "libopenh264", > }; > diff --git a/libavcodec/libopenjpegdec.c b/libavcodec/libopenjpegdec.c > index daf0a1c565..5e66cd99cc 100644 > --- a/libavcodec/libopenjpegdec.c > +++ b/libavcodec/libopenjpegdec.c > @@ -512,4 +512,5 @@ AVCodec ff_libopenjpeg_decoder = { > .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, > .max_lowres = 31, > .priv_class = &openjpeg_class, > + .wrapper_name = "libopenjpeg", > }; > diff --git a/libavcodec/libopenjpegenc.c b/libavcodec/libopenjpegenc.c > index 59fe52d64a..7c7d0aa6b2 100644 > --- a/libavcodec/libopenjpegenc.c > +++ b/libavcodec/libopenjpegenc.c > @@ -778,4 +778,5 @@ AVCodec ff_libopenjpeg_encoder = { > AV_PIX_FMT_NONE > }, > .priv_class = &openjpeg_class, > + .wrapper_name = "libopenjpeg", > }; > diff --git a/libavcodec/libopusdec.c b/libavcodec/libopusdec.c > index 9b1e002ceb..4f7f4755c2 100644 > --- a/libavcodec/libopusdec.c > +++ b/libavcodec/libopusdec.c > @@ -223,4 +223,5 @@ AVCodec ff_libopus_decoder = { > .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT, > AV_SAMPLE_FMT_S16, > AV_SAMPLE_FMT_NONE }, > + .wrapper_name = "libopus", > }; > diff --git a/libavcodec/libopusenc.c b/libavcodec/libopusenc.c > index 3d88c296d3..b449497d15 100644 > --- a/libavcodec/libopusenc.c > +++ b/libavcodec/libopusenc.c > @@ -566,4 +566,5 @@ AVCodec ff_libopus_encoder = { > .supported_samplerates = libopus_sample_rates, > .priv_class = &libopus_class, > .defaults = libopus_defaults, > + .wrapper_name = "libopus", > }; > diff --git a/libavcodec/librsvgdec.c b/libavcodec/librsvgdec.c > index 77c771003c..e57070f8e4 100644 > --- a/libavcodec/librsvgdec.c > +++ b/libavcodec/librsvgdec.c > @@ -124,4 +124,5 @@ AVCodec ff_librsvg_decoder = { > .decode = librsvg_decode_frame, > .priv_data_size = sizeof(LibRSVGContext), > .capabilities = AV_CODEC_CAP_LOSSLESS | AV_CODEC_CAP_DR1, > + .wrapper_name = "librsvg", > }; > diff --git a/libavcodec/libshine.c b/libavcodec/libshine.c > index f4cf5981bc..7056fcd2e3 100644 > --- a/libavcodec/libshine.c > +++ b/libavcodec/libshine.c > @@ -146,4 +146,5 @@ AVCodec ff_libshine_encoder = { > .channel_layouts = (const uint64_t[]) { AV_CH_LAYOUT_MONO, > AV_CH_LAYOUT_STEREO, > 0 }, > + .wrapper_name = "libshine", > }; > diff --git a/libavcodec/libspeexdec.c b/libavcodec/libspeexdec.c > index 044883af73..d67c68c7f9 100644 > --- a/libavcodec/libspeexdec.c > +++ b/libavcodec/libspeexdec.c > @@ -200,4 +200,5 @@ AVCodec ff_libspeex_decoder = { > .decode = libspeex_decode_frame, > .flush = libspeex_decode_flush, > .capabilities = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DELAY | > AV_CODEC_CAP_DR1, > + .wrapper_name = "libspeex", > }; > diff --git a/libavcodec/libspeexenc.c b/libavcodec/libspeexenc.c > index 5264899fd7..6a37dbc76c 100644 > --- a/libavcodec/libspeexenc.c > +++ b/libavcodec/libspeexenc.c > @@ -365,4 +365,5 @@ AVCodec ff_libspeex_encoder = { > .supported_samplerates = (const int[]){ 8000, 16000, 32000, 0 }, > .priv_class = &speex_class, > .defaults = defaults, > + .wrapper_name = "libspeex", > }; > diff --git a/libavcodec/libtheoraenc.c b/libavcodec/libtheoraenc.c > index d4c39283a6..16966ed433 100644 > --- a/libavcodec/libtheoraenc.c > +++ b/libavcodec/libtheoraenc.c > @@ -385,4 +385,5 @@ AVCodec ff_libtheora_encoder = { > .pix_fmts = (const enum AVPixelFormat[]){ > AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P, > AV_PIX_FMT_NONE > }, > + .wrapper_name = "libtheora", > }; > diff --git a/libavcodec/libtwolame.c b/libavcodec/libtwolame.c > index 12d71e7acb..030f88868f 100644 > --- a/libavcodec/libtwolame.c > +++ b/libavcodec/libtwolame.c > @@ -226,4 +226,5 @@ AVCodec ff_libtwolame_encoder = { > AV_CH_LAYOUT_STEREO, > 0 }, > .supported_samplerates = twolame_samplerates, > + .wrapper_name = "libtwolame", > }; > diff --git a/libavcodec/libvo-amrwbenc.c b/libavcodec/libvo-amrwbenc.c > index f756940879..77d0ccef15 100644 > --- a/libavcodec/libvo-amrwbenc.c > +++ b/libavcodec/libvo-amrwbenc.c > @@ -152,4 +152,5 @@ AVCodec ff_libvo_amrwbenc_encoder = { > .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, > AV_SAMPLE_FMT_NONE }, > .priv_class = &amrwb_class, > + .wrapper_name = "libvo_amrwbenc", > }; > diff --git a/libavcodec/libvorbisenc.c b/libavcodec/libvorbisenc.c > index 3ca5b55e8e..f78f872fe2 100644 > --- a/libavcodec/libvorbisenc.c > +++ b/libavcodec/libvorbisenc.c > @@ -377,4 +377,5 @@ AVCodec ff_libvorbis_encoder = { > AV_SAMPLE_FMT_NONE > }, > .priv_class = &vorbis_class, > .defaults = defaults, > + .wrapper_name = "libvorbis", > }; > diff --git a/libavcodec/libvpxdec.c b/libavcodec/libvpxdec.c > index 2ae29d202a..04f27d3396 100644 > --- a/libavcodec/libvpxdec.c > +++ b/libavcodec/libvpxdec.c > @@ -289,6 +289,7 @@ AVCodec ff_libvpx_vp8_decoder = { > .close = vpx_free, > .decode = vpx_decode, > .capabilities = AV_CODEC_CAP_AUTO_THREADS | AV_CODEC_CAP_DR1, > + .wrapper_name = "libvpx", > }; > #endif /* CONFIG_LIBVPX_VP8_DECODER */ > > @@ -310,5 +311,6 @@ AVCodec ff_libvpx_vp9_decoder = { > .capabilities = AV_CODEC_CAP_AUTO_THREADS | AV_CODEC_CAP_DR1, > .init_static_data = ff_vp9_init_static, > .profiles = NULL_IF_CONFIG_SMALL(ff_vp9_profiles), > + .wrapper_name = "libvpx", > }; > #endif /* CONFIG_LIBVPX_VP9_DECODER */ > diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c > index 9861e9d5ae..d0bd1e997a 100644 > --- a/libavcodec/libvpxenc.c > +++ b/libavcodec/libvpxenc.c > @@ -1199,6 +1199,7 @@ AVCodec ff_libvpx_vp8_encoder = { > .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, > AV_PIX_FMT_YUVA420P, AV_PIX_FMT_NONE }, > .priv_class = &class_vp8, > .defaults = defaults, > + .wrapper_name = "libvpx", > }; > #endif /* CONFIG_LIBVPX_VP8_ENCODER */ > > @@ -1229,5 +1230,6 @@ AVCodec ff_libvpx_vp9_encoder = { > .priv_class = &class_vp9, > .defaults = defaults, > .init_static_data = ff_vp9_init_static, > + .wrapper_name = "libvpx", > }; > #endif /* CONFIG_LIBVPX_VP9_ENCODER */ > diff --git a/libavcodec/libwavpackenc.c b/libavcodec/libwavpackenc.c > index 6d5708985a..e84b074893 100644 > --- a/libavcodec/libwavpackenc.c > +++ b/libavcodec/libwavpackenc.c > @@ -191,4 +191,5 @@ AVCodec ff_libwavpack_encoder = { > .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SMALL_LAST_FRAME, > .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S32, > AV_SAMPLE_FMT_NONE }, > + .wrapper_name = "libwavpack", > }; > diff --git a/libavcodec/libwebpenc.c b/libavcodec/libwebpenc.c > index 0bcf628e58..48f45b6320 100644 > --- a/libavcodec/libwebpenc.c > +++ b/libavcodec/libwebpenc.c > @@ -109,4 +109,5 @@ AVCodec ff_libwebp_encoder = { > }, > .priv_class = &class, > .defaults = libwebp_defaults, > + .wrapper_name = "libwebp", > }; > diff --git a/libavcodec/libwebpenc_animencoder.c > b/libavcodec/libwebpenc_animencoder.c > index 91bf64ca8b..7f35a0b939 100644 > --- a/libavcodec/libwebpenc_animencoder.c > +++ b/libavcodec/libwebpenc_animencoder.c > @@ -148,4 +148,5 @@ AVCodec ff_libwebp_anim_encoder = { > }, > .priv_class = &class, > .defaults = libwebp_defaults, > + .wrapper_name = "libwebp", > }; > diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c > index 9c67c91f33..e2455e18de 100644 > --- a/libavcodec/libx264.c > +++ b/libavcodec/libx264.c > @@ -1026,6 +1026,7 @@ AVCodec ff_libx264_encoder = { > .init_static_data = X264_init_static, > .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | > FF_CODEC_CAP_INIT_CLEANUP, > + .wrapper_name = "libx264", > }; > #endif > > @@ -1050,6 +1051,7 @@ AVCodec ff_libx264rgb_encoder = { > .priv_class = &rgbclass, > .defaults = x264_defaults, > .pix_fmts = pix_fmts_8bit_rgb, > + .wrapper_name = "libx264", > }; > #endif > > @@ -1076,5 +1078,6 @@ AVCodec ff_libx262_encoder = { > .pix_fmts = pix_fmts_8bit, > .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | > FF_CODEC_CAP_INIT_CLEANUP, > + .wrapper_name = "libx264", > }; > #endif > diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c > index 25ccb02fcb..52ad2312a3 100644 > --- a/libavcodec/libx265.c > +++ b/libavcodec/libx265.c > @@ -442,4 +442,5 @@ AVCodec ff_libx265_encoder = { > .priv_class = &class, > .defaults = x265_defaults, > .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AUTO_THREADS, > + .wrapper_name = "libx265", > }; > diff --git a/libavcodec/libxavs.c b/libavcodec/libxavs.c > index 865b5f62ef..801a05dbb5 100644 > --- a/libavcodec/libxavs.c > +++ b/libavcodec/libxavs.c > @@ -478,4 +478,5 @@ AVCodec ff_libxavs_encoder = { > .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, > AV_PIX_FMT_NONE }, > .priv_class = &xavs_class, > .defaults = xavs_defaults, > + .wrapper_name = "libxavs", > }; > diff --git a/libavcodec/libxvid.c b/libavcodec/libxvid.c > index 5c05fa6d87..cdaae2094e 100644 > --- a/libavcodec/libxvid.c > +++ b/libavcodec/libxvid.c > @@ -934,4 +934,5 @@ AVCodec ff_libxvid_encoder = { > .priv_class = &xvid_class, > .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | > FF_CODEC_CAP_INIT_CLEANUP, > + .wrapper_name = "libxvid", > }; > diff --git a/libavcodec/libzvbi-teletextdec.c > b/libavcodec/libzvbi-teletextdec.c > index 687b6af129..30d0593430 100644 > --- a/libavcodec/libzvbi-teletextdec.c > +++ b/libavcodec/libzvbi-teletextdec.c > @@ -573,4 +573,5 @@ AVCodec ff_libzvbi_teletext_decoder = { > .capabilities = AV_CODEC_CAP_DELAY, > .flush = teletext_flush, > .priv_class= &teletext_class, > + .wrapper_name = "libzvbi", > }; > diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c > index 39f5cbc045..1b5ae4ad59 100644 > --- a/libavcodec/mediacodecdec.c > +++ b/libavcodec/mediacodecdec.c > @@ -539,10 +539,11 @@ AVCodec ff_h264_mediacodec_decoder = { > .decode = mediacodec_decode_frame, > .flush = mediacodec_decode_flush, > .close = mediacodec_decode_close, > - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | > AV_CODEC_CAP_HARDWARE, > .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, > .bsfs = "h264_mp4toannexb", > .hw_configs = mediacodec_hw_configs, > + .wrapper_name = "mediacodec", > }; > #endif > > @@ -557,10 +558,11 @@ AVCodec ff_hevc_mediacodec_decoder = { > .decode = mediacodec_decode_frame, > .flush = mediacodec_decode_flush, > .close = mediacodec_decode_close, > - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | > AV_CODEC_CAP_HARDWARE, > .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, > .bsfs = "hevc_mp4toannexb", > .hw_configs = mediacodec_hw_configs, > + .wrapper_name = "mediacodec", > }; > #endif > > @@ -575,9 +577,10 @@ AVCodec ff_mpeg2_mediacodec_decoder = { > .decode = mediacodec_decode_frame, > .flush = mediacodec_decode_flush, > .close = mediacodec_decode_close, > - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | > AV_CODEC_CAP_HARDWARE, > .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, > .hw_configs = mediacodec_hw_configs, > + .wrapper_name = "mediacodec", > }; > #endif > > @@ -592,9 +595,10 @@ AVCodec ff_mpeg4_mediacodec_decoder = { > .decode = mediacodec_decode_frame, > .flush = mediacodec_decode_flush, > .close = mediacodec_decode_close, > - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | > AV_CODEC_CAP_HARDWARE, > .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, > .hw_configs = mediacodec_hw_configs, > + .wrapper_name = "mediacodec", > }; > #endif > > @@ -609,9 +613,10 @@ AVCodec ff_vp8_mediacodec_decoder = { > .decode = mediacodec_decode_frame, > .flush = mediacodec_decode_flush, > .close = mediacodec_decode_close, > - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | > AV_CODEC_CAP_HARDWARE, > .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, > .hw_configs = mediacodec_hw_configs, > + .wrapper_name = "mediacodec", > }; > #endif > > @@ -626,8 +631,9 @@ AVCodec ff_vp9_mediacodec_decoder = { > .decode = mediacodec_decode_frame, > .flush = mediacodec_decode_flush, > .close = mediacodec_decode_close, > - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | > AV_CODEC_CAP_HARDWARE, > .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, > .hw_configs = mediacodec_hw_configs, > + .wrapper_name = "mediacodec", > }; > #endif > diff --git a/libavcodec/mmaldec.c b/libavcodec/mmaldec.c > index b3f0cca4b5..647a22ef7c 100644 > --- a/libavcodec/mmaldec.c > +++ b/libavcodec/mmaldec.c > @@ -840,12 +840,13 @@ static const AVOption options[]={ > .decode = ffmmal_decode, \ > .flush = ffmmal_flush, \ > .priv_class = &ffmmal_##NAME##_dec_class, \ > - .capabilities = AV_CODEC_CAP_DELAY, \ > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, \ > .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, \ > .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_MMAL, > \ > > AV_PIX_FMT_YUV420P, \ > > AV_PIX_FMT_NONE}, \ > .hw_configs = mmal_hw_configs, \ > + .wrapper_name = "mmal", \ > }; > > FFMMAL_DEC(h264, AV_CODEC_ID_H264) > diff --git a/libavcodec/nvenc_h264.c b/libavcodec/nvenc_h264.c > index c3b4bac749..bc7bbcddeb 100644 > --- a/libavcodec/nvenc_h264.c > +++ b/libavcodec/nvenc_h264.c > @@ -171,9 +171,10 @@ AVCodec ff_nvenc_encoder = { > .priv_data_size = sizeof(NvencContext), > .priv_class = &nvenc_class, > .defaults = defaults, > - .capabilities = AV_CODEC_CAP_DELAY, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, > .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, > .pix_fmts = ff_nvenc_pix_fmts, > + .wrapper_name = "nvenc", > }; > #endif > > @@ -199,9 +200,10 @@ AVCodec ff_nvenc_h264_encoder = { > .priv_data_size = sizeof(NvencContext), > .priv_class = &nvenc_h264_class, > .defaults = defaults, > - .capabilities = AV_CODEC_CAP_DELAY, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, > .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, > .pix_fmts = ff_nvenc_pix_fmts, > + .wrapper_name = "nvenc", > }; > #endif > > @@ -227,7 +229,8 @@ AVCodec ff_h264_nvenc_encoder = { > .priv_data_size = sizeof(NvencContext), > .priv_class = &h264_nvenc_class, > .defaults = defaults, > - .capabilities = AV_CODEC_CAP_DELAY, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, > .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, > .pix_fmts = ff_nvenc_pix_fmts, > + .wrapper_name = "nvenc", > }; > diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c > index 89e8c3e53a..0df7eab8cd 100644 > --- a/libavcodec/nvenc_hevc.c > +++ b/libavcodec/nvenc_hevc.c > @@ -161,8 +161,9 @@ AVCodec ff_nvenc_hevc_encoder = { > .priv_class = &nvenc_hevc_class, > .defaults = defaults, > .pix_fmts = ff_nvenc_pix_fmts, > - .capabilities = AV_CODEC_CAP_DELAY, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, > .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, > + .wrapper_name = "nvenc", > }; > > #endif > @@ -188,6 +189,7 @@ AVCodec ff_hevc_nvenc_encoder = { > .priv_class = &hevc_nvenc_class, > .defaults = defaults, > .pix_fmts = ff_nvenc_pix_fmts, > - .capabilities = AV_CODEC_CAP_DELAY, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, > .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, > + .wrapper_name = "nvenc", > }; > diff --git a/libavcodec/qsvdec_h2645.c b/libavcodec/qsvdec_h2645.c > index 6b4fc5e36e..5e0067335e 100644 > --- a/libavcodec/qsvdec_h2645.c > +++ b/libavcodec/qsvdec_h2645.c > @@ -211,7 +211,7 @@ AVCodec ff_hevc_qsv_decoder = { > .decode = qsv_decode_frame, > .flush = qsv_decode_flush, > .close = qsv_decode_close, > - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | > AV_CODEC_CAP_AVOID_PROBING, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | > AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HYBRID, > .priv_class = &hevc_class, > .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, > AV_PIX_FMT_P010, > @@ -219,6 +219,7 @@ AVCodec ff_hevc_qsv_decoder = { > AV_PIX_FMT_NONE }, > .hw_configs = ff_qsv_hw_configs, > .bsfs = "hevc_mp4toannexb", > + .wrapper_name = "qsv", > }; > #endif > > @@ -245,7 +246,7 @@ AVCodec ff_h264_qsv_decoder = { > .decode = qsv_decode_frame, > .flush = qsv_decode_flush, > .close = qsv_decode_close, > - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | > AV_CODEC_CAP_AVOID_PROBING, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | > AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HYBRID, > .priv_class = &class, > .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, > AV_PIX_FMT_P010, > @@ -253,5 +254,6 @@ AVCodec ff_h264_qsv_decoder = { > AV_PIX_FMT_NONE }, > .hw_configs = ff_qsv_hw_configs, > .bsfs = "h264_mp4toannexb", > + .wrapper_name = "qsv", > }; > #endif > diff --git a/libavcodec/qsvdec_other.c b/libavcodec/qsvdec_other.c > index f7691f95bf..416e4c8164 100644 > --- a/libavcodec/qsvdec_other.c > +++ b/libavcodec/qsvdec_other.c > @@ -176,12 +176,13 @@ AVCodec ff_mpeg2_qsv_decoder = { > .decode = qsv_decode_frame, > .flush = qsv_decode_flush, > .close = qsv_decode_close, > - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | > AV_CODEC_CAP_AVOID_PROBING, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | > AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HYBRID, > .priv_class = &mpeg2_qsv_class, > .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, > AV_PIX_FMT_QSV, > AV_PIX_FMT_NONE }, > .hw_configs = ff_qsv_hw_configs, > + .wrapper_name = "qsv", > }; > #endif > > @@ -203,12 +204,13 @@ AVCodec ff_vc1_qsv_decoder = { > .decode = qsv_decode_frame, > .flush = qsv_decode_flush, > .close = qsv_decode_close, > - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | > AV_CODEC_CAP_AVOID_PROBING, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | > AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HYBRID, > .priv_class = &vc1_qsv_class, > .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, > AV_PIX_FMT_QSV, > AV_PIX_FMT_NONE }, > .hw_configs = ff_qsv_hw_configs, > + .wrapper_name = "qsv", > }; > #endif > > @@ -230,11 +232,12 @@ AVCodec ff_vp8_qsv_decoder = { > .decode = qsv_decode_frame, > .flush = qsv_decode_flush, > .close = qsv_decode_close, > - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | > AV_CODEC_CAP_AVOID_PROBING, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | > AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HYBRID, > .priv_class = &vp8_qsv_class, > .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, > AV_PIX_FMT_QSV, > AV_PIX_FMT_NONE }, > .hw_configs = ff_qsv_hw_configs, > + .wrapper_name = "qsv", > }; > #endif > diff --git a/libavcodec/qsvenc_h264.c b/libavcodec/qsvenc_h264.c > index 3242062b40..77fb2823d4 100644 > --- a/libavcodec/qsvenc_h264.c > +++ b/libavcodec/qsvenc_h264.c > @@ -175,7 +175,7 @@ AVCodec ff_h264_qsv_encoder = { > .init = qsv_enc_init, > .encode2 = qsv_enc_frame, > .close = qsv_enc_close, > - .capabilities = AV_CODEC_CAP_DELAY, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HYBRID, > .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, > AV_PIX_FMT_P010, > AV_PIX_FMT_QSV, > @@ -183,4 +183,5 @@ AVCodec ff_h264_qsv_encoder = { > .priv_class = &class, > .defaults = qsv_enc_defaults, > .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, > + .wrapper_name = "qsv", > }; > diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c > index f132a26c1a..4339b316a3 100644 > --- a/libavcodec/qsvenc_hevc.c > +++ b/libavcodec/qsvenc_hevc.c > @@ -277,7 +277,7 @@ AVCodec ff_hevc_qsv_encoder = { > .init = qsv_enc_init, > .encode2 = qsv_enc_frame, > .close = qsv_enc_close, > - .capabilities = AV_CODEC_CAP_DELAY, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HYBRID, > .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, > AV_PIX_FMT_P010, > AV_PIX_FMT_QSV, > @@ -285,4 +285,5 @@ AVCodec ff_hevc_qsv_encoder = { > .priv_class = &class, > .defaults = qsv_enc_defaults, > .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, > + .wrapper_name = "qsv", > }; > diff --git a/libavcodec/qsvenc_jpeg.c b/libavcodec/qsvenc_jpeg.c > index 731ec9a014..c18fe91940 100644 > --- a/libavcodec/qsvenc_jpeg.c > +++ b/libavcodec/qsvenc_jpeg.c > @@ -83,9 +83,10 @@ AVCodec ff_mjpeg_qsv_encoder = { > .init = qsv_enc_init, > .encode2 = qsv_enc_frame, > .close = qsv_enc_close, > - .capabilities = AV_CODEC_CAP_DELAY, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HYBRID, > .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, > AV_PIX_FMT_QSV, > AV_PIX_FMT_NONE }, > .priv_class = &class, > + .wrapper_name = "qsv", > }; > diff --git a/libavcodec/qsvenc_mpeg2.c b/libavcodec/qsvenc_mpeg2.c > index 5b583fb491..a7427d8109 100644 > --- a/libavcodec/qsvenc_mpeg2.c > +++ b/libavcodec/qsvenc_mpeg2.c > @@ -104,11 +104,12 @@ AVCodec ff_mpeg2_qsv_encoder = { > .init = qsv_enc_init, > .encode2 = qsv_enc_frame, > .close = qsv_enc_close, > - .capabilities = AV_CODEC_CAP_DELAY, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HYBRID, > .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, > AV_PIX_FMT_QSV, > AV_PIX_FMT_NONE }, > .priv_class = &class, > .defaults = qsv_enc_defaults, > .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, > + .wrapper_name = "qsv", > }; > diff --git a/libavcodec/v4l2_m2m_dec.c b/libavcodec/v4l2_m2m_dec.c > index 958cdc522b..c4ea20ea83 100644 > --- a/libavcodec/v4l2_m2m_dec.c > +++ b/libavcodec/v4l2_m2m_dec.c > @@ -215,6 +215,8 @@ AVCodec ff_ ## NAME ## _v4l2m2m_decoder = { \ > .receive_frame = v4l2_receive_frame,\ > .close = ff_v4l2_m2m_codec_end,\ > .bsfs = bsf_name, \ > + .capabilities = AV_CODEC_CAP_HARDWARE, \ > + .wrapper_name = "v4l2m2m", \ > }; > > M2MDEC(h264, "H.264", AV_CODEC_ID_H264, "h264_mp4toannexb"); > diff --git a/libavcodec/v4l2_m2m_enc.c b/libavcodec/v4l2_m2m_enc.c > index 76ce85fdaa..f62ce7cdb5 100644 > --- a/libavcodec/v4l2_m2m_enc.c > +++ b/libavcodec/v4l2_m2m_enc.c > @@ -335,6 +335,8 @@ AVCodec ff_ ## NAME ## _v4l2m2m_encoder = { \ > .send_frame = v4l2_send_frame,\ > .receive_packet = v4l2_receive_packet,\ > .close = ff_v4l2_m2m_codec_end,\ > + .capabilities = AV_CODEC_CAP_HARDWARE, \ > + .wrapper_name = "v4l2m2m", \ > }; > > M2MENC(mpeg4,"MPEG4", AV_CODEC_ID_MPEG4); > diff --git a/libavcodec/vaapi_encode_h264.c > b/libavcodec/vaapi_encode_h264.c > index 6940823b8e..a7f9a60253 100644 > --- a/libavcodec/vaapi_encode_h264.c > +++ b/libavcodec/vaapi_encode_h264.c > @@ -1089,10 +1089,11 @@ AVCodec ff_h264_vaapi_encoder = { > .encode2 = &ff_vaapi_encode2, > .close = &vaapi_encode_h264_close, > .priv_class = &vaapi_encode_h264_class, > - .capabilities = AV_CODEC_CAP_DELAY, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, > .defaults = vaapi_encode_h264_defaults, > .pix_fmts = (const enum AVPixelFormat[]) { > AV_PIX_FMT_VAAPI, > AV_PIX_FMT_NONE, > }, > + .wrapper_name = "vaapi", > }; > diff --git a/libavcodec/vaapi_encode_h265.c > b/libavcodec/vaapi_encode_h265.c > index 8e98b0230d..f3b4f6c7e2 100644 > --- a/libavcodec/vaapi_encode_h265.c > +++ b/libavcodec/vaapi_encode_h265.c > @@ -1018,10 +1018,11 @@ AVCodec ff_hevc_vaapi_encoder = { > .encode2 = &ff_vaapi_encode2, > .close = &vaapi_encode_h265_close, > .priv_class = &vaapi_encode_h265_class, > - .capabilities = AV_CODEC_CAP_DELAY, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, > .defaults = vaapi_encode_h265_defaults, > .pix_fmts = (const enum AVPixelFormat[]) { > AV_PIX_FMT_VAAPI, > AV_PIX_FMT_NONE, > }, > + .wrapper_name = "vaapi", > }; > diff --git a/libavcodec/vaapi_encode_mjpeg.c > b/libavcodec/vaapi_encode_mjpeg.c > index 2cbf7925f2..c949e89646 100644 > --- a/libavcodec/vaapi_encode_mjpeg.c > +++ b/libavcodec/vaapi_encode_mjpeg.c > @@ -422,9 +422,11 @@ AVCodec ff_mjpeg_vaapi_encoder = { > .encode2 = &ff_vaapi_encode2, > .close = &ff_vaapi_encode_close, > .priv_class = &vaapi_encode_mjpeg_class, > + .capabilities = AV_CODEC_CAP_HARDWARE, > .defaults = vaapi_encode_mjpeg_defaults, > .pix_fmts = (const enum AVPixelFormat[]) { > AV_PIX_FMT_VAAPI, > AV_PIX_FMT_NONE, > }, > + .wrapper_name = "vaapi", > }; > diff --git a/libavcodec/vaapi_encode_mpeg2.c > b/libavcodec/vaapi_encode_mpeg2.c > index 02eca30dc5..4537955c40 100644 > --- a/libavcodec/vaapi_encode_mpeg2.c > +++ b/libavcodec/vaapi_encode_mpeg2.c > @@ -669,10 +669,11 @@ AVCodec ff_mpeg2_vaapi_encoder = { > .init = &vaapi_encode_mpeg2_init, > .encode2 = &ff_vaapi_encode2, > .close = &vaapi_encode_mpeg2_close, > - .capabilities = AV_CODEC_CAP_DELAY, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, > .defaults = vaapi_encode_mpeg2_defaults, > .pix_fmts = (const enum AVPixelFormat[]) { > AV_PIX_FMT_VAAPI, > AV_PIX_FMT_NONE, > }, > + .wrapper_name = "vaapi", > }; > diff --git a/libavcodec/vaapi_encode_vp8.c b/libavcodec/vaapi_encode_vp8.c > index 423f7483e8..b4c5521d1f 100644 > --- a/libavcodec/vaapi_encode_vp8.c > +++ b/libavcodec/vaapi_encode_vp8.c > @@ -260,10 +260,11 @@ AVCodec ff_vp8_vaapi_encoder = { > .encode2 = &ff_vaapi_encode2, > .close = &ff_vaapi_encode_close, > .priv_class = &vaapi_encode_vp8_class, > - .capabilities = AV_CODEC_CAP_DELAY, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, > .defaults = vaapi_encode_vp8_defaults, > .pix_fmts = (const enum AVPixelFormat[]) { > AV_PIX_FMT_VAAPI, > AV_PIX_FMT_NONE, > }, > + .wrapper_name = "vaapi", > }; > diff --git a/libavcodec/vaapi_encode_vp9.c b/libavcodec/vaapi_encode_vp9.c > index a987d1cd71..9108699ac3 100644 > --- a/libavcodec/vaapi_encode_vp9.c > +++ b/libavcodec/vaapi_encode_vp9.c > @@ -304,10 +304,11 @@ AVCodec ff_vp9_vaapi_encoder = { > .encode2 = &ff_vaapi_encode2, > .close = &ff_vaapi_encode_close, > .priv_class = &vaapi_encode_vp9_class, > - .capabilities = AV_CODEC_CAP_DELAY, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, > .defaults = vaapi_encode_vp9_defaults, > .pix_fmts = (const enum AVPixelFormat[]) { > AV_PIX_FMT_VAAPI, > AV_PIX_FMT_NONE, > }, > + .wrapper_name = "vaapi", > }; > diff --git a/libavcodec/version.h b/libavcodec/version.h > index 3b5c3000be..b529f00227 100644 > --- a/libavcodec/version.h > +++ b/libavcodec/version.h > @@ -28,8 +28,8 @@ > #include "libavutil/version.h" > > #define LIBAVCODEC_VERSION_MAJOR 58 > -#define LIBAVCODEC_VERSION_MINOR 6 > -#define LIBAVCODEC_VERSION_MICRO 103 > +#define LIBAVCODEC_VERSION_MINOR 7 > +#define LIBAVCODEC_VERSION_MICRO 100 > > #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ > LIBAVCODEC_VERSION_MINOR, \ > diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c > index 086beb41fc..c47e5c4045 100644 > --- a/libavcodec/videotoolboxenc.c > +++ b/libavcodec/videotoolboxenc.c > @@ -2599,8 +2599,9 @@ AVCodec ff_hevc_videotoolbox_encoder = { > .init = vtenc_init, > .encode2 = vtenc_frame, > .close = vtenc_close, > - .capabilities = AV_CODEC_CAP_DELAY, > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARSWARE, Typo, s/HARS/HARD/ > .priv_class = &hevc_videotoolbox_class, > .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | > FF_CODEC_CAP_INIT_CLEANUP, > + .wrapper_name = "videotoolbox", > }; > -- > 2.15.1 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >
On Thu, 14 Dec 2017 16:01:49 +0000 Aman Gupta <ffmpeg@tmm1.net> wrote: > > diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c > > index 086beb41fc..c47e5c4045 100644 > > --- a/libavcodec/videotoolboxenc.c > > +++ b/libavcodec/videotoolboxenc.c > > @@ -2599,8 +2599,9 @@ AVCodec ff_hevc_videotoolbox_encoder = { > > .init = vtenc_init, > > .encode2 = vtenc_frame, > > .close = vtenc_close, > > - .capabilities = AV_CODEC_CAP_DELAY, > > + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARSWARE, > > > Typo, s/HARS/HARD/ Thanks, fixed locally.
On 2017-12-14 07:02, wm4 wrote: > Explicitly identify decoder/encoder wrappers with a common name. This > saves API users from guessing by the name suffix. For example, they > don't have to guess that "h264_qsv" is the h264 QSV implementation, and > instead they can just check the AVCodec .codec and .wrapper_name > fields. > > Explicitly mark AVCodec entries that are hardware decoders or most > likely hardware decoders with new AV_CODEC_CAPs. The purpose is > allowing > API users listing hardware decoders in a more generic way. The proposed > AVCodecHWConfig does not provide this information fully, because it's > concerned with decoder configuration, not information about the fact > whether the hardware is used or not. > > AV_CODEC_CAP_HYBRID exists specifically for QSV, which can have > software > implementations in case the hardware is not capable. > > Based on a patch by Philip Langdale <philipl@overt.org>. Ship it. --phil
On Thu, 14 Dec 2017 16:02:59 +0100 wm4 <nfxjfg@googlemail.com> wrote: > Explicitly identify decoder/encoder wrappers with a common name. This > saves API users from guessing by the name suffix. For example, they > don't have to guess that "h264_qsv" is the h264 QSV implementation, and > instead they can just check the AVCodec .codec and .wrapper_name fields. > > Explicitly mark AVCodec entries that are hardware decoders or most > likely hardware decoders with new AV_CODEC_CAPs. The purpose is allowing > API users listing hardware decoders in a more generic way. The proposed > AVCodecHWConfig does not provide this information fully, because it's > concerned with decoder configuration, not information about the fact > whether the hardware is used or not. > > AV_CODEC_CAP_HYBRID exists specifically for QSV, which can have software > implementations in case the hardware is not capable. > > Based on a patch by Philip Langdale <philipl@overt.org>. > --- Pushed, with some fixes. I apologize in advance should this break anything. (Lots of external libraries.)
diff --git a/doc/APIchanges b/doc/APIchanges index 4af69c64bd..b4451ab193 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,10 @@ libavutil: 2017-10-21 API changes, most recent first: +2017-xx-xx - xxxxxxc - lavc 58.7.100 - avcodec.h + Add AV_CODEC_CAP_HARDWARE, AV_CODEC_CAP_HYBRID, and AVCodec.wrapper_name, + and mark all AVCodecs accordingly. + 2017-xx-xx - xxxxxxx - lavu 56.4.100 / 56.7.0 - stereo3d.h Add view field to AVStereo3D structure and AVStereo3DView enum. diff --git a/libavcodec/audiotoolboxdec.c b/libavcodec/audiotoolboxdec.c index 3711665bbd..5c0a9de8f6 100644 --- a/libavcodec/audiotoolboxdec.c +++ b/libavcodec/audiotoolboxdec.c @@ -597,6 +597,7 @@ static av_cold int ffat_close_decoder(AVCodecContext *avctx) .bsfs = bsf_name, \ .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, \ .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, \ + .wrapper_name = "at", \ }; FFAT_DEC(aac, AV_CODEC_ID_AAC, "aac_adtstoasc") diff --git a/libavcodec/audiotoolboxenc.c b/libavcodec/audiotoolboxenc.c index c47fbd1b2d..71885d1530 100644 --- a/libavcodec/audiotoolboxenc.c +++ b/libavcodec/audiotoolboxenc.c @@ -619,6 +619,7 @@ static const AVOption options[] = { }, \ .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, \ .profiles = PROFILES, \ + .wrapper_name = "at", \ }; static const uint64_t aac_at_channel_layouts[] = { diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 5db6a81320..7ea53b82f6 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -1045,6 +1045,20 @@ typedef struct RcOverride{ */ #define AV_CODEC_CAP_LOSSLESS 0x80000000 +/** + * Codec is backed by a hardware implementation. Typically used to + * identify a non-hwaccel hardware decoder. For information about hwaccels, use + * avcodec_get_hw_config() instead. + */ +#define AV_CODEC_CAP_HARDWARE (1 << 17) + +/** + * Codec is potentially backed by a hardware implementation, but not + * necessarily. This is used instead of AV_CODEC_CAP_HARDWARE, if the + * implementation provides some sort of internal fallback. + */ +#define AV_CODEC_CAP_HYBRID (1 << 18) + /** * Pan Scan area. * This specifies the area which should be displayed. @@ -3377,6 +3391,18 @@ typedef struct AVCodec { const AVClass *priv_class; ///< AVClass for the private context const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} + /** + * Group name of the codec implementation. + * This is a short symbolic name of the wrapper backing this codec. A + * wrapper uses some kind of external implementation for the codec, such + * as an external library, or a codec implementation provided by the OS or + * the hardware. + * If this field is NULL, this is a builtin, libavcodec native decoder. + * If non-NULL, this will be the suffix in AVCodec.name in most cases + * (usually AVCodec.name will be of the form "<codec_name>_<wrapper_name>"). + */ + const char *wrapper_name; + /***************************************************************** * No fields below this line are part of the public API. They * may not be used outside of libavcodec and can be changed and diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c index 96d56f406a..c23033c7e3 100644 --- a/libavcodec/cuviddec.c +++ b/libavcodec/cuviddec.c @@ -1127,13 +1127,14 @@ static const AVCodecHWConfigInternal *cuvid_hw_configs[] = { .decode = cuvid_decode_frame, \ .receive_frame = cuvid_output_frame, \ .flush = cuvid_flush, \ - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, \ + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HARDWARE, \ .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_CUDA, \ AV_PIX_FMT_NV12, \ AV_PIX_FMT_P010, \ AV_PIX_FMT_P016, \ AV_PIX_FMT_NONE }, \ .hw_configs = cuvid_hw_configs, \ + .wrapper_name = "cuvid", \ }; #if CONFIG_HEVC_CUVID_DECODER diff --git a/libavcodec/libcelt_dec.c b/libavcodec/libcelt_dec.c index 878e4cc673..75b438b285 100644 --- a/libavcodec/libcelt_dec.c +++ b/libavcodec/libcelt_dec.c @@ -137,4 +137,5 @@ AVCodec ff_libcelt_decoder = { .close = libcelt_dec_close, .decode = libcelt_dec_decode, .capabilities = AV_CODEC_CAP_DR1, + .wrapper_name = "libcelt", }; diff --git a/libavcodec/libfdk-aacdec.c b/libavcodec/libfdk-aacdec.c index a0110da62b..677b11088b 100644 --- a/libavcodec/libfdk-aacdec.c +++ b/libavcodec/libfdk-aacdec.c @@ -385,4 +385,5 @@ AVCodec ff_libfdk_aac_decoder = { .priv_class = &fdk_aac_dec_class, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, + .wrapper_name = "libfdk", }; diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c index ca0f4bf722..d47137b227 100644 --- a/libavcodec/libfdk-aacenc.c +++ b/libavcodec/libfdk-aacenc.c @@ -428,4 +428,5 @@ AVCodec ff_libfdk_aac_encoder = { .profiles = profiles, .supported_samplerates = aac_sample_rates, .channel_layouts = aac_channel_layout, + .wrapper_name = "libfdk", }; diff --git a/libavcodec/libgsmdec.c b/libavcodec/libgsmdec.c index a503215f67..89e1de0fed 100644 --- a/libavcodec/libgsmdec.c +++ b/libavcodec/libgsmdec.c @@ -135,6 +135,7 @@ AVCodec ff_libgsm_decoder = { .decode = libgsm_decode_frame, .flush = libgsm_flush, .capabilities = AV_CODEC_CAP_DR1, + .wrapper_name = "libgsm", }; #endif #if CONFIG_LIBGSM_MS_DECODER @@ -149,5 +150,6 @@ AVCodec ff_libgsm_ms_decoder = { .decode = libgsm_decode_frame, .flush = libgsm_flush, .capabilities = AV_CODEC_CAP_DR1, + .wrapper_name = "libgsm", }; #endif diff --git a/libavcodec/libgsmenc.c b/libavcodec/libgsmenc.c index e25db95181..c9e7ba056e 100644 --- a/libavcodec/libgsmenc.c +++ b/libavcodec/libgsmenc.c @@ -126,6 +126,7 @@ AVCodec ff_libgsm_encoder = { .close = libgsm_encode_close, .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE }, + .wrapper_name = "libgsm", }; #endif #if CONFIG_LIBGSM_MS_ENCODER @@ -139,5 +140,6 @@ AVCodec ff_libgsm_ms_encoder = { .close = libgsm_encode_close, .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE }, + .wrapper_name = "libgsm", }; #endif diff --git a/libavcodec/libilbc.c b/libavcodec/libilbc.c index c4c054fa5d..9a56cc8785 100644 --- a/libavcodec/libilbc.c +++ b/libavcodec/libilbc.c @@ -193,4 +193,5 @@ AVCodec ff_libilbc_encoder = { AV_SAMPLE_FMT_NONE }, .defaults = ilbc_encode_defaults, .priv_class = &ilbc_enc_class, + .wrapper_name = "libbilbc", }; diff --git a/libavcodec/libkvazaar.c b/libavcodec/libkvazaar.c index 25e7b32f5f..41a1bbb45e 100644 --- a/libavcodec/libkvazaar.c +++ b/libavcodec/libkvazaar.c @@ -305,4 +305,6 @@ AVCodec ff_libkvazaar_encoder = { .close = libkvazaar_close, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, + + .wrapper_name = "libkvazaar", }; diff --git a/libavcodec/libmp3lame.c b/libavcodec/libmp3lame.c index 5e26743f29..ecdd2e334c 100644 --- a/libavcodec/libmp3lame.c +++ b/libavcodec/libmp3lame.c @@ -349,4 +349,5 @@ AVCodec ff_libmp3lame_encoder = { 0 }, .priv_class = &libmp3lame_class, .defaults = libmp3lame_defaults, + .wrapper_name = "libmp3lame", }; diff --git a/libavcodec/libopencore-amr.c b/libavcodec/libopencore-amr.c index d509804315..516f625720 100644 --- a/libavcodec/libopencore-amr.c +++ b/libavcodec/libopencore-amr.c @@ -378,6 +378,7 @@ AVCodec ff_libopencore_amrwb_decoder = { .close = amr_wb_decode_close, .decode = amr_wb_decode_frame, .capabilities = AV_CODEC_CAP_DR1, + .wrapper_name = "libopencore_amrwb", }; #endif /* CONFIG_LIBOPENCORE_AMRWB_DECODER */ diff --git a/libavcodec/libopenh264dec.c b/libavcodec/libopenh264dec.c index d12e715117..b7ed85d175 100644 --- a/libavcodec/libopenh264dec.c +++ b/libavcodec/libopenh264dec.c @@ -147,4 +147,5 @@ AVCodec ff_libopenh264_decoder = { .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS | FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, .bsfs = "h264_mp4toannexb", + .wrapper_name = "libopenh264", }; diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c index 1152d0036f..fdadb101f5 100644 --- a/libavcodec/libopenh264enc.c +++ b/libavcodec/libopenh264enc.c @@ -301,4 +301,5 @@ AVCodec ff_libopenh264_encoder = { .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .priv_class = &class, + .wrapper_name = "libopenh264", }; diff --git a/libavcodec/libopenjpegdec.c b/libavcodec/libopenjpegdec.c index daf0a1c565..5e66cd99cc 100644 --- a/libavcodec/libopenjpegdec.c +++ b/libavcodec/libopenjpegdec.c @@ -512,4 +512,5 @@ AVCodec ff_libopenjpeg_decoder = { .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, .max_lowres = 31, .priv_class = &openjpeg_class, + .wrapper_name = "libopenjpeg", }; diff --git a/libavcodec/libopenjpegenc.c b/libavcodec/libopenjpegenc.c index 59fe52d64a..7c7d0aa6b2 100644 --- a/libavcodec/libopenjpegenc.c +++ b/libavcodec/libopenjpegenc.c @@ -778,4 +778,5 @@ AVCodec ff_libopenjpeg_encoder = { AV_PIX_FMT_NONE }, .priv_class = &openjpeg_class, + .wrapper_name = "libopenjpeg", }; diff --git a/libavcodec/libopusdec.c b/libavcodec/libopusdec.c index 9b1e002ceb..4f7f4755c2 100644 --- a/libavcodec/libopusdec.c +++ b/libavcodec/libopusdec.c @@ -223,4 +223,5 @@ AVCodec ff_libopus_decoder = { .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE }, + .wrapper_name = "libopus", }; diff --git a/libavcodec/libopusenc.c b/libavcodec/libopusenc.c index 3d88c296d3..b449497d15 100644 --- a/libavcodec/libopusenc.c +++ b/libavcodec/libopusenc.c @@ -566,4 +566,5 @@ AVCodec ff_libopus_encoder = { .supported_samplerates = libopus_sample_rates, .priv_class = &libopus_class, .defaults = libopus_defaults, + .wrapper_name = "libopus", }; diff --git a/libavcodec/librsvgdec.c b/libavcodec/librsvgdec.c index 77c771003c..e57070f8e4 100644 --- a/libavcodec/librsvgdec.c +++ b/libavcodec/librsvgdec.c @@ -124,4 +124,5 @@ AVCodec ff_librsvg_decoder = { .decode = librsvg_decode_frame, .priv_data_size = sizeof(LibRSVGContext), .capabilities = AV_CODEC_CAP_LOSSLESS | AV_CODEC_CAP_DR1, + .wrapper_name = "librsvg", }; diff --git a/libavcodec/libshine.c b/libavcodec/libshine.c index f4cf5981bc..7056fcd2e3 100644 --- a/libavcodec/libshine.c +++ b/libavcodec/libshine.c @@ -146,4 +146,5 @@ AVCodec ff_libshine_encoder = { .channel_layouts = (const uint64_t[]) { AV_CH_LAYOUT_MONO, AV_CH_LAYOUT_STEREO, 0 }, + .wrapper_name = "libshine", }; diff --git a/libavcodec/libspeexdec.c b/libavcodec/libspeexdec.c index 044883af73..d67c68c7f9 100644 --- a/libavcodec/libspeexdec.c +++ b/libavcodec/libspeexdec.c @@ -200,4 +200,5 @@ AVCodec ff_libspeex_decoder = { .decode = libspeex_decode_frame, .flush = libspeex_decode_flush, .capabilities = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1, + .wrapper_name = "libspeex", }; diff --git a/libavcodec/libspeexenc.c b/libavcodec/libspeexenc.c index 5264899fd7..6a37dbc76c 100644 --- a/libavcodec/libspeexenc.c +++ b/libavcodec/libspeexenc.c @@ -365,4 +365,5 @@ AVCodec ff_libspeex_encoder = { .supported_samplerates = (const int[]){ 8000, 16000, 32000, 0 }, .priv_class = &speex_class, .defaults = defaults, + .wrapper_name = "libspeex", }; diff --git a/libavcodec/libtheoraenc.c b/libavcodec/libtheoraenc.c index d4c39283a6..16966ed433 100644 --- a/libavcodec/libtheoraenc.c +++ b/libavcodec/libtheoraenc.c @@ -385,4 +385,5 @@ AVCodec ff_libtheora_encoder = { .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_NONE }, + .wrapper_name = "libtheora", }; diff --git a/libavcodec/libtwolame.c b/libavcodec/libtwolame.c index 12d71e7acb..030f88868f 100644 --- a/libavcodec/libtwolame.c +++ b/libavcodec/libtwolame.c @@ -226,4 +226,5 @@ AVCodec ff_libtwolame_encoder = { AV_CH_LAYOUT_STEREO, 0 }, .supported_samplerates = twolame_samplerates, + .wrapper_name = "libtwolame", }; diff --git a/libavcodec/libvo-amrwbenc.c b/libavcodec/libvo-amrwbenc.c index f756940879..77d0ccef15 100644 --- a/libavcodec/libvo-amrwbenc.c +++ b/libavcodec/libvo-amrwbenc.c @@ -152,4 +152,5 @@ AVCodec ff_libvo_amrwbenc_encoder = { .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE }, .priv_class = &amrwb_class, + .wrapper_name = "libvo_amrwbenc", }; diff --git a/libavcodec/libvorbisenc.c b/libavcodec/libvorbisenc.c index 3ca5b55e8e..f78f872fe2 100644 --- a/libavcodec/libvorbisenc.c +++ b/libavcodec/libvorbisenc.c @@ -377,4 +377,5 @@ AVCodec ff_libvorbis_encoder = { AV_SAMPLE_FMT_NONE }, .priv_class = &vorbis_class, .defaults = defaults, + .wrapper_name = "libvorbis", }; diff --git a/libavcodec/libvpxdec.c b/libavcodec/libvpxdec.c index 2ae29d202a..04f27d3396 100644 --- a/libavcodec/libvpxdec.c +++ b/libavcodec/libvpxdec.c @@ -289,6 +289,7 @@ AVCodec ff_libvpx_vp8_decoder = { .close = vpx_free, .decode = vpx_decode, .capabilities = AV_CODEC_CAP_AUTO_THREADS | AV_CODEC_CAP_DR1, + .wrapper_name = "libvpx", }; #endif /* CONFIG_LIBVPX_VP8_DECODER */ @@ -310,5 +311,6 @@ AVCodec ff_libvpx_vp9_decoder = { .capabilities = AV_CODEC_CAP_AUTO_THREADS | AV_CODEC_CAP_DR1, .init_static_data = ff_vp9_init_static, .profiles = NULL_IF_CONFIG_SMALL(ff_vp9_profiles), + .wrapper_name = "libvpx", }; #endif /* CONFIG_LIBVPX_VP9_DECODER */ diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index 9861e9d5ae..d0bd1e997a 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -1199,6 +1199,7 @@ AVCodec ff_libvpx_vp8_encoder = { .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_NONE }, .priv_class = &class_vp8, .defaults = defaults, + .wrapper_name = "libvpx", }; #endif /* CONFIG_LIBVPX_VP8_ENCODER */ @@ -1229,5 +1230,6 @@ AVCodec ff_libvpx_vp9_encoder = { .priv_class = &class_vp9, .defaults = defaults, .init_static_data = ff_vp9_init_static, + .wrapper_name = "libvpx", }; #endif /* CONFIG_LIBVPX_VP9_ENCODER */ diff --git a/libavcodec/libwavpackenc.c b/libavcodec/libwavpackenc.c index 6d5708985a..e84b074893 100644 --- a/libavcodec/libwavpackenc.c +++ b/libavcodec/libwavpackenc.c @@ -191,4 +191,5 @@ AVCodec ff_libwavpack_encoder = { .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SMALL_LAST_FRAME, .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_NONE }, + .wrapper_name = "libwavpack", }; diff --git a/libavcodec/libwebpenc.c b/libavcodec/libwebpenc.c index 0bcf628e58..48f45b6320 100644 --- a/libavcodec/libwebpenc.c +++ b/libavcodec/libwebpenc.c @@ -109,4 +109,5 @@ AVCodec ff_libwebp_encoder = { }, .priv_class = &class, .defaults = libwebp_defaults, + .wrapper_name = "libwebp", }; diff --git a/libavcodec/libwebpenc_animencoder.c b/libavcodec/libwebpenc_animencoder.c index 91bf64ca8b..7f35a0b939 100644 --- a/libavcodec/libwebpenc_animencoder.c +++ b/libavcodec/libwebpenc_animencoder.c @@ -148,4 +148,5 @@ AVCodec ff_libwebp_anim_encoder = { }, .priv_class = &class, .defaults = libwebp_defaults, + .wrapper_name = "libwebp", }; diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index 9c67c91f33..e2455e18de 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -1026,6 +1026,7 @@ AVCodec ff_libx264_encoder = { .init_static_data = X264_init_static, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, + .wrapper_name = "libx264", }; #endif @@ -1050,6 +1051,7 @@ AVCodec ff_libx264rgb_encoder = { .priv_class = &rgbclass, .defaults = x264_defaults, .pix_fmts = pix_fmts_8bit_rgb, + .wrapper_name = "libx264", }; #endif @@ -1076,5 +1078,6 @@ AVCodec ff_libx262_encoder = { .pix_fmts = pix_fmts_8bit, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, + .wrapper_name = "libx264", }; #endif diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c index 25ccb02fcb..52ad2312a3 100644 --- a/libavcodec/libx265.c +++ b/libavcodec/libx265.c @@ -442,4 +442,5 @@ AVCodec ff_libx265_encoder = { .priv_class = &class, .defaults = x265_defaults, .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AUTO_THREADS, + .wrapper_name = "libx265", }; diff --git a/libavcodec/libxavs.c b/libavcodec/libxavs.c index 865b5f62ef..801a05dbb5 100644 --- a/libavcodec/libxavs.c +++ b/libavcodec/libxavs.c @@ -478,4 +478,5 @@ AVCodec ff_libxavs_encoder = { .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .priv_class = &xavs_class, .defaults = xavs_defaults, + .wrapper_name = "libxavs", }; diff --git a/libavcodec/libxvid.c b/libavcodec/libxvid.c index 5c05fa6d87..cdaae2094e 100644 --- a/libavcodec/libxvid.c +++ b/libavcodec/libxvid.c @@ -934,4 +934,5 @@ AVCodec ff_libxvid_encoder = { .priv_class = &xvid_class, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, + .wrapper_name = "libxvid", }; diff --git a/libavcodec/libzvbi-teletextdec.c b/libavcodec/libzvbi-teletextdec.c index 687b6af129..30d0593430 100644 --- a/libavcodec/libzvbi-teletextdec.c +++ b/libavcodec/libzvbi-teletextdec.c @@ -573,4 +573,5 @@ AVCodec ff_libzvbi_teletext_decoder = { .capabilities = AV_CODEC_CAP_DELAY, .flush = teletext_flush, .priv_class= &teletext_class, + .wrapper_name = "libzvbi", }; diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c index 39f5cbc045..1b5ae4ad59 100644 --- a/libavcodec/mediacodecdec.c +++ b/libavcodec/mediacodecdec.c @@ -539,10 +539,11 @@ AVCodec ff_h264_mediacodec_decoder = { .decode = mediacodec_decode_frame, .flush = mediacodec_decode_flush, .close = mediacodec_decode_close, - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HARDWARE, .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, .bsfs = "h264_mp4toannexb", .hw_configs = mediacodec_hw_configs, + .wrapper_name = "mediacodec", }; #endif @@ -557,10 +558,11 @@ AVCodec ff_hevc_mediacodec_decoder = { .decode = mediacodec_decode_frame, .flush = mediacodec_decode_flush, .close = mediacodec_decode_close, - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HARDWARE, .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, .bsfs = "hevc_mp4toannexb", .hw_configs = mediacodec_hw_configs, + .wrapper_name = "mediacodec", }; #endif @@ -575,9 +577,10 @@ AVCodec ff_mpeg2_mediacodec_decoder = { .decode = mediacodec_decode_frame, .flush = mediacodec_decode_flush, .close = mediacodec_decode_close, - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HARDWARE, .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, .hw_configs = mediacodec_hw_configs, + .wrapper_name = "mediacodec", }; #endif @@ -592,9 +595,10 @@ AVCodec ff_mpeg4_mediacodec_decoder = { .decode = mediacodec_decode_frame, .flush = mediacodec_decode_flush, .close = mediacodec_decode_close, - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HARDWARE, .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, .hw_configs = mediacodec_hw_configs, + .wrapper_name = "mediacodec", }; #endif @@ -609,9 +613,10 @@ AVCodec ff_vp8_mediacodec_decoder = { .decode = mediacodec_decode_frame, .flush = mediacodec_decode_flush, .close = mediacodec_decode_close, - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HARDWARE, .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, .hw_configs = mediacodec_hw_configs, + .wrapper_name = "mediacodec", }; #endif @@ -626,8 +631,9 @@ AVCodec ff_vp9_mediacodec_decoder = { .decode = mediacodec_decode_frame, .flush = mediacodec_decode_flush, .close = mediacodec_decode_close, - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HARDWARE, .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, .hw_configs = mediacodec_hw_configs, + .wrapper_name = "mediacodec", }; #endif diff --git a/libavcodec/mmaldec.c b/libavcodec/mmaldec.c index b3f0cca4b5..647a22ef7c 100644 --- a/libavcodec/mmaldec.c +++ b/libavcodec/mmaldec.c @@ -840,12 +840,13 @@ static const AVOption options[]={ .decode = ffmmal_decode, \ .flush = ffmmal_flush, \ .priv_class = &ffmmal_##NAME##_dec_class, \ - .capabilities = AV_CODEC_CAP_DELAY, \ + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, \ .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, \ .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_MMAL, \ AV_PIX_FMT_YUV420P, \ AV_PIX_FMT_NONE}, \ .hw_configs = mmal_hw_configs, \ + .wrapper_name = "mmal", \ }; FFMMAL_DEC(h264, AV_CODEC_ID_H264) diff --git a/libavcodec/nvenc_h264.c b/libavcodec/nvenc_h264.c index c3b4bac749..bc7bbcddeb 100644 --- a/libavcodec/nvenc_h264.c +++ b/libavcodec/nvenc_h264.c @@ -171,9 +171,10 @@ AVCodec ff_nvenc_encoder = { .priv_data_size = sizeof(NvencContext), .priv_class = &nvenc_class, .defaults = defaults, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .pix_fmts = ff_nvenc_pix_fmts, + .wrapper_name = "nvenc", }; #endif @@ -199,9 +200,10 @@ AVCodec ff_nvenc_h264_encoder = { .priv_data_size = sizeof(NvencContext), .priv_class = &nvenc_h264_class, .defaults = defaults, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .pix_fmts = ff_nvenc_pix_fmts, + .wrapper_name = "nvenc", }; #endif @@ -227,7 +229,8 @@ AVCodec ff_h264_nvenc_encoder = { .priv_data_size = sizeof(NvencContext), .priv_class = &h264_nvenc_class, .defaults = defaults, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .pix_fmts = ff_nvenc_pix_fmts, + .wrapper_name = "nvenc", }; diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c index 89e8c3e53a..0df7eab8cd 100644 --- a/libavcodec/nvenc_hevc.c +++ b/libavcodec/nvenc_hevc.c @@ -161,8 +161,9 @@ AVCodec ff_nvenc_hevc_encoder = { .priv_class = &nvenc_hevc_class, .defaults = defaults, .pix_fmts = ff_nvenc_pix_fmts, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .wrapper_name = "nvenc", }; #endif @@ -188,6 +189,7 @@ AVCodec ff_hevc_nvenc_encoder = { .priv_class = &hevc_nvenc_class, .defaults = defaults, .pix_fmts = ff_nvenc_pix_fmts, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .wrapper_name = "nvenc", }; diff --git a/libavcodec/qsvdec_h2645.c b/libavcodec/qsvdec_h2645.c index 6b4fc5e36e..5e0067335e 100644 --- a/libavcodec/qsvdec_h2645.c +++ b/libavcodec/qsvdec_h2645.c @@ -211,7 +211,7 @@ AVCodec ff_hevc_qsv_decoder = { .decode = qsv_decode_frame, .flush = qsv_decode_flush, .close = qsv_decode_close, - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HYBRID, .priv_class = &hevc_class, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, AV_PIX_FMT_P010, @@ -219,6 +219,7 @@ AVCodec ff_hevc_qsv_decoder = { AV_PIX_FMT_NONE }, .hw_configs = ff_qsv_hw_configs, .bsfs = "hevc_mp4toannexb", + .wrapper_name = "qsv", }; #endif @@ -245,7 +246,7 @@ AVCodec ff_h264_qsv_decoder = { .decode = qsv_decode_frame, .flush = qsv_decode_flush, .close = qsv_decode_close, - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HYBRID, .priv_class = &class, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, AV_PIX_FMT_P010, @@ -253,5 +254,6 @@ AVCodec ff_h264_qsv_decoder = { AV_PIX_FMT_NONE }, .hw_configs = ff_qsv_hw_configs, .bsfs = "h264_mp4toannexb", + .wrapper_name = "qsv", }; #endif diff --git a/libavcodec/qsvdec_other.c b/libavcodec/qsvdec_other.c index f7691f95bf..416e4c8164 100644 --- a/libavcodec/qsvdec_other.c +++ b/libavcodec/qsvdec_other.c @@ -176,12 +176,13 @@ AVCodec ff_mpeg2_qsv_decoder = { .decode = qsv_decode_frame, .flush = qsv_decode_flush, .close = qsv_decode_close, - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HYBRID, .priv_class = &mpeg2_qsv_class, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, AV_PIX_FMT_QSV, AV_PIX_FMT_NONE }, .hw_configs = ff_qsv_hw_configs, + .wrapper_name = "qsv", }; #endif @@ -203,12 +204,13 @@ AVCodec ff_vc1_qsv_decoder = { .decode = qsv_decode_frame, .flush = qsv_decode_flush, .close = qsv_decode_close, - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HYBRID, .priv_class = &vc1_qsv_class, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, AV_PIX_FMT_QSV, AV_PIX_FMT_NONE }, .hw_configs = ff_qsv_hw_configs, + .wrapper_name = "qsv", }; #endif @@ -230,11 +232,12 @@ AVCodec ff_vp8_qsv_decoder = { .decode = qsv_decode_frame, .flush = qsv_decode_flush, .close = qsv_decode_close, - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING | AV_CODEC_CAP_HYBRID, .priv_class = &vp8_qsv_class, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, AV_PIX_FMT_QSV, AV_PIX_FMT_NONE }, .hw_configs = ff_qsv_hw_configs, + .wrapper_name = "qsv", }; #endif diff --git a/libavcodec/qsvenc_h264.c b/libavcodec/qsvenc_h264.c index 3242062b40..77fb2823d4 100644 --- a/libavcodec/qsvenc_h264.c +++ b/libavcodec/qsvenc_h264.c @@ -175,7 +175,7 @@ AVCodec ff_h264_qsv_encoder = { .init = qsv_enc_init, .encode2 = qsv_enc_frame, .close = qsv_enc_close, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HYBRID, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, AV_PIX_FMT_P010, AV_PIX_FMT_QSV, @@ -183,4 +183,5 @@ AVCodec ff_h264_qsv_encoder = { .priv_class = &class, .defaults = qsv_enc_defaults, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .wrapper_name = "qsv", }; diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c index f132a26c1a..4339b316a3 100644 --- a/libavcodec/qsvenc_hevc.c +++ b/libavcodec/qsvenc_hevc.c @@ -277,7 +277,7 @@ AVCodec ff_hevc_qsv_encoder = { .init = qsv_enc_init, .encode2 = qsv_enc_frame, .close = qsv_enc_close, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HYBRID, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, AV_PIX_FMT_P010, AV_PIX_FMT_QSV, @@ -285,4 +285,5 @@ AVCodec ff_hevc_qsv_encoder = { .priv_class = &class, .defaults = qsv_enc_defaults, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .wrapper_name = "qsv", }; diff --git a/libavcodec/qsvenc_jpeg.c b/libavcodec/qsvenc_jpeg.c index 731ec9a014..c18fe91940 100644 --- a/libavcodec/qsvenc_jpeg.c +++ b/libavcodec/qsvenc_jpeg.c @@ -83,9 +83,10 @@ AVCodec ff_mjpeg_qsv_encoder = { .init = qsv_enc_init, .encode2 = qsv_enc_frame, .close = qsv_enc_close, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HYBRID, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, AV_PIX_FMT_QSV, AV_PIX_FMT_NONE }, .priv_class = &class, + .wrapper_name = "qsv", }; diff --git a/libavcodec/qsvenc_mpeg2.c b/libavcodec/qsvenc_mpeg2.c index 5b583fb491..a7427d8109 100644 --- a/libavcodec/qsvenc_mpeg2.c +++ b/libavcodec/qsvenc_mpeg2.c @@ -104,11 +104,12 @@ AVCodec ff_mpeg2_qsv_encoder = { .init = qsv_enc_init, .encode2 = qsv_enc_frame, .close = qsv_enc_close, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HYBRID, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, AV_PIX_FMT_QSV, AV_PIX_FMT_NONE }, .priv_class = &class, .defaults = qsv_enc_defaults, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .wrapper_name = "qsv", }; diff --git a/libavcodec/v4l2_m2m_dec.c b/libavcodec/v4l2_m2m_dec.c index 958cdc522b..c4ea20ea83 100644 --- a/libavcodec/v4l2_m2m_dec.c +++ b/libavcodec/v4l2_m2m_dec.c @@ -215,6 +215,8 @@ AVCodec ff_ ## NAME ## _v4l2m2m_decoder = { \ .receive_frame = v4l2_receive_frame,\ .close = ff_v4l2_m2m_codec_end,\ .bsfs = bsf_name, \ + .capabilities = AV_CODEC_CAP_HARDWARE, \ + .wrapper_name = "v4l2m2m", \ }; M2MDEC(h264, "H.264", AV_CODEC_ID_H264, "h264_mp4toannexb"); diff --git a/libavcodec/v4l2_m2m_enc.c b/libavcodec/v4l2_m2m_enc.c index 76ce85fdaa..f62ce7cdb5 100644 --- a/libavcodec/v4l2_m2m_enc.c +++ b/libavcodec/v4l2_m2m_enc.c @@ -335,6 +335,8 @@ AVCodec ff_ ## NAME ## _v4l2m2m_encoder = { \ .send_frame = v4l2_send_frame,\ .receive_packet = v4l2_receive_packet,\ .close = ff_v4l2_m2m_codec_end,\ + .capabilities = AV_CODEC_CAP_HARDWARE, \ + .wrapper_name = "v4l2m2m", \ }; M2MENC(mpeg4,"MPEG4", AV_CODEC_ID_MPEG4); diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c index 6940823b8e..a7f9a60253 100644 --- a/libavcodec/vaapi_encode_h264.c +++ b/libavcodec/vaapi_encode_h264.c @@ -1089,10 +1089,11 @@ AVCodec ff_h264_vaapi_encoder = { .encode2 = &ff_vaapi_encode2, .close = &vaapi_encode_h264_close, .priv_class = &vaapi_encode_h264_class, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, .defaults = vaapi_encode_h264_defaults, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .wrapper_name = "vaapi", }; diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c index 8e98b0230d..f3b4f6c7e2 100644 --- a/libavcodec/vaapi_encode_h265.c +++ b/libavcodec/vaapi_encode_h265.c @@ -1018,10 +1018,11 @@ AVCodec ff_hevc_vaapi_encoder = { .encode2 = &ff_vaapi_encode2, .close = &vaapi_encode_h265_close, .priv_class = &vaapi_encode_h265_class, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, .defaults = vaapi_encode_h265_defaults, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .wrapper_name = "vaapi", }; diff --git a/libavcodec/vaapi_encode_mjpeg.c b/libavcodec/vaapi_encode_mjpeg.c index 2cbf7925f2..c949e89646 100644 --- a/libavcodec/vaapi_encode_mjpeg.c +++ b/libavcodec/vaapi_encode_mjpeg.c @@ -422,9 +422,11 @@ AVCodec ff_mjpeg_vaapi_encoder = { .encode2 = &ff_vaapi_encode2, .close = &ff_vaapi_encode_close, .priv_class = &vaapi_encode_mjpeg_class, + .capabilities = AV_CODEC_CAP_HARDWARE, .defaults = vaapi_encode_mjpeg_defaults, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .wrapper_name = "vaapi", }; diff --git a/libavcodec/vaapi_encode_mpeg2.c b/libavcodec/vaapi_encode_mpeg2.c index 02eca30dc5..4537955c40 100644 --- a/libavcodec/vaapi_encode_mpeg2.c +++ b/libavcodec/vaapi_encode_mpeg2.c @@ -669,10 +669,11 @@ AVCodec ff_mpeg2_vaapi_encoder = { .init = &vaapi_encode_mpeg2_init, .encode2 = &ff_vaapi_encode2, .close = &vaapi_encode_mpeg2_close, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, .defaults = vaapi_encode_mpeg2_defaults, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .wrapper_name = "vaapi", }; diff --git a/libavcodec/vaapi_encode_vp8.c b/libavcodec/vaapi_encode_vp8.c index 423f7483e8..b4c5521d1f 100644 --- a/libavcodec/vaapi_encode_vp8.c +++ b/libavcodec/vaapi_encode_vp8.c @@ -260,10 +260,11 @@ AVCodec ff_vp8_vaapi_encoder = { .encode2 = &ff_vaapi_encode2, .close = &ff_vaapi_encode_close, .priv_class = &vaapi_encode_vp8_class, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, .defaults = vaapi_encode_vp8_defaults, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .wrapper_name = "vaapi", }; diff --git a/libavcodec/vaapi_encode_vp9.c b/libavcodec/vaapi_encode_vp9.c index a987d1cd71..9108699ac3 100644 --- a/libavcodec/vaapi_encode_vp9.c +++ b/libavcodec/vaapi_encode_vp9.c @@ -304,10 +304,11 @@ AVCodec ff_vp9_vaapi_encoder = { .encode2 = &ff_vaapi_encode2, .close = &ff_vaapi_encode_close, .priv_class = &vaapi_encode_vp9_class, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, .defaults = vaapi_encode_vp9_defaults, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .wrapper_name = "vaapi", }; diff --git a/libavcodec/version.h b/libavcodec/version.h index 3b5c3000be..b529f00227 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -28,8 +28,8 @@ #include "libavutil/version.h" #define LIBAVCODEC_VERSION_MAJOR 58 -#define LIBAVCODEC_VERSION_MINOR 6 -#define LIBAVCODEC_VERSION_MICRO 103 +#define LIBAVCODEC_VERSION_MINOR 7 +#define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index 086beb41fc..c47e5c4045 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -2599,8 +2599,9 @@ AVCodec ff_hevc_videotoolbox_encoder = { .init = vtenc_init, .encode2 = vtenc_frame, .close = vtenc_close, - .capabilities = AV_CODEC_CAP_DELAY, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARSWARE, .priv_class = &hevc_videotoolbox_class, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, + .wrapper_name = "videotoolbox", };