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:
Vignesh Venkatasubramanian 2013-06-24 11:55:53 -07:00
parent 4ac7b755f4
commit d782edd68e

View File

@ -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;
}