From patchwork Wed Nov 29 00:34:03 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Thompson X-Patchwork-Id: 6430 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp3857441jah; Tue, 28 Nov 2017 16:34:13 -0800 (PST) X-Google-Smtp-Source: AGs4zMYqb9XtT3WaxVruQy9lspMZ0g3JBsrqkN4HsFClWpylsk/S+YwZZ9zSNORpUW4zxBdURdwc X-Received: by 10.223.132.101 with SMTP id 92mr696206wrf.85.1511915653027; Tue, 28 Nov 2017 16:34:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511915652; cv=none; d=google.com; s=arc-20160816; b=YfgFlonsGr2QlRunXnUylM8iMp/onw0WgLoKCt0GHQGN2MxfUbHRuRXeOWd1WoRudZ mHgSB79EhZMyZMGcbnQKwCQiobtv0NzfofDMKtDi68PDX4nx6gnb5W6uMrmQFqs6yoVM uTS/jEneTVFtESfUyY3AxbxBxGbi0rul0KzmUtgiUr6/p3hnjOeqw6tGyiiyHJpp4W9H GbLvgQbpzs82NKzl1+AW9UXoEouGrzZuAwr2LexdXLhG4aalKEKTvE0JouRG+KK8STsS spr7BlYTtFyo9GMC5NItYV947wdz9ZzeBG6iduzxOGgXaxl2nfqyVFMflJvrjTLQzWOc 45DA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:content-language:mime-version:user-agent:date :message-id:from:to:dkim-signature:delivered-to :arc-authentication-results; bh=3BhM4EDmljcFVtIvF0KN7K21V0QGQ06J9Ll+7VQis5w=; b=bOrcktaEgobZS/qKoaxy/eXNYVnAdMEKxELjcb1xdChztov9tUIbBg5PkDVk4onCs/ 7sPSEWvMy9Rwxl1vpXTUH7Kumlo9lGioNmDiMbaVwhplybNEKBr9CGOvC7yIqBjvPOBp brTMK0tDcofrjROXnRE+5hwOuEmiOcpYVCQzckjADGzLWnLi1rc18e0yM62wrO7lcCfJ PRUOSCtsLq0yLKc+CC9MXXFhwvG5JSk88Nw1L6S/L5iaKU81bZx1+yuucwc9I1oAy1UP 2krKM09dgVuhYXLXbQ7FW6tSUR2sZpvC8cDio1r3IytUohObeZhLhpVCsOvxCInULeVN yfxw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@jkqxz-net.20150623.gappssmtp.com header.s=20150623 header.b=xIsm+Wal; 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 y45si286352wrc.440.2017.11.28.16.34.12; Tue, 28 Nov 2017 16:34:12 -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=@jkqxz-net.20150623.gappssmtp.com header.s=20150623 header.b=xIsm+Wal; 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 76C5C68A08F; Wed, 29 Nov 2017 02:34:09 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f196.google.com (mail-wr0-f196.google.com [209.85.128.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 10D9B68A041 for ; Wed, 29 Nov 2017 02:34:03 +0200 (EET) Received: by mail-wr0-f196.google.com with SMTP id g53so1825057wra.2 for ; Tue, 28 Nov 2017 16:34:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jkqxz-net.20150623.gappssmtp.com; s=20150623; h=to:from:subject:message-id:date:user-agent:mime-version :content-language:content-transfer-encoding; bh=PT1Rxc2hyb3VPDkY1+j6FBGEA77rSIcYupgphmnYWJs=; b=xIsm+WalK1ikaoZeMjbhzD6AlTYPQc5TD+ve5mUg1+jjv/uX/bS+ExEDPGJKaOOaDu LSUouQEqR2LEf4zdhwKuoIKKdcpPP023YBEXGHq/rEhSEBpwIE+Bnc1ZLCATyyOyQqoP BKzyKYZCfM0ykhk+C5wWxwscb5OtjvPB39zzr508F8WuPoOPV+BDfOF/qBArOzS9kDUl Ok6GrDVk0Ml8p7LT1RHRObokqUs0RJJJKdP0UsXmXVlbqajgVBEPXFgGiu3MPDNOSxEi OGXq2Gcimo07I4842A1ciuv/Wx96XfQSlJzWStLAJuD4rCEFYOz9/1Z9au/GzwT6aAdY 1rzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version:content-language:content-transfer-encoding; bh=PT1Rxc2hyb3VPDkY1+j6FBGEA77rSIcYupgphmnYWJs=; b=czSF7+/4yue+2pbM3XZMS1PSqcDlJB+rbCn++SAgo+GpVGW7rb4E6gAqB7CfXVILTi 0i58rrA+Q0BYJcqowaIR3hM51uFp3Oc5XoBAf4adXzf9lm4ByOgLg5WJX4fC/R3L109J lb1MM7fWUXEIVILfFoLXrwCY1fs9Kwa5lavBtWMagZJ9jlN6U96ezc4QA3oIIEBoSZ+5 E3m0oh/CN04XpqGt0K3v5IKb0PusnDtjgacUdMeQvfOPVh4NIWWM5ju+YRrB82NbMqIK eRSMGcKTXqL62J+uqzqhWLPZ2MvV89mjwkeodwBdYxphHc1+VE0ktP3FYwoRUyhdB6Y8 aBbQ== X-Gm-Message-State: AJaThX7ojYHIWuZkUNb21vEjSoqRNty2j121SJeBAtt+q/ddMx7RmpUb qFkYWo2YWAncTEvuj1sLMAdV2xCL X-Received: by 10.223.150.175 with SMTP id u44mr679727wrb.115.1511915645077; Tue, 28 Nov 2017 16:34:05 -0800 (PST) Received: from [192.168.0.9] (cpc91242-cmbg18-2-0-cust650.5-4.cable.virginm.net. [82.8.130.139]) by smtp.gmail.com with ESMTPSA id c2sm535914wrg.57.2017.11.28.16.34.04 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 28 Nov 2017 16:34:04 -0800 (PST) To: FFmpeg development discussions and patches From: Mark Thompson Message-ID: <39281f79-0625-8428-66b0-ef97acfc2c2f@jkqxz.net> Date: Wed, 29 Nov 2017 00:34:03 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 Content-Language: en-US Subject: [FFmpeg-devel] [PATCH] examples/hw_decode: Use hw-config information to find pixfmt 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This removes all remaining device-type specificity. --- doc/examples/hw_decode.c | 55 ++++++++++++++++++++---------------------------- 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/doc/examples/hw_decode.c b/doc/examples/hw_decode.c index 9c7adbf51a..8f48f3b706 100644 --- a/doc/examples/hw_decode.c +++ b/doc/examples/hw_decode.c @@ -44,34 +44,6 @@ static AVBufferRef *hw_device_ctx = NULL; static enum AVPixelFormat hw_pix_fmt; static FILE *output_file = NULL; -static enum AVPixelFormat find_fmt_by_hw_type(const enum AVHWDeviceType type) -{ - enum AVPixelFormat fmt; - - switch (type) { - case AV_HWDEVICE_TYPE_VAAPI: - fmt = AV_PIX_FMT_VAAPI; - break; - case AV_HWDEVICE_TYPE_DXVA2: - fmt = AV_PIX_FMT_DXVA2_VLD; - break; - case AV_HWDEVICE_TYPE_D3D11VA: - fmt = AV_PIX_FMT_D3D11; - break; - case AV_HWDEVICE_TYPE_VDPAU: - fmt = AV_PIX_FMT_VDPAU; - break; - case AV_HWDEVICE_TYPE_VIDEOTOOLBOX: - fmt = AV_PIX_FMT_VIDEOTOOLBOX; - break; - default: - fmt = AV_PIX_FMT_NONE; - break; - } - - return fmt; -} - static int hw_decoder_init(AVCodecContext *ctx, const enum AVHWDeviceType type) { int err = 0; @@ -184,18 +156,23 @@ int main(int argc, char *argv[]) AVCodec *decoder = NULL; AVPacket packet; enum AVHWDeviceType type; + int i; if (argc < 4) { - fprintf(stderr, "Usage: %s \n", argv[0]); + fprintf(stderr, "Usage: %s \n", argv[0]); return -1; } av_register_all(); type = av_hwdevice_find_type_by_name(argv[1]); - hw_pix_fmt = find_fmt_by_hw_type(type); - if (hw_pix_fmt == -1) { - fprintf(stderr, "Cannot support '%s' in this example.\n", argv[1]); + if (type == AV_HWDEVICE_TYPE_NONE) { + fprintf(stderr, "Device type %s is not supported.\n", argv[1]); + fprintf(stderr, "Available device types:"); + type = AV_HWDEVICE_TYPE_NONE; + while((type = av_hwdevice_iterate_types(type)) != AV_HWDEVICE_TYPE_NONE) + fprintf(stderr, " %s", av_hwdevice_get_type_name(type)); + fprintf(stderr, "\n"); return -1; } @@ -218,6 +195,20 @@ int main(int argc, char *argv[]) } video_stream = ret; + for (i = 0;; i++) { + const AVCodecHWConfig *config = avcodec_get_hw_config(decoder, i); + if (!config) { + fprintf(stderr, "Decoder %s does not support device type %s.\n", + decoder->name, av_hwdevice_get_type_name(type)); + return -1; + } + if (config->methods & AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX && + config->device_type == type) { + hw_pix_fmt = config->pix_fmt; + break; + } + } + if (!(decoder_ctx = avcodec_alloc_context3(decoder))) return AVERROR(ENOMEM);