Merge "media: Signal no more frames to read in AudioSource" into oc-dr1-dev am: 0d3c68179e
am: 1fcd8d8f7e
Change-Id: I3513f12801561b730feafa6cc6aa663616a4020e
diff --git a/media/libstagefright/AudioSource.cpp b/media/libstagefright/AudioSource.cpp
index 6a5a229..f2b1f10 100644
--- a/media/libstagefright/AudioSource.cpp
+++ b/media/libstagefright/AudioSource.cpp
@@ -66,7 +66,8 @@
mNumFramesReceived(0),
mNumFramesSkipped(0),
mNumFramesLost(0),
- mNumClientOwnedBuffers(0) {
+ mNumClientOwnedBuffers(0),
+ mNoMoreFramesToRead(false) {
ALOGV("sampleRate: %u, outSampleRate: %u, channelCount: %u",
sampleRate, outSampleRate, channelCount);
CHECK(channelCount == 1 || channelCount == 2);
@@ -178,6 +179,7 @@
mStarted = false;
mStopSystemTimeUs = -1;
+ mNoMoreFramesToRead = false;
mFrameAvailableCondition.signal();
mRecord->stop();
@@ -246,6 +248,9 @@
while (mStarted && mBuffersReceived.empty()) {
mFrameAvailableCondition.wait(mLock);
+ if (mNoMoreFramesToRead) {
+ return OK;
+ }
}
if (!mStarted) {
return OK;
@@ -359,6 +364,8 @@
if (mStopSystemTimeUs != -1 && timeUs >= mStopSystemTimeUs) {
ALOGV("Drop Audio frame at %lld stop time: %lld us",
(long long)timeUs, (long long)mStopSystemTimeUs);
+ mNoMoreFramesToRead = true;
+ mFrameAvailableCondition.signal();
return OK;
}
diff --git a/media/libstagefright/include/media/stagefright/AudioSource.h b/media/libstagefright/include/media/stagefright/AudioSource.h
index 07a51bf..1595be4 100644
--- a/media/libstagefright/include/media/stagefright/AudioSource.h
+++ b/media/libstagefright/include/media/stagefright/AudioSource.h
@@ -95,6 +95,7 @@
int64_t mNumFramesSkipped;
int64_t mNumFramesLost;
int64_t mNumClientOwnedBuffers;
+ bool mNoMoreFramesToRead;
List<MediaBuffer * > mBuffersReceived;