encoder: h264: fix ip_period value in sequence parameter.
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>
Tue, 21 Jan 2014 16:35:24 +0000 (17:35 +0100)
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>
Wed, 22 Jan 2014 17:30:26 +0000 (18:30 +0100)
The VAEncSequenceParameterBuffer.ip_period value reprents the distance
between the I-frame and the next P-frame. So, this also accounts for
any additional B-frame in the middle of it.

This fixes rate control heuristics for certain VA drivers.

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

gst-libs/gst/vaapi/gstvaapiencoder_h264.c

index e8008f4f7f4dfdfa1bcffe422f37cb8f720e962f..1fc440e7240ec977463075b454ec724ee62563d0 100644 (file)
@@ -1080,7 +1080,7 @@ fill_sequence (GstVaapiEncoderH264 * encoder, GstVaapiEncSequence * sequence)
   seq_param->seq_parameter_set_id = 0;
   seq_param->level_idc = encoder->level_idc;
   seq_param->intra_period = GST_VAAPI_ENCODER_KEYFRAME_PERIOD (encoder);
-  seq_param->ip_period = 0;     // ?
+  seq_param->ip_period = 1 + encoder->num_bframes;
   if (base_encoder->bitrate > 0)
     seq_param->bits_per_second = base_encoder->bitrate * 1000;
   else