mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 09:10:36 +00:00
msdkdec: allow sub class to add extra parameters for additional configuration
MSDK allows user add extended buffers to a bitstream for additional configuration. This commit is to support this feature in this plugin Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/909>
This commit is contained in:
parent
957034d71a
commit
b6eca79557
2 changed files with 24 additions and 0 deletions
|
@ -83,6 +83,15 @@ static gboolean gst_msdkdec_drain (GstVideoDecoder * decoder);
|
||||||
static gboolean gst_msdkdec_flush (GstVideoDecoder * decoder);
|
static gboolean gst_msdkdec_flush (GstVideoDecoder * decoder);
|
||||||
static gboolean gst_msdkdec_negotiate (GstMsdkDec * thiz, gboolean hard_reset);
|
static gboolean gst_msdkdec_negotiate (GstMsdkDec * thiz, gboolean hard_reset);
|
||||||
|
|
||||||
|
void
|
||||||
|
gst_msdkdec_add_bs_extra_param (GstMsdkDec * thiz, mfxExtBuffer * param)
|
||||||
|
{
|
||||||
|
if (thiz->num_bs_extra_params < MAX_BS_EXTRA_PARAMS) {
|
||||||
|
thiz->bs_extra_params[thiz->num_bs_extra_params] = param;
|
||||||
|
thiz->num_bs_extra_params++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static GstVideoCodecFrame *
|
static GstVideoCodecFrame *
|
||||||
gst_msdkdec_get_oldest_frame (GstVideoDecoder * decoder)
|
gst_msdkdec_get_oldest_frame (GstVideoDecoder * decoder)
|
||||||
{
|
{
|
||||||
|
@ -288,6 +297,7 @@ gst_msdkdec_close_decoder (GstMsdkDec * thiz, gboolean reset_param)
|
||||||
if (reset_param)
|
if (reset_param)
|
||||||
memset (&thiz->param, 0, sizeof (thiz->param));
|
memset (&thiz->param, 0, sizeof (thiz->param));
|
||||||
|
|
||||||
|
thiz->num_bs_extra_params = 0;
|
||||||
thiz->initialized = FALSE;
|
thiz->initialized = FALSE;
|
||||||
gst_adapter_clear (thiz->adapter);
|
gst_adapter_clear (thiz->adapter);
|
||||||
}
|
}
|
||||||
|
@ -1034,6 +1044,12 @@ gst_msdkdec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame)
|
||||||
|
|
||||||
memset (&bitstream, 0, sizeof (bitstream));
|
memset (&bitstream, 0, sizeof (bitstream));
|
||||||
|
|
||||||
|
/* Add extended buffers */
|
||||||
|
if (thiz->num_bs_extra_params) {
|
||||||
|
bitstream.NumExtParam = thiz->num_bs_extra_params;
|
||||||
|
bitstream.ExtParam = thiz->bs_extra_params;
|
||||||
|
}
|
||||||
|
|
||||||
if (gst_video_decoder_get_packetized (decoder)) {
|
if (gst_video_decoder_get_packetized (decoder)) {
|
||||||
/* Packetized stream: we prefer to have a parser as a connected upstream
|
/* Packetized stream: we prefer to have a parser as a connected upstream
|
||||||
* element to the decoder */
|
* element to the decoder */
|
||||||
|
|
|
@ -54,6 +54,8 @@ G_BEGIN_DECLS
|
||||||
#define GST_IS_MSDKDEC_CLASS(klass) \
|
#define GST_IS_MSDKDEC_CLASS(klass) \
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MSDKDEC))
|
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MSDKDEC))
|
||||||
|
|
||||||
|
#define MAX_BS_EXTRA_PARAMS 8
|
||||||
|
|
||||||
typedef struct _GstMsdkDec GstMsdkDec;
|
typedef struct _GstMsdkDec GstMsdkDec;
|
||||||
typedef struct _GstMsdkDecClass GstMsdkDecClass;
|
typedef struct _GstMsdkDecClass GstMsdkDecClass;
|
||||||
typedef struct _MsdkDecTask MsdkDecTask;
|
typedef struct _MsdkDecTask MsdkDecTask;
|
||||||
|
@ -98,6 +100,9 @@ struct _GstMsdkDec
|
||||||
/* element properties */
|
/* element properties */
|
||||||
gboolean hardware;
|
gboolean hardware;
|
||||||
guint async_depth;
|
guint async_depth;
|
||||||
|
|
||||||
|
mfxExtBuffer *bs_extra_params[MAX_BS_EXTRA_PARAMS];
|
||||||
|
guint num_bs_extra_params;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstMsdkDecClass
|
struct _GstMsdkDecClass
|
||||||
|
@ -117,6 +122,9 @@ struct _GstMsdkDecClass
|
||||||
|
|
||||||
GType gst_msdkdec_get_type (void);
|
GType gst_msdkdec_get_type (void);
|
||||||
|
|
||||||
|
void
|
||||||
|
gst_msdkdec_add_bs_extra_param (GstMsdkDec * thiz, mfxExtBuffer * param);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GST_MSDKDEC_H__ */
|
#endif /* __GST_MSDKDEC_H__ */
|
||||||
|
|
Loading…
Reference in a new issue