diff options
author | A. Cody Schuffelen <schuffelen@google.com> | 2020-11-26 06:45:52 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-11-26 06:45:52 +0000 |
commit | 31b542f9cd5208575d52933cf95e030c3b734eb1 (patch) | |
tree | f30799a67520f756b0d2fe5aefa11dcad5aeeda0 | |
parent | e1c992cbab64330fbd171f80151f3eb5fb890e68 (diff) | |
parent | cfbe5d810d70e432b8f3ca9bb420d75684a40799 (diff) | |
download | libwebm-31b542f9cd5208575d52933cf95e030c3b734eb1.tar.gz |
mkvmuxer: Keep Segment in a good state when frame writes fail am: 6157fd6b7d am: cfbe5d810d
Original change: https://android-review.googlesource.com/c/platform/external/libwebm/+/1510509
Change-Id: I5df4f5d63c0620993da75f6555531be8722a0d97
-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; |