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

Side by Side Diff: media/formats/webm/webm_colour_parser.cc

Issue 2333663003: Add color metadata info to VideoDecoderConfig. (Closed)
Patch Set: buildfix Created 4 years, 3 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 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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698