y4mdec: descend from GstBaseParse

This is an overhaul/simplification of the element.

Now it supports seek, while the performance remains more or less the same.

Fixes: #4373
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8719>
This commit is contained in:
Víctor Manuel Jáquez Leal 2025-04-24 22:08:56 +02:00 committed by GStreamer Marge Bot
parent ef7829b6ad
commit 7c8a5cd28d
3 changed files with 433 additions and 588 deletions

View File

@ -29615,10 +29615,11 @@
"description": "Encodes and demuxes/decodes YUV4MPEG streams (mjpegtools)",
"elements": {
"y4mdec": {
"author": "David Schleef <ds@schleef.org>",
"author": "David Schleef <ds@schleef.org>\nVictor Jaquez <vjaquez@igalia.com>",
"description": "Demuxes/decodes YUV4MPEG streams",
"hierarchy": [
"GstY4mDec",
"GstBaseParse",
"GstElement",
"GstObject",
"GInitiallyUnowned",

File diff suppressed because it is too large Load Diff

View File

@ -21,46 +21,41 @@
#define _GST_Y4M_DEC_H_
#include <gst/gst.h>
#include <gst/base/gstadapter.h>
#include <gst/base/gstbaseparse.h>
#include <gst/video/video.h>
G_BEGIN_DECLS
#define GST_TYPE_Y4M_DEC (gst_y4m_dec_get_type())
#define GST_Y4M_DEC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_Y4M_DEC,GstY4mDec))
#define GST_Y4M_DEC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_Y4M_DEC,GstY4mDecClass))
#define GST_IS_Y4M_DEC(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_Y4M_DEC))
#define GST_IS_Y4M_DEC_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_Y4M_DEC))
#define GST_TYPE_Y4M_DEC \
(gst_y4m_dec_get_type())
#define GST_Y4M_DEC(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_Y4M_DEC,GstY4mDec))
#define GST_Y4M_DEC_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_Y4M_DEC,GstY4mDecClass))
#define GST_IS_Y4M_DEC(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_Y4M_DEC))
#define GST_IS_Y4M_DEC_CLASS(obj) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_Y4M_DEC))
typedef struct _GstY4mDec GstY4mDec;
typedef struct _GstY4mDecClass GstY4mDecClass;
struct _GstY4mDec
{
GstElement base_y4mdec;
GstPad *sinkpad;
GstPad *srcpad;
GstAdapter *adapter;
GstBaseParse parent;
/* state */
gboolean have_header;
int frame_index;
int header_size;
gboolean have_new_segment;
GstSegment segment;
gint state;
GstVideoInfo info;
GstVideoInfo out_info;
gboolean video_meta;
gboolean has_video_meta;
GstBufferPool *pool;
gboolean padded;
gboolean passthrough;
};
struct _GstY4mDecClass
{
GstElementClass base_y4mdec_class;
GstBaseParseClass parent;
};
GType gst_y4m_dec_get_type (void);