diff options
author | A. Cody Schuffelen <schuffelen@google.com> | 2020-11-26 06:05:43 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-11-26 06:05:43 +0000 |
commit | cfbe5d810d70e432b8f3ca9bb420d75684a40799 (patch) | |
tree | f30799a67520f756b0d2fe5aefa11dcad5aeeda0 | |
parent | 537e88094172d35338e4a2942bd45a183716cb13 (diff) | |
parent | 6157fd6b7de3f9e7f53fc1d812efd8bd47791d7b (diff) | |
download | libwebm-cfbe5d810d70e432b8f3ca9bb420d75684a40799.tar.gz |
mkvmuxer: Keep Segment in a good state when frame writes fail am: 6157fd6b7d
Original change: https://android-review.googlesource.com/c/platform/external/libwebm/+/1510509
Change-Id: I61a08529eba369b6248d86c9d3512e2856559599
-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 5120312..5926a15 100644 --- a/mkvmuxer/mkvmuxer.cc +++ b/mkvmuxer/mkvmuxer.cc @@ -4105,12 +4105,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_) { @@ -4153,12 +4157,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; |