diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkencoder-private.c b/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkencoder-private.c index ec53e052ed..fff554eba4 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkencoder-private.c +++ b/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkencoder-private.c @@ -72,7 +72,6 @@ struct _GstVulkanEncoderPrivate guint quality_level; } prop; - guint out_buffer_size_aligned; gboolean layered_dpb; GstBufferPool *dpb_pool; GstBuffer *layered_buffer; @@ -388,10 +387,11 @@ gst_vulkan_encoder_new_video_session_parameters (GstVulkanEncoder * self, */ GstVulkanEncoderPicture * gst_vulkan_encoder_picture_new (GstVulkanEncoder * self, GstBuffer * in_buffer, - int width, int height, gboolean is_ref, gint nb_refs) + int width, int height, gsize size, gboolean is_ref, gint nb_refs) { GstVulkanEncoderPicture *pic; GstVulkanEncoderPrivate *priv; + gsize size_aligned; g_return_val_if_fail (GST_IS_VULKAN_ENCODER (self), NULL); g_return_val_if_fail (GST_IS_BUFFER (in_buffer), NULL); @@ -400,6 +400,9 @@ gst_vulkan_encoder_picture_new (GstVulkanEncoder * self, GstBuffer * in_buffer, pic = g_new0 (GstVulkanEncoderPicture, 1); + size_aligned = GST_ROUND_UP_N (size, + priv->caps.caps.minBitstreamBufferSizeAlignment); + if (priv->layered_dpb) { g_assert (priv->layered_buffer); pic->dpb_buffer = gst_buffer_ref (priv->layered_buffer); @@ -417,7 +420,7 @@ gst_vulkan_encoder_picture_new (GstVulkanEncoder * self, GstBuffer * in_buffer, pic->in_buffer = gst_buffer_ref (in_buffer); pic->out_buffer = gst_vulkan_video_codec_buffer_new (self->queue->device, &priv->profile, - VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR, priv->out_buffer_size_aligned); + VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR, size_aligned); pic->width = width; pic->height = height; pic->is_ref = is_ref; @@ -564,7 +567,6 @@ gst_vulkan_encoder_stop (GstVulkanEncoder * self) * gst_vulkan_encoder_start: * @self: a #GstVulkanEncoder * @profile: a #GstVulkanVideoProfile - * @out_buffer_size: a maximal buffer size to be used by the encoder to store the output * @error: (out) : an error result in case of failure or %NULL * * Start the encoding session according to a valid Vulkan profile @@ -574,7 +576,7 @@ gst_vulkan_encoder_stop (GstVulkanEncoder * self) */ gboolean gst_vulkan_encoder_start (GstVulkanEncoder * self, - GstVulkanVideoProfile * profile, guint out_buffer_size, GError ** error) + GstVulkanVideoProfile * profile, GError ** error) { GstVulkanEncoderPrivate *priv; VkResult res; @@ -819,9 +821,6 @@ gst_vulkan_encoder_start (GstVulkanEncoder * self, goto failed; - priv->out_buffer_size_aligned = GST_ROUND_UP_N (out_buffer_size, - priv->caps.caps.minBitstreamBufferSizeAlignment); - priv->started = TRUE; return TRUE; diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkencoder-private.h b/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkencoder-private.h index c46b1767b4..a630345c55 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkencoder-private.h +++ b/subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkencoder-private.h @@ -153,7 +153,6 @@ GstVulkanEncoder * gst_vulkan_encoder_create_from_queue (GstVulkanQueue GST_VULKAN_API gboolean gst_vulkan_encoder_start (GstVulkanEncoder * self, GstVulkanVideoProfile * profile, - guint32 out_buffer_size, GError ** error); GST_VULKAN_API gboolean gst_vulkan_encoder_stop (GstVulkanEncoder * self); @@ -187,6 +186,7 @@ GstVulkanEncoderPicture* gst_vulkan_encoder_picture_new (GstVulkanEncode GstBuffer * in_buffer, gint width, gint height, + gsize size, gboolean is_ref, gint nb_refs); GST_VULKAN_API diff --git a/subprojects/gst-plugins-bad/tests/check/libs/vkvideoencodeh264.c b/subprojects/gst-plugins-bad/tests/check/libs/vkvideoencodeh264.c index 925b7a9ee9..77f9cfbc86 100644 --- a/subprojects/gst-plugins-bad/tests/check/libs/vkvideoencodeh264.c +++ b/subprojects/gst-plugins-bad/tests/check/libs/vkvideoencodeh264.c @@ -357,7 +357,7 @@ allocate_frame (GstVulkanEncoder * enc, int width, upload_buffer_to_image(img_pool, in_buffer, &img_buffer); frame = _h264_encode_frame_new (gst_vulkan_encoder_picture_new (enc, - img_buffer, width, height, is_ref, nb_refs)); + img_buffer, width, height, width * height * 3, is_ref, nb_refs)); fail_unless (frame); fail_unless (frame->picture); gst_buffer_unref (in_buffer); @@ -693,8 +693,7 @@ setup_h264_encoder (guint32 width, gint32 height, gint sps_id, gint pps_id) return NULL; } - fail_unless (gst_vulkan_encoder_start (enc, &profile, width * height * 3, - &err)); + fail_unless (gst_vulkan_encoder_start (enc, &profile, &err)); mbAlignedWidth = GST_ROUND_UP_16 (width); mbAlignedHeight = GST_ROUND_UP_16 (height); diff --git a/subprojects/gst-plugins-bad/tests/check/libs/vkvideoencodeh265.c b/subprojects/gst-plugins-bad/tests/check/libs/vkvideoencodeh265.c index ed2088903d..22b64e0207 100644 --- a/subprojects/gst-plugins-bad/tests/check/libs/vkvideoencodeh265.c +++ b/subprojects/gst-plugins-bad/tests/check/libs/vkvideoencodeh265.c @@ -363,9 +363,8 @@ allocate_frame (GstVulkanEncoder * enc, int width, /* get a Vulkan image buffer out of the input buffer */ upload_buffer_to_image(img_pool, in_buffer, &img_buffer); - frame = _h265_encode_frame_new (gst_vulkan_encoder_picture_new (enc, - img_buffer, width, height, is_ref, nb_refs)); + img_buffer, width, height, width * height * 3, is_ref, nb_refs)); fail_unless (frame); fail_unless (frame->picture); gst_buffer_unref (in_buffer); @@ -797,8 +796,7 @@ setup_h265_encoder (uint32_t width, uint32_t height, gint vps_id, return NULL; } - fail_unless (gst_vulkan_encoder_start (enc, &profile, width * height * 3, - &err)); + fail_unless (gst_vulkan_encoder_start (enc, &profile, &err)); fail_unless (gst_vulkan_encoder_caps (enc, &enc_caps));