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 WebMMasteringMetadataParser::WebMMasteringMetadataParser() {} | |
| 13 WebMMasteringMetadataParser::~WebMMasteringMetadataParser() {} | |
| 14 | |
| 15 bool WebMMasteringMetadataParser::OnFloat(int id, double val) { | |
| 16 switch (id) { | |
| 17 case kWebMIdPrimaryRChromaticityX: | |
| 18 mastering_metadata_.PrimaryRChromaticityX = val; | |
| 19 break; | |
| 20 case kWebMIdPrimaryRChromaticityY: | |
| 21 mastering_metadata_.PrimaryRChromaticityY = val; | |
| 22 break; | |
| 23 case kWebMIdPrimaryGChromaticityX: | |
| 24 mastering_metadata_.PrimaryGChromaticityX = val; | |
| 25 break; | |
| 26 case kWebMIdPrimaryGChromaticityY: | |
| 27 mastering_metadata_.PrimaryGChromaticityY = val; | |
| 28 break; | |
| 29 case kWebMIdPrimaryBChromaticityX: | |
| 30 mastering_metadata_.PrimaryBChromaticityX = val; | |
| 31 break; | |
| 32 case kWebMIdPrimaryBChromaticityY: | |
| 33 mastering_metadata_.PrimaryBChromaticityY = val; | |
| 34 break; | |
| 35 case kWebMIdWhitePointChromaticityX: | |
| 36 mastering_metadata_.WhitePointChromaticityX = val; | |
| 37 break; | |
| 38 case kWebMIdWhitePointChromaticityY: | |
| 39 mastering_metadata_.WhitePointChromaticityY = val; | |
| 40 break; | |
| 41 case kWebMIdLuminanceMax: | |
| 42 mastering_metadata_.LuminanceMax = val; | |
| 43 break; | |
| 44 case kWebMIdLuminanceMin: | |
| 45 mastering_metadata_.LuminanceMin = val; | |
| 46 break; | |
| 47 default: | |
| 48 DVLOG(1) << "Unexpected id in MasteringMetadata: 0x" << std::hex << id; | |
| 49 return false; | |
| 50 } | |
| 51 return true; | |
| 52 } | |
| 53 | |
| 54 WebMColourParser::WebMColourParser() { | |
| 55 Reset(); | |
| 56 } | |
| 57 | |
| 58 WebMColourParser::~WebMColourParser() {} | |
| 59 | |
| 60 void WebMColourParser::Reset() { | |
| 61 matrix_coefficients_ = -1; | |
| 62 bits_per_channel_ = -1; | |
| 63 chroma_subsampling_horz_ = -1; | |
| 64 chroma_subsampling_vert_ = -1; | |
| 65 cb_subsampling_horz_ = -1; | |
| 66 cb_subsampling_vert_ = -1; | |
| 67 chroma_siting_horz_ = -1; | |
| 68 chroma_siting_vert_ = -1; | |
| 69 range_ = -1; | |
| 70 transfer_characteristics_ = -1; | |
| 71 primaries_ = -1; | |
| 72 max_cll_ = -1; | |
| 73 max_fall_ = -1; | |
| 74 } | |
| 75 | |
| 76 WebMParserClient* WebMColourParser::OnListStart(int id) { | |
| 77 if (id == kWebMIdMasteringMetadata) { | |
| 78 mastering_metadata_parsed_ = false; | |
| 79 return &mastering_metadata_parser_; | |
| 80 } | |
| 81 | |
| 82 return this; | |
| 83 } | |
| 84 | |
| 85 bool WebMColourParser::OnListEnd(int id) { | |
| 86 if (id == kWebMIdMasteringMetadata) | |
| 87 mastering_metadata_parsed_ = true; | |
| 88 return true; | |
| 89 } | |
| 90 | |
| 91 bool WebMColourParser::OnUInt(int id, int64_t val) { | |
| 92 int64_t* dst = nullptr; | |
| 93 | |
| 94 switch (id) { | |
| 95 case kWebMIdMatrixCoefficients: | |
| 96 dst = &matrix_coefficients_; | |
| 97 break; | |
| 98 case kWebMIdBitsPerChannel: | |
| 99 dst = &bits_per_channel_; | |
| 100 break; | |
| 101 case kWebMIdChromaSubsamplingHorz: | |
| 102 dst = &chroma_subsampling_horz_; | |
| 103 break; | |
| 104 case kWebMIdChromaSubsamplingVert: | |
| 105 dst = &chroma_subsampling_vert_; | |
| 106 break; | |
| 107 case kWebMIdCbSubsamplingHorz: | |
| 108 dst = &cb_subsampling_horz_; | |
| 109 break; | |
| 110 case kWebMIdCbSubsamplingVert: | |
| 111 dst = &cb_subsampling_vert_; | |
| 112 break; | |
| 113 case kWebMIdChromaSitingHorz: | |
| 114 dst = &chroma_siting_horz_; | |
| 115 break; | |
| 116 case kWebMIdChromaSitingVert: | |
| 117 dst = &chroma_siting_vert_; | |
| 118 break; | |
| 119 case kWebMIdRange: | |
| 120 dst = &range_; | |
| 121 break; | |
| 122 case kWebMIdTransferCharacteristics: | |
| 123 dst = &transfer_characteristics_; | |
| 124 break; | |
| 125 case kWebMIdPrimaries: | |
| 126 dst = &primaries_; | |
| 127 break; | |
| 128 case kWebMIdMaxCLL: | |
| 129 dst = &max_cll_; | |
| 130 break; | |
| 131 case kWebMIdMaxFALL: | |
| 132 dst = &max_fall_; | |
| 133 break; | |
| 134 default: | |
| 135 return true; | |
| 136 } | |
| 137 | |
| 138 DCHECK(dst); | |
| 139 if (*dst != -1) { | |
| 140 LOG(ERROR) << "Multiple values for id " << std::hex << id << " specified (" | |
| 141 << *dst << " and " << val << ")"; | |
| 142 return false; | |
| 143 } | |
| 144 | |
| 145 *dst = val; | |
| 146 return true; | |
| 147 } | |
| 148 | |
| 149 ColorMetadata WebMColourParser::GetColorMetadata() const { | |
| 150 ColorMetadata color_metadata; | |
| 151 | |
| 152 DCHECK_NE(-1, matrix_coefficients_); | |
| 153 color_metadata.matrix_coefficients = | |
| 154 static_cast<MatrixCoefficients>(matrix_coefficients_); | |
| 155 DCHECK_NE(-1, bits_per_channel_); | |
| 156 color_metadata.BitsPerChannel = bits_per_channel_; | |
| 157 | |
| 158 if (chroma_subsampling_horz_ != -1) | |
|
halliwell
2016/09/14 18:58:40
is it expected that this data could be missing? L
servolk
2016/09/14 22:34:35
No, it's not expected to be missing, but this read
| |
| 159 color_metadata.ChromaSubsamplingHorz = chroma_subsampling_horz_; | |
| 160 if (chroma_subsampling_vert_ != -1) | |
| 161 color_metadata.ChromaSubsamplingVert = chroma_subsampling_vert_; | |
| 162 if (cb_subsampling_horz_ != -1) | |
| 163 color_metadata.CbSubsamplingHorz = cb_subsampling_horz_; | |
| 164 if (cb_subsampling_vert_ != -1) | |
| 165 color_metadata.CbSubsamplingVert = cb_subsampling_vert_; | |
| 166 if (chroma_siting_horz_ != -1) | |
| 167 color_metadata.ChromaSitingHorz = chroma_siting_horz_; | |
| 168 if (chroma_siting_vert_ != -1) | |
| 169 color_metadata.ChromaSitingVert = chroma_siting_vert_; | |
| 170 | |
| 171 if (range_ != -1) | |
| 172 color_metadata.range = static_cast<Range>(range_); | |
| 173 if (transfer_characteristics_ != -1) | |
| 174 color_metadata.transfer_characteristics = | |
| 175 static_cast<TransferCharacteristics>(transfer_characteristics_); | |
| 176 if (primaries_ != -1) | |
| 177 color_metadata.primaries = static_cast<Primaries>(primaries_); | |
| 178 | |
| 179 DCHECK_NE(-1, max_cll_); | |
| 180 color_metadata.hdr_metadata.MaxCLL = max_cll_; | |
| 181 DCHECK_NE(-1, max_fall_); | |
| 182 color_metadata.hdr_metadata.MaxFALL = max_fall_; | |
| 183 | |
| 184 DCHECK(mastering_metadata_parsed_); | |
| 185 color_metadata.hdr_metadata.mastering_metadata = | |
| 186 mastering_metadata_parser_.GetMasteringMetadata(); | |
| 187 return color_metadata; | |
| 188 } | |
| 189 | |
| 190 } // namespace media | |
| OLD | NEW |