alsa: Set SET_FORMATS flag when appropriate

This commit is contained in:
Arun Raghavan 2011-08-16 11:11:46 +05:30
parent fb67016844
commit e25e31fc80

View file

@ -1906,7 +1906,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
uint32_t nfrags, frag_size, buffer_size, tsched_size, tsched_watermark, rewind_safeguard; uint32_t nfrags, frag_size, buffer_size, tsched_size, tsched_watermark, rewind_safeguard;
snd_pcm_uframes_t period_frames, buffer_frames, tsched_frames; snd_pcm_uframes_t period_frames, buffer_frames, tsched_frames;
size_t frame_size; size_t frame_size;
pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d, ignore_dB = FALSE, namereg_fail = FALSE, sync_volume = FALSE; pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d, ignore_dB = FALSE, namereg_fail = FALSE, sync_volume = FALSE, set_formats = FALSE;
pa_sink_new_data data; pa_sink_new_data data;
pa_alsa_profile_set *profile_set = NULL; pa_alsa_profile_set *profile_set = NULL;
@ -2076,6 +2076,9 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
if (u->use_tsched) if (u->use_tsched)
pa_log_info("Successfully enabled timer-based scheduling mode."); pa_log_info("Successfully enabled timer-based scheduling mode.");
if (is_iec958(u) || is_hdmi(u))
set_formats = TRUE;
/* ALSA might tweak the sample spec, so recalculate the frame size */ /* ALSA might tweak the sample spec, so recalculate the frame size */
frame_size = pa_frame_size(&ss); frame_size = pa_frame_size(&ss);
@ -2127,7 +2130,8 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
if (u->mixer_path_set) if (u->mixer_path_set)
pa_alsa_add_ports(&data.ports, u->mixer_path_set); pa_alsa_add_ports(&data.ports, u->mixer_path_set);
u->sink = pa_sink_new(m->core, &data, PA_SINK_HARDWARE|PA_SINK_LATENCY|(u->use_tsched ? PA_SINK_DYNAMIC_LATENCY : 0)); u->sink = pa_sink_new(m->core, &data, PA_SINK_HARDWARE | PA_SINK_LATENCY | (u->use_tsched ? PA_SINK_DYNAMIC_LATENCY : 0) |
(set_formats ? PA_SINK_SET_FORMATS : 0));
pa_sink_new_data_done(&data); pa_sink_new_data_done(&data);
if (!u->sink) { if (!u->sink) {
@ -2233,7 +2237,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
if ((data.volume_is_set || data.muted_is_set) && u->sink->write_volume) if ((data.volume_is_set || data.muted_is_set) && u->sink->write_volume)
u->sink->write_volume(u->sink); u->sink->write_volume(u->sink);
if (is_iec958(u) || is_hdmi(u)) { if (set_formats) {
/* For S/PDIF and HDMI, allow getting/setting custom formats */ /* For S/PDIF and HDMI, allow getting/setting custom formats */
pa_format_info *format; pa_format_info *format;