From patchwork Mon Jan 9 05:58:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Huang, Zhengxu" X-Patchwork-Id: 2135 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.89.21 with SMTP id n21csp6911561vsb; Sun, 8 Jan 2017 21:58:55 -0800 (PST) X-Received: by 10.28.166.216 with SMTP id p207mr1586061wme.27.1483941535635; Sun, 08 Jan 2017 21:58:55 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 195si9276051wmr.165.2017.01.08.21.58.54; Sun, 08 Jan 2017 21:58:55 -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=@gmail.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 60FB268A5F3; Mon, 9 Jan 2017 07:58:45 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf0-f196.google.com (mail-pf0-f196.google.com [209.85.192.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5D8FA6806AD for ; Mon, 9 Jan 2017 07:58:39 +0200 (EET) Received: by mail-pf0-f196.google.com with SMTP id b22so7450120pfd.3 for ; Sun, 08 Jan 2017 21:58:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to; bh=/ZfDrWCon5UZw+S+ZCV4rm504Ab1mSFUmUlJyQH/DJs=; b=Lf3HmnfqiQsR5hwmlQyZn4m2q9Zd5udrx5UYhZ3Qp1iWik8phXB/xmJ/g5rlTZ4F29 CLwm/wdhe2sG6MqTLOLzIvuJEm3w8dqmVG8M9pjNP2zwyYPXIXLRejoawJXhIbU1kP51 46pQ5WORknmmxjOFiWhllzKx+sgqDWG1Gm2VRzb77Hzgk6AXYkpvZVGFZoOG/bYNCDnB OKSGC9ya77Clna7Hx6FqrAuXrghaCW+2dyP0Y0as1kBjp3s1eWWkbGIIvWEl2YKoCsmX owAae4TQAXq90pRtI5Afo/h3Ac+f9auKPCfGt0PujjGqtfjRTCWBO+nDRTHuWgboZ65H PFSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to; bh=/ZfDrWCon5UZw+S+ZCV4rm504Ab1mSFUmUlJyQH/DJs=; b=hPHosSekqwMXPq8Qp/jLqYNiadOSAZeito30PQPOvilO35CLGQOyMihbp7qc/tG4sT pLOd8VfaYr/P6tb5Uy+n379sLotM6MxLPVPFM4uwiS8yOM8E8kTyz5gXrPOt8dSA2L83 eP5rPMQ2d1huIEibKMH+bd+gbo6U+AF57CGHaMAYA9EySh6wCTtlNJ588JZXbgyvZIUW sp9yNhawjPIBJs57yr3oaZXv+Csc0z51TKX5yv6R9VeQYVWfnZzny87jBlOUERUSQ4L4 3Cem1w8LK+ytupBiPD8NQhN0O+Khcw0juoXG0w4B8+36S+vumEljFgDGvLs9j2+PcpP3 et3Q== X-Gm-Message-State: AIkVDXLuT5Ul5hnqhuB1XOCY7nQO44hvFMEzcBv3PnIFaKV0dQ8h+M2O6tUrlFW6vsdgBQ== X-Received: by 10.84.142.131 with SMTP id 3mr190904629plx.124.1483941524708; Sun, 08 Jan 2017 21:58:44 -0800 (PST) Received: from [10.239.205.12] ([192.55.54.42]) by smtp.gmail.com with ESMTPSA id w25sm12840566pge.9.2017.01.08.21.58.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 Jan 2017 21:58:44 -0800 (PST) To: FFmpeg development discussions and patches , sw@jkqxz.net, huazh407@gmail.com, chaox.a.liu@gmail.com References: <36c9435d-86fe-f643-9fed-65712b6b697a@jkqxz.net> <9325ca81-197c-7598-44a6-506e9345852a@gmail.com> <59d61938-6df7-935a-3bca-e0ff57255ecf@jkqxz.net> From: "Huang, Zhengxu" Message-ID: <6481e1f6-0cbd-0a7f-6780-ec15821e42b1@gmail.com> Date: Mon, 9 Jan 2017 13:58:39 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 MIME-Version: 1.0 In-Reply-To: <59d61938-6df7-935a-3bca-e0ff57255ecf@jkqxz.net> Subject: Re: [FFmpeg-devel] [PATCH] libavutil/hwcontext_qsv: Command line using hwaccel 'QSV' doesn't work 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" 在 2017/1/8 7:36, Mark Thompson 写道: > On 06/01/17 06:37, Huang, Zhengxu wrote: >> Hi >> >> According to the suggestion update the patch. >> >> thanks. >> >> >> From 4beadd3c84c797a56c4f375458d0a1e9d9b233c8 Mon Sep 17 00:00:00 2001 >> From: Zhengxu >> Date: Thu, 5 Jan 2017 14:48:06 +0800 >> Subject: [PATCH] ffmpeg_qsv: Add an option "qsv_child_device" to choose an >> proper node for QSV child device(vaapi or dxva2). >> >> Reason: For some cases, such as 2 or more graphics card existing, the >> default command line may fail because ffmpeg open a wrong device node: >> ffmpeg -hwaccel qsv -c:v h264_qsv -i test.264 -c:v h264_qsv out.264 >> Let user to choose the proper one by running like below: >> ffmpeg -hwaccel qsv -qsv_child_device /dev/dri/renderD128 -c:v h264_qsv \ >> -i test.264 -c:v h264_qsv out.264 > I think it should just be "qsv_device". It is the device being used by qsv, the fact that it is a child device of another kind (dxva or vaapi) wrapped inside the hwcontext infrastructure isn't really relevant to the ffmpeg utility. > >> Signed-off-by: ChaoX A Liu >> Signed-off-by: Huang, Zhengxu >> Signed-off-by: Andrew, Zhang >> --- >> ffmpeg.h | 3 +++ >> ffmpeg_opt.c | 5 +++++ >> ffmpeg_qsv.c | 11 ++++++++++- >> 3 files changed, 18 insertions(+), 1 deletion(-) >> >> diff --git a/ffmpeg.h b/ffmpeg.h >> index ebe5bf0..91a3333 100644 >> --- a/ffmpeg.h >> +++ b/ffmpeg.h >> @@ -602,6 +602,9 @@ extern const OptionDef options[]; >> extern const HWAccel hwaccels[]; >> extern int hwaccel_lax_profile_check; >> extern AVBufferRef *hw_device_ctx; >> +#if CONFIG_QSV >> +extern char *qsv_child_device; >> +#endif >> >> >> void term_init(void); >> diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c >> index 6862456..7fd08a2 100644 >> --- a/ffmpeg_opt.c >> +++ b/ffmpeg_opt.c >> @@ -3679,5 +3679,10 @@ const OptionDef options[] = { >> "set VAAPI hardware device (DRM path or X11 display name)", "device" }, >> #endif >> >> +#if CONFIG_QSV >> + { "qsv_child_device", HAS_ARG | OPT_STRING | OPT_EXPERT, { &qsv_child_device }, >> + "set QSV child device (DRM path or DXVA)", "device"}, > An X11 display will still work here. Also, maybe clarify that the DXVA case is a DirectX adapter index? > > "set QSV hardware device (DirectX adapter index, DRM path or X11 display name)", say. > >> +#endif >> + >> { NULL, }, >> }; >> diff --git a/ffmpeg_qsv.c b/ffmpeg_qsv.c >> index 68ff5bd..5a6db20 100644 >> --- a/ffmpeg_qsv.c >> +++ b/ffmpeg_qsv.c >> @@ -28,6 +28,8 @@ >> >> #include "ffmpeg.h" >> >> +char *qsv_child_device = NULL; >> + >> static int qsv_get_buffer(AVCodecContext *s, AVFrame *frame, int flags) >> { >> InputStream *ist = s->opaque; >> @@ -44,9 +46,16 @@ static void qsv_uninit(AVCodecContext *s) >> static int qsv_device_init(InputStream *ist) >> { >> int err; >> + AVDictionary *dict = NULL; >> + >> + if (qsv_child_device) { >> + err = av_dict_set(&dict, "child_device", qsv_child_device, 0); >> + if (err < 0) >> + return err; >> + } >> >> err = av_hwdevice_ctx_create(&hw_device_ctx, AV_HWDEVICE_TYPE_QSV, >> - ist->hwaccel_device, NULL, 0); >> + ist->hwaccel_device, dict, 0); >> if (err < 0) { >> av_log(NULL, AV_LOG_ERROR, "Error creating a QSV device\n"); >> return err; >> -- >> 1.8.3.1 >> > Patch otherwise ok. Hi Mark, thanks a lot. update the above two questions you mentioned. > Thanks, > > - Mark > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel From ce4bcaf1cf4010bb5ad9ff97d6df803a629d2e88 Mon Sep 17 00:00:00 2001 From: Zhengxu Date: Thu, 5 Jan 2017 14:48:06 +0800 Subject: [PATCH] ffmpeg_qsv: Add an option "qsv_device" to choose an proper node for QSV child device(vaapi or dxva2). Reason: For some cases, such as 2 or more graphics card existing, the default command line may fail because ffmpeg open a wrong device node: ffmpeg -hwaccel qsv -c:v h264_qsv -i test.264 -c:v h264_qsv out.264 Let user to choose the proper one by running like below: ffmpeg -hwaccel qsv -qsv_device /dev/dri/renderD128 -c:v h264_qsv \ -i test.264 -c:v h264_qsv out.264 Signed-off-by: ChaoX A Liu Signed-off-by: Huang, Zhengxu Signed-off-by: Andrew, Zhang --- ffmpeg.h | 3 +++ ffmpeg_opt.c | 5 +++++ ffmpeg_qsv.c | 19 ++++++++++++++++--- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/ffmpeg.h b/ffmpeg.h index ebe5bf0..081913b 100644 --- a/ffmpeg.h +++ b/ffmpeg.h @@ -602,6 +602,9 @@ extern const OptionDef options[]; extern const HWAccel hwaccels[]; extern int hwaccel_lax_profile_check; extern AVBufferRef *hw_device_ctx; +#if CONFIG_QSV +extern char *qsv_device; +#endif void term_init(void); diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c index 6862456..52c2bab 100644 --- a/ffmpeg_opt.c +++ b/ffmpeg_opt.c @@ -3679,5 +3679,10 @@ const OptionDef options[] = { "set VAAPI hardware device (DRM path or X11 display name)", "device" }, #endif +#if CONFIG_QSV + { "qsv_device", HAS_ARG | OPT_STRING | OPT_EXPERT, { &qsv_device }, + "set QSV hardware device (DirectX adapter index, DRM path or X11 display name)", "device"}, +#endif + { NULL, }, }; diff --git a/ffmpeg_qsv.c b/ffmpeg_qsv.c index 68ff5bd..86824b6 100644 --- a/ffmpeg_qsv.c +++ b/ffmpeg_qsv.c @@ -28,6 +28,8 @@ #include "ffmpeg.h" +char *qsv_device = NULL; + static int qsv_get_buffer(AVCodecContext *s, AVFrame *frame, int flags) { InputStream *ist = s->opaque; @@ -44,15 +46,26 @@ static void qsv_uninit(AVCodecContext *s) static int qsv_device_init(InputStream *ist) { int err; + AVDictionary *dict = NULL; + + if (qsv_device) { + err = av_dict_set(&dict, "child_device", qsv_device, 0); + if (err < 0) + return err; + } err = av_hwdevice_ctx_create(&hw_device_ctx, AV_HWDEVICE_TYPE_QSV, - ist->hwaccel_device, NULL, 0); + ist->hwaccel_device, dict, 0); if (err < 0) { av_log(NULL, AV_LOG_ERROR, "Error creating a QSV device\n"); - return err; + goto err_out; } - return 0; +err_out: + if (dict) + av_dict_free(&dict); + + return err; } int qsv_init(AVCodecContext *s)