Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "media/formats/webm/webm_colour_parser.h" | |
| 6 | |
| 7 #include "base/logging.h" | |
| 8 #include "media/formats/webm/webm_constants.h" | |
| 9 | |
| 10 namespace media { | |
| 11 | |
| 12 // The definitions below are copied from the current libwebm top-of-tree. | |
| 13 // Chromium's third_party/libwebm doesn't have these yet. We can probably just | |
| 14 // include libwebm header directly in the future. | |
| 15 // ---- Begin copy/paste from libwebm/webm_parser/include/webm/dom_types.h ---- | |
| 16 | |
| 17 /** | |
| 18 A parsed \WebMID{MatrixCoefficients} element. | |
| 19 | |
| 20 Matroska/WebM adopted these values from Table 4 of ISO/IEC 23001-8:2013/DCOR1. | |
| 21 See that document for further details. | |
| 22 */ | |
| 23 enum class MatrixCoefficients : std::uint64_t { | |
| 24 /** | |
| 25 The identity matrix. | |
| 26 | |
| 27 Typically used for GBR (often referred to as RGB); however, may also be used | |
| 28 for YZX (often referred to as XYZ). | |
| 29 */ | |
| 30 kRgb = 0, | |
| 31 | |
| 32 /** | |
| 33 Rec. ITU-R BT.709-5. | |
| 34 */ | |
| 35 kBt709 = 1, | |
| 36 | |
| 37 /** | |
| 38 Image characteristics are unknown or are determined by the application. | |
| 39 */ | |
| 40 kUnspecified = 2, | |
| 41 | |
| 42 /** | |
| 43 United States Federal Communications Commission Title 47 Code of Federal | |
| 44 Regulations (2003) 73.682 (a) (20). | |
| 45 */ | |
| 46 kFcc = 4, | |
| 47 | |
| 48 /** | |
| 49 Rec. ITU-R BT.470‑6 System B, G (historical). | |
| 50 */ | |
| 51 kBt470Bg = 5, | |
| 52 | |
| 53 /** | |
| 54 Society of Motion Picture and Television Engineers 170M (2004). | |
| 55 */ | |
| 56 kSmpte170M = 6, | |
| 57 | |
| 58 /** | |
| 59 Society of Motion Picture and Television Engineers 240M (1999). | |
| 60 */ | |
| 61 kSmpte240M = 7, | |
| 62 | |
| 63 /** | |
| 64 YCgCo. | |
| 65 */ | |
| 66 kYCgCo = 8, | |
| 67 | |
| 68 /** | |
| 69 Rec. ITU-R BT.2020 (non-constant luminance). | |
| 70 */ | |
| 71 kBt2020NonconstantLuminance = 9, | |
| 72 | |
| 73 /** | |
| 74 Rec. ITU-R BT.2020 (constant luminance). | |
| 75 */ | |
| 76 kBt2020ConstantLuminance = 10, | |
| 77 }; | |
| 78 | |
| 79 /** | |
| 80 A parsed \WebMID{Range} element. | |
| 81 */ | |
| 82 enum class Range : std::uint64_t { | |
| 83 /** | |
| 84 Unspecified. | |
| 85 */ | |
| 86 kUnspecified = 0, | |
| 87 | |
| 88 /** | |
| 89 Broadcast range. | |
| 90 */ | |
| 91 kBroadcast = 1, | |
| 92 | |
| 93 /** | |
| 94 Full range (no clipping). | |
| 95 */ | |
| 96 kFull = 2, | |
| 97 | |
| 98 /** | |
| 99 Defined by MatrixCoefficients/TransferCharacteristics. | |
| 100 */ | |
| 101 kDerived = 3, | |
| 102 }; | |
| 103 | |
| 104 /** | |
| 105 A parsed \WebMID{TransferCharacteristics} element. | |
| 106 | |
| 107 Matroska/WebM adopted these values from Table 3 of ISO/IEC 23001-8:2013/DCOR1. | |
| 108 See that document for further details. | |
| 109 */ | |
| 110 enum class TransferCharacteristics : std::uint64_t { | |
| 111 /** | |
| 112 Rec. ITU-R BT.709-6. | |
| 113 */ | |
| 114 kBt709 = 1, | |
| 115 | |
| 116 /** | |
| 117 Image characteristics are unknown or are determined by the application. | |
| 118 */ | |
| 119 kUnspecified = 2, | |
| 120 | |
| 121 /** | |
| 122 Rec. ITU‑R BT.470‑6 System M (historical) with assumed display gamma 2.2. | |
| 123 */ | |
| 124 kGamma22curve = 4, | |
| 125 | |
| 126 /** | |
| 127 Rec. ITU‑R BT.470-6 System B, G (historical) with assumed display gamma 2.8. | |
| 128 */ | |
| 129 kGamma28curve = 5, | |
| 130 | |
| 131 /** | |
| 132 Society of Motion Picture and Television Engineers 170M (2004). | |
| 133 */ | |
| 134 kSmpte170M = 6, | |
| 135 | |
| 136 /** | |
| 137 Society of Motion Picture and Television Engineers 240M (1999). | |
| 138 */ | |
| 139 kSmpte240M = 7, | |
| 140 | |
| 141 /** | |
| 142 Linear transfer characteristics. | |
| 143 */ | |
| 144 kLinear = 8, | |
| 145 | |
| 146 /** | |
| 147 Logarithmic transfer characteristic (100:1 range). | |
| 148 */ | |
| 149 kLog = 9, | |
| 150 | |
| 151 /** | |
| 152 Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range). | |
| 153 */ | |
| 154 kLogSqrt = 10, | |
| 155 | |
| 156 /** | |
| 157 IEC 61966-2-4. | |
| 158 */ | |
| 159 kIec6196624 = 11, | |
| 160 | |
| 161 /** | |
| 162 Rec. ITU‑R BT.1361-0 extended colour gamut system (historical). | |
| 163 */ | |
| 164 kBt1361ExtendedColourGamut = 12, | |
| 165 | |
| 166 /** | |
| 167 IEC 61966-2-1 sRGB or sYCC. | |
| 168 */ | |
| 169 kIec6196621 = 13, | |
| 170 | |
| 171 /** | |
| 172 Rec. ITU-R BT.2020-2 (10-bit system). | |
| 173 */ | |
| 174 k10BitBt2020 = 14, | |
| 175 | |
| 176 /** | |
| 177 Rec. ITU-R BT.2020-2 (12-bit system). | |
| 178 */ | |
| 179 k12BitBt2020 = 15, | |
| 180 | |
| 181 /** | |
| 182 Society of Motion Picture and Television Engineers ST 2084. | |
| 183 */ | |
| 184 kSmpteSt2084 = 16, | |
| 185 | |
| 186 /** | |
| 187 Society of Motion Picture and Television Engineers ST 428-1. | |
| 188 */ | |
| 189 kSmpteSt4281 = 17, | |
| 190 | |
| 191 /** | |
| 192 Association of Radio Industries and Businesses (ARIB) STD-B67. | |
| 193 */ | |
| 194 kAribStdB67Hlg = 18, | |
| 195 }; | |
| 196 | |
| 197 /** | |
| 198 A parsed \WebMID{Primaries} element. | |
| 199 | |
| 200 Matroska/WebM adopted these values from Table 2 of ISO/IEC 23001-8:2013/DCOR1. | |
| 201 See that document for further details. | |
| 202 */ | |
| 203 enum class Primaries : std::uint64_t { | |
| 204 /** | |
| 205 Rec. ITU‑R BT.709-6. | |
| 206 */ | |
| 207 kBt709 = 1, | |
| 208 | |
| 209 /** | |
| 210 Image characteristics are unknown or are determined by the application. | |
| 211 */ | |
| 212 kUnspecified = 2, | |
| 213 | |
| 214 /** | |
| 215 Rec. ITU‑R BT.470‑6 System M (historical). | |
| 216 */ | |
| 217 kBt470M = 4, | |
| 218 | |
| 219 /** | |
| 220 Rec. ITU‑R BT.470‑6 System B, G (historical). | |
| 221 */ | |
| 222 kBt470Bg = 5, | |
| 223 | |
| 224 /** | |
| 225 Society of Motion Picture and Television Engineers 170M (2004). | |
| 226 */ | |
| 227 kSmpte170M = 6, | |
| 228 | |
| 229 /** | |
| 230 Society of Motion Picture and Television Engineers 240M (1999). | |
| 231 */ | |
| 232 kSmpte240M = 7, | |
| 233 | |
| 234 /** | |
| 235 Generic film. | |
| 236 */ | |
| 237 kFilm = 8, | |
| 238 | |
| 239 /** | |
| 240 Rec. ITU-R BT.2020-2. | |
| 241 */ | |
| 242 kBt2020 = 9, | |
| 243 | |
| 244 /** | |
| 245 Society of Motion Picture and Television Engineers ST 428-1. | |
| 246 */ | |
| 247 kSmpteSt4281 = 10, | |
| 248 | |
| 249 /** | |
| 250 JEDEC P22 phosphors/EBU Tech. 3213-E (1975). | |
| 251 */ | |
| 252 kJedecP22Phosphors = 22, | |
| 253 }; | |
| 254 | |
| 255 // ---- End copy/paste from libwebm/webm_parser/include/webm/dom_types.h ---- | |
| 256 | |
| 257 gfx::ColorSpace::MatrixID FromWebMMatrixCoefficients(MatrixCoefficients c) { | |
| 258 switch (c) { | |
| 259 case MatrixCoefficients::kRgb: | |
| 260 return gfx::ColorSpace::MatrixID::RGB; | |
| 261 case MatrixCoefficients::kBt709: | |
| 262 return gfx::ColorSpace::MatrixID::BT709; | |
| 263 case MatrixCoefficients::kUnspecified: | |
| 264 return gfx::ColorSpace::MatrixID::UNSPECIFIED; | |
| 265 case MatrixCoefficients::kFcc: | |
| 266 return gfx::ColorSpace::MatrixID::FCC; | |
| 267 case MatrixCoefficients::kBt470Bg: | |
| 268 return gfx::ColorSpace::MatrixID::BT470BG; | |
| 269 case MatrixCoefficients::kSmpte170M: | |
| 270 return gfx::ColorSpace::MatrixID::SMPTE170M; | |
| 271 case MatrixCoefficients::kSmpte240M: | |
| 272 return gfx::ColorSpace::MatrixID::SMPTE240M; | |
| 273 case MatrixCoefficients::kYCgCo: | |
| 274 return gfx::ColorSpace::MatrixID::YCOCG; | |
| 275 case MatrixCoefficients::kBt2020NonconstantLuminance: | |
| 276 return gfx::ColorSpace::MatrixID::BT2020_NCL; | |
| 277 case MatrixCoefficients::kBt2020ConstantLuminance: | |
| 278 return gfx::ColorSpace::MatrixID::BT2020_CL; | |
| 279 } | |
| 280 NOTREACHED(); | |
| 281 return gfx::ColorSpace::MatrixID::UNSPECIFIED; | |
| 282 } | |
| 283 | |
| 284 gfx::ColorSpace::RangeID FromWebMRange(Range range) { | |
| 285 switch (range) { | |
| 286 case Range::kUnspecified: | |
| 287 return gfx::ColorSpace::RangeID::UNSPECIFIED; | |
| 288 case Range::kBroadcast: | |
| 289 return gfx::ColorSpace::RangeID::LIMITED; | |
| 290 case Range::kFull: | |
| 291 return gfx::ColorSpace::RangeID::FULL; | |
| 292 case Range::kDerived: | |
| 293 return gfx::ColorSpace::RangeID::DERIVED; | |
| 294 } | |
| 295 NOTREACHED(); | |
| 296 return gfx::ColorSpace::RangeID::UNSPECIFIED; | |
| 297 } | |
| 298 | |
|
hubbe
2016/09/21 20:25:44
Since these should line up exactly in all cases, i
servolk
2016/09/21 20:53:22
Yeah, I was thinking about whether it's better to
servolk
2016/09/21 21:11:27
Yup, sorry, I meant static_assert. I'll convert th
servolk
2016/09/21 22:05:06
Done.
| |
| 299 gfx::ColorSpace::TransferID FromWebMTransferCharacteristics( | |
| 300 TransferCharacteristics tc) { | |
| 301 switch (tc) { | |
| 302 case TransferCharacteristics::kBt709: | |
| 303 return gfx::ColorSpace::TransferID::BT709; | |
| 304 case TransferCharacteristics::kUnspecified: | |
| 305 return gfx::ColorSpace::TransferID::UNSPECIFIED; | |
| 306 case TransferCharacteristics::kGamma22curve: | |
| 307 return gfx::ColorSpace::TransferID::GAMMA22; | |
| 308 case TransferCharacteristics::kGamma28curve: | |
| 309 return gfx::ColorSpace::TransferID::GAMMA28; | |
| 310 case TransferCharacteristics::kSmpte170M: | |
| 311 return gfx::ColorSpace::TransferID::SMPTE170M; | |
| 312 case TransferCharacteristics::kSmpte240M: | |
| 313 return gfx::ColorSpace::TransferID::SMPTE240M; | |
| 314 case TransferCharacteristics::kLinear: | |
| 315 return gfx::ColorSpace::TransferID::LINEAR; | |
| 316 case TransferCharacteristics::kLog: | |
| 317 return gfx::ColorSpace::TransferID::LOG; | |
| 318 case TransferCharacteristics::kLogSqrt: | |
| 319 return gfx::ColorSpace::TransferID::LOG_SQRT; | |
| 320 case TransferCharacteristics::kIec6196624: | |
| 321 return gfx::ColorSpace::TransferID::IEC61966_2_4; | |
| 322 case TransferCharacteristics::kBt1361ExtendedColourGamut: | |
| 323 return gfx::ColorSpace::TransferID::BT1361_ECG; | |
| 324 case TransferCharacteristics::kIec6196621: | |
| 325 return gfx::ColorSpace::TransferID::IEC61966_2_1; | |
| 326 case TransferCharacteristics::k10BitBt2020: | |
| 327 return gfx::ColorSpace::TransferID::BT2020_10; | |
| 328 case TransferCharacteristics::k12BitBt2020: | |
| 329 return gfx::ColorSpace::TransferID::BT2020_12; | |
| 330 case TransferCharacteristics::kSmpteSt2084: | |
| 331 return gfx::ColorSpace::TransferID::SMPTEST2084; | |
| 332 case TransferCharacteristics::kSmpteSt4281: | |
| 333 return gfx::ColorSpace::TransferID::SMPTEST428_1; | |
| 334 case TransferCharacteristics::kAribStdB67Hlg: | |
| 335 return gfx::ColorSpace::TransferID::ARIB_STD_B67; | |
| 336 } | |
| 337 NOTREACHED(); | |
| 338 return gfx::ColorSpace::TransferID::UNSPECIFIED; | |
| 339 } | |
| 340 | |
| 341 gfx::ColorSpace::PrimaryID FromWebMPrimaries(Primaries primaries) { | |
| 342 switch (primaries) { | |
| 343 case Primaries::kBt709: | |
| 344 return gfx::ColorSpace::PrimaryID::BT709; | |
| 345 case Primaries::kUnspecified: | |
| 346 return gfx::ColorSpace::PrimaryID::UNSPECIFIED; | |
| 347 case Primaries::kBt470M: | |
| 348 return gfx::ColorSpace::PrimaryID::BT470M; | |
| 349 case Primaries::kBt470Bg: | |
| 350 return gfx::ColorSpace::PrimaryID::BT470BG; | |
| 351 case Primaries::kSmpte170M: | |
| 352 return gfx::ColorSpace::PrimaryID::SMPTE170M; | |
| 353 case Primaries::kSmpte240M: | |
| 354 return gfx::ColorSpace::PrimaryID::SMPTE240M; | |
| 355 case Primaries::kFilm: | |
| 356 return gfx::ColorSpace::PrimaryID::FILM; | |
| 357 case Primaries::kBt2020: | |
| 358 return gfx::ColorSpace::PrimaryID::BT2020; | |
| 359 case Primaries::kSmpteSt4281: | |
| 360 return gfx::ColorSpace::PrimaryID::SMPTEST428_1; | |
| 361 case Primaries::kJedecP22Phosphors: | |
| 362 return gfx::ColorSpace::PrimaryID::UNSPECIFIED; | |
| 363 } | |
| 364 NOTREACHED(); | |
| 365 return gfx::ColorSpace::PrimaryID::UNSPECIFIED; | |
| 366 } | |
| 367 | |
| 368 WebMColorMetadata::WebMColorMetadata() {} | |
| 369 WebMColorMetadata::WebMColorMetadata(const WebMColorMetadata& rhs) = default; | |
| 370 | |
| 371 WebMMasteringMetadataParser::WebMMasteringMetadataParser() {} | |
| 372 WebMMasteringMetadataParser::~WebMMasteringMetadataParser() {} | |
| 373 | |
| 374 bool WebMMasteringMetadataParser::OnFloat(int id, double val) { | |
| 375 switch (id) { | |
| 376 case kWebMIdPrimaryRChromaticityX: | |
| 377 mastering_metadata_.primary_r_chromaticity_x = val; | |
| 378 break; | |
| 379 case kWebMIdPrimaryRChromaticityY: | |
| 380 mastering_metadata_.primary_r_chromaticity_y = val; | |
| 381 break; | |
| 382 case kWebMIdPrimaryGChromaticityX: | |
| 383 mastering_metadata_.primary_g_chromaticity_x = val; | |
| 384 break; | |
| 385 case kWebMIdPrimaryGChromaticityY: | |
| 386 mastering_metadata_.primary_g_chromaticity_y = val; | |
| 387 break; | |
| 388 case kWebMIdPrimaryBChromaticityX: | |
| 389 mastering_metadata_.primary_b_chromaticity_x = val; | |
| 390 break; | |
| 391 case kWebMIdPrimaryBChromaticityY: | |
| 392 mastering_metadata_.primary_b_chromaticity_y = val; | |
| 393 break; | |
| 394 case kWebMIdWhitePointChromaticityX: | |
| 395 mastering_metadata_.white_point_chromaticity_x = val; | |
| 396 break; | |
| 397 case kWebMIdWhitePointChromaticityY: | |
| 398 mastering_metadata_.white_point_chromaticity_y = val; | |
| 399 break; | |
| 400 case kWebMIdLuminanceMax: | |
| 401 mastering_metadata_.luminance_max = val; | |
| 402 break; | |
| 403 case kWebMIdLuminanceMin: | |
| 404 mastering_metadata_.luminance_min = val; | |
| 405 break; | |
| 406 default: | |
| 407 DVLOG(1) << "Unexpected id in MasteringMetadata: 0x" << std::hex << id; | |
| 408 return false; | |
| 409 } | |
| 410 return true; | |
| 411 } | |
| 412 | |
| 413 WebMColourParser::WebMColourParser() { | |
| 414 Reset(); | |
| 415 } | |
| 416 | |
| 417 WebMColourParser::~WebMColourParser() {} | |
| 418 | |
| 419 void WebMColourParser::Reset() { | |
| 420 matrix_coefficients_ = -1; | |
| 421 bits_per_channel_ = -1; | |
| 422 chroma_subsampling_horz_ = -1; | |
| 423 chroma_subsampling_vert_ = -1; | |
| 424 cb_subsampling_horz_ = -1; | |
| 425 cb_subsampling_vert_ = -1; | |
| 426 chroma_siting_horz_ = -1; | |
| 427 chroma_siting_vert_ = -1; | |
| 428 range_ = -1; | |
| 429 transfer_characteristics_ = -1; | |
| 430 primaries_ = -1; | |
| 431 max_cll_ = -1; | |
| 432 max_fall_ = -1; | |
| 433 } | |
| 434 | |
| 435 WebMParserClient* WebMColourParser::OnListStart(int id) { | |
| 436 if (id == kWebMIdMasteringMetadata) { | |
| 437 mastering_metadata_parsed_ = false; | |
| 438 return &mastering_metadata_parser_; | |
| 439 } | |
| 440 | |
| 441 return this; | |
| 442 } | |
| 443 | |
| 444 bool WebMColourParser::OnListEnd(int id) { | |
| 445 if (id == kWebMIdMasteringMetadata) | |
| 446 mastering_metadata_parsed_ = true; | |
| 447 return true; | |
| 448 } | |
| 449 | |
| 450 bool WebMColourParser::OnUInt(int id, int64_t val) { | |
| 451 int64_t* dst = nullptr; | |
| 452 | |
| 453 switch (id) { | |
| 454 case kWebMIdMatrixCoefficients: | |
| 455 dst = &matrix_coefficients_; | |
| 456 break; | |
| 457 case kWebMIdBitsPerChannel: | |
| 458 dst = &bits_per_channel_; | |
| 459 break; | |
| 460 case kWebMIdChromaSubsamplingHorz: | |
| 461 dst = &chroma_subsampling_horz_; | |
| 462 break; | |
| 463 case kWebMIdChromaSubsamplingVert: | |
| 464 dst = &chroma_subsampling_vert_; | |
| 465 break; | |
| 466 case kWebMIdCbSubsamplingHorz: | |
| 467 dst = &cb_subsampling_horz_; | |
| 468 break; | |
| 469 case kWebMIdCbSubsamplingVert: | |
| 470 dst = &cb_subsampling_vert_; | |
| 471 break; | |
| 472 case kWebMIdChromaSitingHorz: | |
| 473 dst = &chroma_siting_horz_; | |
| 474 break; | |
| 475 case kWebMIdChromaSitingVert: | |
| 476 dst = &chroma_siting_vert_; | |
| 477 break; | |
| 478 case kWebMIdRange: | |
| 479 dst = &range_; | |
| 480 break; | |
| 481 case kWebMIdTransferCharacteristics: | |
| 482 dst = &transfer_characteristics_; | |
| 483 break; | |
| 484 case kWebMIdPrimaries: | |
| 485 dst = &primaries_; | |
| 486 break; | |
| 487 case kWebMIdMaxCLL: | |
| 488 dst = &max_cll_; | |
| 489 break; | |
| 490 case kWebMIdMaxFALL: | |
| 491 dst = &max_fall_; | |
| 492 break; | |
| 493 default: | |
| 494 return true; | |
| 495 } | |
| 496 | |
| 497 DCHECK(dst); | |
| 498 if (*dst != -1) { | |
| 499 LOG(ERROR) << "Multiple values for id " << std::hex << id << " specified (" | |
| 500 << *dst << " and " << val << ")"; | |
| 501 return false; | |
| 502 } | |
| 503 | |
| 504 *dst = val; | |
| 505 return true; | |
| 506 } | |
| 507 | |
| 508 WebMColorMetadata WebMColourParser::GetWebMColorMetadata() const { | |
| 509 WebMColorMetadata color_metadata; | |
| 510 | |
| 511 if (bits_per_channel_ != -1) | |
| 512 color_metadata.BitsPerChannel = bits_per_channel_; | |
| 513 | |
| 514 if (chroma_subsampling_horz_ != -1) | |
| 515 color_metadata.ChromaSubsamplingHorz = chroma_subsampling_horz_; | |
| 516 if (chroma_subsampling_vert_ != -1) | |
| 517 color_metadata.ChromaSubsamplingVert = chroma_subsampling_vert_; | |
| 518 if (cb_subsampling_horz_ != -1) | |
| 519 color_metadata.CbSubsamplingHorz = cb_subsampling_horz_; | |
| 520 if (cb_subsampling_vert_ != -1) | |
| 521 color_metadata.CbSubsamplingVert = cb_subsampling_vert_; | |
| 522 if (chroma_siting_horz_ != -1) | |
| 523 color_metadata.ChromaSitingHorz = chroma_siting_horz_; | |
| 524 if (chroma_siting_vert_ != -1) | |
| 525 color_metadata.ChromaSitingVert = chroma_siting_vert_; | |
| 526 | |
| 527 gfx::ColorSpace::MatrixID matrix_id = gfx::ColorSpace::MatrixID::UNSPECIFIED; | |
| 528 if (matrix_coefficients_ != -1) | |
| 529 matrix_id = FromWebMMatrixCoefficients( | |
| 530 static_cast<MatrixCoefficients>(matrix_coefficients_)); | |
| 531 | |
| 532 gfx::ColorSpace::RangeID range_id = gfx::ColorSpace::RangeID::UNSPECIFIED; | |
| 533 if (range_ != -1) | |
| 534 range_id = FromWebMRange(static_cast<Range>(range_)); | |
| 535 | |
| 536 gfx::ColorSpace::TransferID transfer_id = | |
| 537 gfx::ColorSpace::TransferID::UNSPECIFIED; | |
| 538 if (transfer_characteristics_ != -1) | |
| 539 transfer_id = FromWebMTransferCharacteristics( | |
| 540 static_cast<TransferCharacteristics>(transfer_characteristics_)); | |
| 541 | |
| 542 gfx::ColorSpace::PrimaryID primary_id = | |
| 543 gfx::ColorSpace::PrimaryID::UNSPECIFIED; | |
| 544 if (primaries_ != -1) | |
| 545 primary_id = FromWebMPrimaries(static_cast<Primaries>(primaries_)); | |
| 546 | |
| 547 color_metadata.color_space = | |
| 548 gfx::ColorSpace(primary_id, transfer_id, matrix_id, range_id); | |
| 549 | |
| 550 if (max_cll_ != -1) | |
| 551 color_metadata.hdr_metadata.max_cll = max_cll_; | |
| 552 | |
| 553 if (max_fall_ != -1) | |
| 554 color_metadata.hdr_metadata.max_fall = max_fall_; | |
| 555 | |
| 556 if (mastering_metadata_parsed_) | |
| 557 color_metadata.hdr_metadata.mastering_metadata = | |
| 558 mastering_metadata_parser_.GetMasteringMetadata(); | |
| 559 | |
| 560 return color_metadata; | |
| 561 } | |
| 562 | |
| 563 } // namespace media | |
| OLD | NEW |