Loading libs/audioflinger/A2dpAudioInterface.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -457,4 +457,10 @@ status_t A2dpAudioInterface::A2dpAudioStreamOut::dump(int fd, const Vector<Strin return NO_ERROR; } status_t A2dpAudioInterface::A2dpAudioStreamOut::getRenderPosition(uint32_t *driverFrames) { //TODO: enable when supported by driver return INVALID_OPERATION; } }; // namespace android libs/audioflinger/A2dpAudioInterface.h +1 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,7 @@ private: virtual status_t dump(int fd, const Vector<String16>& args); virtual status_t setParameters(const String8& keyValuePairs); virtual String8 getParameters(const String8& keys); virtual status_t getRenderPosition(uint32_t *dspFrames); private: friend class A2dpAudioInterface; Loading libs/audioflinger/AudioDumpInterface.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -379,6 +379,12 @@ void AudioStreamOutDump::Close() } } status_t AudioStreamOutDump::getRenderPosition(uint32_t *dspFrames) { if (mFinalStream != 0 ) return mFinalStream->getRenderPosition(dspFrames); return INVALID_OPERATION; } // ---------------------------------------------------------------------------- AudioStreamInDump::AudioStreamInDump(AudioDumpInterface *interface, Loading libs/audioflinger/AudioDumpInterface.h +2 −1 Original line number Diff line number Diff line Loading @@ -56,8 +56,9 @@ public: void Close(void); AudioStreamOut* finalStream() { return mFinalStream; } uint32_t device() { return mDevice; } int getId() { return mId; } virtual status_t getRenderPosition(uint32_t *dspFrames); private: AudioDumpInterface *mInterface; int mId; Loading libs/audioflinger/AudioFlinger.cpp +31 −2 Original line number Diff line number Diff line Loading @@ -633,6 +633,20 @@ status_t AudioFlinger::setVoiceVolume(float value) return ret; } status_t AudioFlinger::getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames, int output) { status_t status; Mutex::Autolock _l(mLock); PlaybackThread *playbackThread = checkPlaybackThread_l(output); if (playbackThread != NULL) { return playbackThread->getRenderPosition(halFrames, dspFrames); } return BAD_VALUE; } void AudioFlinger::registerClient(const sp<IAudioFlingerClient>& client) { Loading Loading @@ -1166,6 +1180,19 @@ void AudioFlinger::PlaybackThread::readOutputParameters() memset(mMixBuffer, 0, mFrameCount * 2 * sizeof(int16_t)); } status_t AudioFlinger::PlaybackThread::getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames) { if (halFrames == 0 || dspFrames == 0) { return BAD_VALUE; } if (mOutput == 0) { return INVALID_OPERATION; } *halFrames = mBytesWritten/mOutput->frameSize(); return mOutput->getRenderPosition(dspFrames); } // ---------------------------------------------------------------------------- AudioFlinger::MixerThread::MixerThread(const sp<AudioFlinger>& audioFlinger, AudioStreamOut* output, int id) Loading Loading @@ -1290,8 +1317,9 @@ bool AudioFlinger::MixerThread::threadLoop() if (sleepTime == 0) { mLastWriteTime = systemTime(); mInWrite = true; mBytesWritten += mixBufferSize; int bytesWritten = (int)mOutput->write(curBuf, mixBufferSize); if (bytesWritten > 0) mBytesWritten += bytesWritten; if (bytesWritten < 0) mBytesWritten -= mixBufferSize; mNumWrites++; mInWrite = false; nsecs_t now = systemTime(); Loading Loading @@ -1812,8 +1840,9 @@ bool AudioFlinger::DirectOutputThread::threadLoop() if (sleepTime == 0) { mLastWriteTime = systemTime(); mInWrite = true; mBytesWritten += mixBufferSize; int bytesWritten = (int)mOutput->write(mMixBuffer, mixBufferSize); if (bytesWritten) mBytesWritten += bytesWritten; if (bytesWritten < 0) mBytesWritten -= mixBufferSize; mNumWrites++; mInWrite = false; mStandby = false; Loading Loading
libs/audioflinger/A2dpAudioInterface.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -457,4 +457,10 @@ status_t A2dpAudioInterface::A2dpAudioStreamOut::dump(int fd, const Vector<Strin return NO_ERROR; } status_t A2dpAudioInterface::A2dpAudioStreamOut::getRenderPosition(uint32_t *driverFrames) { //TODO: enable when supported by driver return INVALID_OPERATION; } }; // namespace android
libs/audioflinger/A2dpAudioInterface.h +1 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,7 @@ private: virtual status_t dump(int fd, const Vector<String16>& args); virtual status_t setParameters(const String8& keyValuePairs); virtual String8 getParameters(const String8& keys); virtual status_t getRenderPosition(uint32_t *dspFrames); private: friend class A2dpAudioInterface; Loading
libs/audioflinger/AudioDumpInterface.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -379,6 +379,12 @@ void AudioStreamOutDump::Close() } } status_t AudioStreamOutDump::getRenderPosition(uint32_t *dspFrames) { if (mFinalStream != 0 ) return mFinalStream->getRenderPosition(dspFrames); return INVALID_OPERATION; } // ---------------------------------------------------------------------------- AudioStreamInDump::AudioStreamInDump(AudioDumpInterface *interface, Loading
libs/audioflinger/AudioDumpInterface.h +2 −1 Original line number Diff line number Diff line Loading @@ -56,8 +56,9 @@ public: void Close(void); AudioStreamOut* finalStream() { return mFinalStream; } uint32_t device() { return mDevice; } int getId() { return mId; } virtual status_t getRenderPosition(uint32_t *dspFrames); private: AudioDumpInterface *mInterface; int mId; Loading
libs/audioflinger/AudioFlinger.cpp +31 −2 Original line number Diff line number Diff line Loading @@ -633,6 +633,20 @@ status_t AudioFlinger::setVoiceVolume(float value) return ret; } status_t AudioFlinger::getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames, int output) { status_t status; Mutex::Autolock _l(mLock); PlaybackThread *playbackThread = checkPlaybackThread_l(output); if (playbackThread != NULL) { return playbackThread->getRenderPosition(halFrames, dspFrames); } return BAD_VALUE; } void AudioFlinger::registerClient(const sp<IAudioFlingerClient>& client) { Loading Loading @@ -1166,6 +1180,19 @@ void AudioFlinger::PlaybackThread::readOutputParameters() memset(mMixBuffer, 0, mFrameCount * 2 * sizeof(int16_t)); } status_t AudioFlinger::PlaybackThread::getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames) { if (halFrames == 0 || dspFrames == 0) { return BAD_VALUE; } if (mOutput == 0) { return INVALID_OPERATION; } *halFrames = mBytesWritten/mOutput->frameSize(); return mOutput->getRenderPosition(dspFrames); } // ---------------------------------------------------------------------------- AudioFlinger::MixerThread::MixerThread(const sp<AudioFlinger>& audioFlinger, AudioStreamOut* output, int id) Loading Loading @@ -1290,8 +1317,9 @@ bool AudioFlinger::MixerThread::threadLoop() if (sleepTime == 0) { mLastWriteTime = systemTime(); mInWrite = true; mBytesWritten += mixBufferSize; int bytesWritten = (int)mOutput->write(curBuf, mixBufferSize); if (bytesWritten > 0) mBytesWritten += bytesWritten; if (bytesWritten < 0) mBytesWritten -= mixBufferSize; mNumWrites++; mInWrite = false; nsecs_t now = systemTime(); Loading Loading @@ -1812,8 +1840,9 @@ bool AudioFlinger::DirectOutputThread::threadLoop() if (sleepTime == 0) { mLastWriteTime = systemTime(); mInWrite = true; mBytesWritten += mixBufferSize; int bytesWritten = (int)mOutput->write(mMixBuffer, mixBufferSize); if (bytesWritten) mBytesWritten += bytesWritten; if (bytesWritten < 0) mBytesWritten -= mixBufferSize; mNumWrites++; mInWrite = false; mStandby = false; Loading