tinyalsasink: Use int type if we support a single rate/channel count
authorArun Raghavan <arun@centricular.com>
Tue, 2 Feb 2016 10:56:09 +0000 (16:26 +0530)
committerArun Raghavan <git@arunraghavan.net>
Tue, 2 Feb 2016 11:08:31 +0000 (16:38 +0530)
Avoids using an int range if the field we're setting is not actually a
range.

sys/tinyalsa/tinyalsasink.c

index 153d81c..0efcbb0 100644 (file)
@@ -127,6 +127,7 @@ gst_tinyalsa_sink_getcaps (GstBaseSink * bsink, GstCaps * filter)
   GValue format = { 0, };
   struct pcm_params *params = NULL;
   struct pcm_mask *mask;
+  int rate_min, rate_max, channels_min, channels_max;
   guint16 m;
 
   GST_DEBUG_OBJECT (sink, "Querying caps");
@@ -190,13 +191,23 @@ gst_tinyalsa_sink_getcaps (GstBaseSink * bsink, GstCaps * filter)
    * standard rates in this range. We should probably filter the range to
    * those, standard audio rates but even that isn't guaranteed to be accurate.
    */
-  gst_caps_set_simple (caps, "rate", GST_TYPE_INT_RANGE,
-      pcm_params_get_min (params, PCM_PARAM_RATE),
-      pcm_params_get_max (params, PCM_PARAM_RATE), NULL);
-
-  gst_caps_set_simple (caps, "channels", GST_TYPE_INT_RANGE,
-      pcm_params_get_min (params, PCM_PARAM_CHANNELS),
-      pcm_params_get_max (params, PCM_PARAM_CHANNELS), NULL);
+  rate_min = pcm_params_get_min (params, PCM_PARAM_RATE);
+  rate_max = pcm_params_get_max (params, PCM_PARAM_RATE);
+
+  if (rate_min == rate_max)
+    gst_caps_set_simple (caps, "rate", G_TYPE_INT, rate_min, NULL);
+  else
+    gst_caps_set_simple (caps, "rate", GST_TYPE_INT_RANGE, rate_min, rate_max,
+        NULL);
+
+  channels_min = pcm_params_get_min (params, PCM_PARAM_CHANNELS);
+  channels_max = pcm_params_get_max (params, PCM_PARAM_CHANNELS);
+
+  if (channels_min == channels_max)
+    gst_caps_set_simple (caps, "channels", G_TYPE_INT, channels_min, NULL);
+  else
+    gst_caps_set_simple (caps, "channels", GST_TYPE_INT_RANGE, channels_min,
+        channels_max, NULL);
 
   gst_caps_replace (&sink->cached_caps, caps);