* gst_vulkan_encoder_picture_new:
* @self: the #GstVulkanEncoder with the pool's configuration.
* @in_buffer: (transfer none): the input #GstBuffer.
- * @width: the picture width
- * @height: the picture height
+ * @size: size of the output buffer
*
* Create a new vulkan encode picture from the input buffer.
*
*/
GstVulkanEncoderPicture *
gst_vulkan_encoder_picture_new (GstVulkanEncoder * self, GstBuffer * in_buffer,
- int width, int height, gsize size)
+ gsize size)
{
GstVulkanEncoderPicture *pic;
GstVulkanEncoderPrivate *priv;
pic->out_buffer =
gst_vulkan_video_codec_buffer_new (self->queue->device, &priv->profile,
VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR, size_aligned);
- pic->width = width;
- pic->height = height;
pic->slotIndex = -1;
pic->offset = 0;
/**
* gst_vulkan_encoder_encode:
* @self: a #GstVulkanEncoder
+ * @info: the #GstVideoInfo of the @pic to process
* @pic: a #GstVulkanEncoderPicture
* @nb_refs: number of @ref_pics
* @ref_pics: an array of #GstVulkanEncoderPicture
*
*/
gboolean
-gst_vulkan_encoder_encode (GstVulkanEncoder * self,
+gst_vulkan_encoder_encode (GstVulkanEncoder * self, GstVideoInfo * info,
GstVulkanEncoderPicture * pic, guint nb_refs,
GstVulkanEncoderPicture ** ref_pics)
{
GArray *barriers;
g_return_val_if_fail (GST_IS_VULKAN_ENCODER (self), FALSE);
- g_return_val_if_fail (pic != NULL, FALSE);
+ g_return_val_if_fail (info != NULL && pic != NULL, FALSE);
priv = gst_vulkan_encoder_get_instance_private (self);
.pNext = pic->codec_rc_layer_info,
.averageBitrate = priv->prop.average_bitrate,
.maxBitrate = priv->caps.encoder.caps.maxBitrate,
- .frameRateNumerator = pic->fps_n,
- .frameRateDenominator = pic->fps_d,
+ .frameRateNumerator = GST_VIDEO_INFO_FPS_N (info),
+ .frameRateDenominator = GST_VIDEO_INFO_FPS_D (info),
};
priv->rate_control_info = (VkVideoEncodeRateControlInfoKHR) {
.sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR,
.pNext = NULL,
.codedOffset = { 0, 0 },
.codedExtent = {
- .width = pic->width,
- .height = pic->height
+ .width = GST_VIDEO_INFO_WIDTH (info),
+ .height = GST_VIDEO_INFO_HEIGHT (info),
},
.baseArrayLayer = 0,
.imageViewBinding = pic->dpb_view->view,
.pNext = NULL,
.codedOffset = { 0, 0 },
.codedExtent = {
- .width = pic->width,
- .height = pic->height
+ .width = GST_VIDEO_INFO_WIDTH (info),
+ .height = GST_VIDEO_INFO_HEIGHT (info),
},
.baseArrayLayer = 0,
.imageViewBinding = pic->img_view->view,
* GstVulkanEncoderPicture:
* @slotIndex: slot index
* @offset: headers offset
- * @width: picture width
- * @height: picture height
- * @fps_n: fps numerator
- * @fps_d: fps denominator
* @in_buffer: input buffer
* @out_buffer: output buffer
*
guint64 offset;
- gint width;
- gint height;
-
- gint fps_n;
- gint fps_d;
-
GstBuffer *in_buffer;
GstBuffer *dpb_buffer;
GstBuffer *out_buffer;
GstCaps * caps);
GST_VULKAN_API
gboolean gst_vulkan_encoder_encode (GstVulkanEncoder * self,
+ GstVideoInfo * info,
GstVulkanEncoderPicture * pic,
guint nb_refs,
GstVulkanEncoderPicture ** ref_pics);
GST_VULKAN_API
GstVulkanEncoderPicture* gst_vulkan_encoder_picture_new (GstVulkanEncoder * self,
GstBuffer * in_buffer,
- gint width,
- gint height,
gsize size);
GST_VULKAN_API
void gst_vulkan_encoder_picture_free (GstVulkanEncoderPicture * pic);
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, width * height * 3), is_ref);
+ img_buffer, width * height * 3), is_ref);
fail_unless (frame);
fail_unless (frame->picture);
gst_buffer_unref (in_buffer);
frame->ref_list_info.RefPicList1[i] = list1[i]->picture->slotIndex;
}
- fail_unless (gst_vulkan_encoder_encode (enc, picture, ref_pics_num,
+ fail_unless (gst_vulkan_encoder_encode (enc, &in_info, picture, ref_pics_num,
ref_pics));
}
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, width * height * 3), is_ref);
+ img_buffer, width * height * 3), is_ref);
fail_unless (frame);
fail_unless (frame->picture);
gst_buffer_unref (in_buffer);
frame->ref_list_info.RefPicList1[i] = list1[i]->picture->slotIndex;
}
- fail_unless (gst_vulkan_encoder_encode (enc, picture, ref_pics_num,
+ fail_unless (gst_vulkan_encoder_encode (enc, &in_info, picture, ref_pics_num,
ref_pics));
}