openh264enc: Make slice settings more explicit and don't set any number if not a fixed number of slices is selected

This commit is contained in:
Sebastian Dröge 2016-06-30 23:02:49 +02:00
parent 71c9cdeff4
commit 4cba0d5fab

View File

@ -105,7 +105,7 @@ static GType
gst_openh264enc_slice_mode_get_type (void) gst_openh264enc_slice_mode_get_type (void)
{ {
static const GEnumValue types[] = { 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"}, {SM_AUTO_SLICE, "Number of slices equal to number of threads", "auto"},
{0, NULL, NULL}, {0, NULL, NULL},
}; };
@ -680,9 +680,16 @@ gst_openh264enc_set_format (GstVideoEncoder * encoder,
enc_params.sSpatialLayers[0].iVideoHeight = height; enc_params.sSpatialLayers[0].iVideoHeight = height;
enc_params.sSpatialLayers[0].fFrameRate = fps_n * 1.0 / fps_d; enc_params.sSpatialLayers[0].fFrameRate = fps_n * 1.0 / fps_d;
enc_params.sSpatialLayers[0].iSpatialBitrate = openh264enc->bitrate; enc_params.sSpatialLayers[0].iSpatialBitrate = openh264enc->bitrate;
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; enc_params.sSpatialLayers[0].sSliceCfg.uiSliceMode = openh264enc->slice_mode;
enc_params.sSpatialLayers[0].sSliceCfg.sSliceArgument.uiSliceNum = }
openh264enc->num_slices;
openh264enc->framerate = (1 + fps_n / fps_d); openh264enc->framerate = (1 + fps_n / fps_d);