libs: encoder: vp8,h264,h265,mpeg2: set misc param once
authorVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Mon, 5 Jun 2017 18:30:07 +0000 (20:30 +0200)
committerVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Wed, 7 Jun 2017 09:24:38 +0000 (11:24 +0200)
Instead of recalculating the miscellaneous buffer parameters for
every buffer, it is only done once, when the encoder is configured.
And for every buffer, the same structures are just copied.

https://bugzilla.gnome.org/show_bug.cgi?id=783449

gst-libs/gst/vaapi/gstvaapiencoder_h264.c
gst-libs/gst/vaapi/gstvaapiencoder_h265.c
gst-libs/gst/vaapi/gstvaapiencoder_mpeg2.c
gst-libs/gst/vaapi/gstvaapiencoder_vp8.c

index 14bb076207292150973b3a4de464c8790d5acf88..6ffbd966238a32119516b32b720eedb38e7ed3a8 100644 (file)
@@ -2154,11 +2154,8 @@ error_create_packed_seq_hdr:
 }
 
 static gboolean
-ensure_control_rate_params (GstVaapiEncoderH264 * encoder,
-    GstVaapiEncPicture * picture)
+ensure_control_rate_params (GstVaapiEncoderH264 * encoder)
 {
-  GstVaapiEncoder *const base_encoder = GST_VAAPI_ENCODER_CAST (encoder);
-
   if (GST_VAAPI_ENCODER_RATE_CONTROL (encoder) == GST_VAAPI_RATECONTROL_CQP)
     return TRUE;
 
@@ -2176,7 +2173,7 @@ ensure_control_rate_params (GstVaapiEncoderH264 * encoder,
   fill_hrd_params (encoder, &GST_VAAPI_ENCODER_VA_HRD (encoder));
   /* *INDENT-ON* */
 
-  return gst_vaapi_encoder_ensure_param_control_rate (base_encoder, picture);
+  return TRUE;
 }
 
 /* Generates additional control parameters */
@@ -2187,7 +2184,7 @@ ensure_misc_params (GstVaapiEncoderH264 * encoder, GstVaapiEncPicture * picture)
   GstVaapiEncMiscParam *misc;
   guint num_roi;
 
-  if (!ensure_control_rate_params (encoder, picture))
+  if (!gst_vaapi_encoder_ensure_param_control_rate (base_encoder, picture))
     return FALSE;
 
   if (GST_VAAPI_ENCODER_RATE_CONTROL (encoder) == GST_VAAPI_RATECONTROL_CBR ||
@@ -2848,6 +2845,7 @@ gst_vaapi_encoder_h264_reconfigure (GstVaapiEncoder * base_encoder)
     return status;
 
   reset_properties (encoder);
+  ensure_control_rate_params (encoder);
   return set_context_info (base_encoder);
 }
 
index 9513f5c8744de0c3927c108f56117a6bb7db2a05..e8bc289d99c4031c16af33f8c85fb23aaa8884cf 100644 (file)
@@ -1766,18 +1766,15 @@ error_create_packed_seq_hdr:
 }
 
 static gboolean
-ensure_control_rate_params (GstVaapiEncoderH265 * encoder,
-    GstVaapiEncPicture * picture)
+ensure_control_rate_params (GstVaapiEncoderH265 * encoder)
 {
-  GstVaapiEncoder *const base_encoder = GST_VAAPI_ENCODER_CAST (encoder);
-
   if (GST_VAAPI_ENCODER_RATE_CONTROL (encoder) == GST_VAAPI_RATECONTROL_CQP)
     return TRUE;
 
   /* HRD params */
   fill_hrd_params (encoder, &GST_VAAPI_ENCODER_VA_HRD (encoder));
 
-  return gst_vaapi_encoder_ensure_param_control_rate (base_encoder, picture);
+  return TRUE;
 }
 
 static gboolean
