diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandallocatorpool.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandallocatorpool.cpp index 3c0e1e4947..d7148f4f2f 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandallocatorpool.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandallocatorpool.cpp @@ -246,17 +246,12 @@ gst_d3d12_command_allocator_get_command_type (GstD3D12CommandAllocator * cmd) return cmd->type; } -gboolean -gst_d3d12_command_allocator_get_handle (GstD3D12CommandAllocator * cmd, - ID3D12CommandAllocator ** ca) +ID3D12CommandAllocator * +gst_d3d12_command_allocator_get_handle (GstD3D12CommandAllocator * cmd) { - g_return_val_if_fail (cmd, FALSE); - g_return_val_if_fail (ca, FALSE); + g_return_val_if_fail (cmd, nullptr); - *ca = cmd->ca.Get (); - (*ca)->AddRef (); - - return TRUE; + return cmd->ca.Get (); } void diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandallocatorpool.h b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandallocatorpool.h index 3855a24a19..7fc50d8f27 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandallocatorpool.h +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandallocatorpool.h @@ -47,8 +47,7 @@ void gst_clear_d3d12_command_allocator (GstD3D12Comman D3D12_COMMAND_LIST_TYPE gst_d3d12_command_allocator_get_command_type (GstD3D12CommandAllocator * cmd); -gboolean gst_d3d12_command_allocator_get_handle (GstD3D12CommandAllocator * cmd, - ID3D12CommandAllocator ** ca); +ID3D12CommandAllocator * gst_d3d12_command_allocator_get_handle (GstD3D12CommandAllocator * cmd); void gst_d3d12_command_allocator_set_user_data (GstD3D12CommandAllocator * cmd, gpointer user_data, diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandlistpool.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandlistpool.cpp index 398c8d1588..7e399708e6 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandlistpool.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandlistpool.cpp @@ -257,15 +257,10 @@ gst_d3d12_command_list_get_command_type (GstD3D12CommandList * cmd) return cmd->type; } -gboolean -gst_d3d12_command_list_get_handle (GstD3D12CommandList * cmd, - ID3D12CommandList ** cl) +ID3D12CommandList * +gst_d3d12_command_list_get_handle (GstD3D12CommandList * cmd) { - g_return_val_if_fail (cmd, FALSE); - g_return_val_if_fail (cl, FALSE); + g_return_val_if_fail (cmd, nullptr); - *cl = cmd->cl.Get (); - (*cl)->AddRef (); - - return TRUE; + return cmd->cl.Get (); } diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandlistpool.h b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandlistpool.h index f9ee03e428..eec2415d5f 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandlistpool.h +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandlistpool.h @@ -48,8 +48,7 @@ void gst_clear_d3d12_command_list (GstD3D12CommandList ** c D3D12_COMMAND_LIST_TYPE gst_d3d12_command_list_get_command_type (GstD3D12CommandList * cmd); -gboolean gst_d3d12_command_list_get_handle (GstD3D12CommandList * cmd, - ID3D12CommandList ** cl); +ID3D12CommandList * gst_d3d12_command_list_get_handle (GstD3D12CommandList * cmd); G_END_DECLS diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandqueue.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandqueue.cpp index c59b3ef007..f650e3be0e 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandqueue.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandqueue.cpp @@ -182,34 +182,20 @@ gst_d3d12_command_queue_new (ID3D12Device * device, return self; } -gboolean -gst_d3d12_command_queue_get_handle (GstD3D12CommandQueue * queue, - ID3D12CommandQueue ** handle) +ID3D12CommandQueue * +gst_d3d12_command_queue_get_handle (GstD3D12CommandQueue * queue) { - g_return_val_if_fail (GST_IS_D3D12_COMMAND_QUEUE (queue), FALSE); - g_return_val_if_fail (handle, FALSE); + g_return_val_if_fail (GST_IS_D3D12_COMMAND_QUEUE (queue), nullptr); - auto priv = queue->priv; - - *handle = priv->cq.Get (); - (*handle)->AddRef (); - - return TRUE; + return queue->priv->cq.Get (); } -gboolean -gst_d3d12_command_queue_get_fence (GstD3D12CommandQueue * queue, - ID3D12Fence ** handle) +ID3D12Fence * +gst_d3d12_command_queue_get_fence_handle (GstD3D12CommandQueue * queue) { - g_return_val_if_fail (GST_IS_D3D12_COMMAND_QUEUE (queue), FALSE); - g_return_val_if_fail (handle, FALSE); + g_return_val_if_fail (GST_IS_D3D12_COMMAND_QUEUE (queue), nullptr); - auto priv = queue->priv; - - *handle = priv->fence.Get (); - (*handle)->AddRef (); - - return TRUE; + return queue->priv->fence.Get (); } HRESULT diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandqueue.h b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandqueue.h index 40882f344a..e760444d1d 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandqueue.h +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12commandqueue.h @@ -34,11 +34,9 @@ GstD3D12CommandQueue * gst_d3d12_command_queue_new (ID3D12Device * device, D3D12_FENCE_FLAGS fence_flags, guint queue_size); -gboolean gst_d3d12_command_queue_get_handle (GstD3D12CommandQueue * queue, - ID3D12CommandQueue ** handle); +ID3D12CommandQueue * gst_d3d12_command_queue_get_handle (GstD3D12CommandQueue * queue); -gboolean gst_d3d12_command_queue_get_fence (GstD3D12CommandQueue * queue, - ID3D12Fence ** handle); +ID3D12Fence * gst_d3d12_command_queue_get_fence_handle (GstD3D12CommandQueue * queue); HRESULT gst_d3d12_command_queue_execute_command_lists (GstD3D12CommandQueue * queue, guint num_command_lists, diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12compositor.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12compositor.cpp index cd89a5f7bf..bd1738f236 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12compositor.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12compositor.cpp @@ -1129,8 +1129,7 @@ gst_d3d12_compositor_preprare_func (GstVideoAggregatorPad * pad, gst_d3d12_fence_data_pool_acquire (self->priv->fence_data_pool, &fence_data); gst_d3d12_fence_data_add_notify_mini_object (fence_data, gst_ca); - ComPtr < ID3D12CommandAllocator > ca; - gst_d3d12_command_allocator_get_handle (gst_ca, &ca); + auto ca = gst_d3d12_command_allocator_get_handle (gst_ca); auto hr = ca->Reset (); if (!gst_d3d12_result (hr, priv->ctx->device)) { @@ -1142,14 +1141,14 @@ gst_d3d12_compositor_preprare_func (GstVideoAggregatorPad * pad, if (!priv->ctx->cl) { auto device = gst_d3d12_device_get_device_handle (priv->ctx->device); hr = device->CreateCommandList (0, D3D12_COMMAND_LIST_TYPE_DIRECT, - ca.Get (), nullptr, IID_PPV_ARGS (&priv->ctx->cl)); + ca, nullptr, IID_PPV_ARGS (&priv->ctx->cl)); if (!gst_d3d12_result (hr, priv->ctx->device)) { GST_ERROR_OBJECT (cpad, "Couldn't create command list"); gst_d3d12_fence_data_unref (fence_data); return FALSE; } } else { - hr = priv->ctx->cl->Reset (ca.Get (), nullptr); + hr = priv->ctx->cl->Reset (ca, nullptr); if (!gst_d3d12_result (hr, priv->ctx->device)) { GST_ERROR_OBJECT (self, "Couldn't reset command list"); gst_d3d12_fence_data_unref (fence_data); @@ -2203,9 +2202,9 @@ gst_d3d12_compositor_draw_background (GstD3D12Compositor * self) auto mem = (GstD3D12Memory *) gst_buffer_peek_memory (priv->generated_output_buf, i); auto num_planes = gst_d3d12_memory_get_plane_count (mem); - ComPtr < ID3D12DescriptorHeap > rtv_heap; + auto rtv_heap = gst_d3d12_memory_get_render_target_view_heap (mem); - if (!gst_d3d12_memory_get_render_target_view_heap (mem, &rtv_heap)) { + if (!rtv_heap) { GST_ERROR_OBJECT (self, "Couldn't get rtv heap"); return FALSE; } @@ -2233,8 +2232,7 @@ gst_d3d12_compositor_draw_background (GstD3D12Compositor * self) gst_d3d12_fence_data_pool_acquire (priv->fence_data_pool, &fence_data); gst_d3d12_fence_data_add_notify_mini_object (fence_data, gst_ca); - ComPtr < ID3D12CommandAllocator > ca; - gst_d3d12_command_allocator_get_handle (gst_ca, &ca); + auto ca = gst_d3d12_command_allocator_get_handle (gst_ca); auto hr = ca->Reset (); if (!gst_d3d12_result (hr, self->device)) { @@ -2246,14 +2244,14 @@ gst_d3d12_compositor_draw_background (GstD3D12Compositor * self) if (!bg_render->cl) { auto device = gst_d3d12_device_get_device_handle (self->device); hr = device->CreateCommandList (0, D3D12_COMMAND_LIST_TYPE_DIRECT, - ca.Get (), bg_render->pso.Get (), IID_PPV_ARGS (&bg_render->cl)); + ca, bg_render->pso.Get (), IID_PPV_ARGS (&bg_render->cl)); if (!gst_d3d12_result (hr, self->device)) { GST_ERROR_OBJECT (self, "Couldn't create command list"); gst_d3d12_fence_data_unref (fence_data); return FALSE; } } else { - hr = bg_render->cl->Reset (ca.Get (), bg_render->pso.Get ()); + hr = bg_render->cl->Reset (ca, bg_render->pso.Get ()); if (!gst_d3d12_result (hr, self->device)) { GST_ERROR_OBJECT (self, "Couldn't reset command list"); gst_d3d12_fence_data_unref (fence_data); diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12convert.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12convert.cpp index 8da062f442..eb7530fc87 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12convert.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12convert.cpp @@ -1979,8 +1979,7 @@ gst_d3d12_convert_transform (GstBaseTransform * trans, GstBuffer * inbuf, return GST_FLOW_ERROR; } - ComPtr < ID3D12CommandAllocator > ca; - gst_d3d12_command_allocator_get_handle (gst_ca, &ca); + auto ca = gst_d3d12_command_allocator_get_handle (gst_ca); auto hr = ca->Reset (); if (!gst_d3d12_result (hr, priv->ctx->device)) { @@ -1992,14 +1991,14 @@ gst_d3d12_convert_transform (GstBaseTransform * trans, GstBuffer * inbuf, if (!priv->ctx->cl) { auto device = gst_d3d12_device_get_device_handle (priv->ctx->device); hr = device->CreateCommandList (0, D3D12_COMMAND_LIST_TYPE_DIRECT, - ca.Get (), nullptr, IID_PPV_ARGS (&priv->ctx->cl)); + ca, nullptr, IID_PPV_ARGS (&priv->ctx->cl)); if (!gst_d3d12_result (hr, priv->ctx->device)) { GST_ERROR_OBJECT (self, "Couldn't create command list"); gst_d3d12_command_allocator_unref (gst_ca); return GST_FLOW_ERROR; } } else { - hr = priv->ctx->cl->Reset (ca.Get (), nullptr); + hr = priv->ctx->cl->Reset (ca, nullptr); if (!gst_d3d12_result (hr, priv->ctx->device)) { GST_ERROR_OBJECT (self, "Couldn't reset command list"); gst_d3d12_command_allocator_unref (gst_ca); diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12converter.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12converter.cpp index 1d2b60d394..17f2e8b900 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12converter.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12converter.cpp @@ -1944,14 +1944,13 @@ gst_d3d12_converter_execute (GstD3D12Converter * self, auto device = gst_d3d12_device_get_device_handle (self->device); - ComPtr < ID3D12DescriptorHeap > srv_heap; GstD3D12Descriptor *descriptor; if (!gst_d3d12_descriptor_pool_acquire (priv->srv_heap_pool, &descriptor)) { GST_ERROR_OBJECT (self, "Couldn't acquire srv heap"); return FALSE; } - gst_d3d12_descriptor_get_handle (descriptor, &srv_heap); + auto srv_heap = gst_d3d12_descriptor_get_handle (descriptor); gst_d3d12_fence_data_add_notify_mini_object (fence_data, descriptor); auto cpu_handle = @@ -1961,9 +1960,9 @@ gst_d3d12_converter_execute (GstD3D12Converter * self, for (guint i = 0; i < gst_buffer_n_memory (in_buf); i++) { auto mem = (GstD3D12Memory *) gst_buffer_peek_memory (in_buf, i); auto num_planes = gst_d3d12_memory_get_plane_count (mem); - ComPtr < ID3D12DescriptorHeap > mem_srv_heap; + auto mem_srv_heap = gst_d3d12_memory_get_shader_resource_view_heap (mem); - if (!gst_d3d12_memory_get_shader_resource_view_heap (mem, &mem_srv_heap)) { + if (!mem_srv_heap) { GST_ERROR_OBJECT (self, "Couldn't get SRV"); return FALSE; } @@ -1983,9 +1982,9 @@ gst_d3d12_converter_execute (GstD3D12Converter * self, for (guint i = 0; i < gst_buffer_n_memory (out_buf); i++) { auto mem = (GstD3D12Memory *) gst_buffer_peek_memory (out_buf, i); auto num_planes = gst_d3d12_memory_get_plane_count (mem); - ComPtr < ID3D12DescriptorHeap > rtv_heap; + auto rtv_heap = gst_d3d12_memory_get_render_target_view_heap (mem); - if (!gst_d3d12_memory_get_render_target_view_heap (mem, &rtv_heap)) { + if (!rtv_heap) { GST_ERROR_OBJECT (self, "Couldn't get rtv heap"); return FALSE; } @@ -2018,7 +2017,7 @@ gst_d3d12_converter_execute (GstD3D12Converter * self, cl->SetGraphicsRootSignature (priv->rs.Get ()); cl->SetPipelineState (pso); - ID3D12DescriptorHeap *heaps[] = { srv_heap.Get () }; + ID3D12DescriptorHeap *heaps[] = { srv_heap }; cl->SetDescriptorHeaps (1, heaps); cl->SetGraphicsRootDescriptorTable (priv->crs->GetPsSrvIdx (), GetGPUDescriptorHandleForHeapStart (srv_heap)); diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12decoder.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12decoder.cpp index f1cca40698..ecbadcca15 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12decoder.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12decoder.cpp @@ -1078,8 +1078,7 @@ gst_d3d12_decoder_end_picture (GstD3D12Decoder * decoder, memset (&in_args, 0, sizeof (D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS)); memset (&out_args, 0, sizeof (D3D12_VIDEO_DECODE_OUTPUT_STREAM_ARGUMENTS)); - ComPtr < ID3D12CommandAllocator > ca; - gst_d3d12_command_allocator_get_handle (gst_ca, &ca); + auto ca = gst_d3d12_command_allocator_get_handle (gst_ca); hr = ca->Reset (); if (!gst_d3d12_result (hr, decoder->device)) { @@ -1091,9 +1090,9 @@ gst_d3d12_decoder_end_picture (GstD3D12Decoder * decoder, if (!priv->cmd->cl) { hr = priv->cmd->device->CreateCommandList (0, D3D12_COMMAND_LIST_TYPE_VIDEO_DECODE, - ca.Get (), nullptr, IID_PPV_ARGS (&priv->cmd->cl)); + ca, nullptr, IID_PPV_ARGS (&priv->cmd->cl)); } else { - hr = priv->cmd->cl->Reset (ca.Get ()); + hr = priv->cmd->cl->Reset (ca); } if (!gst_d3d12_result (hr, decoder->device)) { diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12descriptorpool.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12descriptorpool.cpp index c0bd7ff9b3..416362c653 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12descriptorpool.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12descriptorpool.cpp @@ -223,15 +223,10 @@ gst_clear_d3d12_descriptor (GstD3D12Descriptor ** desc) gst_clear_mini_object (desc); } -gboolean -gst_d3d12_descriptor_get_handle (GstD3D12Descriptor * desc, - ID3D12DescriptorHeap ** heap) +ID3D12DescriptorHeap * +gst_d3d12_descriptor_get_handle (GstD3D12Descriptor * desc) { - g_return_val_if_fail (desc, FALSE); - g_return_val_if_fail (heap, FALSE); + g_return_val_if_fail (desc, nullptr); - *heap = desc->heap.Get (); - (*heap)->AddRef (); - - return TRUE; + return desc->heap.Get (); } diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12descriptorpool.h b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12descriptorpool.h index bc899ec49d..fd8b41e230 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12descriptorpool.h +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12descriptorpool.h @@ -45,8 +45,7 @@ void gst_d3d12_descriptor_unref (GstD3D12Descriptor * desc) void gst_clear_d3d12_descriptor (GstD3D12Descriptor ** desc); -gboolean gst_d3d12_descriptor_get_handle (GstD3D12Descriptor * desc, - ID3D12DescriptorHeap ** heap); +ID3D12DescriptorHeap * gst_d3d12_descriptor_get_handle (GstD3D12Descriptor * desc); G_END_DECLS diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12device.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12device.cpp index f893ecd2de..c0b762714c 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12device.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12device.cpp @@ -1009,10 +1009,8 @@ gst_d3d12_device_copy_texture_region (GstD3D12Device * device, return FALSE; } - ComPtr < ID3D12CommandAllocator > ca; - gst_d3d12_command_allocator_get_handle (gst_ca, &ca); - - gst_d3d12_command_list_pool_acquire (cl_pool, ca.Get (), &gst_cl); + auto ca = gst_d3d12_command_allocator_get_handle (gst_ca); + gst_d3d12_command_list_pool_acquire (cl_pool, ca, &gst_cl); if (!gst_cl) { GST_ERROR_OBJECT (device, "Couldn't acquire command list"); @@ -1023,7 +1021,7 @@ gst_d3d12_device_copy_texture_region (GstD3D12Device * device, ComPtr < ID3D12CommandList > cl_base; ComPtr < ID3D12GraphicsCommandList > cl; - gst_d3d12_command_list_get_handle (gst_cl, &cl_base); + cl_base = gst_d3d12_command_list_get_handle (gst_cl); cl_base.As (&cl); for (guint i = 0; i < num_args; i++) { @@ -1135,7 +1133,6 @@ gst_d3d12_device_clear_yuv_texture (GstD3D12Device * device, GstMemory * mem) { auto priv = device->priv->inner; auto dmem = GST_D3D12_MEMORY_CAST (mem); - ComPtr < ID3D12DescriptorHeap > heap; auto resource = gst_d3d12_memory_get_resource_handle (dmem); auto desc = GetDesc (resource); @@ -1145,7 +1142,7 @@ gst_d3d12_device_clear_yuv_texture (GstD3D12Device * device, GstMemory * mem) return; } - gst_d3d12_memory_get_render_target_view_heap (dmem, &heap); + auto heap = gst_d3d12_memory_get_render_target_view_heap (dmem); if (!heap) return; @@ -1158,12 +1155,10 @@ gst_d3d12_device_clear_yuv_texture (GstD3D12Device * device, GstMemory * mem) if (!gst_ca) return; - ComPtr < ID3D12CommandAllocator > ca; - gst_d3d12_command_allocator_get_handle (gst_ca, &ca); + auto ca = gst_d3d12_command_allocator_get_handle (gst_ca); GstD3D12CommandList *gst_cl = nullptr; - gst_d3d12_command_list_pool_acquire (priv->direct_cl_pool, - ca.Get (), &gst_cl); + gst_d3d12_command_list_pool_acquire (priv->direct_cl_pool, ca, &gst_cl); if (!gst_cl) { gst_d3d12_command_allocator_unref (gst_ca); return; @@ -1172,7 +1167,7 @@ gst_d3d12_device_clear_yuv_texture (GstD3D12Device * device, GstMemory * mem) ComPtr < ID3D12CommandList > cl_base; ComPtr < ID3D12GraphicsCommandList > cl; - gst_d3d12_command_list_get_handle (gst_cl, &cl_base); + cl_base = gst_d3d12_command_list_get_handle (gst_cl); cl_base.As (&cl); auto rtv_handle = diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12dxgicapture.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12dxgicapture.cpp index b342b5a3e6..8ca05a5564 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12dxgicapture.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12dxgicapture.cpp @@ -1505,7 +1505,6 @@ gst_d3d12_dxgi_capture_draw_mouse (GstD3D12DxgiCapture * self, auto fence_data = priv->mouse_fence_data; GstD3D12CommandAllocator *gst_ca = nullptr; - ComPtr < ID3D12CommandAllocator > ca; if (!gst_d3d12_command_allocator_pool_acquire (priv->ca_pool, &gst_ca)) { GST_ERROR_OBJECT (self, "Couldn't acquire command allocator"); @@ -1514,7 +1513,7 @@ gst_d3d12_dxgi_capture_draw_mouse (GstD3D12DxgiCapture * self, gst_d3d12_fence_data_add_notify_mini_object (fence_data, gst_ca); - gst_d3d12_command_allocator_get_handle (gst_ca, &ca); + auto ca = gst_d3d12_command_allocator_get_handle (gst_ca); hr = ca->Reset (); if (!gst_d3d12_result (hr, self->device)) { GST_ERROR_OBJECT (self, "Couldn't reset command allocator"); @@ -1523,9 +1522,9 @@ gst_d3d12_dxgi_capture_draw_mouse (GstD3D12DxgiCapture * self, if (!priv->mouse_cl) { hr = device->CreateCommandList (0, D3D12_COMMAND_LIST_TYPE_DIRECT, - ca.Get (), nullptr, IID_PPV_ARGS (&priv->mouse_cl)); + ca, nullptr, IID_PPV_ARGS (&priv->mouse_cl)); } else { - hr = priv->mouse_cl->Reset (ca.Get (), nullptr); + hr = priv->mouse_cl->Reset (ca, nullptr); } if (!gst_d3d12_result (hr, self->device)) { @@ -1584,7 +1583,7 @@ gst_d3d12_dxgi_capture_do_capture (GstD3D12DxgiCapture * capture, ID3D12CommandList *cmd_list[1]; GstD3D12FenceData *fence_data = nullptr; GstD3D12CommandAllocator *gst_ca = nullptr; - ComPtr < ID3D12CommandAllocator > ca; + ID3D12CommandAllocator *ca = nullptr; HRESULT hr; std::lock_guard < std::mutex > lk (priv->lock); @@ -1654,7 +1653,7 @@ gst_d3d12_dxgi_capture_do_capture (GstD3D12DxgiCapture * capture, gst_d3d12_fence_data_pool_acquire (priv->fence_data_pool, &fence_data); gst_d3d12_fence_data_add_notify_mini_object (fence_data, gst_ca); - gst_d3d12_command_allocator_get_handle (gst_ca, &ca); + ca = gst_d3d12_command_allocator_get_handle (gst_ca); hr = ca->Reset (); if (!gst_d3d12_result (hr, self->device)) { @@ -1664,9 +1663,9 @@ gst_d3d12_dxgi_capture_do_capture (GstD3D12DxgiCapture * capture, if (!priv->cl) { hr = device->CreateCommandList (0, D3D12_COMMAND_LIST_TYPE_DIRECT, - ca.Get (), priv->pso.Get (), IID_PPV_ARGS (&priv->cl)); + ca, priv->pso.Get (), IID_PPV_ARGS (&priv->cl)); } else { - hr = priv->cl->Reset (ca.Get (), priv->pso.Get ()); + hr = priv->cl->Reset (ca, priv->pso.Get ()); } if (!gst_d3d12_result (hr, self->device)) { diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12encoder.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12encoder.cpp index b1189e45e2..02bd755a9a 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12encoder.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12encoder.cpp @@ -1252,8 +1252,7 @@ gst_d3d12_encoder_handle_frame (GstVideoEncoder * encoder, gst_d3d12_fence_data_add_notify_mini_object (fence_data, gst_ca); - ComPtr < ID3D12CommandAllocator > ca; - gst_d3d12_command_allocator_get_handle (gst_ca, &ca); + auto ca = gst_d3d12_command_allocator_get_handle (gst_ca); auto hr = ca->Reset (); if (!gst_d3d12_result (hr, self->device)) { GST_ERROR_OBJECT (self, "Couldn't reset command allocator"); @@ -1265,9 +1264,9 @@ gst_d3d12_encoder_handle_frame (GstVideoEncoder * encoder, if (!priv->cmd->cl) { auto device = gst_d3d12_device_get_device_handle (self->device); hr = device->CreateCommandList (0, D3D12_COMMAND_LIST_TYPE_VIDEO_ENCODE, - ca.Get (), nullptr, IID_PPV_ARGS (&priv->cmd->cl)); + ca, nullptr, IID_PPV_ARGS (&priv->cmd->cl)); } else { - hr = priv->cmd->cl->Reset (ca.Get ()); + hr = priv->cmd->cl->Reset (ca); } if (!gst_d3d12_result (hr, self->device)) { @@ -1428,9 +1427,8 @@ gst_d3d12_encoder_handle_frame (GstVideoEncoder * encoder, if (completed < mem->fence_value) { auto queue = gst_d3d12_device_get_command_queue (self->device, D3D12_COMMAND_LIST_TYPE_DIRECT); - ComPtr < ID3D12Fence > fence; - gst_d3d12_command_queue_get_fence (queue, &fence); - gst_d3d12_command_queue_execute_wait (priv->cmd->queue, fence.Get (), + auto fence = gst_d3d12_command_queue_get_fence_handle (queue); + gst_d3d12_command_queue_execute_wait (priv->cmd->queue, fence, mem->fence_value); } diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12ipcsink.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12ipcsink.cpp index 9824d4b056..9477338cc7 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12ipcsink.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12ipcsink.cpp @@ -584,11 +584,10 @@ gst_d3d12_ipc_sink_ensure_server (GstD3D12IpcSink * self, GstBuffer * buffer) auto queue = gst_d3d12_device_get_command_queue (priv->device, D3D12_COMMAND_LIST_TYPE_DIRECT); - ComPtr < ID3D12Fence > fence; - gst_d3d12_command_queue_get_fence (queue, &fence); + auto fence = gst_d3d12_command_queue_get_fence_handle (queue); priv->server = gst_d3d12_ipc_server_new (priv->pipe_name, adapter_luid, - fence.Get ()); + fence); if (!priv->server) { GST_ERROR_OBJECT (self, "Couldn't create server"); return FALSE; diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12memory.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12memory.cpp index 7e1f3a27d9..78594d03bf 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12memory.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12memory.cpp @@ -578,9 +578,8 @@ gst_d3d12_memory_get_plane_rectangle (GstD3D12Memory * mem, guint plane, return TRUE; } -gboolean -gst_d3d12_memory_get_shader_resource_view_heap (GstD3D12Memory * mem, - ID3D12DescriptorHeap ** heap) +ID3D12DescriptorHeap * +gst_d3d12_memory_get_shader_resource_view_heap (GstD3D12Memory * mem) { auto priv = mem->priv; auto allocator = GST_MEMORY_CAST (mem)->allocator; @@ -588,7 +587,7 @@ gst_d3d12_memory_get_shader_resource_view_heap (GstD3D12Memory * mem, GST_LOG_OBJECT (allocator, "Shader resource was denied, configured flags 0x%x", (guint) priv->desc.Flags); - return FALSE; + return nullptr; } std::lock_guard < std::mutex > lk (priv->lock); @@ -604,7 +603,7 @@ gst_d3d12_memory_get_shader_resource_view_heap (GstD3D12Memory * mem, auto hr = device->CreateDescriptorHeap (&desc, IID_PPV_ARGS (&srv_heap)); if (!gst_d3d12_result (hr, mem->device)) { GST_ERROR_OBJECT (allocator, "Couldn't create descriptor heap"); - return FALSE; + return nullptr; } priv->srv_heap = srv_heap; @@ -627,15 +626,11 @@ gst_d3d12_memory_get_shader_resource_view_heap (GstD3D12Memory * mem, } } - *heap = priv->srv_heap.Get (); - (*heap)->AddRef (); - - return TRUE; + return priv->srv_heap.Get (); } -gboolean -gst_d3d12_memory_get_render_target_view_heap (GstD3D12Memory * mem, - ID3D12DescriptorHeap ** heap) +ID3D12DescriptorHeap * +gst_d3d12_memory_get_render_target_view_heap (GstD3D12Memory * mem) { auto priv = mem->priv; auto allocator = GST_MEMORY_CAST (mem)->allocator; @@ -643,7 +638,7 @@ gst_d3d12_memory_get_render_target_view_heap (GstD3D12Memory * mem, GST_LOG_OBJECT (allocator, "Render target is not allowed, configured flags 0x%x", (guint) priv->desc.Flags); - return FALSE; + return nullptr; } std::lock_guard < std::mutex > lk (priv->lock); @@ -659,7 +654,7 @@ gst_d3d12_memory_get_render_target_view_heap (GstD3D12Memory * mem, auto hr = device->CreateDescriptorHeap (&desc, IID_PPV_ARGS (&rtv_heap)); if (!gst_d3d12_result (hr, mem->device)) { GST_ERROR_OBJECT (allocator, "Couldn't create descriptor heap"); - return FALSE; + return nullptr; } priv->rtv_heap = rtv_heap; @@ -683,10 +678,7 @@ gst_d3d12_memory_get_render_target_view_heap (GstD3D12Memory * mem, } } - *heap = priv->rtv_heap.Get (); - (*heap)->AddRef (); - - return TRUE; + return priv->rtv_heap.Get (); } gboolean diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12memory.h b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12memory.h index 72ef2c6172..8afdbb3518 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12memory.h +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12memory.h @@ -144,11 +144,9 @@ gboolean gst_d3d12_memory_get_plane_rectangle (GstD3D12Memory * mem, guint plane, D3D12_RECT * rect); -gboolean gst_d3d12_memory_get_shader_resource_view_heap (GstD3D12Memory * mem, - ID3D12DescriptorHeap ** heap); +ID3D12DescriptorHeap * gst_d3d12_memory_get_shader_resource_view_heap (GstD3D12Memory * mem); -gboolean gst_d3d12_memory_get_render_target_view_heap (GstD3D12Memory * mem, - ID3D12DescriptorHeap ** heap); +ID3D12DescriptorHeap * gst_d3d12_memory_get_render_target_view_heap (GstD3D12Memory * mem); gboolean gst_d3d12_memory_get_nt_handle (GstD3D12Memory * mem, HANDLE * handle); diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12overlaycompositor.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12overlaycompositor.cpp index ad1cd2510a..b38dcd3622 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12overlaycompositor.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12overlaycompositor.cpp @@ -338,8 +338,7 @@ gst_d3d12_overlay_rect_new (GstD3D12OverlayCompositor * self, return nullptr; } - ComPtr < ID3D12DescriptorHeap > srv_heap_handle; - gst_d3d12_descriptor_get_handle (srv_heap, &srv_heap_handle); + auto srv_heap_handle = gst_d3d12_descriptor_get_handle (srv_heap); D3D12_SHADER_RESOURCE_VIEW_DESC srv_desc = { }; srv_desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; srv_desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; @@ -718,8 +717,8 @@ gst_d3d12_overlay_compositor_execute (GstD3D12OverlayCompositor * self, auto priv = self->priv; auto mem = (GstD3D12Memory *) gst_buffer_peek_memory (buf, 0); - ComPtr < ID3D12DescriptorHeap > rtv_heap; - if (!gst_d3d12_memory_get_render_target_view_heap (mem, &rtv_heap)) { + auto rtv_heap = gst_d3d12_memory_get_render_target_view_heap (mem); + if (!rtv_heap) { GST_ERROR_OBJECT (self, "Couldn't get rtv heap"); return FALSE; } @@ -765,9 +764,8 @@ gst_d3d12_overlay_compositor_execute (GstD3D12OverlayCompositor * self, cl->SetPipelineState (pso.Get ()); } - ComPtr < ID3D12DescriptorHeap > srv_heap; - gst_d3d12_descriptor_get_handle (rect->srv_heap, &srv_heap); - ID3D12DescriptorHeap *heaps[] = { srv_heap.Get () }; + auto srv_heap = gst_d3d12_descriptor_get_handle (rect->srv_heap); + ID3D12DescriptorHeap *heaps[] = { srv_heap }; cl->SetDescriptorHeaps (1, heaps); cl->SetGraphicsRootDescriptorTable (0, GetGPUDescriptorHandleForHeapStart (srv_heap)); diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12testsrc.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12testsrc.cpp index 1a64553882..2de748e644 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12testsrc.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12testsrc.cpp @@ -1204,9 +1204,8 @@ setup_d2d_render (GstD3D12TestSrc * self, RenderContext * ctx) auto device = gst_d3d12_device_get_device_handle (self->device); auto cq = gst_d3d12_device_get_command_queue (self->device, D3D12_COMMAND_LIST_TYPE_DIRECT); - ComPtr < ID3D12CommandQueue > cq_handle; - gst_d3d12_command_queue_get_handle (cq, &cq_handle); - IUnknown *cq_list[] = { cq_handle.Get () }; + auto cq_handle = gst_d3d12_command_queue_get_handle (cq); + IUnknown *cq_list[] = { cq_handle }; hr = D3D11On12CreateDevice (device, D3D11_CREATE_DEVICE_BGRA_SUPPORT, feature_levels, G_N_ELEMENTS (feature_levels), cq_list, 1, 0, @@ -1647,8 +1646,9 @@ gst_d3d12_test_src_setup_context (GstD3D12TestSrc * self, GstCaps * caps) return FALSE; } - if (!gst_d3d12_memory_get_render_target_view_heap ((GstD3D12Memory *) mem, - &ctx->rtv_heap)) { + ctx->rtv_heap = + gst_d3d12_memory_get_render_target_view_heap ((GstD3D12Memory *) mem); + if (!ctx->rtv_heap) { GST_ERROR_OBJECT (self, "Couldn't get rtv heap"); gst_memory_unref (mem); return FALSE; @@ -2167,8 +2167,7 @@ gst_d3d12_test_src_create (GstBaseSrc * bsrc, guint64 offset, return GST_FLOW_ERROR; } - ComPtr < ID3D12CommandAllocator > ca; - gst_d3d12_command_allocator_get_handle (gst_ca, &ca); + auto ca = gst_d3d12_command_allocator_get_handle (gst_ca); auto hr = ca->Reset (); if (!gst_d3d12_result (hr, self->device)) { @@ -2181,7 +2180,7 @@ gst_d3d12_test_src_create (GstBaseSrc * bsrc, guint64 offset, if (!priv->ctx->cl) { auto device = gst_d3d12_device_get_device_handle (self->device); hr = device->CreateCommandList (0, D3D12_COMMAND_LIST_TYPE_DIRECT, - ca.Get (), nullptr, IID_PPV_ARGS (&priv->ctx->cl)); + ca, nullptr, IID_PPV_ARGS (&priv->ctx->cl)); if (!gst_d3d12_result (hr, self->device)) { GST_ERROR_OBJECT (self, "Couldn't reset command list"); gst_d3d12_command_allocator_unref (gst_ca); @@ -2189,7 +2188,7 @@ gst_d3d12_test_src_create (GstBaseSrc * bsrc, guint64 offset, return GST_FLOW_ERROR; } } else { - hr = priv->ctx->cl->Reset (ca.Get (), nullptr); + hr = priv->ctx->cl->Reset (ca, nullptr); if (!gst_d3d12_result (hr, self->device)) { GST_ERROR_OBJECT (self, "Couldn't reset command list"); gst_d3d12_command_allocator_unref (gst_ca); diff --git a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12window.cpp b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12window.cpp index 47573e03d2..436378dfe6 100644 --- a/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12window.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d12/gstd3d12window.cpp @@ -1257,11 +1257,10 @@ gst_d3d12_window_prepare (GstD3D12Window * window, GstD3D12Device * device, auto factory = gst_d3d12_device_get_factory_handle (device); - ComPtr < ID3D12CommandQueue > cq; - gst_d3d12_command_queue_get_handle (ctx->queue, &cq); + auto cq = gst_d3d12_command_queue_get_handle (ctx->queue); ComPtr < IDXGISwapChain1 > swapchain; - hr = factory->CreateSwapChainForHwnd (cq.Get (), priv->hwnd, + hr = factory->CreateSwapChainForHwnd (cq, priv->hwnd, &desc, nullptr, nullptr, &swapchain); if (!gst_d3d12_result (hr, window->device)) { GST_ERROR_OBJECT (window, "Couldn't create swapchain"); @@ -1452,8 +1451,7 @@ gst_d3d12_window_set_buffer (GstD3D12Window * window, GstBuffer * buffer) return GST_FLOW_ERROR; } - ComPtr < ID3D12CommandAllocator > ca; - gst_d3d12_command_allocator_get_handle (gst_ca, &ca); + auto ca = gst_d3d12_command_allocator_get_handle (gst_ca); auto hr = ca->Reset (); if (!gst_d3d12_result (hr, window->device)) { GST_ERROR_OBJECT (window, "Couldn't reset command list"); @@ -1465,7 +1463,7 @@ gst_d3d12_window_set_buffer (GstD3D12Window * window, GstBuffer * buffer) if (!priv->ctx->cl) { auto device = gst_d3d12_device_get_device_handle (priv->ctx->device); hr = device->CreateCommandList (0, D3D12_COMMAND_LIST_TYPE_DIRECT, - ca.Get (), nullptr, IID_PPV_ARGS (&cl)); + ca, nullptr, IID_PPV_ARGS (&cl)); if (!gst_d3d12_result (hr, priv->ctx->device)) { GST_ERROR_OBJECT (window, "Couldn't create command list"); gst_d3d12_command_allocator_unref (gst_ca); @@ -1475,7 +1473,7 @@ gst_d3d12_window_set_buffer (GstD3D12Window * window, GstBuffer * buffer) priv->ctx->cl = cl; } else { cl = priv->ctx->cl; - hr = cl->Reset (ca.Get (), nullptr); + hr = cl->Reset (ca, nullptr); if (!gst_d3d12_result (hr, priv->ctx->device)) { GST_ERROR_OBJECT (window, "Couldn't reset command list"); gst_d3d12_command_allocator_unref (gst_ca); @@ -1566,9 +1564,8 @@ gst_d3d12_window_set_buffer (GstD3D12Window * window, GstBuffer * buffer) if (completed < max_fence_val) { auto device_queue = gst_d3d12_device_get_command_queue (priv->ctx->device, D3D12_COMMAND_LIST_TYPE_DIRECT); - ComPtr < ID3D12Fence > fence; - gst_d3d12_command_queue_get_fence (device_queue, &fence); - gst_d3d12_command_queue_execute_wait (priv->ctx->queue, fence.Get (), + auto fence = gst_d3d12_command_queue_get_fence_handle (device_queue); + gst_d3d12_command_queue_execute_wait (priv->ctx->queue, fence, max_fence_val); }