Update Segment size if Cues size changes on repositioning
Files created with Segment::CopyAndMoveCuesBeforeClusters can't be parsed by libwebm because the Segment size was not updated to account for the change in Cue size. Fixing that. Change-Id: I993f63e5c279f131cd39c54bee40163da00b8cbd
This commit is contained in:
parent
4ac7b755f4
commit
d782edd68e
10
mkvmuxer.cpp
10
mkvmuxer.cpp
@ -2086,6 +2086,8 @@ bool Segment::Init(IMkvWriter* ptr_writer) {
|
||||
|
||||
bool Segment::CopyAndMoveCuesBeforeClusters(mkvparser::IMkvReader* reader,
|
||||
IMkvWriter* writer) {
|
||||
if (!writer->Seekable())
|
||||
return false;
|
||||
const int64 cluster_offset = cluster_list_[0]->size_position() -
|
||||
GetUIntSize(kMkvCluster);
|
||||
|
||||
@ -2108,6 +2110,14 @@ bool Segment::CopyAndMoveCuesBeforeClusters(mkvparser::IMkvReader* reader,
|
||||
if (!ChunkedCopy(reader, writer, cluster_offset,
|
||||
cluster_end_offset_ - cluster_offset))
|
||||
return false;
|
||||
|
||||
// Update the Segment size in case the Cues size has changed.
|
||||
int64 pos = writer->Position();
|
||||
int64 segment_size = writer->Position() - payload_pos_;
|
||||
if (writer->Position(size_position_) ||
|
||||
WriteUIntSize(writer, segment_size, 8) ||
|
||||
writer->Position(pos))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user