summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorSeungha Yang <seungha@centricular.com>2021-08-22 00:33:58 +0900
committerSeungha Yang <seungha@centricular.com>2021-08-22 00:46:19 +0900
commitfe4ec03a4b44c97befdafebd20e00c62b6698a26 (patch)
tree2c837bba8ad3c58f928d2d51096495716a197c23 /sys
parent1874206abd484ff13226caa81335669a53fa4074 (diff)
downloadgstreamer-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.cpp17
-rw-r--r--sys/d3d11/gstd3d11convert.cpp13
-rw-r--r--sys/d3d11/gstd3d11decoder.cpp10
-rw-r--r--sys/d3d11/gstd3d11deinterlace.cpp13
-rw-r--r--sys/d3d11/gstd3d11desktopdupsrc.cpp8
-rw-r--r--sys/d3d11/gstd3d11download.cpp8
-rw-r--r--sys/d3d11/gstd3d11upload.cpp18
-rw-r--r--sys/d3d11/gstd3d11videosink.cpp10
-rw-r--r--sys/mediafoundation/gstmfvideoenc.cpp11
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);