diff options
author | 2012-01-23 13:58:49 -0800 | |
---|---|---|
committer | 2012-01-26 16:50:19 -0800 | |
commit | 0f0fbd9441f40c6f99470b89774e397f99bf61eb (patch) | |
tree | adf3ce158913a54fe6526ada1220424fe9de6d68 | |
parent | 0f73d75da069e8af200092c0c6a8487108fdcbfb (diff) |
Use audio_source_t consistently
Was a mix of audio_source_t, uint8_t, and int.
Related fixes:
- fix comments in MediaRecorder.java
- AudioPolicyService server side was not checking source parameter at
all, so if the client wrapper was bypassed, invalid values could be
passed into audio HAL
- JNI android_media_AudioRecord_setup was checking source for positive
values, but not negative values. This test is redundant, since already
checked at Java and now checked by AudioPolicyService also, but might
as well make it correct.
Change-Id: Ie5e25d646dcd59a86d7985aa46cfcb4a1ba64a4a
-rw-r--r-- | core/jni/android_media_AudioRecord.cpp | 4 | ||||
-rw-r--r-- | include/media/AudioRecord.h | 9 | ||||
-rw-r--r-- | include/media/AudioSystem.h | 2 | ||||
-rw-r--r-- | include/media/IAudioPolicyService.h | 2 | ||||
-rw-r--r-- | include/media/stagefright/AudioSource.h | 2 | ||||
-rw-r--r-- | media/java/android/media/MediaRecorder.java | 5 | ||||
-rw-r--r-- | media/libmedia/AudioRecord.cpp | 10 | ||||
-rw-r--r-- | media/libmedia/AudioSystem.cpp | 2 | ||||
-rw-r--r-- | media/libmedia/IAudioPolicyService.cpp | 6 | ||||
-rw-r--r-- | media/libstagefright/AudioSource.cpp | 2 | ||||
-rw-r--r-- | services/audioflinger/AudioPolicyService.cpp | 8 | ||||
-rw-r--r-- | services/audioflinger/AudioPolicyService.h | 2 |
12 files changed, 30 insertions, 24 deletions
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp index 3f1af8645256..547607ec2947 100644 --- a/core/jni/android_media_AudioRecord.cpp +++ b/core/jni/android_media_AudioRecord.cpp @@ -157,7 +157,7 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this, int frameSize = nbChannels * bytesPerSample; size_t frameCount = buffSizeInBytes / frameSize; - if (source >= AUDIO_SOURCE_CNT) { + if (uint32_t(source) >= AUDIO_SOURCE_CNT) { ALOGE("Error creating AudioRecord: unknown source."); return AUDIORECORD_ERROR_SETUP_INVALIDSOURCE; } @@ -198,7 +198,7 @@ android_media_AudioRecord_setup(JNIEnv *env, jobject thiz, jobject weak_this, // we use a weak reference so the AudioRecord object can be garbage collected. lpCallbackData->audioRecord_ref = env->NewGlobalRef(weak_this); - lpRecorder->set(source, + lpRecorder->set((audio_source_t) source, sampleRateInHertz, format, // word length, PCM channels, diff --git a/include/media/AudioRecord.h b/include/media/AudioRecord.h index 756e91db2a65..76ec3b1190eb 100644 --- a/include/media/AudioRecord.h +++ b/include/media/AudioRecord.h @@ -149,7 +149,7 @@ public: RECORD_IIR_ENABLE = AUDIO_IN_ACOUSTICS_TX_IIR_ENABLE, }; - AudioRecord(int inputSource, + AudioRecord(audio_source_t inputSource, uint32_t sampleRate = 0, audio_format_t format = AUDIO_FORMAT_DEFAULT, uint32_t channelMask = AUDIO_CHANNEL_IN_MONO, @@ -175,7 +175,7 @@ public: * - NO_INIT: audio server or audio hardware not initialized * - PERMISSION_DENIED: recording is not allowed for the requesting process * */ - status_t set(int inputSource = 0, + status_t set(audio_source_t inputSource = AUDIO_SOURCE_DEFAULT, uint32_t sampleRate = 0, audio_format_t format = AUDIO_FORMAT_DEFAULT, uint32_t channelMask = AUDIO_CHANNEL_IN_MONO, @@ -208,7 +208,7 @@ public: int channels() const; uint32_t frameCount() const; size_t frameSize() const; - int inputSource() const; + audio_source_t inputSource() const; /* After it's created the track is not active. Call start() to @@ -367,8 +367,7 @@ private: audio_track_cblk_t* mCblk; audio_format_t mFormat; uint8_t mChannelCount; - uint8_t mInputSource; - uint8_t mReserved[2]; + audio_source_t mInputSource; status_t mStatus; uint32_t mLatency; diff --git a/include/media/AudioSystem.h b/include/media/AudioSystem.h index c6368fb22833..6b12c1451ca6 100644 --- a/include/media/AudioSystem.h +++ b/include/media/AudioSystem.h @@ -163,7 +163,7 @@ public: audio_stream_type_t stream, int session = 0); static void releaseOutput(audio_io_handle_t output); - static audio_io_handle_t getInput(int inputSource, + static audio_io_handle_t getInput(audio_source_t inputSource, uint32_t samplingRate = 0, audio_format_t format = AUDIO_FORMAT_DEFAULT, uint32_t channels = AUDIO_CHANNEL_IN_MONO, diff --git a/include/media/IAudioPolicyService.h b/include/media/IAudioPolicyService.h index 07d17c5b0767..4d88297eaf8a 100644 --- a/include/media/IAudioPolicyService.h +++ b/include/media/IAudioPolicyService.h @@ -60,7 +60,7 @@ public: audio_stream_type_t stream, int session = 0) = 0; virtual void releaseOutput(audio_io_handle_t output) = 0; - virtual audio_io_handle_t getInput(int inputSource, + virtual audio_io_handle_t getInput(audio_source_t inputSource, uint32_t samplingRate = 0, audio_format_t format = AUDIO_FORMAT_DEFAULT, uint32_t channels = 0, diff --git a/include/media/stagefright/AudioSource.h b/include/media/stagefright/AudioSource.h index 19bd31b7e594..2427e2fe9967 100644 --- a/include/media/stagefright/AudioSource.h +++ b/include/media/stagefright/AudioSource.h @@ -34,7 +34,7 @@ struct AudioSource : public MediaSource, public MediaBufferObserver { // Note that the "channels" parameter is _not_ the number of channels, // but a bitmask of audio_channels_t constants. AudioSource( - int inputSource, uint32_t sampleRate, + audio_source_t inputSource, uint32_t sampleRate, uint32_t channels = AUDIO_CHANNEL_IN_MONO); status_t initCheck() const; diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java index 08e603252c5c..a720c0a398ad 100644 --- a/media/java/android/media/MediaRecorder.java +++ b/media/java/android/media/MediaRecorder.java @@ -138,10 +138,13 @@ public class MediaRecorder */ public final class AudioSource { /* Do not change these values without updating their counterparts - * in include/media/mediarecorder.h! + * in system/core/include/system/audio.h! */ private AudioSource() {} + + /** Default audio source **/ public static final int DEFAULT = 0; + /** Microphone audio source */ public static final int MIC = 1; diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp index 5b5b0769ed00..2b3ea386c55b 100644 --- a/media/libmedia/AudioRecord.cpp +++ b/media/libmedia/AudioRecord.cpp @@ -84,7 +84,7 @@ AudioRecord::AudioRecord() } AudioRecord::AudioRecord( - int inputSource, + audio_source_t inputSource, uint32_t sampleRate, audio_format_t format, uint32_t channelMask, @@ -119,7 +119,7 @@ AudioRecord::~AudioRecord() } status_t AudioRecord::set( - int inputSource, + audio_source_t inputSource, uint32_t sampleRate, audio_format_t format, uint32_t channelMask, @@ -228,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); @@ -272,9 +272,9 @@ size_t AudioRecord::frameSize() const } } -int AudioRecord::inputSource() const +audio_source_t AudioRecord::inputSource() const { - return (int)mInputSource; + return mInputSource; } // ------------------------------------------------------------------------- diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp index 952d6343f428..124032b36949 100644 --- a/media/libmedia/AudioSystem.cpp +++ b/media/libmedia/AudioSystem.cpp @@ -630,7 +630,7 @@ 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, audio_format_t format, uint32_t channels, diff --git a/media/libmedia/IAudioPolicyService.cpp b/media/libmedia/IAudioPolicyService.cpp index b5c857f9a869..99385aa4f80a 100644 --- a/media/libmedia/IAudioPolicyService.cpp +++ b/media/libmedia/IAudioPolicyService.cpp @@ -172,7 +172,7 @@ public: } virtual audio_io_handle_t getInput( - int inputSource, + audio_source_t inputSource, uint32_t samplingRate, audio_format_t format, uint32_t channels, @@ -181,7 +181,7 @@ public: { 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); @@ -461,7 +461,7 @@ 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(); audio_format_t format = (audio_format_t) data.readInt32(); uint32_t channels = data.readInt32(); diff --git a/media/libstagefright/AudioSource.cpp b/media/libstagefright/AudioSource.cpp index 2172cc0d9d41..8bdb7c589d23 100644 --- a/media/libstagefright/AudioSource.cpp +++ b/media/libstagefright/AudioSource.cpp @@ -47,7 +47,7 @@ static void AudioRecordCallbackFunction(int event, void *user, void *info) { } AudioSource::AudioSource( - int inputSource, uint32_t sampleRate, uint32_t channels) + audio_source_t inputSource, uint32_t sampleRate, uint32_t channels) : mStarted(false), mSampleRate(sampleRate), mPrevSampleTimeUs(0), diff --git a/services/audioflinger/AudioPolicyService.cpp b/services/audioflinger/AudioPolicyService.cpp index 28b1c892cca0..2df1385f5237 100644 --- a/services/audioflinger/AudioPolicyService.cpp +++ b/services/audioflinger/AudioPolicyService.cpp @@ -287,7 +287,7 @@ void AudioPolicyService::releaseOutput(audio_io_handle_t output) mpAudioPolicy->release_output(mpAudioPolicy, output); } -audio_io_handle_t AudioPolicyService::getInput(int inputSource, +audio_io_handle_t AudioPolicyService::getInput(audio_source_t inputSource, uint32_t samplingRate, audio_format_t format, uint32_t channels, @@ -297,6 +297,10 @@ audio_io_handle_t AudioPolicyService::getInput(int inputSource, if (mpAudioPolicy == NULL) { return 0; } + // already checked by client, but double-check in case the client wrapper is bypassed + if (uint32_t(inputSource) >= AUDIO_SOURCE_CNT) { + return 0; + } Mutex::Autolock _l(mLock); audio_io_handle_t input = mpAudioPolicy->get_input(mpAudioPolicy, inputSource, samplingRate, format, channels, acoustics); @@ -305,7 +309,7 @@ audio_io_handle_t AudioPolicyService::getInput(int inputSource, return input; } // create audio pre processors according to input source - ssize_t index = mInputSources.indexOfKey((audio_source_t)inputSource); + ssize_t index = mInputSources.indexOfKey(inputSource); if (index < 0) { return input; } diff --git a/services/audioflinger/AudioPolicyService.h b/services/audioflinger/AudioPolicyService.h index 9811670d1755..3c0f5eda06cf 100644 --- a/services/audioflinger/AudioPolicyService.h +++ b/services/audioflinger/AudioPolicyService.h @@ -74,7 +74,7 @@ public: audio_stream_type_t stream, int session = 0); virtual void releaseOutput(audio_io_handle_t output); - virtual audio_io_handle_t getInput(int inputSource, + virtual audio_io_handle_t getInput(audio_source_t inputSource, uint32_t samplingRate = 0, audio_format_t format = AUDIO_FORMAT_DEFAULT, uint32_t channels = 0, |