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)#ifndef MEDIA_BASE_CHANNEL_LAYOUT_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MEDIA_BASE_CHANNEL_LAYOUT_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/media_export.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Enumerates the various representations of the ordering of audio channels. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Logged to UMA, so never reuse a value, always add new/greater ones! 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum ChannelLayout { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_NONE = 0, 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_UNSUPPORTED = 1, 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front C 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_MONO = 2, 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front L, Front R 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_STEREO = 3, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front L, Front R, Back C 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_2_1 = 4, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front L, Front R, Front C 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_SURROUND = 5, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front L, Front R, Front C, Back C 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_4_0 = 6, 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front L, Front R, Side L, Side R 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_2_2 = 7, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front L, Front R, Back L, Back R 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_QUAD = 8, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front L, Front R, Front C, Side L, Side R 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_5_0 = 9, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front L, Front R, Front C, Side L, Side R, LFE 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_5_1 = 10, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front L, Front R, Front C, Back L, Back R 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_5_0_BACK = 11, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front L, Front R, Front C, Back L, Back R, LFE 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_5_1_BACK = 12, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front L, Front R, Front C, Side L, Side R, Back L, Back R 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_7_0 = 13, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front L, Front R, Front C, Side L, Side R, LFE, Back L, Back R 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_7_1 = 14, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front L, Front R, Front C, Side L, Side R, LFE, Front LofC, Front RofC 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_7_1_WIDE = 15, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stereo L, Stereo R 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_STEREO_DOWNMIX = 16, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stereo L, Stereo R, LFE 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_2POINT1 = 17, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stereo L, Stereo R, Front C, LFE 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_3_1 = 18, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stereo L, Stereo R, Front C, Rear C, LFE 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_4_1 = 19, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stereo L, Stereo R, Front C, Side L, Side R, Back C 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_6_0 = 20, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stereo L, Stereo R, Side L, Side R, Front LofC, Front RofC 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_6_0_FRONT = 21, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stereo L, Stereo R, Side L, Side R, Front C, Rear C. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_HEXAGONAL = 22, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stereo L, Stereo R, Side L, Side R, Front C, Rear Center, LFE 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_6_1 = 23, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stereo L, Stereo R, Back L, Back R, Front C, Rear Center, LFE 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_6_1_BACK = 24, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stereo L, Stereo R, Side L, Side R, Front LofC, Front RofC, LFE 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_6_1_FRONT = 25, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front L, Front R, Front C, Side L, Side R, Front LofC, Front RofC 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_7_0_FRONT = 26, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front L, Front R, Front C, Back L, Back R, LFE, Front LofC, Front RofC 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_7_1_WIDE_BACK = 27, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Front L, Front R, Front C, Side L, Side R, Rear C, Back L, Back R. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHANNEL_LAYOUT_OCTAGONAL = 28, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Channels are not explicitly mapped to speakers. 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHANNEL_LAYOUT_DISCRETE = 29, 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // Front L, Front R, Front C. Front C contains the keyboard mic audio. This 10323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // layout is only intended for input for WebRTC. The Front C channel 10423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // is stripped away in the WebRTC audio input pipeline and never seen outside 10523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // of that. 10623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC = 30, 10723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Max value, must always equal the largest entry ever logged. 10923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) CHANNEL_LAYOUT_MAX = CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum Channels { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LEFT = 0, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RIGHT, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CENTER, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LFE, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BACK_LEFT, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BACK_RIGHT, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LEFT_OF_CENTER, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RIGHT_OF_CENTER, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BACK_CENTER, 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SIDE_LEFT, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SIDE_RIGHT, 124a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CHANNELS_MAX = SIDE_RIGHT, // Must always equal the largest value ever logged. 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the expected channel position in an interleaved stream. Values of -1 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// mean the channel at that index is not used for that layout. Values range 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// from 0 to CHANNELS_MAX - 1. 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MEDIA_EXPORT int ChannelOrder(ChannelLayout layout, Channels channel); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the number of channels in a given ChannelLayout. 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MEDIA_EXPORT int ChannelLayoutToChannelCount(ChannelLayout layout); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Given the number of channels, return the best layout, 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// or return CHANNEL_LAYOUT_UNSUPPORTED if there is no good match. 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MEDIA_EXPORT ChannelLayout GuessChannelLayout(int channels); 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Returns a string representation of the channel layout. 1403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)MEDIA_EXPORT const char* ChannelLayoutToString(ChannelLayout layout); 1413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace media 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // MEDIA_BASE_CHANNEL_LAYOUT_H_ 145