openh264enc: Make slice settings more explicit and don't set any number if not a...
authorSebastian Dröge <sebastian@centricular.com>
Thu, 30 Jun 2016 21:02:49 +0000 (23:02 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 30 Jun 2016 21:30:13 +0000 (23:30 +0200)
ext/openh264/gstopenh264enc.cpp

index 2951537..1d7cea5 100644 (file)
@@ -105,7 +105,7 @@ static GType
 gst_openh264enc_slice_mode_get_type (void)
 {
   static const GEnumValue types[] = {
-    {SM_FIXEDSLCNUM_SLICE, "num-slices slices", "n-slices"},
+    {SM_FIXEDSLCNUM_SLICE, "Fixed number of slices", "n-slices"},
     {SM_AUTO_SLICE, "Number of slices equal to number of threads", "auto"},
     {0, NULL, NULL},
   };
@@ -680,9 +680,16 @@ gst_openh264enc_set_format (GstVideoEncoder * encoder,
   enc_params.sSpatialLayers[0].iVideoHeight = height;
   enc_params.sSpatialLayers[0].fFrameRate = fps_n * 1.0 / fps_d;
   enc_params.sSpatialLayers[0].iSpatialBitrate = openh264enc->bitrate;
-  enc_params.sSpatialLayers[0].sSliceCfg.uiSliceMode = openh264enc->slice_mode;
-  enc_params.sSpatialLayers[0].sSliceCfg.sSliceArgument.uiSliceNum =
-      openh264enc->num_slices;
+
+  if (openh264enc->slice_mode == SM_FIXEDSLCNUM_SLICE) {
+    if (openh264enc->num_slices == 1)
+      enc_params.sSpatialLayers[0].sSliceCfg.uiSliceMode = SM_SINGLE_SLICE;
+    else
+      enc_params.sSpatialLayers[0].sSliceCfg.uiSliceMode = SM_FIXEDSLCNUM_SLICE;
+    enc_params.sSpatialLayers[0].sSliceCfg.sSliceArgument.uiSliceNum = openh264enc->num_slices;
+  } else {
+    enc_params.sSpatialLayers[0].sSliceCfg.uiSliceMode = openh264enc->slice_mode;
+  }
 
   openh264enc->framerate = (1 + fps_n / fps_d);