From patchwork Tue Nov 28 04:46:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philip Langdale X-Patchwork-Id: 6415 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp2729958jah; Mon, 27 Nov 2017 20:46:40 -0800 (PST) X-Google-Smtp-Source: AGs4zMbP4qXrV5FHl8G6TsnG/2RW/3/Kslc8lfLjZ6RBn+nso9JBpc1bnDhr+Xl/yFsRv6rnyp0H X-Received: by 10.28.114.13 with SMTP id n13mr8142344wmc.146.1511844400168; Mon, 27 Nov 2017 20:46:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511844400; cv=none; d=google.com; s=arc-20160816; b=e25vkTd6qVC3HEZ0/JeLh60pDOKFRR5SS9XArc2YtYxZ/Kr+hlOW8WcrNa6gjFClMi EJfYBsADZoNyIGjGyEnNycn5jdgWnkI8ZOUPfM4DP9UAlzldCU+1uC8KJt6nFUeNRb/x +RLwIwdVUr9epx3VQCRjswN8eHd0FYIEX2bD4VnyPwyDnKY4oPbSZBtflhJha6KNyzq7 I2mi13AM/4Dfeu8aMICjxN13D0L1UTrI4d9SpbcPkuB5YOOyosBMW4K6GmSP2sdJVgO8 KrSZxFzUvkX0jaMIDmnLqD1wFinlAeSpzqX0XlpLjPUUfPJ8OOa7vjTLuvQI1b0ZyiUy XC4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=lDoubLtyLhwJn5kStdoGYch6M882eEiM3fFComPSnvU=; b=iMjxCyvg5HVpu7SXo2mHldoiMFHwSpTbyNDv7eMpt7uYSg94RBsDmvhK0dNrlRPJve dRi10cL5Il8rlVsXmPrt36r79UIaZTL58wD7xjD47GwkhCaxZOCk1GqG7b/HMIEcLgVj FD+tWwhg7ezUb0VyOz60hDUTqvTq5krvuRMGuXnVVN+w4k21NxPKuF6yZxDiLfs/0ZSV tJOFgMJOwRCT6aeVzK++Fb/qyTkBAFfrjjlZsW5mKEhplH9Eppi5naAO0bp1BsP42Xd1 aoevGeqIBCMteDCtQkZF6pp3KJNHb+4wg+RxjbY3o5+L2biq/hn9NBV9H4NhsoERRy/v ihtw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@overt.org header.s=mail header.b=AqDW2q72; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id y93si799032wrc.394.2017.11.27.20.46.39; Mon, 27 Nov 2017 20:46:40 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@overt.org header.s=mail header.b=AqDW2q72; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B2343689FD4; Tue, 28 Nov 2017 06:46:22 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-it0-f100.google.com (mail-it0-f100.google.com [209.85.214.100]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 66F48689A72 for ; Tue, 28 Nov 2017 06:46:14 +0200 (EET) Received: by mail-it0-f100.google.com with SMTP id x28so23990736ita.0 for ; Mon, 27 Nov 2017 20:46:16 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:from:to:cc:subject:date :message-id:in-reply-to:references; bh=tfniy3TE4om4/kfI2IwZO/q7IPHWX3lxruQTSo/bXmc=; b=fdBQO1AyPbCexX1QMOy9PgTOWDri4cAOTnrPKTlLfDdOrJJ3f3hEEdgvBXb/xgnU7s iTwjXW7LfPDiw/SLlbvfVfpGIQkKoVtNLCxaBsLEVdyvKZBdx+LFPOV8cQX25HoQwTfT qpnFvFT6NOMd5l6kpgMEH7T7IwqAqgprDWNGLqHCD1Wkxnp1cwbXHPzXLaFITUI1TjP8 uR/px1l1kEHTIP8b6zN1T8UKFUGGX+6ebyQqNLxsIIYbyXTDVttmIofCvmJ7zPmjmXEO tyvc3mH7Kai8j1jTdFBzV18hEoxph0WoT9sptocUeYAKtoz9WL1tL6C/TlAiTBzEq6V9 6xkQ== X-Gm-Message-State: AJaThX7qIB3g6WTSy9cRoj8VlVEwnJZGBp7BPKQy1oO1DqspJ9YETu0x YUwg+pHaX6YB7xOPVCMCHm7LYTkH/gR4Z1jl72+KJ+neHXzNYg== X-Received: by 10.36.179.7 with SMTP id e7mr794635itf.139.1511844375678; Mon, 27 Nov 2017 20:46:15 -0800 (PST) Received: from mail.overt.org (155.208.178.107.bc.googleusercontent.com. [107.178.208.155]) by smtp-relay.gmail.com with ESMTPS id u74sm2509389itb.2.2017.11.27.20.46.15 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 27 Nov 2017 20:46:15 -0800 (PST) X-Relaying-Domain: gapps.overt.org Received: from authenticated-user (mail.overt.org [107.178.208.155]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.overt.org (Postfix) with ESMTPSA id EA97578537; Tue, 28 Nov 2017 04:46:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=overt.org; s=mail; t=1511844375; bh=HZDZnsXoHJmAQlKPlKZ7QbVk6ZtPUZuXfbNLiocNDFo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AqDW2q72nAn0XJXsyIa1+275L6oTGtaFkL5QeTj13yJ6uxeXk0jmjrcWpWl5h25g3 GmUArycX2lGaFixR4WWyPCUjleTeU0qflHGZLLmsJCso5739Gs6pZY+TKA99F3nHJy pdPEvl6c3BZ6zs05Z0lvlAS8aDGx9Q2tYnktF709pWdwfiHk0pQ+lL4wFvM+1Z5ISu YujjZ2trAQmmB2ESxg3TENe9vGw2Ix3kQcRpKC82xX3k6xEaEgA4iXEJ8ctp9hAFkL ZLZRSqsEn5ZAGG4YVspQnb/3fQheVTU+GTzmH767J+IYlWk5h6aPn6FTc4ZvVOMeVK TS4ibla43/ddQ== From: Philip Langdale To: ffmpeg-devel@ffmpeg.org Date: Mon, 27 Nov 2017 20:46:01 -0800 Message-Id: <20171128044601.5963-3-philipl@overt.org> In-Reply-To: <20171128044601.5963-1-philipl@overt.org> References: <20171128044601.5963-1-philipl@overt.org> Subject: [FFmpeg-devel] [PATCH 2/2] avcodec: Add hardware metadata to hardware backed decoders X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Philip Langdale MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" 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 --- 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");