audioconvert: improve fixation

This commit is contained in:
Wim Taymans 2012-02-27 12:52:07 +01:00
parent 55076379b2
commit ef980bc09b

View file

@ -590,34 +590,30 @@ gst_audio_convert_fixate_caps (GstBaseTransform * base,
GstPadDirection direction, GstCaps * caps, GstCaps * othercaps) GstPadDirection direction, GstCaps * caps, GstCaps * othercaps)
{ {
GstStructure *ins, *outs; GstStructure *ins, *outs;
gint rate; GstCaps *result;
const gchar *fmt;
othercaps = gst_caps_make_writable (othercaps);
GST_DEBUG_OBJECT (base, "trying to fixate othercaps %" GST_PTR_FORMAT GST_DEBUG_OBJECT (base, "trying to fixate othercaps %" GST_PTR_FORMAT
" based on caps %" GST_PTR_FORMAT, othercaps, caps); " based on caps %" GST_PTR_FORMAT, othercaps, caps);
result = gst_caps_intersect (othercaps, caps);
if (gst_caps_is_empty (result)) {
result = othercaps;
} else {
gst_caps_unref (othercaps);
}
/* fixate remaining fields */
result = gst_caps_make_writable (result);
ins = gst_caps_get_structure (caps, 0); ins = gst_caps_get_structure (caps, 0);
outs = gst_caps_get_structure (othercaps, 0); outs = gst_caps_get_structure (result, 0);
gst_audio_convert_fixate_channels (base, ins, outs); gst_audio_convert_fixate_channels (base, ins, outs);
gst_caps_fixate (result);
if ((fmt = gst_structure_get_string (ins, "format"))) { GST_DEBUG_OBJECT (base, "fixated othercaps to %" GST_PTR_FORMAT, result);
/* FIXME, find the best format */
gst_structure_fixate_field_string (outs, "format", fmt);
}
if (gst_structure_get_int (ins, "rate", &rate)) { return result;
if (gst_structure_has_field (outs, "rate")) {
gst_structure_fixate_field_nearest_int (outs, "rate", rate);
}
}
gst_caps_truncate (othercaps);
GST_DEBUG_OBJECT (base, "fixated othercaps to %" GST_PTR_FORMAT, othercaps);
return othercaps;
} }
static gboolean static gboolean