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

Commit d2bd26d3 authored by The Android Open Source Project's avatar The Android Open Source Project
Browse files

auto import from //branches/cupcake/...@132276

parent ac65e0b1
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -72,7 +72,8 @@ AudioStreamOut* A2dpAudioInterface::openOutputStream(
}

AudioStreamIn* A2dpAudioInterface::openInputStream(
        int format, int channelCount, uint32_t sampleRate, status_t *status)
        int format, int channelCount, uint32_t sampleRate, status_t *status,
        AudioSystem::audio_in_acoustics acoustics)
{
    if (status)
        *status = -1;
+2 −1
Original line number Diff line number Diff line
@@ -58,7 +58,8 @@ public:
                                int format,
                                int channelCount,
                                uint32_t sampleRate,
                                status_t *status);
                                status_t *status,
                                AudioSystem::audio_in_acoustics acoustics);

protected:
    virtual status_t    doRouting();
+3 −2
Original line number Diff line number Diff line
@@ -78,8 +78,9 @@ public:
    virtual status_t    setParameter(const char* key, const char* value)
                            {return mFinalInterface->setParameter(key, value);}

    virtual AudioStreamIn* openInputStream( int format, int channelCount, uint32_t sampleRate, status_t *status)
                            {return mFinalInterface->openInputStream( format, channelCount, sampleRate, status);}
    virtual AudioStreamIn* openInputStream( int format, int channelCount, uint32_t sampleRate, status_t *status,
                                            AudioSystem::audio_in_acoustics acoustics)
                            {return mFinalInterface->openInputStream( format, channelCount, sampleRate, status, acoustics);}

    virtual status_t    dump(int fd, const Vector<String16>& args) { return mFinalInterface->dumpState(fd, args); }

+48 −14
Original line number Diff line number Diff line
@@ -278,6 +278,9 @@ status_t AudioFlinger::dump(int fd, const Vector<String16>& args)
        mA2dpMixerThread->dump(fd, args);
#endif

        // dump record client
        if (mAudioRecordThread != 0) mAudioRecordThread->dump(fd, args);

        if (mAudioHardware) {
            mAudioHardware->dumpState(fd, args);
        }
@@ -1223,6 +1226,11 @@ sp<AudioFlinger::MixerThread::Track> AudioFlinger::MixerThread::createTrack(

        track = new Track(this, client, streamType, sampleRate, format,
                channelCount, frameCount, sharedBuffer);
        if (track->getCblk() == NULL) {
            track.clear();
            lStatus = NO_MEMORY;
            goto Exit;
        }
        mTracks.add(track);
        lStatus = NO_ERROR;
    }
@@ -1506,6 +1514,7 @@ AudioFlinger::MixerThread::TrackBase::TrackBase(
            int format,
            int channelCount,
            int frameCount,
            uint32_t flags,
            const sp<IMemory>& sharedBuffer)
    :   RefBase(),
        mMixerThread(mixerThread),
@@ -1515,7 +1524,7 @@ AudioFlinger::MixerThread::TrackBase::TrackBase(
        mState(IDLE),
        mClientTid(-1),
        mFormat(format),
        mFlags(0)
        mFlags(flags & ~SYSTEM_FLAGS_MASK)
{
    mName = mixerThread->getTrackName();
    LOGV("TrackBase contructor name %d, calling thread %d", mName, IPCThreadState::self()->getCallingPid());
@@ -1526,7 +1535,6 @@ AudioFlinger::MixerThread::TrackBase::TrackBase(

    LOGV_IF(sharedBuffer != 0, "sharedBuffer: %p, size: %d", sharedBuffer->pointer(), sharedBuffer->size());


    // LOGD("Creating track with %d buffers @ %d bytes", bufferCount, bufferSize);
   size_t size = sizeof(audio_track_cblk_t);
   size_t bufferSize = frameCount*channelCount*sizeof(int16_t);
@@ -1614,7 +1622,7 @@ void AudioFlinger::MixerThread::TrackBase::reset() {
    cblk->server = 0;
    cblk->userBase = 0;
    cblk->serverBase = 0;
    mFlags = 0;
    mFlags &= (uint32_t)(~SYSTEM_FLAGS_MASK);
    LOGV("TrackBase::reset");
}

@@ -1659,7 +1667,7 @@ AudioFlinger::MixerThread::Track::Track(
            int channelCount,
            int frameCount,
            const sp<IMemory>& sharedBuffer)
    :   TrackBase(mixerThread, client, streamType, sampleRate, format, channelCount, frameCount, sharedBuffer)
    :   TrackBase(mixerThread, client, streamType, sampleRate, format, channelCount, frameCount, 0, sharedBuffer)
{
    mVolume[0] = 1.0f;
    mVolume[1] = 1.0f;
@@ -1836,9 +1844,10 @@ AudioFlinger::MixerThread::RecordTrack::RecordTrack(
            uint32_t sampleRate,
            int format,
            int channelCount,
            int frameCount)
            int frameCount,
            uint32_t flags)
    :   TrackBase(mixerThread, client, streamType, sampleRate, format,
            channelCount, frameCount, 0),
                  channelCount, frameCount, flags, 0),
        mOverflow(false)
{
}
@@ -2232,7 +2241,12 @@ sp<IAudioRecord> AudioFlinger::openRecord(

    // create new record track and pass to record thread
    recordTrack = new MixerThread::RecordTrack(mHardwareMixerThread, client, streamType, sampleRate,
            format, channelCount, frameCount);
                                               format, channelCount, frameCount, flags);
    if (recordTrack->getCblk() == NULL) {
        recordTrack.clear();
        lStatus = NO_MEMORY;
        goto Exit;
    }

    // return to handle to client
    recordHandle = new RecordHandle(recordTrack);
@@ -2323,6 +2337,7 @@ bool AudioFlinger::AudioRecordThread::threadLoop()
                    input = 0;
                }
                mRecordTrack.clear();
                mStopped.signal();

                mWaitWorkCV.wait(mLock);
               
@@ -2331,7 +2346,8 @@ bool AudioFlinger::AudioRecordThread::threadLoop()
                    input = mAudioHardware->openInputStream(mRecordTrack->format(), 
                                    mRecordTrack->channelCount(), 
                                    mRecordTrack->sampleRate(), 
                                            &mStartStatus);
                                    &mStartStatus,
                                    (AudioSystem::audio_in_acoustics)(mRecordTrack->mFlags >> 16));
                    if (input != 0) {
                        inBufferSize = input->bufferSize();
                        inFrameCount = inBufferSize/input->frameSize();                        
@@ -2352,7 +2368,8 @@ bool AudioFlinger::AudioRecordThread::threadLoop()
            buffer.frameCount = inFrameCount;
            if (LIKELY(mRecordTrack->getNextBuffer(&buffer) == NO_ERROR)) {
                LOGV("AudioRecordThread read: %d frames", buffer.frameCount);
                if (input->read(buffer.raw, inBufferSize) < 0) {
                ssize_t bytesRead = input->read(buffer.raw, inBufferSize);
                if (bytesRead < 0) {
                    LOGE("Error reading audio input");
                    sleep(1);
                }
@@ -2407,6 +2424,7 @@ void AudioFlinger::AudioRecordThread::stop(MixerThread::RecordTrack* recordTrack
    AutoMutex lock(&mLock);
    if (mActive && (recordTrack == mRecordTrack.get())) {
        mActive = false;
        mStopped.wait(mLock);
    }
}

@@ -2421,6 +2439,22 @@ void AudioFlinger::AudioRecordThread::exit()
    requestExitAndWait();
}

status_t AudioFlinger::AudioRecordThread::dump(int fd, const Vector<String16>& args)
{
    const size_t SIZE = 256;
    char buffer[SIZE];
    String8 result;
    pid_t pid = 0;

    if (mRecordTrack != 0 && mRecordTrack->mClient != 0) {
        snprintf(buffer, SIZE, "Record client pid: %d\n", mRecordTrack->mClient->pid());
        result.append(buffer);
    } else {
        result.append("No record client\n");
    }
    write(fd, result.string(), result.size());
    return NO_ERROR;
}

status_t AudioFlinger::onTransact(
        uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
+14 −5
Original line number Diff line number Diff line
@@ -221,7 +221,12 @@ private:
            };

            enum track_flags {
                STEPSERVER_FAILED = 0x01   //  StepServer could not acquire cblk->lock mutex
                STEPSERVER_FAILED = 0x01, //  StepServer could not acquire cblk->lock mutex
                SYSTEM_FLAGS_MASK = 0x0000ffffUL,

                AUDIO_IN_AGC_ENABLE = AudioSystem::AGC_ENABLE << 16,
                AUDIO_IN_NS_ENABLE  = AudioSystem::NS_ENABLE << 16,
                AUDIO_IN_IIR_ENABLE = AudioSystem::TX_IIR_ENABLE << 16
            };

                                TrackBase(const sp<MixerThread>& mixerThread,
@@ -231,6 +236,7 @@ private:
                                        int format,
                                        int channelCount,
                                        int frameCount,
                                        uint32_t flags,
                                        const sp<IMemory>& sharedBuffer);
                                ~TrackBase();

@@ -295,7 +301,7 @@ private:
            int                 mState;
            int                 mClientTid;
            uint8_t             mFormat;
            uint8_t             mFlags;
            uint32_t            mFlags;
        };

        // playback track
@@ -368,7 +374,8 @@ private:
                                        uint32_t sampleRate,
                                        int format,
                                        int channelCount,
                                        int frameCount);
                                        int frameCount,
                                        uint32_t flags);
                                ~RecordTrack();

            virtual status_t    start();
@@ -585,6 +592,7 @@ private:
                status_t    start(MixerThread::RecordTrack* recordTrack);
                void        stop(MixerThread::RecordTrack* recordTrack);
                void        exit();
                status_t    dump(int fd, const Vector<String16>& args);

    private:
                AudioRecordThread();
@@ -592,6 +600,7 @@ private:
                sp<MixerThread::RecordTrack>        mRecordTrack;
                Mutex                               mLock;
                Condition                           mWaitWorkCV;
                Condition                           mStopped;
                volatile bool                       mActive;
                status_t                            mStartStatus;
    };
Loading