Loading include/media/AudioRecord.h +4 −3 Original line number Diff line number Diff line Loading @@ -268,7 +268,7 @@ public: * Returned value: * handle on audio hardware input */ audio_io_handle_t getInput() { return mInput; } audio_io_handle_t getInput(); /* obtains a buffer of "frameCount" frames. The buffer must be * filled entirely. If the track is stopped, obtainBuffer() returns Loading Loading @@ -318,7 +318,8 @@ private: int format, int channelCount, int frameCount, uint32_t flags); uint32_t flags, audio_io_handle_t input); sp<IAudioRecord> mAudioRecord; sp<IMemory> mCblkMemory; Loading @@ -345,8 +346,8 @@ private: bool mMarkerReached; uint32_t mNewPosition; uint32_t mUpdatePeriod; audio_io_handle_t mInput; uint32_t mFlags; uint32_t mChannels; }; }; // namespace android Loading include/media/AudioSystem.h +3 −5 Original line number Diff line number Diff line Loading @@ -239,15 +239,11 @@ public: DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100, DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200, DEVICE_OUT_AUX_DIGITAL = 0x400, DEVICE_OUT_FM_HEADPHONE = 0x800, DEVICE_OUT_FM_SPEAKER = 0x1000, DEVICE_OUT_TTY = 0x2000, DEVICE_OUT_DEFAULT = 0x8000, DEVICE_OUT_ALL = (DEVICE_OUT_EARPIECE | DEVICE_OUT_SPEAKER | DEVICE_OUT_WIRED_HEADSET | DEVICE_OUT_WIRED_HEADPHONE | DEVICE_OUT_BLUETOOTH_SCO | DEVICE_OUT_BLUETOOTH_SCO_HEADSET | DEVICE_OUT_BLUETOOTH_SCO_CARKIT | DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | DEVICE_OUT_AUX_DIGITAL | DEVICE_OUT_FM_HEADPHONE | DEVICE_OUT_FM_SPEAKER | DEVICE_OUT_TTY | DEVICE_OUT_DEFAULT), DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | DEVICE_OUT_AUX_DIGITAL | DEVICE_OUT_DEFAULT), // input devices DEVICE_IN_COMMUNICATION = 0x10000, Loading Loading @@ -286,6 +282,7 @@ public: FORCE_BT_SCO, FORCE_BT_A2DP, FORCE_WIRED_ACCESSORY, FORCE_BT_DOCK, NUM_FORCE_CONFIG, FORCE_DEFAULT = FORCE_NONE }; Loading @@ -295,6 +292,7 @@ public: FOR_COMMUNICATION, FOR_MEDIA, FOR_RECORD, FOR_DOCK, NUM_FORCE_USE }; Loading include/media/stagefright/MediaPlayerImpl.h +3 −1 Original line number Diff line number Diff line Loading @@ -112,7 +112,9 @@ private: MediaSource *makeShoutcastSource(const char *path); void displayOrDiscardFrame(MediaBuffer *buffer, int64_t pts_us); void displayOrDiscardFrame( MediaBuffer **lastBuffer, MediaBuffer *buffer, int64_t pts_us); void populateISurface(); void depopulateISurface(); void sendFrameToISurface(MediaBuffer *buffer); Loading media/libmedia/AudioRecord.cpp +40 −33 Original line number Diff line number Diff line Loading @@ -46,7 +46,7 @@ namespace android { // --------------------------------------------------------------------------- AudioRecord::AudioRecord() : mStatus(NO_INIT), mInput(0) : mStatus(NO_INIT) { } Loading @@ -60,7 +60,7 @@ AudioRecord::AudioRecord( callback_t cbf, void* user, int notificationFrames) : mStatus(NO_INIT), mInput(0) : mStatus(NO_INIT) { mStatus = set(inputSource, sampleRate, format, channels, frameCount, flags, cbf, user, notificationFrames); Loading @@ -79,7 +79,6 @@ AudioRecord::~AudioRecord() } mAudioRecord.clear(); IPCThreadState::self()->flushCommands(); AudioSystem::releaseInput(mInput); } } Loading Loading @@ -123,10 +122,10 @@ status_t AudioRecord::set( } int channelCount = AudioSystem::popCount(channels); mInput = AudioSystem::getInput(inputSource, audio_io_handle_t input = AudioSystem::getInput(inputSource, sampleRate, format, channels, (AudioSystem::audio_in_acoustics)flags); if (mInput == 0) { LOGE("Could not get audio output for stream type %d", inputSource); if (input == 0) { LOGE("Could not get audio input for record source %d", inputSource); return BAD_VALUE; } Loading Loading @@ -168,7 +167,7 @@ status_t AudioRecord::set( // create the IAudioRecord status_t status = openRecord(sampleRate, format, channelCount, frameCount, flags); frameCount, flags, input); if (status != NO_ERROR) { return status; Loading @@ -187,6 +186,7 @@ status_t AudioRecord::set( // Update buffer size in case it has been limited by AudioFlinger during track creation mFrameCount = mCblk->frameCount; mChannelCount = (uint8_t)channelCount; mChannels = channels; mActive = 0; mCbf = cbf; mNotificationFrames = notificationFrames; Loading Loading @@ -265,13 +265,14 @@ status_t AudioRecord::start() } if (android_atomic_or(1, &mActive) == 0) { ret = AudioSystem::startInput(mInput); if (ret == NO_ERROR) { ret = mAudioRecord->start(); if (ret == DEAD_OBJECT) { LOGV("start() dead IAudioRecord: creating a new one"); ret = openRecord(mCblk->sampleRate, mFormat, mChannelCount, mFrameCount, mFlags); mFrameCount, mFlags, getInput()); if (ret == NO_ERROR) { ret = mAudioRecord->start(); } } if (ret == NO_ERROR) { mNewPosition = mCblk->user + mUpdatePeriod; Loading @@ -284,11 +285,9 @@ status_t AudioRecord::start() } } else { LOGV("start() failed"); AudioSystem::stopInput(mInput); android_atomic_and(~1, &mActive); } } } if (t != 0) { t->mLock.unlock(); Loading Loading @@ -318,7 +317,6 @@ status_t AudioRecord::stop() } else { setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_NORMAL); } AudioSystem::stopInput(mInput); } if (t != 0) { Loading Loading @@ -395,7 +393,8 @@ status_t AudioRecord::openRecord( int format, int channelCount, int frameCount, uint32_t flags) uint32_t flags, audio_io_handle_t input) { status_t status; const sp<IAudioFlinger>& audioFlinger = AudioSystem::get_audio_flinger(); Loading @@ -403,7 +402,7 @@ status_t AudioRecord::openRecord( return NO_INIT; } sp<IAudioRecord> record = audioFlinger->openRecord(getpid(), mInput, sp<IAudioRecord> record = audioFlinger->openRecord(getpid(), input, sampleRate, format, channelCount, frameCount, Loading @@ -425,7 +424,8 @@ status_t AudioRecord::openRecord( mCblk = static_cast<audio_track_cblk_t*>(cblk->pointer()); mCblk->buffers = (char*)mCblk + sizeof(audio_track_cblk_t); mCblk->out = 0; mCblk->bufferTimeoutMs = MAX_RUN_TIMEOUT_MS; mCblk->waitTimeMs = 0; return NO_ERROR; } Loading Loading @@ -466,10 +466,10 @@ status_t AudioRecord::obtainBuffer(Buffer* audioBuffer, int32_t waitCount) if (result == DEAD_OBJECT) { LOGW("obtainBuffer() dead IAudioRecord: creating a new one"); result = openRecord(cblk->sampleRate, mFormat, mChannelCount, mFrameCount, mFlags); mFrameCount, mFlags, getInput()); if (result == NO_ERROR) { cblk = mCblk; cblk->bufferTimeoutMs = MAX_RUN_TIMEOUT_MS; mAudioRecord->start(); } } cblk->lock.lock(); Loading Loading @@ -516,6 +516,14 @@ void AudioRecord::releaseBuffer(Buffer* audioBuffer) cblk->stepUser(audioBuffer->frameCount); } audio_io_handle_t AudioRecord::getInput() { return AudioSystem::getInput(mInputSource, mCblk->sampleRate, mFormat, mChannels, (AudioSystem::audio_in_acoustics)mFlags); } // ------------------------------------------------------------------------- ssize_t AudioRecord::read(void* buffer, size_t userSize) Loading @@ -531,7 +539,6 @@ ssize_t AudioRecord::read(void* buffer, size_t userSize) return BAD_VALUE; } LOGV("read size: %d", userSize); do { Loading media/libmedia/AudioTrack.cpp +24 −17 Original line number Diff line number Diff line Loading @@ -97,7 +97,6 @@ AudioTrack::~AudioTrack() } mAudioTrack.clear(); IPCThreadState::self()->flushCommands(); AudioSystem::releaseOutput(getOutput()); } } Loading Loading @@ -318,15 +317,6 @@ void AudioTrack::start() } if (android_atomic_or(1, &mActive) == 0) { audio_io_handle_t output = AudioTrack::getOutput(); status_t status = mAudioTrack->start(); if (status == DEAD_OBJECT) { LOGV("start() dead IAudioTrack: creating a new one"); status = createTrack(mStreamType, mCblk->sampleRate, mFormat, mChannelCount, mFrameCount, mFlags, mSharedBuffer, output); } if (status == NO_ERROR) { AudioSystem::startOutput(output, (AudioSystem::stream_type)mStreamType); mNewPosition = mCblk->server + mUpdatePeriod; mCblk->bufferTimeoutMs = MAX_STARTUP_TIMEOUT_MS; mCblk->waitTimeMs = 0; Loading @@ -335,9 +325,27 @@ void AudioTrack::start() } else { setpriority(PRIO_PROCESS, 0, THREAD_PRIORITY_AUDIO_CLIENT); } } else { status_t status = mAudioTrack->start(); if (status == DEAD_OBJECT) { LOGV("start() dead IAudioTrack: creating a new one"); status = createTrack(mStreamType, mCblk->sampleRate, mFormat, mChannelCount, mFrameCount, mFlags, mSharedBuffer, getOutput()); if (status == NO_ERROR) { status = mAudioTrack->start(); if (status == NO_ERROR) { mNewPosition = mCblk->server + mUpdatePeriod; } } } if (status != NO_ERROR) { LOGV("start() failed"); android_atomic_and(~1, &mActive); if (t != 0) { t->requestExit(); } else { setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_NORMAL); } } } Loading Loading @@ -374,7 +382,6 @@ void AudioTrack::stop() } else { setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_NORMAL); } AudioSystem::stopOutput(getOutput(), (AudioSystem::stream_type)mStreamType); } if (t != 0) { Loading Loading @@ -409,9 +416,7 @@ void AudioTrack::pause() { LOGV("pause"); if (android_atomic_and(~1, &mActive) == 1) { mActive = 0; mAudioTrack->pause(); AudioSystem::stopOutput(getOutput(), (AudioSystem::stream_type)mStreamType); } } Loading Loading @@ -649,7 +654,8 @@ status_t AudioTrack::createTrack( } mCblk->volumeLR = (int32_t(int16_t(mVolume[LEFT] * 0x1000)) << 16) | int16_t(mVolume[RIGHT] * 0x1000); mCblk->bufferTimeoutMs = MAX_STARTUP_TIMEOUT_MS; mCblk->waitTimeMs = 0; return NO_ERROR; } Loading Loading @@ -700,6 +706,7 @@ status_t AudioTrack::obtainBuffer(Buffer* audioBuffer, int32_t waitCount) if (result == NO_ERROR) { cblk = mCblk; cblk->bufferTimeoutMs = MAX_RUN_TIMEOUT_MS; mAudioTrack->start(); } } cblk->lock.lock(); Loading Loading
include/media/AudioRecord.h +4 −3 Original line number Diff line number Diff line Loading @@ -268,7 +268,7 @@ public: * Returned value: * handle on audio hardware input */ audio_io_handle_t getInput() { return mInput; } audio_io_handle_t getInput(); /* obtains a buffer of "frameCount" frames. The buffer must be * filled entirely. If the track is stopped, obtainBuffer() returns Loading Loading @@ -318,7 +318,8 @@ private: int format, int channelCount, int frameCount, uint32_t flags); uint32_t flags, audio_io_handle_t input); sp<IAudioRecord> mAudioRecord; sp<IMemory> mCblkMemory; Loading @@ -345,8 +346,8 @@ private: bool mMarkerReached; uint32_t mNewPosition; uint32_t mUpdatePeriod; audio_io_handle_t mInput; uint32_t mFlags; uint32_t mChannels; }; }; // namespace android Loading
include/media/AudioSystem.h +3 −5 Original line number Diff line number Diff line Loading @@ -239,15 +239,11 @@ public: DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100, DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200, DEVICE_OUT_AUX_DIGITAL = 0x400, DEVICE_OUT_FM_HEADPHONE = 0x800, DEVICE_OUT_FM_SPEAKER = 0x1000, DEVICE_OUT_TTY = 0x2000, DEVICE_OUT_DEFAULT = 0x8000, DEVICE_OUT_ALL = (DEVICE_OUT_EARPIECE | DEVICE_OUT_SPEAKER | DEVICE_OUT_WIRED_HEADSET | DEVICE_OUT_WIRED_HEADPHONE | DEVICE_OUT_BLUETOOTH_SCO | DEVICE_OUT_BLUETOOTH_SCO_HEADSET | DEVICE_OUT_BLUETOOTH_SCO_CARKIT | DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | DEVICE_OUT_AUX_DIGITAL | DEVICE_OUT_FM_HEADPHONE | DEVICE_OUT_FM_SPEAKER | DEVICE_OUT_TTY | DEVICE_OUT_DEFAULT), DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | DEVICE_OUT_AUX_DIGITAL | DEVICE_OUT_DEFAULT), // input devices DEVICE_IN_COMMUNICATION = 0x10000, Loading Loading @@ -286,6 +282,7 @@ public: FORCE_BT_SCO, FORCE_BT_A2DP, FORCE_WIRED_ACCESSORY, FORCE_BT_DOCK, NUM_FORCE_CONFIG, FORCE_DEFAULT = FORCE_NONE }; Loading @@ -295,6 +292,7 @@ public: FOR_COMMUNICATION, FOR_MEDIA, FOR_RECORD, FOR_DOCK, NUM_FORCE_USE }; Loading
include/media/stagefright/MediaPlayerImpl.h +3 −1 Original line number Diff line number Diff line Loading @@ -112,7 +112,9 @@ private: MediaSource *makeShoutcastSource(const char *path); void displayOrDiscardFrame(MediaBuffer *buffer, int64_t pts_us); void displayOrDiscardFrame( MediaBuffer **lastBuffer, MediaBuffer *buffer, int64_t pts_us); void populateISurface(); void depopulateISurface(); void sendFrameToISurface(MediaBuffer *buffer); Loading
media/libmedia/AudioRecord.cpp +40 −33 Original line number Diff line number Diff line Loading @@ -46,7 +46,7 @@ namespace android { // --------------------------------------------------------------------------- AudioRecord::AudioRecord() : mStatus(NO_INIT), mInput(0) : mStatus(NO_INIT) { } Loading @@ -60,7 +60,7 @@ AudioRecord::AudioRecord( callback_t cbf, void* user, int notificationFrames) : mStatus(NO_INIT), mInput(0) : mStatus(NO_INIT) { mStatus = set(inputSource, sampleRate, format, channels, frameCount, flags, cbf, user, notificationFrames); Loading @@ -79,7 +79,6 @@ AudioRecord::~AudioRecord() } mAudioRecord.clear(); IPCThreadState::self()->flushCommands(); AudioSystem::releaseInput(mInput); } } Loading Loading @@ -123,10 +122,10 @@ status_t AudioRecord::set( } int channelCount = AudioSystem::popCount(channels); mInput = AudioSystem::getInput(inputSource, audio_io_handle_t input = AudioSystem::getInput(inputSource, sampleRate, format, channels, (AudioSystem::audio_in_acoustics)flags); if (mInput == 0) { LOGE("Could not get audio output for stream type %d", inputSource); if (input == 0) { LOGE("Could not get audio input for record source %d", inputSource); return BAD_VALUE; } Loading Loading @@ -168,7 +167,7 @@ status_t AudioRecord::set( // create the IAudioRecord status_t status = openRecord(sampleRate, format, channelCount, frameCount, flags); frameCount, flags, input); if (status != NO_ERROR) { return status; Loading @@ -187,6 +186,7 @@ status_t AudioRecord::set( // Update buffer size in case it has been limited by AudioFlinger during track creation mFrameCount = mCblk->frameCount; mChannelCount = (uint8_t)channelCount; mChannels = channels; mActive = 0; mCbf = cbf; mNotificationFrames = notificationFrames; Loading Loading @@ -265,13 +265,14 @@ status_t AudioRecord::start() } if (android_atomic_or(1, &mActive) == 0) { ret = AudioSystem::startInput(mInput); if (ret == NO_ERROR) { ret = mAudioRecord->start(); if (ret == DEAD_OBJECT) { LOGV("start() dead IAudioRecord: creating a new one"); ret = openRecord(mCblk->sampleRate, mFormat, mChannelCount, mFrameCount, mFlags); mFrameCount, mFlags, getInput()); if (ret == NO_ERROR) { ret = mAudioRecord->start(); } } if (ret == NO_ERROR) { mNewPosition = mCblk->user + mUpdatePeriod; Loading @@ -284,11 +285,9 @@ status_t AudioRecord::start() } } else { LOGV("start() failed"); AudioSystem::stopInput(mInput); android_atomic_and(~1, &mActive); } } } if (t != 0) { t->mLock.unlock(); Loading Loading @@ -318,7 +317,6 @@ status_t AudioRecord::stop() } else { setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_NORMAL); } AudioSystem::stopInput(mInput); } if (t != 0) { Loading Loading @@ -395,7 +393,8 @@ status_t AudioRecord::openRecord( int format, int channelCount, int frameCount, uint32_t flags) uint32_t flags, audio_io_handle_t input) { status_t status; const sp<IAudioFlinger>& audioFlinger = AudioSystem::get_audio_flinger(); Loading @@ -403,7 +402,7 @@ status_t AudioRecord::openRecord( return NO_INIT; } sp<IAudioRecord> record = audioFlinger->openRecord(getpid(), mInput, sp<IAudioRecord> record = audioFlinger->openRecord(getpid(), input, sampleRate, format, channelCount, frameCount, Loading @@ -425,7 +424,8 @@ status_t AudioRecord::openRecord( mCblk = static_cast<audio_track_cblk_t*>(cblk->pointer()); mCblk->buffers = (char*)mCblk + sizeof(audio_track_cblk_t); mCblk->out = 0; mCblk->bufferTimeoutMs = MAX_RUN_TIMEOUT_MS; mCblk->waitTimeMs = 0; return NO_ERROR; } Loading Loading @@ -466,10 +466,10 @@ status_t AudioRecord::obtainBuffer(Buffer* audioBuffer, int32_t waitCount) if (result == DEAD_OBJECT) { LOGW("obtainBuffer() dead IAudioRecord: creating a new one"); result = openRecord(cblk->sampleRate, mFormat, mChannelCount, mFrameCount, mFlags); mFrameCount, mFlags, getInput()); if (result == NO_ERROR) { cblk = mCblk; cblk->bufferTimeoutMs = MAX_RUN_TIMEOUT_MS; mAudioRecord->start(); } } cblk->lock.lock(); Loading Loading @@ -516,6 +516,14 @@ void AudioRecord::releaseBuffer(Buffer* audioBuffer) cblk->stepUser(audioBuffer->frameCount); } audio_io_handle_t AudioRecord::getInput() { return AudioSystem::getInput(mInputSource, mCblk->sampleRate, mFormat, mChannels, (AudioSystem::audio_in_acoustics)mFlags); } // ------------------------------------------------------------------------- ssize_t AudioRecord::read(void* buffer, size_t userSize) Loading @@ -531,7 +539,6 @@ ssize_t AudioRecord::read(void* buffer, size_t userSize) return BAD_VALUE; } LOGV("read size: %d", userSize); do { Loading
media/libmedia/AudioTrack.cpp +24 −17 Original line number Diff line number Diff line Loading @@ -97,7 +97,6 @@ AudioTrack::~AudioTrack() } mAudioTrack.clear(); IPCThreadState::self()->flushCommands(); AudioSystem::releaseOutput(getOutput()); } } Loading Loading @@ -318,15 +317,6 @@ void AudioTrack::start() } if (android_atomic_or(1, &mActive) == 0) { audio_io_handle_t output = AudioTrack::getOutput(); status_t status = mAudioTrack->start(); if (status == DEAD_OBJECT) { LOGV("start() dead IAudioTrack: creating a new one"); status = createTrack(mStreamType, mCblk->sampleRate, mFormat, mChannelCount, mFrameCount, mFlags, mSharedBuffer, output); } if (status == NO_ERROR) { AudioSystem::startOutput(output, (AudioSystem::stream_type)mStreamType); mNewPosition = mCblk->server + mUpdatePeriod; mCblk->bufferTimeoutMs = MAX_STARTUP_TIMEOUT_MS; mCblk->waitTimeMs = 0; Loading @@ -335,9 +325,27 @@ void AudioTrack::start() } else { setpriority(PRIO_PROCESS, 0, THREAD_PRIORITY_AUDIO_CLIENT); } } else { status_t status = mAudioTrack->start(); if (status == DEAD_OBJECT) { LOGV("start() dead IAudioTrack: creating a new one"); status = createTrack(mStreamType, mCblk->sampleRate, mFormat, mChannelCount, mFrameCount, mFlags, mSharedBuffer, getOutput()); if (status == NO_ERROR) { status = mAudioTrack->start(); if (status == NO_ERROR) { mNewPosition = mCblk->server + mUpdatePeriod; } } } if (status != NO_ERROR) { LOGV("start() failed"); android_atomic_and(~1, &mActive); if (t != 0) { t->requestExit(); } else { setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_NORMAL); } } } Loading Loading @@ -374,7 +382,6 @@ void AudioTrack::stop() } else { setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_NORMAL); } AudioSystem::stopOutput(getOutput(), (AudioSystem::stream_type)mStreamType); } if (t != 0) { Loading Loading @@ -409,9 +416,7 @@ void AudioTrack::pause() { LOGV("pause"); if (android_atomic_and(~1, &mActive) == 1) { mActive = 0; mAudioTrack->pause(); AudioSystem::stopOutput(getOutput(), (AudioSystem::stream_type)mStreamType); } } Loading Loading @@ -649,7 +654,8 @@ status_t AudioTrack::createTrack( } mCblk->volumeLR = (int32_t(int16_t(mVolume[LEFT] * 0x1000)) << 16) | int16_t(mVolume[RIGHT] * 0x1000); mCblk->bufferTimeoutMs = MAX_STARTUP_TIMEOUT_MS; mCblk->waitTimeMs = 0; return NO_ERROR; } Loading Loading @@ -700,6 +706,7 @@ status_t AudioTrack::obtainBuffer(Buffer* audioBuffer, int32_t waitCount) if (result == NO_ERROR) { cblk = mCblk; cblk->bufferTimeoutMs = MAX_RUN_TIMEOUT_MS; mAudioTrack->start(); } } cblk->lock.lock(); Loading