encoder: PVR only need seq paramerter set once
authorWind Yuan <feng.yuan@intel.com>
Thu, 18 Oct 2012 09:58:04 +0000 (17:58 +0800)
committerZhong Cong <congx.zhong@intel.com>
Tue, 5 Feb 2013 07:37:12 +0000 (15:37 +0800)
gst-libs/gst/vaapi/gstvaapiencoder_h264.c

index dc787b6..93779e7 100644 (file)
@@ -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;