mkvmuxer: Add support for writing CodecDelay and SeekPreRoll elements.

Change-Id: Iad8c671b76c4b97abad58946df7f3c0ebe6cb01b
This commit is contained in:
Tom Finegan
2014-01-09 12:03:24 -08:00
parent 81c1d8415c
commit a6c71c1407
4 changed files with 34 additions and 2 deletions

View File

@@ -514,6 +514,8 @@ Track::Track(unsigned int* seed)
number_(0), number_(0),
type_(0), type_(0),
uid_(MakeUID(seed)), uid_(MakeUID(seed)),
codec_delay_(0),
seek_pre_roll_(0),
codec_private_length_(0), codec_private_length_(0),
content_encoding_entries_(NULL), content_encoding_entries_(NULL),
content_encoding_entries_size_(0) { content_encoding_entries_size_(0) {
@@ -635,6 +637,11 @@ bool Track::Write(IMkvWriter* writer) const {
size += EbmlElementSize(kMkvName, name_); size += EbmlElementSize(kMkvName, name_);
if (max_block_additional_id_) if (max_block_additional_id_)
size += EbmlElementSize(kMkvMaxBlockAdditionID, max_block_additional_id_); size += EbmlElementSize(kMkvMaxBlockAdditionID, max_block_additional_id_);
if (codec_delay_)
size += EbmlElementSize(kMkvCodecDelay, codec_delay_);
if (seek_pre_roll_)
size += EbmlElementSize(kMkvSeekPreRoll, seek_pre_roll_);
const int64 payload_position = writer->Position(); const int64 payload_position = writer->Position();
if (payload_position < 0) if (payload_position < 0)
@@ -646,11 +653,21 @@ bool Track::Write(IMkvWriter* writer) const {
return false; return false;
if (!WriteEbmlElement(writer, kMkvTrackType, type_)) if (!WriteEbmlElement(writer, kMkvTrackType, type_))
return false; return false;
if (max_block_additional_id_) if (max_block_additional_id_) {
if (!WriteEbmlElement(writer, if (!WriteEbmlElement(writer,
kMkvMaxBlockAdditionID, kMkvMaxBlockAdditionID,
max_block_additional_id_)) max_block_additional_id_)) {
return false; return false;
}
}
if (codec_delay_) {
if (!WriteEbmlElement(writer, kMkvCodecDelay, codec_delay_))
return false;
}
if (seek_pre_roll_) {
if (!WriteEbmlElement(writer, kMkvSeekPreRoll, seek_pre_roll_))
return false;
}
if (codec_id_) { if (codec_id_) {
if (!WriteEbmlElement(writer, kMkvCodecID, codec_id_)) if (!WriteEbmlElement(writer, kMkvCodecID, codec_id_))
return false; return false;

View File

@@ -340,6 +340,12 @@ class Track {
uint64 type() const { return type_; } uint64 type() const { return type_; }
void set_uid(uint64 uid) { uid_ = uid; } void set_uid(uint64 uid) { uid_ = uid; }
uint64 uid() const { return uid_; } uint64 uid() const { return uid_; }
void set_codec_delay(uint64 codec_delay) { codec_delay_ = codec_delay; }
uint64 codec_delay() const { return codec_delay_; }
void set_seek_pre_roll(uint64 seek_pre_roll) {
seek_pre_roll_ = seek_pre_roll;
}
uint64 seek_pre_roll() const { return seek_pre_roll_; }
uint64 codec_private_length() const { return codec_private_length_; } uint64 codec_private_length() const { return codec_private_length_; }
uint32 content_encoding_entries_size() const { uint32 content_encoding_entries_size() const {
@@ -356,6 +362,8 @@ class Track {
uint64 number_; uint64 number_;
uint64 type_; uint64 type_;
uint64 uid_; uint64 uid_;
uint64 codec_delay_;
uint64 seek_pre_roll_;
// Size of the CodecPrivate data in bytes. // Size of the CodecPrivate data in bytes.
uint64 codec_private_length_; uint64 codec_private_length_;

View File

@@ -398,6 +398,11 @@ int main(int argc, char* argv[]) {
const long long bit_depth = pAudioTrack->GetBitDepth(); const long long bit_depth = pAudioTrack->GetBitDepth();
if (bit_depth > 0) if (bit_depth > 0)
audio->set_bit_depth(bit_depth); audio->set_bit_depth(bit_depth);
if (pAudioTrack->GetCodecDelay())
audio->set_codec_delay(pAudioTrack->GetCodecDelay());
if (pAudioTrack->GetSeekPreRoll())
audio->set_seek_pre_roll(pAudioTrack->GetSeekPreRoll());
} }
} }

View File

@@ -74,6 +74,8 @@ enum MkvId {
kMkvCodecPrivate = 0x63A2, kMkvCodecPrivate = 0x63A2,
kMkvCodecName = 0x258688, kMkvCodecName = 0x258688,
kMkvMaxBlockAdditionID = 0x55EE, kMkvMaxBlockAdditionID = 0x55EE,
kMkvCodecDelay = 0x56AA,
kMkvSeekPreRoll = 0x56BB,
//video //video
kMkvVideo = 0xE0, kMkvVideo = 0xE0,
kMkvFlagInterlaced = 0x9A, kMkvFlagInterlaced = 0x9A,