@@ -1785,7 +1782,7 @@ ensure_misc_params (GstVaapiEncoderH265 * encoder, GstVaapiEncPicture * picture)
 {
   GstVaapiEncoder *const base_encoder = GST_VAAPI_ENCODER_CAST (encoder);
 
-  if (!ensure_control_rate_params (encoder, picture))
+  if (!gst_vaapi_encoder_ensure_param_control_rate (base_encoder, picture))
     return FALSE;
   if (!gst_vaapi_encoder_ensure_param_quality_level (base_encoder, picture))
     return FALSE;
@@ -2413,6 +2410,7 @@ gst_vaapi_encoder_h265_reconfigure (GstVaapiEncoder * base_encoder)
     return status;
 
   reset_properties (encoder);
+  ensure_control_rate_params (encoder);
   return set_context_info (base_encoder);
 }
 
index e80443a7fd715d0fe556ae1de142642537464571..2c284ee4b52e1fa5e014595aa39243767a8c6611 100644 (file)
@@ -452,8 +452,7 @@ ensure_picture (GstVaapiEncoderMpeg2 * encoder, GstVaapiEncPicture * picture,
 }
 
 static gboolean
-ensure_control_rate_params (GstVaapiEncoderMpeg2 * encoder,
-    GstVaapiEncPicture * picture)
+ensure_control_rate_params (GstVaapiEncoderMpeg2 * encoder)
 {
   GstVaapiEncoder *const base_encoder = GST_VAAPI_ENCODER_CAST (encoder);
 
@@ -476,7 +475,7 @@ ensure_control_rate_params (GstVaapiEncoderMpeg2 * encoder,
   };
   /* *INDENT-ON* */
 
-  return gst_vaapi_encoder_ensure_param_control_rate (base_encoder, picture);
+  return TRUE;
 }
 
 static gboolean
@@ -485,7 +484,7 @@ set_misc_parameters (GstVaapiEncoderMpeg2 * encoder,
 {
   GstVaapiEncoder *const base_encoder = GST_VAAPI_ENCODER_CAST (encoder);
 
-  if (!ensure_control_rate_params (encoder, picture))
+  if (!gst_vaapi_encoder_ensure_param_control_rate (base_encoder, picture))
     return FALSE;
   if (!gst_vaapi_encoder_ensure_param_quality_level (base_encoder, picture))
     return FALSE;
@@ -713,6 +712,7 @@ gst_vaapi_encoder_mpeg2_reconfigure (GstVaapiEncoder * base_encoder)
 
   if (!ensure_bitrate (encoder))
     goto error;
+  ensure_control_rate_params (encoder);
   return set_context_info (base_encoder);
 
   /* ERRORS */
index 11f6449212e526eacd3ab3526cd4dd26fe33bbaf..3aa46e7a3163d71fac3fcb7878ffc4e87fb41766 100644 (file)
@@ -258,8 +258,7 @@ error:
 }
 
 static gboolean
-ensure_control_rate_params (GstVaapiEncoderVP8 * encoder,
-    GstVaapiEncPicture * picture)
+ensure_control_rate_params (GstVaapiEncoderVP8 * encoder)
 {
   GstVaapiEncoder *const base_encoder = GST_VAAPI_ENCODER_CAST (encoder);
 
@@ -291,7 +290,7 @@ ensure_control_rate_params (GstVaapiEncoderVP8 * encoder,
   };
   /* *INDENT-ON* */
 
-  return gst_vaapi_encoder_ensure_param_control_rate (base_encoder, picture);
+  return TRUE;
 }
 
 static gboolean
@@ -302,7 +301,7 @@ ensure_misc_params (GstVaapiEncoderVP8 * encoder, GstVaapiEncPicture * picture)
   if (!gst_vaapi_encoder_ensure_param_quality_level (base_encoder, picture))
     return FALSE;
 
-  if (!ensure_control_rate_params (encoder, picture))
+  if (!gst_vaapi_encoder_ensure_param_control_rate (base_encoder, picture))
     return FALSE;
 
   return TRUE;
@@ -510,6 +509,7 @@ gst_vaapi_encoder_vp8_reconfigure (GstVaapiEncoder * base_encoder)
   if (!ensure_bitrate (encoder))
     goto error;
 
+  ensure_control_rate_params (encoder);
   return set_context_info (base_encoder);
 
   /* ERRORS */