mkvmuxerutil: Revert to using mkvmuxertypes.
- The direct change to stdint.h types causes too much downstream churn. Need an intermediate step or a wrapper because quite a bit of user code explicitly casts args passed to mkvmuxerutil functions to types defined in mkvmuxertypes. - Update call sites in mkvmuxer to avoid ambiguity errors. Change-Id: I018445b3d8ab1da776ecdb19a290ac00af63c2cf
This commit is contained in:
		| @@ -82,30 +82,46 @@ IMkvWriter::~IMkvWriter() {} | |||||||
|  |  | ||||||
| bool WriteEbmlHeader(IMkvWriter* writer, uint64_t doc_type_version) { | bool WriteEbmlHeader(IMkvWriter* writer, uint64_t doc_type_version) { | ||||||
|   // Level 0 |   // Level 0 | ||||||
|   uint64_t size = EbmlElementSize(libwebm::kMkvEBMLVersion, UINT64_C(1)); |   uint64_t size = | ||||||
|   size += EbmlElementSize(libwebm::kMkvEBMLReadVersion, UINT64_C(1)); |       EbmlElementSize(libwebm::kMkvEBMLVersion, static_cast<uint64>(1)); | ||||||
|   size += EbmlElementSize(libwebm::kMkvEBMLMaxIDLength, UINT64_C(4)); |   size += EbmlElementSize(libwebm::kMkvEBMLReadVersion, static_cast<uint64>(1)); | ||||||
|   size += EbmlElementSize(libwebm::kMkvEBMLMaxSizeLength, UINT64_C(8)); |   size += EbmlElementSize(libwebm::kMkvEBMLMaxIDLength, static_cast<uint64>(4)); | ||||||
|  |   size += | ||||||
|  |       EbmlElementSize(libwebm::kMkvEBMLMaxSizeLength, static_cast<uint64>(8)); | ||||||
|   size += EbmlElementSize(libwebm::kMkvDocType, "webm"); |   size += EbmlElementSize(libwebm::kMkvDocType, "webm"); | ||||||
|   size += EbmlElementSize(libwebm::kMkvDocTypeVersion, doc_type_version); |   size += EbmlElementSize(libwebm::kMkvDocTypeVersion, | ||||||
|   size += EbmlElementSize(libwebm::kMkvDocTypeReadVersion, UINT64_C(2)); |                           static_cast<uint64>(doc_type_version)); | ||||||
|  |   size += | ||||||
|  |       EbmlElementSize(libwebm::kMkvDocTypeReadVersion, static_cast<uint64>(2)); | ||||||
|  |  | ||||||
|   if (!WriteEbmlMasterElement(writer, libwebm::kMkvEBML, size)) |   if (!WriteEbmlMasterElement(writer, libwebm::kMkvEBML, size)) | ||||||
|     return false; |     return false; | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvEBMLVersion, UINT64_C(1))) |   if (!WriteEbmlElement(writer, libwebm::kMkvEBMLVersion, | ||||||
|  |                         static_cast<uint64>(1))) { | ||||||
|     return false; |     return false; | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvEBMLReadVersion, UINT64_C(1))) |   } | ||||||
|  |   if (!WriteEbmlElement(writer, libwebm::kMkvEBMLReadVersion, | ||||||
|  |                         static_cast<uint64>(1))) { | ||||||
|     return false; |     return false; | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvEBMLMaxIDLength, UINT64_C(4))) |   } | ||||||
|  |   if (!WriteEbmlElement(writer, libwebm::kMkvEBMLMaxIDLength, | ||||||
|  |                         static_cast<uint64>(4))) { | ||||||
|     return false; |     return false; | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvEBMLMaxSizeLength, UINT64_C(8))) |   } | ||||||
|  |   if (!WriteEbmlElement(writer, libwebm::kMkvEBMLMaxSizeLength, | ||||||
|  |                         static_cast<uint64>(8))) { | ||||||
|     return false; |     return false; | ||||||
|  |   } | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvDocType, "webm")) |   if (!WriteEbmlElement(writer, libwebm::kMkvDocType, "webm")) | ||||||
|     return false; |     return false; | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvDocTypeVersion, doc_type_version)) |   if (!WriteEbmlElement(writer, libwebm::kMkvDocTypeVersion, | ||||||
|  |                         static_cast<uint64>(doc_type_version))) { | ||||||
|     return false; |     return false; | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvDocTypeReadVersion, UINT64_C(2))) |   } | ||||||
|  |   if (!WriteEbmlElement(writer, libwebm::kMkvDocTypeReadVersion, | ||||||
|  |                         static_cast<uint64>(2))) { | ||||||
|     return false; |     return false; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
| @@ -262,15 +278,17 @@ bool CuePoint::Write(IMkvWriter* writer) const { | |||||||
|   if (!writer || track_ < 1 || cluster_pos_ < 1) |   if (!writer || track_ < 1 || cluster_pos_ < 1) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   uint64_t size = |   uint64_t size = EbmlElementSize(libwebm::kMkvCueClusterPosition, | ||||||
|       EbmlElementSize(libwebm::kMkvCueClusterPosition, cluster_pos_); |                                   static_cast<uint64>(cluster_pos_)); | ||||||
|   size += EbmlElementSize(libwebm::kMkvCueTrack, track_); |   size += EbmlElementSize(libwebm::kMkvCueTrack, static_cast<uint64>(track_)); | ||||||
|   if (output_block_number_ && block_number_ > 1) |   if (output_block_number_ && block_number_ > 1) | ||||||
|     size += EbmlElementSize(libwebm::kMkvCueBlockNumber, block_number_); |     size += EbmlElementSize(libwebm::kMkvCueBlockNumber, | ||||||
|  |                             static_cast<uint64>(block_number_)); | ||||||
|   const uint64_t track_pos_size = |   const uint64_t track_pos_size = | ||||||
|       EbmlMasterElementSize(libwebm::kMkvCueTrackPositions, size) + size; |       EbmlMasterElementSize(libwebm::kMkvCueTrackPositions, size) + size; | ||||||
|   const uint64_t payload_size = |   const uint64_t payload_size = | ||||||
|       EbmlElementSize(libwebm::kMkvCueTime, time_) + track_pos_size; |       EbmlElementSize(libwebm::kMkvCueTime, static_cast<uint64>(time_)) + | ||||||
|  |       track_pos_size; | ||||||
|  |  | ||||||
|   if (!WriteEbmlMasterElement(writer, libwebm::kMkvCuePoint, payload_size)) |   if (!WriteEbmlMasterElement(writer, libwebm::kMkvCuePoint, payload_size)) | ||||||
|     return false; |     return false; | ||||||
| @@ -279,18 +297,27 @@ bool CuePoint::Write(IMkvWriter* writer) const { | |||||||
|   if (payload_position < 0) |   if (payload_position < 0) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvCueTime, time_)) |   if (!WriteEbmlElement(writer, libwebm::kMkvCueTime, | ||||||
|  |                         static_cast<uint64>(time_))) { | ||||||
|     return false; |     return false; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   if (!WriteEbmlMasterElement(writer, libwebm::kMkvCueTrackPositions, size)) |   if (!WriteEbmlMasterElement(writer, libwebm::kMkvCueTrackPositions, size)) | ||||||
|     return false; |     return false; | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvCueTrack, track_)) |   if (!WriteEbmlElement(writer, libwebm::kMkvCueTrack, | ||||||
|  |                         static_cast<uint64>(track_))) { | ||||||
|     return false; |     return false; | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvCueClusterPosition, cluster_pos_)) |   } | ||||||
|  |   if (!WriteEbmlElement(writer, libwebm::kMkvCueClusterPosition, | ||||||
|  |                         static_cast<uint64>(cluster_pos_))) { | ||||||
|     return false; |     return false; | ||||||
|   if (output_block_number_ && block_number_ > 1) |   } | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvCueBlockNumber, block_number_)) |   if (output_block_number_ && block_number_ > 1) { | ||||||
|  |     if (!WriteEbmlElement(writer, libwebm::kMkvCueBlockNumber, | ||||||
|  |                           static_cast<uint64>(block_number_))) { | ||||||
|       return false; |       return false; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|   const int64_t stop_position = writer->Position(); |   const int64_t stop_position = writer->Position(); | ||||||
|   if (stop_position < 0) |   if (stop_position < 0) | ||||||
| @@ -303,15 +330,17 @@ bool CuePoint::Write(IMkvWriter* writer) const { | |||||||
| } | } | ||||||
|  |  | ||||||
| uint64_t CuePoint::PayloadSize() const { | uint64_t CuePoint::PayloadSize() const { | ||||||
|   uint64_t size = |   uint64_t size = EbmlElementSize(libwebm::kMkvCueClusterPosition, | ||||||
|       EbmlElementSize(libwebm::kMkvCueClusterPosition, cluster_pos_); |                                   static_cast<uint64>(cluster_pos_)); | ||||||
|   size += EbmlElementSize(libwebm::kMkvCueTrack, track_); |   size += EbmlElementSize(libwebm::kMkvCueTrack, static_cast<uint64>(track_)); | ||||||
|   if (output_block_number_ && block_number_ > 1) |   if (output_block_number_ && block_number_ > 1) | ||||||
|     size += EbmlElementSize(libwebm::kMkvCueBlockNumber, block_number_); |     size += EbmlElementSize(libwebm::kMkvCueBlockNumber, | ||||||
|  |                             static_cast<uint64>(block_number_)); | ||||||
|   const uint64_t track_pos_size = |   const uint64_t track_pos_size = | ||||||
|       EbmlMasterElementSize(libwebm::kMkvCueTrackPositions, size) + size; |       EbmlMasterElementSize(libwebm::kMkvCueTrackPositions, size) + size; | ||||||
|   const uint64_t payload_size = |   const uint64_t payload_size = | ||||||
|       EbmlElementSize(libwebm::kMkvCueTime, time_) + track_pos_size; |       EbmlElementSize(libwebm::kMkvCueTime, static_cast<uint64>(time_)) + | ||||||
|  |       track_pos_size; | ||||||
|  |  | ||||||
|   return payload_size; |   return payload_size; | ||||||
| } | } | ||||||
| @@ -456,8 +485,9 @@ bool ContentEncAESSettings::Write(IMkvWriter* writer) const { | |||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvAESSettingsCipherMode, |   if (!WriteEbmlElement(writer, libwebm::kMkvAESSettingsCipherMode, | ||||||
|                         cipher_mode_)) |                         static_cast<uint64>(cipher_mode_))) { | ||||||
|     return false; |     return false; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   const int64_t stop_position = writer->Position(); |   const int64_t stop_position = writer->Position(); | ||||||
|   if (stop_position < 0 || |   if (stop_position < 0 || | ||||||
| @@ -468,8 +498,8 @@ bool ContentEncAESSettings::Write(IMkvWriter* writer) const { | |||||||
| } | } | ||||||
|  |  | ||||||
| uint64_t ContentEncAESSettings::PayloadSize() const { | uint64_t ContentEncAESSettings::PayloadSize() const { | ||||||
|   uint64_t size = |   uint64_t size = EbmlElementSize(libwebm::kMkvAESSettingsCipherMode, | ||||||
|       EbmlElementSize(libwebm::kMkvAESSettingsCipherMode, cipher_mode_); |                                   static_cast<uint64>(cipher_mode_)); | ||||||
|   return size; |   return size; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -529,20 +559,22 @@ bool ContentEncoding::Write(IMkvWriter* writer) const { | |||||||
|                               encoding_size)) |                               encoding_size)) | ||||||
|     return false; |     return false; | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvContentEncodingOrder, |   if (!WriteEbmlElement(writer, libwebm::kMkvContentEncodingOrder, | ||||||
|                         encoding_order_)) |                         static_cast<uint64>(encoding_order_))) | ||||||
|     return false; |     return false; | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvContentEncodingScope, |   if (!WriteEbmlElement(writer, libwebm::kMkvContentEncodingScope, | ||||||
|                         encoding_scope_)) |                         static_cast<uint64>(encoding_scope_))) | ||||||
|     return false; |     return false; | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvContentEncodingType, |   if (!WriteEbmlElement(writer, libwebm::kMkvContentEncodingType, | ||||||
|                         encoding_type_)) |                         static_cast<uint64>(encoding_type_))) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   if (!WriteEbmlMasterElement(writer, libwebm::kMkvContentEncryption, |   if (!WriteEbmlMasterElement(writer, libwebm::kMkvContentEncryption, | ||||||
|                               encryption_size)) |                               encryption_size)) | ||||||
|     return false; |     return false; | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvContentEncAlgo, enc_algo_)) |   if (!WriteEbmlElement(writer, libwebm::kMkvContentEncAlgo, | ||||||
|  |                         static_cast<uint64>(enc_algo_))) { | ||||||
|     return false; |     return false; | ||||||
|  |   } | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvContentEncKeyID, enc_key_id_, |   if (!WriteEbmlElement(writer, libwebm::kMkvContentEncKeyID, enc_key_id_, | ||||||
|                         enc_key_id_length_)) |                         enc_key_id_length_)) | ||||||
|     return false; |     return false; | ||||||
| @@ -571,12 +603,12 @@ uint64_t ContentEncoding::EncodingSize(uint64_t compresion_size, | |||||||
|         EbmlMasterElementSize(libwebm::kMkvContentEncryption, encryption_size) + |         EbmlMasterElementSize(libwebm::kMkvContentEncryption, encryption_size) + | ||||||
|         encryption_size; |         encryption_size; | ||||||
|   } |   } | ||||||
|   encoding_size += |   encoding_size += EbmlElementSize(libwebm::kMkvContentEncodingType, | ||||||
|       EbmlElementSize(libwebm::kMkvContentEncodingType, encoding_type_); |                                    static_cast<uint64>(encoding_type_)); | ||||||
|   encoding_size += |   encoding_size += EbmlElementSize(libwebm::kMkvContentEncodingScope, | ||||||
|       EbmlElementSize(libwebm::kMkvContentEncodingScope, encoding_scope_); |                                    static_cast<uint64>(encoding_scope_)); | ||||||
|   encoding_size += |   encoding_size += EbmlElementSize(libwebm::kMkvContentEncodingOrder, | ||||||
|       EbmlElementSize(libwebm::kMkvContentEncodingOrder, encoding_order_); |                                    static_cast<uint64>(encoding_order_)); | ||||||
|  |  | ||||||
|   return encoding_size; |   return encoding_size; | ||||||
| } | } | ||||||
| @@ -586,7 +618,8 @@ uint64_t ContentEncoding::EncryptionSize() const { | |||||||
|  |  | ||||||
|   uint64_t encryption_size = EbmlElementSize(libwebm::kMkvContentEncKeyID, |   uint64_t encryption_size = EbmlElementSize(libwebm::kMkvContentEncKeyID, | ||||||
|                                              enc_key_id_, enc_key_id_length_); |                                              enc_key_id_, enc_key_id_length_); | ||||||
|   encryption_size += EbmlElementSize(libwebm::kMkvContentEncAlgo, enc_algo_); |   encryption_size += EbmlElementSize(libwebm::kMkvContentEncAlgo, | ||||||
|  |                                      static_cast<uint64>(enc_algo_)); | ||||||
|  |  | ||||||
|   return encryption_size + aes_size; |   return encryption_size + aes_size; | ||||||
| } | } | ||||||
| @@ -664,9 +697,10 @@ ContentEncoding* Track::GetContentEncodingByIndex(uint32_t index) const { | |||||||
| } | } | ||||||
|  |  | ||||||
| uint64_t Track::PayloadSize() const { | uint64_t Track::PayloadSize() const { | ||||||
|   uint64_t size = EbmlElementSize(libwebm::kMkvTrackNumber, number_); |   uint64_t size = | ||||||
|   size += EbmlElementSize(libwebm::kMkvTrackUID, uid_); |       EbmlElementSize(libwebm::kMkvTrackNumber, static_cast<uint64>(number_)); | ||||||
|   size += EbmlElementSize(libwebm::kMkvTrackType, type_); |   size += EbmlElementSize(libwebm::kMkvTrackUID, static_cast<uint64>(uid_)); | ||||||
|  |   size += EbmlElementSize(libwebm::kMkvTrackType, static_cast<uint64>(type_)); | ||||||
|   if (codec_id_) |   if (codec_id_) | ||||||
|     size += EbmlElementSize(libwebm::kMkvCodecID, codec_id_); |     size += EbmlElementSize(libwebm::kMkvCodecID, codec_id_); | ||||||
|   if (codec_private_) |   if (codec_private_) | ||||||
| @@ -676,15 +710,22 @@ uint64_t Track::PayloadSize() const { | |||||||
|     size += EbmlElementSize(libwebm::kMkvLanguage, language_); |     size += EbmlElementSize(libwebm::kMkvLanguage, language_); | ||||||
|   if (name_) |   if (name_) | ||||||
|     size += EbmlElementSize(libwebm::kMkvName, name_); |     size += EbmlElementSize(libwebm::kMkvName, name_); | ||||||
|   if (max_block_additional_id_) |   if (max_block_additional_id_) { | ||||||
|     size += EbmlElementSize(libwebm::kMkvMaxBlockAdditionID, |     size += EbmlElementSize(libwebm::kMkvMaxBlockAdditionID, | ||||||
|                             max_block_additional_id_); |                             static_cast<uint64>(max_block_additional_id_)); | ||||||
|   if (codec_delay_) |   } | ||||||
|     size += EbmlElementSize(libwebm::kMkvCodecDelay, codec_delay_); |   if (codec_delay_) { | ||||||
|   if (seek_pre_roll_) |     size += EbmlElementSize(libwebm::kMkvCodecDelay, | ||||||
|     size += EbmlElementSize(libwebm::kMkvSeekPreRoll, seek_pre_roll_); |                             static_cast<uint64>(codec_delay_)); | ||||||
|   if (default_duration_) |   } | ||||||
|     size += EbmlElementSize(libwebm::kMkvDefaultDuration, default_duration_); |   if (seek_pre_roll_) { | ||||||
|  |     size += EbmlElementSize(libwebm::kMkvSeekPreRoll, | ||||||
|  |                             static_cast<uint64>(seek_pre_roll_)); | ||||||
|  |   } | ||||||
|  |   if (default_duration_) { | ||||||
|  |     size += EbmlElementSize(libwebm::kMkvDefaultDuration, | ||||||
|  |                             static_cast<uint64>(default_duration_)); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   if (content_encoding_entries_size_ > 0) { |   if (content_encoding_entries_size_ > 0) { | ||||||
|     uint64_t content_encodings_size = 0; |     uint64_t content_encodings_size = 0; | ||||||
| @@ -722,55 +763,64 @@ bool Track::Write(IMkvWriter* writer) const { | |||||||
|   if (!WriteEbmlMasterElement(writer, libwebm::kMkvTrackEntry, payload_size)) |   if (!WriteEbmlMasterElement(writer, libwebm::kMkvTrackEntry, payload_size)) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   uint64_t size = EbmlElementSize(libwebm::kMkvTrackNumber, number_); |   uint64_t size = | ||||||
|   size += EbmlElementSize(libwebm::kMkvTrackUID, uid_); |       EbmlElementSize(libwebm::kMkvTrackNumber, static_cast<uint64>(number_)); | ||||||
|   size += EbmlElementSize(libwebm::kMkvTrackType, type_); |   size += EbmlElementSize(libwebm::kMkvTrackUID, static_cast<uint64>(uid_)); | ||||||
|  |   size += EbmlElementSize(libwebm::kMkvTrackType, static_cast<uint64>(type_)); | ||||||
|   if (codec_id_) |   if (codec_id_) | ||||||
|     size += EbmlElementSize(libwebm::kMkvCodecID, codec_id_); |     size += EbmlElementSize(libwebm::kMkvCodecID, codec_id_); | ||||||
|   if (codec_private_) |   if (codec_private_) | ||||||
|     size += EbmlElementSize(libwebm::kMkvCodecPrivate, codec_private_, |     size += EbmlElementSize(libwebm::kMkvCodecPrivate, codec_private_, | ||||||
|                             codec_private_length_); |                             static_cast<uint64>(codec_private_length_)); | ||||||
|   if (language_) |   if (language_) | ||||||
|     size += EbmlElementSize(libwebm::kMkvLanguage, language_); |     size += EbmlElementSize(libwebm::kMkvLanguage, language_); | ||||||
|   if (name_) |   if (name_) | ||||||
|     size += EbmlElementSize(libwebm::kMkvName, name_); |     size += EbmlElementSize(libwebm::kMkvName, name_); | ||||||
|   if (max_block_additional_id_) |   if (max_block_additional_id_) | ||||||
|     size += EbmlElementSize(libwebm::kMkvMaxBlockAdditionID, |     size += EbmlElementSize(libwebm::kMkvMaxBlockAdditionID, | ||||||
|                             max_block_additional_id_); |                             static_cast<uint64>(max_block_additional_id_)); | ||||||
|   if (codec_delay_) |   if (codec_delay_) | ||||||
|     size += EbmlElementSize(libwebm::kMkvCodecDelay, codec_delay_); |     size += EbmlElementSize(libwebm::kMkvCodecDelay, | ||||||
|  |                             static_cast<uint64>(codec_delay_)); | ||||||
|   if (seek_pre_roll_) |   if (seek_pre_roll_) | ||||||
|     size += EbmlElementSize(libwebm::kMkvSeekPreRoll, seek_pre_roll_); |     size += EbmlElementSize(libwebm::kMkvSeekPreRoll, | ||||||
|  |                             static_cast<uint64>(seek_pre_roll_)); | ||||||
|   if (default_duration_) |   if (default_duration_) | ||||||
|     size += EbmlElementSize(libwebm::kMkvDefaultDuration, default_duration_); |     size += EbmlElementSize(libwebm::kMkvDefaultDuration, | ||||||
|  |                             static_cast<uint64>(default_duration_)); | ||||||
|  |  | ||||||
|   const int64_t payload_position = writer->Position(); |   const int64_t payload_position = writer->Position(); | ||||||
|   if (payload_position < 0) |   if (payload_position < 0) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvTrackNumber, number_)) |   if (!WriteEbmlElement(writer, libwebm::kMkvTrackNumber, | ||||||
|  |                         static_cast<uint64>(number_))) | ||||||
|     return false; |     return false; | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvTrackUID, uid_)) |   if (!WriteEbmlElement(writer, libwebm::kMkvTrackUID, | ||||||
|  |                         static_cast<uint64>(uid_))) | ||||||
|     return false; |     return false; | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvTrackType, type_)) |   if (!WriteEbmlElement(writer, libwebm::kMkvTrackType, | ||||||
|  |                         static_cast<uint64>(type_))) | ||||||
|     return false; |     return false; | ||||||
|   if (max_block_additional_id_) { |   if (max_block_additional_id_) { | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvMaxBlockAdditionID, |     if (!WriteEbmlElement(writer, libwebm::kMkvMaxBlockAdditionID, | ||||||
|                           max_block_additional_id_)) { |                           static_cast<uint64>(max_block_additional_id_))) { | ||||||
|       return false; |       return false; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   if (codec_delay_) { |   if (codec_delay_) { | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvCodecDelay, codec_delay_)) |     if (!WriteEbmlElement(writer, libwebm::kMkvCodecDelay, | ||||||
|  |                           static_cast<uint64>(codec_delay_))) | ||||||
|       return false; |       return false; | ||||||
|   } |   } | ||||||
|   if (seek_pre_roll_) { |   if (seek_pre_roll_) { | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvSeekPreRoll, seek_pre_roll_)) |     if (!WriteEbmlElement(writer, libwebm::kMkvSeekPreRoll, | ||||||
|  |                           static_cast<uint64>(seek_pre_roll_))) | ||||||
|       return false; |       return false; | ||||||
|   } |   } | ||||||
|   if (default_duration_) { |   if (default_duration_) { | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvDefaultDuration, |     if (!WriteEbmlElement(writer, libwebm::kMkvDefaultDuration, | ||||||
|                           default_duration_)) |                           static_cast<uint64>(default_duration_))) | ||||||
|       return false; |       return false; | ||||||
|   } |   } | ||||||
|   if (codec_id_) { |   if (codec_id_) { | ||||||
| @@ -779,7 +829,7 @@ bool Track::Write(IMkvWriter* writer) const { | |||||||
|   } |   } | ||||||
|   if (codec_private_) { |   if (codec_private_) { | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvCodecPrivate, codec_private_, |     if (!WriteEbmlElement(writer, libwebm::kMkvCodecPrivate, codec_private_, | ||||||
|                           codec_private_length_)) |                           static_cast<uint64>(codec_private_length_))) | ||||||
|       return false; |       return false; | ||||||
|   } |   } | ||||||
|   if (language_) { |   if (language_) { | ||||||
| @@ -1031,64 +1081,68 @@ bool Colour::Write(IMkvWriter* writer) const { | |||||||
|  |  | ||||||
|   if (matrix_coefficients != kValueNotPresent && |   if (matrix_coefficients != kValueNotPresent && | ||||||
|       !WriteEbmlElement(writer, libwebm::kMkvMatrixCoefficients, |       !WriteEbmlElement(writer, libwebm::kMkvMatrixCoefficients, | ||||||
|                         matrix_coefficients)) { |                         static_cast<uint64>(matrix_coefficients))) { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|   if (bits_per_channel != kValueNotPresent && |   if (bits_per_channel != kValueNotPresent && | ||||||
|       !WriteEbmlElement(writer, libwebm::kMkvBitsPerChannel, |       !WriteEbmlElement(writer, libwebm::kMkvBitsPerChannel, | ||||||
|                         bits_per_channel)) { |                         static_cast<uint64>(bits_per_channel))) { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|   if (chroma_subsampling_horz != kValueNotPresent && |   if (chroma_subsampling_horz != kValueNotPresent && | ||||||
|       !WriteEbmlElement(writer, libwebm::kMkvChromaSubsamplingHorz, |       !WriteEbmlElement(writer, libwebm::kMkvChromaSubsamplingHorz, | ||||||
|                         chroma_subsampling_horz)) { |                         static_cast<uint64>(chroma_subsampling_horz))) { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|   if (chroma_subsampling_vert != kValueNotPresent && |   if (chroma_subsampling_vert != kValueNotPresent && | ||||||
|       !WriteEbmlElement(writer, libwebm::kMkvChromaSubsamplingVert, |       !WriteEbmlElement(writer, libwebm::kMkvChromaSubsamplingVert, | ||||||
|                         chroma_subsampling_vert)) { |                         static_cast<uint64>(chroma_subsampling_vert))) { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   if (cb_subsampling_horz != kValueNotPresent && |   if (cb_subsampling_horz != kValueNotPresent && | ||||||
|       !WriteEbmlElement(writer, libwebm::kMkvCbSubsamplingHorz, |       !WriteEbmlElement(writer, libwebm::kMkvCbSubsamplingHorz, | ||||||
|                         cb_subsampling_horz)) { |                         static_cast<uint64>(cb_subsampling_horz))) { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|   if (cb_subsampling_vert != kValueNotPresent && |   if (cb_subsampling_vert != kValueNotPresent && | ||||||
|       !WriteEbmlElement(writer, libwebm::kMkvCbSubsamplingVert, |       !WriteEbmlElement(writer, libwebm::kMkvCbSubsamplingVert, | ||||||
|                         cb_subsampling_vert)) { |                         static_cast<uint64>(cb_subsampling_vert))) { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|   if (chroma_siting_horz != kValueNotPresent && |   if (chroma_siting_horz != kValueNotPresent && | ||||||
|       !WriteEbmlElement(writer, libwebm::kMkvChromaSitingHorz, |       !WriteEbmlElement(writer, libwebm::kMkvChromaSitingHorz, | ||||||
|                         chroma_siting_horz)) { |                         static_cast<uint64>(chroma_siting_horz))) { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|   if (chroma_siting_vert != kValueNotPresent && |   if (chroma_siting_vert != kValueNotPresent && | ||||||
|       !WriteEbmlElement(writer, libwebm::kMkvChromaSitingVert, |       !WriteEbmlElement(writer, libwebm::kMkvChromaSitingVert, | ||||||
|                         chroma_siting_vert)) { |                         static_cast<uint64>(chroma_siting_vert))) { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|   if (range != kValueNotPresent && |   if (range != kValueNotPresent && | ||||||
|       !WriteEbmlElement(writer, libwebm::kMkvRange, range)) { |       !WriteEbmlElement(writer, libwebm::kMkvRange, | ||||||
|  |                         static_cast<uint64>(range))) { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|   if (transfer_characteristics != kValueNotPresent && |   if (transfer_characteristics != kValueNotPresent && | ||||||
|       !WriteEbmlElement(writer, libwebm::kMkvTransferCharacteristics, |       !WriteEbmlElement(writer, libwebm::kMkvTransferCharacteristics, | ||||||
|                         transfer_characteristics)) { |                         static_cast<uint64>(transfer_characteristics))) { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|   if (primaries != kValueNotPresent && |   if (primaries != kValueNotPresent && | ||||||
|       !WriteEbmlElement(writer, libwebm::kMkvPrimaries, primaries)) { |       !WriteEbmlElement(writer, libwebm::kMkvPrimaries, | ||||||
|  |                         static_cast<uint64>(primaries))) { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|   if (max_cll != kValueNotPresent && |   if (max_cll != kValueNotPresent && | ||||||
|       !WriteEbmlElement(writer, libwebm::kMkvMaxCLL, max_cll)) { |       !WriteEbmlElement(writer, libwebm::kMkvMaxCLL, | ||||||
|  |                         static_cast<uint64>(max_cll))) { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|   if (max_fall != kValueNotPresent && |   if (max_fall != kValueNotPresent && | ||||||
|       !WriteEbmlElement(writer, libwebm::kMkvMaxFALL, max_fall)) { |       !WriteEbmlElement(writer, libwebm::kMkvMaxFALL, | ||||||
|  |                         static_cast<uint64>(max_fall))) { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -1121,37 +1175,42 @@ uint64_t Colour::PayloadSize() const { | |||||||
|   uint64_t size = 0; |   uint64_t size = 0; | ||||||
|  |  | ||||||
|   if (matrix_coefficients != kValueNotPresent) |   if (matrix_coefficients != kValueNotPresent) | ||||||
|     size += |     size += EbmlElementSize(libwebm::kMkvMatrixCoefficients, | ||||||
|         EbmlElementSize(libwebm::kMkvMatrixCoefficients, matrix_coefficients); |                             static_cast<uint64>(matrix_coefficients)); | ||||||
|   if (bits_per_channel != kValueNotPresent) |   if (bits_per_channel != kValueNotPresent) | ||||||
|     size += EbmlElementSize(libwebm::kMkvBitsPerChannel, bits_per_channel); |     size += EbmlElementSize(libwebm::kMkvBitsPerChannel, | ||||||
|  |                             static_cast<uint64>(bits_per_channel)); | ||||||
|   if (chroma_subsampling_horz != kValueNotPresent) |   if (chroma_subsampling_horz != kValueNotPresent) | ||||||
|     size += EbmlElementSize(libwebm::kMkvChromaSubsamplingHorz, |     size += EbmlElementSize(libwebm::kMkvChromaSubsamplingHorz, | ||||||
|                             chroma_subsampling_horz); |                             static_cast<uint64>(chroma_subsampling_horz)); | ||||||
|   if (chroma_subsampling_vert != kValueNotPresent) |   if (chroma_subsampling_vert != kValueNotPresent) | ||||||
|     size += EbmlElementSize(libwebm::kMkvChromaSubsamplingVert, |     size += EbmlElementSize(libwebm::kMkvChromaSubsamplingVert, | ||||||
|                             chroma_subsampling_vert); |                             static_cast<uint64>(chroma_subsampling_vert)); | ||||||
|   if (cb_subsampling_horz != kValueNotPresent) |   if (cb_subsampling_horz != kValueNotPresent) | ||||||
|     size += |     size += EbmlElementSize(libwebm::kMkvCbSubsamplingHorz, | ||||||
|         EbmlElementSize(libwebm::kMkvCbSubsamplingHorz, cb_subsampling_horz); |                             static_cast<uint64>(cb_subsampling_horz)); | ||||||
|   if (cb_subsampling_vert != kValueNotPresent) |   if (cb_subsampling_vert != kValueNotPresent) | ||||||
|     size += |     size += EbmlElementSize(libwebm::kMkvCbSubsamplingVert, | ||||||
|         EbmlElementSize(libwebm::kMkvCbSubsamplingVert, cb_subsampling_vert); |                             static_cast<uint64>(cb_subsampling_vert)); | ||||||
|   if (chroma_siting_horz != kValueNotPresent) |   if (chroma_siting_horz != kValueNotPresent) | ||||||
|     size += EbmlElementSize(libwebm::kMkvChromaSitingHorz, chroma_siting_horz); |     size += EbmlElementSize(libwebm::kMkvChromaSitingHorz, | ||||||
|  |                             static_cast<uint64>(chroma_siting_horz)); | ||||||
|   if (chroma_siting_vert != kValueNotPresent) |   if (chroma_siting_vert != kValueNotPresent) | ||||||
|     size += EbmlElementSize(libwebm::kMkvChromaSitingVert, chroma_siting_vert); |     size += EbmlElementSize(libwebm::kMkvChromaSitingVert, | ||||||
|  |                             static_cast<uint64>(chroma_siting_vert)); | ||||||
|   if (range != kValueNotPresent) |   if (range != kValueNotPresent) | ||||||
|     size += EbmlElementSize(libwebm::kMkvRange, range); |     size += EbmlElementSize(libwebm::kMkvRange, static_cast<uint64>(range)); | ||||||
|   if (transfer_characteristics != kValueNotPresent) |   if (transfer_characteristics != kValueNotPresent) | ||||||
|     size += EbmlElementSize(libwebm::kMkvTransferCharacteristics, |     size += EbmlElementSize(libwebm::kMkvTransferCharacteristics, | ||||||
|                             transfer_characteristics); |                             static_cast<uint64>(transfer_characteristics)); | ||||||
|   if (primaries != kValueNotPresent) |   if (primaries != kValueNotPresent) | ||||||
|     size += EbmlElementSize(libwebm::kMkvPrimaries, primaries); |     size += | ||||||
|  |         EbmlElementSize(libwebm::kMkvPrimaries, static_cast<uint64>(primaries)); | ||||||
|   if (max_cll != kValueNotPresent) |   if (max_cll != kValueNotPresent) | ||||||
|     size += EbmlElementSize(libwebm::kMkvMaxCLL, max_cll); |     size += EbmlElementSize(libwebm::kMkvMaxCLL, static_cast<uint64>(max_cll)); | ||||||
|   if (max_fall != kValueNotPresent) |   if (max_fall != kValueNotPresent) | ||||||
|     size += EbmlElementSize(libwebm::kMkvMaxFALL, max_fall); |     size += | ||||||
|  |         EbmlElementSize(libwebm::kMkvMaxFALL, static_cast<uint64>(max_fall)); | ||||||
|  |  | ||||||
|   if (mastering_metadata_) |   if (mastering_metadata_) | ||||||
|     size += mastering_metadata_->MasteringMetadataSize(); |     size += mastering_metadata_->MasteringMetadataSize(); | ||||||
| @@ -1221,40 +1280,50 @@ bool VideoTrack::Write(IMkvWriter* writer) const { | |||||||
|   if (payload_position < 0) |   if (payload_position < 0) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvPixelWidth, width_)) |   if (!WriteEbmlElement(writer, libwebm::kMkvPixelWidth, | ||||||
|  |                         static_cast<uint64>(width_))) | ||||||
|     return false; |     return false; | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvPixelHeight, height_)) |   if (!WriteEbmlElement(writer, libwebm::kMkvPixelHeight, | ||||||
|  |                         static_cast<uint64>(height_))) | ||||||
|     return false; |     return false; | ||||||
|   if (display_width_ > 0) { |   if (display_width_ > 0) { | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvDisplayWidth, display_width_)) |     if (!WriteEbmlElement(writer, libwebm::kMkvDisplayWidth, | ||||||
|  |                           static_cast<uint64>(display_width_))) | ||||||
|       return false; |       return false; | ||||||
|   } |   } | ||||||
|   if (display_height_ > 0) { |   if (display_height_ > 0) { | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvDisplayHeight, display_height_)) |     if (!WriteEbmlElement(writer, libwebm::kMkvDisplayHeight, | ||||||
|  |                           static_cast<uint64>(display_height_))) | ||||||
|       return false; |       return false; | ||||||
|   } |   } | ||||||
|   if (crop_left_ > 0) { |   if (crop_left_ > 0) { | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvPixelCropLeft, crop_left_)) |     if (!WriteEbmlElement(writer, libwebm::kMkvPixelCropLeft, | ||||||
|  |                           static_cast<uint64>(crop_left_))) | ||||||
|       return false; |       return false; | ||||||
|   } |   } | ||||||
|   if (crop_right_ > 0) { |   if (crop_right_ > 0) { | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvPixelCropRight, crop_right_)) |     if (!WriteEbmlElement(writer, libwebm::kMkvPixelCropRight, | ||||||
|  |                           static_cast<uint64>(crop_right_))) | ||||||
|       return false; |       return false; | ||||||
|   } |   } | ||||||
|   if (crop_top_ > 0) { |   if (crop_top_ > 0) { | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvPixelCropTop, crop_top_)) |     if (!WriteEbmlElement(writer, libwebm::kMkvPixelCropTop, | ||||||
|  |                           static_cast<uint64>(crop_top_))) | ||||||
|       return false; |       return false; | ||||||
|   } |   } | ||||||
|   if (crop_bottom_ > 0) { |   if (crop_bottom_ > 0) { | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvPixelCropBottom, crop_bottom_)) |     if (!WriteEbmlElement(writer, libwebm::kMkvPixelCropBottom, | ||||||
|  |                           static_cast<uint64>(crop_bottom_))) | ||||||
|       return false; |       return false; | ||||||
|   } |   } | ||||||
|   if (stereo_mode_ > kMono) { |   if (stereo_mode_ > kMono) { | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvStereoMode, stereo_mode_)) |     if (!WriteEbmlElement(writer, libwebm::kMkvStereoMode, | ||||||
|  |                           static_cast<uint64>(stereo_mode_))) | ||||||
|       return false; |       return false; | ||||||
|   } |   } | ||||||
|   if (alpha_mode_ > kNoAlpha) { |   if (alpha_mode_ > kNoAlpha) { | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvAlphaMode, alpha_mode_)) |     if (!WriteEbmlElement(writer, libwebm::kMkvAlphaMode, | ||||||
|  |                           static_cast<uint64>(alpha_mode_))) | ||||||
|       return false; |       return false; | ||||||
|   } |   } | ||||||
|   if (frame_rate_ > 0.0) { |   if (frame_rate_ > 0.0) { | ||||||
| @@ -1305,24 +1374,34 @@ bool VideoTrack::SetColour(const Colour& colour) { | |||||||
| } | } | ||||||
|  |  | ||||||
| uint64_t VideoTrack::VideoPayloadSize() const { | uint64_t VideoTrack::VideoPayloadSize() const { | ||||||
|   uint64_t size = EbmlElementSize(libwebm::kMkvPixelWidth, width_); |   uint64_t size = | ||||||
|   size += EbmlElementSize(libwebm::kMkvPixelHeight, height_); |       EbmlElementSize(libwebm::kMkvPixelWidth, static_cast<uint64>(width_)); | ||||||
|  |   size += | ||||||
|  |       EbmlElementSize(libwebm::kMkvPixelHeight, static_cast<uint64>(height_)); | ||||||
|   if (display_width_ > 0) |   if (display_width_ > 0) | ||||||
|     size += EbmlElementSize(libwebm::kMkvDisplayWidth, display_width_); |     size += EbmlElementSize(libwebm::kMkvDisplayWidth, | ||||||
|  |                             static_cast<uint64>(display_width_)); | ||||||
|   if (display_height_ > 0) |   if (display_height_ > 0) | ||||||
|     size += EbmlElementSize(libwebm::kMkvDisplayHeight, display_height_); |     size += EbmlElementSize(libwebm::kMkvDisplayHeight, | ||||||
|  |                             static_cast<uint64>(display_height_)); | ||||||
|   if (crop_left_ > 0) |   if (crop_left_ > 0) | ||||||
|     size += EbmlElementSize(libwebm::kMkvPixelCropLeft, crop_left_); |     size += EbmlElementSize(libwebm::kMkvPixelCropLeft, | ||||||
|  |                             static_cast<uint64>(crop_left_)); | ||||||
|   if (crop_right_ > 0) |   if (crop_right_ > 0) | ||||||
|     size += EbmlElementSize(libwebm::kMkvPixelCropRight, crop_right_); |     size += EbmlElementSize(libwebm::kMkvPixelCropRight, | ||||||
|  |                             static_cast<uint64>(crop_right_)); | ||||||
|   if (crop_top_ > 0) |   if (crop_top_ > 0) | ||||||
|     size += EbmlElementSize(libwebm::kMkvPixelCropTop, crop_top_); |     size += EbmlElementSize(libwebm::kMkvPixelCropTop, | ||||||
|  |                             static_cast<uint64>(crop_top_)); | ||||||
|   if (crop_bottom_ > 0) |   if (crop_bottom_ > 0) | ||||||
|     size += EbmlElementSize(libwebm::kMkvPixelCropBottom, crop_bottom_); |     size += EbmlElementSize(libwebm::kMkvPixelCropBottom, | ||||||
|  |                             static_cast<uint64>(crop_bottom_)); | ||||||
|   if (stereo_mode_ > kMono) |   if (stereo_mode_ > kMono) | ||||||
|     size += EbmlElementSize(libwebm::kMkvStereoMode, stereo_mode_); |     size += EbmlElementSize(libwebm::kMkvStereoMode, | ||||||
|  |                             static_cast<uint64>(stereo_mode_)); | ||||||
|   if (alpha_mode_ > kNoAlpha) |   if (alpha_mode_ > kNoAlpha) | ||||||
|     size += EbmlElementSize(libwebm::kMkvAlphaMode, alpha_mode_); |     size += EbmlElementSize(libwebm::kMkvAlphaMode, | ||||||
|  |                             static_cast<uint64>(alpha_mode_)); | ||||||
|   if (frame_rate_ > 0.0) |   if (frame_rate_ > 0.0) | ||||||
|     size += EbmlElementSize(libwebm::kMkvFrameRate, |     size += EbmlElementSize(libwebm::kMkvFrameRate, | ||||||
|                             static_cast<float>(frame_rate_)); |                             static_cast<float>(frame_rate_)); | ||||||
| @@ -1346,9 +1425,11 @@ uint64_t AudioTrack::PayloadSize() const { | |||||||
|  |  | ||||||
|   uint64_t size = EbmlElementSize(libwebm::kMkvSamplingFrequency, |   uint64_t size = EbmlElementSize(libwebm::kMkvSamplingFrequency, | ||||||
|                                   static_cast<float>(sample_rate_)); |                                   static_cast<float>(sample_rate_)); | ||||||
|   size += EbmlElementSize(libwebm::kMkvChannels, channels_); |   size += | ||||||
|  |       EbmlElementSize(libwebm::kMkvChannels, static_cast<uint64>(channels_)); | ||||||
|   if (bit_depth_ > 0) |   if (bit_depth_ > 0) | ||||||
|     size += EbmlElementSize(libwebm::kMkvBitDepth, bit_depth_); |     size += | ||||||
|  |         EbmlElementSize(libwebm::kMkvBitDepth, static_cast<uint64>(bit_depth_)); | ||||||
|   size += EbmlMasterElementSize(libwebm::kMkvAudio, size); |   size += EbmlMasterElementSize(libwebm::kMkvAudio, size); | ||||||
|  |  | ||||||
|   return parent_size + size; |   return parent_size + size; | ||||||
| @@ -1361,9 +1442,11 @@ bool AudioTrack::Write(IMkvWriter* writer) const { | |||||||
|   // Calculate AudioSettings size. |   // Calculate AudioSettings size. | ||||||
|   uint64_t size = EbmlElementSize(libwebm::kMkvSamplingFrequency, |   uint64_t size = EbmlElementSize(libwebm::kMkvSamplingFrequency, | ||||||
|                                   static_cast<float>(sample_rate_)); |                                   static_cast<float>(sample_rate_)); | ||||||
|   size += EbmlElementSize(libwebm::kMkvChannels, channels_); |   size += | ||||||
|  |       EbmlElementSize(libwebm::kMkvChannels, static_cast<uint64>(channels_)); | ||||||
|   if (bit_depth_ > 0) |   if (bit_depth_ > 0) | ||||||
|     size += EbmlElementSize(libwebm::kMkvBitDepth, bit_depth_); |     size += | ||||||
|  |         EbmlElementSize(libwebm::kMkvBitDepth, static_cast<uint64>(bit_depth_)); | ||||||
|  |  | ||||||
|   if (!WriteEbmlMasterElement(writer, libwebm::kMkvAudio, size)) |   if (!WriteEbmlMasterElement(writer, libwebm::kMkvAudio, size)) | ||||||
|     return false; |     return false; | ||||||
| @@ -1375,10 +1458,12 @@ bool AudioTrack::Write(IMkvWriter* writer) const { | |||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvSamplingFrequency, |   if (!WriteEbmlElement(writer, libwebm::kMkvSamplingFrequency, | ||||||
|                         static_cast<float>(sample_rate_))) |                         static_cast<float>(sample_rate_))) | ||||||
|     return false; |     return false; | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvChannels, channels_)) |   if (!WriteEbmlElement(writer, libwebm::kMkvChannels, | ||||||
|  |                         static_cast<uint64>(channels_))) | ||||||
|     return false; |     return false; | ||||||
|   if (bit_depth_ > 0) |   if (bit_depth_ > 0) | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvBitDepth, bit_depth_)) |     if (!WriteEbmlElement(writer, libwebm::kMkvBitDepth, | ||||||
|  |                           static_cast<uint64>(bit_depth_))) | ||||||
|       return false; |       return false; | ||||||
|  |  | ||||||
|   const int64_t stop_position = writer->Position(); |   const int64_t stop_position = writer->Position(); | ||||||
| @@ -1650,9 +1735,11 @@ bool Chapter::ExpandDisplaysArray() { | |||||||
| uint64_t Chapter::WriteAtom(IMkvWriter* writer) const { | uint64_t Chapter::WriteAtom(IMkvWriter* writer) const { | ||||||
|   uint64_t payload_size = |   uint64_t payload_size = | ||||||
|       EbmlElementSize(libwebm::kMkvChapterStringUID, id_) + |       EbmlElementSize(libwebm::kMkvChapterStringUID, id_) + | ||||||
|       EbmlElementSize(libwebm::kMkvChapterUID, uid_) + |       EbmlElementSize(libwebm::kMkvChapterUID, static_cast<uint64>(uid_)) + | ||||||
|       EbmlElementSize(libwebm::kMkvChapterTimeStart, start_timecode_) + |       EbmlElementSize(libwebm::kMkvChapterTimeStart, | ||||||
|       EbmlElementSize(libwebm::kMkvChapterTimeEnd, end_timecode_); |                       static_cast<uint64>(start_timecode_)) + | ||||||
|  |       EbmlElementSize(libwebm::kMkvChapterTimeEnd, | ||||||
|  |                       static_cast<uint64>(end_timecode_)); | ||||||
|  |  | ||||||
|   for (int idx = 0; idx < displays_count_; ++idx) { |   for (int idx = 0; idx < displays_count_; ++idx) { | ||||||
|     const Display& d = displays_[idx]; |     const Display& d = displays_[idx]; | ||||||
| @@ -1674,13 +1761,16 @@ uint64_t Chapter::WriteAtom(IMkvWriter* writer) const { | |||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvChapterStringUID, id_)) |   if (!WriteEbmlElement(writer, libwebm::kMkvChapterStringUID, id_)) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvChapterUID, uid_)) |   if (!WriteEbmlElement(writer, libwebm::kMkvChapterUID, | ||||||
|  |                         static_cast<uint64>(uid_))) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvChapterTimeStart, start_timecode_)) |   if (!WriteEbmlElement(writer, libwebm::kMkvChapterTimeStart, | ||||||
|  |                         static_cast<uint64>(start_timecode_))) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvChapterTimeEnd, end_timecode_)) |   if (!WriteEbmlElement(writer, libwebm::kMkvChapterTimeEnd, | ||||||
|  |                         static_cast<uint64>(end_timecode_))) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   for (int idx = 0; idx < displays_count_; ++idx) { |   for (int idx = 0; idx < displays_count_; ++idx) { | ||||||
| @@ -2421,10 +2511,10 @@ bool SeekHead::Finalize(IMkvWriter* writer) const { | |||||||
|  |  | ||||||
|     for (int32_t i = 0; i < kSeekEntryCount; ++i) { |     for (int32_t i = 0; i < kSeekEntryCount; ++i) { | ||||||
|       if (seek_entry_id_[i] != 0) { |       if (seek_entry_id_[i] != 0) { | ||||||
|         entry_size[i] = EbmlElementSize( |         entry_size[i] = EbmlElementSize(libwebm::kMkvSeekID, | ||||||
|             libwebm::kMkvSeekID, static_cast<uint64_t>(seek_entry_id_[i])); |                                         static_cast<uint64>(seek_entry_id_[i])); | ||||||
|         entry_size[i] += |         entry_size[i] += EbmlElementSize( | ||||||
|             EbmlElementSize(libwebm::kMkvSeekPosition, seek_entry_pos_[i]); |             libwebm::kMkvSeekPosition, static_cast<uint64>(seek_entry_pos_[i])); | ||||||
|  |  | ||||||
|         payload_size += |         payload_size += | ||||||
|             EbmlMasterElementSize(libwebm::kMkvSeek, entry_size[i]) + |             EbmlMasterElementSize(libwebm::kMkvSeek, entry_size[i]) + | ||||||
| @@ -2449,11 +2539,11 @@ bool SeekHead::Finalize(IMkvWriter* writer) const { | |||||||
|           return false; |           return false; | ||||||
|  |  | ||||||
|         if (!WriteEbmlElement(writer, libwebm::kMkvSeekID, |         if (!WriteEbmlElement(writer, libwebm::kMkvSeekID, | ||||||
|                               static_cast<uint64_t>(seek_entry_id_[i]))) |                               static_cast<uint64>(seek_entry_id_[i]))) | ||||||
|           return false; |           return false; | ||||||
|  |  | ||||||
|         if (!WriteEbmlElement(writer, libwebm::kMkvSeekPosition, |         if (!WriteEbmlElement(writer, libwebm::kMkvSeekPosition, | ||||||
|                               seek_entry_pos_[i])) |                               static_cast<uint64>(seek_entry_pos_[i]))) | ||||||
|           return false; |           return false; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @@ -2522,8 +2612,10 @@ bool SeekHead::SetSeekEntry(int index, uint32_t id, uint64_t position) { | |||||||
|  |  | ||||||
| uint64_t SeekHead::MaxEntrySize() const { | uint64_t SeekHead::MaxEntrySize() const { | ||||||
|   const uint64_t max_entry_payload_size = |   const uint64_t max_entry_payload_size = | ||||||
|       EbmlElementSize(libwebm::kMkvSeekID, UINT64_C(0xffffffff)) + |       EbmlElementSize(libwebm::kMkvSeekID, | ||||||
|       EbmlElementSize(libwebm::kMkvSeekPosition, UINT64_C(0xffffffffffffffff)); |                       static_cast<uint64>(UINT64_C(0xffffffff))) + | ||||||
|  |       EbmlElementSize(libwebm::kMkvSeekPosition, | ||||||
|  |                       static_cast<uint64>(UINT64_C(0xffffffffffffffff))); | ||||||
|   const uint64_t max_entry_size = |   const uint64_t max_entry_size = | ||||||
|       EbmlMasterElementSize(libwebm::kMkvSeek, max_entry_payload_size) + |       EbmlMasterElementSize(libwebm::kMkvSeek, max_entry_payload_size) + | ||||||
|       max_entry_payload_size; |       max_entry_payload_size; | ||||||
| @@ -2613,7 +2705,8 @@ bool SegmentInfo::Write(IMkvWriter* writer) { | |||||||
|   if (!writer || !muxing_app_ || !writing_app_) |   if (!writer || !muxing_app_ || !writing_app_) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   uint64_t size = EbmlElementSize(libwebm::kMkvTimecodeScale, timecode_scale_); |   uint64_t size = EbmlElementSize(libwebm::kMkvTimecodeScale, | ||||||
|  |                                   static_cast<uint64>(timecode_scale_)); | ||||||
|   if (duration_ > 0.0) |   if (duration_ > 0.0) | ||||||
|     size += |     size += | ||||||
|         EbmlElementSize(libwebm::kMkvDuration, static_cast<float>(duration_)); |         EbmlElementSize(libwebm::kMkvDuration, static_cast<float>(duration_)); | ||||||
| @@ -2629,7 +2722,8 @@ bool SegmentInfo::Write(IMkvWriter* writer) { | |||||||
|   if (payload_position < 0) |   if (payload_position < 0) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   if (!WriteEbmlElement(writer, libwebm::kMkvTimecodeScale, timecode_scale_)) |   if (!WriteEbmlElement(writer, libwebm::kMkvTimecodeScale, | ||||||
|  |                         static_cast<uint64>(timecode_scale_))) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   if (duration_ > 0.0) { |   if (duration_ > 0.0) { | ||||||
|   | |||||||
| @@ -31,20 +31,20 @@ namespace { | |||||||
| // Date elements are always 8 octets in size. | // Date elements are always 8 octets in size. | ||||||
| const int kDateElementSize = 8; | const int kDateElementSize = 8; | ||||||
|  |  | ||||||
| uint64_t WriteBlock(IMkvWriter* writer, const Frame* const frame, | uint64 WriteBlock(IMkvWriter* writer, const Frame* const frame, int64 timecode, | ||||||
|                     int64_t timecode, uint64_t timecode_scale) { |                   uint64 timecode_scale) { | ||||||
|   uint64_t block_additional_elem_size = 0; |   uint64 block_additional_elem_size = 0; | ||||||
|   uint64_t block_addid_elem_size = 0; |   uint64 block_addid_elem_size = 0; | ||||||
|   uint64_t block_more_payload_size = 0; |   uint64 block_more_payload_size = 0; | ||||||
|   uint64_t block_more_elem_size = 0; |   uint64 block_more_elem_size = 0; | ||||||
|   uint64_t block_additions_payload_size = 0; |   uint64 block_additions_payload_size = 0; | ||||||
|   uint64_t block_additions_elem_size = 0; |   uint64 block_additions_elem_size = 0; | ||||||
|   if (frame->additional()) { |   if (frame->additional()) { | ||||||
|     block_additional_elem_size = |     block_additional_elem_size = | ||||||
|         EbmlElementSize(libwebm::kMkvBlockAdditional, frame->additional(), |         EbmlElementSize(libwebm::kMkvBlockAdditional, frame->additional(), | ||||||
|                         frame->additional_length()); |                         frame->additional_length()); | ||||||
|     block_addid_elem_size = |     block_addid_elem_size = EbmlElementSize( | ||||||
|         EbmlElementSize(libwebm::kMkvBlockAddID, frame->add_id()); |         libwebm::kMkvBlockAddID, static_cast<uint64>(frame->add_id())); | ||||||
|  |  | ||||||
|     block_more_payload_size = |     block_more_payload_size = | ||||||
|         block_addid_elem_size + block_additional_elem_size; |         block_addid_elem_size + block_additional_elem_size; | ||||||
| @@ -58,32 +58,33 @@ uint64_t WriteBlock(IMkvWriter* writer, const Frame* const frame, | |||||||
|         block_additions_payload_size; |         block_additions_payload_size; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   uint64_t discard_padding_elem_size = 0; |   uint64 discard_padding_elem_size = 0; | ||||||
|   if (frame->discard_padding() != 0) { |   if (frame->discard_padding() != 0) { | ||||||
|     discard_padding_elem_size = |     discard_padding_elem_size = | ||||||
|         EbmlElementSize(libwebm::kMkvDiscardPadding, frame->discard_padding()); |         EbmlElementSize(libwebm::kMkvDiscardPadding, | ||||||
|  |                         static_cast<int64>(frame->discard_padding())); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   const uint64_t reference_block_timestamp = |   const uint64 reference_block_timestamp = | ||||||
|       frame->reference_block_timestamp() / timecode_scale; |       frame->reference_block_timestamp() / timecode_scale; | ||||||
|   uint64_t reference_block_elem_size = 0; |   uint64 reference_block_elem_size = 0; | ||||||
|   if (!frame->is_key()) { |   if (!frame->is_key()) { | ||||||
|     reference_block_elem_size = |     reference_block_elem_size = | ||||||
|         EbmlElementSize(libwebm::kMkvReferenceBlock, reference_block_timestamp); |         EbmlElementSize(libwebm::kMkvReferenceBlock, reference_block_timestamp); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   const uint64_t duration = frame->duration() / timecode_scale; |   const uint64 duration = frame->duration() / timecode_scale; | ||||||
|   uint64_t block_duration_elem_size = 0; |   uint64 block_duration_elem_size = 0; | ||||||
|   if (duration > 0) |   if (duration > 0) | ||||||
|     block_duration_elem_size = |     block_duration_elem_size = | ||||||
|         EbmlElementSize(libwebm::kMkvBlockDuration, duration); |         EbmlElementSize(libwebm::kMkvBlockDuration, duration); | ||||||
|  |  | ||||||
|   const uint64_t block_payload_size = 4 + frame->length(); |   const uint64 block_payload_size = 4 + frame->length(); | ||||||
|   const uint64_t block_elem_size = |   const uint64 block_elem_size = | ||||||
|       EbmlMasterElementSize(libwebm::kMkvBlock, block_payload_size) + |       EbmlMasterElementSize(libwebm::kMkvBlock, block_payload_size) + | ||||||
|       block_payload_size; |       block_payload_size; | ||||||
|  |  | ||||||
|   const uint64_t block_group_payload_size = |   const uint64 block_group_payload_size = | ||||||
|       block_elem_size + block_additions_elem_size + block_duration_elem_size + |       block_elem_size + block_additions_elem_size + block_duration_elem_size + | ||||||
|       discard_padding_elem_size + reference_block_elem_size; |       discard_padding_elem_size + reference_block_elem_size; | ||||||
|  |  | ||||||
| @@ -105,7 +106,7 @@ uint64_t WriteBlock(IMkvWriter* writer, const Frame* const frame, | |||||||
|   if (SerializeInt(writer, 0, 1)) |   if (SerializeInt(writer, 0, 1)) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   if (writer->Write(frame->frame(), static_cast<uint32_t>(frame->length()))) |   if (writer->Write(frame->frame(), static_cast<uint32>(frame->length()))) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   if (frame->additional()) { |   if (frame->additional()) { | ||||||
| @@ -118,7 +119,8 @@ uint64_t WriteBlock(IMkvWriter* writer, const Frame* const frame, | |||||||
|                                 block_more_payload_size)) |                                 block_more_payload_size)) | ||||||
|       return 0; |       return 0; | ||||||
|  |  | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvBlockAddID, frame->add_id())) |     if (!WriteEbmlElement(writer, libwebm::kMkvBlockAddID, | ||||||
|  |                           static_cast<uint64>(frame->add_id()))) | ||||||
|       return 0; |       return 0; | ||||||
|  |  | ||||||
|     if (!WriteEbmlElement(writer, libwebm::kMkvBlockAdditional, |     if (!WriteEbmlElement(writer, libwebm::kMkvBlockAdditional, | ||||||
| @@ -129,7 +131,7 @@ uint64_t WriteBlock(IMkvWriter* writer, const Frame* const frame, | |||||||
|  |  | ||||||
|   if (frame->discard_padding() != 0 && |   if (frame->discard_padding() != 0 && | ||||||
|       !WriteEbmlElement(writer, libwebm::kMkvDiscardPadding, |       !WriteEbmlElement(writer, libwebm::kMkvDiscardPadding, | ||||||
|                         frame->discard_padding())) { |                         static_cast<int64>(frame->discard_padding()))) { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -148,38 +150,38 @@ uint64_t WriteBlock(IMkvWriter* writer, const Frame* const frame, | |||||||
|          block_group_payload_size; |          block_group_payload_size; | ||||||
| } | } | ||||||
|  |  | ||||||
| uint64_t WriteSimpleBlock(IMkvWriter* writer, const Frame* const frame, | uint64 WriteSimpleBlock(IMkvWriter* writer, const Frame* const frame, | ||||||
|                           int64_t timecode) { |                         int64 timecode) { | ||||||
|   if (WriteID(writer, libwebm::kMkvSimpleBlock)) |   if (WriteID(writer, libwebm::kMkvSimpleBlock)) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   const int32_t size = static_cast<int32_t>(frame->length()) + 4; |   const int32 size = static_cast<int32>(frame->length()) + 4; | ||||||
|   if (WriteUInt(writer, size)) |   if (WriteUInt(writer, size)) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   if (WriteUInt(writer, static_cast<uint64_t>(frame->track_number()))) |   if (WriteUInt(writer, static_cast<uint64>(frame->track_number()))) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   if (SerializeInt(writer, timecode, 2)) |   if (SerializeInt(writer, timecode, 2)) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   uint64_t flags = 0; |   uint64 flags = 0; | ||||||
|   if (frame->is_key()) |   if (frame->is_key()) | ||||||
|     flags |= 0x80; |     flags |= 0x80; | ||||||
|  |  | ||||||
|   if (SerializeInt(writer, flags, 1)) |   if (SerializeInt(writer, flags, 1)) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   if (writer->Write(frame->frame(), static_cast<uint32_t>(frame->length()))) |   if (writer->Write(frame->frame(), static_cast<uint32>(frame->length()))) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   return static_cast<uint64_t>(GetUIntSize(libwebm::kMkvSimpleBlock) + |   return GetUIntSize(libwebm::kMkvSimpleBlock) + GetCodedUIntSize(size) + 4 + | ||||||
|                                GetCodedUIntSize(size) + 4 + frame->length()); |          frame->length(); | ||||||
| } | } | ||||||
|  |  | ||||||
| }  // namespace | }  // namespace | ||||||
|  |  | ||||||
| int32_t GetCodedUIntSize(uint64_t value) { | int32 GetCodedUIntSize(uint64 value) { | ||||||
|   if (value < 0x000000000000007FULL) |   if (value < 0x000000000000007FULL) | ||||||
|     return 1; |     return 1; | ||||||
|   else if (value < 0x0000000000003FFFULL) |   else if (value < 0x0000000000003FFFULL) | ||||||
| @@ -197,7 +199,7 @@ int32_t GetCodedUIntSize(uint64_t value) { | |||||||
|   return 8; |   return 8; | ||||||
| } | } | ||||||
|  |  | ||||||
| int32_t GetUIntSize(uint64_t value) { | int32 GetUIntSize(uint64 value) { | ||||||
|   if (value < 0x0000000000000100ULL) |   if (value < 0x0000000000000100ULL) | ||||||
|     return 1; |     return 1; | ||||||
|   else if (value < 0x0000000000010000ULL) |   else if (value < 0x0000000000010000ULL) | ||||||
| @@ -215,26 +217,26 @@ int32_t GetUIntSize(uint64_t value) { | |||||||
|   return 8; |   return 8; | ||||||
| } | } | ||||||
|  |  | ||||||
| int32_t GetIntSize(int64_t value) { | int32 GetIntSize(int64 value) { | ||||||
|   // Doubling the requested value ensures positive values with their high bit |   // Doubling the requested value ensures positive values with their high bit | ||||||
|   // set are written with 0-padding to avoid flipping the signedness. |   // set are written with 0-padding to avoid flipping the signedness. | ||||||
|   const uint64_t v = (value < 0) ? value ^ -1LL : value; |   const uint64 v = (value < 0) ? value ^ -1LL : value; | ||||||
|   return GetUIntSize(2 * v); |   return GetUIntSize(2 * v); | ||||||
| } | } | ||||||
|  |  | ||||||
| uint64_t EbmlMasterElementSize(uint64_t type, uint64_t value) { | uint64 EbmlMasterElementSize(uint64 type, uint64 value) { | ||||||
|   // Size of EBML ID |   // Size of EBML ID | ||||||
|   int32_t ebml_size = GetUIntSize(type); |   int32 ebml_size = GetUIntSize(type); | ||||||
|  |  | ||||||
|   // Datasize |   // Datasize | ||||||
|   ebml_size += GetCodedUIntSize(value); |   ebml_size += GetCodedUIntSize(value); | ||||||
|  |  | ||||||
|   return static_cast<uint64_t>(ebml_size); |   return ebml_size; | ||||||
| } | } | ||||||
|  |  | ||||||
| uint64_t EbmlElementSize(uint64_t type, int64_t value) { | uint64 EbmlElementSize(uint64 type, int64 value) { | ||||||
|   // Size of EBML ID |   // Size of EBML ID | ||||||
|   int32_t ebml_size = GetUIntSize(type); |   int32 ebml_size = GetUIntSize(type); | ||||||
|  |  | ||||||
|   // Datasize |   // Datasize | ||||||
|   ebml_size += GetIntSize(value); |   ebml_size += GetIntSize(value); | ||||||
| @@ -242,20 +244,19 @@ uint64_t EbmlElementSize(uint64_t type, int64_t value) { | |||||||
|   // Size of Datasize |   // Size of Datasize | ||||||
|   ebml_size++; |   ebml_size++; | ||||||
|  |  | ||||||
|   return static_cast<uint64_t>(ebml_size); |   return ebml_size; | ||||||
| } | } | ||||||
|  |  | ||||||
| uint64_t EbmlElementSize(uint64_t type, uint64_t value) { | uint64 EbmlElementSize(uint64 type, uint64 value) { | ||||||
|   return EbmlElementSize(type, value, 0); |   return EbmlElementSize(type, value, 0); | ||||||
| } | } | ||||||
|  |  | ||||||
| uint64_t EbmlElementSize(uint64_t type, uint64_t value, uint64_t fixed_size) { | uint64 EbmlElementSize(uint64 type, uint64 value, uint64 fixed_size) { | ||||||
|   // Size of EBML ID |   // Size of EBML ID | ||||||
|   uint64_t ebml_size = static_cast<uint64_t>(GetUIntSize(type)); |   int32 ebml_size = GetUIntSize(type); | ||||||
|  |  | ||||||
|   // Datasize |   // Datasize | ||||||
|   ebml_size += |   ebml_size += (fixed_size > 0) ? fixed_size : GetUIntSize(value); | ||||||
|       (fixed_size > 0) ? fixed_size : static_cast<uint64_t>(GetUIntSize(value)); |  | ||||||
|  |  | ||||||
|   // Size of Datasize |   // Size of Datasize | ||||||
|   ebml_size++; |   ebml_size++; | ||||||
| @@ -263,9 +264,9 @@ uint64_t EbmlElementSize(uint64_t type, uint64_t value, uint64_t fixed_size) { | |||||||
|   return ebml_size; |   return ebml_size; | ||||||
| } | } | ||||||
|  |  | ||||||
| uint64_t EbmlElementSize(uint64_t type, float /* value */) { | uint64 EbmlElementSize(uint64 type, float /* value */) { | ||||||
|   // Size of EBML ID |   // Size of EBML ID | ||||||
|   uint64_t ebml_size = static_cast<uint64_t>(GetUIntSize(type)); |   uint64 ebml_size = GetUIntSize(type); | ||||||
|  |  | ||||||
|   // Datasize |   // Datasize | ||||||
|   ebml_size += sizeof(float); |   ebml_size += sizeof(float); | ||||||
| @@ -276,12 +277,12 @@ uint64_t EbmlElementSize(uint64_t type, float /* value */) { | |||||||
|   return ebml_size; |   return ebml_size; | ||||||
| } | } | ||||||
|  |  | ||||||
| uint64_t EbmlElementSize(uint64_t type, const char* value) { | uint64 EbmlElementSize(uint64 type, const char* value) { | ||||||
|   if (!value) |   if (!value) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   // Size of EBML ID |   // Size of EBML ID | ||||||
|   uint64_t ebml_size = static_cast<uint64_t>(GetUIntSize(type)); |   uint64 ebml_size = GetUIntSize(type); | ||||||
|  |  | ||||||
|   // Datasize |   // Datasize | ||||||
|   ebml_size += strlen(value); |   ebml_size += strlen(value); | ||||||
| @@ -292,12 +293,12 @@ uint64_t EbmlElementSize(uint64_t type, const char* value) { | |||||||
|   return ebml_size; |   return ebml_size; | ||||||
| } | } | ||||||
|  |  | ||||||
| uint64_t EbmlElementSize(uint64_t type, const uint8_t* value, uint64_t size) { | uint64 EbmlElementSize(uint64 type, const uint8* value, uint64 size) { | ||||||
|   if (!value) |   if (!value) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   // Size of EBML ID |   // Size of EBML ID | ||||||
|   uint64_t ebml_size = static_cast<uint64_t>(GetUIntSize(type)); |   uint64 ebml_size = GetUIntSize(type); | ||||||
|  |  | ||||||
|   // Datasize |   // Datasize | ||||||
|   ebml_size += size; |   ebml_size += size; | ||||||
| @@ -308,9 +309,9 @@ uint64_t EbmlElementSize(uint64_t type, const uint8_t* value, uint64_t size) { | |||||||
|   return ebml_size; |   return ebml_size; | ||||||
| } | } | ||||||
|  |  | ||||||
| uint64_t EbmlDateElementSize(uint64_t type) { | uint64 EbmlDateElementSize(uint64 type) { | ||||||
|   // Size of EBML ID |   // Size of EBML ID | ||||||
|   uint64_t ebml_size = static_cast<uint64_t>(GetUIntSize(type)); |   uint64 ebml_size = GetUIntSize(type); | ||||||
|  |  | ||||||
|   // Datasize |   // Datasize | ||||||
|   ebml_size += kDateElementSize; |   ebml_size += kDateElementSize; | ||||||
| @@ -321,18 +322,18 @@ uint64_t EbmlDateElementSize(uint64_t type) { | |||||||
|   return ebml_size; |   return ebml_size; | ||||||
| } | } | ||||||
|  |  | ||||||
| int32_t SerializeInt(IMkvWriter* writer, int64_t value, int32_t size) { | int32 SerializeInt(IMkvWriter* writer, int64 value, int32 size) { | ||||||
|   if (!writer || size < 1 || size > 8) |   if (!writer || size < 1 || size > 8) | ||||||
|     return -1; |     return -1; | ||||||
|  |  | ||||||
|   for (int32_t i = 1; i <= size; ++i) { |   for (int32 i = 1; i <= size; ++i) { | ||||||
|     const int32_t byte_count = size - i; |     const int32 byte_count = size - i; | ||||||
|     const int32_t bit_count = byte_count * 8; |     const int32 bit_count = byte_count * 8; | ||||||
|  |  | ||||||
|     const int64_t bb = value >> bit_count; |     const int64 bb = value >> bit_count; | ||||||
|     const uint8_t b = static_cast<uint8_t>(bb); |     const uint8 b = static_cast<uint8>(bb); | ||||||
|  |  | ||||||
|     const int32_t status = writer->Write(&b, 1); |     const int32 status = writer->Write(&b, 1); | ||||||
|  |  | ||||||
|     if (status < 0) |     if (status < 0) | ||||||
|       return status; |       return status; | ||||||
| @@ -341,26 +342,26 @@ int32_t SerializeInt(IMkvWriter* writer, int64_t value, int32_t size) { | |||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| int32_t SerializeFloat(IMkvWriter* writer, float f) { | int32 SerializeFloat(IMkvWriter* writer, float f) { | ||||||
|   if (!writer) |   if (!writer) | ||||||
|     return -1; |     return -1; | ||||||
|  |  | ||||||
|   assert(sizeof(uint32_t) == sizeof(float)); |   assert(sizeof(uint32) == sizeof(float)); | ||||||
|   // This union is merely used to avoid a reinterpret_cast from float& to |   // This union is merely used to avoid a reinterpret_cast from float& to | ||||||
|   // uint32& which will result in violation of strict aliasing. |   // uint32& which will result in violation of strict aliasing. | ||||||
|   union U32 { |   union U32 { | ||||||
|     uint32_t u32; |     uint32 u32; | ||||||
|     float f; |     float f; | ||||||
|   } value; |   } value; | ||||||
|   value.f = f; |   value.f = f; | ||||||
|  |  | ||||||
|   for (int32_t i = 1; i <= 4; ++i) { |   for (int32 i = 1; i <= 4; ++i) { | ||||||
|     const int32_t byte_count = 4 - i; |     const int32 byte_count = 4 - i; | ||||||
|     const int32_t bit_count = byte_count * 8; |     const int32 bit_count = byte_count * 8; | ||||||
|  |  | ||||||
|     const uint8_t byte = static_cast<uint8_t>(value.u32 >> bit_count); |     const uint8 byte = static_cast<uint8>(value.u32 >> bit_count); | ||||||
|  |  | ||||||
|     const int32_t status = writer->Write(&byte, 1); |     const int32 status = writer->Write(&byte, 1); | ||||||
|  |  | ||||||
|     if (status < 0) |     if (status < 0) | ||||||
|       return status; |       return status; | ||||||
| @@ -369,21 +370,21 @@ int32_t SerializeFloat(IMkvWriter* writer, float f) { | |||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| int32_t WriteUInt(IMkvWriter* writer, uint64_t value) { | int32 WriteUInt(IMkvWriter* writer, uint64 value) { | ||||||
|   if (!writer) |   if (!writer) | ||||||
|     return -1; |     return -1; | ||||||
|  |  | ||||||
|   int32_t size = GetCodedUIntSize(value); |   int32 size = GetCodedUIntSize(value); | ||||||
|  |  | ||||||
|   return WriteUIntSize(writer, value, size); |   return WriteUIntSize(writer, value, size); | ||||||
| } | } | ||||||
|  |  | ||||||
| int32_t WriteUIntSize(IMkvWriter* writer, uint64_t value, int32_t size) { | int32 WriteUIntSize(IMkvWriter* writer, uint64 value, int32 size) { | ||||||
|   if (!writer || size < 0 || size > 8) |   if (!writer || size < 0 || size > 8) | ||||||
|     return -1; |     return -1; | ||||||
|  |  | ||||||
|   if (size > 0) { |   if (size > 0) { | ||||||
|     const uint64_t bit = 1LL << (size * 7); |     const uint64 bit = 1LL << (size * 7); | ||||||
|  |  | ||||||
|     if (value > (bit - 2)) |     if (value > (bit - 2)) | ||||||
|       return -1; |       return -1; | ||||||
| @@ -391,11 +392,11 @@ int32_t WriteUIntSize(IMkvWriter* writer, uint64_t value, int32_t size) { | |||||||
|     value |= bit; |     value |= bit; | ||||||
|   } else { |   } else { | ||||||
|     size = 1; |     size = 1; | ||||||
|     int64_t bit; |     int64 bit; | ||||||
|  |  | ||||||
|     for (;;) { |     for (;;) { | ||||||
|       bit = 1LL << (size * 7); |       bit = 1LL << (size * 7); | ||||||
|       const uint64_t max = bit - 2; |       const uint64 max = bit - 2; | ||||||
|  |  | ||||||
|       if (value <= max) |       if (value <= max) | ||||||
|         break; |         break; | ||||||
| @@ -412,18 +413,18 @@ int32_t WriteUIntSize(IMkvWriter* writer, uint64_t value, int32_t size) { | |||||||
|   return SerializeInt(writer, value, size); |   return SerializeInt(writer, value, size); | ||||||
| } | } | ||||||
|  |  | ||||||
| int32_t WriteID(IMkvWriter* writer, uint64_t type) { | int32 WriteID(IMkvWriter* writer, uint64 type) { | ||||||
|   if (!writer) |   if (!writer) | ||||||
|     return -1; |     return -1; | ||||||
|  |  | ||||||
|   writer->ElementStartNotify(type, writer->Position()); |   writer->ElementStartNotify(type, writer->Position()); | ||||||
|  |  | ||||||
|   const int32_t size = GetUIntSize(type); |   const int32 size = GetUIntSize(type); | ||||||
|  |  | ||||||
|   return SerializeInt(writer, type, size); |   return SerializeInt(writer, type, size); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool WriteEbmlMasterElement(IMkvWriter* writer, uint64_t type, uint64_t size) { | bool WriteEbmlMasterElement(IMkvWriter* writer, uint64 type, uint64 size) { | ||||||
|   if (!writer) |   if (!writer) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
| @@ -436,19 +437,19 @@ bool WriteEbmlMasterElement(IMkvWriter* writer, uint64_t type, uint64_t size) { | |||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, uint64_t value) { | bool WriteEbmlElement(IMkvWriter* writer, uint64 type, uint64 value) { | ||||||
|   return WriteEbmlElement(writer, type, value, 0); |   return WriteEbmlElement(writer, type, value, 0); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, uint64_t value, | bool WriteEbmlElement(IMkvWriter* writer, uint64 type, uint64 value, | ||||||
|                       uint64_t fixed_size) { |                       uint64 fixed_size) { | ||||||
|   if (!writer) |   if (!writer) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   if (WriteID(writer, type)) |   if (WriteID(writer, type)) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   uint64_t size = static_cast<uint64_t>(GetUIntSize(value)); |   uint64 size = GetUIntSize(value); | ||||||
|   if (fixed_size > 0) { |   if (fixed_size > 0) { | ||||||
|     if (size > fixed_size) |     if (size > fixed_size) | ||||||
|       return false; |       return false; | ||||||
| @@ -457,30 +458,30 @@ bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, uint64_t value, | |||||||
|   if (WriteUInt(writer, size)) |   if (WriteUInt(writer, size)) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   if (SerializeInt(writer, value, static_cast<int32_t>(size))) |   if (SerializeInt(writer, value, static_cast<int32>(size))) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, int64_t value) { | bool WriteEbmlElement(IMkvWriter* writer, uint64 type, int64 value) { | ||||||
|   if (!writer) |   if (!writer) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   if (WriteID(writer, type)) |   if (WriteID(writer, type)) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   const uint64_t size = GetIntSize(value); |   const uint64 size = GetIntSize(value); | ||||||
|   if (WriteUInt(writer, size)) |   if (WriteUInt(writer, size)) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   if (SerializeInt(writer, value, static_cast<int32_t>(size))) |   if (SerializeInt(writer, value, static_cast<int32>(size))) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, float value) { | bool WriteEbmlElement(IMkvWriter* writer, uint64 type, float value) { | ||||||
|   if (!writer) |   if (!writer) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
| @@ -496,25 +497,25 @@ bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, float value) { | |||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, const char* value) { | bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const char* value) { | ||||||
|   if (!writer || !value) |   if (!writer || !value) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   if (WriteID(writer, type)) |   if (WriteID(writer, type)) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   const uint64_t length = strlen(value); |   const uint64 length = strlen(value); | ||||||
|   if (WriteUInt(writer, length)) |   if (WriteUInt(writer, length)) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   if (writer->Write(value, static_cast<const uint32_t>(length))) |   if (writer->Write(value, static_cast<const uint32>(length))) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, const uint8_t* value, | bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const uint8* value, | ||||||
|                       uint64_t size) { |                       uint64 size) { | ||||||
|   if (!writer || !value || size < 1) |   if (!writer || !value || size < 1) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
| @@ -524,13 +525,13 @@ bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, const uint8_t* value, | |||||||
|   if (WriteUInt(writer, size)) |   if (WriteUInt(writer, size)) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   if (writer->Write(value, static_cast<uint32_t>(size))) |   if (writer->Write(value, static_cast<uint32>(size))) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| bool WriteEbmlDateElement(IMkvWriter* writer, uint64_t type, int64_t value) { | bool WriteEbmlDateElement(IMkvWriter* writer, uint64 type, int64 value) { | ||||||
|   if (!writer) |   if (!writer) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
| @@ -546,8 +547,8 @@ bool WriteEbmlDateElement(IMkvWriter* writer, uint64_t type, int64_t value) { | |||||||
|   return true; |   return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| uint64_t WriteFrame(IMkvWriter* writer, const Frame* const frame, | uint64 WriteFrame(IMkvWriter* writer, const Frame* const frame, | ||||||
|                     Cluster* cluster) { |                   Cluster* cluster) { | ||||||
|   if (!writer || !frame || !frame->IsValid() || !cluster || |   if (!writer || !frame || !frame->IsValid() || !cluster || | ||||||
|       !cluster->timecode_scale()) |       !cluster->timecode_scale()) | ||||||
|     return 0; |     return 0; | ||||||
| @@ -556,7 +557,7 @@ uint64_t WriteFrame(IMkvWriter* writer, const Frame* const frame, | |||||||
|   //  timecode for the cluster itself (remember that block timecode |   //  timecode for the cluster itself (remember that block timecode | ||||||
|   //  is a signed, 16-bit integer).  However, as a simplification we |   //  is a signed, 16-bit integer).  However, as a simplification we | ||||||
|   //  only permit non-negative cluster-relative timecodes for blocks. |   //  only permit non-negative cluster-relative timecodes for blocks. | ||||||
|   const int64_t relative_timecode = cluster->GetRelativeTimecode( |   const int64 relative_timecode = cluster->GetRelativeTimecode( | ||||||
|       frame->timestamp() / cluster->timecode_scale()); |       frame->timestamp() / cluster->timecode_scale()); | ||||||
|   if (relative_timecode < 0 || relative_timecode > kMaxBlockTimecode) |   if (relative_timecode < 0 || relative_timecode > kMaxBlockTimecode) | ||||||
|     return 0; |     return 0; | ||||||
| @@ -567,20 +568,19 @@ uint64_t WriteFrame(IMkvWriter* writer, const Frame* const frame, | |||||||
|                         cluster->timecode_scale()); |                         cluster->timecode_scale()); | ||||||
| } | } | ||||||
|  |  | ||||||
| uint64_t WriteVoidElement(IMkvWriter* writer, uint64_t size) { | uint64 WriteVoidElement(IMkvWriter* writer, uint64 size) { | ||||||
|   if (!writer) |   if (!writer) | ||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   // Subtract one for the void ID and the coded size. |   // Subtract one for the void ID and the coded size. | ||||||
|   uint64_t void_entry_size = size - 1 - GetCodedUIntSize(size - 1); |   uint64 void_entry_size = size - 1 - GetCodedUIntSize(size - 1); | ||||||
|   uint64_t void_size = |   uint64 void_size = EbmlMasterElementSize(libwebm::kMkvVoid, void_entry_size) + | ||||||
|       EbmlMasterElementSize(libwebm::kMkvVoid, void_entry_size) + |                      void_entry_size; | ||||||
|       void_entry_size; |  | ||||||
|  |  | ||||||
|   if (void_size != size) |   if (void_size != size) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   const int64_t payload_position = writer->Position(); |   const int64 payload_position = writer->Position(); | ||||||
|   if (payload_position < 0) |   if (payload_position < 0) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
| @@ -590,30 +590,29 @@ uint64_t WriteVoidElement(IMkvWriter* writer, uint64_t size) { | |||||||
|   if (WriteUInt(writer, void_entry_size)) |   if (WriteUInt(writer, void_entry_size)) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   const uint8_t value = 0; |   const uint8 value = 0; | ||||||
|   for (int32_t i = 0; i < static_cast<int32_t>(void_entry_size); ++i) { |   for (int32 i = 0; i < static_cast<int32>(void_entry_size); ++i) { | ||||||
|     if (writer->Write(&value, 1)) |     if (writer->Write(&value, 1)) | ||||||
|       return 0; |       return 0; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   const int64_t stop_position = writer->Position(); |   const int64 stop_position = writer->Position(); | ||||||
|   if (stop_position < 0 || |   if (stop_position < 0 || | ||||||
|       stop_position - payload_position != static_cast<int64_t>(void_size)) |       stop_position - payload_position != static_cast<int64>(void_size)) | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|   return void_size; |   return void_size; | ||||||
| } | } | ||||||
|  |  | ||||||
| void GetVersion(int32_t* major, int32_t* minor, int32_t* build, | void GetVersion(int32* major, int32* minor, int32* build, int32* revision) { | ||||||
|                 int32_t* revision) { |  | ||||||
|   *major = 0; |   *major = 0; | ||||||
|   *minor = 2; |   *minor = 2; | ||||||
|   *build = 1; |   *build = 1; | ||||||
|   *revision = 0; |   *revision = 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| uint64_t MakeUID(unsigned int* seed) { | uint64 MakeUID(unsigned int* seed) { | ||||||
|   uint64_t uid = 0; |   uint64 uid = 0; | ||||||
|  |  | ||||||
| #ifdef __MINGW32__ | #ifdef __MINGW32__ | ||||||
|   srand(*seed); |   srand(*seed); | ||||||
| @@ -625,21 +624,21 @@ uint64_t MakeUID(unsigned int* seed) { | |||||||
| // TODO(fgalligan): Move random number generation to platform specific code. | // TODO(fgalligan): Move random number generation to platform specific code. | ||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
|     (void)seed; |     (void)seed; | ||||||
|     const int32_t nn = rand(); |     const int32 nn = rand(); | ||||||
| #elif __ANDROID__ | #elif __ANDROID__ | ||||||
|     int32_t temp_num = 1; |     int32 temp_num = 1; | ||||||
|     int fd = open("/dev/urandom", O_RDONLY); |     int fd = open("/dev/urandom", O_RDONLY); | ||||||
|     if (fd != -1) { |     if (fd != -1) { | ||||||
|       read(fd, &temp_num, sizeof(temp_num)); |       read(fd, &temp_num, sizeof(temp_num)); | ||||||
|       close(fd); |       close(fd); | ||||||
|     } |     } | ||||||
|     const int32_t nn = temp_num; |     const int32 nn = temp_num; | ||||||
| #elif defined __MINGW32__ | #elif defined __MINGW32__ | ||||||
|     const int32_t nn = rand(); |     const int32 nn = rand(); | ||||||
| #else | #else | ||||||
|     const int32_t nn = rand_r(seed); |     const int32 nn = rand_r(seed); | ||||||
| #endif | #endif | ||||||
|     const int32_t n = 0xFF & (nn >> 4);  // throw away low-order bits |     const int32 n = 0xFF & (nn >> 4);  // throw away low-order bits | ||||||
|  |  | ||||||
|     uid |= n; |     uid |= n; | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -8,87 +8,94 @@ | |||||||
| #ifndef MKVMUXER_MKVMUXERUTIL_H_ | #ifndef MKVMUXER_MKVMUXERUTIL_H_ | ||||||
| #define MKVMUXER_MKVMUXERUTIL_H_ | #define MKVMUXER_MKVMUXERUTIL_H_ | ||||||
|  |  | ||||||
| #include <stdint.h> | #include "mkvmuxertypes.h" | ||||||
|  |  | ||||||
| namespace mkvmuxer { | namespace mkvmuxer { | ||||||
| class Cluster; | class Cluster; | ||||||
| class Frame; | class Frame; | ||||||
| class IMkvWriter; | class IMkvWriter; | ||||||
|  |  | ||||||
| const uint64_t kEbmlUnknownValue = 0x01FFFFFFFFFFFFFFULL; | // TODO(tomfinegan): mkvmuxer:: integer types continue to be used here because | ||||||
| const int64_t kMaxBlockTimecode = 0x07FFFLL; | // changing them causes pain for downstream projects. It would be nice if a | ||||||
|  | // solution that allows removal of the mkvmuxer:: integer types while avoiding | ||||||
|  | // pain for downstream users of libwebm. Considering that mkvmuxerutil.{cc,h} | ||||||
|  | // are really, for the great majority of cases, EBML size calculation and writer | ||||||
|  | // functions, perhaps a more EBML focused utility would be the way to go as a | ||||||
|  | // first step. | ||||||
|  |  | ||||||
|  | const uint64 kEbmlUnknownValue = 0x01FFFFFFFFFFFFFFULL; | ||||||
|  | const int64 kMaxBlockTimecode = 0x07FFFLL; | ||||||
|  |  | ||||||
| // Writes out |value| in Big Endian order. Returns 0 on success. | // Writes out |value| in Big Endian order. Returns 0 on success. | ||||||
| int32_t SerializeInt(IMkvWriter* writer, int64_t value, int32_t size); | int32 SerializeInt(IMkvWriter* writer, int64 value, int32 size); | ||||||
|  |  | ||||||
| // Returns the size in bytes of the element. | // Returns the size in bytes of the element. | ||||||
| int32_t GetUIntSize(uint64_t value); | int32 GetUIntSize(uint64 value); | ||||||
| int32_t GetIntSize(int64_t value); | int32 GetIntSize(int64 value); | ||||||
| int32_t GetCodedUIntSize(uint64_t value); | int32 GetCodedUIntSize(uint64 value); | ||||||
| uint64_t EbmlMasterElementSize(uint64_t type, uint64_t value); | uint64 EbmlMasterElementSize(uint64 type, uint64 value); | ||||||
| uint64_t EbmlElementSize(uint64_t type, int64_t value); | uint64 EbmlElementSize(uint64 type, int64 value); | ||||||
| uint64_t EbmlElementSize(uint64_t type, uint64_t value); | uint64 EbmlElementSize(uint64 type, uint64 value); | ||||||
| uint64_t EbmlElementSize(uint64_t type, float value); | uint64 EbmlElementSize(uint64 type, float value); | ||||||
| uint64_t EbmlElementSize(uint64_t type, const char* value); | uint64 EbmlElementSize(uint64 type, const char* value); | ||||||
| uint64_t EbmlElementSize(uint64_t type, const uint8_t* value, uint64_t size); | uint64 EbmlElementSize(uint64 type, const uint8* value, uint64 size); | ||||||
| uint64_t EbmlDateElementSize(uint64_t type); | uint64 EbmlDateElementSize(uint64 type); | ||||||
|  |  | ||||||
| // Returns the size in bytes of the element assuming that the element was | // Returns the size in bytes of the element assuming that the element was | ||||||
| // written using |fixed_size| bytes. If |fixed_size| is set to zero, then it | // written using |fixed_size| bytes. If |fixed_size| is set to zero, then it | ||||||
| // computes the necessary number of bytes based on |value|. | // computes the necessary number of bytes based on |value|. | ||||||
| uint64_t EbmlElementSize(uint64_t type, uint64_t value, uint64_t fixed_size); | uint64 EbmlElementSize(uint64 type, uint64 value, uint64 fixed_size); | ||||||
|  |  | ||||||
| // Creates an EBML coded number from |value| and writes it out. The size of | // Creates an EBML coded number from |value| and writes it out. The size of | ||||||
| // the coded number is determined by the value of |value|. |value| must not | // the coded number is determined by the value of |value|. |value| must not | ||||||
| // be in a coded form. Returns 0 on success. | // be in a coded form. Returns 0 on success. | ||||||
| int32_t WriteUInt(IMkvWriter* writer, uint64_t value); | int32 WriteUInt(IMkvWriter* writer, uint64 value); | ||||||
|  |  | ||||||
| // Creates an EBML coded number from |value| and writes it out. The size of | // Creates an EBML coded number from |value| and writes it out. The size of | ||||||
| // the coded number is determined by the value of |size|. |value| must not | // the coded number is determined by the value of |size|. |value| must not | ||||||
| // be in a coded form. Returns 0 on success. | // be in a coded form. Returns 0 on success. | ||||||
| int32_t WriteUIntSize(IMkvWriter* writer, uint64_t value, int32_t size); | int32 WriteUIntSize(IMkvWriter* writer, uint64 value, int32 size); | ||||||
|  |  | ||||||
| // Output an Mkv master element. Returns true if the element was written. | // Output an Mkv master element. Returns true if the element was written. | ||||||
| bool WriteEbmlMasterElement(IMkvWriter* writer, uint64_t value, uint64_t size); | bool WriteEbmlMasterElement(IMkvWriter* writer, uint64 value, uint64 size); | ||||||
|  |  | ||||||
| // Outputs an Mkv ID, calls |IMkvWriter::ElementStartNotify|, and passes the | // Outputs an Mkv ID, calls |IMkvWriter::ElementStartNotify|, and passes the | ||||||
| // ID to |SerializeInt|. Returns 0 on success. | // ID to |SerializeInt|. Returns 0 on success. | ||||||
| int32_t WriteID(IMkvWriter* writer, uint64_t type); | int32 WriteID(IMkvWriter* writer, uint64 type); | ||||||
|  |  | ||||||
| // Output an Mkv non-master element. Returns true if the element was written. | // Output an Mkv non-master element. Returns true if the element was written. | ||||||
| bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, uint64_t value); | bool WriteEbmlElement(IMkvWriter* writer, uint64 type, uint64 value); | ||||||
| bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, int64_t value); | bool WriteEbmlElement(IMkvWriter* writer, uint64 type, int64 value); | ||||||
| bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, float value); | bool WriteEbmlElement(IMkvWriter* writer, uint64 type, float value); | ||||||
| bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, const char* value); | bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const char* value); | ||||||
| bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, const uint8_t* value, | bool WriteEbmlElement(IMkvWriter* writer, uint64 type, const uint8* value, | ||||||
|                       uint64_t size); |                       uint64 size); | ||||||
| bool WriteEbmlDateElement(IMkvWriter* writer, uint64_t type, int64_t value); | bool WriteEbmlDateElement(IMkvWriter* writer, uint64 type, int64 value); | ||||||
|  |  | ||||||
| // Output an Mkv non-master element using fixed size. The element will be | // Output an Mkv non-master element using fixed size. The element will be | ||||||
| // written out using exactly |fixed_size| bytes. If |fixed_size| is set to zero | // written out using exactly |fixed_size| bytes. If |fixed_size| is set to zero | ||||||
| // then it computes the necessary number of bytes based on |value|. Returns true | // then it computes the necessary number of bytes based on |value|. Returns true | ||||||
| // if the element was written. | // if the element was written. | ||||||
| bool WriteEbmlElement(IMkvWriter* writer, uint64_t type, uint64_t value, | bool WriteEbmlElement(IMkvWriter* writer, uint64 type, uint64 value, | ||||||
|                       uint64_t fixed_size); |                       uint64 fixed_size); | ||||||
|  |  | ||||||
| // Output a Mkv Frame. It decides the correct element to write (Block vs | // Output a Mkv Frame. It decides the correct element to write (Block vs | ||||||
| // SimpleBlock) based on the parameters of the Frame. | // SimpleBlock) based on the parameters of the Frame. | ||||||
| uint64_t WriteFrame(IMkvWriter* writer, const Frame* const frame, | uint64 WriteFrame(IMkvWriter* writer, const Frame* const frame, | ||||||
|                     Cluster* cluster); |                   Cluster* cluster); | ||||||
|  |  | ||||||
| // Output a void element. |size| must be the entire size in bytes that will be | // Output a void element. |size| must be the entire size in bytes that will be | ||||||
| // void. The function will calculate the size of the void header and subtract | // void. The function will calculate the size of the void header and subtract | ||||||
| // it from |size|. | // it from |size|. | ||||||
| uint64_t WriteVoidElement(IMkvWriter* writer, uint64_t size); | uint64 WriteVoidElement(IMkvWriter* writer, uint64 size); | ||||||
|  |  | ||||||
| // Returns the version number of the muxer in |major|, |minor|, |build|, | // Returns the version number of the muxer in |major|, |minor|, |build|, | ||||||
| // and |revision|. | // and |revision|. | ||||||
| void GetVersion(int32_t* major, int32_t* minor, int32_t* build, | void GetVersion(int32* major, int32* minor, int32* build, int32* revision); | ||||||
|                 int32_t* revision); |  | ||||||
|  |  | ||||||
| // Returns a random number to be used for UID, using |seed| to seed | // Returns a random number to be used for UID, using |seed| to seed | ||||||
| // the random-number generator (see POSIX rand_r() for semantics). | // the random-number generator (see POSIX rand_r() for semantics). | ||||||
| uint64_t MakeUID(unsigned int* seed); | uint64 MakeUID(unsigned int* seed); | ||||||
|  |  | ||||||
| }  // namespace mkvmuxer | }  // namespace mkvmuxer | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Tom Finegan
					Tom Finegan