Support for placing Cues before Clusters
Adding support for placing Cues element before the Cluster element. We recompute the new offsets using a recursive algorithm and update the Cues and Seek Heads with the updates offsets. Change-Id: I038f1a403b1defa853b9026bd3e48f4ad1006866
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
|
||||
// libwebm muxer includes
|
||||
#include "mkvmuxer.hpp"
|
||||
#include "mkvreadablewriter.hpp"
|
||||
#include "mkvwriter.hpp"
|
||||
#include "mkvmuxerutil.hpp"
|
||||
|
||||
@@ -53,6 +54,7 @@ void Usage() {
|
||||
printf("\n");
|
||||
printf("Cues options:\n");
|
||||
printf(" -output_cues_block_number <int> >0 outputs cue block number\n");
|
||||
printf(" -cues_before_clusters <int> >0 puts Cues before Clusters\n");
|
||||
printf("\n");
|
||||
printf("Metadata options:\n");
|
||||
printf(" -webvtt-subtitles <vttfile> "
|
||||
@@ -145,6 +147,7 @@ int main(int argc, char* argv[]) {
|
||||
bool output_audio = true;
|
||||
bool live_mode = false;
|
||||
bool output_cues = true;
|
||||
bool cues_before_clusters = false;
|
||||
bool cues_on_video_track = true;
|
||||
bool cues_on_audio_track = false;
|
||||
uint64 max_cluster_duration = 0;
|
||||
@@ -182,6 +185,8 @@ int main(int argc, char* argv[]) {
|
||||
live_mode = strtol(argv[++i], &end, 10) == 0 ? false : true;
|
||||
} else if (!strcmp("-output_cues", argv[i]) && i < argc_check) {
|
||||
output_cues = strtol(argv[++i], &end, 10) == 0 ? false : true;
|
||||
} else if (!strcmp("-cues_before_clusters", argv[i]) && i < argc_check) {
|
||||
cues_before_clusters = strtol(argv[++i], &end, 10) == 0 ? false : true;
|
||||
} else if (!strcmp("-cues_on_video_track", argv[i]) && i < argc_check) {
|
||||
cues_on_video_track = strtol(argv[++i], &end, 10) == 0 ? false : true;
|
||||
if (cues_on_video_track)
|
||||
@@ -267,6 +272,14 @@ int main(int argc, char* argv[]) {
|
||||
// Set Segment element attributes
|
||||
mkvmuxer::Segment muxer_segment;
|
||||
|
||||
mkvmuxer::MkvReadableWriter writer_temp;
|
||||
if (cues_before_clusters) {
|
||||
if (!writer_temp.Open(NULL, true)) {
|
||||
printf("\n Filename is invalid or error while opening.\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
muxer_segment.WriteCuesBeforeClusters(&writer_temp);
|
||||
}
|
||||
if (!muxer_segment.Init(&writer)) {
|
||||
printf("\n Could not initialize muxer segment!\n");
|
||||
return EXIT_FAILURE;
|
||||
@@ -511,6 +524,8 @@ int main(int argc, char* argv[]) {
|
||||
delete parser_segment;
|
||||
|
||||
writer.Close();
|
||||
if (cues_before_clusters)
|
||||
writer_temp.Close();
|
||||
reader.Close();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
|
||||
Reference in New Issue
Block a user