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.ga...@intel.com> > > > > User may choose the hardware via option vendor_id when multiple > > hardwares are available. > > > > Signed-off-by: Artem Galin <artem.ga...@intel.com> > > Signed-off-by: Haihao Xiang <haihao.xi...@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-requ...@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-requ...@ffmpeg.org with subject "unsubscribe".