diff options
author | Dhanalakshmi Siddani <dsiddani@codeaurora.org> | 2015-07-01 14:34:44 +0530 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2015-10-06 03:24:36 -0600 |
commit | 1ea539f4af155d3acc635e59cbdafab255b06c54 (patch) | |
tree | f55aab4c1c4181889d6349424ac42760ebc20f8d | |
parent | 390aa8dd83078bad748582ce275bded14868d1ac (diff) | |
download | frameworks_av-1ea539f4af155d3acc635e59cbdafab255b06c54.zip frameworks_av-1ea539f4af155d3acc635e59cbdafab255b06c54.tar.gz frameworks_av-1ea539f4af155d3acc635e59cbdafab255b06c54.tar.bz2 |
Audio: post error to client during SSR
- Add support to post error to client if SSR is triggered during
NT mode encoding
Change-Id: Idf10939f1eb0c719a692e4f53f6e3040633fab40
-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; } |