summaryrefslogtreecommitdiffstats
path: root/audio/chmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/chmap.c')
-rw-r--r--audio/chmap.c40
1 files changed, 24 insertions, 16 deletions
diff --git a/audio/chmap.c b/audio/chmap.c
index 61df408e02..fcdb95edb3 100644
--- a/audio/chmap.c
+++ b/audio/chmap.c
@@ -100,6 +100,17 @@ static const struct mp_chmap default_layouts[MP_NUM_CHANNELS + 1] = {
MP_CHMAP8(FL, FR, FC, LFE, BL, BR, SL, SR), // 7.1
};
+// The channel order was lavc/waveex, but differs from lavc for 5, 6 and 8
+// channels. 3 and 7 channels were likely undefined (no ALSA support).
+static const char *mplayer_layouts[MP_NUM_CHANNELS + 1] = {
+ [1] = "mono",
+ [2] = "stereo",
+ [4] = "4.0",
+ [5] = "5.0(alsa)",
+ [6] = "5.1(alsa)",
+ [8] = "7.1(alsa)",
+};
+
// Returns true if speakers are mapped uniquely, and there's at least 1 channel.
bool mp_chmap_is_valid(const struct mp_chmap *src)
{
@@ -192,6 +203,19 @@ void mp_chmap_from_channels(struct mp_chmap *dst, int num_channels)
}
}
+// Try to do what mplayer/mplayer2/mpv did before channel layouts were
+// introduced, i.e. get the old default channel order.
+void mp_chmap_from_channels_alsa(struct mp_chmap *dst, int num_channels)
+{
+ if (num_channels < 0 || num_channels > MP_NUM_CHANNELS) {
+ *dst = (struct mp_chmap) {0};
+ } else {
+ mp_chmap_from_str(dst, bstr0(mplayer_layouts[num_channels]));
+ if (!dst->num)
+ mp_chmap_from_channels(dst, num_channels);
+ }
+}
+
// Set *dst to an unknown layout for the given numbers of channels.
// If the number of channels is invalid, an invalid map is set, and
// mp_chmap_is_valid(dst) will return false.
@@ -314,22 +338,6 @@ void mp_chmap_reorder_to_lavc(struct mp_chmap *map)
mp_chmap_from_lavc(map, mask);
}
-// Try to do what mplayer/mplayer2/mpv did before channel layouts were
-// introduced, i.e. get the old default channel order.
-void mp_chmap_reorder_to_alsa(struct mp_chmap *map)
-{
- // The channel order was lavc/waveex, but differs from lavc for 5, 6 and 8
- // channels. 3 and 7 channels were likely undefined (no ALSA support).
- mp_chmap_from_channels(map, map->num);
- if (map->num == 5) {
- mp_chmap_from_str(map, bstr0("5.0(alsa)"));
- } else if (map->num == 6) {
- mp_chmap_from_str(map, bstr0("5.1(alsa)"));
- } else if (map->num == 8) {
- mp_chmap_from_str(map, bstr0("7.1(alsa)"));
- }
-}
-
// Get reordering array for from->to reordering. from->to must have the same set
// of speakers (i.e. same number and speaker IDs, just different order). Then,
// for each speaker n, dst[n] will be set such that: