examples/gstplay/player.c: Don't iterate.

Original commit message from CVS:
* examples/gstplay/player.c: (main):
Don't iterate.
* examples/seeking/seek.c: (fixate), (make_playerbin_pipeline):
Add visualizations.
* ext/a52dec/gsta52dec.c: (gst_a52dec_push),
(gst_a52dec_handle_frame):
Set duration.
* ext/dvdnav/gst-dvd:
Add audioconvert. Fixes #161325.
* ext/dvdread/dvdreadsrc.c: (dvdreadsrc_get):
Explicitely case to gint64. Possible valgrind error.
* gst-libs/gst/play/play.c: (caps_set), (setup_size),
(gst_play_tick_callback), (gst_play_change_state),
(gst_play_dispose), (gst_play_init), (gst_play_class_init),
(gst_play_set_location), (gst_play_get_location),
(gst_play_seek_to_time), (gst_play_set_data_src),
(gst_play_set_video_sink), (gst_play_set_audio_sink),
(gst_play_set_visualization), (gst_play_connect_visualization),
(gst_play_get_framerate), (gst_play_get_all_by_interface),
(gst_play_new):
Use playbin. Fixes #139749 and #147744.
* gst/apetag/apedemux.c: (gst_ape_demux_parse_tags):
Add genre tag.
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type),
(audioscale_get_type), (gst_audioscale_base_init),
(gst_audioscale_class_init), (gst_audioscale_expand_caps),
(gst_audioscale_getcaps), (gst_audioscale_fixate),
(gst_audioscale_link), (gst_audioscale_get_buffer),
(gst_audioscale_decrease_rate), (gst_audioscale_increase_rate),
(gst_audioscale_init), (gst_audioscale_dispose),
(gst_audioscale_chain), (gst_audioscale_set_property),
(gst_audioscale_get_property), (plugin_init):
Indent properly.
* gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_private):
Fix LPCM.
* gst/qtdemux/qtdemux.c: (qtdemux_parse_udta),
(qtdemux_tag_add_str), (qtdemux_tag_add_num),
(qtdemux_tag_add_gnre), (qtdemux_video_caps):
Add more metadata (fixes #162656).
This commit is contained in:
Ronald S. Bultje 2005-01-05 14:56:27 +00:00
parent 795f383c21
commit 6e1c77c85e
7 changed files with 473 additions and 1063 deletions

View file

@ -1,3 +1,45 @@
2005-01-05 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
* examples/gstplay/player.c: (main):
Don't iterate.
* examples/seeking/seek.c: (fixate), (make_playerbin_pipeline):
Add visualizations.
* ext/a52dec/gsta52dec.c: (gst_a52dec_push),
(gst_a52dec_handle_frame):
Set duration.
* ext/dvdnav/gst-dvd:
Add audioconvert. Fixes #161325.
* ext/dvdread/dvdreadsrc.c: (dvdreadsrc_get):
Explicitely case to gint64. Possible valgrind error.
* gst-libs/gst/play/play.c: (caps_set), (setup_size),
(gst_play_tick_callback), (gst_play_change_state),
(gst_play_dispose), (gst_play_init), (gst_play_class_init),
(gst_play_set_location), (gst_play_get_location),
(gst_play_seek_to_time), (gst_play_set_data_src),
(gst_play_set_video_sink), (gst_play_set_audio_sink),
(gst_play_set_visualization), (gst_play_connect_visualization),
(gst_play_get_framerate), (gst_play_get_all_by_interface),
(gst_play_new):
Use playbin. Fixes #139749 and #147744.
* gst/apetag/apedemux.c: (gst_ape_demux_parse_tags):
Add genre tag.
* gst/audioscale/gstaudioscale.c: (gst_audioscale_method_get_type),
(audioscale_get_type), (gst_audioscale_base_init),
(gst_audioscale_class_init), (gst_audioscale_expand_caps),
(gst_audioscale_getcaps), (gst_audioscale_fixate),
(gst_audioscale_link), (gst_audioscale_get_buffer),
(gst_audioscale_decrease_rate), (gst_audioscale_increase_rate),
(gst_audioscale_init), (gst_audioscale_dispose),
(gst_audioscale_chain), (gst_audioscale_set_property),
(gst_audioscale_get_property), (plugin_init):
Indent properly.
* gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_process_private):
Fix LPCM.
* gst/qtdemux/qtdemux.c: (qtdemux_parse_udta),
(qtdemux_tag_add_str), (qtdemux_tag_add_num),
(qtdemux_tag_add_gnre), (qtdemux_video_caps):
Add more metadata (fixes #162656).
2005-01-05 Thomas Vander Stichele <thomas at apestaart dot org> 2005-01-05 Thomas Vander Stichele <thomas at apestaart dot org>
* configure.ac: * configure.ac:

View file

@ -90,13 +90,6 @@ seek_timer (GstPlay * play)
return FALSE; return FALSE;
} }
static gboolean
idle_iterate (GstPlay * play)
{
gst_bin_iterate (GST_BIN (play));
return (GST_STATE (GST_ELEMENT (play)) == GST_STATE_PLAYING);
}
int int
main (int argc, char *argv[]) main (int argc, char *argv[])
{ {
@ -168,7 +161,6 @@ main (int argc, char *argv[])
GST_STATE_PLAYING) == GST_STATE_FAILURE) GST_STATE_PLAYING) == GST_STATE_FAILURE)
g_error ("Could not set state to PLAYING"); g_error ("Could not set state to PLAYING");
g_idle_add ((GSourceFunc) idle_iterate, play);
g_timeout_add (20000, (GSourceFunc) seek_timer, play); g_timeout_add (20000, (GSourceFunc) seek_timer, play);
g_main_loop_run (loop); g_main_loop_run (loop);

