/*
- * gstvaapih264encoder.c - H.264 encoder
+ * gstvaapiencoder_h264.c - H.264 encoder
*
* Copyright (C) 2011 Intel Corporation
*
* Boston, MA 02110-1301 USA
*/
-#include "gstvaapih264encoder.h"
+#include "gstvaapiencoder_h264.h"
#include <string.h>
#include <stdlib.h>
SLICE_TYPE_I = 2
} H264_SLICE_TYPE;
-struct _GstH264EncoderPrivate {
- GstH264Encoder *public;
+struct _GstVaapiEncoderH264Private {
+ GstVaapiEncoderH264 *public;
guint32 format; /*NV12, I420,*/
gboolean avc_flag; /*elementary flag*/
guint64 last_decode_time;
};
-G_DEFINE_TYPE(GstH264Encoder, gst_h264_encoder, GST_TYPE_VAAPI_BASE_ENCODER);
+G_DEFINE_TYPE(GstVaapiEncoderH264, gst_vaapi_encoder_h264, GST_TYPE_VAAPI_BASE_ENCODER);
// 4096-1
static const guint8 h264_bit_mask[9] = {0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF};
-static EncoderStatus gst_h264_encoder_flush(GstVaapiEncoder* encoder, GstVaapiDisplay *display,
+static EncoderStatus gst_vaapi_encoder_h264_flush(GstVaapiEncoder* encoder, GstVaapiDisplay *display,
GstVaapiContext *context, GList **coded_pics);
/*other functions*/
/*other functions*/
-static EncoderStatus gst_h264_encoder_get_codec_data(
+static EncoderStatus gst_vaapi_encoder_h264_get_codec_data(
GstVaapiEncoder* encoder, GstBuffer **buffer);
static gboolean gst_h264_validate_parameters(GstVaapiBaseEncoder *encoder);
-static void gst_h264_encoder_finalize(GObject *object);
-static void gst_h264_encoder_init_public_values(GstH264Encoder* encoder);
+static void gst_vaapi_encoder_h264_finalize(GObject *object);
+static void gst_vaapi_encoder_h264_init_public_values(GstVaapiEncoderH264* encoder);
-static gboolean gst_h264_encoder_alloc_slices(GstVaapiBaseEncoder *encoder,
+static gboolean gst_vaapi_encoder_h264_alloc_slices(GstVaapiBaseEncoder *encoder,
GstVaapiDisplay *display, GstVaapiContext *context);
-static gboolean gst_h264_encoder_release_resource(GstVaapiBaseEncoder* encoder,
+static gboolean gst_vaapi_encoder_h264_release_resource(GstVaapiBaseEncoder* encoder,
GstVaapiDisplay *display, GstVaapiContext *context);
-static EncoderStatus gst_h264_encoder_prepare_next_buffer(GstVaapiBaseEncoder* encoder,
+static EncoderStatus gst_vaapi_encoder_h264_prepare_next_buffer(GstVaapiBaseEncoder* encoder,
GstVaapiVideoBuffer *display_buf, gboolean need_flush,
GstVaapiVideoBuffer **out_buf);
-static void gst_h264_encoder_frame_failed(GstVaapiBaseEncoder *encoder,
+static void gst_vaapi_encoder_h264_frame_failed(GstVaapiBaseEncoder *encoder,
GstVaapiVideoBuffer* buffer);
-static EncoderStatus gst_h264_encoder_rendering(GstVaapiBaseEncoder *encoder, GstVaapiDisplay *display,
+static EncoderStatus gst_vaapi_encoder_h264_rendering(GstVaapiBaseEncoder *encoder, GstVaapiDisplay *display,
GstVaapiContext *context, GstVaapiSurface *surface,
guint frame_index, VABufferID coded_buf, gboolean *is_key);
static void gst_h264_notify_frame(GstVaapiBaseEncoder *encoder, guint8 *buf, guint32 size);
//static EncoderStatus h264_encoder_read_sps_pps(
-// GstH264EncoderPrivate *h264_prv, const guint8 *buf, guint32 size);
-static GstBuffer *gst_h264_encoder_copy_coded_buffer(GstVaapiBaseEncoder *encoder,
+// GstVaapiEncoderH264Private *h264_prv, const guint8 *buf, guint32 size);
+static GstBuffer *gst_vaapi_encoder_h264_copy_coded_buffer(GstVaapiBaseEncoder *encoder,
guint8 *frame, guint32 frame_size, VABufferID *coded_buf);
/* h264 bitstream functions */
guint32 *profile_idc, guint32 *profile_comp, guint32 *level_idc);
static void
-gst_h264_encoder_class_init(GstH264EncoderClass *klass)
+gst_vaapi_encoder_h264_class_init(GstVaapiEncoderH264Class *klass)
{
GObjectClass * const object_class = G_OBJECT_CLASS(klass);
GstVaapiEncoderClass * const encoder_class = GST_VAAPI_ENCODER_CLASS(klass);
GstVaapiBaseEncoderClass * const base_class = GST_VAAPI_BASE_ENCODER_CLASS(klass);
- g_type_class_add_private(klass, sizeof(GstH264EncoderPrivate));
+ g_type_class_add_private(klass, sizeof(GstVaapiEncoderH264Private));
GST_DEBUG_CATEGORY_INIT (gst_vaapi_h264_encoder_debug, "gst_va_h264_encoder", 0,
"gst_va_h264_encoder element");
- object_class->finalize = gst_h264_encoder_finalize;
+ object_class->finalize = gst_vaapi_encoder_h264_finalize;
base_class->validate_attributes = gst_h264_validate_parameters;
- base_class->pre_alloc_resource = gst_h264_encoder_alloc_slices;
- base_class->release_resource = gst_h264_encoder_release_resource;
- base_class->prepare_next_input_buffer = gst_h264_encoder_prepare_next_buffer;
- base_class->render_frame = gst_h264_encoder_rendering;
+ base_class->pre_alloc_resource = gst_vaapi_encoder_h264_alloc_slices;
+ base_class->release_resource = gst_vaapi_encoder_h264_release_resource;
+ base_class->prepare_next_input_buffer = gst_vaapi_encoder_h264_prepare_next_buffer;
+ base_class->render_frame = gst_vaapi_encoder_h264_rendering;
base_class->notify_frame = gst_h264_notify_frame;
- base_class->copy_coded_frame = gst_h264_encoder_copy_coded_buffer;
- base_class->encode_frame_failed = gst_h264_encoder_frame_failed;
+ base_class->copy_coded_frame = gst_vaapi_encoder_h264_copy_coded_buffer;
+ base_class->encode_frame_failed = gst_vaapi_encoder_h264_frame_failed;
- encoder_class->flush = gst_h264_encoder_flush;
+ encoder_class->flush = gst_vaapi_encoder_h264_flush;
- encoder_class->get_codec_data = gst_h264_encoder_get_codec_data;
+ encoder_class->get_codec_data = gst_vaapi_encoder_h264_get_codec_data;
/*
- object_class->set_property = gst_h264_encoder_set_property;
- object_class->get_property = gst_h264_encoder_get_property;
+ object_class->set_property = gst_vaapi_encoder_h264_set_property;
+ object_class->get_property = gst_vaapi_encoder_h264_get_property;
*/
}
}
static void
-gst_h264_encoder_init(GstH264Encoder *encoder)
+gst_vaapi_encoder_h264_init(GstVaapiEncoderH264 *encoder)
{
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(encoder);
ENCODER_ASSERT(h264_prv);
h264_prv->public = encoder;
/* init public attributes */
- gst_h264_encoder_init_public_values(encoder);
+ gst_vaapi_encoder_h264_init_public_values(encoder);
gst_vaapi_base_encoder_set_frame_notify(GST_VAAPI_BASE_ENCODER(encoder), TRUE);
/* init private values*/
}
static void
-gst_h264_encoder_finalize(GObject *object)
+gst_vaapi_encoder_h264_finalize(GObject *object)
{
/*free private buffers*/
GstVaapiEncoder *encoder = GST_VAAPI_ENCODER(object);
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(object);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(object);
if (gst_vaapi_encoder_get_state(encoder) != VAAPI_ENC_NULL) {
gst_vaapi_encoder_uninitialize(encoder);
h264_prv->queued_buffers = NULL;
}
- G_OBJECT_CLASS(gst_h264_encoder_parent_class)->finalize(object);
+ G_OBJECT_CLASS(gst_vaapi_encoder_h264_parent_class)->finalize(object);
}
-GstH264Encoder *
-gst_h264_encoder_new(void)
+GstVaapiEncoderH264 *
+gst_vaapi_encoder_h264_new(void)
{
- return GST_H264_ENCODER(g_object_new(GST_TYPE_H264_ENCODER, NULL));
+ return GST_VAAPI_ENCODER_H264(g_object_new(GST_TYPE_VAAPI_ENCODER_H264, NULL));
}
static void
-gst_h264_encoder_init_public_values(GstH264Encoder* encoder)
+gst_vaapi_encoder_h264_init_public_values(GstVaapiEncoderH264* encoder)
{
encoder->profile = 0;
encoder->level = 0;
}
void
-gst_h264_encoder_set_avc_flag(GstH264Encoder* encoder, gboolean avc)
+gst_vaapi_encoder_h264_set_avc_flag(GstVaapiEncoderH264* encoder, gboolean avc)
{
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(encoder);
h264_prv->avc_flag = avc;
}
gboolean
-gst_h264_encoder_get_avc_flag(GstH264Encoder* encoder)
+gst_vaapi_encoder_h264_get_avc_flag(GstVaapiEncoderH264* encoder)
{
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(encoder);
return h264_prv->avc_flag;
}
gboolean
gst_h264_validate_parameters(GstVaapiBaseEncoder *base_encoder)
{
- GstH264Encoder *encoder = GST_H264_ENCODER(base_encoder);
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(encoder);
+ GstVaapiEncoderH264 *encoder = GST_VAAPI_ENCODER_H264(base_encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(encoder);
if (!ENCODER_WIDTH(encoder) || !ENCODER_HEIGHT(encoder) || !ENCODER_FPS(encoder)) {
return FALSE;
}
static gboolean
-h264_encoder_release_parameters(GstH264Encoder *h264_encoder, GstVaapiDisplay *display, GstVaapiContext *context)
+h264_encoder_release_parameters(GstVaapiEncoderH264 *h264_encoder, GstVaapiDisplay *display, GstVaapiContext *context)
{
VAStatus va_status = VA_STATUS_SUCCESS;
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(h264_encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(h264_encoder);
gboolean is_locked = FALSE;
}
static void
-h264_release_queued_buffers(GstH264EncoderPrivate *h264_prv)
+h264_release_queued_buffers(GstVaapiEncoderH264Private *h264_prv)
{
while (!g_queue_is_empty(h264_prv->queued_buffers)) {
GstBuffer* tmp = g_queue_pop_head(h264_prv->queued_buffers);
static gboolean
-gst_h264_encoder_release_resource(GstVaapiBaseEncoder* encoder, GstVaapiDisplay *display, GstVaapiContext *context)
+gst_vaapi_encoder_h264_release_resource(GstVaapiBaseEncoder* encoder, GstVaapiDisplay *display, GstVaapiContext *context)
{
- GstH264Encoder* h264_encoder = GST_H264_ENCODER(encoder);
+ GstVaapiEncoderH264* h264_encoder = GST_VAAPI_ENCODER_H264(encoder);
gboolean ret = TRUE;
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(h264_encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(h264_encoder);
/* release buffers first */
h264_encoder_release_parameters(h264_encoder, display, context);
}
static gboolean
-gst_h264_encoder_alloc_slices(GstVaapiBaseEncoder *encoder, GstVaapiDisplay *display, GstVaapiContext *context)
+gst_vaapi_encoder_h264_alloc_slices(GstVaapiBaseEncoder *encoder, GstVaapiDisplay *display, GstVaapiContext *context)
{
gboolean ret = TRUE;
- GstH264Encoder *h264_encoder = GST_H264_ENCODER(encoder);
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(encoder);
+ GstVaapiEncoderH264 *h264_encoder = GST_VAAPI_ENCODER_H264(encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(encoder);
h264_prv->slice_param_buffers =
#ifdef _SIMPLE_LIB_VA_
}
static void
-gst_h264_encoder_frame_failed(GstVaapiBaseEncoder *encoder, GstVaapiVideoBuffer* buffer)
+gst_vaapi_encoder_h264_frame_failed(GstVaapiBaseEncoder *encoder, GstVaapiVideoBuffer* buffer)
{
- GstH264Encoder *h264_encoder = GST_H264_ENCODER(encoder);
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(h264_encoder);
+ GstVaapiEncoderH264 *h264_encoder = GST_VAAPI_ENCODER_H264(encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(h264_encoder);
h264_release_queued_buffers(h264_prv);
h264_prv->cur_display_num = 0;
}
static EncoderStatus
-gst_h264_encoder_prepare_next_buffer(GstVaapiBaseEncoder* encoder,
+gst_vaapi_encoder_h264_prepare_next_buffer(GstVaapiBaseEncoder* encoder,
GstVaapiVideoBuffer *display_buf, gboolean need_flush,
GstVaapiVideoBuffer **out_buf)
{
EncoderStatus ret = ENCODER_NO_ERROR;
- GstH264Encoder *h264_encoder = GST_H264_ENCODER(encoder);
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(h264_encoder);
+ GstVaapiEncoderH264 *h264_encoder = GST_VAAPI_ENCODER_H264(encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(h264_encoder);
GstVaapiVideoBuffer *return_buf = NULL;
//guint64 pts = 0;
#ifdef _SIMPLE_LIB_VA_
static EncoderStatus
-gst_h264_encoder_rendering(GstVaapiBaseEncoder *encoder, GstVaapiDisplay *display,
+gst_vaapi_encoder_h264_rendering(GstVaapiBaseEncoder *encoder, GstVaapiDisplay *display,
GstVaapiContext *context, GstVaapiSurface *surface,
guint frame_index, VABufferID coded_buf, gboolean *is_key)
{
EncoderStatus ret = ENCODER_NO_ERROR;
VAStatus va_status = VA_STATUS_SUCCESS;
- GstH264Encoder *h264_encoder = GST_H264_ENCODER(encoder);
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(h264_encoder);
+ GstVaapiEncoderH264 *h264_encoder = GST_VAAPI_ENCODER_H264(encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(h264_encoder);
VAEncPictureParameterBufferH264 pic_h264;
VAEncSliceParameterBuffer *slice_h264 = NULL;
}
static gboolean
-h264_recreate_seq_param(GstH264Encoder *h264_encoder,
+h264_recreate_seq_param(GstVaapiEncoderH264 *h264_encoder,
VADisplay va_dpy, VAContextID context_id)
{
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(h264_encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(h264_encoder);
VAEncSequenceParameterBufferH264 seq_h264 = { 0 };
guint width_in_mbs, height_in_mbs;
gboolean ret = TRUE;
}
static gboolean
-h264_recreate_pic_param(GstH264Encoder *h264_encoder,
+h264_recreate_pic_param(GstVaapiEncoderH264 *h264_encoder,
VADisplay va_dpy, VAContextID context_id,
VABufferID coded_buf)
{
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(h264_encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(h264_encoder);
VAEncPictureParameterBufferH264 pic_h264;
gboolean ret = TRUE;
VAStatus va_status = VA_STATUS_SUCCESS;
static gboolean
-h264_recreate_slice_param(GstH264Encoder *h264_encoder,
+h264_recreate_slice_param(GstVaapiEncoderH264 *h264_encoder,
VADisplay va_dpy, VAContextID context_id)
{
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(h264_encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(h264_encoder);
VAEncSliceParameterBufferH264 *slice_h264 = NULL;
guint width_in_mbs;
gboolean ret = TRUE;
}
static EncoderStatus
-gst_h264_encoder_rendering(GstVaapiBaseEncoder *encoder, GstVaapiDisplay *display,
+gst_vaapi_encoder_h264_rendering(GstVaapiBaseEncoder *encoder, GstVaapiDisplay *display,
GstVaapiContext *context, GstVaapiSurface *surface,
guint frame_index, VABufferID coded_buf, gboolean *is_key)
{
EncoderStatus ret = ENCODER_NO_ERROR;
VAStatus va_status = VA_STATUS_SUCCESS;
- GstH264Encoder *h264_encoder = GST_H264_ENCODER(encoder);
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(h264_encoder);
+ GstVaapiEncoderH264 *h264_encoder = GST_VAAPI_ENCODER_H264(encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(h264_encoder);
VABufferID va_buffers[64];
guint32 va_buffers_count = 0;
gboolean is_params_ok = TRUE;
#endif
static GstBuffer *
-gst_h264_encoder_copy_coded_buffer(GstVaapiBaseEncoder *encoder,
+gst_vaapi_encoder_h264_copy_coded_buffer(GstVaapiBaseEncoder *encoder,
guint8 *frame,
guint32 frame_size,
VABufferID *coded_buf)
{
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(encoder);
GstBuffer *ret_buffer;
guint32 nal_size;
const guint8 *nal_start;
}
static EncoderStatus
-h264_encoder_read_sps_pps(GstH264EncoderPrivate *h264_prv, const guint8 *buf, guint32 size)
+h264_encoder_read_sps_pps(GstVaapiEncoderH264Private *h264_prv, const guint8 *buf, guint32 size)
{
const guint8 *end = buf + size;
const guint8 *nal_start = buf;
static void
gst_h264_notify_frame(GstVaapiBaseEncoder *encoder, guint8 *buf, guint32 size)
{
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(encoder);
if (!h264_prv->sps_data || !h264_prv->pps_data) {
h264_encoder_read_sps_pps(h264_prv, buf, size);
}
static EncoderStatus
-gst_h264_encoder_flush(GstVaapiEncoder* encoder, GstVaapiDisplay *display,
+gst_vaapi_encoder_h264_flush(GstVaapiEncoder* encoder, GstVaapiDisplay *display,
GstVaapiContext *context, GList **coded_pics)
{
- GstH264Encoder* h264_encoder = GST_H264_ENCODER(encoder);
+ GstVaapiEncoderH264* h264_encoder = GST_VAAPI_ENCODER_H264(encoder);
EncoderStatus ret = ENCODER_NO_ERROR;
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(h264_encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(h264_encoder);
//h264_prv->frame_count = 0;
h264_prv->cur_display_num = 0;
if (!g_thread_supported ())
g_thread_init (NULL);
- GstH264Encoder *h264_encoder = gst_h264_encoder_new();
+ GstVaapiEncoderH264 *h264_encoder = gst_vaapi_encoder_h264_new();
encoder = GST_VAAPI_ENCODER(h264_encoder);
ENCODER_ASSERT(encoder);
}
EncoderStatus
-gst_h264_encoder_get_avcC_codec_data(GstH264Encoder *h264_encoder, GstBuffer **buffer)
+gst_vaapi_encoder_h264_get_avcC_codec_data(GstVaapiEncoderH264 *h264_encoder, GstBuffer **buffer)
{
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(h264_encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(h264_encoder);
GstBuffer *avc_codec;
const guint32 configuration_version = 0x01;
const guint32 length_size_minus_one = 0x03;
}
static EncoderStatus
-gst_h264_encoder_get_codec_data(GstVaapiEncoder* encoder, GstBuffer **buffer)
+gst_vaapi_encoder_h264_get_codec_data(GstVaapiEncoder* encoder, GstBuffer **buffer)
{
- GstH264Encoder *h264_encoder = GST_H264_ENCODER(encoder);
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(h264_encoder);
+ GstVaapiEncoderH264 *h264_encoder = GST_VAAPI_ENCODER_H264(encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(h264_encoder);
if (h264_prv->avc_flag)
- return gst_h264_encoder_get_avcC_codec_data(h264_encoder, buffer);
+ return gst_vaapi_encoder_h264_get_avcC_codec_data(h264_encoder, buffer);
return ENCODER_NO_DATA;
}
#if 0
EncoderStatus
-gst_h264_encoder_get_nal_codec_data(GstVaapiEncoder *encoder, GstBuffer **buffer)
+gst_vaapi_encoder_h264_get_nal_codec_data(GstVaapiEncoder *encoder, GstBuffer **buffer)
{
- GstH264Encoder *h264_encoder = GST_H264_ENCODER(encoder);
- GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(h264_encoder);
+ GstVaapiEncoderH264 *h264_encoder = GST_VAAPI_ENCODER_H264(encoder);
+ GstVaapiEncoderH264Private *h264_prv = GST_VAAPI_ENCODER_H264_GET_PRIVATE(h264_encoder);
GstBuffer *nal_sps_pps;
ENCODER_ASSERT(buffer);