gst/audioresample/gstaudioresample.c: Fixate the rate to the nearest supported rate instead of the first one. Fixes b...

Original commit message from CVS:
* gst/audioresample/gstaudioresample.c:
(gst_audioresample_class_init), (audioresample_fixate_caps):
Fixate the rate to the nearest supported rate instead of
the first one. Fixes bug #549510.
This commit is contained in:
Sebastian Dröge 2008-10-28 16:25:00 +00:00
parent 08489d15ed
commit 70348d7327
2 changed files with 27 additions and 0 deletions

View file

@ -1,3 +1,10 @@
2008-10-28 Sebastian Dröge <sebastian.droege@collabora.co.uk>
* gst/audioresample/gstaudioresample.c:
(gst_audioresample_class_init), (audioresample_fixate_caps):
Fixate the rate to the nearest supported rate instead of
the first one. Fixes bug #549510.
2008-10-27 Wim Taymans <wim.taymans@collabora.co.uk> 2008-10-27 Wim Taymans <wim.taymans@collabora.co.uk>
* win32/common/libgstaudio.def: * win32/common/libgstaudio.def:

View file

@ -112,6 +112,8 @@ static gboolean audioresample_get_unit_size (GstBaseTransform * base,
GstCaps * caps, guint * size); GstCaps * caps, guint * size);
static GstCaps *audioresample_transform_caps (GstBaseTransform * base, static GstCaps *audioresample_transform_caps (GstBaseTransform * base,
GstPadDirection direction, GstCaps * caps); GstPadDirection direction, GstCaps * caps);
static void audioresample_fixate_caps (GstBaseTransform * base,
GstPadDirection direction, GstCaps * caps, GstCaps * othercaps);
static gboolean audioresample_transform_size (GstBaseTransform * trans, static gboolean audioresample_transform_size (GstBaseTransform * trans,
GstPadDirection direction, GstCaps * incaps, guint insize, GstPadDirection direction, GstCaps * incaps, guint insize,
GstCaps * outcaps, guint * outsize); GstCaps * outcaps, guint * outsize);
@ -172,6 +174,8 @@ gst_audioresample_class_init (GstAudioresampleClass * klass)
GST_DEBUG_FUNCPTR (audioresample_get_unit_size); GST_DEBUG_FUNCPTR (audioresample_get_unit_size);
GST_BASE_TRANSFORM_CLASS (klass)->transform_caps = GST_BASE_TRANSFORM_CLASS (klass)->transform_caps =
GST_DEBUG_FUNCPTR (audioresample_transform_caps); GST_DEBUG_FUNCPTR (audioresample_transform_caps);
GST_BASE_TRANSFORM_CLASS (klass)->fixate_caps =
GST_DEBUG_FUNCPTR (audioresample_fixate_caps);
GST_BASE_TRANSFORM_CLASS (klass)->set_caps = GST_BASE_TRANSFORM_CLASS (klass)->set_caps =
GST_DEBUG_FUNCPTR (audioresample_set_caps); GST_DEBUG_FUNCPTR (audioresample_set_caps);
GST_BASE_TRANSFORM_CLASS (klass)->transform = GST_BASE_TRANSFORM_CLASS (klass)->transform =
@ -272,6 +276,22 @@ audioresample_transform_caps (GstBaseTransform * base,
return res; return res;
} }
/* Fixate rate to the allowed rate that has the smallest difference */
static void
audioresample_fixate_caps (GstBaseTransform * base,
GstPadDirection direction, GstCaps * caps, GstCaps * othercaps)
{
GstStructure *s;
gint rate;
s = gst_caps_get_structure (caps, 0);
if (!gst_structure_get_int (s, "rate", &rate))
return;
s = gst_caps_get_structure (othercaps, 0);
gst_structure_fixate_field_nearest_int (s, "rate", rate);
}
static gboolean static gboolean
resample_set_state_from_caps (ResampleState * state, GstCaps * incaps, resample_set_state_from_caps (ResampleState * state, GstCaps * incaps,
GstCaps * outcaps, gint * channels, gint * inrate, gint * outrate) GstCaps * outcaps, gint * channels, gint * inrate, gint * outrate)