From 84e234a8c7a0210f50ba6126f75e23926ef52df5 Mon Sep 17 00:00:00 2001 From: Haihao Xiang Date: Tue, 3 Dec 2019 10:48:21 +0800 Subject: [PATCH] msdkenc: add set_extra_params virtual method set_extra_params is added to allow sub class to add extra mfx parameters for changed input frame or meta data --- sys/msdk/gstmsdkenc.c | 9 +++++++++ sys/msdk/gstmsdkenc.h | 3 +++ 2 files changed, 12 insertions(+) diff --git a/sys/msdk/gstmsdkenc.c b/sys/msdk/gstmsdkenc.c index 74b7ecce17..9e9fc54701 100644 --- a/sys/msdk/gstmsdkenc.c +++ b/sys/msdk/gstmsdkenc.c @@ -1383,6 +1383,8 @@ gst_msdkenc_handle_frame (GstVideoEncoder * encoder, GstVideoCodecFrame * frame) gst_msdkenc_flush_frames (thiz, FALSE); gst_msdkenc_close_encoder (thiz); + klass->set_extra_params (thiz, frame); + // This will reinitialized the encoder but keep same input format. gst_msdkenc_set_format (encoder, NULL); } @@ -1683,6 +1685,12 @@ gst_msdkenc_need_reconfig (GstMsdkEnc * encoder, GstVideoCodecFrame * frame) return FALSE; } +static void +gst_msdkenc_set_extra_params (GstMsdkEnc * encoder, GstVideoCodecFrame * frame) +{ + /* Do nothing */ +} + static void gst_msdkenc_class_init (GstMsdkEncClass * klass) { @@ -1696,6 +1704,7 @@ gst_msdkenc_class_init (GstMsdkEncClass * klass) klass->need_conversion = gst_msdkenc_need_conversion; klass->need_reconfig = gst_msdkenc_need_reconfig; + klass->set_extra_params = gst_msdkenc_set_extra_params; gobject_class->finalize = gst_msdkenc_finalize; diff --git a/sys/msdk/gstmsdkenc.h b/sys/msdk/gstmsdkenc.h index e209720bda..bce81394d6 100644 --- a/sys/msdk/gstmsdkenc.h +++ b/sys/msdk/gstmsdkenc.h @@ -177,6 +177,9 @@ struct _GstMsdkEncClass /* Return TRUE if sub class requires a recofnig */ gboolean (*need_reconfig) (GstMsdkEnc * encoder, GstVideoCodecFrame * frame); + + /* Allow sub class set extra frame parameters */ + void (*set_extra_params) (GstMsdkEnc * encoder, GstVideoCodecFrame * frame); }; struct _MsdkEncTask