15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/channel_layout.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const int kLayoutToChannels[] = { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, // CHANNEL_LAYOUT_NONE 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, // CHANNEL_LAYOUT_UNSUPPORTED 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, // CHANNEL_LAYOUT_MONO 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2, // CHANNEL_LAYOUT_STEREO 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3, // CHANNEL_LAYOUT_2_1 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3, // CHANNEL_LAYOUT_SURROUND 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4, // CHANNEL_LAYOUT_4_0 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4, // CHANNEL_LAYOUT_2_2 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4, // CHANNEL_LAYOUT_QUAD 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5, // CHANNEL_LAYOUT_5_0 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6, // CHANNEL_LAYOUT_5_1 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5, // CHANNEL_LAYOUT_5_0_BACK 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6, // CHANNEL_LAYOUT_5_1_BACK 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7, // CHANNEL_LAYOUT_7_0 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8, // CHANNEL_LAYOUT_7_1 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8, // CHANNEL_LAYOUT_7_1_WIDE 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2, // CHANNEL_LAYOUT_STEREO_DOWNMIX 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3, // CHANNEL_LAYOUT_2POINT1 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4, // CHANNEL_LAYOUT_3_1 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5, // CHANNEL_LAYOUT_4_1 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6, // CHANNEL_LAYOUT_6_0 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6, // CHANNEL_LAYOUT_6_0_FRONT 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6, // CHANNEL_LAYOUT_HEXAGONAL 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7, // CHANNEL_LAYOUT_6_1 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7, // CHANNEL_LAYOUT_6_1_BACK 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7, // CHANNEL_LAYOUT_6_1_FRONT 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7, // CHANNEL_LAYOUT_7_0_FRONT 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8, // CHANNEL_LAYOUT_7_1_WIDE_BACK 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8, // CHANNEL_LAYOUT_OCTAGONAL 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, // CHANNEL_LAYOUT_DISCRETE 4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 3, // CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// The channel orderings for each layout as specified by FFmpeg. Each value 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// represents the index of each channel in each layout. Values of -1 mean the 4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// channel at that index is not used for that layout. For example, the left side 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// surround sound channel in FFmpeg's 5.1 layout is in the 5th position (because 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the order is L, R, C, LFE, LS, RS), so 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// kChannelOrderings[CHANNEL_LAYOUT_5POINT1][SIDE_LEFT] = 4; 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)static const int kChannelOrderings[CHANNEL_LAYOUT_MAX + 1][CHANNELS_MAX + 1] = { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FL | FR | FC | LFE | BL | BR | FLofC | FRofC | BC | SL | SR 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_NONE 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_UNSUPPORTED 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_MONO 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { -1 , -1 , 0 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_STEREO 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_2_1 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 2 , -1 , -1 }, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_SURROUND 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_4_0 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , -1 , -1 , -1 , -1 , 3 , -1 , -1 }, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_2_2 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 2 , 3 }, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_QUAD 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , -1 , -1 , 2 , 3 , -1 , -1 , -1 , -1 , -1 }, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_5_0 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , -1 , -1 , -1 , -1 , -1 , 3 , 4 }, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_5_1 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 3 , -1 , -1 , -1 , -1 , -1 , 4 , 5 }, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FL | FR | FC | LFE | BL | BR | FLofC | FRofC | BC | SL | SR 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_5_0_BACK 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , 3 , 4 , -1 , -1 , -1 , -1 , -1 }, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_5_1_BACK 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 3 , 4 , 5 , -1 , -1 , -1 , -1 , -1 }, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_7_0 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , 5 , 6 , -1 , -1 , -1 , 3 , 4 }, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_7_1 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 3 , 6 , 7 , -1 , -1 , -1 , 4 , 5 }, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_7_1_WIDE 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 3 , -1 , -1 , 6 , 7 , -1 , 4 , 5 }, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_STEREO_DOWNMIX 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_2POINT1 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , -1 , 2 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_3_1 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 3 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_4_1 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 4 , -1 , -1 , -1 , -1 , 3 , -1 , -1 }, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_6_0 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , -1 , -1 , -1 , -1 , 5 , 3 , 4 }, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_6_0_FRONT 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , -1 , -1 , -1 , -1 , 4 , 5 , -1 , 2 , 3 }, 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FL | FR | FC | LFE | BL | BR | FLofC | FRofC | BC | SL | SR 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_HEXAGONAL 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , 3 , 4 , -1 , -1 , 5 , -1 , -1 }, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_6_1 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 3 , -1 , -1 , -1 , -1 , 6 , 4 , 5 }, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_6_1_BACK 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 3 , 4 , 5 , -1 , -1 , 6 , -1 , -1 }, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_6_1_FRONT 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , -1 , 6 , -1 , -1 , 4 , 5 , -1 , 2 , 3 }, 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_7_0_FRONT 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , -1 , -1 , 5 , 6 , -1 , 3 , 4 }, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_7_1_WIDE_BACK 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , -1 , -1 , -1 }, 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_OCTAGONAL 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , 5 , 6 , -1 , -1 , 7 , 3 , 4 }, 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_DISCRETE 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC 15023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { 0 , 1 , 2 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 15123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FL | FR | FC | LFE | BL | BR | FLofC | FRofC | BC | SL | SR 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ChannelLayoutToChannelCount(ChannelLayout layout) { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_LT(static_cast<size_t>(layout), arraysize(kLayoutToChannels)); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kLayoutToChannels[layout]; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Converts a channel count into a channel layout. 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ChannelLayout GuessChannelLayout(int channels) { 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (channels) { 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 1: 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_MONO; 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 2: 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_STEREO; 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 3: 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_SURROUND; 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 4: 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_QUAD; 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 5: 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_5_0; 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 6: 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_5_1; 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 7: 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_6_1; 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 8: 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_7_1; 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DVLOG(1) << "Unsupported channel count: " << channels; 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_UNSUPPORTED; 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ChannelOrder(ChannelLayout layout, Channels channel) { 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_LT(static_cast<size_t>(layout), arraysize(kChannelOrderings)); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_LT(static_cast<size_t>(channel), arraysize(kChannelOrderings[0])); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kChannelOrderings[layout][channel]; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const char* ChannelLayoutToString(ChannelLayout layout) { 1923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) switch (layout) { 1933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_NONE: 1943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "NONE"; 1953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_UNSUPPORTED: 1963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "UNSUPPORTED"; 1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_MONO: 1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "MONO"; 1993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_STEREO: 2003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "STEREO"; 2013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_2_1: 2023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "2.1"; 2033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_SURROUND: 2043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "SURROUND"; 2053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_4_0: 2063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "4.0"; 2073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_2_2: 2083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "2.2"; 2093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_QUAD: 2103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "QUAD"; 2113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_5_0: 2123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "5.0"; 2133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_5_1: 2143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "5.1"; 2153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_5_0_BACK: 2163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "5.0_BACK"; 2173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_5_1_BACK: 2183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "5.1_BACK"; 2193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_7_0: 2203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "7.0"; 2213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_7_1: 2223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "7.1"; 2233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_7_1_WIDE: 2243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "7.1_WIDE"; 2253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_STEREO_DOWNMIX: 2263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "STEREO_DOWNMIX"; 2273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_2POINT1: 2283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "2POINT1"; 2293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_3_1: 2303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "3.1"; 2313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_4_1: 2323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "4.1"; 2333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_6_0: 2343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "6.0"; 2353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_6_0_FRONT: 2363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "6.0_FRONT"; 2373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_HEXAGONAL: 2383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "HEXAGONAL"; 2393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_6_1: 2403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "6.1"; 2413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_6_1_BACK: 2423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "6.1_BACK"; 2433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_6_1_FRONT: 2443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "6.1_FRONT"; 2453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_7_0_FRONT: 2463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "7.0_FRONT"; 2473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_7_1_WIDE_BACK: 2483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "7.1_WIDE_BACK"; 2493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_OCTAGONAL: 2503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "OCTAGONAL"; 2513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_DISCRETE: 2523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "DISCRETE"; 25323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) case CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC: 25423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return "STEREO_AND_KEYBOARD_MIC"; 2553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 2563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) NOTREACHED() << "Invalid channel layout provided: " << layout; 2573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return ""; 2583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 2593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace media 261