From: "Xiang, Haihao" <haihao.xiang-at-intel.com@ffmpeg.org> To: "ffmpeg-devel@ffmpeg.org" <ffmpeg-devel@ffmpeg.org> Cc: "Galin, Artem" <artem.galin@intel.com> Subject: Re: [FFmpeg-devel] [PATCH v2 1/3] lavu/hwcontext_d3d11va: Add option vendor_id Date: Thu, 7 Dec 2023 02:33:54 +0000 Message-ID: <90820a5d161bcaec47d35a03c264556ce969307b.camel@intel.com> (raw) In-Reply-To: <2a5c3f7d8dd3a136f7f0305a1bed2972417bb25f.camel@intel.com> On Di, 2023-12-05 at 08:18 +0000, Xiang, Haihao wrote: > On Di, 2023-11-28 at 12:42 +0800, Xiang, Haihao wrote: > > From: Artem Galin <artem.galin@intel.com> > > > > User may choose the hardware via option vendor_id when multiple > > hardwares are available. > > > > Signed-off-by: Artem Galin <artem.galin@intel.com> > > Signed-off-by: Haihao Xiang <haihao.xiang@intel.com> > > --- > > libavutil/hwcontext_d3d11va.c | 59 ++++++++++++++++++++++++++++++++++- > > 1 file changed, 58 insertions(+), 1 deletion(-) > > > > diff --git a/libavutil/hwcontext_d3d11va.c b/libavutil/hwcontext_d3d11va.c > > index cc8c97d2b6..2fd3561c88 100644 > > --- a/libavutil/hwcontext_d3d11va.c > > +++ b/libavutil/hwcontext_d3d11va.c > > @@ -552,6 +552,47 @@ static void d3d11va_device_uninit(AVHWDeviceContext > > *hwdev) > > } > > } > > > > +static int d3d11va_device_find_adapter_by_vendor_id(AVHWDeviceContext *ctx, > > uint32_t flags, const char *vendor_id) > > +{ > > + HRESULT hr; > > + IDXGIAdapter *adapter = NULL; > > + IDXGIFactory2 *factory; > > + int adapter_id = 0; > > + long int id = strtol(vendor_id, NULL, 0); > > + > > + hr = mCreateDXGIFactory(&IID_IDXGIFactory2, (void **)&factory); > > + if (FAILED(hr)) { > > + av_log(ctx, AV_LOG_ERROR, "CreateDXGIFactory returned error\n"); > > + return -1; > > + } > > + > > + while (IDXGIFactory2_EnumAdapters(factory, adapter_id++, &adapter) != > > DXGI_ERROR_NOT_FOUND) { > > + ID3D11Device* device = NULL; > > + DXGI_ADAPTER_DESC adapter_desc; > > + > > + hr = mD3D11CreateDevice(adapter, D3D_DRIVER_TYPE_UNKNOWN, NULL, > > flags, NULL, 0, D3D11_SDK_VERSION, &device, NULL, NULL); > > + if (FAILED(hr)) { > > + av_log(ctx, AV_LOG_DEBUG, "D3D11CreateDevice returned error, > > try > > next adapter\n"); > > + IDXGIAdapter_Release(adapter); > > + continue; > > + } > > + > > + hr = IDXGIAdapter2_GetDesc(adapter, &adapter_desc); > > + ID3D11Device_Release(device); > > + IDXGIAdapter_Release(adapter); > > + if (FAILED(hr)) { > > + av_log(ctx, AV_LOG_DEBUG, "IDXGIAdapter2_GetDesc returned > > error, > > try next adapter\n"); > > + continue; > > + } else if (adapter_desc.VendorId == id) { > > + IDXGIFactory2_Release(factory); > > + return adapter_id - 1; > > + } > > + } > > + > > + IDXGIFactory2_Release(factory); > > + return -1; > > +} > > + > > static int d3d11va_device_create(AVHWDeviceContext *ctx, const char > > *device, > > AVDictionary *opts, int flags) > > { > > @@ -563,6 +604,7 @@ static int d3d11va_device_create(AVHWDeviceContext *ctx, > > const char *device, > > UINT creationFlags = D3D11_CREATE_DEVICE_VIDEO_SUPPORT; > > int is_debug = !!av_dict_get(opts, "debug", NULL, 0); > > int ret; > > + int adapter = -1; > > > > // (On UWP we can't check this.) > > #if !HAVE_UWP > > @@ -581,10 +623,25 @@ static int d3d11va_device_create(AVHWDeviceContext > > *ctx, > > const char *device, > > } > > > > if (device) { > > + adapter = atoi(device); > > + } else { > > + AVDictionaryEntry *e = av_dict_get(opts, "vendor_id", NULL, 0); > > + if (e && e->value) { > > + adapter = d3d11va_device_find_adapter_by_vendor_id(ctx, > > creationFlags, e->value); > > + if (adapter < 0) { > > + av_log(ctx, AV_LOG_ERROR, "Failed to find d3d11va adapter > > by > > " > > + "vendor id %s\n", e->value); > > + return AVERROR_UNKNOWN; > > + } > > + } > > + } > > + > > + if (adapter >= 0) { > > IDXGIFactory2 *pDXGIFactory; > > + > > + av_log(ctx, AV_LOG_VERBOSE, "Selecting d3d11va adapter %d\n", > > adapter); > > hr = mCreateDXGIFactory(&IID_IDXGIFactory2, (void > > **)&pDXGIFactory); > > if (SUCCEEDED(hr)) { > > - int adapter = atoi(device); > > if (FAILED(IDXGIFactory2_EnumAdapters(pDXGIFactory, adapter, > > &pAdapter))) > > pAdapter = NULL; > > IDXGIFactory2_Release(pDXGIFactory); > > I'll merge this patchset if there are no more comments for v2 Pushed, Thanks Haihao > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
prev parent reply other threads:[~2023-12-07 2:34 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-11-28 4:42 Xiang, Haihao 2023-11-28 4:42 ` [FFmpeg-devel] [PATCH v2 2/3] doc/ffmpeg: Update the description about d3d11va Xiang, Haihao 2023-11-28 4:42 ` [FFmpeg-devel] [PATCH v2 3/3] lavu/hwcontext_qsv: Make sure hardware vendor is Intel for qsv on d3d11va Xiang, Haihao 2023-12-05 8:18 ` [FFmpeg-devel] [PATCH v2 1/3] lavu/hwcontext_d3d11va: Add option vendor_id Xiang, Haihao 2023-12-07 2:33 ` Xiang, Haihao [this message]
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=90820a5d161bcaec47d35a03c264556ce969307b.camel@intel.com \ --to=haihao.xiang-at-intel.com@ffmpeg.org \ --cc=artem.galin@intel.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git