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 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The channel orderings for each layout as specified by FFmpeg. Each value 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// represents the index of each channel in each layout. Values of -1 mean the 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// channel at that index is not used for that layout.For example, the left side 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// surround sound channel in FFmpeg's 5.1 layout is in the 5th position (because 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the order is L, R, C, LFE, LS, RS), so 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// kChannelOrderings[CHANNEL_LAYOUT_5POINT1][SIDE_LEFT] = 4; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const int kChannelOrderings[CHANNEL_LAYOUT_MAX][CHANNELS_MAX] = { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FL | FR | FC | LFE | BL | BR | FLofC | FRofC | BC | SL | SR 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_NONE 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_UNSUPPORTED 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_MONO 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { -1 , -1 , 0 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_STEREO 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_2_1 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 2 , -1 , -1 }, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_SURROUND 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_4_0 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , -1 , -1 , -1 , -1 , 3 , -1 , -1 }, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_2_2 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 2 , 3 }, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_QUAD 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , -1 , -1 , 2 , 3 , -1 , -1 , -1 , -1 , -1 }, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_5_0 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , -1 , -1 , -1 , -1 , -1 , 3 , 4 }, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_5_1 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 3 , -1 , -1 , -1 , -1 , -1 , 4 , 5 }, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FL | FR | FC | LFE | BL | BR | FLofC | FRofC | BC | SL | SR 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_5_0_BACK 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , 3 , 4 , -1 , -1 , -1 , -1 , -1 }, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_5_1_BACK 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 3 , 4 , 5 , -1 , -1 , -1 , -1 , -1 }, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_7_0 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , 5 , 6 , -1 , -1 , -1 , 3 , 4 }, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_7_1 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 3 , 6 , 7 , -1 , -1 , -1 , 4 , 5 }, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_7_1_WIDE 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 3 , -1 , -1 , 6 , 7 , -1 , 4 , 5 }, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_STEREO_DOWNMIX 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_2POINT1 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , -1 , 2 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_3_1 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 3 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_4_1 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 4 , -1 , -1 , -1 , -1 , 3 , -1 , -1 }, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_6_0 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , -1 , -1 , -1 , -1 , 5 , 3 , 4 }, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_6_0_FRONT 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , -1 , -1 , -1 , -1 , 4 , 5 , -1 , 2 , 3 }, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FL | FR | FC | LFE | BL | BR | FLofC | FRofC | BC | SL | SR 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_HEXAGONAL 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , 3 , 4 , -1 , -1 , 5 , -1 , -1 }, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_6_1 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 3 , -1 , -1 , -1 , -1 , 6 , 4 , 5 }, 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_6_1_BACK 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 3 , 4 , 5 , -1 , -1 , 6 , -1 , -1 }, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_6_1_FRONT 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , -1 , 6 , -1 , -1 , 4 , 5 , -1 , 2 , 3 }, 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_7_0_FRONT 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , -1 , -1 , 5 , 6 , -1 , 3 , 4 }, 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_7_1_WIDE_BACK 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , -1 , -1 , -1 }, 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CHANNEL_LAYOUT_OCTAGONAL 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 0 , 1 , 2 , -1 , 5 , 6 , -1 , -1 , 7 , 3 , 4 }, 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CHANNEL_LAYOUT_DISCRETE 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FL | FR | FC | LFE | BL | BR | FLofC | FRofC | BC | SL | SR 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ChannelLayoutToChannelCount(ChannelLayout layout) { 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_LT(static_cast<size_t>(layout), arraysize(kLayoutToChannels)); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kLayoutToChannels[layout]; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Converts a channel count into a channel layout. 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ChannelLayout GuessChannelLayout(int channels) { 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (channels) { 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 1: 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_MONO; 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 2: 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_STEREO; 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 3: 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_SURROUND; 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 4: 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_QUAD; 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 5: 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_5_0; 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 6: 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_5_1; 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 7: 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_6_1; 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case 8: 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_7_1; 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DVLOG(1) << "Unsupported channel count: " << channels; 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CHANNEL_LAYOUT_UNSUPPORTED; 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ChannelOrder(ChannelLayout layout, Channels channel) { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_LT(static_cast<size_t>(layout), arraysize(kChannelOrderings)); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_LT(static_cast<size_t>(channel), arraysize(kChannelOrderings[0])); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kChannelOrderings[layout][channel]; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const char* ChannelLayoutToString(ChannelLayout layout) { 1883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) switch (layout) { 1893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_NONE: 1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "NONE"; 1913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_UNSUPPORTED: 1923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "UNSUPPORTED"; 1933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_MONO: 1943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "MONO"; 1953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_STEREO: 1963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "STEREO"; 1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_2_1: 1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "2.1"; 1993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_SURROUND: 2003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "SURROUND"; 2013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_4_0: 2023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "4.0"; 2033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_2_2: 2043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "2.2"; 2053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_QUAD: 2063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "QUAD"; 2073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_5_0: 2083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "5.0"; 2093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_5_1: 2103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "5.1"; 2113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_5_0_BACK: 2123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "5.0_BACK"; 2133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_5_1_BACK: 2143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "5.1_BACK"; 2153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_7_0: 2163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "7.0"; 2173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_7_1: 2183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "7.1"; 2193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_7_1_WIDE: 2203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "7.1_WIDE"; 2213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_STEREO_DOWNMIX: 2223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "STEREO_DOWNMIX"; 2233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_2POINT1: 2243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "2POINT1"; 2253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_3_1: 2263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "3.1"; 2273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_4_1: 2283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "4.1"; 2293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_6_0: 2303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "6.0"; 2313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_6_0_FRONT: 2323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "6.0_FRONT"; 2333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_HEXAGONAL: 2343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "HEXAGONAL"; 2353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_6_1: 2363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "6.1"; 2373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_6_1_BACK: 2383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "6.1_BACK"; 2393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_6_1_FRONT: 2403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "6.1_FRONT"; 2413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_7_0_FRONT: 2423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "7.0_FRONT"; 2433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_7_1_WIDE_BACK: 2443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "7.1_WIDE_BACK"; 2453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_OCTAGONAL: 2463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "OCTAGONAL"; 2473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_DISCRETE: 2483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return "DISCRETE"; 2493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) case CHANNEL_LAYOUT_MAX: 2503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) break; 2513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 2523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) NOTREACHED() << "Invalid channel layout provided: " << layout; 2533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return ""; 2543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 2553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace media 257