mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-12 01:05:47 +00:00
v4l2codecs: Remove uneeded per-codec abstract class
That subclass was not needed and was causing issues wit doc generation. The only down side of removing it is that the decoder cast macro is no longer type safe. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5555>
This commit is contained in:
parent
2197627336
commit
3645f050af
9 changed files with 100 additions and 182 deletions
|
@ -232,8 +232,15 @@ gst_v4l2_codec_alpha_decode_bin_register (GstPlugin * plugin,
|
||||||
{
|
{
|
||||||
/* TODO check that we have compatible src format */
|
/* TODO check that we have compatible src format */
|
||||||
|
|
||||||
gst_v4l2_decoder_register (plugin,
|
GTypeInfo type_info = {
|
||||||
GST_TYPE_V4L2_CODEC_ALPHA_DECODE_BIN, class_init, class_data, NULL,
|
.class_size = sizeof (GstV4l2CodecAlphaDecodeBinClass),
|
||||||
element_name_tmpl, device,
|
.class_init = class_init,
|
||||||
|
.class_data = class_data,
|
||||||
|
.instance_size = sizeof (GstV4l2CodecAlphaDecodeBin),
|
||||||
|
.instance_init = NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
gst_v4l2_decoder_register (plugin, GST_TYPE_V4L2_CODEC_ALPHA_DECODE_BIN,
|
||||||
|
&type_info, element_name_tmpl, device,
|
||||||
rank + GST_V4L2_CODEC_ALPHA_DECODE_BIN_RANK_OFFSET, NULL);
|
rank + GST_V4L2_CODEC_ALPHA_DECODE_BIN_RANK_OFFSET, NULL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,10 +41,7 @@
|
||||||
GST_DEBUG_CATEGORY_STATIC (v4l2_av1dec_debug);
|
GST_DEBUG_CATEGORY_STATIC (v4l2_av1dec_debug);
|
||||||
#define GST_CAT_DEFAULT v4l2_av1dec_debug
|
#define GST_CAT_DEFAULT v4l2_av1dec_debug
|
||||||
|
|
||||||
#define GST_TYPE_V4L2_CODEC_AV1_DEC \
|
#define GST_V4L2_CODEC_AV1_DEC(obj) ((GstV4l2CodecAV1Dec *) obj)
|
||||||
(gst_v4l2_codec_av1_dec_get_type())
|
|
||||||
#define GST_V4L2_CODEC_AV1_DEC(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_V4L2_CODEC_AV1_DEC,GstV4l2CodecAV1Dec))
|
|
||||||
|
|
||||||
/* Used to mark picture that have been outputted */
|
/* Used to mark picture that have been outputted */
|
||||||
#define FLAG_PICTURE_HOLDS_BUFFER GST_MINI_OBJECT_FLAG_LAST
|
#define FLAG_PICTURE_HOLDS_BUFFER GST_MINI_OBJECT_FLAG_LAST
|
||||||
|
@ -117,12 +114,7 @@ struct _GstV4l2CodecAV1Dec
|
||||||
GstMapInfo bitstream_map;
|
GstMapInfo bitstream_map;
|
||||||
};
|
};
|
||||||
|
|
||||||
static GType gst_v4l2_codec_av1_dec_get_type (void);
|
static GstElementClass *parent_class = NULL;
|
||||||
|
|
||||||
G_DEFINE_ABSTRACT_TYPE (GstV4l2CodecAV1Dec, gst_v4l2_codec_av1_dec,
|
|
||||||
GST_TYPE_AV1_DECODER);
|
|
||||||
|
|
||||||
#define parent_class gst_v4l2_codec_av1_dec_parent_class
|
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
gst_v4l2_codec_av1_dec_ensure_bitstream (GstV4l2CodecAV1Dec * self)
|
gst_v4l2_codec_av1_dec_ensure_bitstream (GstV4l2CodecAV1Dec * self)
|
||||||
|
@ -1537,7 +1529,7 @@ gst_v4l2_codec_av1_dec_dispose (GObject * object)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_v4l2_codec_av1_dec_subclass_init (GstV4l2CodecAV1DecClass * klass,
|
gst_v4l2_codec_av1_dec_class_init (GstV4l2CodecAV1DecClass * klass,
|
||||||
GstV4l2CodecDevice * device)
|
GstV4l2CodecDevice * device)
|
||||||
{
|
{
|
||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
|
@ -1555,6 +1547,8 @@ gst_v4l2_codec_av1_dec_subclass_init (GstV4l2CodecAV1DecClass * klass,
|
||||||
"A V4L2 based AV1 video decoder",
|
"A V4L2 based AV1 video decoder",
|
||||||
"Daniel Almeida <daniel.almeida@collabora.com>");
|
"Daniel Almeida <daniel.almeida@collabora.com>");
|
||||||
|
|
||||||
|
parent_class = g_type_class_peek_parent (klass);
|
||||||
|
|
||||||
gst_element_class_add_static_pad_template (element_class, &sink_template);
|
gst_element_class_add_static_pad_template (element_class, &sink_template);
|
||||||
gst_element_class_add_pad_template (element_class,
|
gst_element_class_add_pad_template (element_class,
|
||||||
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
|
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
|
||||||
|
@ -1596,7 +1590,7 @@ gst_v4l2_codec_av1_dec_subclass_init (GstV4l2CodecAV1DecClass * klass,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_v4l2_codec_av1_dec_subinit (GstV4l2CodecAV1Dec * self,
|
gst_v4l2_codec_av1_dec_init (GstV4l2CodecAV1Dec * self,
|
||||||
GstV4l2CodecAV1DecClass * klass)
|
GstV4l2CodecAV1DecClass * klass)
|
||||||
{
|
{
|
||||||
self->decoder = gst_v4l2_decoder_new (klass->device);
|
self->decoder = gst_v4l2_decoder_new (klass->device);
|
||||||
|
@ -1605,20 +1599,17 @@ gst_v4l2_codec_av1_dec_subinit (GstV4l2CodecAV1Dec * self,
|
||||||
g_array_new (FALSE, TRUE, sizeof (struct v4l2_ctrl_av1_tile_group_entry));
|
g_array_new (FALSE, TRUE, sizeof (struct v4l2_ctrl_av1_tile_group_entry));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
gst_v4l2_codec_av1_dec_class_init (GstV4l2CodecAV1DecClass * klass)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_v4l2_codec_av1_dec_init (GstV4l2CodecAV1Dec * self)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
gst_v4l2_codec_av1_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
gst_v4l2_codec_av1_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
||||||
GstV4l2CodecDevice * device, guint rank)
|
GstV4l2CodecDevice * device, guint rank)
|
||||||
{
|
{
|
||||||
|
GTypeInfo type_info = {
|
||||||
|
.class_size = sizeof (GstV4l2CodecAV1DecClass),
|
||||||
|
.class_init = (GClassInitFunc) gst_v4l2_codec_av1_dec_class_init,
|
||||||
|
.class_data = gst_mini_object_ref (GST_MINI_OBJECT (device)),
|
||||||
|
.instance_size = sizeof (GstV4l2CodecAV1Dec),
|
||||||
|
.instance_init = (GInstanceInitFunc) gst_v4l2_codec_av1_dec_init,
|
||||||
|
};
|
||||||
GstCaps *src_caps = NULL;
|
GstCaps *src_caps = NULL;
|
||||||
guint version;
|
guint version;
|
||||||
|
|
||||||
|
@ -1659,10 +1650,7 @@ gst_v4l2_codec_av1_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
||||||
}
|
}
|
||||||
|
|
||||||
register_element:
|
register_element:
|
||||||
gst_v4l2_decoder_register (plugin, GST_TYPE_V4L2_CODEC_AV1_DEC,
|
gst_v4l2_decoder_register (plugin, GST_TYPE_AV1_DECODER, &type_info,
|
||||||
(GClassInitFunc) gst_v4l2_codec_av1_dec_subclass_init,
|
|
||||||
gst_mini_object_ref (GST_MINI_OBJECT (device)),
|
|
||||||
(GInstanceInitFunc) gst_v4l2_codec_av1_dec_subinit,
|
|
||||||
"v4l2sl%sav1dec", device, rank, NULL);
|
"v4l2sl%sav1dec", device, rank, NULL);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
|
|
@ -39,10 +39,7 @@
|
||||||
GST_DEBUG_CATEGORY_STATIC (v4l2_h264dec_debug);
|
GST_DEBUG_CATEGORY_STATIC (v4l2_h264dec_debug);
|
||||||
#define GST_CAT_DEFAULT v4l2_h264dec_debug
|
#define GST_CAT_DEFAULT v4l2_h264dec_debug
|
||||||
|
|
||||||
#define GST_TYPE_V4L2_CODEC_H264_DEC \
|
#define GST_V4L2_CODEC_H264_DEC(obj) ((GstV4l2CodecH264Dec *) obj);
|
||||||
(gst_v4l2_codec_h264_dec_get_type())
|
|
||||||
#define GST_V4L2_CODEC_H264_DEC(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_V4L2_CODEC_H264_DEC,GstV4l2CodecH264Dec))
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
@ -117,12 +114,7 @@ struct _GstV4l2CodecH264Dec
|
||||||
GstMapInfo bitstream_map;
|
GstMapInfo bitstream_map;
|
||||||
};
|
};
|
||||||
|
|
||||||
static GType gst_v4l2_codec_h264_dec_get_type (void);
|
static GstElementClass *parent_class = NULL;
|
||||||
|
|
||||||
G_DEFINE_ABSTRACT_TYPE (GstV4l2CodecH264Dec, gst_v4l2_codec_h264_dec,
|
|
||||||
GST_TYPE_H264_DECODER);
|
|
||||||
|
|
||||||
#define parent_class gst_v4l2_codec_h264_dec_parent_class
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
is_frame_based (GstV4l2CodecH264Dec * self)
|
is_frame_based (GstV4l2CodecH264Dec * self)
|
||||||
|
@ -1520,12 +1512,7 @@ gst_v4l2_codec_h264_dec_get_property (GObject * object, guint prop_id,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_v4l2_codec_h264_dec_init (GstV4l2CodecH264Dec * self)
|
gst_v4l2_codec_h264_dec_init (GstV4l2CodecH264Dec * self,
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_v4l2_codec_h264_dec_subinit (GstV4l2CodecH264Dec * self,
|
|
||||||
GstV4l2CodecH264DecClass * klass)
|
GstV4l2CodecH264DecClass * klass)
|
||||||
{
|
{
|
||||||
self->decoder = gst_v4l2_decoder_new (klass->device);
|
self->decoder = gst_v4l2_decoder_new (klass->device);
|
||||||
|
@ -1547,12 +1534,7 @@ gst_v4l2_codec_h264_dec_dispose (GObject * object)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_v4l2_codec_h264_dec_class_init (GstV4l2CodecH264DecClass * klass)
|
gst_v4l2_codec_h264_dec_class_init (GstV4l2CodecH264DecClass * klass,
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_v4l2_codec_h264_dec_subclass_init (GstV4l2CodecH264DecClass * klass,
|
|
||||||
GstV4l2CodecDevice * device)
|
GstV4l2CodecDevice * device)
|
||||||
{
|
{
|
||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
|
@ -1570,6 +1552,8 @@ gst_v4l2_codec_h264_dec_subclass_init (GstV4l2CodecH264DecClass * klass,
|
||||||
"A V4L2 based H.264 video decoder",
|
"A V4L2 based H.264 video decoder",
|
||||||
"Nicolas Dufresne <nicolas.dufresne@collabora.com>");
|
"Nicolas Dufresne <nicolas.dufresne@collabora.com>");
|
||||||
|
|
||||||
|
parent_class = g_type_class_peek_parent (klass);
|
||||||
|
|
||||||
gst_element_class_add_static_pad_template (element_class, &sink_template);
|
gst_element_class_add_static_pad_template (element_class, &sink_template);
|
||||||
gst_element_class_add_pad_template (element_class,
|
gst_element_class_add_pad_template (element_class,
|
||||||
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
|
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
|
||||||
|
@ -1612,6 +1596,13 @@ void
|
||||||
gst_v4l2_codec_h264_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
gst_v4l2_codec_h264_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
||||||
GstV4l2CodecDevice * device, guint rank)
|
GstV4l2CodecDevice * device, guint rank)
|
||||||
{
|
{
|
||||||
|
GTypeInfo type_info = {
|
||||||
|
.class_size = sizeof (GstV4l2CodecH264DecClass),
|
||||||
|
.class_init = (GClassInitFunc) gst_v4l2_codec_h264_dec_class_init,
|
||||||
|
.class_data = gst_mini_object_ref (GST_MINI_OBJECT (device)),
|
||||||
|
.instance_size = sizeof (GstV4l2CodecH264Dec),
|
||||||
|
.instance_init = (GInstanceInitFunc) gst_v4l2_codec_h264_dec_init,
|
||||||
|
};
|
||||||
GstCaps *src_caps = NULL;
|
GstCaps *src_caps = NULL;
|
||||||
guint version;
|
guint version;
|
||||||
|
|
||||||
|
@ -1652,11 +1643,7 @@ gst_v4l2_codec_h264_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
||||||
}
|
}
|
||||||
|
|
||||||
register_element:
|
register_element:
|
||||||
gst_v4l2_decoder_register (plugin,
|
gst_v4l2_decoder_register (plugin, GST_TYPE_H264_DECODER, &type_info,
|
||||||
GST_TYPE_V4L2_CODEC_H264_DEC,
|
|
||||||
(GClassInitFunc) gst_v4l2_codec_h264_dec_subclass_init,
|
|
||||||
gst_mini_object_ref (GST_MINI_OBJECT (device)),
|
|
||||||
(GInstanceInitFunc) gst_v4l2_codec_h264_dec_subinit,
|
|
||||||
"v4l2sl%sh264dec", device, rank, NULL);
|
"v4l2sl%sh264dec", device, rank, NULL);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
|
|
@ -40,10 +40,7 @@
|
||||||
GST_DEBUG_CATEGORY_STATIC (v4l2_h265dec_debug);
|
GST_DEBUG_CATEGORY_STATIC (v4l2_h265dec_debug);
|
||||||
#define GST_CAT_DEFAULT v4l2_h265dec_debug
|
#define GST_CAT_DEFAULT v4l2_h265dec_debug
|
||||||
|
|
||||||
#define GST_TYPE_V4L2_CODEC_H265_DEC \
|
#define GST_V4L2_CODEC_H265_DEC(obj) ((GstV4l2CodecH265Dec *) obj)
|
||||||
(gst_v4l2_codec_h265_dec_get_type())
|
|
||||||
#define GST_V4L2_CODEC_H265_DEC(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_V4L2_CODEC_H265_DEC,GstV4l2CodecH265Dec))
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
@ -125,12 +122,7 @@ struct _GstV4l2CodecH265Dec
|
||||||
gint crop_rect_x, crop_rect_y;
|
gint crop_rect_x, crop_rect_y;
|
||||||
};
|
};
|
||||||
|
|
||||||
static GType gst_v4l2_codec_h265_dec_get_type (void);
|
static GstElementClass *parent_class = NULL;
|
||||||
|
|
||||||
G_DEFINE_ABSTRACT_TYPE (GstV4l2CodecH265Dec, gst_v4l2_codec_h265_dec,
|
|
||||||
GST_TYPE_H265_DECODER);
|
|
||||||
|
|
||||||
#define parent_class gst_v4l2_codec_h265_dec_parent_class
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
is_frame_based (GstV4l2CodecH265Dec * self)
|
is_frame_based (GstV4l2CodecH265Dec * self)
|
||||||
|
@ -1650,12 +1642,7 @@ gst_v4l2_codec_h265_dec_get_property (GObject * object, guint prop_id,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_v4l2_codec_h265_dec_init (GstV4l2CodecH265Dec * self)
|
gst_v4l2_codec_h265_dec_init (GstV4l2CodecH265Dec * self,
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_v4l2_codec_h265_dec_subinit (GstV4l2CodecH265Dec * self,
|
|
||||||
GstV4l2CodecH265DecClass * klass)
|
GstV4l2CodecH265DecClass * klass)
|
||||||
{
|
{
|
||||||
self->decoder = gst_v4l2_decoder_new (klass->device);
|
self->decoder = gst_v4l2_decoder_new (klass->device);
|
||||||
|
@ -1680,12 +1667,7 @@ gst_v4l2_codec_h265_dec_dispose (GObject * object)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_v4l2_codec_h265_dec_class_init (GstV4l2CodecH265DecClass * klass)
|
gst_v4l2_codec_h265_dec_class_init (GstV4l2CodecH265DecClass * klass,
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_v4l2_codec_h265_dec_subclass_init (GstV4l2CodecH265DecClass * klass,
|
|
||||||
GstV4l2CodecDevice * device)
|
GstV4l2CodecDevice * device)
|
||||||
{
|
{
|
||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
|
@ -1703,6 +1685,8 @@ gst_v4l2_codec_h265_dec_subclass_init (GstV4l2CodecH265DecClass * klass,
|
||||||
"A V4L2 based H.265 video decoder",
|
"A V4L2 based H.265 video decoder",
|
||||||
"Nicolas Dufresne <nicolas.dufresne@collabora.com>");
|
"Nicolas Dufresne <nicolas.dufresne@collabora.com>");
|
||||||
|
|
||||||
|
parent_class = g_type_class_peek_parent (klass);
|
||||||
|
|
||||||
gst_element_class_add_static_pad_template (element_class, &sink_template);
|
gst_element_class_add_static_pad_template (element_class, &sink_template);
|
||||||
gst_element_class_add_pad_template (element_class,
|
gst_element_class_add_pad_template (element_class,
|
||||||
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
|
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
|
||||||
|
@ -1743,6 +1727,13 @@ void
|
||||||
gst_v4l2_codec_h265_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
gst_v4l2_codec_h265_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
||||||
GstV4l2CodecDevice * device, guint rank)
|
GstV4l2CodecDevice * device, guint rank)
|
||||||
{
|
{
|
||||||
|
GTypeInfo type_info = {
|
||||||
|
.class_size = sizeof (GstV4l2CodecH265DecClass),
|
||||||
|
.class_init = (GClassInitFunc) gst_v4l2_codec_h265_dec_class_init,
|
||||||
|
.class_data = gst_mini_object_ref (GST_MINI_OBJECT (device)),
|
||||||
|
.instance_size = sizeof (GstV4l2CodecH265Dec),
|
||||||
|
.instance_init = (GInstanceInitFunc) gst_v4l2_codec_h265_dec_init,
|
||||||
|
};
|
||||||
GstCaps *src_caps = NULL;
|
GstCaps *src_caps = NULL;
|
||||||
guint version;
|
guint version;
|
||||||
|
|
||||||
|
@ -1783,10 +1774,7 @@ gst_v4l2_codec_h265_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
||||||
}
|
}
|
||||||
|
|
||||||
register_element:
|
register_element:
|
||||||
gst_v4l2_decoder_register (plugin, GST_TYPE_V4L2_CODEC_H265_DEC,
|
gst_v4l2_decoder_register (plugin, GST_TYPE_H265_DECODER, &type_info,
|
||||||
(GClassInitFunc) gst_v4l2_codec_h265_dec_subclass_init,
|
|
||||||
gst_mini_object_ref (GST_MINI_OBJECT (device)),
|
|
||||||
(GInstanceInitFunc) gst_v4l2_codec_h265_dec_subinit,
|
|
||||||
"v4l2sl%sh265dec", device, rank, NULL);
|
"v4l2sl%sh265dec", device, rank, NULL);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
|
|
@ -43,10 +43,7 @@
|
||||||
GST_DEBUG_CATEGORY_STATIC (v4l2_mpeg2dec_debug);
|
GST_DEBUG_CATEGORY_STATIC (v4l2_mpeg2dec_debug);
|
||||||
#define GST_CAT_DEFAULT v4l2_mpeg2dec_debug
|
#define GST_CAT_DEFAULT v4l2_mpeg2dec_debug
|
||||||
|
|
||||||
#define GST_TYPE_V4L2_CODEC_MPEG2_DEC \
|
#define GST_V4L2_CODEC_MPEG2_DEC(obj) ((GstV4l2CodecMpeg2Dec *) obj)
|
||||||
(gst_v4l2_codec_mpeg2_dec_get_type())
|
|
||||||
#define GST_V4L2_CODEC_MPEG2_DEC(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_V4L2_CODEC_MPEG2_DEC,GstV4l2CodecMpeg2Dec))
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
@ -116,12 +113,7 @@ struct _GstV4l2CodecMpeg2Dec
|
||||||
gboolean copy_frames;
|
gboolean copy_frames;
|
||||||
};
|
};
|
||||||
|
|
||||||
static GType gst_v4l2_codec_mpeg2_dec_get_type (void);
|
static GstElementClass *parent_class = NULL;
|
||||||
|
|
||||||
G_DEFINE_ABSTRACT_TYPE (GstV4l2CodecMpeg2Dec, gst_v4l2_codec_mpeg2_dec,
|
|
||||||
GST_TYPE_MPEG2_DECODER);
|
|
||||||
|
|
||||||
#define parent_class gst_v4l2_codec_mpeg2_dec_parent_class
|
|
||||||
|
|
||||||
static guint
|
static guint
|
||||||
gst_v4l2_codec_mpeg2_dec_get_preferred_output_delay (GstMpeg2Decoder * decoder,
|
gst_v4l2_codec_mpeg2_dec_get_preferred_output_delay (GstMpeg2Decoder * decoder,
|
||||||
|
@ -1045,12 +1037,7 @@ gst_v4l2_codec_mpeg2_dec_get_property (GObject * object, guint prop_id,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_v4l2_codec_mpeg2_dec_init (GstV4l2CodecMpeg2Dec * self)
|
gst_v4l2_codec_mpeg2_dec_init (GstV4l2CodecMpeg2Dec * self,
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_v4l2_codec_mpeg2_dec_subinit (GstV4l2CodecMpeg2Dec * self,
|
|
||||||
GstV4l2CodecMpeg2DecClass * klass)
|
GstV4l2CodecMpeg2DecClass * klass)
|
||||||
{
|
{
|
||||||
self->decoder = gst_v4l2_decoder_new (klass->device);
|
self->decoder = gst_v4l2_decoder_new (klass->device);
|
||||||
|
@ -1068,12 +1055,7 @@ gst_v4l2_codec_mpeg2_dec_dispose (GObject * object)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_v4l2_codec_mpeg2_dec_class_init (GstV4l2CodecMpeg2DecClass * klass)
|
gst_v4l2_codec_mpeg2_dec_class_init (GstV4l2CodecMpeg2DecClass * klass,
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_v4l2_codec_mpeg2_dec_subclass_init (GstV4l2CodecMpeg2DecClass * klass,
|
|
||||||
GstV4l2CodecDevice * device)
|
GstV4l2CodecDevice * device)
|
||||||
{
|
{
|
||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
|
@ -1091,6 +1073,8 @@ gst_v4l2_codec_mpeg2_dec_subclass_init (GstV4l2CodecMpeg2DecClass * klass,
|
||||||
"A V4L2 based Mpeg2 video decoder",
|
"A V4L2 based Mpeg2 video decoder",
|
||||||
"Daniel Almeida <daniel.almeida@collabora.com>");
|
"Daniel Almeida <daniel.almeida@collabora.com>");
|
||||||
|
|
||||||
|
parent_class = g_type_class_peek_parent (klass);
|
||||||
|
|
||||||
gst_element_class_add_static_pad_template (element_class, &sink_template);
|
gst_element_class_add_static_pad_template (element_class, &sink_template);
|
||||||
gst_element_class_add_pad_template (element_class,
|
gst_element_class_add_pad_template (element_class,
|
||||||
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
|
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
|
||||||
|
@ -1131,6 +1115,13 @@ void
|
||||||
gst_v4l2_codec_mpeg2_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
gst_v4l2_codec_mpeg2_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
||||||
GstV4l2CodecDevice * device, guint rank)
|
GstV4l2CodecDevice * device, guint rank)
|
||||||
{
|
{
|
||||||
|
GTypeInfo type_info = {
|
||||||
|
.class_size = sizeof (GstV4l2CodecMpeg2DecClass),
|
||||||
|
.class_init = (GClassInitFunc) gst_v4l2_codec_mpeg2_dec_class_init,
|
||||||
|
.class_data = gst_mini_object_ref (GST_MINI_OBJECT (device)),
|
||||||
|
.instance_size = sizeof (GstV4l2CodecMpeg2Dec),
|
||||||
|
.instance_init = (GInstanceInitFunc) gst_v4l2_codec_mpeg2_dec_init,
|
||||||
|
};
|
||||||
GstCaps *src_caps = NULL;
|
GstCaps *src_caps = NULL;
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY_INIT (v4l2_mpeg2dec_debug, "v4l2codecs-mpeg2dec", 0,
|
GST_DEBUG_CATEGORY_INIT (v4l2_mpeg2dec_debug, "v4l2codecs-mpeg2dec", 0,
|
||||||
|
@ -1159,10 +1150,7 @@ gst_v4l2_codec_mpeg2_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
||||||
gst_v4l2_decoder_enum_all_src_formats (decoder, &static_src_caps);
|
gst_v4l2_decoder_enum_all_src_formats (decoder, &static_src_caps);
|
||||||
|
|
||||||
register_element:
|
register_element:
|
||||||
gst_v4l2_decoder_register (plugin, GST_TYPE_V4L2_CODEC_MPEG2_DEC,
|
gst_v4l2_decoder_register (plugin, GST_TYPE_MPEG2_DECODER, &type_info,
|
||||||
(GClassInitFunc) gst_v4l2_codec_mpeg2_dec_subclass_init,
|
|
||||||
gst_mini_object_ref (GST_MINI_OBJECT (device)),
|
|
||||||
(GInstanceInitFunc) gst_v4l2_codec_mpeg2_dec_subinit,
|
|
||||||
"v4l2sl%smpeg2dec", device, rank, NULL);
|
"v4l2sl%smpeg2dec", device, rank, NULL);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
|
|
@ -39,10 +39,7 @@
|
||||||
GST_DEBUG_CATEGORY_STATIC (v4l2_vp8dec_debug);
|
GST_DEBUG_CATEGORY_STATIC (v4l2_vp8dec_debug);
|
||||||
#define GST_CAT_DEFAULT v4l2_vp8dec_debug
|
#define GST_CAT_DEFAULT v4l2_vp8dec_debug
|
||||||
|
|
||||||
#define GST_TYPE_V4L2_CODEC_VP8_DEC \
|
#define GST_V4L2_CODEC_VP8_DEC(obj) ((GstV4l2CodecVp8Dec *) obj)
|
||||||
(gst_v4l2_codec_vp8_dec_get_type())
|
|
||||||
#define GST_V4L2_CODEC_VP8_DEC(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_V4L2_CODEC_VP8_DEC,GstV4l2CodecVp8Dec))
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
@ -104,12 +101,7 @@ struct _GstV4l2CodecVp8Dec
|
||||||
GstMapInfo bitstream_map;
|
GstMapInfo bitstream_map;
|
||||||
};
|
};
|
||||||
|
|
||||||
static GType gst_v4l2_codec_vp8_dec_get_type (void);
|
static GstElementClass *parent_class = NULL;
|
||||||
|
|
||||||
G_DEFINE_ABSTRACT_TYPE (GstV4l2CodecVp8Dec, gst_v4l2_codec_vp8_dec,
|
|
||||||
GST_TYPE_VP8_DECODER);
|
|
||||||
|
|
||||||
#define parent_class gst_v4l2_codec_vp8_dec_parent_class
|
|
||||||
|
|
||||||
static guint
|
static guint
|
||||||
gst_v4l2_codec_vp8_dec_get_preferred_output_delay (GstVp8Decoder * decoder,
|
gst_v4l2_codec_vp8_dec_get_preferred_output_delay (GstVp8Decoder * decoder,
|
||||||
|
@ -903,12 +895,7 @@ gst_v4l2_codec_vp8_dec_get_property (GObject * object, guint prop_id,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_v4l2_codec_vp8_dec_init (GstV4l2CodecVp8Dec * self)
|
gst_v4l2_codec_vp8_dec_init (GstV4l2CodecVp8Dec * self,
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_v4l2_codec_vp8_dec_subinit (GstV4l2CodecVp8Dec * self,
|
|
||||||
GstV4l2CodecVp8DecClass * klass)
|
GstV4l2CodecVp8DecClass * klass)
|
||||||
{
|
{
|
||||||
self->decoder = gst_v4l2_decoder_new (klass->device);
|
self->decoder = gst_v4l2_decoder_new (klass->device);
|
||||||
|
@ -926,12 +913,7 @@ gst_v4l2_codec_vp8_dec_dispose (GObject * object)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_v4l2_codec_vp8_dec_class_init (GstV4l2CodecVp8DecClass * klass)
|
gst_v4l2_codec_vp8_dec_class_init (GstV4l2CodecVp8DecClass * klass,
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_v4l2_codec_vp8_dec_subclass_init (GstV4l2CodecVp8DecClass * klass,
|
|
||||||
GstV4l2CodecDevice * device)
|
GstV4l2CodecDevice * device)
|
||||||
{
|
{
|
||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
|
@ -949,6 +931,8 @@ gst_v4l2_codec_vp8_dec_subclass_init (GstV4l2CodecVp8DecClass * klass,
|
||||||
"A V4L2 based VP8 video decoder",
|
"A V4L2 based VP8 video decoder",
|
||||||
"Nicolas Dufresne <nicolas.dufresne@collabora.com>");
|
"Nicolas Dufresne <nicolas.dufresne@collabora.com>");
|
||||||
|
|
||||||
|
parent_class = g_type_class_peek_parent (klass);
|
||||||
|
|
||||||
gst_element_class_add_static_pad_template (element_class, &sink_template);
|
gst_element_class_add_static_pad_template (element_class, &sink_template);
|
||||||
gst_element_class_add_pad_template (element_class,
|
gst_element_class_add_pad_template (element_class,
|
||||||
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
|
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
|
||||||
|
@ -1005,6 +989,13 @@ void
|
||||||
gst_v4l2_codec_vp8_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
gst_v4l2_codec_vp8_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
||||||
GstV4l2CodecDevice * device, guint rank)
|
GstV4l2CodecDevice * device, guint rank)
|
||||||
{
|
{
|
||||||
|
GTypeInfo type_info = {
|
||||||
|
.class_size = sizeof (GstV4l2CodecVp8DecClass),
|
||||||
|
.class_init = (GClassInitFunc) gst_v4l2_codec_vp8_dec_class_init,
|
||||||
|
.class_data = gst_mini_object_ref (GST_MINI_OBJECT (device)),
|
||||||
|
.instance_size = sizeof (GstV4l2CodecVp8Dec),
|
||||||
|
.instance_init = (GInstanceInitFunc) gst_v4l2_codec_vp8_dec_init,
|
||||||
|
};
|
||||||
gchar *element_name;
|
gchar *element_name;
|
||||||
GstCaps *src_caps = NULL, *alpha_caps;
|
GstCaps *src_caps = NULL, *alpha_caps;
|
||||||
|
|
||||||
|
@ -1034,10 +1025,7 @@ gst_v4l2_codec_vp8_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
||||||
gst_v4l2_decoder_enum_all_src_formats (decoder, &static_src_caps);
|
gst_v4l2_decoder_enum_all_src_formats (decoder, &static_src_caps);
|
||||||
|
|
||||||
register_element:
|
register_element:
|
||||||
gst_v4l2_decoder_register (plugin, GST_TYPE_V4L2_CODEC_VP8_DEC,
|
gst_v4l2_decoder_register (plugin, GST_TYPE_VP8_DECODER, &type_info,
|
||||||
(GClassInitFunc) gst_v4l2_codec_vp8_dec_subclass_init,
|
|
||||||
gst_mini_object_ref (GST_MINI_OBJECT (device)),
|
|
||||||
(GInstanceInitFunc) gst_v4l2_codec_vp8_dec_subinit,
|
|
||||||
"v4l2sl%svp8dec", device, rank, &element_name);
|
"v4l2sl%svp8dec", device, rank, &element_name);
|
||||||
|
|
||||||
if (!element_name)
|
if (!element_name)
|
||||||
|
|
|
@ -36,10 +36,7 @@
|
||||||
GST_DEBUG_CATEGORY_STATIC (v4l2_vp9dec_debug);
|
GST_DEBUG_CATEGORY_STATIC (v4l2_vp9dec_debug);
|
||||||
#define GST_CAT_DEFAULT v4l2_vp9dec_debug
|
#define GST_CAT_DEFAULT v4l2_vp9dec_debug
|
||||||
|
|
||||||
#define GST_TYPE_V4L2_CODEC_VP9_DEC \
|
#define GST_V4L2_CODEC_VP9_DEC(obj) ((GstV4l2CodecVp9Dec *) obj)
|
||||||
(gst_v4l2_codec_vp9_dec_get_type())
|
|
||||||
#define GST_V4L2_CODEC_VP9_DEC(obj) \
|
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_V4L2_CODEC_VP9_DEC,GstV4l2CodecVp9Dec))
|
|
||||||
|
|
||||||
/* Used to mark picture that have been outputed */
|
/* Used to mark picture that have been outputed */
|
||||||
#define FLAG_PICTURE_HOLDS_BUFFER GST_MINI_OBJECT_FLAG_LAST
|
#define FLAG_PICTURE_HOLDS_BUFFER GST_MINI_OBJECT_FLAG_LAST
|
||||||
|
@ -115,12 +112,7 @@ struct _GstV4l2CodecVp9Dec
|
||||||
guint subsampling_y;
|
guint subsampling_y;
|
||||||
};
|
};
|
||||||
|
|
||||||
static GType gst_v4l2_codec_vp9_dec_get_type (void);
|
static GstElementClass *parent_class = NULL;
|
||||||
|
|
||||||
G_DEFINE_ABSTRACT_TYPE (GstV4l2CodecVp9Dec, gst_v4l2_codec_vp9_dec,
|
|
||||||
GST_TYPE_VP9_DECODER);
|
|
||||||
|
|
||||||
#define parent_class gst_v4l2_codec_vp9_dec_parent_class
|
|
||||||
|
|
||||||
static guint
|
static guint
|
||||||
gst_v4l2_codec_vp9_dec_get_preferred_output_delay (GstVp9Decoder * decoder,
|
gst_v4l2_codec_vp9_dec_get_preferred_output_delay (GstVp9Decoder * decoder,
|
||||||
|
@ -1179,13 +1171,7 @@ gst_v4l2_codec_vp9_dec_get_property (GObject * object, guint prop_id,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_v4l2_codec_vp9_dec_init (GstV4l2CodecVp9Dec * self)
|
gst_v4l2_codec_vp9_dec_init (GstV4l2CodecVp9Dec * self,
|
||||||
{
|
|
||||||
self->need_negotiation = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_v4l2_codec_vp9_dec_subinit (GstV4l2CodecVp9Dec * self,
|
|
||||||
GstV4l2CodecVp9DecClass * klass)
|
GstV4l2CodecVp9DecClass * klass)
|
||||||
{
|
{
|
||||||
self->decoder = gst_v4l2_decoder_new (klass->device);
|
self->decoder = gst_v4l2_decoder_new (klass->device);
|
||||||
|
@ -1203,12 +1189,7 @@ gst_v4l2_codec_vp9_dec_dispose (GObject * object)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_v4l2_codec_vp9_dec_class_init (GstV4l2CodecVp9DecClass * klass)
|
gst_v4l2_codec_vp9_dec_class_init (GstV4l2CodecVp9DecClass * klass,
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_v4l2_codec_vp9_dec_subclass_init (GstV4l2CodecVp9DecClass * klass,
|
|
||||||
GstV4l2CodecDevice * device)
|
GstV4l2CodecDevice * device)
|
||||||
{
|
{
|
||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
|
@ -1226,6 +1207,8 @@ gst_v4l2_codec_vp9_dec_subclass_init (GstV4l2CodecVp9DecClass * klass,
|
||||||
"A V4L2 based VP9 video decoder",
|
"A V4L2 based VP9 video decoder",
|
||||||
"Daniel Almeida <daniel.almeida@collabora.com>");
|
"Daniel Almeida <daniel.almeida@collabora.com>");
|
||||||
|
|
||||||
|
parent_class = g_type_class_peek_parent (klass);
|
||||||
|
|
||||||
gst_element_class_add_static_pad_template (element_class, &sink_template);
|
gst_element_class_add_static_pad_template (element_class, &sink_template);
|
||||||
gst_element_class_add_pad_template (element_class,
|
gst_element_class_add_pad_template (element_class,
|
||||||
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
|
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
|
||||||
|
@ -1286,6 +1269,13 @@ void
|
||||||
gst_v4l2_codec_vp9_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
gst_v4l2_codec_vp9_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
||||||
GstV4l2CodecDevice * device, guint rank)
|
GstV4l2CodecDevice * device, guint rank)
|
||||||
{
|
{
|
||||||
|
GTypeInfo type_info = {
|
||||||
|
.class_size = sizeof (GstV4l2CodecVp9DecClass),
|
||||||
|
.class_init = (GClassInitFunc) gst_v4l2_codec_vp9_dec_class_init,
|
||||||
|
.class_data = gst_mini_object_ref (GST_MINI_OBJECT (device)),
|
||||||
|
.instance_size = sizeof (GstV4l2CodecVp9Dec),
|
||||||
|
.instance_init = (GInstanceInitFunc) gst_v4l2_codec_vp9_dec_init,
|
||||||
|
};
|
||||||
gchar *element_name;
|
gchar *element_name;
|
||||||
GstCaps *src_caps = NULL, *alpha_caps;
|
GstCaps *src_caps = NULL, *alpha_caps;
|
||||||
|
|
||||||
|
@ -1315,10 +1305,7 @@ gst_v4l2_codec_vp9_dec_register (GstPlugin * plugin, GstV4l2Decoder * decoder,
|
||||||
gst_v4l2_decoder_enum_all_src_formats (decoder, &static_src_caps);
|
gst_v4l2_decoder_enum_all_src_formats (decoder, &static_src_caps);
|
||||||
|
|
||||||
register_element:
|
register_element:
|
||||||
gst_v4l2_decoder_register (plugin, GST_TYPE_V4L2_CODEC_VP9_DEC,
|
gst_v4l2_decoder_register (plugin, GST_TYPE_VP9_DECODER, &type_info,
|
||||||
(GClassInitFunc) gst_v4l2_codec_vp9_dec_subclass_init,
|
|
||||||
gst_mini_object_ref (GST_MINI_OBJECT (device)),
|
|
||||||
(GInstanceInitFunc) gst_v4l2_codec_vp9_dec_subinit,
|
|
||||||
"v4l2sl%svp9dec", device, rank, &element_name);
|
"v4l2sl%svp9dec", device, rank, &element_name);
|
||||||
|
|
||||||
if (!element_name)
|
if (!element_name)
|
||||||
|
|
|
@ -1164,13 +1164,11 @@ gst_v4l2_decoder_get_property (GObject * object, guint prop_id,
|
||||||
/**
|
/**
|
||||||
* gst_v4l2_decoder_register:
|
* gst_v4l2_decoder_register:
|
||||||
* @plugin: a #GstPlugin
|
* @plugin: a #GstPlugin
|
||||||
* @dec_type: A #GType for the codec
|
* @dec_type: Base #GType for the codec
|
||||||
* @class_init: The #GClassInitFunc for #dec_type
|
* @type_info: a #GTypeInfo for the codec
|
||||||
* @instance_init: The #GInstanceInitFunc for #dec_type
|
|
||||||
* @element_name_tmpl: A string to use for the first codec found and as a template for the next ones.
|
* @element_name_tmpl: A string to use for the first codec found and as a template for the next ones.
|
||||||
* @device: (transfer full) A #GstV4l2CodecDevice
|
* @device: (transfer full) A #GstV4l2CodecDevice
|
||||||
* @rank: The rank to use for the element
|
* @rank: The rank to use for the element
|
||||||
* @class_data: (nullable) (transfer full) A #gpointer to pass as class_data, set to @device if null
|
|
||||||
* @element_name (nullable) (out) Sets the pointer to the new element name
|
* @element_name (nullable) (out) Sets the pointer to the new element name
|
||||||
*
|
*
|
||||||
* Registers a decoder element as a subtype of @dec_type for @plugin.
|
* Registers a decoder element as a subtype of @dec_type for @plugin.
|
||||||
|
@ -1179,24 +1177,13 @@ gst_v4l2_decoder_get_property (GObject * object, guint prop_id,
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
gst_v4l2_decoder_register (GstPlugin * plugin,
|
gst_v4l2_decoder_register (GstPlugin * plugin,
|
||||||
GType dec_type, GClassInitFunc class_init, gconstpointer class_data,
|
GType dec_type, GTypeInfo * type_info, const gchar * element_name_tmpl,
|
||||||
GInstanceInitFunc instance_init, const gchar * element_name_tmpl,
|
|
||||||
GstV4l2CodecDevice * device, guint rank, gchar ** element_name)
|
GstV4l2CodecDevice * device, guint rank, gchar ** element_name)
|
||||||
{
|
{
|
||||||
GTypeQuery type_query;
|
|
||||||
GTypeInfo type_info = { 0, };
|
|
||||||
GType subtype;
|
GType subtype;
|
||||||
gchar *type_name;
|
gchar *type_name;
|
||||||
|
|
||||||
g_type_query (dec_type, &type_query);
|
if (type_info->class_data == device)
|
||||||
memset (&type_info, 0, sizeof (type_info));
|
|
||||||
type_info.class_size = type_query.class_size;
|
|
||||||
type_info.instance_size = type_query.instance_size;
|
|
||||||
type_info.class_init = class_init;
|
|
||||||
type_info.class_data = class_data;
|
|
||||||
type_info.instance_init = instance_init;
|
|
||||||
|
|
||||||
if (class_data == device)
|
|
||||||
GST_MINI_OBJECT_FLAG_SET (device, GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED);
|
GST_MINI_OBJECT_FLAG_SET (device, GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED);
|
||||||
|
|
||||||
/* The first decoder to be registered should use a constant name, like
|
/* The first decoder to be registered should use a constant name, like
|
||||||
|
@ -1213,7 +1200,7 @@ gst_v4l2_decoder_register (GstPlugin * plugin,
|
||||||
g_free (basename);
|
g_free (basename);
|
||||||
}
|
}
|
||||||
|
|
||||||
subtype = g_type_register_static (dec_type, type_name, &type_info, 0);
|
subtype = g_type_register_static (dec_type, type_name, type_info, 0);
|
||||||
|
|
||||||
if (!gst_element_register (plugin, type_name, rank, subtype)) {
|
if (!gst_element_register (plugin, type_name, rank, subtype)) {
|
||||||
GST_WARNING ("Failed to register plugin '%s'", type_name);
|
GST_WARNING ("Failed to register plugin '%s'", type_name);
|
||||||
|
|
|
@ -128,9 +128,7 @@ void gst_v4l2_decoder_get_property (GObject * object, guint prop_id
|
||||||
|
|
||||||
void gst_v4l2_decoder_register (GstPlugin * plugin,
|
void gst_v4l2_decoder_register (GstPlugin * plugin,
|
||||||
GType dec_type,
|
GType dec_type,
|
||||||
GClassInitFunc class_init,
|
GTypeInfo * type_info,
|
||||||
gconstpointer class_data,
|
|
||||||
GInstanceInitFunc instance_init,
|
|
||||||
const gchar *element_name_tmpl,
|
const gchar *element_name_tmpl,
|
||||||
GstV4l2CodecDevice * device,
|
GstV4l2CodecDevice * device,
|
||||||
guint rank,
|
guint rank,
|
||||||
|
|
Loading…
Reference in a new issue