diff options
Diffstat (limited to 'media/libmedia')
-rw-r--r-- | media/libmedia/Android.mk | 8 | ||||
-rw-r--r-- | media/libmedia/AudioEffect.cpp | 8 | ||||
-rw-r--r-- | media/libmedia/AudioRecord.cpp | 64 | ||||
-rw-r--r-- | media/libmedia/AudioSystem.cpp | 120 | ||||
-rw-r--r-- | media/libmedia/AudioTrack.cpp | 213 | ||||
-rw-r--r-- | media/libmedia/IAudioFlinger.cpp | 82 | ||||
-rw-r--r-- | media/libmedia/IAudioFlingerClient.cpp | 2 | ||||
-rw-r--r-- | media/libmedia/IAudioPolicyService.cpp | 69 | ||||
-rw-r--r-- | media/libmedia/IAudioTrack.cpp | 24 | ||||
-rw-r--r-- | media/libmedia/IMediaDeathNotifier.cpp | 2 | ||||
-rw-r--r-- | media/libmedia/IMediaPlayer.cpp | 6 | ||||
-rw-r--r-- | media/libmedia/IMediaPlayerService.cpp | 16 | ||||
-rw-r--r-- | media/libmedia/IOMX.cpp | 7 | ||||
-rw-r--r-- | media/libmedia/JetPlayer.cpp | 19 | ||||
-rw-r--r-- | media/libmedia/MediaScannerClient.cpp | 1 | ||||
-rw-r--r-- | media/libmedia/ToneGenerator.cpp | 39 | ||||
-rw-r--r-- | media/libmedia/Visualizer.cpp | 17 | ||||
-rw-r--r-- | media/libmedia/autodetect.cpp | 2 | ||||
-rw-r--r-- | media/libmedia/fixedfft.cpp | 162 | ||||
-rw-r--r-- | media/libmedia/mediametadataretriever.cpp | 2 | ||||
-rw-r--r-- | media/libmedia/mediaplayer.cpp | 8 |
21 files changed, 352 insertions, 519 deletions
diff --git a/media/libmedia/Android.mk b/media/libmedia/Android.mk index 7af4a87..23670df 100644 --- a/media/libmedia/Android.mk +++ b/media/libmedia/Android.mk @@ -43,13 +43,12 @@ LOCAL_SRC_FILES:= \ IEffectClient.cpp \ AudioEffect.cpp \ Visualizer.cpp \ - MemoryLeakTrackUtil.cpp \ - fixedfft.cpp.arm + MemoryLeakTrackUtil.cpp LOCAL_SHARED_LIBRARIES := \ libui libcutils libutils libbinder libsonivox libicuuc libexpat \ libcamera_client libstagefright_foundation \ - libgui libdl + libgui libdl libaudioutils LOCAL_WHOLE_STATIC_LIBRARY := libmedia_helper @@ -61,6 +60,7 @@ LOCAL_C_INCLUDES := \ $(TOP)/frameworks/base/include/media/stagefright/openmax \ external/icu4c/common \ external/expat/lib \ - system/media/audio_effects/include + system/media/audio_effects/include \ + system/media/audio_utils/include include $(BUILD_SHARED_LIBRARY) diff --git a/media/libmedia/AudioEffect.cpp b/media/libmedia/AudioEffect.cpp index 6639d06..a242846 100644 --- a/media/libmedia/AudioEffect.cpp +++ b/media/libmedia/AudioEffect.cpp @@ -342,7 +342,7 @@ void AudioEffect::binderDied() { ALOGW("IEffect died"); mStatus = NO_INIT; - if (mCbf) { + if (mCbf != NULL) { status_t status = DEAD_OBJECT; mCbf(EVENT_ERROR, mUserData, &status); } @@ -363,7 +363,7 @@ void AudioEffect::controlStatusChanged(bool controlGranted) mStatus = ALREADY_EXISTS; } } - if (mCbf) { + if (mCbf != NULL) { mCbf(EVENT_CONTROL_STATUS_CHANGED, mUserData, &controlGranted); } } @@ -373,7 +373,7 @@ void AudioEffect::enableStatusChanged(bool enabled) ALOGV("enableStatusChanged %p enabled %d mCbf %p", this, enabled, mCbf); if (mStatus == ALREADY_EXISTS) { mEnabled = enabled; - if (mCbf) { + if (mCbf != NULL) { mCbf(EVENT_ENABLE_STATUS_CHANGED, mUserData, &enabled); } } @@ -389,7 +389,7 @@ void AudioEffect::commandExecuted(uint32_t cmdCode, return; } - if (mCbf && cmdCode == EFFECT_CMD_SET_PARAM) { + if (mCbf != NULL && cmdCode == EFFECT_CMD_SET_PARAM) { effect_param_t *cmd = (effect_param_t *)cmdData; cmd->status = *(int32_t *)replyData; mCbf(EVENT_PARAMETER_CHANGED, mUserData, cmd); diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp index 34a5eb7..c96bc76 100644 --- a/media/libmedia/AudioRecord.cpp +++ b/media/libmedia/AudioRecord.cpp @@ -39,9 +39,7 @@ #include <system/audio.h> #include <cutils/bitops.h> - -#define LIKELY( exp ) (__builtin_expect( (exp) != 0, true )) -#define UNLIKELY( exp ) (__builtin_expect( (exp) != 0, false )) +#include <cutils/compiler.h> namespace android { // --------------------------------------------------------------------------- @@ -50,7 +48,7 @@ namespace android { status_t AudioRecord::getMinFrameCount( int* frameCount, uint32_t sampleRate, - int format, + audio_format_t format, int channelCount) { size_t size = 0; @@ -80,14 +78,15 @@ status_t AudioRecord::getMinFrameCount( // --------------------------------------------------------------------------- AudioRecord::AudioRecord() - : mStatus(NO_INIT), mSessionId(0) + : mStatus(NO_INIT), mSessionId(0), + mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(ANDROID_TGROUP_DEFAULT) { } AudioRecord::AudioRecord( - int inputSource, + audio_source_t inputSource, uint32_t sampleRate, - int format, + audio_format_t format, uint32_t channelMask, int frameCount, uint32_t flags, @@ -95,7 +94,8 @@ AudioRecord::AudioRecord( void* user, int notificationFrames, int sessionId) - : mStatus(NO_INIT), mSessionId(0) + : mStatus(NO_INIT), mSessionId(0), + mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(ANDROID_TGROUP_DEFAULT) { mStatus = set(inputSource, sampleRate, format, channelMask, frameCount, flags, cbf, user, notificationFrames, sessionId); @@ -119,9 +119,9 @@ AudioRecord::~AudioRecord() } status_t AudioRecord::set( - int inputSource, + audio_source_t inputSource, uint32_t sampleRate, - int format, + audio_format_t format, uint32_t channelMask, int frameCount, uint32_t flags, @@ -148,7 +148,7 @@ status_t AudioRecord::set( sampleRate = DEFAULT_SAMPLE_RATE; } // these below should probably come from the audioFlinger too... - if (format == 0) { + if (format == AUDIO_FORMAT_DEFAULT) { format = AUDIO_FORMAT_PCM_16_BIT; } // validate parameters @@ -206,11 +206,8 @@ status_t AudioRecord::set( return status; } - if (cbf != 0) { + if (cbf != NULL) { mClientRecordThread = new ClientRecordThread(*this, threadCanCallJava); - if (mClientRecordThread == 0) { - return NO_INIT; - } } mStatus = NO_ERROR; @@ -231,7 +228,7 @@ status_t AudioRecord::set( mMarkerReached = false; mNewPosition = 0; mUpdatePeriod = 0; - mInputSource = (uint8_t)inputSource; + mInputSource = inputSource; mFlags = flags; mInput = input; AudioSystem::acquireAudioSessionId(mSessionId); @@ -251,7 +248,7 @@ uint32_t AudioRecord::latency() const return mLatency; } -int AudioRecord::format() const +audio_format_t AudioRecord::format() const { return mFormat; } @@ -266,7 +263,7 @@ uint32_t AudioRecord::frameCount() const return mFrameCount; } -int AudioRecord::frameSize() const +size_t AudioRecord::frameSize() const { if (audio_is_linear_pcm(mFormat)) { return channelCount()*audio_bytes_per_sample(mFormat); @@ -275,9 +272,9 @@ int AudioRecord::frameSize() const } } -int AudioRecord::inputSource() const +audio_source_t AudioRecord::inputSource() const { - return (int)mInputSource; + return mInputSource; } // ------------------------------------------------------------------------- @@ -326,9 +323,11 @@ status_t AudioRecord::start() cblk->bufferTimeoutMs = MAX_RUN_TIMEOUT_MS; cblk->waitTimeMs = 0; if (t != 0) { - t->run("ClientRecordThread", ANDROID_PRIORITY_AUDIO); + t->run("ClientRecordThread", ANDROID_PRIORITY_AUDIO); } else { - setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_AUDIO); + mPreviousPriority = getpriority(PRIO_PROCESS, 0); + mPreviousSchedulingGroup = androidGetThreadSchedulingGroup(0); + androidSetThreadPriority(0, ANDROID_PRIORITY_AUDIO); } } else { mActive = 0; @@ -363,7 +362,8 @@ status_t AudioRecord::stop() if (t != 0) { t->requestExit(); } else { - setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_NORMAL); + setpriority(PRIO_PROCESS, 0, mPreviousPriority); + androidSetThreadSchedulingGroup(0, mPreviousSchedulingGroup); } } @@ -387,7 +387,7 @@ uint32_t AudioRecord::getSampleRate() status_t AudioRecord::setMarkerPosition(uint32_t marker) { - if (mCbf == 0) return INVALID_OPERATION; + if (mCbf == NULL) return INVALID_OPERATION; mMarkerPosition = marker; mMarkerReached = false; @@ -397,7 +397,7 @@ status_t AudioRecord::setMarkerPosition(uint32_t marker) status_t AudioRecord::getMarkerPosition(uint32_t *marker) { - if (marker == 0) return BAD_VALUE; + if (marker == NULL) return BAD_VALUE; *marker = mMarkerPosition; @@ -406,7 +406,7 @@ status_t AudioRecord::getMarkerPosition(uint32_t *marker) status_t AudioRecord::setPositionUpdatePeriod(uint32_t updatePeriod) { - if (mCbf == 0) return INVALID_OPERATION; + if (mCbf == NULL) return INVALID_OPERATION; uint32_t curPosition; getPosition(&curPosition); @@ -418,7 +418,7 @@ status_t AudioRecord::setPositionUpdatePeriod(uint32_t updatePeriod) status_t AudioRecord::getPositionUpdatePeriod(uint32_t *updatePeriod) { - if (updatePeriod == 0) return BAD_VALUE; + if (updatePeriod == NULL) return BAD_VALUE; *updatePeriod = mUpdatePeriod; @@ -427,7 +427,7 @@ status_t AudioRecord::getPositionUpdatePeriod(uint32_t *updatePeriod) status_t AudioRecord::getPosition(uint32_t *position) { - if (position == 0) return BAD_VALUE; + if (position == NULL) return BAD_VALUE; AutoMutex lock(mLock); *position = mCblk->user; @@ -448,7 +448,7 @@ unsigned int AudioRecord::getInputFramesLost() // must be called with mLock held status_t AudioRecord::openRecord_l( uint32_t sampleRate, - uint32_t format, + audio_format_t format, uint32_t channelMask, int frameCount, uint32_t flags, @@ -508,11 +508,11 @@ status_t AudioRecord::obtainBuffer(Buffer* audioBuffer, int32_t waitCount) goto start_loop_here; while (framesReady == 0) { active = mActive; - if (UNLIKELY(!active)) { + if (CC_UNLIKELY(!active)) { cblk->lock.unlock(); return NO_MORE_BUFFERS; } - if (UNLIKELY(!waitCount)) { + if (CC_UNLIKELY(!waitCount)) { cblk->lock.unlock(); return WOULD_BLOCK; } @@ -529,7 +529,7 @@ status_t AudioRecord::obtainBuffer(Buffer* audioBuffer, int32_t waitCount) if (cblk->flags & CBLK_INVALID_MSK) { goto create_new_record; } - if (__builtin_expect(result!=NO_ERROR, false)) { + if (CC_UNLIKELY(result != NO_ERROR)) { cblk->waitTimeMs += waitTimeMs; if (cblk->waitTimeMs >= cblk->bufferTimeoutMs) { ALOGW( "obtainBuffer timed out (is the CPU pegged?) " diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp index f7f129c..110a294 100644 --- a/media/libmedia/AudioSystem.cpp +++ b/media/libmedia/AudioSystem.cpp @@ -35,12 +35,13 @@ sp<IAudioFlinger> AudioSystem::gAudioFlinger; sp<AudioSystem::AudioFlingerClient> AudioSystem::gAudioFlingerClient; audio_error_callback AudioSystem::gAudioErrorCallback = NULL; // Cached values -DefaultKeyedVector<int, audio_io_handle_t> AudioSystem::gStreamOutputMap(0); + +DefaultKeyedVector<audio_stream_type_t, audio_io_handle_t> AudioSystem::gStreamOutputMap(0); DefaultKeyedVector<audio_io_handle_t, AudioSystem::OutputDescriptor *> AudioSystem::gOutputs(0); -// Cached values for recording queries +// Cached values for recording queries, all protected by gLock uint32_t AudioSystem::gPrevInSamplingRate = 16000; -int AudioSystem::gPrevInFormat = AUDIO_FORMAT_PCM_16_BIT; +audio_format_t AudioSystem::gPrevInFormat = AUDIO_FORMAT_PCM_16_BIT; int AudioSystem::gPrevInChannelCount = 1; size_t AudioSystem::gInBuffSize = 0; @@ -49,7 +50,7 @@ size_t AudioSystem::gInBuffSize = 0; const sp<IAudioFlinger>& AudioSystem::get_audio_flinger() { Mutex::Autolock _l(gLock); - if (gAudioFlinger.get() == 0) { + if (gAudioFlinger == 0) { sp<IServiceManager> sm = defaultServiceManager(); sp<IBinder> binder; do { @@ -120,7 +121,7 @@ status_t AudioSystem::getMasterMute(bool* mute) return NO_ERROR; } -status_t AudioSystem::setStreamVolume(int stream, float value, int output) +status_t AudioSystem::setStreamVolume(audio_stream_type_t stream, float value, int output) { if (uint32_t(stream) >= AUDIO_STREAM_CNT) return BAD_VALUE; const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); @@ -129,7 +130,7 @@ status_t AudioSystem::setStreamVolume(int stream, float value, int output) return NO_ERROR; } -status_t AudioSystem::setStreamMute(int stream, bool mute) +status_t AudioSystem::setStreamMute(audio_stream_type_t stream, bool mute) { if (uint32_t(stream) >= AUDIO_STREAM_CNT) return BAD_VALUE; const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); @@ -138,7 +139,7 @@ status_t AudioSystem::setStreamMute(int stream, bool mute) return NO_ERROR; } -status_t AudioSystem::getStreamVolume(int stream, float* volume, int output) +status_t AudioSystem::getStreamVolume(audio_stream_type_t stream, float* volume, int output) { if (uint32_t(stream) >= AUDIO_STREAM_CNT) return BAD_VALUE; const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); @@ -147,7 +148,7 @@ status_t AudioSystem::getStreamVolume(int stream, float* volume, int output) return NO_ERROR; } -status_t AudioSystem::getStreamMute(int stream, bool* mute) +status_t AudioSystem::getStreamMute(audio_stream_type_t stream, bool* mute) { if (uint32_t(stream) >= AUDIO_STREAM_CNT) return BAD_VALUE; const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); @@ -156,9 +157,9 @@ status_t AudioSystem::getStreamMute(int stream, bool* mute) return NO_ERROR; } -status_t AudioSystem::setMode(int mode) +status_t AudioSystem::setMode(audio_mode_t mode) { - if (mode >= AUDIO_MODE_CNT) return BAD_VALUE; + if (uint32_t(mode) >= AUDIO_MODE_CNT) return BAD_VALUE; const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); if (af == 0) return PERMISSION_DENIED; return af->setMode(mode); @@ -203,7 +204,12 @@ int AudioSystem::logToLinear(float volume) return volume ? 100 - int(dBConvertInverse * log(volume) + 0.5) : 0; } -status_t AudioSystem::getOutputSamplingRate(int* samplingRate, int streamType) +// DEPRECATED +status_t AudioSystem::getOutputSamplingRate(int* samplingRate, int streamType) { + return getOutputSamplingRate(samplingRate, (audio_stream_type_t)streamType); +} + +status_t AudioSystem::getOutputSamplingRate(int* samplingRate, audio_stream_type_t streamType) { OutputDescriptor *outputDesc; audio_io_handle_t output; @@ -212,14 +218,14 @@ status_t AudioSystem::getOutputSamplingRate(int* samplingRate, int streamType) streamType = AUDIO_STREAM_MUSIC; } - output = getOutput((audio_stream_type_t)streamType); + output = getOutput(streamType); if (output == 0) { return PERMISSION_DENIED; } gLock.lock(); outputDesc = AudioSystem::gOutputs.valueFor(output); - if (outputDesc == 0) { + if (outputDesc == NULL) { ALOGV("getOutputSamplingRate() no output descriptor for output %d in gOutputs", output); gLock.unlock(); const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); @@ -236,7 +242,12 @@ status_t AudioSystem::getOutputSamplingRate(int* samplingRate, int streamType) return NO_ERROR; } -status_t AudioSystem::getOutputFrameCount(int* frameCount, int streamType) +// DEPRECATED +status_t AudioSystem::getOutputFrameCount(int* frameCount, int streamType) { + return getOutputFrameCount(frameCount, (audio_stream_type_t)streamType); +} + +status_t AudioSystem::getOutputFrameCount(int* frameCount, audio_stream_type_t streamType) { OutputDescriptor *outputDesc; audio_io_handle_t output; @@ -245,14 +256,14 @@ status_t AudioSystem::getOutputFrameCount(int* frameCount, int streamType) streamType = AUDIO_STREAM_MUSIC; } - output = getOutput((audio_stream_type_t)streamType); + output = getOutput(streamType); if (output == 0) { return PERMISSION_DENIED; } gLock.lock(); outputDesc = AudioSystem::gOutputs.valueFor(output); - if (outputDesc == 0) { + if (outputDesc == NULL) { gLock.unlock(); const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); if (af == 0) return PERMISSION_DENIED; @@ -267,7 +278,7 @@ status_t AudioSystem::getOutputFrameCount(int* frameCount, int streamType) return NO_ERROR; } -status_t AudioSystem::getOutputLatency(uint32_t* latency, int streamType) +status_t AudioSystem::getOutputLatency(uint32_t* latency, audio_stream_type_t streamType) { OutputDescriptor *outputDesc; audio_io_handle_t output; @@ -276,14 +287,14 @@ status_t AudioSystem::getOutputLatency(uint32_t* latency, int streamType) streamType = AUDIO_STREAM_MUSIC; } - output = getOutput((audio_stream_type_t)streamType); + output = getOutput(streamType); if (output == 0) { return PERMISSION_DENIED; } gLock.lock(); outputDesc = AudioSystem::gOutputs.valueFor(output); - if (outputDesc == 0) { + if (outputDesc == NULL) { gLock.unlock(); const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); if (af == 0) return PERMISSION_DENIED; @@ -298,25 +309,30 @@ status_t AudioSystem::getOutputLatency(uint32_t* latency, int streamType) return NO_ERROR; } -status_t AudioSystem::getInputBufferSize(uint32_t sampleRate, int format, int channelCount, +status_t AudioSystem::getInputBufferSize(uint32_t sampleRate, audio_format_t format, int channelCount, size_t* buffSize) { + gLock.lock(); // Do we have a stale gInBufferSize or are we requesting the input buffer size for new values - if ((gInBuffSize == 0) || (sampleRate != gPrevInSamplingRate) || (format != gPrevInFormat) + size_t inBuffSize = gInBuffSize; + if ((inBuffSize == 0) || (sampleRate != gPrevInSamplingRate) || (format != gPrevInFormat) || (channelCount != gPrevInChannelCount)) { + gLock.unlock(); + const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); + if (af == 0) { + return PERMISSION_DENIED; + } + inBuffSize = af->getInputBufferSize(sampleRate, format, channelCount); + gLock.lock(); // save the request params gPrevInSamplingRate = sampleRate; gPrevInFormat = format; gPrevInChannelCount = channelCount; - gInBuffSize = 0; - const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); - if (af == 0) { - return PERMISSION_DENIED; - } - gInBuffSize = af->getInputBufferSize(sampleRate, format, channelCount); + gInBuffSize = inBuffSize; } - *buffSize = gInBuffSize; + gLock.unlock(); + *buffSize = inBuffSize; return NO_ERROR; } @@ -328,7 +344,7 @@ status_t AudioSystem::setVoiceVolume(float value) return af->setVoiceVolume(value); } -status_t AudioSystem::getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames, int stream) +status_t AudioSystem::getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames, audio_stream_type_t stream) { const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); if (af == 0) return PERMISSION_DENIED; @@ -337,7 +353,7 @@ status_t AudioSystem::getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames stream = AUDIO_STREAM_MUSIC; } - return af->getRenderPosition(halFrames, dspFrames, getOutput((audio_stream_type_t)stream)); + return af->getRenderPosition(halFrames, dspFrames, getOutput(stream)); } unsigned int AudioSystem::getInputFramesLost(audio_io_handle_t ioHandle) { @@ -389,7 +405,7 @@ void AudioSystem::AudioFlingerClient::binderDied(const wp<IBinder>& who) { void AudioSystem::AudioFlingerClient::ioConfigChanged(int event, int ioHandle, void *param2) { ALOGV("ioConfigChanged() event %d", event); OutputDescriptor *desc; - uint32_t stream; + audio_stream_type_t stream; if (ioHandle == 0) return; @@ -397,8 +413,8 @@ void AudioSystem::AudioFlingerClient::ioConfigChanged(int event, int ioHandle, v switch (event) { case STREAM_CONFIG_CHANGED: - if (param2 == 0) break; - stream = *(uint32_t *)param2; + if (param2 == NULL) break; + stream = *(audio_stream_type_t *)param2; ALOGV("ioConfigChanged() STREAM_CONFIG_CHANGED stream %d, output %d", stream, ioHandle); if (gStreamOutputMap.indexOfKey(stream) >= 0) { gStreamOutputMap.replaceValueFor(stream, ioHandle); @@ -409,7 +425,7 @@ void AudioSystem::AudioFlingerClient::ioConfigChanged(int event, int ioHandle, v ALOGV("ioConfigChanged() opening already existing output! %d", ioHandle); break; } - if (param2 == 0) break; + if (param2 == NULL) break; desc = (OutputDescriptor *)param2; OutputDescriptor *outputDesc = new OutputDescriptor(*desc); @@ -438,7 +454,7 @@ void AudioSystem::AudioFlingerClient::ioConfigChanged(int event, int ioHandle, v ALOGW("ioConfigChanged() modifying unknow output! %d", ioHandle); break; } - if (param2 == 0) break; + if (param2 == NULL) break; desc = (OutputDescriptor *)param2; ALOGV("ioConfigChanged() new config for output %d samplingRate %d, format %d channels %d frameCount %d latency %d", @@ -462,7 +478,7 @@ void AudioSystem::setErrorCallback(audio_error_callback cb) { gAudioErrorCallback = cb; } -bool AudioSystem::routedToA2dpOutput(int streamType) { +bool AudioSystem::routedToA2dpOutput(audio_stream_type_t streamType) { switch(streamType) { case AUDIO_STREAM_MUSIC: case AUDIO_STREAM_VOICE_CALL: @@ -484,7 +500,7 @@ sp<AudioSystem::AudioPolicyServiceClient> AudioSystem::gAudioPolicyServiceClient const sp<IAudioPolicyService>& AudioSystem::get_audio_policy_service() { gLock.lock(); - if (gAudioPolicyService.get() == 0) { + if (gAudioPolicyService == 0) { sp<IServiceManager> sm = defaultServiceManager(); sp<IBinder> binder; do { @@ -531,21 +547,15 @@ audio_policy_dev_state_t AudioSystem::getDeviceConnectionState(audio_devices_t d return aps->getDeviceConnectionState(device, device_address); } -status_t AudioSystem::setPhoneState(int state) +status_t AudioSystem::setPhoneState(audio_mode_t state) { + if (uint32_t(state) >= AUDIO_MODE_CNT) return BAD_VALUE; const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; return aps->setPhoneState(state); } -status_t AudioSystem::setRingerMode(uint32_t mode, uint32_t mask) -{ - const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); - if (aps == 0) return PERMISSION_DENIED; - return aps->setRingerMode(mode, mask); -} - status_t AudioSystem::setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); @@ -563,7 +573,7 @@ audio_policy_forced_cfg_t AudioSystem::getForceUse(audio_policy_force_use_t usag audio_io_handle_t AudioSystem::getOutput(audio_stream_type_t stream, uint32_t samplingRate, - uint32_t format, + audio_format_t format, uint32_t channels, audio_policy_output_flags_t flags) { @@ -621,9 +631,9 @@ void AudioSystem::releaseOutput(audio_io_handle_t output) aps->releaseOutput(output); } -audio_io_handle_t AudioSystem::getInput(int inputSource, +audio_io_handle_t AudioSystem::getInput(audio_source_t inputSource, uint32_t samplingRate, - uint32_t format, + audio_format_t format, uint32_t channels, audio_in_acoustics_t acoustics, int sessionId) @@ -663,18 +673,22 @@ status_t AudioSystem::initStreamVolume(audio_stream_type_t stream, return aps->initStreamVolume(stream, indexMin, indexMax); } -status_t AudioSystem::setStreamVolumeIndex(audio_stream_type_t stream, int index) +status_t AudioSystem::setStreamVolumeIndex(audio_stream_type_t stream, + int index, + audio_devices_t device) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; - return aps->setStreamVolumeIndex(stream, index); + return aps->setStreamVolumeIndex(stream, index, device); } -status_t AudioSystem::getStreamVolumeIndex(audio_stream_type_t stream, int *index) +status_t AudioSystem::getStreamVolumeIndex(audio_stream_type_t stream, + int *index, + audio_devices_t device) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; - return aps->getStreamVolumeIndex(stream, index); + return aps->getStreamVolumeIndex(stream, index, device); } uint32_t AudioSystem::getStrategyForStream(audio_stream_type_t stream) @@ -723,7 +737,7 @@ status_t AudioSystem::setEffectEnabled(int id, bool enabled) return aps->setEffectEnabled(id, enabled); } -status_t AudioSystem::isStreamActive(int stream, bool* state, uint32_t inPastMs) +status_t AudioSystem::isStreamActive(audio_stream_type_t stream, bool* state, uint32_t inPastMs) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return PERMISSION_DENIED; diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp index d51cd69..8c33f41 100644 --- a/media/libmedia/AudioTrack.cpp +++ b/media/libmedia/AudioTrack.cpp @@ -1,4 +1,4 @@ -/* //device/extlibs/pv/android/AudioTrack.cpp +/* frameworks/base/media/libmedia/AudioTrack.cpp ** ** Copyright 2007, The Android Open Source Project ** @@ -38,12 +38,12 @@ #include <utils/Atomic.h> #include <cutils/bitops.h> +#include <cutils/compiler.h> #include <system/audio.h> #include <system/audio_policy.h> -#define LIKELY( exp ) (__builtin_expect( (exp) != 0, true )) -#define UNLIKELY( exp ) (__builtin_expect( (exp) != 0, false )) +#include <audio_utils/primitives.h> namespace android { // --------------------------------------------------------------------------- @@ -51,7 +51,7 @@ namespace android { // static status_t AudioTrack::getMinFrameCount( int* frameCount, - int streamType, + audio_stream_type_t streamType, uint32_t sampleRate) { int afSampleRate; @@ -79,14 +79,15 @@ status_t AudioTrack::getMinFrameCount( // --------------------------------------------------------------------------- AudioTrack::AudioTrack() - : mStatus(NO_INIT) + : mStatus(NO_INIT), + mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(ANDROID_TGROUP_DEFAULT) { } AudioTrack::AudioTrack( - int streamType, + audio_stream_type_t streamType, uint32_t sampleRate, - int format, + audio_format_t format, int channelMask, int frameCount, uint32_t flags, @@ -94,7 +95,8 @@ AudioTrack::AudioTrack( void* user, int notificationFrames, int sessionId) - : mStatus(NO_INIT) + : mStatus(NO_INIT), + mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(ANDROID_TGROUP_DEFAULT) { mStatus = set(streamType, sampleRate, format, channelMask, frameCount, flags, cbf, user, notificationFrames, @@ -106,13 +108,33 @@ AudioTrack::AudioTrack( uint32_t sampleRate, int format, int channelMask, + int frameCount, + uint32_t flags, + callback_t cbf, + void* user, + int notificationFrames, + int sessionId) + : mStatus(NO_INIT), + mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(ANDROID_TGROUP_DEFAULT) +{ + mStatus = set((audio_stream_type_t)streamType, sampleRate, (audio_format_t)format, channelMask, + frameCount, flags, cbf, user, notificationFrames, + 0, false, sessionId); +} + +AudioTrack::AudioTrack( + audio_stream_type_t streamType, + uint32_t sampleRate, + audio_format_t format, + int channelMask, const sp<IMemory>& sharedBuffer, uint32_t flags, callback_t cbf, void* user, int notificationFrames, int sessionId) - : mStatus(NO_INIT) + : mStatus(NO_INIT), + mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(ANDROID_TGROUP_DEFAULT) { mStatus = set(streamType, sampleRate, format, channelMask, 0, flags, cbf, user, notificationFrames, @@ -139,9 +161,9 @@ AudioTrack::~AudioTrack() } status_t AudioTrack::set( - int streamType, + audio_stream_type_t streamType, uint32_t sampleRate, - int format, + audio_format_t format, int channelMask, int frameCount, uint32_t flags, @@ -178,7 +200,7 @@ status_t AudioTrack::set( sampleRate = afSampleRate; } // these below should probably come from the audioFlinger too... - if (format == 0) { + if (format == AUDIO_FORMAT_DEFAULT) { format = AUDIO_FORMAT_PCM_16_BIT; } if (channelMask == 0) { @@ -203,8 +225,8 @@ status_t AudioTrack::set( uint32_t channelCount = popcount(channelMask); audio_io_handle_t output = AudioSystem::getOutput( - (audio_stream_type_t)streamType, - sampleRate,format, channelMask, + streamType, + sampleRate, format, channelMask, (audio_policy_output_flags_t)flags); if (output == 0) { @@ -214,7 +236,7 @@ status_t AudioTrack::set( mVolume[LEFT] = 1.0f; mVolume[RIGHT] = 1.0f; - mSendLevel = 0; + mSendLevel = 0.0f; mFrameCount = frameCount; mNotificationFramesReq = notificationFrames; mSessionId = sessionId; @@ -223,7 +245,7 @@ status_t AudioTrack::set( // create the IAudioTrack status_t status = createTrack_l(streamType, sampleRate, - (uint32_t)format, + format, (uint32_t)channelMask, frameCount, flags, @@ -235,23 +257,19 @@ status_t AudioTrack::set( return status; } - if (cbf != 0) { + if (cbf != NULL) { mAudioTrackThread = new AudioTrackThread(*this, threadCanCallJava); - if (mAudioTrackThread == 0) { - ALOGE("Could not create callback thread"); - return NO_INIT; - } } mStatus = NO_ERROR; mStreamType = streamType; - mFormat = (uint32_t)format; + mFormat = format; mChannelMask = (uint32_t)channelMask; mChannelCount = channelCount; mSharedBuffer = sharedBuffer; mMuted = false; - mActive = 0; + mActive = false; mCbf = cbf; mUserData = user; mLoopCount = 0; @@ -278,12 +296,12 @@ uint32_t AudioTrack::latency() const return mLatency; } -int AudioTrack::streamType() const +audio_stream_type_t AudioTrack::streamType() const { return mStreamType; } -int AudioTrack::format() const +audio_format_t AudioTrack::format() const { return mFormat; } @@ -298,7 +316,7 @@ uint32_t AudioTrack::frameCount() const return mCblk->frameCount; } -int AudioTrack::frameSize() const +size_t AudioTrack::frameSize() const { if (audio_is_linear_pcm(mFormat)) { return channelCount()*audio_bytes_per_sample(mFormat); @@ -337,18 +355,20 @@ void AudioTrack::start() sp <IMemory> iMem = mCblkMemory; audio_track_cblk_t* cblk = mCblk; - if (mActive == 0) { + if (!mActive) { mFlushed = false; - mActive = 1; + mActive = true; mNewPosition = cblk->server + mUpdatePeriod; cblk->lock.lock(); cblk->bufferTimeoutMs = MAX_STARTUP_TIMEOUT_MS; cblk->waitTimeMs = 0; android_atomic_and(~CBLK_DISABLED_ON, &cblk->flags); if (t != 0) { - t->run("AudioTrackThread", ANDROID_PRIORITY_AUDIO); + t->run("AudioTrackThread", ANDROID_PRIORITY_AUDIO); } else { - setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_AUDIO); + mPreviousPriority = getpriority(PRIO_PROCESS, 0); + mPreviousSchedulingGroup = androidGetThreadSchedulingGroup(0); + androidSetThreadPriority(0, ANDROID_PRIORITY_AUDIO); } ALOGV("start %p before lock cblk %p", this, mCblk); @@ -366,11 +386,12 @@ void AudioTrack::start() cblk->lock.unlock(); if (status != NO_ERROR) { ALOGV("start() failed"); - mActive = 0; + mActive = false; if (t != 0) { t->requestExit(); } else { - setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_NORMAL); + setpriority(PRIO_PROCESS, 0, mPreviousPriority); + androidSetThreadSchedulingGroup(0, mPreviousSchedulingGroup); } } } @@ -390,8 +411,8 @@ void AudioTrack::stop() } AutoMutex lock(mLock); - if (mActive == 1) { - mActive = 0; + if (mActive) { + mActive = false; mCblk->cv.signal(); mAudioTrack->stop(); // Cancel loops (If we are in the middle of a loop, playback @@ -408,7 +429,8 @@ void AudioTrack::stop() if (t != 0) { t->requestExit(); } else { - setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_NORMAL); + setpriority(PRIO_PROCESS, 0, mPreviousPriority); + androidSetThreadSchedulingGroup(0, mPreviousSchedulingGroup); } } @@ -419,7 +441,8 @@ void AudioTrack::stop() bool AudioTrack::stopped() const { - return !mActive; + AutoMutex lock(mLock); + return stopped_l(); } void AudioTrack::flush() @@ -451,8 +474,8 @@ void AudioTrack::pause() { ALOGV("pause"); AutoMutex lock(mLock); - if (mActive == 1) { - mActive = 0; + if (mActive) { + mActive = false; mAudioTrack->pause(); } } @@ -470,7 +493,7 @@ bool AudioTrack::muted() const status_t AudioTrack::setVolume(float left, float right) { - if (left > 1.0f || right > 1.0f) { + if (left < 0.0f || left > 1.0f || right < 0.0f || right > 1.0f) { return BAD_VALUE; } @@ -478,8 +501,7 @@ status_t AudioTrack::setVolume(float left, float right) mVolume[LEFT] = left; mVolume[RIGHT] = right; - // write must be atomic - mCblk->volumeLR = (uint32_t(uint16_t(right * 0x1000)) << 16) | uint16_t(left * 0x1000); + mCblk->setVolumeLR((uint32_t(uint16_t(right * 0x1000)) << 16) | uint16_t(left * 0x1000)); return NO_ERROR; } @@ -497,14 +519,14 @@ void AudioTrack::getVolume(float* left, float* right) status_t AudioTrack::setAuxEffectSendLevel(float level) { ALOGV("setAuxEffectSendLevel(%f)", level); - if (level > 1.0f) { + if (level < 0.0f || level > 1.0f) { return BAD_VALUE; } AutoMutex lock(mLock); mSendLevel = level; - mCblk->sendLevel = uint16_t(level * 0x1000); + mCblk->setSendLevel(level); return NO_ERROR; } @@ -582,13 +604,13 @@ status_t AudioTrack::setLoop_l(uint32_t loopStart, uint32_t loopEnd, int loopCou status_t AudioTrack::getLoop(uint32_t *loopStart, uint32_t *loopEnd, int *loopCount) { AutoMutex lock(mLock); - if (loopStart != 0) { + if (loopStart != NULL) { *loopStart = mCblk->loopStart; } - if (loopEnd != 0) { + if (loopEnd != NULL) { *loopEnd = mCblk->loopEnd; } - if (loopCount != 0) { + if (loopCount != NULL) { if (mCblk->loopCount < 0) { *loopCount = -1; } else { @@ -601,7 +623,7 @@ status_t AudioTrack::getLoop(uint32_t *loopStart, uint32_t *loopEnd, int *loopCo status_t AudioTrack::setMarkerPosition(uint32_t marker) { - if (mCbf == 0) return INVALID_OPERATION; + if (mCbf == NULL) return INVALID_OPERATION; mMarkerPosition = marker; mMarkerReached = false; @@ -611,7 +633,7 @@ status_t AudioTrack::setMarkerPosition(uint32_t marker) status_t AudioTrack::getMarkerPosition(uint32_t *marker) { - if (marker == 0) return BAD_VALUE; + if (marker == NULL) return BAD_VALUE; *marker = mMarkerPosition; @@ -620,7 +642,7 @@ status_t AudioTrack::getMarkerPosition(uint32_t *marker) status_t AudioTrack::setPositionUpdatePeriod(uint32_t updatePeriod) { - if (mCbf == 0) return INVALID_OPERATION; + if (mCbf == NULL) return INVALID_OPERATION; uint32_t curPosition; getPosition(&curPosition); @@ -632,7 +654,7 @@ status_t AudioTrack::setPositionUpdatePeriod(uint32_t updatePeriod) status_t AudioTrack::getPositionUpdatePeriod(uint32_t *updatePeriod) { - if (updatePeriod == 0) return BAD_VALUE; + if (updatePeriod == NULL) return BAD_VALUE; *updatePeriod = mUpdatePeriod; @@ -642,9 +664,10 @@ status_t AudioTrack::getPositionUpdatePeriod(uint32_t *updatePeriod) status_t AudioTrack::setPosition(uint32_t position) { AutoMutex lock(mLock); - Mutex::Autolock _l(mCblk->lock); - if (!stopped()) return INVALID_OPERATION; + if (!stopped_l()) return INVALID_OPERATION; + + Mutex::Autolock _l(mCblk->lock); if (position > mCblk->user) return BAD_VALUE; @@ -656,7 +679,7 @@ status_t AudioTrack::setPosition(uint32_t position) status_t AudioTrack::getPosition(uint32_t *position) { - if (position == 0) return BAD_VALUE; + if (position == NULL) return BAD_VALUE; AutoMutex lock(mLock); *position = mFlushed ? 0 : mCblk->server; @@ -667,7 +690,7 @@ status_t AudioTrack::reload() { AutoMutex lock(mLock); - if (!stopped()) return INVALID_OPERATION; + if (!stopped_l()) return INVALID_OPERATION; flush_l(); @@ -685,7 +708,7 @@ audio_io_handle_t AudioTrack::getOutput() // must be called with mLock held audio_io_handle_t AudioTrack::getOutput_l() { - return AudioSystem::getOutput((audio_stream_type_t)mStreamType, + return AudioSystem::getOutput(mStreamType, mCblk->sampleRate, mFormat, mChannelMask, (audio_policy_output_flags_t)mFlags); } @@ -708,9 +731,9 @@ status_t AudioTrack::attachAuxEffect(int effectId) // must be called with mLock held status_t AudioTrack::createTrack_l( - int streamType, + audio_stream_type_t streamType, uint32_t sampleRate, - uint32_t format, + audio_format_t format, uint32_t channelMask, int frameCount, uint32_t flags, @@ -802,9 +825,7 @@ status_t AudioTrack::createTrack_l( ALOGE("Could not get control block"); return NO_INIT; } - mAudioTrack.clear(); mAudioTrack = track; - mCblkMemory.clear(); mCblkMemory = cblk; mCblk = static_cast<audio_track_cblk_t*>(cblk->pointer()); android_atomic_or(CBLK_DIRECTION_OUT, &mCblk->flags); @@ -816,8 +837,8 @@ status_t AudioTrack::createTrack_l( mCblk->stepUser(mCblk->frameCount); } - mCblk->volumeLR = (uint32_t(uint16_t(mVolume[RIGHT] * 0x1000)) << 16) | uint16_t(mVolume[LEFT] * 0x1000); - mCblk->sendLevel = uint16_t(mSendLevel * 0x1000); + mCblk->setVolumeLR((uint32_t(uint16_t(mVolume[RIGHT] * 0x1000)) << 16) | uint16_t(mVolume[LEFT] * 0x1000)); + mCblk->setSendLevel(mSendLevel); mAudioTrack->attachAuxEffect(mAuxEffectId); mCblk->bufferTimeoutMs = MAX_STARTUP_TIMEOUT_MS; mCblk->waitTimeMs = 0; @@ -829,7 +850,7 @@ status_t AudioTrack::createTrack_l( status_t AudioTrack::obtainBuffer(Buffer* audioBuffer, int32_t waitCount) { AutoMutex lock(mLock); - int active; + bool active; status_t result = NO_ERROR; audio_track_cblk_t* cblk = mCblk; uint32_t framesReq = audioBuffer->frameCount; @@ -851,12 +872,12 @@ status_t AudioTrack::obtainBuffer(Buffer* audioBuffer, int32_t waitCount) goto start_loop_here; while (framesAvail == 0) { active = mActive; - if (UNLIKELY(!active)) { + if (CC_UNLIKELY(!active)) { ALOGV("Not active and NO_MORE_BUFFERS"); cblk->lock.unlock(); return NO_MORE_BUFFERS; } - if (UNLIKELY(!waitCount)) { + if (CC_UNLIKELY(!waitCount)) { cblk->lock.unlock(); return WOULD_BLOCK; } @@ -865,7 +886,7 @@ status_t AudioTrack::obtainBuffer(Buffer* audioBuffer, int32_t waitCount) result = cblk->cv.waitRelative(cblk->lock, milliseconds(waitTimeMs)); cblk->lock.unlock(); mLock.lock(); - if (mActive == 0) { + if (!mActive) { return status_t(STOPPED); } cblk->lock.lock(); @@ -874,7 +895,7 @@ status_t AudioTrack::obtainBuffer(Buffer* audioBuffer, int32_t waitCount) if (cblk->flags & CBLK_INVALID_MSK) { goto create_new_track; } - if (__builtin_expect(result!=NO_ERROR, false)) { + if (CC_UNLIKELY(result != NO_ERROR)) { cblk->waitTimeMs += waitTimeMs; if (cblk->waitTimeMs >= cblk->bufferTimeoutMs) { // timing out when a loop has been set and we have already written upto loop end @@ -978,7 +999,7 @@ ssize_t AudioTrack::write(const void* buffer, size_t userSize) ssize_t written = 0; const int8_t *src = (const int8_t *)buffer; Buffer audioBuffer; - size_t frameSz = (size_t)frameSize(); + size_t frameSz = frameSize(); do { audioBuffer.frameCount = userSize/frameSz; @@ -998,12 +1019,7 @@ ssize_t AudioTrack::write(const void* buffer, size_t userSize) if (mFormat == AUDIO_FORMAT_PCM_8_BIT && !(mFlags & AUDIO_POLICY_OUTPUT_FLAG_DIRECT)) { // Divide capacity by 2 to take expansion into account toWrite = audioBuffer.size>>1; - // 8 to 16 bit conversion - int count = toWrite; - int16_t *dst = (int16_t *)(audioBuffer.i8); - while(count--) { - *dst++ = (int16_t)(*src++^0x80) << 8; - } + memcpy_to_i16_from_u8(audioBuffer.i16, (const uint8_t *) src, toWrite); } else { toWrite = audioBuffer.size; memcpy(audioBuffer.i8, src, toWrite); @@ -1032,10 +1048,11 @@ bool AudioTrack::processAudioBuffer(const sp<AudioTrackThread>& thread) sp <IAudioTrack> audioTrack = mAudioTrack; sp <IMemory> iMem = mCblkMemory; audio_track_cblk_t* cblk = mCblk; + bool active = mActive; mLock.unlock(); // Manage underrun callback - if (mActive && (cblk->framesAvailable() == cblk->frameCount)) { + if (active && (cblk->framesAvailable() == cblk->frameCount)) { ALOGV("Underrun user: %x, server: %x, flags %04x", cblk->user, cblk->server, cblk->flags); if (!(android_atomic_or(CBLK_UNDERRUN_ON, &cblk->flags) & CBLK_UNDERRUN_MSK)) { mCbf(EVENT_UNDERRUN, mUserData, 0); @@ -1123,19 +1140,14 @@ bool AudioTrack::processAudioBuffer(const sp<AudioTrackThread>& thread) if (writtenSize > reqSize) writtenSize = reqSize; if (mFormat == AUDIO_FORMAT_PCM_8_BIT && !(mFlags & AUDIO_POLICY_OUTPUT_FLAG_DIRECT)) { - // 8 to 16 bit conversion - const int8_t *src = audioBuffer.i8 + writtenSize-1; - int count = writtenSize; - int16_t *dst = audioBuffer.i16 + writtenSize-1; - while(count--) { - *dst-- = (int16_t)(*src--^0x80) << 8; - } + // 8 to 16 bit conversion, note that source and destination are the same address + memcpy_to_i16_from_u8(audioBuffer.i16, (const uint8_t *) audioBuffer.i8, writtenSize); writtenSize <<= 1; } audioBuffer.size = writtenSize; // NOTE: mCblk->frameSize is not equal to AudioTrack::frameSize() for - // 8 bit PCM data: in this case, mCblk->frameSize is based on a sampel size of + // 8 bit PCM data: in this case, mCblk->frameSize is based on a sample size of // 16 bit. audioBuffer.frameCount = writtenSize/mCblk->frameSize; @@ -1307,15 +1319,15 @@ void AudioTrack::AudioTrackThread::onFirstRef() audio_track_cblk_t::audio_track_cblk_t() : lock(Mutex::SHARED), cv(Condition::SHARED), user(0), server(0), - userBase(0), serverBase(0), buffers(0), frameCount(0), - loopStart(UINT_MAX), loopEnd(UINT_MAX), loopCount(0), volumeLR(0), - sendLevel(0), flags(0) + userBase(0), serverBase(0), buffers(NULL), frameCount(0), + loopStart(UINT_MAX), loopEnd(UINT_MAX), loopCount(0), mVolumeLR(0x10001000), + mSendLevel(0), flags(0) { } uint32_t audio_track_cblk_t::stepUser(uint32_t frameCount) { - uint32_t u = this->user; + uint32_t u = user; u += frameCount; // Ensure that user is never ahead of server for AudioRecord @@ -1324,16 +1336,16 @@ uint32_t audio_track_cblk_t::stepUser(uint32_t frameCount) if (bufferTimeoutMs == MAX_STARTUP_TIMEOUT_MS-1) { bufferTimeoutMs = MAX_RUN_TIMEOUT_MS; } - } else if (u > this->server) { - ALOGW("stepServer occured after track reset"); - u = this->server; + } else if (u > server) { + ALOGW("stepServer occurred after track reset"); + u = server; } if (u >= userBase + this->frameCount) { userBase += this->frameCount; } - this->user = u; + user = u; // Clear flow control error condition as new data has been written/read to/from buffer. if (flags & CBLK_UNDERRUN_MSK) { @@ -1350,7 +1362,7 @@ bool audio_track_cblk_t::stepServer(uint32_t frameCount) return false; } - uint32_t s = this->server; + uint32_t s = server; s += frameCount; if (flags & CBLK_DIRECTION_MSK) { @@ -1363,9 +1375,9 @@ bool audio_track_cblk_t::stepServer(uint32_t frameCount) // while the mixer is processing a block: in this case, // stepServer() is called After the flush() has reset u & s and // we have s > u - if (s > this->user) { - ALOGW("stepServer occured after track reset"); - s = this->user; + if (s > user) { + ALOGW("stepServer occurred after track reset"); + s = user; } } @@ -1381,7 +1393,7 @@ bool audio_track_cblk_t::stepServer(uint32_t frameCount) serverBase += this->frameCount; } - this->server = s; + server = s; if (!(flags & CBLK_INVALID_MSK)) { cv.signal(); @@ -1392,7 +1404,7 @@ bool audio_track_cblk_t::stepServer(uint32_t frameCount) void* audio_track_cblk_t::buffer(uint32_t offset) const { - return (int8_t *)this->buffers + (offset - userBase) * this->frameSize; + return (int8_t *)buffers + (offset - userBase) * frameSize; } uint32_t audio_track_cblk_t::framesAvailable() @@ -1403,8 +1415,8 @@ uint32_t audio_track_cblk_t::framesAvailable() uint32_t audio_track_cblk_t::framesAvailable_l() { - uint32_t u = this->user; - uint32_t s = this->server; + uint32_t u = user; + uint32_t s = server; if (flags & CBLK_DIRECTION_MSK) { uint32_t limit = (s < loopStart) ? s : loopStart; @@ -1416,8 +1428,8 @@ uint32_t audio_track_cblk_t::framesAvailable_l() uint32_t audio_track_cblk_t::framesReady() { - uint32_t u = this->user; - uint32_t s = this->server; + uint32_t u = user; + uint32_t s = server; if (flags & CBLK_DIRECTION_MSK) { if (u < loopEnd) { @@ -1462,4 +1474,3 @@ bool audio_track_cblk_t::tryLock() // ------------------------------------------------------------------------- }; // namespace android - diff --git a/media/libmedia/IAudioFlinger.cpp b/media/libmedia/IAudioFlinger.cpp index abd491f..fc5520f 100644 --- a/media/libmedia/IAudioFlinger.cpp +++ b/media/libmedia/IAudioFlinger.cpp @@ -82,9 +82,9 @@ public: virtual sp<IAudioTrack> createTrack( pid_t pid, - int streamType, + audio_stream_type_t streamType, uint32_t sampleRate, - uint32_t format, + audio_format_t format, uint32_t channelMask, int frameCount, uint32_t flags, @@ -97,7 +97,7 @@ public: sp<IAudioTrack> track; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); data.writeInt32(pid); - data.writeInt32(streamType); + data.writeInt32((int32_t) streamType); data.writeInt32(sampleRate); data.writeInt32(format); data.writeInt32(channelMask); @@ -131,7 +131,7 @@ public: pid_t pid, int input, uint32_t sampleRate, - uint32_t format, + audio_format_t format, uint32_t channelMask, int frameCount, uint32_t flags, @@ -188,13 +188,13 @@ public: return reply.readInt32(); } - virtual uint32_t format(int output) const + virtual audio_format_t format(int output) const { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); data.writeInt32(output); remote()->transact(FORMAT, data, &reply); - return reply.readInt32(); + return (audio_format_t) reply.readInt32(); } virtual size_t frameCount(int output) const @@ -249,47 +249,47 @@ public: return reply.readInt32(); } - virtual status_t setStreamVolume(int stream, float value, int output) + virtual status_t setStreamVolume(audio_stream_type_t stream, float value, int output) { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); - data.writeInt32(stream); + data.writeInt32((int32_t) stream); data.writeFloat(value); data.writeInt32(output); remote()->transact(SET_STREAM_VOLUME, data, &reply); return reply.readInt32(); } - virtual status_t setStreamMute(int stream, bool muted) + virtual status_t setStreamMute(audio_stream_type_t stream, bool muted) { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); - data.writeInt32(stream); + data.writeInt32((int32_t) stream); data.writeInt32(muted); remote()->transact(SET_STREAM_MUTE, data, &reply); return reply.readInt32(); } - virtual float streamVolume(int stream, int output) const + virtual float streamVolume(audio_stream_type_t stream, int output) const { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); - data.writeInt32(stream); + data.writeInt32((int32_t) stream); data.writeInt32(output); remote()->transact(STREAM_VOLUME, data, &reply); return reply.readFloat(); } - virtual bool streamMute(int stream) const + virtual bool streamMute(audio_stream_type_t stream) const { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); - data.writeInt32(stream); + data.writeInt32((int32_t) stream); remote()->transact(STREAM_MUTE, data, &reply); return reply.readInt32(); } - virtual status_t setMode(int mode) + virtual status_t setMode(audio_mode_t mode) { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); @@ -343,7 +343,7 @@ public: remote()->transact(REGISTER_CLIENT, data, &reply); } - virtual size_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount) + virtual size_t getInputBufferSize(uint32_t sampleRate, audio_format_t format, int channelCount) { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); @@ -356,7 +356,7 @@ public: virtual int openOutput(uint32_t *pDevices, uint32_t *pSamplingRate, - uint32_t *pFormat, + audio_format_t *pFormat, uint32_t *pChannels, uint32_t *pLatencyMs, uint32_t flags) @@ -364,7 +364,7 @@ public: Parcel data, reply; uint32_t devices = pDevices ? *pDevices : 0; uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0; - uint32_t format = pFormat ? *pFormat : 0; + audio_format_t format = pFormat ? *pFormat : AUDIO_FORMAT_DEFAULT; uint32_t channels = pChannels ? *pChannels : 0; uint32_t latency = pLatencyMs ? *pLatencyMs : 0; @@ -382,7 +382,7 @@ public: if (pDevices) *pDevices = devices; samplingRate = reply.readInt32(); if (pSamplingRate) *pSamplingRate = samplingRate; - format = reply.readInt32(); + format = (audio_format_t) reply.readInt32(); if (pFormat) *pFormat = format; channels = reply.readInt32(); if (pChannels) *pChannels = channels; @@ -430,14 +430,14 @@ public: virtual int openInput(uint32_t *pDevices, uint32_t *pSamplingRate, - uint32_t *pFormat, + audio_format_t *pFormat, uint32_t *pChannels, - uint32_t acoustics) + audio_in_acoustics_t acoustics) { Parcel data, reply; uint32_t devices = pDevices ? *pDevices : 0; uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0; - uint32_t format = pFormat ? *pFormat : 0; + audio_format_t format = pFormat ? *pFormat : AUDIO_FORMAT_DEFAULT; uint32_t channels = pChannels ? *pChannels : 0; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); @@ -445,14 +445,14 @@ public: data.writeInt32(samplingRate); data.writeInt32(format); data.writeInt32(channels); - data.writeInt32(acoustics); + data.writeInt32((int32_t) acoustics); remote()->transact(OPEN_INPUT, data, &reply); int input = reply.readInt32(); devices = reply.readInt32(); if (pDevices) *pDevices = devices; samplingRate = reply.readInt32(); if (pSamplingRate) *pSamplingRate = samplingRate; - format = reply.readInt32(); + format = (audio_format_t) reply.readInt32(); if (pFormat) *pFormat = format; channels = reply.readInt32(); if (pChannels) *pChannels = channels; @@ -468,11 +468,11 @@ public: return reply.readInt32(); } - virtual status_t setStreamOutput(uint32_t stream, int output) + virtual status_t setStreamOutput(audio_stream_type_t stream, int output) { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); - data.writeInt32(stream); + data.writeInt32((int32_t) stream); data.writeInt32(output); remote()->transact(SET_STREAM_OUTPUT, data, &reply); return reply.readInt32(); @@ -640,7 +640,7 @@ public: *id = tmp; } tmp = reply.readInt32(); - if (enabled) { + if (enabled != NULL) { *enabled = tmp; } effect = interface_cast<IEffect>(reply.readStrongBinder()); @@ -678,7 +678,7 @@ status_t BnAudioFlinger::onTransact( pid_t pid = data.readInt32(); int streamType = data.readInt32(); uint32_t sampleRate = data.readInt32(); - int format = data.readInt32(); + audio_format_t format = (audio_format_t) data.readInt32(); int channelCount = data.readInt32(); size_t bufferCount = data.readInt32(); uint32_t flags = data.readInt32(); @@ -687,7 +687,7 @@ status_t BnAudioFlinger::onTransact( int sessionId = data.readInt32(); status_t status; sp<IAudioTrack> track = createTrack(pid, - streamType, sampleRate, format, + (audio_stream_type_t) streamType, sampleRate, format, channelCount, bufferCount, flags, buffer, output, &sessionId, &status); reply->writeInt32(sessionId); reply->writeInt32(status); @@ -699,7 +699,7 @@ status_t BnAudioFlinger::onTransact( pid_t pid = data.readInt32(); int input = data.readInt32(); uint32_t sampleRate = data.readInt32(); - int format = data.readInt32(); + audio_format_t format = (audio_format_t) data.readInt32(); int channelCount = data.readInt32(); size_t bufferCount = data.readInt32(); uint32_t flags = data.readInt32(); @@ -762,31 +762,31 @@ status_t BnAudioFlinger::onTransact( int stream = data.readInt32(); float volume = data.readFloat(); int output = data.readInt32(); - reply->writeInt32( setStreamVolume(stream, volume, output) ); + reply->writeInt32( setStreamVolume((audio_stream_type_t) stream, volume, output) ); return NO_ERROR; } break; case SET_STREAM_MUTE: { CHECK_INTERFACE(IAudioFlinger, data, reply); int stream = data.readInt32(); - reply->writeInt32( setStreamMute(stream, data.readInt32()) ); + reply->writeInt32( setStreamMute((audio_stream_type_t) stream, data.readInt32()) ); return NO_ERROR; } break; case STREAM_VOLUME: { CHECK_INTERFACE(IAudioFlinger, data, reply); int stream = data.readInt32(); int output = data.readInt32(); - reply->writeFloat( streamVolume(stream, output) ); + reply->writeFloat( streamVolume((audio_stream_type_t) stream, output) ); return NO_ERROR; } break; case STREAM_MUTE: { CHECK_INTERFACE(IAudioFlinger, data, reply); int stream = data.readInt32(); - reply->writeInt32( streamMute(stream) ); + reply->writeInt32( streamMute((audio_stream_type_t) stream) ); return NO_ERROR; } break; case SET_MODE: { CHECK_INTERFACE(IAudioFlinger, data, reply); - int mode = data.readInt32(); + audio_mode_t mode = (audio_mode_t) data.readInt32(); reply->writeInt32( setMode(mode) ); return NO_ERROR; } break; @@ -825,7 +825,7 @@ status_t BnAudioFlinger::onTransact( case GET_INPUTBUFFERSIZE: { CHECK_INTERFACE(IAudioFlinger, data, reply); uint32_t sampleRate = data.readInt32(); - int format = data.readInt32(); + audio_format_t format = (audio_format_t) data.readInt32(); int channelCount = data.readInt32(); reply->writeInt32( getInputBufferSize(sampleRate, format, channelCount) ); return NO_ERROR; @@ -834,7 +834,7 @@ status_t BnAudioFlinger::onTransact( CHECK_INTERFACE(IAudioFlinger, data, reply); uint32_t devices = data.readInt32(); uint32_t samplingRate = data.readInt32(); - uint32_t format = data.readInt32(); + audio_format_t format = (audio_format_t) data.readInt32(); uint32_t channels = data.readInt32(); uint32_t latency = data.readInt32(); uint32_t flags = data.readInt32(); @@ -879,15 +879,15 @@ status_t BnAudioFlinger::onTransact( CHECK_INTERFACE(IAudioFlinger, data, reply); uint32_t devices = data.readInt32(); uint32_t samplingRate = data.readInt32(); - uint32_t format = data.readInt32(); + audio_format_t format = (audio_format_t) data.readInt32(); uint32_t channels = data.readInt32(); - uint32_t acoutics = data.readInt32(); + audio_in_acoustics_t acoustics = (audio_in_acoustics_t) data.readInt32(); int input = openInput(&devices, &samplingRate, &format, &channels, - acoutics); + acoustics); reply->writeInt32(input); reply->writeInt32(devices); reply->writeInt32(samplingRate); @@ -904,7 +904,7 @@ status_t BnAudioFlinger::onTransact( CHECK_INTERFACE(IAudioFlinger, data, reply); uint32_t stream = data.readInt32(); int output = data.readInt32(); - reply->writeInt32(setStreamOutput(stream, output)); + reply->writeInt32(setStreamOutput((audio_stream_type_t) stream, output)); return NO_ERROR; } break; case SET_VOICE_VOLUME: { diff --git a/media/libmedia/IAudioFlingerClient.cpp b/media/libmedia/IAudioFlingerClient.cpp index 5a3f250..9458bc0 100644 --- a/media/libmedia/IAudioFlingerClient.cpp +++ b/media/libmedia/IAudioFlingerClient.cpp @@ -73,7 +73,7 @@ status_t BnAudioFlingerClient::onTransact( CHECK_INTERFACE(IAudioFlingerClient, data, reply); int event = data.readInt32(); int ioHandle = data.readInt32(); - void *param2 = 0; + void *param2 = NULL; AudioSystem::OutputDescriptor desc; uint32_t stream; if (event == AudioSystem::STREAM_CONFIG_CHANGED) { diff --git a/media/libmedia/IAudioPolicyService.cpp b/media/libmedia/IAudioPolicyService.cpp index 50b4855..99385aa4 100644 --- a/media/libmedia/IAudioPolicyService.cpp +++ b/media/libmedia/IAudioPolicyService.cpp @@ -33,7 +33,7 @@ enum { SET_DEVICE_CONNECTION_STATE = IBinder::FIRST_CALL_TRANSACTION, GET_DEVICE_CONNECTION_STATE, SET_PHONE_STATE, - SET_RINGER_MODE, + SET_RINGER_MODE, // reserved, no longer used SET_FORCE_USE, GET_FORCE_USE, GET_OUTPUT, @@ -91,7 +91,7 @@ public: return static_cast <audio_policy_dev_state_t>(reply.readInt32()); } - virtual status_t setPhoneState(int state) + virtual status_t setPhoneState(audio_mode_t state) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); @@ -100,16 +100,6 @@ public: return static_cast <status_t> (reply.readInt32()); } - virtual status_t setRingerMode(uint32_t mode, uint32_t mask) - { - Parcel data, reply; - data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); - data.writeInt32(mode); - data.writeInt32(mask); - remote()->transact(SET_RINGER_MODE, data, &reply); - return static_cast <status_t> (reply.readInt32()); - } - virtual status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config) { Parcel data, reply; @@ -132,7 +122,7 @@ public: virtual audio_io_handle_t getOutput( audio_stream_type_t stream, uint32_t samplingRate, - uint32_t format, + audio_format_t format, uint32_t channels, audio_policy_output_flags_t flags) { @@ -154,7 +144,7 @@ public: Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeInt32(output); - data.writeInt32(stream); + data.writeInt32((int32_t) stream); data.writeInt32(session); remote()->transact(START_OUTPUT, data, &reply); return static_cast <status_t> (reply.readInt32()); @@ -167,7 +157,7 @@ public: Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeInt32(output); - data.writeInt32(stream); + data.writeInt32((int32_t) stream); data.writeInt32(session); remote()->transact(STOP_OUTPUT, data, &reply); return static_cast <status_t> (reply.readInt32()); @@ -182,16 +172,16 @@ public: } virtual audio_io_handle_t getInput( - int inputSource, + audio_source_t inputSource, uint32_t samplingRate, - uint32_t format, + audio_format_t format, uint32_t channels, audio_in_acoustics_t acoustics, int audioSession) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); - data.writeInt32(inputSource); + data.writeInt32((int32_t) inputSource); data.writeInt32(samplingRate); data.writeInt32(static_cast <uint32_t>(format)); data.writeInt32(channels); @@ -240,21 +230,28 @@ public: return static_cast <status_t> (reply.readInt32()); } - virtual status_t setStreamVolumeIndex(audio_stream_type_t stream, int index) + virtual status_t setStreamVolumeIndex(audio_stream_type_t stream, + int index, + audio_devices_t device) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeInt32(static_cast <uint32_t>(stream)); data.writeInt32(index); + data.writeInt32(static_cast <uint32_t>(device)); remote()->transact(SET_STREAM_VOLUME, data, &reply); return static_cast <status_t> (reply.readInt32()); } - virtual status_t getStreamVolumeIndex(audio_stream_type_t stream, int *index) + virtual status_t getStreamVolumeIndex(audio_stream_type_t stream, + int *index, + audio_devices_t device) { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); data.writeInt32(static_cast <uint32_t>(stream)); + data.writeInt32(static_cast <uint32_t>(device)); + remote()->transact(GET_STREAM_VOLUME, data, &reply); int lIndex = reply.readInt32(); if (index) *index = lIndex; @@ -324,11 +321,11 @@ public: return static_cast <status_t> (reply.readInt32()); } - virtual bool isStreamActive(int stream, uint32_t inPastMs) const + virtual bool isStreamActive(audio_stream_type_t stream, uint32_t inPastMs) const { Parcel data, reply; data.writeInterfaceToken(IAudioPolicyService::getInterfaceDescriptor()); - data.writeInt32(stream); + data.writeInt32((int32_t) stream); data.writeInt32(inPastMs); remote()->transact(IS_STREAM_ACTIVE, data, &reply); return reply.readInt32(); @@ -394,15 +391,7 @@ status_t BnAudioPolicyService::onTransact( case SET_PHONE_STATE: { CHECK_INTERFACE(IAudioPolicyService, data, reply); - reply->writeInt32(static_cast <uint32_t>(setPhoneState(data.readInt32()))); - return NO_ERROR; - } break; - - case SET_RINGER_MODE: { - CHECK_INTERFACE(IAudioPolicyService, data, reply); - uint32_t mode = data.readInt32(); - uint32_t mask = data.readInt32(); - reply->writeInt32(static_cast <uint32_t>(setRingerMode(mode, mask))); + reply->writeInt32(static_cast <uint32_t>(setPhoneState((audio_mode_t) data.readInt32()))); return NO_ERROR; } break; @@ -427,7 +416,7 @@ status_t BnAudioPolicyService::onTransact( audio_stream_type_t stream = static_cast <audio_stream_type_t>(data.readInt32()); uint32_t samplingRate = data.readInt32(); - uint32_t format = data.readInt32(); + audio_format_t format = (audio_format_t) data.readInt32(); uint32_t channels = data.readInt32(); audio_policy_output_flags_t flags = static_cast <audio_policy_output_flags_t>(data.readInt32()); @@ -472,9 +461,9 @@ status_t BnAudioPolicyService::onTransact( case GET_INPUT: { CHECK_INTERFACE(IAudioPolicyService, data, reply); - int inputSource = data.readInt32(); + audio_source_t inputSource = (audio_source_t) data.readInt32(); uint32_t samplingRate = data.readInt32(); - uint32_t format = data.readInt32(); + audio_format_t format = (audio_format_t) data.readInt32(); uint32_t channels = data.readInt32(); audio_in_acoustics_t acoustics = static_cast <audio_in_acoustics_t>(data.readInt32()); @@ -525,7 +514,10 @@ status_t BnAudioPolicyService::onTransact( audio_stream_type_t stream = static_cast <audio_stream_type_t>(data.readInt32()); int index = data.readInt32(); - reply->writeInt32(static_cast <uint32_t>(setStreamVolumeIndex(stream, index))); + audio_devices_t device = static_cast <audio_devices_t>(data.readInt32()); + reply->writeInt32(static_cast <uint32_t>(setStreamVolumeIndex(stream, + index, + device))); return NO_ERROR; } break; @@ -533,8 +525,9 @@ status_t BnAudioPolicyService::onTransact( CHECK_INTERFACE(IAudioPolicyService, data, reply); audio_stream_type_t stream = static_cast <audio_stream_type_t>(data.readInt32()); + audio_devices_t device = static_cast <audio_devices_t>(data.readInt32()); int index; - status_t status = getStreamVolumeIndex(stream, &index); + status_t status = getStreamVolumeIndex(stream, &index, device); reply->writeInt32(index); reply->writeInt32(static_cast <uint32_t>(status)); return NO_ERROR; @@ -598,9 +591,9 @@ status_t BnAudioPolicyService::onTransact( case IS_STREAM_ACTIVE: { CHECK_INTERFACE(IAudioPolicyService, data, reply); - int stream = data.readInt32(); + audio_stream_type_t stream = (audio_stream_type_t) data.readInt32(); uint32_t inPastMs = (uint32_t)data.readInt32(); - reply->writeInt32( isStreamActive(stream, inPastMs) ); + reply->writeInt32( isStreamActive((audio_stream_type_t) stream, inPastMs) ); return NO_ERROR; } break; diff --git a/media/libmedia/IAudioTrack.cpp b/media/libmedia/IAudioTrack.cpp index 0b372f3..e618619 100644 --- a/media/libmedia/IAudioTrack.cpp +++ b/media/libmedia/IAudioTrack.cpp @@ -46,6 +46,18 @@ public: { } + virtual sp<IMemory> getCblk() const + { + Parcel data, reply; + sp<IMemory> cblk; + data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor()); + status_t status = remote()->transact(GET_CBLK, data, &reply); + if (status == NO_ERROR) { + cblk = interface_cast<IMemory>(reply.readStrongBinder()); + } + return cblk; + } + virtual status_t start() { Parcel data, reply; @@ -88,18 +100,6 @@ public: remote()->transact(PAUSE, data, &reply); } - virtual sp<IMemory> getCblk() const - { - Parcel data, reply; - sp<IMemory> cblk; - data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor()); - status_t status = remote()->transact(GET_CBLK, data, &reply); - if (status == NO_ERROR) { - cblk = interface_cast<IMemory>(reply.readStrongBinder()); - } - return cblk; - } - virtual status_t attachAuxEffect(int effectId) { Parcel data, reply; diff --git a/media/libmedia/IMediaDeathNotifier.cpp b/media/libmedia/IMediaDeathNotifier.cpp index 8525482..aeb35a5 100644 --- a/media/libmedia/IMediaDeathNotifier.cpp +++ b/media/libmedia/IMediaDeathNotifier.cpp @@ -36,7 +36,7 @@ IMediaDeathNotifier::getMediaPlayerService() { ALOGV("getMediaPlayerService"); Mutex::Autolock _l(sServiceLock); - if (sMediaPlayerService.get() == 0) { + if (sMediaPlayerService == 0) { sp<IServiceManager> sm = defaultServiceManager(); sp<IBinder> binder; do { diff --git a/media/libmedia/IMediaPlayer.cpp b/media/libmedia/IMediaPlayer.cpp index 9c1e6b7..64cc919 100644 --- a/media/libmedia/IMediaPlayer.cpp +++ b/media/libmedia/IMediaPlayer.cpp @@ -198,11 +198,11 @@ public: return reply.readInt32(); } - status_t setAudioStreamType(int type) + status_t setAudioStreamType(audio_stream_type_t stream) { Parcel data, reply; data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); - data.writeInt32(type); + data.writeInt32((int32_t) stream); remote()->transact(SET_AUDIO_STREAM_TYPE, data, &reply); return reply.readInt32(); } @@ -397,7 +397,7 @@ status_t BnMediaPlayer::onTransact( } break; case SET_AUDIO_STREAM_TYPE: { CHECK_INTERFACE(IMediaPlayer, data, reply); - reply->writeInt32(setAudioStreamType(data.readInt32())); + reply->writeInt32(setAudioStreamType((audio_stream_type_t) data.readInt32())); return NO_ERROR; } break; case SET_LOOPING: { diff --git a/media/libmedia/IMediaPlayerService.cpp b/media/libmedia/IMediaPlayerService.cpp index 8e4dd04..f5b5cbd 100644 --- a/media/libmedia/IMediaPlayerService.cpp +++ b/media/libmedia/IMediaPlayerService.cpp @@ -78,7 +78,7 @@ public: return interface_cast<IMediaRecorder>(reply.readStrongBinder()); } - virtual sp<IMemory> decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, int* pFormat) + virtual sp<IMemory> decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, audio_format_t* pFormat) { Parcel data, reply; data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); @@ -86,11 +86,11 @@ public: remote()->transact(DECODE_URL, data, &reply); *pSampleRate = uint32_t(reply.readInt32()); *pNumChannels = reply.readInt32(); - *pFormat = reply.readInt32(); + *pFormat = (audio_format_t) reply.readInt32(); return interface_cast<IMemory>(reply.readStrongBinder()); } - virtual sp<IMemory> decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, int* pFormat) + virtual sp<IMemory> decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, audio_format_t* pFormat) { Parcel data, reply; data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); @@ -100,7 +100,7 @@ public: remote()->transact(DECODE_FD, data, &reply); *pSampleRate = uint32_t(reply.readInt32()); *pNumChannels = reply.readInt32(); - *pFormat = reply.readInt32(); + *pFormat = (audio_format_t) reply.readInt32(); return interface_cast<IMemory>(reply.readStrongBinder()); } @@ -148,11 +148,11 @@ status_t BnMediaPlayerService::onTransact( const char* url = data.readCString(); uint32_t sampleRate; int numChannels; - int format; + audio_format_t format; sp<IMemory> player = decode(url, &sampleRate, &numChannels, &format); reply->writeInt32(sampleRate); reply->writeInt32(numChannels); - reply->writeInt32(format); + reply->writeInt32((int32_t) format); reply->writeStrongBinder(player->asBinder()); return NO_ERROR; } break; @@ -163,11 +163,11 @@ status_t BnMediaPlayerService::onTransact( int64_t length = data.readInt64(); uint32_t sampleRate; int numChannels; - int format; + audio_format_t format; sp<IMemory> player = decode(fd, offset, length, &sampleRate, &numChannels, &format); reply->writeInt32(sampleRate); reply->writeInt32(numChannels); - reply->writeInt32(format); + reply->writeInt32((int32_t) format); reply->writeStrongBinder(player->asBinder()); return NO_ERROR; } break; diff --git a/media/libmedia/IOMX.cpp b/media/libmedia/IOMX.cpp index d2f5f71..27c7e03 100644 --- a/media/libmedia/IOMX.cpp +++ b/media/libmedia/IOMX.cpp @@ -59,9 +59,10 @@ public: : BpInterface<IOMX>(impl) { } - virtual bool livesLocally(pid_t pid) { + virtual bool livesLocally(node_id node, pid_t pid) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); + data.writeIntPtr((intptr_t)node); data.writeInt32(pid); remote()->transact(LIVES_LOCALLY, data, &reply); @@ -417,7 +418,9 @@ status_t BnOMX::onTransact( case LIVES_LOCALLY: { CHECK_INTERFACE(IOMX, data, reply); - reply->writeInt32(livesLocally((pid_t)data.readInt32())); + node_id node = (void *)data.readIntPtr(); + pid_t pid = (pid_t)data.readInt32(); + reply->writeInt32(livesLocally(node, pid)); return OK; } diff --git a/media/libmedia/JetPlayer.cpp b/media/libmedia/JetPlayer.cpp index fa5b67a..8456db5 100644 --- a/media/libmedia/JetPlayer.cpp +++ b/media/libmedia/JetPlayer.cpp @@ -91,7 +91,7 @@ int JetPlayer::init() mAudioTrack = new AudioTrack(); mAudioTrack->set(AUDIO_STREAM_MUSIC, //TODO parametrize this pLibConfig->sampleRate, - 1, // format = PCM 16bits per sample, + AUDIO_FORMAT_PCM_16_BIT, (pLibConfig->numChannels == 2) ? AUDIO_CHANNEL_OUT_STEREO : AUDIO_CHANNEL_OUT_MONO, mTrackBufferSize, 0); @@ -100,7 +100,8 @@ int JetPlayer::init() { Mutex::Autolock l(mMutex); ALOGV("JetPlayer::init(): trying to start render thread"); - createThreadEtc(renderThread, this, "jetRenderThread", ANDROID_PRIORITY_AUDIO); + mThread = new JetPlayerThread(this); + mThread->run("jetRenderThread", ANDROID_PRIORITY_AUDIO); mCondition.wait(mMutex); } if (mTid > 0) { @@ -156,12 +157,6 @@ int JetPlayer::release() //------------------------------------------------------------------------------------------------- -int JetPlayer::renderThread(void* p) { - - return ((JetPlayer*)p)->render(); -} - -//------------------------------------------------------------------------------------------------- int JetPlayer::render() { EAS_RESULT result = EAS_FAILURE; EAS_I32 count; @@ -173,10 +168,6 @@ int JetPlayer::render() { // allocate render buffer mAudioBuffer = new EAS_PCM[pLibConfig->mixBufferSize * pLibConfig->numChannels * MIX_NUM_BUFFERS]; - if (!mAudioBuffer) { - ALOGE("JetPlayer::render(): mAudioBuffer allocate failed"); - goto threadExit; - } // signal main thread that we started { @@ -343,8 +334,8 @@ int JetPlayer::loadFromFile(const char* path) Mutex::Autolock lock(mMutex); mEasJetFileLoc = (EAS_FILE_LOCATOR) malloc(sizeof(EAS_FILE)); - memset(mJetFilePath, 0, 256); - strncpy(mJetFilePath, path, strlen(path)); + strncpy(mJetFilePath, path, sizeof(mJetFilePath)); + mJetFilePath[sizeof(mJetFilePath) - 1] = '\0'; mEasJetFileLoc->path = mJetFilePath; mEasJetFileLoc->fd = 0; diff --git a/media/libmedia/MediaScannerClient.cpp b/media/libmedia/MediaScannerClient.cpp index 40b8188..9fe1820 100644 --- a/media/libmedia/MediaScannerClient.cpp +++ b/media/libmedia/MediaScannerClient.cpp @@ -173,6 +173,7 @@ void MediaScannerClient::convertValues(uint32_t encoding) const char* source = mValues->getEntry(i); int targetLength = len * 3 + 1; char* buffer = new char[targetLength]; + // don't normally check for NULL, but in this case targetLength may be large if (!buffer) break; char* target = buffer; diff --git a/media/libmedia/ToneGenerator.cpp b/media/libmedia/ToneGenerator.cpp index 35dfbb8..e6e989d 100644 --- a/media/libmedia/ToneGenerator.cpp +++ b/media/libmedia/ToneGenerator.cpp @@ -751,7 +751,7 @@ const ToneGenerator::ToneDescriptor ToneGenerator::sToneDescriptors[] = { // Used by ToneGenerator::getToneForRegion() to convert user specified supervisory tone type // to actual tone for current region. -const unsigned char ToneGenerator::sToneMappingTable[NUM_REGIONS-1][NUM_SUP_TONES] = { +const unsigned char /*tone_type*/ ToneGenerator::sToneMappingTable[NUM_REGIONS-1][NUM_SUP_TONES] = { { // ANSI TONE_ANSI_DIAL, // TONE_SUP_DIAL TONE_ANSI_BUSY, // TONE_SUP_BUSY @@ -798,7 +798,7 @@ const unsigned char ToneGenerator::sToneMappingTable[NUM_REGIONS-1][NUM_SUP_TONE // none // //////////////////////////////////////////////////////////////////////////////// -ToneGenerator::ToneGenerator(int streamType, float volume, bool threadCanCallJava) { +ToneGenerator::ToneGenerator(audio_stream_type_t streamType, float volume, bool threadCanCallJava) { ALOGV("ToneGenerator constructor: streamType=%d, volume=%f\n", streamType, volume); @@ -811,9 +811,9 @@ ToneGenerator::ToneGenerator(int streamType, float volume, bool threadCanCallJav mThreadCanCallJava = threadCanCallJava; mStreamType = streamType; mVolume = volume; - mpAudioTrack = 0; - mpToneDesc = 0; - mpNewToneDesc = 0; + mpAudioTrack = NULL; + mpToneDesc = NULL; + mpNewToneDesc = NULL; // Generate tone by chunks of 20 ms to keep cadencing precision mProcessSize = (mSamplingRate * 20) / 1000; @@ -855,7 +855,7 @@ ToneGenerator::ToneGenerator(int streamType, float volume, bool threadCanCallJav ToneGenerator::~ToneGenerator() { ALOGV("ToneGenerator destructor\n"); - if (mpAudioTrack) { + if (mpAudioTrack != NULL) { stopTone(); ALOGV("Delete Track: %p\n", mpAudioTrack); delete mpAudioTrack; @@ -878,7 +878,7 @@ ToneGenerator::~ToneGenerator() { // none // //////////////////////////////////////////////////////////////////////////////// -bool ToneGenerator::startTone(int toneType, int durationMs) { +bool ToneGenerator::startTone(tone_type toneType, int durationMs) { bool lResult = false; status_t lStatus; @@ -1012,15 +1012,11 @@ bool ToneGenerator::initAudioTrack() { if (mpAudioTrack) { delete mpAudioTrack; - mpAudioTrack = 0; + mpAudioTrack = NULL; } // Open audio track in mono, PCM 16bit, default sampling rate, default buffer size mpAudioTrack = new AudioTrack(); - if (mpAudioTrack == 0) { - ALOGE("AudioTrack allocation failed"); - goto initAudioTrack_exit; - } ALOGV("Create Track: %p\n", mpAudioTrack); mpAudioTrack->set(mStreamType, @@ -1052,7 +1048,7 @@ initAudioTrack_exit: if (mpAudioTrack) { ALOGV("Delete Track I: %p\n", mpAudioTrack); delete mpAudioTrack; - mpAudioTrack = 0; + mpAudioTrack = NULL; } return false; @@ -1321,7 +1317,7 @@ audioCallback_EndLoop: bool ToneGenerator::prepareWave() { unsigned int segmentIdx = 0; - if (!mpNewToneDesc) { + if (mpNewToneDesc == NULL) { return false; } @@ -1353,9 +1349,6 @@ bool ToneGenerator::prepareWave() { new ToneGenerator::WaveGenerator((unsigned short)mSamplingRate, frequency, TONEGEN_GAIN/lNumWaves); - if (lpWaveGen == 0) { - goto prepareWave_exit; - } mWaveGens.add(frequency, lpWaveGen); } frequency = mpNewToneDesc->segments[segmentIdx].waveFreq[++freqIdx]; @@ -1375,12 +1368,6 @@ bool ToneGenerator::prepareWave() { } return true; - -prepareWave_exit: - - clearWaveGens(); - - return false; } @@ -1447,13 +1434,13 @@ void ToneGenerator::clearWaveGens() { // none // //////////////////////////////////////////////////////////////////////////////// -int ToneGenerator::getToneForRegion(int toneType) { - int regionTone; +ToneGenerator::tone_type ToneGenerator::getToneForRegion(tone_type toneType) { + tone_type regionTone; if (mRegion == CEPT || toneType < FIRST_SUP_TONE || toneType > LAST_SUP_TONE) { regionTone = toneType; } else { - regionTone = sToneMappingTable[mRegion][toneType - FIRST_SUP_TONE]; + regionTone = (tone_type) sToneMappingTable[mRegion][toneType - FIRST_SUP_TONE]; } ALOGV("getToneForRegion, tone %d, region %d, regionTone %d", toneType, mRegion, regionTone); diff --git a/media/libmedia/Visualizer.cpp b/media/libmedia/Visualizer.cpp index d08ffa5..13b64e9 100644 --- a/media/libmedia/Visualizer.cpp +++ b/media/libmedia/Visualizer.cpp @@ -27,8 +27,7 @@ #include <cutils/bitops.h> #include <media/Visualizer.h> - -extern void fixed_fft_real(int n, int32_t *v); +#include <audio_utils/fixedfft.h> namespace android { @@ -54,7 +53,7 @@ Visualizer::~Visualizer() status_t Visualizer::setEnabled(bool enabled) { - Mutex::Autolock _l(mLock); + Mutex::Autolock _l(mCaptureLock); sp<CaptureThread> t = mCaptureThread; if (t != 0) { @@ -74,7 +73,7 @@ status_t Visualizer::setEnabled(bool enabled) if (status == NO_ERROR) { if (t != 0) { if (enabled) { - t->run("AudioTrackThread"); + t->run("Visualizer"); } else { t->requestExit(); } @@ -93,7 +92,7 @@ status_t Visualizer::setCaptureCallBack(capture_cbk_t cbk, void* user, uint32_t if (rate > CAPTURE_RATE_MAX) { return BAD_VALUE; } - Mutex::Autolock _l(mLock); + Mutex::Autolock _l(mCaptureLock); if (mEnabled) { return INVALID_OPERATION; @@ -115,10 +114,6 @@ status_t Visualizer::setCaptureCallBack(capture_cbk_t cbk, void* user, uint32_t if (cbk != NULL) { mCaptureThread = new CaptureThread(*this, rate, ((flags & CAPTURE_CALL_JAVA) != 0)); - if (mCaptureThread == 0) { - ALOGE("Could not create callback thread"); - return NO_INIT; - } } ALOGV("setCaptureCallBack() rate: %d thread %p flags 0x%08x", rate, mCaptureThread.get(), mCaptureFlags); @@ -133,7 +128,7 @@ status_t Visualizer::setCaptureSize(uint32_t size) return BAD_VALUE; } - Mutex::Autolock _l(mLock); + Mutex::Autolock _l(mCaptureLock); if (mEnabled) { return INVALID_OPERATION; } @@ -235,7 +230,7 @@ status_t Visualizer::doFft(uint8_t *fft, uint8_t *waveform) void Visualizer::periodicCapture() { - Mutex::Autolock _l(mLock); + Mutex::Autolock _l(mCaptureLock); ALOGV("periodicCapture() %p mCaptureCallBack %p mCaptureFlags 0x%08x", this, mCaptureCallBack, mCaptureFlags); if (mCaptureCallBack != NULL && diff --git a/media/libmedia/autodetect.cpp b/media/libmedia/autodetect.cpp index dfcc6a0..be5c3b2 100644 --- a/media/libmedia/autodetect.cpp +++ b/media/libmedia/autodetect.cpp @@ -16,7 +16,7 @@ #include "autodetect.h" -typedef struct CharRange { +struct CharRange { uint16_t first; uint16_t last; }; diff --git a/media/libmedia/fixedfft.cpp b/media/libmedia/fixedfft.cpp deleted file mode 100644 index 2b495e6..0000000 --- a/media/libmedia/fixedfft.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* A Fixed point implementation of Fast Fourier Transform (FFT). Complex numbers - * are represented by 32-bit integers, where higher 16 bits are real part and - * lower ones are imaginary part. Few compromises are made between efficiency, - * accuracy, and maintainability. To make it fast, arithmetic shifts are used - * instead of divisions, and bitwise inverses are used instead of negates. To - * keep it small, only radix-2 Cooley-Tukey algorithm is implemented, and only - * half of the twiddle factors are stored. Although there are still ways to make - * it even faster or smaller, it costs too much on one of the aspects. - */ - -#include <stdio.h> -#include <stdint.h> -#ifdef __arm__ -#include <machine/cpu-features.h> -#endif - -#define LOG_FFT_SIZE 10 -#define MAX_FFT_SIZE (1 << LOG_FFT_SIZE) - -static const int32_t twiddle[MAX_FFT_SIZE / 4] = { - 0x00008000, 0xff378001, 0xfe6e8002, 0xfda58006, 0xfcdc800a, 0xfc13800f, - 0xfb4a8016, 0xfa81801e, 0xf9b88027, 0xf8ef8032, 0xf827803e, 0xf75e804b, - 0xf6958059, 0xf5cd8068, 0xf5058079, 0xf43c808b, 0xf374809e, 0xf2ac80b2, - 0xf1e480c8, 0xf11c80de, 0xf05580f6, 0xef8d8110, 0xeec6812a, 0xedff8146, - 0xed388163, 0xec718181, 0xebab81a0, 0xeae481c1, 0xea1e81e2, 0xe9588205, - 0xe892822a, 0xe7cd824f, 0xe7078276, 0xe642829d, 0xe57d82c6, 0xe4b982f1, - 0xe3f4831c, 0xe3308349, 0xe26d8377, 0xe1a983a6, 0xe0e683d6, 0xe0238407, - 0xdf61843a, 0xde9e846e, 0xdddc84a3, 0xdd1b84d9, 0xdc598511, 0xdb998549, - 0xdad88583, 0xda1885be, 0xd95885fa, 0xd8988637, 0xd7d98676, 0xd71b86b6, - 0xd65c86f6, 0xd59e8738, 0xd4e1877b, 0xd42487c0, 0xd3678805, 0xd2ab884c, - 0xd1ef8894, 0xd13488dd, 0xd0798927, 0xcfbe8972, 0xcf0489be, 0xce4b8a0c, - 0xcd928a5a, 0xccd98aaa, 0xcc218afb, 0xcb698b4d, 0xcab28ba0, 0xc9fc8bf5, - 0xc9468c4a, 0xc8908ca1, 0xc7db8cf8, 0xc7278d51, 0xc6738dab, 0xc5c08e06, - 0xc50d8e62, 0xc45b8ebf, 0xc3a98f1d, 0xc2f88f7d, 0xc2488fdd, 0xc198903e, - 0xc0e990a1, 0xc03a9105, 0xbf8c9169, 0xbedf91cf, 0xbe329236, 0xbd86929e, - 0xbcda9307, 0xbc2f9371, 0xbb8593dc, 0xbadc9448, 0xba3394b5, 0xb98b9523, - 0xb8e39592, 0xb83c9603, 0xb7969674, 0xb6f196e6, 0xb64c9759, 0xb5a897ce, - 0xb5059843, 0xb46298b9, 0xb3c09930, 0xb31f99a9, 0xb27f9a22, 0xb1df9a9c, - 0xb1409b17, 0xb0a29b94, 0xb0059c11, 0xaf689c8f, 0xaecc9d0e, 0xae319d8e, - 0xad979e0f, 0xacfd9e91, 0xac659f14, 0xabcd9f98, 0xab36a01c, 0xaaa0a0a2, - 0xaa0aa129, 0xa976a1b0, 0xa8e2a238, 0xa84fa2c2, 0xa7bda34c, 0xa72ca3d7, - 0xa69ca463, 0xa60ca4f0, 0xa57ea57e, 0xa4f0a60c, 0xa463a69c, 0xa3d7a72c, - 0xa34ca7bd, 0xa2c2a84f, 0xa238a8e2, 0xa1b0a976, 0xa129aa0a, 0xa0a2aaa0, - 0xa01cab36, 0x9f98abcd, 0x9f14ac65, 0x9e91acfd, 0x9e0fad97, 0x9d8eae31, - 0x9d0eaecc, 0x9c8faf68, 0x9c11b005, 0x9b94b0a2, 0x9b17b140, 0x9a9cb1df, - 0x9a22b27f, 0x99a9b31f, 0x9930b3c0, 0x98b9b462, 0x9843b505, 0x97ceb5a8, - 0x9759b64c, 0x96e6b6f1, 0x9674b796, 0x9603b83c, 0x9592b8e3, 0x9523b98b, - 0x94b5ba33, 0x9448badc, 0x93dcbb85, 0x9371bc2f, 0x9307bcda, 0x929ebd86, - 0x9236be32, 0x91cfbedf, 0x9169bf8c, 0x9105c03a, 0x90a1c0e9, 0x903ec198, - 0x8fddc248, 0x8f7dc2f8, 0x8f1dc3a9, 0x8ebfc45b, 0x8e62c50d, 0x8e06c5c0, - 0x8dabc673, 0x8d51c727, 0x8cf8c7db, 0x8ca1c890, 0x8c4ac946, 0x8bf5c9fc, - 0x8ba0cab2, 0x8b4dcb69, 0x8afbcc21, 0x8aaaccd9, 0x8a5acd92, 0x8a0cce4b, - 0x89becf04, 0x8972cfbe, 0x8927d079, 0x88ddd134, 0x8894d1ef, 0x884cd2ab, - 0x8805d367, 0x87c0d424, 0x877bd4e1, 0x8738d59e, 0x86f6d65c, 0x86b6d71b, - 0x8676d7d9, 0x8637d898, 0x85fad958, 0x85beda18, 0x8583dad8, 0x8549db99, - 0x8511dc59, 0x84d9dd1b, 0x84a3dddc, 0x846ede9e, 0x843adf61, 0x8407e023, - 0x83d6e0e6, 0x83a6e1a9, 0x8377e26d, 0x8349e330, 0x831ce3f4, 0x82f1e4b9, - 0x82c6e57d, 0x829de642, 0x8276e707, 0x824fe7cd, 0x822ae892, 0x8205e958, - 0x81e2ea1e, 0x81c1eae4, 0x81a0ebab, 0x8181ec71, 0x8163ed38, 0x8146edff, - 0x812aeec6, 0x8110ef8d, 0x80f6f055, 0x80def11c, 0x80c8f1e4, 0x80b2f2ac, - 0x809ef374, 0x808bf43c, 0x8079f505, 0x8068f5cd, 0x8059f695, 0x804bf75e, - 0x803ef827, 0x8032f8ef, 0x8027f9b8, 0x801efa81, 0x8016fb4a, 0x800ffc13, - 0x800afcdc, 0x8006fda5, 0x8002fe6e, 0x8001ff37, -}; - -/* Returns the multiplication of \conj{a} and {b}. */ -static inline int32_t mult(int32_t a, int32_t b) -{ -#if __ARM_ARCH__ >= 6 - int32_t t = b; - __asm__("smuad %0, %0, %1" : "+r" (t) : "r" (a)); - __asm__("smusdx %0, %0, %1" : "+r" (b) : "r" (a)); - __asm__("pkhtb %0, %0, %1, ASR #16" : "+r" (t) : "r" (b)); - return t; -#else - return (((a >> 16) * (b >> 16) + (int16_t)a * (int16_t)b) & ~0xFFFF) | - ((((a >> 16) * (int16_t)b - (int16_t)a * (b >> 16)) >> 16) & 0xFFFF); -#endif -} - -static inline int32_t half(int32_t a) -{ -#if __ARM_ARCH__ >= 6 - __asm__("shadd16 %0, %0, %1" : "+r" (a) : "r" (0)); - return a; -#else - return ((a >> 1) & ~0x8000) | (a & 0x8000); -#endif -} - -void fixed_fft(int n, int32_t *v) -{ - int scale = LOG_FFT_SIZE, i, p, r; - - for (r = 0, i = 1; i < n; ++i) { - for (p = n; !(p & r); p >>= 1, r ^= p); - if (i < r) { - int32_t t = v[i]; - v[i] = v[r]; - v[r] = t; - } - } - - for (p = 1; p < n; p <<= 1) { - --scale; - - for (i = 0; i < n; i += p << 1) { - int32_t x = half(v[i]); - int32_t y = half(v[i + p]); - v[i] = x + y; - v[i + p] = x - y; - } - - for (r = 1; r < p; ++r) { - int32_t w = MAX_FFT_SIZE / 4 - (r << scale); - i = w >> 31; - w = twiddle[(w ^ i) - i] ^ (i << 16); - for (i = r; i < n; i += p << 1) { - int32_t x = half(v[i]); - int32_t y = mult(w, v[i + p]); - v[i] = x - y; - v[i + p] = x + y; - } - } - } -} - -void fixed_fft_real(int n, int32_t *v) -{ - int scale = LOG_FFT_SIZE, m = n >> 1, i; - - fixed_fft(n, v); - for (i = 1; i <= n; i <<= 1, --scale); - v[0] = mult(~v[0], 0x80008000); - v[m] = half(v[m]); - - for (i = 1; i < n >> 1; ++i) { - int32_t x = half(v[i]); - int32_t z = half(v[n - i]); - int32_t y = z - (x ^ 0xFFFF); - x = half(x + (z ^ 0xFFFF)); - y = mult(y, twiddle[i << scale]); - v[i] = x - y; - v[n - i] = (x + y) ^ 0xFFFF; - } -} diff --git a/media/libmedia/mediametadataretriever.cpp b/media/libmedia/mediametadataretriever.cpp index 88e269f..8d53357 100644 --- a/media/libmedia/mediametadataretriever.cpp +++ b/media/libmedia/mediametadataretriever.cpp @@ -35,7 +35,7 @@ sp<MediaMetadataRetriever::DeathNotifier> MediaMetadataRetriever::sDeathNotifier const sp<IMediaPlayerService>& MediaMetadataRetriever::getService() { Mutex::Autolock lock(sServiceLock); - if (sService.get() == 0) { + if (sService == 0) { sp<IServiceManager> sm = defaultServiceManager(); sp<IBinder> binder; do { diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp index 2284927..f1c47dd 100644 --- a/media/libmedia/mediaplayer.cpp +++ b/media/libmedia/mediaplayer.cpp @@ -30,7 +30,7 @@ #include <gui/SurfaceTextureClient.h> #include <media/mediaplayer.h> -#include <media/AudioTrack.h> +#include <media/AudioSystem.h> #include <surfaceflinger/Surface.h> @@ -478,7 +478,7 @@ status_t MediaPlayer::reset() return reset_l(); } -status_t MediaPlayer::setAudioStreamType(int type) +status_t MediaPlayer::setAudioStreamType(audio_stream_type_t type) { ALOGV("MediaPlayer::setAudioStreamType"); Mutex::Autolock _l(mLock); @@ -709,7 +709,7 @@ void MediaPlayer::notify(int msg, int ext1, int ext2, const Parcel *obj) } } -/*static*/ sp<IMemory> MediaPlayer::decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, int* pFormat) +/*static*/ sp<IMemory> MediaPlayer::decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, audio_format_t* pFormat) { ALOGV("decode(%s)", url); sp<IMemory> p; @@ -729,7 +729,7 @@ void MediaPlayer::died() notify(MEDIA_ERROR, MEDIA_ERROR_SERVER_DIED, 0); } -/*static*/ sp<IMemory> MediaPlayer::decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, int* pFormat) +/*static*/ sp<IMemory> MediaPlayer::decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, audio_format_t* pFormat) { ALOGV("decode(%d, %lld, %lld)", fd, offset, length); sp<IMemory> p; |