Bug 1431221 - P4. Use similar channel decriptions as Windows WAVE and FFmpeg. r=padenot draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Mon, 22 Jan 2018 21:43:56 +0100
changeset 771686 42aee60aa8d99c751a59487a70120a515c1a5d74
parent 771685 9ffa38de6dd1c4471a257c100cebe2115c44831f
child 771687 d464bd1a8cccda9786a438aac7ea464989c53a34
push id103752
push userbmo:jyavenard@mozilla.com
push dateFri, 23 Mar 2018 17:52:32 +0000
reviewerspadenot
bugs1431221
milestone61.0a1
Bug 1431221 - P4. Use similar channel decriptions as Windows WAVE and FFmpeg. r=padenot This makes it for future easier conversion for the FFmpeg and Windows WMF decoder, so that we can use their channel map directly. Also introduce a difference between 2F2 and QUAD, cubeb supports will be added in a future change. MozReview-Commit-ID: L5NkjeuGslI
dom/media/CubebUtils.cpp
dom/media/MediaInfo.cpp
dom/media/MediaInfo.h
dom/media/platforms/agnostic/VorbisDecoder.cpp
dom/media/platforms/apple/AppleATDecoder.cpp
--- a/dom/media/CubebUtils.cpp
+++ b/dom/media/CubebUtils.cpp
@@ -34,32 +34,33 @@
 #define PREF_CUBEB_LATENCY_PLAYBACK "media.cubeb_latency_playback_ms"
 #define PREF_CUBEB_LATENCY_MSG "media.cubeb_latency_msg_frames"
 // Allows to get something non-default for the preferred sample-rate, to allow
 // troubleshooting in the field and testing.
 #define PREF_CUBEB_FORCE_SAMPLE_RATE "media.cubeb.force_sample_rate"
 #define PREF_CUBEB_LOGGING_LEVEL "media.cubeb.logging_level"
 #define PREF_CUBEB_SANDBOX "media.cubeb.sandbox"
 
