diff options
author | Seungha Yang <seungha@centricular.com> | 2021-08-22 00:33:58 +0900 |
---|---|---|
committer | Seungha Yang <seungha@centricular.com> | 2021-08-22 00:46:19 +0900 |
commit | fe4ec03a4b44c97befdafebd20e00c62b6698a26 (patch) | |
tree | 2c837bba8ad3c58f928d2d51096495716a197c23 /sys | |
parent | 1874206abd484ff13226caa81335669a53fa4074 (diff) | |
download | gstreamer-plugins-bad-fe4ec03a4b44c97befdafebd20e00c62b6698a26.tar.gz |
d3d11bufferpool: Hide buffer_size field from header
User can get the required buffer size by using buffer pool config.
Since d3d11 implementation is a candidate for public library in the future,
we need to hide everything from header as much as possible.
Note that the total size of allocated d3d11 texture memory by GPU is not
controllable factor. It depends on hardware specific alignment/padding
requirement. So, GstD3D11 implementation updates actual buffer size
by allocating D3D11 texture, since there's no way to get CPU accessible
memory size without allocating real D3D11 texture.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2482>
Diffstat (limited to 'sys')
-rw-r--r-- | sys/d3d11/gstd3d11compositor.cpp | 17 | ||||
-rw-r--r-- | sys/d3d11/gstd3d11convert.cpp | 13 | ||||
-rw-r--r-- | sys/d3d11/gstd3d11decoder.cpp | 10 | ||||
-rw-r--r-- | sys/d3d11/gstd3d11deinterlace.cpp | 13 | ||||
-rw-r--r-- | sys/d3d11/gstd3d11desktopdupsrc.cpp | 8 | ||||
-rw-r--r-- | sys/d3d11/gstd3d11download.cpp | 8 | ||||
-rw-r--r-- | sys/d3d11/gstd3d11upload.cpp | 18 | ||||
-rw-r--r-- | sys/d3d11/gstd3d11videosink.cpp | 10 | ||||
-rw-r--r-- | sys/mediafoundation/gstmfvideoenc.cpp | 11 |
9 files changed, 83 insertions, 25 deletions
diff --git a/sys/d3d11/gstd3d11compositor.cpp b/sys/d3d11/gstd3d11compositor.cpp index ce7b1dcb1..1f9198705 100644 --- a/sys/d3d11/gstd3d11compositor.cpp +++ b/sys/d3d11/gstd3d11compositor.cpp @@ -1955,6 +1955,7 @@ gst_d3d11_compositor_propose_allocation (GstAggregator * aggregator, if (gst_query_get_n_allocation_pools (query) == 0) { GstD3D11AllocationParams *d3d11_params; + GstStructure *config; d3d11_params = gst_d3d11_allocation_params_new (self->device, &info, (GstD3D11AllocationFlags) 0, D3D11_BIND_SHADER_RESOURCE); @@ -1968,8 +1969,12 @@ gst_d3d11_compositor_propose_allocation (GstAggregator * aggregator, return FALSE; } - /* d3d11 buffer pool might update buffer size by self */ - size = GST_D3D11_BUFFER_POOL (pool)->buffer_size; + /* d3d11 buffer pool will update buffer size based on allocated texture, + * get size from config again */ + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_get_params (config, + nullptr, &size, nullptr, nullptr); + gst_structure_free (config); gst_query_add_allocation_pool (query, pool, size, 0, 0); gst_object_unref (pool); @@ -2042,8 +2047,12 @@ gst_d3d11_compositor_decide_allocation (GstAggregator * aggregator, gst_d3d11_allocation_params_free (d3d11_params); gst_buffer_pool_set_config (pool, config); - /* d3d11 buffer pool might update buffer size by self */ - size = GST_D3D11_BUFFER_POOL (pool)->buffer_size; + + /* d3d11 buffer pool will update buffer size based on allocated texture, + * get size from config again */ + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_get_params (config, nullptr, &size, nullptr, nullptr); + gst_structure_free (config); if (n > 0) gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max); diff --git a/sys/d3d11/gstd3d11convert.cpp b/sys/d3d11/gstd3d11convert.cpp index 4ce213ff0..058b8e9bb 100644 --- a/sys/d3d11/gstd3d11convert.cpp +++ b/sys/d3d11/gstd3d11convert.cpp @@ -1252,7 +1252,12 @@ gst_d3d11_base_convert_propose_allocation (GstBaseTransform * trans, gst_query_add_allocation_meta (query, GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE, NULL); - size = GST_D3D11_BUFFER_POOL (pool)->buffer_size; + /* d3d11 buffer pool will update buffer size based on allocated texture, + * get size from config again */ + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_get_params (config, nullptr, &size, nullptr, nullptr); + gst_structure_free (config); + gst_query_add_allocation_pool (query, pool, size, 0, 0); gst_object_unref (pool); @@ -1359,7 +1364,11 @@ gst_d3d11_base_convert_decide_allocation (GstBaseTransform * trans, gst_buffer_pool_config_set_params (config, outcaps, size, min, max); gst_buffer_pool_set_config (pool, config); - size = GST_D3D11_BUFFER_POOL (pool)->buffer_size; + /* d3d11 buffer pool will update buffer size based on allocated texture, + * get size from config again */ + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_get_params (config, nullptr, &size, nullptr, nullptr); + gst_structure_free (config); if (update_pool) gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max); diff --git a/sys/d3d11/gstd3d11decoder.cpp b/sys/d3d11/gstd3d11decoder.cpp index b06f26046..3ae416bda 100644 --- a/sys/d3d11/gstd3d11decoder.cpp +++ b/sys/d3d11/gstd3d11decoder.cpp @@ -1702,8 +1702,14 @@ gst_d3d11_decoder_decide_allocation (GstD3D11Decoder * decoder, } gst_buffer_pool_set_config (pool, config); - if (use_d3d11_pool) - size = GST_D3D11_BUFFER_POOL (pool)->buffer_size; + if (use_d3d11_pool) { + /* d3d11 buffer pool will update buffer size based on allocated texture, + * get size from config again */ + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_get_params (config, + nullptr, &size, nullptr, nullptr); + gst_structure_free (config); + } if (n > 0) gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max); diff --git a/sys/d3d11/gstd3d11deinterlace.cpp b/sys/d3d11/gstd3d11deinterlace.cpp index 64e04b47e..b961cf043 100644 --- a/sys/d3d11/gstd3d11deinterlace.cpp +++ b/sys/d3d11/gstd3d11deinterlace.cpp @@ -948,7 +948,12 @@ gst_d3d11_deinterlace_propose_allocation (GstBaseTransform * trans, gst_query_add_allocation_meta (query, GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE, NULL); - size = GST_D3D11_BUFFER_POOL (pool)->buffer_size; + /* d3d11 buffer pool will update buffer size based on allocated texture, + * get size from config again */ + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_get_params (config, nullptr, &size, nullptr, nullptr); + gst_structure_free (config); + gst_query_add_allocation_pool (query, pool, size, min_buffers, 0); gst_object_unref (pool); @@ -1022,7 +1027,11 @@ gst_d3d11_deinterlace_decide_allocation (GstBaseTransform * trans, gst_buffer_pool_config_set_params (config, outcaps, size, min, max); gst_buffer_pool_set_config (pool, config); - size = GST_D3D11_BUFFER_POOL (pool)->buffer_size; + /* d3d11 buffer pool will update buffer size based on allocated texture, + * get size from config again */ + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_get_params (config, nullptr, &size, nullptr, nullptr); + gst_structure_free (config); if (update_pool) gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max); diff --git a/sys/d3d11/gstd3d11desktopdupsrc.cpp b/sys/d3d11/gstd3d11desktopdupsrc.cpp index a01ef16b1..39ec4cde7 100644 --- a/sys/d3d11/gstd3d11desktopdupsrc.cpp +++ b/sys/d3d11/gstd3d11desktopdupsrc.cpp @@ -378,9 +378,11 @@ gst_d3d11_desktop_dup_src_decide_allocation (GstBaseSrc * bsrc, gst_buffer_pool_set_config (pool, config); - /* buffer size might be recalculated by pool depending on - * device's stride/padding constraints */ - size = GST_D3D11_BUFFER_POOL (pool)->buffer_size; + /* d3d11 buffer pool will update buffer size based on allocated texture, + * get size from config again */ + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_get_params (config, nullptr, &size, nullptr, nullptr); + gst_structure_free (config); if (update_pool) gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max); diff --git a/sys/d3d11/gstd3d11download.cpp b/sys/d3d11/gstd3d11download.cpp index b0b569541..1cf096d9b 100644 --- a/sys/d3d11/gstd3d11download.cpp +++ b/sys/d3d11/gstd3d11download.cpp @@ -295,9 +295,13 @@ gst_d3d11_download_propose_allocation (GstBaseTransform * trans, gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL); - /* d3d11 buffer pool might update buffer size by self */ if (is_d3d11) { - size = GST_D3D11_BUFFER_POOL (pool)->buffer_size; + /* d3d11 buffer pool will update buffer size based on allocated texture, + * get size from config again */ + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_get_params (config, nullptr, &size, nullptr, + nullptr); + gst_structure_free (config); } gst_query_add_allocation_pool (query, pool, size, 0, 0); diff --git a/sys/d3d11/gstd3d11upload.cpp b/sys/d3d11/gstd3d11upload.cpp index a0bce4c19..758268416 100644 --- a/sys/d3d11/gstd3d11upload.cpp +++ b/sys/d3d11/gstd3d11upload.cpp @@ -326,9 +326,14 @@ gst_d3d11_upload_propose_allocation (GstBaseTransform * trans, if (!gst_buffer_pool_set_config (pool, config)) goto config_failed; - /* d3d11 buffer pool might update buffer size by self */ - if (is_d3d11) - size = GST_D3D11_BUFFER_POOL (pool)->buffer_size; + /* d3d11 buffer pool will update buffer size based on allocated texture, + * get size from config again */ + if (is_d3d11) { + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_get_params (config, + nullptr, &size, nullptr, nullptr); + gst_structure_free (config); + } gst_query_add_allocation_pool (query, pool, size, 0, 0); gst_object_unref (pool); @@ -446,8 +451,11 @@ gst_d3d11_upload_decide_allocation (GstBaseTransform * trans, GstQuery * query) gst_buffer_pool_set_config (pool, config); - /* update size with calculated one */ - size = GST_D3D11_BUFFER_POOL (pool)->buffer_size; + /* d3d11 buffer pool will update buffer size based on allocated texture, + * get size from config again */ + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_get_params (config, nullptr, &size, nullptr, nullptr); + gst_structure_free (config); if (update_pool) gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max); diff --git a/sys/d3d11/gstd3d11videosink.cpp b/sys/d3d11/gstd3d11videosink.cpp index 9dacfe7da..9b6db1348 100644 --- a/sys/d3d11/gstd3d11videosink.cpp +++ b/sys/d3d11/gstd3d11videosink.cpp @@ -885,8 +885,14 @@ gst_d3d11_video_sink_propose_allocation (GstBaseSink * sink, GstQuery * query) return FALSE; } - if (is_d3d11) - size = GST_D3D11_BUFFER_POOL (pool)->buffer_size; + if (is_d3d11) { + /* d3d11 buffer pool will update buffer size based on allocated texture, + * get size from config again */ + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_get_params (config, nullptr, &size, nullptr, + nullptr); + gst_structure_free (config); + } } /* We need at least 2 buffers because we hold on to the last one for redrawing diff --git a/sys/mediafoundation/gstmfvideoenc.cpp b/sys/mediafoundation/gstmfvideoenc.cpp index f03edfb43..312bb8ec2 100644 --- a/sys/mediafoundation/gstmfvideoenc.cpp +++ b/sys/mediafoundation/gstmfvideoenc.cpp @@ -1360,9 +1360,14 @@ gst_mf_video_enc_propose_allocation (GstVideoEncoder * enc, GstQuery * query) if (!gst_buffer_pool_set_config (pool, config)) goto config_failed; - /* d3d11 buffer pool might update buffer size by self */ - if (is_d3d11) - size = GST_D3D11_BUFFER_POOL (pool)->buffer_size; + /* d3d11 buffer pool will update buffer size based on allocated texture, + * get size from config again */ + if (is_d3d11) { + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_get_params (config, + nullptr, &size, nullptr, nullptr); + gst_structure_free (config); + } gst_query_add_allocation_pool (query, pool, size, 0, 0); gst_object_unref (pool); |