mkvmuxer: Add support for VP9 and Opus tracks.
Also make codec ID constants really constant. Change-Id: I951d25e83ce507afb1ca475e2d5dbfe6402f3d61
This commit is contained in:
11
mkvmuxer.cpp
11
mkvmuxer.cpp
@@ -589,6 +589,10 @@ uint64 Track::PayloadSize() 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_);
|
||||||
|
|
||||||
if (content_encoding_entries_size_ > 0) {
|
if (content_encoding_entries_size_ > 0) {
|
||||||
uint64 content_encodings_size = 0;
|
uint64 content_encodings_size = 0;
|
||||||
@@ -959,8 +963,11 @@ bool AudioTrack::Write(IMkvWriter* writer) const {
|
|||||||
//
|
//
|
||||||
// Tracks Class
|
// Tracks Class
|
||||||
|
|
||||||
const char* const Tracks::kVp8CodecId = "V_VP8";
|
const char Tracks::kOpusCodecId[] = "A_OPUS";
|
||||||
const char* const Tracks::kVorbisCodecId = "A_VORBIS";
|
const char Tracks::kVorbisCodecId[] = "A_VORBIS";
|
||||||
|
const char Tracks::kVp8CodecId[] = "V_VP8";
|
||||||
|
const char Tracks::kVp9CodecId[] = "V_VP9";
|
||||||
|
|
||||||
|
|
||||||
Tracks::Tracks()
|
Tracks::Tracks()
|
||||||
: track_entries_(NULL),
|
: track_entries_(NULL),
|
||||||
|
|||||||
14
mkvmuxer.hpp
14
mkvmuxer.hpp
@@ -481,9 +481,11 @@ class Tracks {
|
|||||||
kVideo = 0x1,
|
kVideo = 0x1,
|
||||||
kAudio = 0x2
|
kAudio = 0x2
|
||||||
};
|
};
|
||||||
// Vorbis and VP8 coded id defined by the Matroska specs.
|
// Opus, Vorbis, VP8, and VP9 codec ids defined by the Matroska specs.
|
||||||
static const char* const kVorbisCodecId;
|
static const char kOpusCodecId[];
|
||||||
static const char* const kVp8CodecId;
|
static const char kVorbisCodecId[];
|
||||||
|
static const char kVp8CodecId[];
|
||||||
|
static const char kVp9CodecId[];
|
||||||
|
|
||||||
Tracks();
|
Tracks();
|
||||||
~Tracks();
|
~Tracks();
|
||||||
@@ -980,8 +982,8 @@ class Segment {
|
|||||||
// track number.
|
// track number.
|
||||||
Track* AddTrack(int32 number);
|
Track* AddTrack(int32 number);
|
||||||
|
|
||||||
// Adds an audio track to the segment. Returns the number of the track on
|
// Adds a Vorbis audio track to the segment. Returns the number of the track
|
||||||
// success, 0 on error. |number| is the number to use for the audio track.
|
// on success, 0 on error. |number| is the number to use for the audio track.
|
||||||
// |number| must be >= 0. If |number| == 0 then the muxer will decide on
|
// |number| must be >= 0. If |number| == 0 then the muxer will decide on
|
||||||
// the track number.
|
// the track number.
|
||||||
uint64 AddAudioTrack(int32 sample_rate, int32 channels, int32 number);
|
uint64 AddAudioTrack(int32 sample_rate, int32 channels, int32 number);
|
||||||
@@ -1059,7 +1061,7 @@ class Segment {
|
|||||||
// frame: frame object
|
// frame: frame object
|
||||||
bool AddGenericFrame(const Frame* frame);
|
bool AddGenericFrame(const Frame* frame);
|
||||||
|
|
||||||
// Adds a video track to the segment. Returns the number of the track on
|
// Adds a VP8 video track to the segment. Returns the number of the track on
|
||||||
// success, 0 on error. |number| is the number to use for the video track.
|
// success, 0 on error. |number| is the number to use for the video track.
|
||||||
// |number| must be >= 0. If |number| == 0 then the muxer will decide on
|
// |number| must be >= 0. If |number| == 0 then the muxer will decide on
|
||||||
// the track number.
|
// the track number.
|
||||||
|
|||||||
@@ -347,6 +347,8 @@ int main(int argc, char* argv[]) {
|
|||||||
if (track_name)
|
if (track_name)
|
||||||
video->set_name(track_name);
|
video->set_name(track_name);
|
||||||
|
|
||||||
|
video->set_codec_id(pVideoTrack->GetCodecId());
|
||||||
|
|
||||||
if (display_width > 0)
|
if (display_width > 0)
|
||||||
video->set_display_width(display_width);
|
video->set_display_width(display_width);
|
||||||
if (display_height > 0)
|
if (display_height > 0)
|
||||||
@@ -385,6 +387,8 @@ int main(int argc, char* argv[]) {
|
|||||||
if (track_name)
|
if (track_name)
|
||||||
audio->set_name(track_name);
|
audio->set_name(track_name);
|
||||||
|
|
||||||
|
audio->set_codec_id(pAudioTrack->GetCodecId());
|
||||||
|
|
||||||
size_t private_size;
|
size_t private_size;
|
||||||
const unsigned char* const private_data =
|
const unsigned char* const private_data =
|
||||||
pAudioTrack->GetCodecPrivate(private_size);
|
pAudioTrack->GetCodecPrivate(private_size);
|
||||||
|
|||||||
Reference in New Issue
Block a user