From 1ea539f4af155d3acc635e59cbdafab255b06c54 Mon Sep 17 00:00:00 2001 From: Dhanalakshmi Siddani Date: Wed, 1 Jul 2015 14:34:44 +0530 Subject: 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 --- media/libstagefright/MPEG4Writer.cpp | 9 +++++++-- 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 #include #include +#include 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 &msg) { sp 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 &msg) { CHECK(msg->findInt32("err", &err)); ALOGE("Encoder (%s) reported error : 0x%x", mIsVideo ? "video" : "audio", err); - signalEOS(); + signalEOS(err); } break; } -- cgit v1.1