154 enum ChromaSubsampling {
155 CHROMA_420_VERTICAL = 0,
156 CHROMA_420_COLLOCATED_WITH_LUMA = 1,
161 enum ChromaSitingValues {
164 kTopCollocated = kLeftCollocated,
173 uint8_t chroma_subsampling,
174 bool video_full_range_flag,
175 uint8_t color_primaries,
176 uint8_t transfer_characteristics,
177 uint8_t matrix_coefficients,
178 const std::vector<uint8_t>& codec_initialization_data);
183 bool ParseMP4(
const std::vector<uint8_t>& data);
187 bool ParseWebM(
const std::vector<uint8_t>& data);
192 double sample_duration_seconds);
196 void WriteMP4(std::vector<uint8_t>* data)
const;
200 void WriteWebM(std::vector<uint8_t>* data)
const;
209 void SetChromaSubsampling(uint8_t subsampling_x, uint8_t subsampling_y);
210 void SetChromaSubsampling(ChromaSubsampling chroma_subsampling);
211 void SetChromaLocation(uint8_t chroma_siting_x, uint8_t chroma_siting_y);
213 void set_profile(uint8_t profile) { profile_ = profile; }
214 void set_level(uint8_t level) { level_ = level; }
215 void set_bit_depth(uint8_t bit_depth) { bit_depth_ = bit_depth; }
216 void set_video_full_range_flag(
bool video_full_range_flag) {
217 video_full_range_flag_ = video_full_range_flag;
219 void set_color_primaries(uint8_t color_primaries) {
220 color_primaries_ = color_primaries;
222 void set_transfer_characteristics(uint8_t transfer_characteristics) {
223 transfer_characteristics_ = transfer_characteristics;
225 void set_matrix_coefficients(uint8_t matrix_coefficients) {
226 matrix_coefficients_ = matrix_coefficients;
229 bool is_profile_set()
const {
return static_cast<bool>(profile_); }
230 bool is_level_set()
const {
return static_cast<bool>(level_); }
231 bool is_bit_depth_set()
const {
return static_cast<bool>(bit_depth_); }
232 bool is_chroma_subsampling_set()
const {
233 return static_cast<bool>(chroma_subsampling_);
235 bool is_video_full_range_flag_set()
const {
236 return static_cast<bool>(video_full_range_flag_);
238 bool is_color_primaries_set()
const {
239 return static_cast<bool>(color_primaries_);
241 bool is_transfer_characteristics_set()
const {
242 return static_cast<bool>(transfer_characteristics_);
244 bool is_matrix_coefficients_set()
const {
245 return static_cast<bool>(matrix_coefficients_);
247 bool is_chroma_location_set()
const {
248 return static_cast<bool>(chroma_location_);
251 uint8_t profile()
const {
return profile_.value_or(0); }
252 uint8_t level()
const {
return level_.value_or(10); }
253 uint8_t bit_depth()
const {
return bit_depth_.value_or(8); }
254 uint8_t chroma_subsampling()
const {
255 return chroma_subsampling_.value_or(CHROMA_420_COLLOCATED_WITH_LUMA);
257 bool video_full_range_flag()
const {
258 return video_full_range_flag_.value_or(
false);
260 uint8_t color_primaries()
const {
261 return color_primaries_.value_or(AVCOL_PRI_UNSPECIFIED);
263 uint8_t transfer_characteristics()
const {
264 return transfer_characteristics_.value_or(AVCOL_TRC_UNSPECIFIED);
266 uint8_t matrix_coefficients()
const {
267 return matrix_coefficients_.value_or(AVCOL_SPC_UNSPECIFIED);
269 uint8_t chroma_location()
const {
270 return chroma_location_.value_or(AVCHROMA_LOC_UNSPECIFIED);
274 void UpdateChromaSubsamplingIfNeeded();
276 std::optional<uint8_t> profile_;
277 std::optional<uint8_t> level_;
278 std::optional<uint8_t> bit_depth_;
279 std::optional<uint8_t> chroma_subsampling_;
280 std::optional<bool> video_full_range_flag_;
281 std::optional<uint8_t> color_primaries_;
282 std::optional<uint8_t> transfer_characteristics_;
283 std::optional<uint8_t> matrix_coefficients_;
284 std::vector<uint8_t> codec_initialization_data_;
288 std::optional<uint8_t> chroma_location_;