]> code.delx.au - pulseaudio/commitdiff
core-format: Add pa_format_info_get_sample_format()
authorTanu Kaskinen <tanu.kaskinen@linux.intel.com>
Mon, 25 Nov 2013 14:15:54 +0000 (16:15 +0200)
committerTanu Kaskinen <tanu.kaskinen@linux.intel.com>
Wed, 8 Jan 2014 19:26:39 +0000 (21:26 +0200)
src/pulse/format.c
src/pulsecore/core-format.c
src/pulsecore/core-format.h

index 9c7e13e01e4d2ab3a47e2c83d7f77e6d3021b51f..0b87560ecdd5a0c8239df5a7249e95b9041c8c9e 100644 (file)
@@ -218,7 +218,7 @@ pa_format_info* pa_format_info_from_sample_spec(pa_sample_spec *ss, pa_channel_m
 
 /* For PCM streams */
 int pa_format_info_to_sample_spec(pa_format_info *f, pa_sample_spec *ss, pa_channel_map *map) {
-    char *sf = NULL, *m = NULL;
+    char *m = NULL;
     int rate, channels;
     int ret = -PA_ERR_INVALID;
 
@@ -228,16 +228,13 @@ int pa_format_info_to_sample_spec(pa_format_info *f, pa_sample_spec *ss, pa_chan
     if (!pa_format_info_is_pcm(f))
         return pa_format_info_to_sample_spec_fake(f, ss, map);
 
-    if (pa_format_info_get_prop_string(f, PA_PROP_FORMAT_SAMPLE_FORMAT, &sf))
+    if (pa_format_info_get_sample_format(f, &ss->format) < 0)
         goto out;
     if (pa_format_info_get_prop_int(f, PA_PROP_FORMAT_RATE, &rate))
         goto out;
     if (pa_format_info_get_prop_int(f, PA_PROP_FORMAT_CHANNELS, &channels))
         goto out;
 
-    if ((ss->format = pa_parse_sample_format(sf)) == PA_SAMPLE_INVALID)
-        goto out;
-
     ss->rate = (uint32_t) rate;
     ss->channels = (uint8_t) channels;
 
@@ -252,8 +249,6 @@ int pa_format_info_to_sample_spec(pa_format_info *f, pa_sample_spec *ss, pa_chan
     ret = 0;
 
 out:
-    if (sf)
-        pa_xfree(sf);
     if (m)
         pa_xfree(m);
 
index 6e7c1fb5bc97f2123df80c57bb12cb12a3ab0c3c..cb65e9e018502d9357bd72ccbf641dda68e5b9a8 100644 (file)
 #include "core-format.h"
 
 #include <pulse/def.h>
+#include <pulse/xmalloc.h>
 
 #include <pulsecore/macro.h>
 
+int pa_format_info_get_sample_format(pa_format_info *f, pa_sample_format_t *sf) {
+    int r;
+    char *sf_str;
+    pa_sample_format_t sf_local;
+
+    pa_assert(f);
+    pa_assert(sf);
+
+    r = pa_format_info_get_prop_string(f, PA_PROP_FORMAT_SAMPLE_FORMAT, &sf_str);
+    if (r < 0)
+        return r;
+
+    sf_local = pa_parse_sample_format(sf_str);
+    pa_xfree(sf_str);
+
+    if (!pa_sample_format_valid(sf_local)) {
+        pa_log_debug("Invalid sample format.");
+        return -PA_ERR_INVALID;
+    }
+
+    *sf = sf_local;
+
+    return 0;
+}
+
 int pa_format_info_to_sample_spec_fake(pa_format_info *f, pa_sample_spec *ss, pa_channel_map *map) {
     int rate;
 
index ef2c8dc59f85dae370ffca2ed7ec9c0ac55cb889..829973059769e3a0e672188e56ff608e484d12f4 100644 (file)
 
 #include <pulse/format.h>
 
+/* Gets the sample format stored in the format info. Returns a negative error
+ * code on failure. If the sample format property is not set at all, returns
+ * -PA_ERR_NOENTITY. */
+int pa_format_info_get_sample_format(pa_format_info *f, pa_sample_format_t *sf);
+
 /* For compressed formats. Converts the format info into a sample spec and a
  * channel map that an ALSA device can use as its configuration parameters when
  * playing back the compressed data. That is, the returned sample spec doesn't