diff --git a/gst-libs/gst/d3d11/gstd3d11bufferpool.cpp b/gst-libs/gst/d3d11/gstd3d11bufferpool.cpp index 903fb17fd5..64336a14ce 100644 --- a/gst-libs/gst/d3d11/gstd3d11bufferpool.cpp +++ b/gst-libs/gst/d3d11/gstd3d11bufferpool.cpp @@ -307,10 +307,8 @@ gst_d3d11_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config) priv->offset[1] = priv->stride[0] * desc[0].Height; } - self->buffer_size = offset; - gst_buffer_pool_config_set_params (config, - caps, self->buffer_size, min_buffers, max_buffers); + caps, offset, min_buffers, max_buffers); return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config) && ret; diff --git a/gst-libs/gst/d3d11/gstd3d11bufferpool.h b/gst-libs/gst/d3d11/gstd3d11bufferpool.h index e809000ea7..114288ccf0 100644 --- a/gst-libs/gst/d3d11/gstd3d11bufferpool.h +++ b/gst-libs/gst/d3d11/gstd3d11bufferpool.h @@ -41,9 +41,6 @@ struct _GstD3D11BufferPool GstD3D11Device *device; - /* re-calculated buffer size based on d3d11 pitch and stride */ - guint buffer_size; - /*< private >*/ GstD3D11BufferPoolPrivate *priv; diff --git a/sys/d3d11/gstd3d11compositor.cpp b/sys/d3d11/gstd3d11compositor.cpp index ce7b1dcb13..1f9198705c 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 4ce213ff04..058b8e9bba 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 b06f260469..3ae416bdac 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 64e04b47ee..b961cf043e 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 a01ef16b1e..39ec4cde7b 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 b0b5695419..1cf096d9b1 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 a0bce4c195..758268416b 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 9dacfe7da4..9b6db1348d 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 f03edfb43c..312bb8ec2f 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);