Merge "Handle malformed raw AAC/AMR writer better" into jb-mr1-dev
diff --git a/media/libstagefright/AACWriter.cpp b/media/libstagefright/AACWriter.cpp
index 33b7bd5..a6f7cfb 100644
--- a/media/libstagefright/AACWriter.cpp
+++ b/media/libstagefright/AACWriter.cpp
@@ -304,6 +304,7 @@
int64_t previousPausedDurationUs = 0;
int64_t maxTimestampUs = 0;
status_t err = OK;
+ bool stoppedPrematurely = true;
prctl(PR_SET_NAME, (unsigned long)"AACWriterThread", 0, 0, 0);
@@ -372,6 +373,18 @@
buffer->release();
buffer = NULL;
+
+ if (err != OK) {
+ break;
+ }
+
+ if (stoppedPrematurely) {
+ stoppedPrematurely = false;
+ }
+ }
+
+ if ((err == OK || err == ERROR_END_OF_STREAM) && stoppedPrematurely) {
+ err = ERROR_MALFORMED;
}
close(mFd);
diff --git a/media/libstagefright/AMRWriter.cpp b/media/libstagefright/AMRWriter.cpp
index 15a7143..8d5eec8 100644
--- a/media/libstagefright/AMRWriter.cpp
+++ b/media/libstagefright/AMRWriter.cpp
@@ -254,11 +254,14 @@
if (n < (ssize_t)buffer->range_length()) {
buffer->release();
buffer = NULL;
-
+ err = ERROR_IO;
break;
}
- // XXX: How to tell it is stopped prematurely?
+ if (err != OK) {
+ break;
+ }
+
if (stoppedPrematurely) {
stoppedPrematurely = false;
}
@@ -267,8 +270,8 @@
buffer = NULL;
}
- if (stoppedPrematurely) {
- notify(MEDIA_RECORDER_EVENT_INFO, MEDIA_RECORDER_TRACK_INFO_COMPLETION_STATUS, UNKNOWN_ERROR);
+ if ((err == OK || err == ERROR_END_OF_STREAM) && stoppedPrematurely) {
+ err = ERROR_MALFORMED;
}
close(mFd);