mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-30 12:49:40 +00:00
mpegtsdemux: Add mapping for DVD and Bluray subpicture streams.
Add output subpicture pads for DVD (video/x-dvd-subpicture) and Bluray PGS (subpicture/x-pgs) streams. Remove an unused variable from the PES filter.
This commit is contained in:
parent
19d450a164
commit
471640e3f3
4 changed files with 28 additions and 5 deletions
|
@ -173,6 +173,8 @@
|
||||||
#define ST_HDV_PRIVATE_A0 0xa0
|
#define ST_HDV_PRIVATE_A0 0xa0
|
||||||
#define ST_HDV_PRIVATE_A1 0xa1
|
#define ST_HDV_PRIVATE_A1 0xa1
|
||||||
#define ST_PS_DVD_SUBPICTURE 0xff
|
#define ST_PS_DVD_SUBPICTURE 0xff
|
||||||
|
/* Blu-ray PGS subpictures */
|
||||||
|
#define ST_BD_PGS_SUBPICTURE 0x90
|
||||||
|
|
||||||
/* Un-official time-code stream */
|
/* Un-official time-code stream */
|
||||||
#define ST_PS_TIMECODE 0xd2
|
#define ST_PS_TIMECODE 0xd2
|
||||||
|
|
|
@ -157,6 +157,10 @@ enum
|
||||||
"audio/x-dts" \
|
"audio/x-dts" \
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/* Can also use the subpicture pads for text subtitles? */
|
||||||
|
#define SUBPICTURE_CAPS \
|
||||||
|
GST_STATIC_CAPS ("subpicture/x-pgs; video/x-dvd-subpicture")
|
||||||
|
|
||||||
static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
|
static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
|
||||||
GST_PAD_SINK,
|
GST_PAD_SINK,
|
||||||
GST_PAD_ALWAYS,
|
GST_PAD_ALWAYS,
|
||||||
|
@ -175,6 +179,12 @@ GST_STATIC_PAD_TEMPLATE ("audio_%04x",
|
||||||
GST_PAD_SOMETIMES,
|
GST_PAD_SOMETIMES,
|
||||||
AUDIO_CAPS);
|
AUDIO_CAPS);
|
||||||
|
|
||||||
|
static GstStaticPadTemplate subpicture_template =
|
||||||
|
GST_STATIC_PAD_TEMPLATE ("subpicture_%04x",
|
||||||
|
GST_PAD_SRC,
|
||||||
|
GST_PAD_SOMETIMES,
|
||||||
|
SUBPICTURE_CAPS);
|
||||||
|
|
||||||
static GstStaticPadTemplate private_template =
|
static GstStaticPadTemplate private_template =
|
||||||
GST_STATIC_PAD_TEMPLATE ("private_%04x",
|
GST_STATIC_PAD_TEMPLATE ("private_%04x",
|
||||||
GST_PAD_SRC,
|
GST_PAD_SRC,
|
||||||
|
@ -250,10 +260,14 @@ gst_mpegts_demux_base_init (GstMpegTSDemuxClass * klass)
|
||||||
klass->sink_template = gst_static_pad_template_get (&sink_template);
|
klass->sink_template = gst_static_pad_template_get (&sink_template);
|
||||||
klass->video_template = gst_static_pad_template_get (&video_template);
|
klass->video_template = gst_static_pad_template_get (&video_template);
|
||||||
klass->audio_template = gst_static_pad_template_get (&audio_template);
|
klass->audio_template = gst_static_pad_template_get (&audio_template);
|
||||||
|
klass->subpicture_template =
|
||||||
|
gst_static_pad_template_get (&subpicture_template);
|
||||||
klass->private_template = gst_static_pad_template_get (&private_template);
|
klass->private_template = gst_static_pad_template_get (&private_template);
|
||||||
|
|
||||||
gst_element_class_add_pad_template (element_class, klass->video_template);
|
gst_element_class_add_pad_template (element_class, klass->video_template);
|
||||||
gst_element_class_add_pad_template (element_class, klass->audio_template);
|
gst_element_class_add_pad_template (element_class, klass->audio_template);
|
||||||
|
gst_element_class_add_pad_template (element_class,
|
||||||
|
klass->subpicture_template);
|
||||||
gst_element_class_add_pad_template (element_class, klass->private_template);
|
gst_element_class_add_pad_template (element_class, klass->private_template);
|
||||||
gst_element_class_add_pad_template (element_class, klass->sink_template);
|
gst_element_class_add_pad_template (element_class, klass->sink_template);
|
||||||
|
|
||||||
|
@ -675,6 +689,14 @@ gst_mpegts_demux_fill_stream (GstMpegTSStream * stream, guint8 id,
|
||||||
caps = gst_caps_new_simple ("audio/x-lpcm", NULL);
|
caps = gst_caps_new_simple ("audio/x-lpcm", NULL);
|
||||||
break;
|
break;
|
||||||
case ST_PS_DVD_SUBPICTURE:
|
case ST_PS_DVD_SUBPICTURE:
|
||||||
|
template = klass->subpicture_template;
|
||||||
|
name = g_strdup_printf ("subpicture_%04x", stream->PID);
|
||||||
|
caps = gst_caps_new_simple ("video/x-dvd-subpicture", NULL);
|
||||||
|
break;
|
||||||
|
case ST_BD_PGS_SUBPICTURE:
|
||||||
|
template = klass->subpicture_template;
|
||||||
|
name = g_strdup_printf ("subpicture_%04x", stream->PID);
|
||||||
|
caps = gst_caps_new_simple ("subpicture/x-pgs", NULL);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -992,8 +1014,8 @@ gst_mpegts_demux_data_cb (GstPESFilter * filter, gboolean first,
|
||||||
goto unknown_type;
|
goto unknown_type;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (demux,
|
GST_DEBUG_OBJECT (demux,
|
||||||
"New stream 0x%04x of type %d with caps %" GST_PTR_FORMAT, stream->PID,
|
"New stream 0x%04x of type 0x%02x with caps %" GST_PTR_FORMAT,
|
||||||
stream->stream_type, GST_PAD_CAPS (stream->pad));
|
stream->PID, stream->stream_type, GST_PAD_CAPS (stream->pad));
|
||||||
|
|
||||||
srcpad = stream->pad;
|
srcpad = stream->pad;
|
||||||
|
|
||||||
|
@ -1017,7 +1039,7 @@ gst_mpegts_demux_data_cb (GstPESFilter * filter, gboolean first,
|
||||||
unknown_type:
|
unknown_type:
|
||||||
{
|
{
|
||||||
GST_DEBUG_OBJECT (demux, "got unknown stream id 0x%02x, type 0x%02x",
|
GST_DEBUG_OBJECT (demux, "got unknown stream id 0x%02x, type 0x%02x",
|
||||||
filter->id, filter->type);
|
filter->id, stream->stream_type);
|
||||||
gst_buffer_unref (buffer);
|
gst_buffer_unref (buffer);
|
||||||
return gst_mpegts_demux_combine_flows (demux, stream, GST_FLOW_NOT_LINKED);
|
return gst_mpegts_demux_combine_flows (demux, stream, GST_FLOW_NOT_LINKED);
|
||||||
}
|
}
|
||||||
|
|
|
@ -228,6 +228,7 @@ struct _GstMpegTSDemuxClass {
|
||||||
GstPadTemplate * sink_template;
|
GstPadTemplate * sink_template;
|
||||||
GstPadTemplate * video_template;
|
GstPadTemplate * video_template;
|
||||||
GstPadTemplate * audio_template;
|
GstPadTemplate * audio_template;
|
||||||
|
GstPadTemplate * subpicture_template;
|
||||||
GstPadTemplate * private_template;
|
GstPadTemplate * private_template;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -84,8 +84,6 @@ struct _GstPESFilter {
|
||||||
gboolean unbounded_packet;
|
gboolean unbounded_packet;
|
||||||
guint16 length;
|
guint16 length;
|
||||||
|
|
||||||
guint8 type;
|
|
||||||
|
|
||||||
gint64 pts;
|
gint64 pts;
|
||||||
gint64 dts;
|
gint64 dts;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue