Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit df656622 authored by Hangyu Kuang's avatar Hangyu Kuang
Browse files

media: Signal no more frames to read in AudioSource

This will unblock the MediaCodecSource on reading the frame.

Bug:62328917
Test: Camera recording.
Change-Id: I4fa67ad6a844c87e2be2733cb2d9a96def336196
parent 10c94f7a
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -66,7 +66,8 @@ AudioSource::AudioSource(
      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 @@ status_t AudioSource::reset() {

    mStarted = false;
    mStopSystemTimeUs = -1;
    mNoMoreFramesToRead = false;
    mFrameAvailableCondition.signal();

    mRecord->stop();
@@ -246,6 +248,9 @@ status_t AudioSource::read(

    while (mStarted && mBuffersReceived.empty()) {
        mFrameAvailableCondition.wait(mLock);
        if (mNoMoreFramesToRead) {
            return OK;
        }
    }
    if (!mStarted) {
        return OK;
@@ -359,6 +364,8 @@ status_t AudioSource::dataCallback(const AudioRecord::Buffer& audioBuffer) {
    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;
    }

+1 −0
Original line number Diff line number Diff line
@@ -95,6 +95,7 @@ private:
    int64_t mNumFramesSkipped;
    int64_t mNumFramesLost;
    int64_t mNumClientOwnedBuffers;
    bool mNoMoreFramesToRead;

    List<MediaBuffer * > mBuffersReceived;