Now that we have a way to identify hardware backed decoders, let us do so. I may have missed some.
Signed-off-by: Philip Langdale <phil...@overt.org> --- libavcodec/crystalhd.c | 4 +++- libavcodec/cuviddec.c | 4 +++- libavcodec/mediacodecdec.c | 24 ++++++++++++++++++------ libavcodec/mmaldec.c | 3 ++- libavcodec/qsvdec_h2645.c | 8 ++++++-- libavcodec/qsvdec_other.c | 12 +++++++++--- libavcodec/v4l2_m2m_dec.c | 2 ++ 7 files changed, 43 insertions(+), 14 deletions(-) diff --git a/libavcodec/crystalhd.c b/libavcodec/crystalhd.c index 83bc8bf364..0e856f2919 100644 --- a/libavcodec/crystalhd.c +++ b/libavcodec/crystalhd.c @@ -786,8 +786,10 @@ static int crystalhd_receive_frame(AVCodecContext *avctx, AVFrame *frame) .receive_frame = crystalhd_receive_frame, \ .flush = flush, \ .bsfs = bsf_name, \ - .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_YUYV422, AV_PIX_FMT_NONE}, \ + .provider = "crystalhd", \ }; #if CONFIG_H264_CRYSTALHD_DECODER diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c index 96d56f406a..21fbbe9970 100644 --- a/libavcodec/cuviddec.c +++ b/libavcodec/cuviddec.c @@ -1127,13 +1127,15 @@ 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, \ + .provider = "cuvid", \ }; #if CONFIG_HEVC_CUVID_DECODER diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c index 6d392adb3a..dd630bf6e3 100644 --- a/libavcodec/mediacodecdec.c +++ b/libavcodec/mediacodecdec.c @@ -538,10 +538,12 @@ 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, + .provider = "mediacodec", }; #endif @@ -556,10 +558,12 @@ 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, + .provider = "mediacodec", }; #endif @@ -574,9 +578,11 @@ 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, + .provider = "mediacodec", }; #endif @@ -591,9 +597,11 @@ 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, + .provider = "mediacodec", }; #endif @@ -608,9 +616,11 @@ 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, + .provider = "mediacodec", }; #endif @@ -625,8 +635,10 @@ 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, + .provider = "mediacodec", }; #endif diff --git a/libavcodec/mmaldec.c b/libavcodec/mmaldec.c index b3f0cca4b5..b047b4b24e 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, \ + .provider = "mmal", \ }; FFMMAL_DEC(h264, AV_CODEC_ID_H264) diff --git a/libavcodec/qsvdec_h2645.c b/libavcodec/qsvdec_h2645.c index 6b4fc5e36e..29aabab0a7 100644 --- a/libavcodec/qsvdec_h2645.c +++ b/libavcodec/qsvdec_h2645.c @@ -211,7 +211,8 @@ 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 | + AC_CODEC_CAP_HARDWARE | AV_CODEC_CAP_MAYBE_NOT_HARDWARE, .priv_class = &hevc_class, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, AV_PIX_FMT_P010, @@ -219,6 +220,7 @@ AVCodec ff_hevc_qsv_decoder = { AV_PIX_FMT_NONE }, .hw_configs = ff_qsv_hw_configs, .bsfs = "hevc_mp4toannexb", + .provider = "qsv", }; #endif @@ -245,7 +247,8 @@ 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 | + AC_CODEC_CAP_HARDWARE | AV_CODEC_CAP_MAYBE_NOT_HARDWARE, .priv_class = &class, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, AV_PIX_FMT_P010, @@ -253,5 +256,6 @@ AVCodec ff_h264_qsv_decoder = { AV_PIX_FMT_NONE }, .hw_configs = ff_qsv_hw_configs, .bsfs = "h264_mp4toannexb", + .provider = "qsv", }; #endif diff --git a/libavcodec/qsvdec_other.c b/libavcodec/qsvdec_other.c index f7691f95bf..259f50df49 100644 --- a/libavcodec/qsvdec_other.c +++ b/libavcodec/qsvdec_other.c @@ -176,12 +176,14 @@ 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 | + AC_CODEC_CAP_HARDWARE | AV_CODEC_CAP_MAYBE_NOT_HARDWARE, .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, + .provider = "qsv", }; #endif @@ -203,12 +205,14 @@ 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 | + AC_CODEC_CAP_HARDWARE | AV_CODEC_CAP_MAYBE_NOT_HARDWARE, .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, + .provider = "qsv", }; #endif @@ -230,11 +234,13 @@ 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 | + AC_CODEC_CAP_HARDWARE | AV_CODEC_CAP_MAYBE_NOT_HARDWARE, .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, + .provider = "qsv", }; #endif diff --git a/libavcodec/v4l2_m2m_dec.c b/libavcodec/v4l2_m2m_dec.c index 958cdc522b..2d0ac30a61 100644 --- a/libavcodec/v4l2_m2m_dec.c +++ b/libavcodec/v4l2_m2m_dec.c @@ -214,7 +214,9 @@ AVCodec ff_ ## NAME ## _v4l2m2m_decoder = { \ .init = v4l2_decode_init,\ .receive_frame = v4l2_receive_frame,\ .close = ff_v4l2_m2m_codec_end,\ + .capabilities = AV_CODEC_CAP_HARDWARE, \ .bsfs = bsf_name, \ + .provider = "v4l2m2m", \ }; M2MDEC(h264, "H.264", AV_CODEC_ID_H264, "h264_mp4toannexb"); -- 2.14.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel