summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorA. Cody Schuffelen <schuffelen@google.com>2020-11-26 06:45:52 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-11-26 06:45:52 +0000
commit31b542f9cd5208575d52933cf95e030c3b734eb1 (patch)
treef30799a67520f756b0d2fe5aefa11dcad5aeeda0
parente1c992cbab64330fbd171f80151f3eb5fb890e68 (diff)
parentcfbe5d810d70e432b8f3ca9bb420d75684a40799 (diff)
downloadlibwebm-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.cc24
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;