From 55e777f10b3e241f2634b471e482bab230773ce0 Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 7 May 2015 23:15:52 +0200 Subject: audio: remove UNKNOWN pseudo speakers Reuse MP_SPEAKER_ID_NA for this. If all mp_chmap entries are set to NA, the channel layout has special "unknown channel layout" semantics, which are used to deal with some corner cases. --- audio/chmap.c | 12 ++++++------ audio/chmap.h | 7 ++----- 2 files changed, 8 insertions(+), 11 deletions(-) (limited to 'audio') diff --git a/audio/chmap.c b/audio/chmap.c index a36a6d9bdf..c15a63804d 100644 --- a/audio/chmap.c +++ b/audio/chmap.c @@ -144,12 +144,10 @@ bool mp_chmap_is_empty(const struct mp_chmap *src) bool mp_chmap_is_unknown(const struct mp_chmap *src) { for (int n = 0; n < src->num; n++) { - int speaker = src->speaker[n]; - if (speaker >= MP_SPEAKER_ID_UNKNOWN0 && - speaker <= MP_SPEAKER_ID_UNKNOWN_LAST) - return true; + if (src->speaker[n] != MP_SPEAKER_ID_NA) + return false; } - return false; + return mp_chmap_is_valid(src); } // Note: empty channel maps compare as equal. Invalid ones can equal too. @@ -240,6 +238,8 @@ void mp_chmap_from_channels_alsa(struct mp_chmap *dst, int 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. +// A mp_chmap with all entries set to NA is treated specially in some +// contexts (watch out for mp_chmap_is_unknown()). void mp_chmap_set_unknown(struct mp_chmap *dst, int num_channels) { if (num_channels < 0 || num_channels > MP_NUM_CHANNELS) { @@ -247,7 +247,7 @@ void mp_chmap_set_unknown(struct mp_chmap *dst, int num_channels) } else { dst->num = num_channels; for (int n = 0; n < dst->num; n++) - dst->speaker[n] = MP_SPEAKER_ID_UNKNOWN0 + n; + dst->speaker[n] = MP_SPEAKER_ID_NA; } } diff --git a/audio/chmap.h b/audio/chmap.h index d3ce5cdb21..d4cdc3ea85 100644 --- a/audio/chmap.h +++ b/audio/chmap.h @@ -56,15 +56,12 @@ enum mp_speaker_id { MP_SPEAKER_ID_SDR, // SURROUND_DIRECT_RIGHT MP_SPEAKER_ID_LFE2, // LOW_FREQUENCY_2 - // Special mpv-specific speaker entries reserved for channels which have no - // known meaning. - MP_SPEAKER_ID_UNKNOWN0 = 64, - MP_SPEAKER_ID_UNKNOWN_LAST = MP_SPEAKER_ID_UNKNOWN0 + MP_NUM_CHANNELS - 1, + // Speaker IDs >= 64 are not representable in WAVEFORMATEXTENSIBLE or libav*. // "Silent" channels. These are sometimes used to insert padding for // unused channels. Unlike other speaker types, multiple of these can // occur in a single mp_chmap. - MP_SPEAKER_ID_NA, + MP_SPEAKER_ID_NA = 64, // Including the unassigned IDs in between. This is not a valid ID anymore, // but is still within uint8_t. -- cgit v1.2.3