diff options
author | James Zern <jzern@google.com> | 2020-11-24 23:40:20 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-11-24 23:40:20 +0000 |
commit | 485fb67b324aec5298765e899dc054459d3946e5 (patch) | |
tree | dd39b2baaa74673bdb07bfbde17b5e1903659efa | |
parent | 46b20057cfc24437fbe8987e0b70e0c4c8ecac75 (diff) | |
parent | 97f8074dc9cc5ca0263325c16340ff0f4fcfc212 (diff) | |
download | libwebm-485fb67b324aec5298765e899dc054459d3946e5.tar.gz |
Merge "mkvmuxer: Keep Segment in a good state when frame writes fail"
-rw-r--r-- | mkvmuxer/mkvmuxer.cc | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/mkvmuxer/mkvmuxer.cc b/mkvmuxer/mkvmuxer.cc index be4c650..499fbe6 100644 --- a/mkvmuxer/mkvmuxer.cc +++ b/mkvmuxer/mkvmuxer.cc @@ -4106,12 +4106,16 @@ int Segment::WriteFramesAll() { // places where |doc_type_version_| needs to be updated. if (frame->discard_padding() != 0) doc_type_version_ = 4; - if (!cluster->AddFrame(frame)) - return -1; + if (!cluster->AddFrame(frame)) { + delete frame; + continue; + } if (new_cuepoint_ && cues_track_ == frame->track_number()) { - if (!AddCuePoint(frame->timestamp(), cues_track_)) - return -1; + if (!AddCuePoint(frame->timestamp(), cues_track_)) { + delete frame; + continue; + } } if (frame->timestamp() > last_timestamp_) { @@ -4154,12 +4158,16 @@ bool Segment::WriteFramesLessThan(uint64_t timestamp) { const Frame* const frame_prev = frames_[i - 1]; if (frame_prev->discard_padding() != 0) doc_type_version_ = 4; - if (!cluster->AddFrame(frame_prev)) - return false; + if (!cluster->AddFrame(frame_prev)) { + delete frame_prev; + continue; + } if (new_cuepoint_ && cues_track_ == frame_prev->track_number()) { - if (!AddCuePoint(frame_prev->timestamp(), cues_track_)) - return false; + if (!AddCuePoint(frame_prev->timestamp(), cues_track_)) { + delete frame_prev; + continue; + } } ++shift_left; |