diff options
-rw-r--r-- | media/libstagefright/MPEG4Writer.cpp | 9 | ||||
-rw-r--r-- | media/libstagefright/MediaCodecSource.cpp | 10 |
2 files changed, 14 insertions, 5 deletions
diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp index 26686ab..7dfac76 100644 --- a/media/libstagefright/MPEG4Writer.cpp +++ b/media/libstagefright/MPEG4Writer.cpp @@ -2554,8 +2554,13 @@ status_t MPEG4Writer::Track::threadEntry() { if (mIsAudio) { ALOGI("Audio track drift time: %" PRId64 " us", mOwner->getDriftTimeUs()); } - - if (err == ERROR_END_OF_STREAM) { + // if err is ERROR_IO (ex: during SSR), return OK to save the + // recorded file successfully. Session tear down will happen as part of + // client callback + if (mIsAudio && (err == ERROR_IO)) { + return OK; + } + else if (err == ERROR_END_OF_STREAM) { return OK; } return err; diff --git a/media/libstagefright/MediaCodecSource.cpp b/media/libstagefright/MediaCodecSource.cpp index 7f9f824..16a1931 100644 --- a/media/libstagefright/MediaCodecSource.cpp +++ b/media/libstagefright/MediaCodecSource.cpp @@ -36,6 +36,7 @@ #include <media/stagefright/MetaData.h> #include <media/stagefright/PersistentSurface.h> #include <media/stagefright/Utils.h> +#include <OMX_Core.h> namespace android { @@ -514,6 +515,9 @@ void MediaCodecSource::signalEOS(status_t err) { mOutputBufferQueue.clear(); mEncoderReachedEOS = true; mErrorCode = err; + if (err == OMX_ErrorHardware) { + mErrorCode = ERROR_IO; + } mOutputBufferCond.signal(); } @@ -591,7 +595,7 @@ status_t MediaCodecSource::feedEncoderInputBuffers() { status_t err = mEncoder->getInputBuffer(bufferIndex, &inbuf); if (err != OK || inbuf == NULL) { mbuf->release(); - signalEOS(); + signalEOS(err); break; } @@ -738,7 +742,7 @@ void MediaCodecSource::onMessageReceived(const sp<AMessage> &msg) { sp<ABuffer> outbuf; status_t err = mEncoder->getOutputBuffer(index, &outbuf); if (err != OK || outbuf == NULL) { - signalEOS(); + signalEOS(err); break; } @@ -799,7 +803,7 @@ void MediaCodecSource::onMessageReceived(const sp<AMessage> &msg) { CHECK(msg->findInt32("err", &err)); ALOGE("Encoder (%s) reported error : 0x%x", mIsVideo ? "video" : "audio", err); - signalEOS(); + signalEOS(err); } break; } |