mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-07 07:58:51 +00:00
gst/mpegstream/gstdvddemux.c (AUDIO_CAPS)
Original commit message from CVS: 2005-12-27 Martin Soto <martinsoto@users.sourceforge.net> * gst/mpegstream/gstdvddemux.c (AUDIO_CAPS) (gst_dvd_demux_get_audio_stream): Use audio/x-lpcm as mimetype for LPCM. * gstmpegdemux.h: * gstmpegdemux.c (gst_mpeg_demux_get_video_stream) (gst_mpeg_demux_get_audio_stream): * gst/mpegstream/gstdvddemux.c (gst_dvd_demux_get_video_stream) (gst_dvd_demux_get_audio_stream) (gst_dvd_demux_get_subpicture_stream) (gst_dvd_demux_send_subbuffer): Send current* pad buffers with appropriate caps.
This commit is contained in:
parent
f2d10b0927
commit
3d13141529
4 changed files with 45 additions and 27 deletions
15
ChangeLog
15
ChangeLog
|
@ -1,3 +1,18 @@
|
||||||
|
2005-12-27 Martin Soto <martinsoto@users.sourceforge.net>
|
||||||
|
|
||||||
|
* gst/mpegstream/gstdvddemux.c (AUDIO_CAPS)
|
||||||
|
(gst_dvd_demux_get_audio_stream): Use audio/x-lpcm as mimetype for
|
||||||
|
LPCM.
|
||||||
|
|
||||||
|
* gstmpegdemux.h:
|
||||||
|
* gstmpegdemux.c (gst_mpeg_demux_get_video_stream)
|
||||||
|
(gst_mpeg_demux_get_audio_stream):
|
||||||
|
* gst/mpegstream/gstdvddemux.c (gst_dvd_demux_get_video_stream)
|
||||||
|
(gst_dvd_demux_get_audio_stream)
|
||||||
|
(gst_dvd_demux_get_subpicture_stream)
|
||||||
|
(gst_dvd_demux_send_subbuffer):
|
||||||
|
Send current* pad buffers with appropriate caps.
|
||||||
|
|
||||||
2005-12-26 Martin Soto <martinsoto@users.sourceforge.net>
|
2005-12-26 Martin Soto <martinsoto@users.sourceforge.net>
|
||||||
|
|
||||||
* gst/iec958/ac3iec.h:
|
* gst/iec958/ac3iec.h:
|
||||||
|
|
|
@ -83,7 +83,7 @@ static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
|
||||||
GST_STATIC_CAPS ( \
|
GST_STATIC_CAPS ( \
|
||||||
"audio/mpeg, " \
|
"audio/mpeg, " \
|
||||||
"mpegversion = (int) 1;" \
|
"mpegversion = (int) 1;" \
|
||||||
"audio/x-dvd-lpcm, " \
|
"audio/x-lpcm, " \
|
||||||
"width = (int) { 16, 20, 24 }, " \
|
"width = (int) { 16, 20, 24 }, " \
|
||||||
"rate = (int) { 48000, 96000 }, " \
|
"rate = (int) { 48000, 96000 }, " \
|
||||||
"channels = (int) [ 1, 8 ], " \
|
"channels = (int) [ 1, 8 ], " \
|
||||||
|
@ -456,19 +456,19 @@ gst_dvd_demux_get_video_stream (GstMPEGDemux * mpeg_demux,
|
||||||
gint mpeg_version = *((gint *) info);
|
gint mpeg_version = *((gint *) info);
|
||||||
|
|
||||||
if (dvd_demux->mpeg_version != mpeg_version) {
|
if (dvd_demux->mpeg_version != mpeg_version) {
|
||||||
GstCaps *caps;
|
str->caps = gst_caps_new_simple ("video/mpeg",
|
||||||
|
|
||||||
caps = gst_caps_new_simple ("video/mpeg",
|
|
||||||
"mpegversion", G_TYPE_INT, mpeg_version,
|
"mpegversion", G_TYPE_INT, mpeg_version,
|
||||||
"systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
|
"systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
|
||||||
|
|
||||||
if (!gst_pad_set_caps (dvd_demux->cur_video, caps)) {
|
if (!gst_pad_set_caps (dvd_demux->cur_video, str->caps)) {
|
||||||
GST_ELEMENT_ERROR (GST_ELEMENT (mpeg_demux),
|
GST_ELEMENT_ERROR (GST_ELEMENT (mpeg_demux),
|
||||||
CORE, NEGOTIATION, (NULL), ("failed to set caps"));
|
CORE, NEGOTIATION, (NULL), ("failed to set caps"));
|
||||||
|
gst_caps_unref (str->caps);
|
||||||
|
str->caps = NULL;
|
||||||
|
return str;
|
||||||
} else {
|
} else {
|
||||||
dvd_demux->mpeg_version = mpeg_version;
|
dvd_demux->mpeg_version = mpeg_version;
|
||||||
}
|
}
|
||||||
gst_caps_unref (caps);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dvd_demux->mpeg_version = mpeg_version;
|
dvd_demux->mpeg_version = mpeg_version;
|
||||||
|
@ -484,7 +484,6 @@ gst_dvd_demux_get_audio_stream (GstMPEGDemux * mpeg_demux,
|
||||||
GstMPEGStream *str;
|
GstMPEGStream *str;
|
||||||
GstDVDLPCMStream *lpcm_str = NULL;
|
GstDVDLPCMStream *lpcm_str = NULL;
|
||||||
gboolean add_pad = FALSE;
|
gboolean add_pad = FALSE;
|
||||||
GstCaps *caps;
|
|
||||||
const gchar *codec = NULL, *lang_code = NULL;
|
const gchar *codec = NULL, *lang_code = NULL;
|
||||||
|
|
||||||
g_return_val_if_fail (stream_nr < GST_MPEG_DEMUX_NUM_AUDIO_STREAMS, NULL);
|
g_return_val_if_fail (stream_nr < GST_MPEG_DEMUX_NUM_AUDIO_STREAMS, NULL);
|
||||||
|
@ -576,7 +575,7 @@ gst_dvd_demux_get_audio_stream (GstMPEGDemux * mpeg_demux,
|
||||||
/* Determine the number of channels. */
|
/* Determine the number of channels. */
|
||||||
channels = ((sample_info >> 8) & 0x7) + 1;
|
channels = ((sample_info >> 8) & 0x7) + 1;
|
||||||
|
|
||||||
caps = gst_caps_new_simple ("audio/x-dvd-lpcm",
|
str->caps = gst_caps_new_simple ("audio/x-lpcm",
|
||||||
"width", G_TYPE_INT, width,
|
"width", G_TYPE_INT, width,
|
||||||
"rate", G_TYPE_INT, rate,
|
"rate", G_TYPE_INT, rate,
|
||||||
"channels", G_TYPE_INT, channels,
|
"channels", G_TYPE_INT, channels,
|
||||||
|
@ -595,12 +594,12 @@ gst_dvd_demux_get_audio_stream (GstMPEGDemux * mpeg_demux,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GST_DVD_DEMUX_AUDIO_AC3:
|
case GST_DVD_DEMUX_AUDIO_AC3:
|
||||||
caps = gst_caps_new_simple ("audio/x-ac3", NULL);
|
str->caps = gst_caps_new_simple ("audio/x-ac3", NULL);
|
||||||
codec = "AC-3 audio";
|
codec = "AC-3 audio";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GST_DVD_DEMUX_AUDIO_DTS:
|
case GST_DVD_DEMUX_AUDIO_DTS:
|
||||||
caps = gst_caps_new_simple ("audio/x-dts", NULL);
|
str->caps = gst_caps_new_simple ("audio/x-dts", NULL);
|
||||||
codec = "DTS audio";
|
codec = "DTS audio";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -609,15 +608,18 @@ gst_dvd_demux_get_audio_stream (GstMPEGDemux * mpeg_demux,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gst_pad_set_caps (str->pad, caps)) {
|
if (!gst_pad_set_caps (str->pad, str->caps)) {
|
||||||
GST_ELEMENT_ERROR (GST_ELEMENT (mpeg_demux),
|
GST_ELEMENT_ERROR (GST_ELEMENT (mpeg_demux),
|
||||||
CORE, NEGOTIATION, (NULL), ("failed to set caps on pad %s:%s",
|
CORE, NEGOTIATION, (NULL), ("failed to set caps on pad %s:%s",
|
||||||
gst_element_get_name (dvd_demux), gst_pad_get_name (str->pad)));
|
gst_element_get_name (dvd_demux), gst_pad_get_name (str->pad)));
|
||||||
|
gst_caps_unref (str->caps);
|
||||||
|
str->caps = NULL;
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (str->number == dvd_demux->cur_audio_nr) {
|
if (str->number == dvd_demux->cur_audio_nr) {
|
||||||
/* This is the current audio stream. Use the same caps. */
|
/* This is the current audio stream. Use the same caps. */
|
||||||
if (!gst_pad_set_caps (dvd_demux->cur_audio, gst_caps_copy (caps))) {
|
if (!gst_pad_set_caps (dvd_demux->cur_audio, str->caps)) {
|
||||||
GST_ELEMENT_ERROR (GST_ELEMENT (mpeg_demux),
|
GST_ELEMENT_ERROR (GST_ELEMENT (mpeg_demux),
|
||||||
CORE, NEGOTIATION, (NULL), ("failed to set caps on pad %s:%s",
|
CORE, NEGOTIATION, (NULL), ("failed to set caps on pad %s:%s",
|
||||||
gst_element_get_name (dvd_demux),
|
gst_element_get_name (dvd_demux),
|
||||||
|
@ -668,7 +670,6 @@ gst_dvd_demux_get_subpicture_stream (GstMPEGDemux * mpeg_demux,
|
||||||
GstDVDDemux *dvd_demux = GST_DVD_DEMUX (mpeg_demux);
|
GstDVDDemux *dvd_demux = GST_DVD_DEMUX (mpeg_demux);
|
||||||
GstMPEGStream *str;
|
GstMPEGStream *str;
|
||||||
gchar *name;
|
gchar *name;
|
||||||
GstCaps *caps;
|
|
||||||
gboolean add_pad = FALSE;
|
gboolean add_pad = FALSE;
|
||||||
const gchar *lang_code = NULL;
|
const gchar *lang_code = NULL;
|
||||||
|
|
||||||
|
@ -697,24 +698,26 @@ gst_dvd_demux_get_subpicture_stream (GstMPEGDemux * mpeg_demux,
|
||||||
|
|
||||||
if (str->type != GST_DVD_DEMUX_SUBP_DVD) {
|
if (str->type != GST_DVD_DEMUX_SUBP_DVD) {
|
||||||
/* We need to set new caps for this pad. */
|
/* We need to set new caps for this pad. */
|
||||||
caps = gst_caps_new_simple ("video/x-dvd-subpicture", NULL);
|
str->caps = gst_caps_new_simple ("video/x-dvd-subpicture", NULL);
|
||||||
|
|
||||||
if (!gst_pad_set_caps (str->pad, caps)) {
|
if (!gst_pad_set_caps (str->pad, str->caps)) {
|
||||||
GST_ELEMENT_ERROR (GST_ELEMENT (mpeg_demux),
|
GST_ELEMENT_ERROR (GST_ELEMENT (mpeg_demux),
|
||||||
CORE, NEGOTIATION, (NULL), ("failed to set caps on pad %s:%s",
|
CORE, NEGOTIATION, (NULL), ("failed to set caps on pad %s:%s",
|
||||||
gst_element_get_name (dvd_demux), gst_pad_get_name (str->pad)));
|
gst_element_get_name (dvd_demux), gst_pad_get_name (str->pad)));
|
||||||
|
gst_caps_unref (str->caps);
|
||||||
|
str->caps = NULL;
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (str->number == dvd_demux->cur_subpicture_nr) {
|
if (str->number == dvd_demux->cur_subpicture_nr) {
|
||||||
/* This is the current subpicture stream. Use the same caps. */
|
/* This is the current subpicture stream. Use the same caps. */
|
||||||
if (!gst_pad_set_caps (dvd_demux->cur_subpicture, caps)) {
|
if (!gst_pad_set_caps (dvd_demux->cur_subpicture, str->caps)) {
|
||||||
GST_ELEMENT_ERROR (GST_ELEMENT (mpeg_demux),
|
GST_ELEMENT_ERROR (GST_ELEMENT (mpeg_demux),
|
||||||
CORE, NEGOTIATION, (NULL), ("failed to set caps on pad %s:%s",
|
CORE, NEGOTIATION, (NULL), ("failed to set caps on pad %s:%s",
|
||||||
gst_element_get_name (dvd_demux), gst_pad_get_name (str->pad)));
|
gst_element_get_name (dvd_demux), gst_pad_get_name (str->pad)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_caps_unref (caps);
|
|
||||||
if (add_pad) {
|
if (add_pad) {
|
||||||
gst_element_add_pad (GST_ELEMENT (mpeg_demux), str->pad);
|
gst_element_add_pad (GST_ELEMENT (mpeg_demux), str->pad);
|
||||||
|
|
||||||
|
@ -950,6 +953,7 @@ gst_dvd_demux_send_subbuffer (GstMPEGDemux * mpeg_demux,
|
||||||
|
|
||||||
GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
|
GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
|
||||||
GST_BUFFER_OFFSET (outbuf) = GST_BUFFER_OFFSET (buffer) + offset;
|
GST_BUFFER_OFFSET (outbuf) = GST_BUFFER_OFFSET (buffer) + offset;
|
||||||
|
gst_buffer_set_caps (outbuf, outstream->caps);
|
||||||
|
|
||||||
ret = gst_pad_push (outpad, outbuf);
|
ret = gst_pad_push (outpad, outbuf);
|
||||||
}
|
}
|
||||||
|
|
|
@ -299,7 +299,6 @@ gst_mpeg_demux_get_video_stream (GstMPEGDemux * mpeg_demux,
|
||||||
GstMPEGStream *str;
|
GstMPEGStream *str;
|
||||||
GstMPEGVideoStream *video_str;
|
GstMPEGVideoStream *video_str;
|
||||||
gchar *name;
|
gchar *name;
|
||||||
GstCaps *caps;
|
|
||||||
gboolean set_caps = FALSE;
|
gboolean set_caps = FALSE;
|
||||||
|
|
||||||
g_return_val_if_fail (stream_nr < GST_MPEG_DEMUX_NUM_VIDEO_STREAMS, NULL);
|
g_return_val_if_fail (stream_nr < GST_MPEG_DEMUX_NUM_VIDEO_STREAMS, NULL);
|
||||||
|
@ -332,17 +331,17 @@ gst_mpeg_demux_get_video_stream (GstMPEGDemux * mpeg_demux,
|
||||||
GstTagList *list;
|
GstTagList *list;
|
||||||
|
|
||||||
/* We need to set new caps for this pad. */
|
/* We need to set new caps for this pad. */
|
||||||
caps = gst_caps_new_simple ("video/mpeg",
|
str->caps = gst_caps_new_simple ("video/mpeg",
|
||||||
"mpegversion", G_TYPE_INT, mpeg_version,
|
"mpegversion", G_TYPE_INT, mpeg_version,
|
||||||
"systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
|
"systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
|
||||||
if (!gst_pad_set_caps (str->pad, caps)) {
|
if (!gst_pad_set_caps (str->pad, str->caps)) {
|
||||||
GST_ELEMENT_ERROR (GST_ELEMENT (mpeg_demux),
|
GST_ELEMENT_ERROR (GST_ELEMENT (mpeg_demux),
|
||||||
CORE, NEGOTIATION, (NULL), ("failed to set caps"));
|
CORE, NEGOTIATION, (NULL), ("failed to set caps"));
|
||||||
gst_caps_unref (caps);
|
gst_caps_unref (str->caps);
|
||||||
|
str->caps = NULL;
|
||||||
gst_element_add_pad (GST_ELEMENT (mpeg_demux), str->pad);
|
gst_element_add_pad (GST_ELEMENT (mpeg_demux), str->pad);
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
gst_caps_unref (caps);
|
|
||||||
gst_element_add_pad (GST_ELEMENT (mpeg_demux), str->pad);
|
gst_element_add_pad (GST_ELEMENT (mpeg_demux), str->pad);
|
||||||
|
|
||||||
/* Store the current values. */
|
/* Store the current values. */
|
||||||
|
@ -366,7 +365,6 @@ gst_mpeg_demux_get_audio_stream (GstMPEGDemux * mpeg_demux,
|
||||||
{
|
{
|
||||||
GstMPEGStream *str;
|
GstMPEGStream *str;
|
||||||
gchar *name;
|
gchar *name;
|
||||||
GstCaps *caps;
|
|
||||||
gboolean set_caps = FALSE;
|
gboolean set_caps = FALSE;
|
||||||
|
|
||||||
g_return_val_if_fail (stream_nr < GST_MPEG_DEMUX_NUM_AUDIO_STREAMS, NULL);
|
g_return_val_if_fail (stream_nr < GST_MPEG_DEMUX_NUM_AUDIO_STREAMS, NULL);
|
||||||
|
@ -402,16 +400,16 @@ gst_mpeg_demux_get_audio_stream (GstMPEGDemux * mpeg_demux,
|
||||||
GstTagList *list;
|
GstTagList *list;
|
||||||
|
|
||||||
/* We need to set new caps for this pad. */
|
/* We need to set new caps for this pad. */
|
||||||
caps = gst_caps_new_simple ("audio/mpeg",
|
str->caps = gst_caps_new_simple ("audio/mpeg",
|
||||||
"mpegversion", G_TYPE_INT, 1, NULL);
|
"mpegversion", G_TYPE_INT, 1, NULL);
|
||||||
if (!gst_pad_set_caps (str->pad, caps)) {
|
if (!gst_pad_set_caps (str->pad, str->caps)) {
|
||||||
GST_ELEMENT_ERROR (GST_ELEMENT (mpeg_demux),
|
GST_ELEMENT_ERROR (GST_ELEMENT (mpeg_demux),
|
||||||
CORE, NEGOTIATION, (NULL), ("failed to set caps"));
|
CORE, NEGOTIATION, (NULL), ("failed to set caps"));
|
||||||
gst_caps_unref (caps);
|
gst_caps_unref (str->caps);
|
||||||
|
str->caps = NULL;
|
||||||
gst_element_add_pad (GST_ELEMENT (mpeg_demux), str->pad);
|
gst_element_add_pad (GST_ELEMENT (mpeg_demux), str->pad);
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
gst_caps_unref (caps);
|
|
||||||
gst_element_add_pad (GST_ELEMENT (mpeg_demux), str->pad);
|
gst_element_add_pad (GST_ELEMENT (mpeg_demux), str->pad);
|
||||||
|
|
||||||
/* stream metadata */
|
/* stream metadata */
|
||||||
|
|
|
@ -91,6 +91,7 @@ struct _GstMPEGStream {
|
||||||
gint type;
|
gint type;
|
||||||
gint number;
|
gint number;
|
||||||
GstPad *pad;
|
GstPad *pad;
|
||||||
|
GstCaps *caps;
|
||||||
gint index_id;
|
gint index_id;
|
||||||
gint size_bound;
|
gint size_bound;
|
||||||
GstClockTime cur_ts;
|
GstClockTime cur_ts;
|
||||||
|
|
Loading…
Reference in a new issue