mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-12-05 22:40:09 +01:00
avfilter/vsrc_ddagrab: support rendering mouse cursor onto array textures
This commit is contained in:
@@ -818,6 +818,8 @@ static av_cold int init_hwframes_ctx(AVFilterContext *avctx)
|
|||||||
dda->frames_ctx->format = AV_PIX_FMT_D3D11;
|
dda->frames_ctx->format = AV_PIX_FMT_D3D11;
|
||||||
dda->frames_ctx->width = dda->width;
|
dda->frames_ctx->width = dda->width;
|
||||||
dda->frames_ctx->height = dda->height;
|
dda->frames_ctx->height = dda->height;
|
||||||
|
if (avctx->extra_hw_frames > 0)
|
||||||
|
dda->frames_ctx->initial_pool_size = 8 + avctx->extra_hw_frames;
|
||||||
|
|
||||||
switch (dda->raw_format) {
|
switch (dda->raw_format) {
|
||||||
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
||||||
@@ -936,7 +938,7 @@ static int draw_mouse_pointer(AVFilterContext *avctx, AVFrame *frame)
|
|||||||
D3D11_RENDER_TARGET_VIEW_DESC target_desc = { 0 };
|
D3D11_RENDER_TARGET_VIEW_DESC target_desc = { 0 };
|
||||||
ID3D11RenderTargetView* target_view = NULL;
|
ID3D11RenderTargetView* target_view = NULL;
|
||||||
ID3D11Buffer *mouse_vertex_buffer = NULL;
|
ID3D11Buffer *mouse_vertex_buffer = NULL;
|
||||||
D3D11_TEXTURE2D_DESC tex_desc;
|
D3D11_TEXTURE2D_DESC tex_desc, frame_desc;
|
||||||
int num_vertices = 0;
|
int num_vertices = 0;
|
||||||
int x, y;
|
int x, y;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
@@ -946,6 +948,7 @@ static int draw_mouse_pointer(AVFilterContext *avctx, AVFrame *frame)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ID3D11Texture2D_GetDesc(dda->mouse_texture, &tex_desc);
|
ID3D11Texture2D_GetDesc(dda->mouse_texture, &tex_desc);
|
||||||
|
ID3D11Texture2D_GetDesc(frame_tex, &frame_desc);
|
||||||
|
|
||||||
x = dda->mouse_x - dda->offset_x;
|
x = dda->mouse_x - dda->offset_x;
|
||||||
y = dda->mouse_y - dda->offset_y;
|
y = dda->mouse_y - dda->offset_y;
|
||||||
@@ -954,9 +957,17 @@ static int draw_mouse_pointer(AVFilterContext *avctx, AVFrame *frame)
|
|||||||
-x >= (int)tex_desc.Width || -y >= (int)tex_desc.Height)
|
-x >= (int)tex_desc.Width || -y >= (int)tex_desc.Height)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
target_desc.Format = dda->raw_format;
|
target_desc.Format = frame_desc.Format;
|
||||||
|
|
||||||
|
if (frame_desc.ArraySize > 1) {
|
||||||
|
target_desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
|
||||||
|
target_desc.Texture2DArray.ArraySize = 1;
|
||||||
|
target_desc.Texture2DArray.FirstArraySlice = (uintptr_t)frame->data[1];
|
||||||
|
target_desc.Texture2DArray.MipSlice = 0;
|
||||||
|
} else {
|
||||||
target_desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
|
target_desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
|
||||||
target_desc.Texture2D.MipSlice = 0;
|
target_desc.Texture2D.MipSlice = 0;
|
||||||
|
}
|
||||||
|
|
||||||
hr = ID3D11Device_CreateRenderTargetView(dda->device_hwctx->device,
|
hr = ID3D11Device_CreateRenderTargetView(dda->device_hwctx->device,
|
||||||
(ID3D11Resource*)frame_tex,
|
(ID3D11Resource*)frame_tex,
|
||||||
|
|||||||
Reference in New Issue
Block a user