mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-22 23:28:16 +00:00
osxaudio: fixes playback of mono streams with no channel-mask field in caps
Fixes a negotiation error seen when trying to playback of a .MOV file with a mono AAC audio stream decoded by avcdec_aac that doesn't set channel-mask field but sink was requiring channel-mask=0x3.
This commit is contained in:
parent
de3e54690b
commit
d699dc615e
1 changed files with 22 additions and 13 deletions
|
@ -644,24 +644,33 @@ gst_core_audio_probe_caps (GstCoreAudio * core_audio, GstCaps * in_caps)
|
|||
* e.g. if you push 5.1-surround audio to a stereo configuration,
|
||||
* the left and right channels will be played accordingly,
|
||||
* and the rest will be dropped. */
|
||||
|
||||
if (channels == 1 || (channels == 2 &&
|
||||
(channel_mask == 0 || channel_mask == STEREO_CHANNEL_MASK))) {
|
||||
|
||||
if (channels == 1) {
|
||||
/* If have mono, then also offer stereo since CoreAudio downmixes to it */
|
||||
GstStructure *stereo = gst_structure_copy (out_s);
|
||||
gst_structure_remove_field (out_s, "channel-mask");
|
||||
gst_structure_set (stereo, "channels", G_TYPE_INT, 2,
|
||||
"channel-mask", GST_TYPE_BITMASK, STEREO_CHANNEL_MASK, NULL);
|
||||
gst_caps_append_structure (caps, stereo);
|
||||
gst_caps_append_structure (caps, out_s);
|
||||
} else if (channels == 2 && (channel_mask == 0
|
||||
|| channel_mask == STEREO_CHANNEL_MASK)) {
|
||||
/* If have stereo channels, then also offer mono since CoreAudio
|
||||
* upmixes it. If mono, then also offer stereo since CoreAudio
|
||||
* downmixes to it */
|
||||
* upmixes it. */
|
||||
GstStructure *mono = gst_structure_copy (out_s);
|
||||
gst_structure_set (mono, "channels", G_TYPE_INT, 1, NULL);
|
||||
gst_structure_remove_field (mono, "channel-mask");
|
||||
gst_structure_set (out_s, "channel-mask", GST_TYPE_BITMASK,
|
||||
STEREO_CHANNEL_MASK, NULL);
|
||||
|
||||
gst_structure_set (out_s, "channels", GST_TYPE_INT_RANGE, 1, 2, NULL);
|
||||
|
||||
if (channels == 1)
|
||||
gst_structure_set (out_s, "channel-mask", GST_TYPE_BITMASK,
|
||||
STEREO_CHANNEL_MASK, NULL);
|
||||
gst_caps_append_structure (caps, out_s);
|
||||
gst_caps_append_structure (caps, mono);
|
||||
} else {
|
||||
/* Otherwhise just add the caps */
|
||||
gst_caps_append_structure (caps, out_s);
|
||||
}
|
||||
|
||||
gst_caps_append_structure (caps, out_s);
|
||||
}
|
||||
}
|
||||
|
||||
GST_DEBUG_OBJECT (core_audio, "Probed caps:%" GST_PTR_FORMAT, caps);
|
||||
return caps;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue