Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(400)

Side by Side Diff: chromecast/media/cma/public/audio_config.h

Issue 1074383002: Introduce VideoConfig/AudioConfig class for CMA backend (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
gunsch 2015/04/13 23:46:20 update
erickung1 2015/04/15 22:13:18 Done. merge both VideoConfig/AudioConfig into sing
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROMECAST_MEDIA_CMA_PUBLIC_AUDIO_CONFIG_H_
gunsch 2015/04/13 23:46:20 move to chromecast/public/media/audio_config.h
erickung1 2015/04/15 22:13:18 Done.
6 #define CHROMECAST_MEDIA_CMA_PUBLIC_AUDIO_CONFIG_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "base/basictypes.h"
12 #include "base/time/time.h"
13 #include "media/base/channel_layout.h"
14 #include "media/base/media_export.h"
15
16 namespace chromecast {
17 namespace media {
18
19 class AudioConfig {
lcwu1 2015/04/13 23:55:42 A high-level comment: I would prefer the cast audi
erickung1 2015/04/15 22:13:18 Done the first part, leave CMA interface refactori
20 public:
21 // It maps to ::media::AudioCodec in src/media/base/audio_decoder_config.h
22 enum Codec {
23 kUnknownAudioCodec = 0,
gunsch 2015/04/13 23:46:20 I'd rather stick with only the things that we have
erickung1 2015/04/15 22:13:18 Done.
24 kCodecAAC = 1,
25 kCodecMP3 = 2,
26 kCodecPCM = 3,
27 kCodecVorbis = 4,
28 kCodecFLAC = 5,
29 kCodecAMR_NB = 6,
30 kCodecAMR_WB = 7,
31 kCodecPCM_MULAW = 8,
32 kCodecGSM_MS = 9,
33 kCodecPCM_S16BE = 10,
34 kCodecPCM_S24BE = 11,
35 kCodecOpus = 12,
36 // kCodecEAC3 = 13,
37 kCodecPCM_ALAW = 14,
38 kCodecALAC = 15,
39 kAudioCodecMax = kCodecALAC,
40 };
41
42 // It maps to ::media::ChannelLayout in src/media/base/channel_layout.h
43 enum ChannelLayout {
44 CHANNEL_LAYOUT_NONE = 0,
45 CHANNEL_LAYOUT_UNSUPPORTED = 1,
46 // Front C
47 CHANNEL_LAYOUT_MONO = 2,
48 // Front L, Front R
49 CHANNEL_LAYOUT_STEREO = 3,
50 // Front L, Front R, Back C
51 CHANNEL_LAYOUT_2_1 = 4,
52 // Front L, Front R, Front C
53 CHANNEL_LAYOUT_SURROUND = 5,
54 // Front L, Front R, Front C, Back C
55 CHANNEL_LAYOUT_4_0 = 6,
56 // Front L, Front R, Side L, Side R
57 CHANNEL_LAYOUT_2_2 = 7,
58 // Front L, Front R, Back L, Back R
59 CHANNEL_LAYOUT_QUAD = 8,
60 // Front L, Front R, Front C, Side L, Side R
61 CHANNEL_LAYOUT_5_0 = 9,
62 // Front L, Front R, Front C, Side L, Side R, LFE
63 CHANNEL_LAYOUT_5_1 = 10,
64 // Front L, Front R, Front C, Back L, Back R
65 CHANNEL_LAYOUT_5_0_BACK = 11,
66 // Front L, Front R, Front C, Back L, Back R, LFE
67 CHANNEL_LAYOUT_5_1_BACK = 12,
68 // Front L, Front R, Front C, Side L, Side R, Back L, Back R
69 CHANNEL_LAYOUT_7_0 = 13,
70 // Front L, Front R, Front C, Side L, Side R, LFE, Back L, Back R
71 CHANNEL_LAYOUT_7_1 = 14,
72 // Front L, Front R, Front C, Side L, Side R, LFE, Front LofC, Front RofC
73 CHANNEL_LAYOUT_7_1_WIDE = 15,
74 // Stereo L, Stereo R
75 CHANNEL_LAYOUT_STEREO_DOWNMIX = 16,
76 // Stereo L, Stereo R, LFE
77 CHANNEL_LAYOUT_2POINT1 = 17,
78 // Stereo L, Stereo R, Front C, LFE
79 CHANNEL_LAYOUT_3_1 = 18,
80 // Stereo L, Stereo R, Front C, Rear C, LFE
81 CHANNEL_LAYOUT_4_1 = 19,
82 // Stereo L, Stereo R, Front C, Side L, Side R, Back C
83 CHANNEL_LAYOUT_6_0 = 20,
84 // Stereo L, Stereo R, Side L, Side R, Front LofC, Front RofC
85 CHANNEL_LAYOUT_6_0_FRONT = 21,
86 // Stereo L, Stereo R, Side L, Side R, Front C, Rear C.
87 CHANNEL_LAYOUT_HEXAGONAL = 22,
88 // Stereo L, Stereo R, Side L, Side R, Front C, Rear Center, LFE
89 CHANNEL_LAYOUT_6_1 = 23,
90 // Stereo L, Stereo R, Back L, Back R, Front C, Rear Center, LFE
91 CHANNEL_LAYOUT_6_1_BACK = 24,
92 // Stereo L, Stereo R, Side L, Side R, Front LofC, Front RofC, LFE
93 CHANNEL_LAYOUT_6_1_FRONT = 25,
94 // Front L, Front R, Front C, Side L, Side R, Front LofC, Front RofC
95 CHANNEL_LAYOUT_7_0_FRONT = 26,
96 // Front L, Front R, Front C, Back L, Back R, LFE, Front LofC, Front RofC
97 CHANNEL_LAYOUT_7_1_WIDE_BACK = 27,
98 // Front L, Front R, Front C, Side L, Side R, Rear C, Back L, Back R.
99 CHANNEL_LAYOUT_OCTAGONAL = 28,
100 // Channels are not explicitly mapped to speakers.
101 CHANNEL_LAYOUT_DISCRETE = 29,
102 // Front L, Front R, Front C. Front C contains the keyboard mic audio. This
103 // layout is only intended for input for WebRTC. The Front C channel
104 // is stripped away in the WebRTC audio input pipeline and never seen
105 // outside of that.
106 CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC = 30,
107 // Front L, Front R, Side L, Side R, LFE
108 CHANNEL_LAYOUT_4_1_QUAD_SIDE = 31,
109 // Max value, must always equal the largest entry ever logged.
110 CHANNEL_LAYOUT_MAX = CHANNEL_LAYOUT_4_1_QUAD_SIDE
111 };
112
113 public:
114 AudioConfig();
115 AudioConfig(Codec codec,
116 ChannelLayout channel_layout,
117 int channel_number,
118 int bytes_per_channel,
119 int samples_per_second,
120 const uint8* extra_data,
121 size_t extra_data_size,
122 bool is_encrypted);
123 ~AudioConfig();
124
125 void Initialize(Codec codec,
gunsch 2015/04/13 23:46:20 I don't like all the copies of methods from media/
erickung1 2015/04/15 22:13:18 Done.
126 ChannelLayout channel_layout,
127 int channel_number,
128 int bytes_per_channel,
129 int samples_per_second,
130 const uint8* extra_data,
131 size_t extra_data_size,
132 bool is_encrypted);
133
134 // Returns true if this object has appropriate configuration values, false
135 // otherwise.
136 bool IsValidConfig() const;
137
138 // Returns true if all fields in |config| match this config.
139 // Note: The contents of |extra_data_| are compared not the raw pointers.
140 bool Matches(const AudioConfig& config) const;
141
142 // Returns a human-readable string describing |*this|. For debugging & test
143 // output only.
144 std::string AsHumanReadableString() const;
145 std::string GetHumanReadableCodecName() const;
146
147 Codec codec() const { return codec_; }
148 ChannelLayout channel_layout() const { return channel_layout_; }
149 int channel_number() const { return channel_number_; }
150 int bytes_per_channel() const { return bytes_per_channel_; }
151 int samples_per_second() const { return samples_per_second_; }
152
153 // Optional byte data required to initialize audio decoders such as Vorbis
154 // codebooks.
155 const uint8* extra_data() const {
156 return extra_data_.empty() ? NULL : &extra_data_[0];
157 }
158 size_t extra_data_size() const { return extra_data_.size(); }
159
160 // Whether the audio stream is potentially encrypted.
161 // Note that in a potentially encrypted audio stream, individual buffers
162 // can be encrypted or not encrypted.
163 bool is_encrypted() const { return is_encrypted_; }
164
165 private:
166 Codec codec_;
167 int bytes_per_channel_;
168 ChannelLayout channel_layout_;
169 int channel_number_;
170 int samples_per_second_;
171 std::vector<uint8> extra_data_;
172 bool is_encrypted_;
173
174 // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler
175 // generated copy constructor and assignment operator. Since the extra data is
176 // typically small, the performance impact is minimal.
177 };
178
179 } // namespace media
180 } // namespace chromecast
181
182 #endif // CHROMECAST_MEDIA_CMA_PUBLIC_AUDIO_CONFIG_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698