openh264: add "qp-min" and "qp-max" properties

This commit is contained in:
Tim-Philipp Müller 2017-01-24 14:39:35 +00:00
parent a68f961908
commit 538c4456aa
2 changed files with 36 additions and 0 deletions

View file

@ -180,6 +180,8 @@ static void gst_openh264enc_set_rate_control (GstOpenh264Enc * openh264enc,
#define DEFAULT_SLICE_MODE GST_OPENH264_SLICE_MODE_N_SLICES #define DEFAULT_SLICE_MODE GST_OPENH264_SLICE_MODE_N_SLICES
#define DEFAULT_NUM_SLICES 1 #define DEFAULT_NUM_SLICES 1
#define DEFAULT_COMPLEXITY MEDIUM_COMPLEXITY #define DEFAULT_COMPLEXITY MEDIUM_COMPLEXITY
#define DEFAULT_QP_MIN 0
#define DEFAULT_QP_MAX 51
enum enum
{ {
@ -200,6 +202,8 @@ enum
PROP_SLICE_MODE, PROP_SLICE_MODE,
PROP_NUM_SLICES, PROP_NUM_SLICES,
PROP_COMPLEXITY, PROP_COMPLEXITY,
PROP_QP_MIN,
PROP_QP_MAX,
N_PROPERTIES N_PROPERTIES
}; };
@ -299,6 +303,16 @@ gst_openh264enc_class_init (GstOpenh264EncClass * klass)
0, G_MAXUINT, DEFAULT_MAX_BITRATE, 0, G_MAXUINT, DEFAULT_MAX_BITRATE,
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
g_object_class_install_property (gobject_class, PROP_QP_MIN,
g_param_spec_uint ("qp-min", "Minimum Quantizer",
"Minimum quantizer", 0, 51, DEFAULT_QP_MIN,
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
g_object_class_install_property (gobject_class, PROP_QP_MAX,
g_param_spec_uint ("qp-max", "Maximum Quantizer",
"Maximum quantizer", 0, 51, DEFAULT_QP_MAX,
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
g_object_class_install_property (gobject_class, PROP_GOP_SIZE, g_object_class_install_property (gobject_class, PROP_GOP_SIZE,
g_param_spec_uint ("gop-size", "GOP size", g_param_spec_uint ("gop-size", "GOP size",
"Number of frames between intra frames", "Number of frames between intra frames",
@ -360,6 +374,8 @@ gst_openh264enc_init (GstOpenh264Enc * openh264enc)
openh264enc->max_slice_size = DEFAULT_MAX_SLICE_SIZE; openh264enc->max_slice_size = DEFAULT_MAX_SLICE_SIZE;
openh264enc->bitrate = DEFAULT_BITRATE; openh264enc->bitrate = DEFAULT_BITRATE;
openh264enc->max_bitrate = DEFAULT_MAX_BITRATE; openh264enc->max_bitrate = DEFAULT_MAX_BITRATE;
openh264enc->qp_min = DEFAULT_QP_MIN;
openh264enc->qp_max = DEFAULT_QP_MAX;
openh264enc->framerate = START_FRAMERATE; openh264enc->framerate = START_FRAMERATE;
openh264enc->input_state = NULL; openh264enc->input_state = NULL;
openh264enc->time_per_frame = GST_SECOND / openh264enc->framerate; openh264enc->time_per_frame = GST_SECOND / openh264enc->framerate;
@ -432,6 +448,14 @@ gst_openh264enc_set_property (GObject * object, guint property_id,
openh264enc->max_bitrate = g_value_get_uint (value); openh264enc->max_bitrate = g_value_get_uint (value);
break; break;
case PROP_QP_MIN:
openh264enc->qp_min = g_value_get_uint (value);
break;
case PROP_QP_MAX:
openh264enc->qp_max = g_value_get_uint (value);
break;
case PROP_MULTI_THREAD: case PROP_MULTI_THREAD:
openh264enc->multi_thread = g_value_get_uint (value); openh264enc->multi_thread = g_value_get_uint (value);
break; break;
@ -520,6 +544,14 @@ gst_openh264enc_get_property (GObject * object, guint property_id,
g_value_set_uint (value, openh264enc->max_bitrate); g_value_set_uint (value, openh264enc->max_bitrate);
break; break;
case PROP_QP_MIN:
g_value_set_uint (value, openh264enc->qp_min);
break;
case PROP_QP_MAX:
g_value_set_uint (value, openh264enc->qp_max);
break;
case PROP_ENABLE_DENOISE: case PROP_ENABLE_DENOISE:
g_value_set_boolean (value, openh264enc->enable_denoise); g_value_set_boolean (value, openh264enc->enable_denoise);
break; break;
@ -674,6 +706,8 @@ gst_openh264enc_set_format (GstVideoEncoder * encoder,
enc_params.iPicHeight = height; enc_params.iPicHeight = height;
enc_params.iTargetBitrate = openh264enc->bitrate; enc_params.iTargetBitrate = openh264enc->bitrate;
enc_params.iMaxBitrate = openh264enc->max_bitrate; enc_params.iMaxBitrate = openh264enc->max_bitrate;
enc_params.iMaxQp = openh264enc->qp_max;
enc_params.iMinQp = openh264enc->qp_min;
enc_params.iRCMode = openh264enc->rate_control; enc_params.iRCMode = openh264enc->rate_control;
enc_params.iTemporalLayerNum = 1; enc_params.iTemporalLayerNum = 1;
enc_params.iSpatialLayerNum = 1; enc_params.iSpatialLayerNum = 1;

View file

@ -74,6 +74,8 @@ struct _GstOpenh264Enc
guint max_slice_size; guint max_slice_size;
guint bitrate; guint bitrate;
guint max_bitrate; guint max_bitrate;
guint qp_min;
guint qp_max;
guint framerate; guint framerate;
guint multi_thread; guint multi_thread;
gboolean enable_denoise; gboolean enable_denoise;