vlc | branch: master | Steve Lhomme <[email protected]> | Thu Nov 30 12:07:35 2017 +0100| [ad485d9f61b5a9a6eaf96661eac26a13a8b1408e] | committer: Steve Lhomme
hw:d3d11: make assert_ProcessorInput() generic > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ad485d9f61b5a9a6eaf96661eac26a13a8b1408e --- modules/hw/d3d11/d3d11_deinterlace.c | 37 +++------------------------ modules/hw/d3d11/d3d11_filters.c | 31 +---------------------- modules/hw/d3d11/d3d11_processor.c | 26 +++++++++++++++++++ modules/hw/d3d11/d3d11_processor.h | 3 +++ modules/hw/d3d11/d3d11_surface.c | 48 +++++------------------------------- 5 files changed, 40 insertions(+), 105 deletions(-) diff --git a/modules/hw/d3d11/d3d11_deinterlace.c b/modules/hw/d3d11/d3d11_deinterlace.c index b0d6d87e21..c26f1c322a 100644 --- a/modules/hw/d3d11/d3d11_deinterlace.c +++ b/modules/hw/d3d11/d3d11_deinterlace.c @@ -84,35 +84,6 @@ static struct filter_mode_t filter_mode [] = { { true, true, false, false } }, }; -static int assert_ProcessorInput(filter_t *p_filter, picture_sys_t *p_sys_src) -{ - filter_sys_t *p_sys = p_filter->p_sys; - if (!p_sys_src->processorInput) - { - D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC inDesc = { - .FourCC = 0, - .ViewDimension = D3D11_VPIV_DIMENSION_TEXTURE2D, - .Texture2D.MipSlice = 0, - .Texture2D.ArraySlice = p_sys_src->slice_index, - }; - HRESULT hr; - - hr = ID3D11VideoDevice_CreateVideoProcessorInputView(p_sys->d3d_proc.d3dviddev, - p_sys_src->resource[KNOWN_DXGI_INDEX], - p_sys->d3d_proc.procEnumerator, - &inDesc, - &p_sys_src->processorInput); - if (FAILED(hr)) - { -#ifndef NDEBUG - msg_Dbg(p_filter,"Failed to create processor input for slice %d. (hr=0x%lX)", p_sys_src->slice_index, hr); -#endif - return VLC_EGENERIC; - } - } - return VLC_SUCCESS; -} - static void Flush(filter_t *filter) { filter_sys_t *p_sys = filter->p_sys; @@ -145,17 +116,17 @@ static int RenderPic( filter_t *p_filter, picture_t *p_outpic, picture_t *p_pic, if( p_cur && p_next ) { picture_sys_t *picsys_next = ActivePictureSys(p_next); - if ( unlikely(!picsys_next) || assert_ProcessorInput(p_filter, picsys_next) ) + if ( unlikely(!picsys_next) || FAILED(D3D11_Assert_ProcessorInput(p_filter, &p_sys->d3d_proc, picsys_next) )) return VLC_EGENERIC; picture_sys_t *picsys_cur = ActivePictureSys(p_cur); - if ( unlikely(!picsys_cur) || assert_ProcessorInput(p_filter, picsys_cur) ) + if ( unlikely(!picsys_cur) || FAILED( D3D11_Assert_ProcessorInput(p_filter, &p_sys->d3d_proc, picsys_cur) )) return VLC_EGENERIC; if ( p_prev ) { picture_sys_t *picsys_prev = ActivePictureSys(p_prev); - if ( unlikely(!picsys_prev) || assert_ProcessorInput(p_filter, picsys_prev) ) + if ( unlikely(!picsys_prev) || FAILED( D3D11_Assert_ProcessorInput(p_filter, &p_sys->d3d_proc, picsys_prev) )) return VLC_EGENERIC; stream.pInputSurface = picsys_cur->processorInput; @@ -176,7 +147,7 @@ static int RenderPic( filter_t *p_filter, picture_t *p_outpic, picture_t *p_pic, else { picture_sys_t *p_sys_src = ActivePictureSys(p_pic); - if ( unlikely(!p_sys_src) || assert_ProcessorInput(p_filter, p_sys_src) ) + if ( unlikely(!p_sys_src) || FAILED( D3D11_Assert_ProcessorInput(p_filter, &p_sys->d3d_proc, p_sys_src) )) return VLC_EGENERIC; /* first single frame */ diff --git a/modules/hw/d3d11/d3d11_filters.c b/modules/hw/d3d11/d3d11_filters.c index a594c2b342..7dd801e39c 100644 --- a/modules/hw/d3d11/d3d11_filters.c +++ b/modules/hw/d3d11/d3d11_filters.c @@ -100,35 +100,6 @@ static const char *const ppsz_filter_options[] = { "brightness-threshold", NULL }; -static int assert_ProcessorInput(filter_t *p_filter, picture_sys_t *p_sys_src) -{ - filter_sys_t *p_sys = p_filter->p_sys; - if (!p_sys_src->processorInput) - { - D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC inDesc = { - .FourCC = 0, - .ViewDimension = D3D11_VPIV_DIMENSION_TEXTURE2D, - .Texture2D.MipSlice = 0, - .Texture2D.ArraySlice = p_sys_src->slice_index, - }; - HRESULT hr; - - hr = ID3D11VideoDevice_CreateVideoProcessorInputView(p_sys->d3d_proc.d3dviddev, - p_sys_src->resource[KNOWN_DXGI_INDEX], - p_sys->d3d_proc.procEnumerator, - &inDesc, - &p_sys_src->processorInput); - if (FAILED(hr)) - { -#ifndef NDEBUG - msg_Dbg(p_filter,"Failed to create processor input for slice %d. (hr=0x%lX)", p_sys_src->slice_index, hr); -#endif - return VLC_EGENERIC; - } - } - return VLC_SUCCESS; -} - static bool ApplyFilter( filter_sys_t *p_sys, D3D11_VIDEO_PROCESSOR_FILTER filter, struct filter_level *p_level, @@ -220,7 +191,7 @@ static picture_t *Filter(filter_t *p_filter, picture_t *p_pic) filter_sys_t *p_sys = p_filter->p_sys; picture_sys_t *p_src_sys = ActivePictureSys(p_pic); - if ( assert_ProcessorInput(p_filter, ActivePictureSys(p_pic) ) ) + if (FAILED( D3D11_Assert_ProcessorInput(p_filter, &p_sys->d3d_proc, p_src_sys) )) { picture_Release( p_pic ); return NULL; diff --git a/modules/hw/d3d11/d3d11_processor.c b/modules/hw/d3d11/d3d11_processor.c index 2688077a71..d1a29b91e4 100644 --- a/modules/hw/d3d11/d3d11_processor.c +++ b/modules/hw/d3d11/d3d11_processor.c @@ -143,4 +143,30 @@ void D3D11_ReleaseProcessor(d3d11_processor_t *out) out->d3dvidctx = NULL; } } + +#undef D3D11_Assert_ProcessorInput +HRESULT D3D11_Assert_ProcessorInput(vlc_object_t *o, d3d11_processor_t *d3d_proc, picture_sys_t *p_sys) +{ + if (p_sys->processorInput) + return S_OK; + + D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC inDesc = { + .FourCC = 0, + .ViewDimension = D3D11_VPIV_DIMENSION_TEXTURE2D, + .Texture2D.MipSlice = 0, + .Texture2D.ArraySlice = p_sys->slice_index, + }; + HRESULT hr; + + hr = ID3D11VideoDevice_CreateVideoProcessorInputView(d3d_proc->d3dviddev, + p_sys->resource[KNOWN_DXGI_INDEX], + d3d_proc->procEnumerator, + &inDesc, + &p_sys->processorInput); +#ifndef NDEBUG + if (FAILED(hr)) + msg_Dbg(o,"Failed to create processor input for slice %d. (hr=0x%lX)", p_sys->slice_index, hr); +#endif + return hr; +} #endif diff --git a/modules/hw/d3d11/d3d11_processor.h b/modules/hw/d3d11/d3d11_processor.h index 17fae1d92c..b4bd124b03 100644 --- a/modules/hw/d3d11/d3d11_processor.h +++ b/modules/hw/d3d11/d3d11_processor.h @@ -43,6 +43,9 @@ int D3D11_CreateProcessor(vlc_object_t *, d3d11_device_t *, #define D3D11_CreateProcessor(a,b,c,d,e,f) D3D11_CreateProcessor(VLC_OBJECT(a),b,c,d,e,f) void D3D11_ReleaseProcessor(d3d11_processor_t *); + +HRESULT D3D11_Assert_ProcessorInput(vlc_object_t *, d3d11_processor_t *, picture_sys_t *); +#define D3D11_Assert_ProcessorInput(a,b,c) D3D11_Assert_ProcessorInput(VLC_OBJECT(a),b,c) #endif #endif /* VLC_D3D11_PROCESSOR_H */ diff --git a/modules/hw/d3d11/d3d11_surface.c b/modules/hw/d3d11/d3d11_surface.c index 31a3d0201b..373b445829 100644 --- a/modules/hw/d3d11/d3d11_surface.c +++ b/modules/hw/d3d11/d3d11_surface.c @@ -262,28 +262,10 @@ static void D3D11_YUY2(filter_t *p_filter, picture_t *src, picture_t *dst) if (sys->d3d_proc.procEnumerator) { HRESULT hr; - if (!p_sys->processorInput) - { - D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC inDesc = { - .FourCC = 0, - .ViewDimension = D3D11_VPIV_DIMENSION_TEXTURE2D, - .Texture2D.MipSlice = 0, - .Texture2D.ArraySlice = viewDesc.Texture2D.ArraySlice, - }; + assert(p_sys->slice_index == viewDesc.Texture2D.ArraySlice); + if (FAILED( D3D11_Assert_ProcessorInput(p_filter, &sys->d3d_proc, p_sys) )) + return; - hr = ID3D11VideoDevice_CreateVideoProcessorInputView(sys->d3d_proc.d3dviddev, - p_sys->resource[KNOWN_DXGI_INDEX], - sys->d3d_proc.procEnumerator, - &inDesc, - &p_sys->processorInput); - if (FAILED(hr)) - { -#ifndef NDEBUG - msg_Dbg(p_filter,"Failed to create processor input for slice %d. (hr=0x%lX)", p_sys->slice_index, hr); -#endif - return; - } - } D3D11_VIDEO_PROCESSOR_STREAM stream = { .Enable = TRUE, .pInputSurface = p_sys->processorInput, @@ -404,28 +386,10 @@ static void D3D11_NV12(filter_t *p_filter, picture_t *src, picture_t *dst) if (sys->d3d_proc.procEnumerator) { HRESULT hr; - if (!p_sys->processorInput) - { - D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC inDesc = { - .FourCC = 0, - .ViewDimension = D3D11_VPIV_DIMENSION_TEXTURE2D, - .Texture2D.MipSlice = 0, - .Texture2D.ArraySlice = viewDesc.Texture2D.ArraySlice, - }; + assert(p_sys->slice_index == viewDesc.Texture2D.ArraySlice); + if (FAILED( D3D11_Assert_ProcessorInput(p_filter, &sys->d3d_proc, p_sys) )) + return; - hr = ID3D11VideoDevice_CreateVideoProcessorInputView(sys->d3d_proc.d3dviddev, - p_sys->resource[KNOWN_DXGI_INDEX], - sys->d3d_proc.procEnumerator, - &inDesc, - &p_sys->processorInput); - if (FAILED(hr)) - { -#ifndef NDEBUG - msg_Dbg(p_filter,"Failed to create processor input for slice %d. (hr=0x%lX)", p_sys->slice_index, hr); -#endif - return; - } - } D3D11_VIDEO_PROCESSOR_STREAM stream = { .Enable = TRUE, .pInputSurface = p_sys->processorInput, _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