View file

@ -551,15 +551,45 @@ make_mpegnt_pipeline (const gchar * location)
return pipeline; return pipeline;
} }
static GstCaps *
fixate (GstPad * pad, const GstCaps * in_caps, gpointer data)
{
GstCaps *caps;
GstStructure *s;
if (gst_caps_get_size (in_caps) > 1)
return NULL;
/* nothing if fixed already */
s = gst_caps_get_structure (in_caps, 0);
if (gst_structure_has_field_typed (s, "width", G_TYPE_INT) &&
gst_structure_has_field_typed (s, "height", G_TYPE_INT) &&
gst_structure_has_field_typed (s, "framerate", G_TYPE_DOUBLE))
return NULL;
/* fixate */
caps = gst_caps_copy (in_caps);
s = gst_caps_get_structure (caps, 0);
gst_caps_structure_fixate_field_nearest_int (s, "width", 200);
gst_caps_structure_fixate_field_nearest_int (s, "height", 150);
gst_caps_structure_fixate_field_nearest_double (s, "framerate", 10.0);
return caps;
}
static GstElement * static GstElement *
make_playerbin_pipeline (const gchar * location) make_playerbin_pipeline (const gchar * location)
{ {
GstElement *player; GstElement *player, *vis;
player = gst_element_factory_make ("playbin", "player"); player = gst_element_factory_make ("playbin", "player");
vis = gst_element_factory_make ("synaesthesia", "vis");
g_assert (player); g_assert (player);
g_assert (vis);
g_object_set (G_OBJECT (player), "uri", location, NULL); g_signal_connect (gst_element_get_pad (vis, "src"), "fixate",
G_CALLBACK (fixate), NULL);
g_object_set (G_OBJECT (player), "uri", location, "vis-plugin", vis, NULL);
seekable_elements = g_list_prepend (seekable_elements, player); seekable_elements = g_list_prepend (seekable_elements, player);

File diff suppressed because it is too large Load diff

View file

@ -66,42 +66,43 @@ enum
"signed = (boolean) true") "signed = (boolean) true")
#if 0 #if 0
/* disabled because it segfaults */ /* disabled because it segfaults */
"audio/x-raw-float, " #define NOTHING "audio/x-raw-float, " \
"rate = (int) [ 1, MAX ], " "rate = (int) [ 1, MAX ], " \
"channels = (int) [ 1, MAX ], " "channels = (int) [ 1, MAX ], " \
"endianness = (int) BYTE_ORDER, " "width = (int) 32") "endianness = (int) BYTE_ORDER, " "width = (int) 32")
#endif #endif
static GstStaticPadTemplate gst_audioscale_sink_template = static GstStaticPadTemplate gst_audioscale_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink", GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK, GST_PAD_ALWAYS, SUPPORTED_CAPS); GST_PAD_SINK, GST_PAD_ALWAYS, SUPPORTED_CAPS);
static GstStaticPadTemplate gst_audioscale_src_template = static GstStaticPadTemplate gst_audioscale_src_template =
GST_STATIC_PAD_TEMPLATE ("src", GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC, GST_PAD_ALWAYS, SUPPORTED_CAPS); GST_PAD_SRC, GST_PAD_ALWAYS, SUPPORTED_CAPS);
#define GST_TYPE_AUDIOSCALE_METHOD (gst_audioscale_method_get_type()) #define GST_TYPE_AUDIOSCALE_METHOD (gst_audioscale_method_get_type())
static GType gst_audioscale_method_get_type (void) static GType
{ gst_audioscale_method_get_type (void)
static GType audioscale_method_type = 0;
static GEnumValue audioscale_methods[] =
{ {
{ static GType audioscale_method_type = 0;
GST_RESAMPLE_NEAREST, "0", "Nearest"} static GEnumValue audioscale_methods[] = {
, {
{ GST_RESAMPLE_NEAREST, "0", "Nearest"}
GST_RESAMPLE_BILINEAR, "1", "Bilinear"} ,
, { {
GST_RESAMPLE_SINC, "2", "Sinc"} GST_RESAMPLE_BILINEAR, "1", "Bilinear"}
, { , {
0, NULL, NULL} GST_RESAMPLE_SINC, "2", "Sinc"}
,}; , {
0, NULL, NULL}
,
};
if (!audioscale_method_type) { if (!audioscale_method_type) {
audioscale_method_type = g_enum_register_static ("GstAudioscaleMethod", audioscale_method_type = g_enum_register_static ("GstAudioscaleMethod",
audioscale_methods); audioscale_methods);
} }
return audioscale_method_type; return audioscale_method_type;
} }
static void gst_audioscale_base_init (gpointer g_class); static void gst_audioscale_base_init (gpointer g_class);
static void gst_audioscale_class_init (AudioscaleClass * klass); static void gst_audioscale_class_init (AudioscaleClass * klass);
@ -122,20 +123,21 @@ static GstElementClass *parent_class = NULL;
/*static guint gst_audioscale_signals[LAST_SIGNAL] = { 0 }; */ /*static guint gst_audioscale_signals[LAST_SIGNAL] = { 0 }; */
GType audioscale_get_type (void) GType
audioscale_get_type (void)
{ {
static GType audioscale_type = 0; static GType audioscale_type = 0;
if (!audioscale_type) if (!audioscale_type) {
{
static const GTypeInfo audioscale_info = { static const GTypeInfo audioscale_info = {
sizeof (AudioscaleClass), sizeof (AudioscaleClass),
gst_audioscale_base_init, gst_audioscale_base_init,
NULL, NULL,
(GClassInitFunc) gst_audioscale_class_init, (GClassInitFunc) gst_audioscale_class_init,
NULL, NULL,
NULL, NULL,
sizeof (Audioscale), 0, (GInstanceInitFunc) gst_audioscale_init,}; sizeof (Audioscale), 0, (GInstanceInitFunc) gst_audioscale_init,
};
audioscale_type = audioscale_type =
g_type_register_static (GST_TYPE_ELEMENT, "Audioscale", g_type_register_static (GST_TYPE_ELEMENT, "Audioscale",
@ -144,7 +146,8 @@ GType audioscale_get_type (void)
return audioscale_type; return audioscale_type;
} }
static void gst_audioscale_base_init (gpointer g_class) static void
gst_audioscale_base_init (gpointer g_class)
{ {
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class); GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
@ -156,7 +159,8 @@ static void gst_audioscale_base_init (gpointer g_class)
gst_element_class_set_details (gstelement_class, &gst_audioscale_details); gst_element_class_set_details (gstelement_class, &gst_audioscale_details);
} }
static void gst_audioscale_class_init (AudioscaleClass * klass) static void
gst_audioscale_class_init (AudioscaleClass * klass)
{ {
GObjectClass *gobject_class; GObjectClass *gobject_class;
GstElementClass *gstelement_class; GstElementClass *gstelement_class;
@ -185,25 +189,25 @@ static void gst_audioscale_class_init (AudioscaleClass * klass)
} }
static GstStaticCaps gst_audioscale_passthru_caps = static GstStaticCaps gst_audioscale_passthru_caps =
GST_STATIC_CAPS ("audio/x-raw-int, channels = [ 3, MAX ]"); GST_STATIC_CAPS ("audio/x-raw-int, channels = [ 3, MAX ]");
static GstStaticCaps gst_audioscale_convert_caps = static GstStaticCaps gst_audioscale_convert_caps =
GST_STATIC_CAPS ("audio/x-raw-int, channels = [ 1, 2 ]"); GST_STATIC_CAPS ("audio/x-raw-int, channels = [ 1, 2 ]");
static GstCaps *gst_audioscale_expand_caps (const GstCaps * caps) static GstCaps *
gst_audioscale_expand_caps (const GstCaps * caps)
{ {
GstCaps *caps1, *caps2; GstCaps *caps1, *caps2;
int i; int i;
caps1 = gst_caps_intersect (caps, caps1 = gst_caps_intersect (caps,
gst_static_caps_get (&gst_audioscale_passthru_caps)); gst_static_caps_get (&gst_audioscale_passthru_caps));
caps2 = gst_caps_intersect (caps, caps2 = gst_caps_intersect (caps,
gst_static_caps_get (&gst_audioscale_convert_caps)); gst_static_caps_get (&gst_audioscale_convert_caps));
for (i = 0; i < gst_caps_get_size (caps2); i++) for (i = 0; i < gst_caps_get_size (caps2); i++) {
{
GstStructure *structure = gst_caps_get_structure (caps2, i); GstStructure *structure = gst_caps_get_structure (caps2, i);
gst_structure_set (structure, "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT, gst_structure_set (structure, "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT,
NULL); NULL);
} }
@ -212,7 +216,8 @@ static GstCaps *gst_audioscale_expand_caps (const GstCaps * caps)
return caps1; return caps1;
} }
static GstCaps *gst_audioscale_getcaps (GstPad * pad) static GstCaps *
gst_audioscale_getcaps (GstPad * pad)
{ {
Audioscale *audioscale; Audioscale *audioscale;
GstPad *otherpad; GstPad *otherpad;
@ -230,7 +235,8 @@ static GstCaps *gst_audioscale_getcaps (GstPad * pad)
return caps; return caps;
} }
static GstCaps *gst_audioscale_fixate (GstPad * pad, const GstCaps * caps) static GstCaps *
gst_audioscale_fixate (GstPad * pad, const GstCaps * caps)
{ {
Audioscale *audioscale; Audioscale *audioscale;
gst_resample_t *r; gst_resample_t *r;
@ -239,13 +245,12 @@ static GstCaps *gst_audioscale_fixate (GstPad * pad, const GstCaps * caps)
GstCaps *copy; GstCaps *copy;
GstStructure *structure; GstStructure *structure;
audioscale = GST_AUDIOSCALE (gst_pad_get_parent (pad)); audioscale = GST_AUDIOSCALE (gst_pad_get_parent (pad));
r = &(audioscale->gst_resample_template); r = &(audioscale->gst_resample_template);
if (pad == audioscale->srcpad) { if (pad == audioscale->srcpad) {
otherpad = audioscale->sinkpad; otherpad = audioscale->sinkpad;
rate = r->i_rate; rate = r->i_rate;
} else } else {
{
otherpad = audioscale->srcpad; otherpad = audioscale->srcpad;
rate = r->o_rate; rate = r->o_rate;
} }
@ -262,7 +267,8 @@ static GstCaps *gst_audioscale_fixate (GstPad * pad, const GstCaps * caps)
return NULL; return NULL;
} }
static GstPadLinkReturn gst_audioscale_link (GstPad * pad, const GstCaps * caps) static GstPadLinkReturn
gst_audioscale_link (GstPad * pad, const GstCaps * caps)
{ {
Audioscale *audioscale; Audioscale *audioscale;
gst_resample_t *r; gst_resample_t *r;
@ -276,15 +282,14 @@ static GstPadLinkReturn gst_audioscale_link (GstPad * pad, const GstCaps * caps)
GstPad *otherpad; GstPad *otherpad;
GstCaps *copy; GstCaps *copy;
audioscale = GST_AUDIOSCALE (gst_pad_get_parent (pad)); audioscale = GST_AUDIOSCALE (gst_pad_get_parent (pad));
r = &(audioscale->gst_resample_template); r = &(audioscale->gst_resample_template);
if (pad == audioscale->srcpad) { if (pad == audioscale->srcpad) {
otherpad = audioscale->sinkpad; otherpad = audioscale->sinkpad;
rate = &r->o_rate; rate = &r->o_rate;
otherrate = &r->i_rate; otherrate = &r->i_rate;
} else } else {
{
otherpad = audioscale->srcpad; otherpad = audioscale->srcpad;
rate = &r->i_rate; rate = &r->i_rate;
otherrate = &r->o_rate; otherrate = &r->o_rate;
@ -380,26 +385,28 @@ static GstPadLinkReturn gst_audioscale_link (GstPad * pad, const GstCaps * caps)
return link_ret; return link_ret;
} }
static void *gst_audioscale_get_buffer (void *priv, unsigned int size) static void *
gst_audioscale_get_buffer (void *priv, unsigned int size)
{ {
Audioscale *audioscale = priv; Audioscale *audioscale = priv;
GST_DEBUG ("size requested: %u irate: %f orate: %f", size, GST_DEBUG ("size requested: %u irate: %f orate: %f", size,
audioscale->gst_resample->i_rate, audioscale->gst_resample->o_rate); audioscale->gst_resample->i_rate, audioscale->gst_resample->o_rate);
audioscale->outbuf = gst_buffer_new (); audioscale->outbuf = gst_buffer_new ();
GST_BUFFER_SIZE (audioscale->outbuf) = size; GST_BUFFER_SIZE (audioscale->outbuf) = size;
GST_BUFFER_DATA (audioscale->outbuf) = g_malloc (size); GST_BUFFER_DATA (audioscale->outbuf) = g_malloc (size);
GST_BUFFER_TIMESTAMP (audioscale->outbuf) = GST_BUFFER_TIMESTAMP (audioscale->outbuf) =
audioscale->gst_resample_offset * GST_SECOND / audioscale->gst_resample_offset * GST_SECOND /
audioscale->gst_resample->o_rate; audioscale->gst_resample->o_rate;
audioscale->gst_resample_offset += audioscale->gst_resample_offset +=
size / sizeof (gint16) / audioscale->gst_resample->channels; size / sizeof (gint16) / audioscale->gst_resample->channels;
return GST_BUFFER_DATA (audioscale->outbuf); return GST_BUFFER_DATA (audioscale->outbuf);
} }
/* reduces rate by factor of 2 */ /* reduces rate by factor of 2 */
GstBuffer *gst_audioscale_decrease_rate (Audioscale * audioscale, GstBuffer *
gst_audioscale_decrease_rate (Audioscale * audioscale,
GstBuffer * buf, double outrate, int cur_iteration) GstBuffer * buf, double outrate, int cur_iteration)
{ {
gint i, j, curoffset; gint i, j, curoffset;
@ -436,7 +443,8 @@ GstBuffer *gst_audioscale_decrease_rate (Audioscale * audioscale,
} }
/* increases rate by factor of 2 */ /* increases rate by factor of 2 */
GstBuffer *gst_audioscale_increase_rate (Audioscale * audioscale, GstBuffer *
gst_audioscale_increase_rate (Audioscale * audioscale,
GstBuffer * buf, double outrate, int cur_iteration) GstBuffer * buf, double outrate, int cur_iteration)
{ {
gint i, j, curoffset; gint i, j, curoffset;
@ -473,7 +481,8 @@ GstBuffer *gst_audioscale_increase_rate (Audioscale * audioscale,
return outbuf; return outbuf;
} }
static void gst_audioscale_init (Audioscale * audioscale) static void
gst_audioscale_init (Audioscale * audioscale)
{ {
gst_resample_t *r; gst_resample_t *r;
@ -516,7 +525,8 @@ static void gst_audioscale_init (Audioscale * audioscale)
audioscale->increase = FALSE; audioscale->increase = FALSE;
} }
static void gst_audioscale_dispose (GObject * object) static void
gst_audioscale_dispose (GObject * object)
{ {
Audioscale *audioscale = GST_AUDIOSCALE (object); Audioscale *audioscale = GST_AUDIOSCALE (object);
@ -532,7 +542,8 @@ static void gst_audioscale_dispose (GObject * object)
G_OBJECT_CLASS (parent_class)->dispose (object); G_OBJECT_CLASS (parent_class)->dispose (object);
} }
static void gst_audioscale_chain (GstPad * pad, GstData * _data) static void
gst_audioscale_chain (GstPad * pad, GstData * _data)
{ {
GstBuffer *buf = GST_BUFFER (_data); GstBuffer *buf = GST_BUFFER (_data);
GstBuffer *tempbuf, *tempbuf2; GstBuffer *tempbuf, *tempbuf2;
@ -596,7 +607,8 @@ static void gst_audioscale_chain (GstPad * pad, GstData * _data)
} }
static GstElementStateReturn gst_audioscale_change_state (GstElement * element) static GstElementStateReturn
gst_audioscale_change_state (GstElement * element)
{ {
Audioscale *audioscale = GST_AUDIOSCALE (element); Audioscale *audioscale = GST_AUDIOSCALE (element);
@ -612,16 +624,16 @@ static GstElementStateReturn gst_audioscale_change_state (GstElement * element)
} }
static void static void
gst_audioscale_set_property (GObject * object, guint prop_id, gst_audioscale_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec) const GValue * value, GParamSpec * pspec)
{ {
Audioscale *src; Audioscale *src;
gst_resample_t *r; gst_resample_t *r;
/* it's not null if we got it, but it might not be ours */ /* it's not null if we got it, but it might not be ours */
g_return_if_fail (GST_IS_AUDIOSCALE (object)); g_return_if_fail (GST_IS_AUDIOSCALE (object));
src = GST_AUDIOSCALE (object); src = GST_AUDIOSCALE (object);
r = &(src->gst_resample_template); r = &(src->gst_resample_template);
switch (prop_id) { switch (prop_id) {
case ARG_FILTERLEN: case ARG_FILTERLEN:
@ -629,9 +641,11 @@ static void
GST_DEBUG_OBJECT (GST_ELEMENT (src), "new filter length %d\n", GST_DEBUG_OBJECT (GST_ELEMENT (src), "new filter length %d\n",
r->filter_length); r->filter_length);
break; break;
case ARG_METHOD:r->method = g_value_get_enum (value); case ARG_METHOD:
r->method = g_value_get_enum (value);
break; break;
default:G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
} }
@ -639,7 +653,7 @@ static void
} }
static void static void
gst_audioscale_get_property (GObject * object, guint prop_id, gst_audioscale_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec) GValue * value, GParamSpec * pspec)
{ {
Audioscale *src; Audioscale *src;
@ -662,7 +676,8 @@ static void
} }
static gboolean plugin_init (GstPlugin * plugin) static gboolean
plugin_init (GstPlugin * plugin)
{ {
/* load support library */ /* load support library */
if (!gst_library_load ("gstresample")) if (!gst_library_load ("gstresample"))

View file

@ -551,15 +551,45 @@ make_mpegnt_pipeline (const gchar * location)
return pipeline; return pipeline;
} }
static GstCaps *
fixate (GstPad * pad, const GstCaps * in_caps, gpointer data)
{
GstCaps *caps;
GstStructure *s;
if (gst_caps_get_size (in_caps) > 1)
return NULL;
/* nothing if fixed already */
s = gst_caps_get_structure (in_caps, 0);
if (gst_structure_has_field_typed (s, "width", G_TYPE_INT) &&
gst_structure_has_field_typed (s, "height", G_TYPE_INT) &&
gst_structure_has_field_typed (s, "framerate", G_TYPE_DOUBLE))
return NULL;
/* fixate */
caps = gst_caps_copy (in_caps);
s = gst_caps_get_structure (caps, 0);
gst_caps_structure_fixate_field_nearest_int (s, "width", 200);
gst_caps_structure_fixate_field_nearest_int (s, "height", 150);
gst_caps_structure_fixate_field_nearest_double (s, "framerate", 10.0);
return caps;
}
static GstElement * static GstElement *
make_playerbin_pipeline (const gchar * location) make_playerbin_pipeline (const gchar * location)
{ {
GstElement *player; GstElement *player, *vis;
player = gst_element_factory_make ("playbin", "player"); player = gst_element_factory_make ("playbin", "player");
vis = gst_element_factory_make ("synaesthesia", "vis");
g_assert (player); g_assert (player);
g_assert (vis);
g_object_set (G_OBJECT (player), "uri", location, NULL); g_signal_connect (gst_element_get_pad (vis, "src"), "fixate",
G_CALLBACK (fixate), NULL);
g_object_set (G_OBJECT (player), "uri", location, "vis-plugin", vis, NULL);
seekable_elements = g_list_prepend (seekable_elements, player); seekable_elements = g_list_prepend (seekable_elements, player);

View file

@ -90,13 +90,6 @@ seek_timer (GstPlay * play)
return FALSE; return FALSE;
} }
static gboolean
idle_iterate (GstPlay * play)
{
gst_bin_iterate (GST_BIN (play));
return (GST_STATE (GST_ELEMENT (play)) == GST_STATE_PLAYING);
}
int int
main (int argc, char *argv[]) main (int argc, char *argv[])
{ {
@ -168,7 +161,6 @@ main (int argc, char *argv[])
GST_STATE_PLAYING) == GST_STATE_FAILURE) GST_STATE_PLAYING) == GST_STATE_FAILURE)
g_error ("Could not set state to PLAYING"); g_error ("Could not set state to PLAYING");
g_idle_add ((GSourceFunc) idle_iterate, play);
g_timeout_add (20000, (GSourceFunc) seek_timer, play); g_timeout_add (20000, (GSourceFunc) seek_timer, play);
g_main_loop_run (loop); g_main_loop_run (loop);