From e8e2b6ed481f31fad9d8c713babb8a3e6713761b Mon Sep 17 00:00:00 2001 From: Wind Yuan Date: Thu, 18 Oct 2012 17:58:04 +0800 Subject: [PATCH] encoder: PVR only need seq paramerter set once --- gst-libs/gst/vaapi/gstvaapiencoder_h264.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gst-libs/gst/vaapi/gstvaapiencoder_h264.c b/gst-libs/gst/vaapi/gstvaapiencoder_h264.c index dc787b6..93779e7 100644 --- a/gst-libs/gst/vaapi/gstvaapiencoder_h264.c +++ b/gst-libs/gst/vaapi/gstvaapiencoder_h264.c @@ -106,6 +106,7 @@ struct _GstVaapiEncoderH264Private { VABufferID packed_seq_data_id; VABufferID packed_pic_param_id; VABufferID packed_pic_data_id; + gboolean is_seq_param_set; #if HAVE_OLD_H264_ENCODER VAEncSliceParameterBuffer *slice_param_buffers; #else @@ -423,6 +424,7 @@ gst_vaapi_encoder_h264_release_resource( priv->gop_count = 0; priv->last_decode_time = 0LL; priv->default_cts_offset = 0; + priv->is_seq_param_set = FALSE; /*remove ref_surface1*/ if (priv->ref_surface1) { @@ -1205,7 +1207,14 @@ gst_vaapi_encoder_h264_rendering( /*render all buffers*/ if (VA_INVALID_ID != priv->seq_param_id) { + #if HAVE_OLD_H264_ENCODER + if (!priv->is_seq_param_set) { + priv->is_seq_param_set = TRUE; + va_buffers[va_buffers_count++] = priv->seq_param_id; + } + #else va_buffers[va_buffers_count++] = priv->seq_param_id; + #endif } if (VA_INVALID_ID != priv->pic_param_id) { va_buffers[va_buffers_count++] = priv->pic_param_id; @@ -1558,6 +1567,7 @@ gst_vaapi_encoder_h264_init(GstVaapiEncoderH264 *encoder) priv->packed_seq_data_id = VA_INVALID_ID; priv->packed_pic_param_id = VA_INVALID_ID; priv->packed_pic_data_id = VA_INVALID_ID; + priv->is_seq_param_set = FALSE; priv->slice_param_buffers = NULL; priv->default_slice_height = 0; priv->slice_mod_mb_num = 0; -- 2.7.4