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");
* 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);