mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
sync with vorbisfile and media info stuff
Original commit message from CVS: sync with vorbisfile and media info stuff
This commit is contained in:
parent
a2823982a1
commit
73280091a3
1 changed files with 53 additions and 1 deletions
|
@ -68,6 +68,7 @@ struct _GstMad {
|
||||||
gboolean ignore_crc;
|
gboolean ignore_crc;
|
||||||
|
|
||||||
GstCaps *metadata;
|
GstCaps *metadata;
|
||||||
|
GstCaps *streaminfo;
|
||||||
|
|
||||||
/* negotiated format */
|
/* negotiated format */
|
||||||
gint rate;
|
gint rate;
|
||||||
|
@ -104,6 +105,7 @@ enum {
|
||||||
ARG_HALF,
|
ARG_HALF,
|
||||||
ARG_IGNORE_CRC,
|
ARG_IGNORE_CRC,
|
||||||
ARG_METADATA,
|
ARG_METADATA,
|
||||||
|
ARG_STREAMINFO
|
||||||
/* FILL ME */
|
/* FILL ME */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -281,6 +283,9 @@ gst_mad_class_init (GstMadClass *klass)
|
||||||
g_object_class_install_property (gobject_class, ARG_METADATA,
|
g_object_class_install_property (gobject_class, ARG_METADATA,
|
||||||
g_param_spec_boxed ("metadata", "Metadata", "Metadata",
|
g_param_spec_boxed ("metadata", "Metadata", "Metadata",
|
||||||
GST_TYPE_CAPS, G_PARAM_READABLE));
|
GST_TYPE_CAPS, G_PARAM_READABLE));
|
||||||
|
g_object_class_install_property (gobject_class, ARG_STREAMINFO,
|
||||||
|
g_param_spec_boxed ("streaminfo", "Streaminfo", "Streaminfo",
|
||||||
|
GST_TYPE_CAPS, G_PARAM_READABLE));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -723,6 +728,9 @@ gst_mad_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec
|
||||||
case ARG_METADATA:
|
case ARG_METADATA:
|
||||||
g_value_set_boxed (value, mad->metadata);
|
g_value_set_boxed (value, mad->metadata);
|
||||||
break;
|
break;
|
||||||
|
case ARG_STREAMINFO:
|
||||||
|
g_value_set_boxed (value, mad->streaminfo);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
@ -902,6 +910,45 @@ fail:
|
||||||
|
|
||||||
return caps;
|
return caps;
|
||||||
}
|
}
|
||||||
|
static GstCaps *
|
||||||
|
gst_mad_get_streaminfo (GstMad *mad)
|
||||||
|
{
|
||||||
|
GstCaps *caps;
|
||||||
|
GstProps *props;
|
||||||
|
GstPropsEntry *entry;
|
||||||
|
GEnumValue *value;
|
||||||
|
GEnumClass *klass;
|
||||||
|
|
||||||
|
props = gst_props_empty_new ();
|
||||||
|
|
||||||
|
entry = gst_props_entry_new ("layer", GST_PROPS_INT (mad->header.layer));
|
||||||
|
gst_props_add_entry (props, (GstPropsEntry *) entry);
|
||||||
|
|
||||||
|
klass = g_type_class_ref (GST_TYPE_MAD_MODE);
|
||||||
|
value = g_enum_get_value (klass,
|
||||||
|
mad->header.mode);
|
||||||
|
entry = gst_props_entry_new ("mode", GST_PROPS_STRING (value->value_nick));
|
||||||
|
g_type_class_unref (klass);
|
||||||
|
gst_props_add_entry (props, (GstPropsEntry *) entry);
|
||||||
|
|
||||||
|
klass = g_type_class_ref (GST_TYPE_MAD_EMPHASIS);
|
||||||
|
value = g_enum_get_value (klass,
|
||||||
|
mad->header.emphasis);
|
||||||
|
entry = gst_props_entry_new ("emphasis", GST_PROPS_STRING (value->value_nick));
|
||||||
|
g_type_class_unref (klass);
|
||||||
|
gst_props_add_entry (props, (GstPropsEntry *) entry);
|
||||||
|
|
||||||
|
/*
|
||||||
|
entry = gst_props_entry_new ("emphasis", GST_PROPS_INT ( mad->header.layer));
|
||||||
|
gst_props_add_entry (props, (GstPropsEntry *) entry);
|
||||||
|
*/
|
||||||
|
|
||||||
|
caps = gst_caps_new ("mad_streaminfo",
|
||||||
|
"application/x-gst-streaminfo",
|
||||||
|
props);
|
||||||
|
return caps;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_mad_chain (GstPad *pad, GstBuffer *buffer)
|
gst_mad_chain (GstPad *pad, GstBuffer *buffer)
|
||||||
|
@ -1070,7 +1117,11 @@ gst_mad_chain (GstPad *pad, GstBuffer *buffer)
|
||||||
if (mad->channels != nchannels || mad->rate != rate) {
|
if (mad->channels != nchannels || mad->rate != rate) {
|
||||||
if (mad->stream.options & MAD_OPTION_HALFSAMPLERATE)
|
if (mad->stream.options & MAD_OPTION_HALFSAMPLERATE)
|
||||||
rate >>=1;
|
rate >>=1;
|
||||||
|
mad->streaminfo = gst_mad_get_streaminfo (mad);
|
||||||
|
g_object_notify (G_OBJECT (mad), "streaminfo");
|
||||||
|
|
||||||
|
/* we set the caps even when the pad is not connected so they
|
||||||
|
* can be gotten for streaminfo */
|
||||||
if (gst_pad_try_set_caps (mad->srcpad,
|
if (gst_pad_try_set_caps (mad->srcpad,
|
||||||
gst_caps_new (
|
gst_caps_new (
|
||||||
"mad_src",
|
"mad_src",
|
||||||
|
@ -1087,7 +1138,8 @@ gst_mad_chain (GstPad *pad, GstBuffer *buffer)
|
||||||
NULL))) <= 0)
|
NULL))) <= 0)
|
||||||
{
|
{
|
||||||
gst_buffer_unref (buffer);
|
gst_buffer_unref (buffer);
|
||||||
gst_element_error (GST_ELEMENT (mad), "could not set caps on source pad, aborting...");
|
gst_element_error (GST_ELEMENT (mad),
|
||||||
|
"could not set caps on source pad, aborting...");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mad->channels = nchannels;
|
mad->channels = nchannels;
|
||||||
|
|
Loading…
Reference in a new issue