ext/faad/gstfaad.c: Fix negotiation.

Original commit message from CVS:
* ext/faad/gstfaad.c: (gst_faad_init), (gst_faad_srcgetcaps),
(gst_faad_chain): Fix negotiation.
* ext/librfb/gstrfbsrc.c: (gst_rfbsrc_handle_src_event): Add
key and button events.
* gst-libs/gst/floatcast/floatcast.h: Fix a minor bug in this
dung heap of code.
* gst-libs/gst/gconf/gstreamer-gconf-uninstalled.pc.in: gstgconf
depends on gconf
* gst-libs/gst/gconf/gstreamer-gconf.pc.in: same
* gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
(gst_play_video_fixate), (gst_play_audio_fixate): Add a fixate
function to encourage better negotiation, particularly between
audioconvert and osssink.
* gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain):
* gst/qtdemux/qtdemux.c: (qtdemux_parse_trak):  Make some debugging
more important.
* gst/typefind/gsttypefindfunctions.c:  Fix mistake in flash
typefinding.
* gst/vbidec/vbiscreen.c:  Add glib header
* pkgconfig/gstreamer-play.pc.in:  Depends on gst-interfaces.
This commit is contained in:
David Schleef 2004-03-06 00:42:19 +00:00
parent 31116a2634
commit 2fad4a4a43
3 changed files with 91 additions and 2 deletions

View file

@ -1,3 +1,26 @@
2004-03-05 David Schleef <ds@schleef.org>
* ext/faad/gstfaad.c: (gst_faad_init), (gst_faad_srcgetcaps),
(gst_faad_chain): Fix negotiation.
* ext/librfb/gstrfbsrc.c: (gst_rfbsrc_handle_src_event): Add
key and button events.
* gst-libs/gst/floatcast/floatcast.h: Fix a minor bug in this
dung heap of code.
* gst-libs/gst/gconf/gstreamer-gconf-uninstalled.pc.in: gstgconf
depends on gconf
* gst-libs/gst/gconf/gstreamer-gconf.pc.in: same
* gst-libs/gst/play/play.c: (gst_play_pipeline_setup),
(gst_play_video_fixate), (gst_play_audio_fixate): Add a fixate
function to encourage better negotiation, particularly between
audioconvert and osssink.
* gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain):
* gst/qtdemux/qtdemux.c: (qtdemux_parse_trak): Make some debugging
more important.
* gst/typefind/gsttypefindfunctions.c: Fix mistake in flash
typefinding.
* gst/vbidec/vbiscreen.c: Add glib header
* pkgconfig/gstreamer-play.pc.in: Depends on gst-interfaces.
2004-03-06 Christophe Fergeau <teuf@users.sourceforge.net>
* ext/mad/gstmad.c: Fix detection of Xing headers

View file

@ -52,8 +52,8 @@ G_BEGIN_DECLS
#else
/* use a standard c cast, but do rounding correctly */
#define gst_cast_float(x) ((x)>=0?(gint)((x)+0.5):(gint)((x)-0.5))
#define gst_cast_double(x) ((x)>=0?(gint)((x)+0.5):(gint)((x)-0.5))
#define gst_cast_float(x) ((gint)floor((x)+0.5))
#define gst_cast_double(x) ((gint)floor((x)+0.5))
#endif

View file

@ -67,6 +67,9 @@ static GstPipelineClass *parent_class = NULL;
/* */
/* ======================================================= */
static GstCaps * gst_play_video_fixate (GstPad *pad, const GstCaps *caps, gpointer user_data);
static GstCaps * gst_play_audio_fixate (GstPad *pad, const GstCaps *caps, gpointer user_data);
static GQuark
gst_play_error_quark (void)
{
@ -275,6 +278,8 @@ gst_play_pipeline_setup (GstPlay *play, GError **error)
/* Software scaling of video stream */
GST_PLAY_MAKE_OR_ERROR (video_scaler, "videoscale", "video_scaler", error);
g_hash_table_insert (play->priv->elements, "video_scaler", video_scaler);
g_signal_connect (gst_element_get_pad(video_scaler, "src"), "fixate",
G_CALLBACK (gst_play_video_fixate), play);
/* Placeholder for future video sink bin */
GST_PLAY_MAKE_OR_ERROR (video_sink, "fakesink", "video_sink", error);
@ -315,6 +320,8 @@ gst_play_pipeline_setup (GstPlay *play, GError **error)
/* Volume control */
GST_PLAY_MAKE_OR_ERROR (volume, "volume", "volume", error);
g_hash_table_insert (play->priv->elements, "volume", volume);
g_signal_connect (gst_element_get_pad(volume, "src"), "fixate",
G_CALLBACK (gst_play_audio_fixate), play);
/* Placeholder for future audio sink bin */
GST_PLAY_MAKE_OR_ERROR (audio_sink, "fakesink", "audio_sink", error);
@ -434,6 +441,65 @@ gst_play_get_length_callback (GstPlay *play)
return TRUE;
}
static GstCaps *
gst_play_video_fixate (GstPad *pad, const GstCaps *caps, gpointer user_data)
{
GstStructure *structure;
GstCaps *newcaps;
GST_DEBUG ("video fixate %p %" GST_PTR_FORMAT, pad, caps);
if (gst_caps_get_size (caps) > 1) return NULL;
newcaps = gst_caps_copy (caps);
structure = gst_caps_get_structure (newcaps, 0);
if (gst_caps_structure_fixate_field_nearest_int (structure, "width", 320)) {
return newcaps;
}
if (gst_caps_structure_fixate_field_nearest_int (structure, "height", 240)) {
return newcaps;
}
if (gst_caps_structure_fixate_field_nearest_double (structure, "framerate",
30.0)) {
return newcaps;
}
/* failed to fixate */
gst_caps_free (newcaps);
return NULL;
}
static GstCaps *
gst_play_audio_fixate (GstPad *pad, const GstCaps *caps, gpointer user_data)
{
GstCaps *newcaps;
GstStructure *structure;
GST_DEBUG ("audio fixate %p %" GST_PTR_FORMAT, pad, caps);
newcaps = gst_caps_new_full (gst_structure_copy (
gst_caps_get_structure (caps, 0)), NULL);
structure = gst_caps_get_structure (newcaps, 0);
if (gst_caps_structure_fixate_field_nearest_int (structure, "rate", 44100)) {
return newcaps;
}
if (gst_caps_structure_fixate_field_nearest_int (structure, "depth", 16)) {
return newcaps;
}
if (gst_caps_structure_fixate_field_nearest_int (structure, "width", 16)) {
return newcaps;
}
if (gst_caps_structure_fixate_field_nearest_int (structure, "channels", 2)) {
return newcaps;
}
gst_caps_free (newcaps);
return NULL;
}
static void
gst_play_state_change (GstElement *element, GstElementState old,
GstElementState state)