diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/msdk/gstmsdkh264enc.c | 21 | ||||
-rw-r--r-- | sys/msdk/gstmsdkh264enc.h | 1 |
2 files changed, 19 insertions, 3 deletions
diff --git a/sys/msdk/gstmsdkh264enc.c b/sys/msdk/gstmsdkh264enc.c index 299e26b2c..a3dd7bb3d 100644 --- a/sys/msdk/gstmsdkh264enc.c +++ b/sys/msdk/gstmsdkh264enc.c @@ -48,6 +48,7 @@ enum PROP_FRAME_PACKING, PROP_RC_LA_DOWNSAMPLING, PROP_TRELLIS, + PROP_MAX_SLICE_SIZE, }; #define PROP_CABAC_DEFAULT TRUE @@ -55,6 +56,7 @@ enum #define PROP_FRAME_PACKING_DEFAULT -1 #define PROP_RC_LA_DOWNSAMPLING_DEFAULT MFX_LOOKAHEAD_DS_UNKNOWN #define PROP_TRELLIS_DEFAULT _MFX_TRELLIS_NONE +#define PROP_MAX_SLICE_SIZE_DEFAULT 0 static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, @@ -285,14 +287,14 @@ gst_msdkh264enc_configure (GstMsdkEnc * encoder) gst_msdkenc_add_extra_param (encoder, (mfxExtBuffer *) & thiz->option); + encoder->enable_extopt2 = TRUE; + encoder->option2.Trellis = thiz->trellis ? thiz->trellis : MFX_TRELLIS_OFF; + encoder->option2.MaxSliceSize = thiz->max_slice_size; if (encoder->rate_control == MFX_RATECONTROL_LA || encoder->rate_control == MFX_RATECONTROL_LA_HRD || encoder->rate_control == MFX_RATECONTROL_LA_ICQ) encoder->option2.LookAheadDS = thiz->lookahead_ds; - encoder->option2.Trellis = thiz->trellis ? thiz->trellis : MFX_TRELLIS_OFF; - encoder->enable_extopt2 = TRUE; - return TRUE; } @@ -414,6 +416,9 @@ gst_msdkh264enc_set_property (GObject * object, guint prop_id, case PROP_TRELLIS: thiz->trellis = g_value_get_flags (value); break; + case PROP_MAX_SLICE_SIZE: + thiz->max_slice_size = g_value_get_uint (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -448,6 +453,9 @@ gst_msdkh264enc_get_property (GObject * object, guint prop_id, GValue * value, case PROP_TRELLIS: g_value_set_flags (value, thiz->trellis); break; + case PROP_MAX_SLICE_SIZE: + g_value_set_uint (value, thiz->max_slice_size); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -506,6 +514,12 @@ gst_msdkh264enc_class_init (GstMsdkH264EncClass * klass) gst_msdkenc_trellis_quantization_get_type (), _MFX_TRELLIS_NONE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_MAX_SLICE_SIZE, + g_param_spec_uint ("max-slice-size", "Max Slice Size", + "Maximum slice size in bytes (if enabled MSDK will ignore the control over num-slices)", + 0, G_MAXUINT32, PROP_MAX_SLICE_SIZE_DEFAULT, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + gst_element_class_set_static_metadata (element_class, "Intel MSDK H264 encoder", "Codec/Encoder/Video", "H264 video encoder based on Intel Media SDK", @@ -521,4 +535,5 @@ gst_msdkh264enc_init (GstMsdkH264Enc * thiz) thiz->frame_packing = PROP_FRAME_PACKING_DEFAULT; thiz->lookahead_ds = PROP_RC_LA_DOWNSAMPLING_DEFAULT; thiz->trellis = PROP_TRELLIS_DEFAULT; + thiz->max_slice_size = PROP_MAX_SLICE_SIZE_DEFAULT; } diff --git a/sys/msdk/gstmsdkh264enc.h b/sys/msdk/gstmsdkh264enc.h index dd8300b93..b32ed56ac 100644 --- a/sys/msdk/gstmsdkh264enc.h +++ b/sys/msdk/gstmsdkh264enc.h @@ -64,6 +64,7 @@ struct _GstMsdkH264Enc gint frame_packing; guint lookahead_ds; guint trellis; + guint max_slice_size; }; struct _GstMsdkH264EncClass |