-#define MASK_MONO       (1 << AudioConfig::CHANNEL_MONO)
-#define MASK_MONO_LFE   (MASK_MONO | (1 << AudioConfig::CHANNEL_LFE))
-#define MASK_STEREO     ((1 << AudioConfig::CHANNEL_LEFT) | (1 << AudioConfig::CHANNEL_RIGHT))
-#define MASK_STEREO_LFE (MASK_STEREO | (1 << AudioConfig::CHANNEL_LFE))
-#define MASK_3F         (MASK_STEREO | (1 << AudioConfig::CHANNEL_CENTER))
-#define MASK_3F_LFE     (MASK_3F | (1 << AudioConfig::CHANNEL_LFE))
-#define MASK_2F1        (MASK_STEREO | (1 << AudioConfig::CHANNEL_RCENTER))
-#define MASK_2F1_LFE    (MASK_2F1 | (1 << AudioConfig::CHANNEL_LFE))
-#define MASK_3F1        (MASK_3F | (1 < AudioConfig::CHANNEL_RCENTER))
-#define MASK_3F1_LFE    (MASK_3F1 | (1 << AudioConfig::CHANNEL_LFE))
-#define MASK_2F2        (MASK_STEREO | (1 << AudioConfig::CHANNEL_LS) | (1 << AudioConfig::CHANNEL_RS))
-#define MASK_2F2_LFE    (MASK_2F2 | (1 << AudioConfig::CHANNEL_LFE))
-#define MASK_3F2        (MASK_3F | (1 << AudioConfig::CHANNEL_LS) | (1 << AudioConfig::CHANNEL_RS))
-#define MASK_3F2_LFE    (MASK_3F2 | (1 << AudioConfig::CHANNEL_LFE))
-#define MASK_3F3R_LFE   (MASK_3F2_LFE | (1 << AudioConfig::CHANNEL_RCENTER))
-#define MASK_3F4_LFE    (MASK_3F2_LFE | (1 << AudioConfig::CHANNEL_RLS) | (1 << AudioConfig::CHANNEL_RRS))
+#define MASK_MONO       (AudioConfig::ChannelLayout::LMONO_MAP)
+#define MASK_MONO_LFE   (AudioConfig::ChannelLayout::LMONO_LFE_MAP)
+#define MASK_STEREO     (AudioConfig::ChannelLayout::LSTEREO_MAP)
+#define MASK_STEREO_LFE (AudioConfig::ChannelLayout::LSTEREO_LFE_MAP)
+#define MASK_3F         (AudioConfig::ChannelLayout::L3F_MAP)
+#define MASK_3F_LFE     (AudioConfig::ChannelLayout::L3F_LFE_MAP)
+#define MASK_2F1        (AudioConfig::ChannelLayout::L2F1_MAP)
+#define MASK_2F1_LFE    (AudioConfig::ChannelLayout::L2F1_LFE_MAP)
+#define MASK_3F1        (AudioConfig::ChannelLayout::L3F1_MAP)
+#define MASK_3F1_LFE    (AudioConfig::ChannelLayout::L3F1_LFE_MAP)
+#define MASK_2F2        (AudioConfig::ChannelLayout::L2F2_MAP)
+#define MASK_QUAD       (AudioConfig::ChannelLayout::LQUAD_MAP)
+#define MASK_2F2_LFE    (AudioConfig::ChannelLayout::L2F2_LFE_MAP)
+#define MASK_3F2        (AudioConfig::ChannelLayout::L3F2_MAP)
+#define MASK_3F2_LFE    (AudioConfig::ChannelLayout::L3F2_LFE_MAP)
+#define MASK_3F3R_LFE   (AudioConfig::ChannelLayout::L3F3R_LFE_MAP)
+#define MASK_3F4_LFE    (AudioConfig::ChannelLayout::L3F4_LFE_MAP)
 
 #if (defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)) || defined(XP_MACOSX)
 #define MOZ_CUBEB_REMOTING
 #endif
 
 extern "C" {
 // These functions are provided by audioipc-server crate
 extern void* audioipc_server_start();
--- a/dom/media/MediaInfo.cpp
+++ b/dom/media/MediaInfo.cpp
@@ -48,78 +48,85 @@ typedef AudioConfig::ChannelLayout Chann
  2F2            L   R   LS   RS
  2F2-LFE        L   R   LFE  LS   RS
  3F2            L   R   C    LS   RS
  3F2-LFE        L   R   C    LFE  LS   RS
  3F3R-LFE       L   R   C    LFE  BC   LS   RS
  3F4-LFE        L   R   C    LFE  Rls  Rrs  LS   RS
 */
 
-ChannelLayout ChannelLayout::LMONO{ AudioConfig::CHANNEL_MONO };
-ChannelLayout ChannelLayout::LMONO_LFE{ AudioConfig::CHANNEL_MONO,
-                                        AudioConfig::CHANNEL_LFE };
-ChannelLayout ChannelLayout::LSTEREO{ AudioConfig::CHANNEL_LEFT,
-                                      AudioConfig::CHANNEL_RIGHT };
-ChannelLayout ChannelLayout::LSTEREO_LFE{ AudioConfig::CHANNEL_LEFT,
-                                          AudioConfig::CHANNEL_RIGHT,
-                                          AudioConfig::CHANNEL_LFE };
-ChannelLayout ChannelLayout::L3F{ AudioConfig::CHANNEL_LEFT,
-                                  AudioConfig::CHANNEL_RIGHT,
-                                  AudioConfig::CHANNEL_CENTER };
-ChannelLayout ChannelLayout::L3F_LFE{ AudioConfig::CHANNEL_LEFT,
-                                      AudioConfig::CHANNEL_RIGHT,
-                                      AudioConfig::CHANNEL_CENTER,
-                                      AudioConfig::CHANNEL_LFE };
-ChannelLayout ChannelLayout::L2F1{ AudioConfig::CHANNEL_LEFT,
-                                   AudioConfig::CHANNEL_RIGHT,
-                                   AudioConfig::CHANNEL_RCENTER };
-ChannelLayout ChannelLayout::L2F1_LFE{ AudioConfig::CHANNEL_LEFT,
-                                       AudioConfig::CHANNEL_RIGHT,
-                                       AudioConfig::CHANNEL_LFE,
-                                       AudioConfig::CHANNEL_RCENTER };
-ChannelLayout ChannelLayout::L3F1{ AudioConfig::CHANNEL_LEFT,
-                                   AudioConfig::CHANNEL_RIGHT,
-                                   AudioConfig::CHANNEL_CENTER,
-                                   AudioConfig::CHANNEL_RCENTER };
-ChannelLayout ChannelLayout::L3F1_LFE{ AudioConfig::CHANNEL_LEFT,
-                                       AudioConfig::CHANNEL_RIGHT,
-                                       AudioConfig::CHANNEL_CENTER,
-                                       AudioConfig::CHANNEL_LFE,
-                                       AudioConfig::CHANNEL_RCENTER };
-ChannelLayout ChannelLayout::L2F2{ AudioConfig::CHANNEL_LEFT,
-                                   AudioConfig::CHANNEL_RIGHT,
-                                   AudioConfig::CHANNEL_LS,
-                                   AudioConfig::CHANNEL_RS };
-ChannelLayout ChannelLayout::L2F2_LFE{ AudioConfig::CHANNEL_LEFT,
-                                       AudioConfig::CHANNEL_RIGHT,
-                                       AudioConfig::CHANNEL_LFE,
-                                       AudioConfig::CHANNEL_LS,
-                                       AudioConfig::CHANNEL_RS };
-ChannelLayout ChannelLayout::L3F2{ AudioConfig::CHANNEL_LEFT,
-                                   AudioConfig::CHANNEL_RIGHT,
-                                   AudioConfig::CHANNEL_CENTER,
-                                   AudioConfig::CHANNEL_LS,
-                                   AudioConfig::CHANNEL_RS };
+ChannelLayout ChannelLayout::LMONO{ CHANNEL_FRONT_CENTER };
+ChannelLayout ChannelLayout::LMONO_LFE{ CHANNEL_FRONT_CENTER, CHANNEL_LFE };
+ChannelLayout ChannelLayout::LSTEREO{ CHANNEL_FRONT_LEFT, CHANNEL_FRONT_RIGHT };
+ChannelLayout ChannelLayout::LSTEREO_LFE{ CHANNEL_FRONT_LEFT,
+                                          CHANNEL_FRONT_RIGHT,
+                                          CHANNEL_LFE };
+ChannelLayout ChannelLayout::L3F{ CHANNEL_FRONT_LEFT,
+                                  CHANNEL_FRONT_RIGHT,
+                                  CHANNEL_FRONT_CENTER };
+ChannelLayout ChannelLayout::L3F_LFE{ CHANNEL_FRONT_LEFT,
+                                      CHANNEL_FRONT_RIGHT,
+                                      CHANNEL_FRONT_CENTER,
+                                      CHANNEL_LFE };
+ChannelLayout ChannelLayout::L2F1{ CHANNEL_FRONT_LEFT,
+                                   CHANNEL_FRONT_RIGHT,
+                                   CHANNEL_BACK_CENTER };
+ChannelLayout ChannelLayout::L2F1_LFE{ CHANNEL_FRONT_LEFT,
+                                       CHANNEL_FRONT_RIGHT,
+                                       CHANNEL_LFE,
+                                       CHANNEL_BACK_CENTER };
+ChannelLayout ChannelLayout::L3F1{ CHANNEL_FRONT_LEFT,
+                                   CHANNEL_FRONT_RIGHT,
+                                   CHANNEL_FRONT_CENTER,
+                                   CHANNEL_BACK_CENTER };
+ChannelLayout ChannelLayout::LSURROUND = ChannelLayout::L3F1;
+ChannelLayout ChannelLayout::L3F1_LFE{ CHANNEL_FRONT_LEFT,
+                                       CHANNEL_FRONT_RIGHT,
+                                       CHANNEL_FRONT_CENTER,
+                                       CHANNEL_LFE,
+                                       CHANNEL_BACK_CENTER };
+ChannelLayout ChannelLayout::L2F2{ CHANNEL_FRONT_LEFT,
+                                   CHANNEL_FRONT_RIGHT,
+                                   CHANNEL_SIDE_LEFT,
+                                   CHANNEL_SIDE_RIGHT };
+ChannelLayout ChannelLayout::L2F2_LFE{ CHANNEL_FRONT_LEFT,
+                                       CHANNEL_FRONT_RIGHT,
+                                       CHANNEL_LFE,
+                                       CHANNEL_SIDE_LEFT,
+                                       CHANNEL_SIDE_RIGHT };
+ChannelLayout ChannelLayout::LQUAD{ CHANNEL_FRONT_LEFT,
+                                    CHANNEL_FRONT_RIGHT,
+                                    CHANNEL_BACK_LEFT,
+                                    CHANNEL_BACK_RIGHT };
+ChannelLayout ChannelLayout::LQUAD_LFE{ CHANNEL_FRONT_LEFT,
+                                        CHANNEL_FRONT_RIGHT,
+                                        CHANNEL_LFE,
+                                        CHANNEL_BACK_LEFT,
+                                        CHANNEL_BACK_RIGHT };
+ChannelLayout ChannelLayout::L3F2{ CHANNEL_FRONT_LEFT,
+                                   CHANNEL_FRONT_RIGHT,
+                                   CHANNEL_FRONT_CENTER,
+                                   CHANNEL_SIDE_LEFT,
+                                   CHANNEL_SIDE_RIGHT };
 ChannelLayout ChannelLayout::L3F2_LFE{
-  AudioConfig::CHANNEL_LEFT,   AudioConfig::CHANNEL_RIGHT,
-  AudioConfig::CHANNEL_CENTER, AudioConfig::CHANNEL_LFE,
-  AudioConfig::CHANNEL_LS,     AudioConfig::CHANNEL_RS
+  CHANNEL_FRONT_LEFT, CHANNEL_FRONT_RIGHT, CHANNEL_FRONT_CENTER,
+  CHANNEL_LFE,        CHANNEL_SIDE_LEFT,   CHANNEL_SIDE_RIGHT
 };
+ChannelLayout ChannelLayout::L5POINT1_SURROUND = ChannelLayout::L3F2_LFE;
+
 ChannelLayout ChannelLayout::L3F3R_LFE{
-  AudioConfig::CHANNEL_LEFT,    AudioConfig::CHANNEL_RIGHT,
-  AudioConfig::CHANNEL_CENTER,  AudioConfig::CHANNEL_LFE,
-  AudioConfig::CHANNEL_RCENTER, AudioConfig::CHANNEL_LS,
-  AudioConfig::CHANNEL_RS
+  CHANNEL_FRONT_LEFT,  CHANNEL_FRONT_RIGHT, CHANNEL_FRONT_CENTER, CHANNEL_LFE,
+  CHANNEL_BACK_CENTER, CHANNEL_SIDE_LEFT,   CHANNEL_SIDE_RIGHT
 };
 ChannelLayout ChannelLayout::L3F4_LFE{
-  AudioConfig::CHANNEL_LEFT,   AudioConfig::CHANNEL_RIGHT,
-  AudioConfig::CHANNEL_CENTER, AudioConfig::CHANNEL_LFE,
-  AudioConfig::CHANNEL_RLS,    AudioConfig::CHANNEL_RRS,
-  AudioConfig::CHANNEL_LS,     AudioConfig::CHANNEL_RS
+  CHANNEL_FRONT_LEFT, CHANNEL_FRONT_RIGHT, CHANNEL_FRONT_CENTER,
+  CHANNEL_LFE,        CHANNEL_BACK_LEFT,   CHANNEL_BACK_RIGHT,
+  CHANNEL_SIDE_LEFT,  CHANNEL_SIDE_RIGHT
 };
+ChannelLayout ChannelLayout::L7POINT1_SURROUND = ChannelLayout::L3F4_LFE;
 
 void
 AudioConfig::ChannelLayout::UpdateChannelMap()
 {
   mValid = mChannels.Length() <= MAX_AUDIO_CHANNELS;
   mChannelMap = 0;
   if (mValid) {
     mChannelMap = Map();
@@ -146,52 +153,52 @@ AudioConfig::ChannelLayout::Map() const
 }
 
 /* static */ const AudioConfig::Channel*
 AudioConfig::ChannelLayout::SMPTEDefault(uint32_t aChannels) const
 {
   switch (aChannels) {
     case 1: // MONO
     {
-      static const Channel config[] = { CHANNEL_MONO };
+      static const Channel config[] = { CHANNEL_FRONT_CENTER };
       return config;
     }
     case 2: // STEREO
     {
-      static const Channel config[] = { CHANNEL_LEFT, CHANNEL_RIGHT };
+      static const Channel config[] = { CHANNEL_FRONT_LEFT, CHANNEL_FRONT_RIGHT };
       return config;
     }
     case 3: // 3F
     {
-      static const Channel config[] = { CHANNEL_LEFT, CHANNEL_RIGHT, CHANNEL_CENTER };
+      static const Channel config[] = { CHANNEL_FRONT_LEFT, CHANNEL_FRONT_RIGHT, CHANNEL_FRONT_CENTER };
       return config;
     }
     case 4: // 2F2
     {
-      static const Channel config[] = { CHANNEL_LEFT, CHANNEL_RIGHT, CHANNEL_LS, CHANNEL_RS };
+      static const Channel config[] = { CHANNEL_FRONT_LEFT, CHANNEL_FRONT_RIGHT, CHANNEL_BACK_LEFT, CHANNEL_BACK_RIGHT };
       return config;
     }
     case 5: // 3F2
     {
-      static const Channel config[] = { CHANNEL_LEFT, CHANNEL_RIGHT, CHANNEL_CENTER, CHANNEL_LS, CHANNEL_RS };
+      static const Channel config[] = { CHANNEL_FRONT_LEFT, CHANNEL_FRONT_RIGHT, CHANNEL_FRONT_CENTER, CHANNEL_SIDE_LEFT, CHANNEL_SIDE_RIGHT };
       return config;
     }
     case 6: // 3F2-LFE
     {
-      static const Channel config[] = { CHANNEL_LEFT, CHANNEL_RIGHT, CHANNEL_CENTER, CHANNEL_LFE, CHANNEL_LS, CHANNEL_RS };
+      static const Channel config[] = { CHANNEL_FRONT_LEFT, CHANNEL_FRONT_RIGHT, CHANNEL_FRONT_CENTER, CHANNEL_LFE, CHANNEL_SIDE_LEFT, CHANNEL_SIDE_RIGHT };
       return config;
     }
     case 7: // 3F3R-LFE
     {
-      static const Channel config[] = { CHANNEL_LEFT, CHANNEL_RIGHT, CHANNEL_CENTER, CHANNEL_LFE, CHANNEL_RCENTER, CHANNEL_LS, CHANNEL_RS };
+      static const Channel config[] = { CHANNEL_FRONT_LEFT, CHANNEL_FRONT_RIGHT, CHANNEL_FRONT_CENTER, CHANNEL_LFE, CHANNEL_BACK_CENTER, CHANNEL_SIDE_LEFT, CHANNEL_SIDE_RIGHT };
       return config;
     }
     case 8: // 3F4-LFE
     {
-      static const Channel config[] = { CHANNEL_LEFT, CHANNEL_RIGHT, CHANNEL_CENTER, CHANNEL_LFE, CHANNEL_RLS, CHANNEL_RRS, CHANNEL_LS, CHANNEL_RS };
+      static const Channel config[] = { CHANNEL_FRONT_LEFT, CHANNEL_FRONT_RIGHT, CHANNEL_FRONT_CENTER, CHANNEL_LFE, CHANNEL_BACK_LEFT, CHANNEL_BACK_RIGHT, CHANNEL_SIDE_LEFT, CHANNEL_SIDE_RIGHT };
       return config;
     }
     default:
       return nullptr;
   }
 }
 
 /* static */ const AudioConfig::ChannelLayout&
@@ -205,16 +212,17 @@ AudioConfig::ChannelLayout::SMPTEDefault
   MOZ_ASSERT(L3F_MAP == L3F.Map());
   MOZ_ASSERT(L3F_LFE_MAP == L3F_LFE.Map());
   MOZ_ASSERT(L2F1_MAP == L2F1.Map());
   MOZ_ASSERT(L2F1_LFE_MAP == L2F1_LFE.Map());
   MOZ_ASSERT(L3F1_MAP == L3F1.Map());
   MOZ_ASSERT(L3F1_LFE_MAP == L3F1_LFE.Map());
   MOZ_ASSERT(L2F2_MAP == L2F2.Map());
   MOZ_ASSERT(L2F2_LFE_MAP == L2F2_LFE.Map());
+  MOZ_ASSERT(LQUAD_MAP == LQUAD.Map());
   MOZ_ASSERT(L3F2_MAP == L3F2.Map());
   MOZ_ASSERT(L3F2_LFE_MAP == L3F2_LFE.Map());
   MOZ_ASSERT(L3F3R_LFE_MAP == L3F3R_LFE.Map());
   MOZ_ASSERT(L3F4_LFE_MAP == L3F4_LFE.Map());
 
   if (!aChannelLayout.IsValid()) {
     return aChannelLayout;
   }
@@ -227,16 +235,17 @@ AudioConfig::ChannelLayout::SMPTEDefault
     case L3F_MAP: return L3F;
     case L3F_LFE_MAP: return L3F_LFE;
     case L2F1_MAP: return L2F1;
     case L2F1_LFE_MAP: return L2F1_LFE;
     case L3F1_MAP: return L3F1;
     case L3F1_LFE_MAP: return L3F1_LFE;
     case L2F2_MAP: return L2F2;
     case L2F2_LFE_MAP: return L2F2_LFE;
+    case LQUAD_MAP: return LQUAD;
     case L3F2_MAP: return L3F2;
     case L3F2_LFE_MAP: return L3F2_LFE;
     case L3F3R_LFE_MAP: return L3F3R_LFE;
     case L3F4_LFE_MAP: return L3F4_LFE;
     default:
       // unknown return identical.
       return aChannelLayout;
   }
--- a/dom/media/MediaInfo.h
+++ b/dom/media/MediaInfo.h
@@ -616,26 +616,35 @@ public:
 class AudioConfig
 {
 public:
   // Channel definition is conveniently defined to be in the same order as
   // WAVEFORMAT && SMPTE, even though this is unused for now.
   enum Channel
   {
     CHANNEL_INVALID = -1,
-    CHANNEL_MONO = 0,
-    CHANNEL_LEFT,
-    CHANNEL_RIGHT,
-    CHANNEL_CENTER,
+    CHANNEL_FRONT_LEFT = 0,
+    CHANNEL_FRONT_RIGHT,
+    CHANNEL_FRONT_CENTER,
     CHANNEL_LFE,
-    CHANNEL_RCENTER,
-    CHANNEL_LS,
-    CHANNEL_RS,
-    CHANNEL_RLS,
-    CHANNEL_RRS,
+    CHANNEL_BACK_LEFT,
+    CHANNEL_BACK_RIGHT,
+    CHANNEL_FRONT_LEFT_OF_CENTER,
+    CHANNEL_FRONT_RIGHT_OF_CENTER,
+    CHANNEL_BACK_CENTER,
+    CHANNEL_SIDE_LEFT,
+    CHANNEL_SIDE_RIGHT,
+    // From WAVEFORMAT definition.
+    CHANNEL_TOP_CENTER,
+    CHANNEL_TOP_FRONT_LEFT,
+    CHANNEL_TOP_FRONT_CENTER,
+    CHANNEL_TOP_FRONT_RIGHT,
+    CHANNEL_TOP_BACK_LEFT,
+    CHANNEL_TOP_BACK_CENTER,
+    CHANNEL_TOP_BACK_RIGHT
   };
 
   class ChannelLayout
   {
   public:
     ChannelLayout() : mChannelMap(0), mValid(false) { }
     explicit ChannelLayout(uint32_t aChannels)
       : ChannelLayout(aChannels, SMPTEDefault(aChannels))
@@ -689,74 +698,95 @@ public:
       return mChannelMap & (1 << aChannel);
     }
 
     static const ChannelLayout& SMPTEDefault(
       const ChannelLayout& aChannelLayout);
 
     // Common channel layout definitions.
     static ChannelLayout LMONO;
-    static constexpr uint32_t LMONO_MAP = 1 << CHANNEL_MONO;
+    static constexpr uint32_t LMONO_MAP = 1 << CHANNEL_FRONT_CENTER;
     static ChannelLayout LMONO_LFE;
     static constexpr uint32_t LMONO_LFE_MAP =
-      1 << CHANNEL_MONO | 1 << CHANNEL_LFE;
+      1 << CHANNEL_FRONT_CENTER | 1 << CHANNEL_LFE;
     static ChannelLayout LSTEREO;
     static constexpr uint32_t LSTEREO_MAP =
-      1 << CHANNEL_LEFT | 1 << CHANNEL_RIGHT;
+      1 << CHANNEL_FRONT_LEFT | 1 << CHANNEL_FRONT_RIGHT;
     static ChannelLayout LSTEREO_LFE;
     static constexpr uint32_t LSTEREO_LFE_MAP =
-      1 << CHANNEL_LEFT | 1 << CHANNEL_RIGHT | 1 << CHANNEL_LFE;
+      1 << CHANNEL_FRONT_LEFT | 1 << CHANNEL_FRONT_RIGHT | 1 << CHANNEL_LFE;
     static ChannelLayout L3F;
-    static constexpr uint32_t L3F_MAP =
-      1 << CHANNEL_LEFT | 1 << CHANNEL_RIGHT | 1 << CHANNEL_CENTER;
+    static constexpr uint32_t L3F_MAP = 1 << CHANNEL_FRONT_LEFT |
+                                        1 << CHANNEL_FRONT_RIGHT |
+                                        1 << CHANNEL_FRONT_CENTER;
     static ChannelLayout L3F_LFE;
     static constexpr uint32_t L3F_LFE_MAP =
-      1 << CHANNEL_LEFT | 1 << CHANNEL_RIGHT | 1 << CHANNEL_CENTER |
-      1 << CHANNEL_LFE;
+      1 << CHANNEL_FRONT_LEFT | 1 << CHANNEL_FRONT_RIGHT |
+      1 << CHANNEL_FRONT_CENTER | 1 << CHANNEL_LFE;
     static ChannelLayout L2F1;
-    static constexpr uint32_t L2F1_MAP =
-      1 << CHANNEL_LEFT | 1 << CHANNEL_RIGHT | 1 << CHANNEL_RCENTER;
+    static constexpr uint32_t L2F1_MAP = 1 << CHANNEL_FRONT_LEFT |
+                                         1 << CHANNEL_FRONT_RIGHT |
+                                         1 << CHANNEL_BACK_CENTER;
     static ChannelLayout L2F1_LFE;
     static constexpr uint32_t L2F1_LFE_MAP =
-      1 << CHANNEL_LEFT | 1 << CHANNEL_RIGHT | 1 << CHANNEL_LFE |
-      1 << CHANNEL_RCENTER;
+      1 << CHANNEL_FRONT_LEFT | 1 << CHANNEL_FRONT_RIGHT | 1 << CHANNEL_LFE |
+      1 << CHANNEL_BACK_CENTER;
     static ChannelLayout L3F1;
     static constexpr uint32_t L3F1_MAP =
-      1 << CHANNEL_LEFT | 1 << CHANNEL_RIGHT | 1 << CHANNEL_CENTER |
-      1 << CHANNEL_RCENTER;
+      1 << CHANNEL_FRONT_LEFT | 1 << CHANNEL_FRONT_RIGHT |
+      1 << CHANNEL_FRONT_CENTER | 1 << CHANNEL_BACK_CENTER;
+    static ChannelLayout LSURROUND; // Same as 3F1
+    static constexpr uint32_t LSURROUND_MAP = L3F1_MAP;
     static ChannelLayout L3F1_LFE;
     static constexpr uint32_t L3F1_LFE_MAP =
-      1 << CHANNEL_LEFT | 1 << CHANNEL_RIGHT | 1 << CHANNEL_CENTER |
-      1 << CHANNEL_LFE | 1 << CHANNEL_RCENTER;
+      1 << CHANNEL_FRONT_LEFT | 1 << CHANNEL_FRONT_RIGHT |
+      1 << CHANNEL_FRONT_CENTER | 1 << CHANNEL_LFE | 1 << CHANNEL_BACK_CENTER;
     static ChannelLayout L2F2;
-    static constexpr uint32_t L2F2_MAP = 1 << CHANNEL_LEFT |
-                                         1 << CHANNEL_RIGHT | 1 << CHANNEL_LS |
-                                         1 << CHANNEL_RS;
+    static constexpr uint32_t L2F2_MAP =
+      1 << CHANNEL_FRONT_LEFT | 1 << CHANNEL_FRONT_RIGHT |
+      1 << CHANNEL_SIDE_LEFT | 1 << CHANNEL_SIDE_RIGHT;
     static ChannelLayout L2F2_LFE;
     static constexpr uint32_t L2F2_LFE_MAP =
-      1 << CHANNEL_LEFT | 1 << CHANNEL_RIGHT | 1 << CHANNEL_LFE |
-      1 << CHANNEL_LS | 1 << CHANNEL_RS;
+      1 << CHANNEL_FRONT_LEFT | 1 << CHANNEL_FRONT_RIGHT | 1 << CHANNEL_LFE |
+      1 << CHANNEL_SIDE_LEFT | 1 << CHANNEL_SIDE_RIGHT;
+    static ChannelLayout LQUAD;
+    static constexpr uint32_t LQUAD_MAP =
+      1 << CHANNEL_FRONT_LEFT | 1 << CHANNEL_FRONT_RIGHT |
+      1 << CHANNEL_BACK_LEFT | 1 << CHANNEL_BACK_RIGHT;
+    static ChannelLayout LQUAD_LFE;
+    static constexpr uint32_t LQUAD_MAP_LFE =
+      1 << CHANNEL_FRONT_LEFT | 1 << CHANNEL_FRONT_RIGHT | 1 << CHANNEL_LFE |
+      1 << CHANNEL_BACK_LEFT | 1 << CHANNEL_BACK_RIGHT;
     static ChannelLayout L3F2;
     static constexpr uint32_t L3F2_MAP =
-      1 << CHANNEL_LEFT | 1 << CHANNEL_RIGHT | 1 << CHANNEL_CENTER |
-      1 << CHANNEL_LS | 1 << CHANNEL_RS;
+      1 << CHANNEL_FRONT_LEFT | 1 << CHANNEL_FRONT_RIGHT |
+      1 << CHANNEL_FRONT_CENTER | 1 << CHANNEL_SIDE_LEFT |
+      1 << CHANNEL_SIDE_RIGHT;
     static ChannelLayout L3F2_LFE;
     static constexpr uint32_t L3F2_LFE_MAP =
-      1 << CHANNEL_LEFT | 1 << CHANNEL_RIGHT | 1 << CHANNEL_CENTER |
-      1 << CHANNEL_LFE | 1 << CHANNEL_LS | 1 << CHANNEL_RS;
+      1 << CHANNEL_FRONT_LEFT | 1 << CHANNEL_FRONT_RIGHT |
+      1 << CHANNEL_FRONT_CENTER | 1 << CHANNEL_LFE | 1 << CHANNEL_SIDE_LEFT |
+      1 << CHANNEL_SIDE_RIGHT;
+    // 3F2_LFE Alias
+    static ChannelLayout L5POINT1_SURROUND;
+    static constexpr uint32_t L5POINT1_SURROUND_MAP = L3F2_LFE_MAP;
     static ChannelLayout L3F3R_LFE;
     static constexpr uint32_t L3F3R_LFE_MAP =
-      1 << CHANNEL_LEFT | 1 << CHANNEL_RIGHT | 1 << CHANNEL_CENTER |
-      1 << CHANNEL_LFE | 1 << CHANNEL_RCENTER | 1 << CHANNEL_LS |
-      1 << CHANNEL_RS;
+      1 << CHANNEL_FRONT_LEFT | 1 << CHANNEL_FRONT_RIGHT |
+      1 << CHANNEL_FRONT_CENTER | 1 << CHANNEL_LFE | 1 << CHANNEL_BACK_CENTER |
+      1 << CHANNEL_SIDE_LEFT | 1 << CHANNEL_SIDE_RIGHT;
     static ChannelLayout L3F4_LFE;
     static constexpr uint32_t L3F4_LFE_MAP =
-      1 << CHANNEL_LEFT | 1 << CHANNEL_RIGHT | 1 << CHANNEL_CENTER |
-      1 << CHANNEL_LFE | 1 << CHANNEL_RLS | 1 << CHANNEL_RRS | 1 << CHANNEL_LS |
-      1 << CHANNEL_RS;
+      1 << CHANNEL_FRONT_LEFT | 1 << CHANNEL_FRONT_RIGHT |
+      1 << CHANNEL_FRONT_CENTER | 1 << CHANNEL_LFE | 1 << CHANNEL_BACK_LEFT |
+      1 << CHANNEL_BACK_RIGHT | 1 << CHANNEL_SIDE_LEFT |
+      1 << CHANNEL_SIDE_RIGHT;
+    // 3F4_LFE Alias
+    static ChannelLayout L7POINT1_SURROUND;
+    static constexpr uint32_t L7POINT1_SURROUND_MAP = L3F4_LFE_MAP;
 
   private:
     void UpdateChannelMap();
     const Channel* SMPTEDefault(uint32_t aChannels) const;
     AutoTArray<Channel, MAX_AUDIO_CHANNELS> mChannels;
     uint32_t mChannelMap;
     bool mValid;
   };
--- a/dom/media/platforms/agnostic/VorbisDecoder.cpp
+++ b/dom/media/platforms/agnostic/VorbisDecoder.cpp
@@ -298,52 +298,82 @@ VorbisDataDecoder::VorbisLayout(uint32_t
 {
   // From https://www.xiph.org/vorbis/doc/Vorbis_I_spec.html
   // Section 4.3.9.
   typedef AudioConfig::Channel Channel;
 
   switch (aChannels) {
     case 1: // the stream is monophonic
     {
-      static const Channel config[] = { AudioConfig::CHANNEL_MONO };
+      static const Channel config[] = { AudioConfig::CHANNEL_FRONT_CENTER };
       return config;
     }
     case 2: // the stream is stereo. channel order: left, right
     {
-      static const Channel config[] = { AudioConfig::CHANNEL_LEFT, AudioConfig::CHANNEL_RIGHT };
+      static const Channel config[] = { AudioConfig::CHANNEL_FRONT_LEFT,
+                                        AudioConfig::CHANNEL_FRONT_RIGHT };
+      return config;
+    }
+    case 3: // the stream is a 1d-surround encoding. channel order: left,
+            // center, right
+    {
+      static const Channel config[] = { AudioConfig::CHANNEL_FRONT_LEFT,
+                                        AudioConfig::CHANNEL_FRONT_CENTER,
+                                        AudioConfig::CHANNEL_FRONT_RIGHT };
       return config;
     }
-    case 3: // the stream is a 1d-surround encoding. channel order: left, center, right
+    case 4: // the stream is quadraphonic surround. channel order: front left,
+            // front right, rear left, rear right
     {
-      static const Channel config[] = { AudioConfig::CHANNEL_LEFT, AudioConfig::CHANNEL_CENTER, AudioConfig::CHANNEL_RIGHT };
+      static const Channel config[] = { AudioConfig::CHANNEL_FRONT_LEFT,
+                                        AudioConfig::CHANNEL_FRONT_RIGHT,
+                                        AudioConfig::CHANNEL_BACK_LEFT,
+                                        AudioConfig::CHANNEL_BACK_RIGHT };
       return config;
     }
-    case 4: // the stream is quadraphonic surround. channel order: front left, front right, rear left, rear right
+    case 5: // the stream is five-channel surround. channel order: front left,
+            // center, front right, rear left, rear right
     {
-      static const Channel config[] = { AudioConfig::CHANNEL_LEFT, AudioConfig::CHANNEL_RIGHT, AudioConfig::CHANNEL_LS, AudioConfig::CHANNEL_RS };
+      static const Channel config[] = { AudioConfig::CHANNEL_FRONT_LEFT,
+                                        AudioConfig::CHANNEL_FRONT_CENTER,
+                                        AudioConfig::CHANNEL_FRONT_RIGHT,
+                                        AudioConfig::CHANNEL_BACK_LEFT,
+                                        AudioConfig::CHANNEL_BACK_RIGHT };
       return config;
     }
-    case 5: // the stream is five-channel surround. channel order: front left, center, front right, rear left, rear right
+    case 6: // the stream is 5.1 surround. channel order: front left, center,
+            // front right, rear left, rear right, LFE
     {
-      static const Channel config[] = { AudioConfig::CHANNEL_LEFT, AudioConfig::CHANNEL_CENTER, AudioConfig::CHANNEL_RIGHT, AudioConfig::CHANNEL_LS, AudioConfig::CHANNEL_RS };
+      static const Channel config[] = {
+        AudioConfig::CHANNEL_FRONT_LEFT,  AudioConfig::CHANNEL_FRONT_CENTER,
+        AudioConfig::CHANNEL_FRONT_RIGHT, AudioConfig::CHANNEL_BACK_LEFT,
+        AudioConfig::CHANNEL_BACK_RIGHT,  AudioConfig::CHANNEL_LFE
+      };
       return config;
     }
-    case 6: // the stream is 5.1 surround. channel order: front left, center, front right, rear left, rear right, LFE
+    case 7: // surround. channel order: front left, center, front right, side
+            // left, side right, rear center, LFE
     {
-      static const Channel config[] = { AudioConfig::CHANNEL_LEFT, AudioConfig::CHANNEL_CENTER, AudioConfig::CHANNEL_RIGHT, AudioConfig::CHANNEL_LS, AudioConfig::CHANNEL_RS, AudioConfig::CHANNEL_LFE };
+      static const Channel config[] = {
+        AudioConfig::CHANNEL_FRONT_LEFT,  AudioConfig::CHANNEL_FRONT_CENTER,
+        AudioConfig::CHANNEL_FRONT_RIGHT, AudioConfig::CHANNEL_SIDE_LEFT,
+        AudioConfig::CHANNEL_SIDE_RIGHT,  AudioConfig::CHANNEL_BACK_CENTER,
+        AudioConfig::CHANNEL_LFE
+      };
       return config;
     }
-    case 7: // surround. channel order: front left, center, front right, side left, side right, rear center, LFE
+    case 8: // the stream is 7.1 surround. channel order: front left, center,
+            // front right, side left, side right, rear left, rear right, LFE
     {
-      static const Channel config[] = { AudioConfig::CHANNEL_LEFT, AudioConfig::CHANNEL_CENTER, AudioConfig::CHANNEL_RIGHT, AudioConfig::CHANNEL_LS, AudioConfig::CHANNEL_RS, AudioConfig::CHANNEL_RCENTER, AudioConfig::CHANNEL_LFE };
-      return config;
-    }
-    case 8: // the stream is 7.1 surround. channel order: front left, center, front right, side left, side right, rear left, rear right, LFE
-    {
-      static const Channel config[] = { AudioConfig::CHANNEL_LEFT, AudioConfig::CHANNEL_CENTER, AudioConfig::CHANNEL_RIGHT, AudioConfig::CHANNEL_LS, AudioConfig::CHANNEL_RS, AudioConfig::CHANNEL_RLS, AudioConfig::CHANNEL_RRS, AudioConfig::CHANNEL_LFE };
+      static const Channel config[] = {
+        AudioConfig::CHANNEL_FRONT_LEFT,  AudioConfig::CHANNEL_FRONT_CENTER,
+        AudioConfig::CHANNEL_FRONT_RIGHT, AudioConfig::CHANNEL_SIDE_LEFT,
+        AudioConfig::CHANNEL_SIDE_RIGHT,  AudioConfig::CHANNEL_BACK_LEFT,
+        AudioConfig::CHANNEL_BACK_RIGHT,  AudioConfig::CHANNEL_LFE
+      };
       return config;
     }
     default:
       return nullptr;
   }
 }
 
 } // namespace mozilla
--- a/dom/media/platforms/apple/AppleATDecoder.cpp
+++ b/dom/media/platforms/apple/AppleATDecoder.cpp
@@ -414,36 +414,35 @@ AppleATDecoder::GetInputAudioDescription
 
   return NS_OK;
 }
 
 AudioConfig::Channel
 ConvertChannelLabel(AudioChannelLabel id)
 {
   switch (id) {
+    case kAudioChannelLabel_Left:
+      return AudioConfig::CHANNEL_FRONT_LEFT;
+    case kAudioChannelLabel_Right:
+      return AudioConfig::CHANNEL_FRONT_RIGHT;
     case kAudioChannelLabel_Mono:
-      return AudioConfig::CHANNEL_MONO;
-    case kAudioChannelLabel_Left:
-      return AudioConfig::CHANNEL_LEFT;
-    case kAudioChannelLabel_Right:
-      return AudioConfig::CHANNEL_RIGHT;
     case kAudioChannelLabel_Center:
-      return AudioConfig::CHANNEL_CENTER;
+      return AudioConfig::CHANNEL_FRONT_CENTER;
     case kAudioChannelLabel_LFEScreen:
       return AudioConfig::CHANNEL_LFE;
     case kAudioChannelLabel_LeftSurround:
-      return AudioConfig::CHANNEL_LS;
+      return AudioConfig::CHANNEL_SIDE_LEFT;
     case kAudioChannelLabel_RightSurround:
-      return AudioConfig::CHANNEL_RS;
+      return AudioConfig::CHANNEL_SIDE_RIGHT;
     case kAudioChannelLabel_CenterSurround:
-      return AudioConfig::CHANNEL_RCENTER;
+      return AudioConfig::CHANNEL_BACK_CENTER;
     case kAudioChannelLabel_RearSurroundLeft:
-      return AudioConfig::CHANNEL_RLS;
+      return AudioConfig::CHANNEL_BACK_LEFT;
     case kAudioChannelLabel_RearSurroundRight:
-      return AudioConfig::CHANNEL_RRS;
+      return AudioConfig::CHANNEL_BACK_RIGHT;
     default:
       return AudioConfig::CHANNEL_INVALID;
   }
 }
 
 // Will set mChannelLayout if a channel layout could properly be identified
 // and is supported.
 nsresult