From: Tim-Philipp Müller Date: Wed, 17 Oct 2012 23:39:42 +0000 (+0100) Subject: alsa: if no formats in native endianness could be detected, try non-native endianness... X-Git-Tag: 1.19.3~511^2~5831 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1a69ec3fd31dfeb4ba0abd52557c15eaa3fd19b8;p=platform%2Fupstream%2Fgstreamer.git alsa: if no formats in native endianness could be detected, try non-native endianness as well This can happen, e.g. when using an USB sound card on a big-endian device https://bugzilla.gnome.org/show_bug.cgi?id=680904 --- diff --git a/ext/alsa/gstalsa.c b/ext/alsa/gstalsa.c index a6fc0c8..13b0fae 100644 --- a/ext/alsa/gstalsa.c +++ b/ext/alsa/gstalsa.c @@ -497,10 +497,20 @@ gst_alsa_probe_supported_formats (GstObject * obj, gchar * device, stream_type = snd_pcm_stream (handle); - caps = gst_caps_copy (template_caps); + caps = gst_alsa_detect_formats (obj, hw_params, + gst_caps_copy (template_caps), G_BYTE_ORDER); - if (!(caps = gst_alsa_detect_formats (obj, hw_params, caps, G_BYTE_ORDER))) - goto subroutine_error; + /* if there are no formats in native endianness, try non-native as well */ + if (caps == NULL) { + GST_INFO_OBJECT (obj, "no formats in native endianness detected"); + + caps = gst_alsa_detect_formats (obj, hw_params, + gst_caps_copy (template_caps), + (G_BYTE_ORDER == G_LITTLE_ENDIAN) ? G_BIG_ENDIAN : G_LITTLE_ENDIAN); + + if (caps == NULL) + goto subroutine_error; + } if (!(caps = gst_alsa_detect_rates (obj, hw_params, caps))) goto subroutine_error; @@ -533,7 +543,7 @@ subroutine_error: { GST_ERROR_OBJECT (obj, "failed to query formats"); snd_pcm_hw_params_free (hw_params); - gst_caps_unref (caps); + gst_caps_replace (&caps, NULL); return NULL; } }