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

Side by Side Diff: chromecast/public/media/decoder_config.h

Issue 2368573002: [Chromecast] Add color space and HDR data to Chromecast VideoConfig (Closed)
Patch Set: Added static asserts Created 4 years, 2 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
« no previous file with comments | « chromecast/media/cma/base/decoder_config_adapter.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROMECAST_PUBLIC_MEDIA_DECODER_CONFIG_H_ 5 #ifndef CHROMECAST_PUBLIC_MEDIA_DECODER_CONFIG_H_
6 #define CHROMECAST_PUBLIC_MEDIA_DECODER_CONFIG_H_ 6 #define CHROMECAST_PUBLIC_MEDIA_DECODER_CONFIG_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 154
155 inline EncryptionScheme Unencrypted() { 155 inline EncryptionScheme Unencrypted() {
156 return EncryptionScheme(); 156 return EncryptionScheme();
157 } 157 }
158 158
159 inline EncryptionScheme AesCtrEncryptionScheme() { 159 inline EncryptionScheme AesCtrEncryptionScheme() {
160 return EncryptionScheme(EncryptionScheme::CIPHER_MODE_AES_CTR, 160 return EncryptionScheme(EncryptionScheme::CIPHER_MODE_AES_CTR,
161 EncryptionScheme::Pattern()); 161 EncryptionScheme::Pattern());
162 } 162 }
163 163
164 // ---- Begin copy/paste from ui/gfx/color_space.h ----
165 enum class PrimaryID : uint16_t {
166 // The first 0-255 values should match the H264 specification.
167 RESERVED0 = 0,
168 BT709 = 1,
169 UNSPECIFIED = 2,
170 RESERVED = 3,
171 BT470M = 4,
172 BT470BG = 5,
173 SMPTE170M = 6,
174 SMPTE240M = 7,
175 FILM = 8,
176 BT2020 = 9,
177 SMPTEST428_1 = 10,
178 SMPTEST431_2 = 11,
179 SMPTEST432_1 = 12,
180
181 // Chrome-specific values start at 1000.
182 XYZ_D50 = 1000,
183 // TODO(hubbe): We need to store the primaries.
184 CUSTOM = 1001,
185 LAST = CUSTOM
186 };
187
188 enum class TransferID : uint16_t {
189 // The first 0-255 values should match the H264 specification.
190 RESERVED0 = 0,
191 BT709 = 1,
192 UNSPECIFIED = 2,
193 RESERVED = 3,
194 GAMMA22 = 4,
195 GAMMA28 = 5,
196 SMPTE170M = 6,
197 SMPTE240M = 7,
198 LINEAR = 8,
199 LOG = 9,
200 LOG_SQRT = 10,
201 IEC61966_2_4 = 11,
202 BT1361_ECG = 12,
203 IEC61966_2_1 = 13,
204 BT2020_10 = 14,
205 BT2020_12 = 15,
206 SMPTEST2084 = 16,
207 SMPTEST428_1 = 17,
208 ARIB_STD_B67 = 18, // AKA hybrid-log gamma, HLG
209
210 // Chrome-specific values start at 1000.
211 GAMMA24 = 1000,
212
213 // This is an ad-hoc transfer function that decodes SMPTE 2084 content
214 // into a 0-1 range more or less suitable for viewing on a non-hdr
215 // display.
216 SMPTEST2084_NON_HDR,
217
218 // TODO(hubbe): Need to store an approximation of the gamma function(s).
219 CUSTOM,
220 LAST = CUSTOM,
221 };
222
223 enum class MatrixID : int16_t {
224 // The first 0-255 values should match the H264 specification.
225 RGB = 0,
226 BT709 = 1,
227 UNSPECIFIED = 2,
228 RESERVED = 3,
229 FCC = 4,
230 BT470BG = 5,
231 SMPTE170M = 6,
232 SMPTE240M = 7,
233 YCOCG = 8,
234 BT2020_NCL = 9,
235 BT2020_CL = 10,
236 YDZDX = 11,
237
238 // Chrome-specific values start at 1000
239 LAST = YDZDX,
240 };
241
242 // This corresponds to the WebM Range enum which is part of WebM color data
243 // (see http://www.webmproject.org/docs/container/#Range).
244 // H.264 only uses a bool, which corresponds to the LIMITED/FULL values.
245 // Chrome-specific values start at 1000.
246 enum class RangeID : int8_t {
247 // Range is not explicitly specified / unknown.
248 UNSPECIFIED = 0,
249
250 // Limited Rec. 709 color range with RGB values ranging from 16 to 235.
251 LIMITED = 1,
252
253 // Full RGB color range with RGB valees from 0 to 255.
254 FULL = 2,
255
256 // Range is defined by TransferID/MatrixID.
257 DERIVED = 3,
258
259 LAST = DERIVED
260 };
261 // ---- End copy/pasted from ui/gfx/color_space.h ----
262
263 // ---- Begin copy/paste from media/base/hdr_metadata.h ----
264 // SMPTE ST 2086 mastering metadata.
265 struct MasteringMetadata {
266 float primary_r_chromaticity_x = 0;
267 float primary_r_chromaticity_y = 0;
268 float primary_g_chromaticity_x = 0;
269 float primary_g_chromaticity_y = 0;
270 float primary_b_chromaticity_x = 0;
271 float primary_b_chromaticity_y = 0;
272 float white_point_chromaticity_x = 0;
273 float white_point_chromaticity_y = 0;
274 float luminance_max = 0;
275 float luminance_min = 0;
276
277 MasteringMetadata();
278 MasteringMetadata(const MasteringMetadata& rhs);
279 };
280
281 // HDR metadata common for HDR10 and WebM/VP9-based HDR formats.
282 struct HDRMetadata {
283 MasteringMetadata mastering_metadata;
284 unsigned max_cll = 0;
285 unsigned max_fall = 0;
286
287 HDRMetadata();
288 HDRMetadata(const HDRMetadata& rhs);
289 };
290 // ---- End copy/paste from media/base/hdr_metadata.h ----
164 291
165 // TODO(erickung): Remove constructor once CMA backend implementation doesn't 292 // TODO(erickung): Remove constructor once CMA backend implementation doesn't
166 // create a new object to reset the configuration and use IsValidConfig() to 293 // create a new object to reset the configuration and use IsValidConfig() to
167 // determine if the configuration is still valid or not. 294 // determine if the configuration is still valid or not.
168 struct AudioConfig { 295 struct AudioConfig {
169 AudioConfig(); 296 AudioConfig();
170 AudioConfig(const AudioConfig& other); 297 AudioConfig(const AudioConfig& other);
171 ~AudioConfig(); 298 ~AudioConfig();
172 299
173 bool is_encrypted() const { return encryption_scheme.is_encrypted(); } 300 bool is_encrypted() const { return encryption_scheme.is_encrypted(); }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 // Video codec profile. 346 // Video codec profile.
220 VideoProfile profile; 347 VideoProfile profile;
221 // Additional video config for the video stream if available. Consumers of 348 // Additional video config for the video stream if available. Consumers of
222 // this structure should make an explicit copy of |additional_config| if it 349 // this structure should make an explicit copy of |additional_config| if it
223 // will be used after SetConfig() finishes. 350 // will be used after SetConfig() finishes.
224 VideoConfig* additional_config; 351 VideoConfig* additional_config;
225 // Extra data buffer for certain codec initialization. 352 // Extra data buffer for certain codec initialization.
226 std::vector<uint8_t> extra_data; 353 std::vector<uint8_t> extra_data;
227 // Encryption scheme (if any) used for the content. 354 // Encryption scheme (if any) used for the content.
228 EncryptionScheme encryption_scheme; 355 EncryptionScheme encryption_scheme;
356
357 // ColorSpace info
358 PrimaryID primaries = PrimaryID::UNSPECIFIED;
359 TransferID transfer = TransferID::UNSPECIFIED;
360 MatrixID matrix = MatrixID::UNSPECIFIED;
361 RangeID range = RangeID::UNSPECIFIED;
362
363 bool have_hdr_metadata = false;
364 HDRMetadata hdr_metadata;
229 }; 365 };
230 366
231 inline VideoConfig::VideoConfig() 367 inline VideoConfig::VideoConfig()
232 : id(kPrimary), 368 : id(kPrimary),
233 codec(kVideoCodecUnknown), 369 codec(kVideoCodecUnknown),
234 profile(kVideoProfileUnknown), 370 profile(kVideoProfileUnknown),
235 additional_config(nullptr) { 371 additional_config(nullptr) {
236 } 372 }
237 373
238 inline VideoConfig::VideoConfig(const VideoConfig& other) = default; 374 inline VideoConfig::VideoConfig(const VideoConfig& other) = default;
(...skipping 21 matching lines...) Expand all
260 inline bool IsValidConfig(const VideoConfig& config) { 396 inline bool IsValidConfig(const VideoConfig& config) {
261 return config.codec >= kVideoCodecMin && 397 return config.codec >= kVideoCodecMin &&
262 config.codec <= kVideoCodecMax && 398 config.codec <= kVideoCodecMax &&
263 config.codec != kVideoCodecUnknown; 399 config.codec != kVideoCodecUnknown;
264 } 400 }
265 401
266 } // namespace media 402 } // namespace media
267 } // namespace chromecast 403 } // namespace chromecast
268 404
269 #endif // CHROMECAST_PUBLIC_MEDIA_DECODER_CONFIG_H_ 405 #endif // CHROMECAST_PUBLIC_MEDIA_DECODER_CONFIG_H_
OLDNEW
« no previous file with comments | « chromecast/media/cma/base/decoder_config_adapter.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698