diff options
Diffstat (limited to 'media/libmedia')
| -rw-r--r-- | media/libmedia/AudioRecord.cpp | 48 | ||||
| -rw-r--r-- | media/libmedia/AudioSystem.cpp | 15 | ||||
| -rw-r--r-- | media/libmedia/IAudioFlinger.cpp | 25 | ||||
| -rw-r--r-- | media/libmedia/IAudioPolicyService.cpp | 5 |
4 files changed, 39 insertions, 54 deletions
diff --git a/media/libmedia/AudioRecord.cpp b/media/libmedia/AudioRecord.cpp index 0562f8e..f8813c9 100644 --- a/media/libmedia/AudioRecord.cpp +++ b/media/libmedia/AudioRecord.cpp @@ -18,28 +18,18 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "AudioRecord" -#include <stdint.h> -#include <sys/types.h> - -#include <sched.h> #include <sys/resource.h> +#include <sys/types.h> -#include <private/media/AudioTrackShared.h> - -#include <media/AudioSystem.h> +#include <binder/IPCThreadState.h> +#include <cutils/atomic.h> +#include <cutils/compiler.h> #include <media/AudioRecord.h> -#include <media/mediarecorder.h> - -#include <binder/IServiceManager.h> +#include <media/AudioSystem.h> +#include <system/audio.h> #include <utils/Log.h> -#include <binder/Parcel.h> -#include <binder/IPCThreadState.h> -#include <utils/Timers.h> -#include <utils/Atomic.h> -#include <system/audio.h> -#include <cutils/bitops.h> -#include <cutils/compiler.h> +#include <private/media/AudioTrackShared.h> namespace android { // --------------------------------------------------------------------------- @@ -49,18 +39,18 @@ status_t AudioRecord::getMinFrameCount( int* frameCount, uint32_t sampleRate, audio_format_t format, - int channelCount) + audio_channel_mask_t channelMask) { size_t size = 0; - if (AudioSystem::getInputBufferSize(sampleRate, format, channelCount, &size) + if (AudioSystem::getInputBufferSize(sampleRate, format, channelMask, &size) != NO_ERROR) { ALOGE("AudioSystem could not query the input buffer size."); return NO_INIT; } if (size == 0) { - ALOGE("Unsupported configuration: sampleRate %d, format %d, channelCount %d", - sampleRate, format, channelCount); + ALOGE("Unsupported configuration: sampleRate %d, format %d, channelMask %#x", + sampleRate, format, channelMask); return BAD_VALUE; } @@ -68,6 +58,7 @@ status_t AudioRecord::getMinFrameCount( size <<= 1; if (audio_is_linear_pcm(format)) { + int channelCount = popcount(channelMask); size /= channelCount * audio_bytes_per_sample(format); } @@ -87,9 +78,8 @@ AudioRecord::AudioRecord( audio_source_t inputSource, uint32_t sampleRate, audio_format_t format, - uint32_t channelMask, + audio_channel_mask_t channelMask, int frameCount, - record_flags flags, callback_t cbf, void* user, int notificationFrames, @@ -98,7 +88,7 @@ AudioRecord::AudioRecord( mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(SP_DEFAULT) { mStatus = set(inputSource, sampleRate, format, channelMask, - frameCount, flags, cbf, user, notificationFrames, sessionId); + frameCount, cbf, user, notificationFrames, sessionId); } AudioRecord::~AudioRecord() @@ -122,9 +112,8 @@ status_t AudioRecord::set( audio_source_t inputSource, uint32_t sampleRate, audio_format_t format, - uint32_t channelMask, + audio_channel_mask_t channelMask, int frameCount, - record_flags flags, callback_t cbf, void* user, int notificationFrames, @@ -132,7 +121,7 @@ status_t AudioRecord::set( int sessionId) { - ALOGV("set(): sampleRate %d, channelMask %d, frameCount %d",sampleRate, channelMask, frameCount); + ALOGV("set(): sampleRate %d, channelMask %#x, frameCount %d",sampleRate, channelMask, frameCount); AutoMutex lock(mLock); @@ -174,7 +163,6 @@ status_t AudioRecord::set( sampleRate, format, channelMask, - (audio_in_acoustics_t)flags, mSessionId); if (input == 0) { ALOGE("Could not get audio input for record source %d", inputSource); @@ -229,7 +217,6 @@ status_t AudioRecord::set( mNewPosition = 0; mUpdatePeriod = 0; mInputSource = inputSource; - mFlags = flags; mInput = input; AudioSystem::acquireAudioSessionId(mSessionId); @@ -457,7 +444,7 @@ unsigned int AudioRecord::getInputFramesLost() const status_t AudioRecord::openRecord_l( uint32_t sampleRate, audio_format_t format, - uint32_t channelMask, + audio_channel_mask_t channelMask, int frameCount, audio_io_handle_t input) { @@ -613,7 +600,6 @@ audio_io_handle_t AudioRecord::getInput_l() mCblk->sampleRate, mFormat, mChannelMask, - (audio_in_acoustics_t)mFlags, mSessionId); return mInput; } diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp index 4c41ba5..9c270c8 100644 --- a/media/libmedia/AudioSystem.cpp +++ b/media/libmedia/AudioSystem.cpp @@ -41,7 +41,7 @@ DefaultKeyedVector<audio_io_handle_t, AudioSystem::OutputDescriptor *> AudioSyst // Cached values for recording queries, all protected by gLock uint32_t AudioSystem::gPrevInSamplingRate = 16000; audio_format_t AudioSystem::gPrevInFormat = AUDIO_FORMAT_PCM_16_BIT; -int AudioSystem::gPrevInChannelCount = 1; +audio_channel_mask_t AudioSystem::gPrevInChannelMask = AUDIO_CHANNEL_IN_MONO; size_t AudioSystem::gInBuffSize = 0; @@ -334,25 +334,25 @@ status_t AudioSystem::getLatency(audio_io_handle_t output, return NO_ERROR; } -status_t AudioSystem::getInputBufferSize(uint32_t sampleRate, audio_format_t format, int channelCount, - size_t* buffSize) +status_t AudioSystem::getInputBufferSize(uint32_t sampleRate, audio_format_t format, + audio_channel_mask_t channelMask, size_t* buffSize) { gLock.lock(); // Do we have a stale gInBufferSize or are we requesting the input buffer size for new values size_t inBuffSize = gInBuffSize; if ((inBuffSize == 0) || (sampleRate != gPrevInSamplingRate) || (format != gPrevInFormat) - || (channelCount != gPrevInChannelCount)) { + || (channelMask != gPrevInChannelMask)) { gLock.unlock(); const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); if (af == 0) { return PERMISSION_DENIED; } - inBuffSize = af->getInputBufferSize(sampleRate, format, channelCount); + inBuffSize = af->getInputBufferSize(sampleRate, format, channelMask); gLock.lock(); // save the request params gPrevInSamplingRate = sampleRate; gPrevInFormat = format; - gPrevInChannelCount = channelCount; + gPrevInChannelMask = channelMask; gInBuffSize = inBuffSize; } @@ -625,12 +625,11 @@ audio_io_handle_t AudioSystem::getInput(audio_source_t inputSource, uint32_t samplingRate, audio_format_t format, uint32_t channels, - audio_in_acoustics_t acoustics, int sessionId) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return 0; - return aps->getInput(inputSource, samplingRate, format, channels, acoustics, sessionId); + return aps->getInput(inputSource, samplingRate, format, channels, sessionId); } status_t AudioSystem::startInput(audio_io_handle_t input) diff --git a/media/libmedia/IAudioFlinger.cpp b/media/libmedia/IAudioFlinger.cpp index e8dd438..27f6b45 100644 --- a/media/libmedia/IAudioFlinger.cpp +++ b/media/libmedia/IAudioFlinger.cpp @@ -32,7 +32,7 @@ enum { CREATE_TRACK = IBinder::FIRST_CALL_TRANSACTION, OPEN_RECORD, SAMPLE_RATE, - CHANNEL_COUNT, + CHANNEL_COUNT, // obsolete FORMAT, FRAME_COUNT, LATENCY, @@ -86,7 +86,7 @@ public: audio_stream_type_t streamType, uint32_t sampleRate, audio_format_t format, - uint32_t channelMask, + audio_channel_mask_t channelMask, int frameCount, track_flags_t flags, const sp<IMemory>& sharedBuffer, @@ -182,6 +182,7 @@ public: return reply.readInt32(); } +#if 0 virtual int channelCount(audio_io_handle_t output) const { Parcel data, reply; @@ -190,6 +191,7 @@ public: remote()->transact(CHANNEL_COUNT, data, &reply); return reply.readInt32(); } +#endif virtual audio_format_t format(audio_io_handle_t output) const { @@ -347,13 +349,14 @@ public: remote()->transact(REGISTER_CLIENT, data, &reply); } - virtual size_t getInputBufferSize(uint32_t sampleRate, audio_format_t format, int channelCount) const + virtual size_t getInputBufferSize(uint32_t sampleRate, audio_format_t format, + audio_channel_mask_t channelMask) const { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); data.writeInt32(sampleRate); data.writeInt32(format); - data.writeInt32(channelCount); + data.writeInt32(channelMask); remote()->transact(GET_INPUTBUFFERSIZE, data, &reply); return reply.readInt32(); } @@ -698,7 +701,7 @@ status_t BnAudioFlinger::onTransact( int streamType = data.readInt32(); uint32_t sampleRate = data.readInt32(); audio_format_t format = (audio_format_t) data.readInt32(); - int channelCount = data.readInt32(); + audio_channel_mask_t channelMask = data.readInt32(); size_t bufferCount = data.readInt32(); track_flags_t flags = (track_flags_t) data.readInt32(); sp<IMemory> buffer = interface_cast<IMemory>(data.readStrongBinder()); @@ -708,7 +711,7 @@ status_t BnAudioFlinger::onTransact( status_t status; sp<IAudioTrack> track = createTrack(pid, (audio_stream_type_t) streamType, sampleRate, format, - channelCount, bufferCount, flags, buffer, output, tid, &sessionId, &status); + channelMask, bufferCount, flags, buffer, output, tid, &sessionId, &status); reply->writeInt32(sessionId); reply->writeInt32(status); reply->writeStrongBinder(track->asBinder()); @@ -720,13 +723,13 @@ status_t BnAudioFlinger::onTransact( audio_io_handle_t input = (audio_io_handle_t) data.readInt32(); uint32_t sampleRate = data.readInt32(); audio_format_t format = (audio_format_t) data.readInt32(); - int channelCount = data.readInt32(); + audio_channel_mask_t channelMask = data.readInt32(); size_t bufferCount = data.readInt32(); track_flags_t flags = (track_flags_t) data.readInt32(); int sessionId = data.readInt32(); status_t status; sp<IAudioRecord> record = openRecord(pid, input, - sampleRate, format, channelCount, bufferCount, flags, &sessionId, &status); + sampleRate, format, channelMask, bufferCount, flags, &sessionId, &status); reply->writeInt32(sessionId); reply->writeInt32(status); reply->writeStrongBinder(record->asBinder()); @@ -737,11 +740,13 @@ status_t BnAudioFlinger::onTransact( reply->writeInt32( sampleRate((audio_io_handle_t) data.readInt32()) ); return NO_ERROR; } break; +#if 0 case CHANNEL_COUNT: { CHECK_INTERFACE(IAudioFlinger, data, reply); reply->writeInt32( channelCount((audio_io_handle_t) data.readInt32()) ); return NO_ERROR; } break; +#endif case FORMAT: { CHECK_INTERFACE(IAudioFlinger, data, reply); reply->writeInt32( format((audio_io_handle_t) data.readInt32()) ); @@ -846,8 +851,8 @@ status_t BnAudioFlinger::onTransact( CHECK_INTERFACE(IAudioFlinger, data, reply); uint32_t sampleRate = data.readInt32(); audio_format_t format = (audio_format_t) data.readInt32(); - int channelCount = data.readInt32(); - reply->writeInt32( getInputBufferSize(sampleRate, format, channelCount) ); + audio_channel_mask_t channelMask = data.readInt32(); + reply->writeInt32( getInputBufferSize(sampleRate, format, channelMask) ); return NO_ERROR; } break; case OPEN_OUTPUT: { diff --git a/media/libmedia/IAudioPolicyService.cpp b/media/libmedia/IAudioPolicyService.cpp index 7aab8d6..5a4512e 100644 --- a/media/libmedia/IAudioPolicyService.cpp +++ b/media/libmedia/IAudioPolicyService.cpp @@ -176,7 +176,6 @@ public: uint32_t samplingRate, audio_format_t format, uint32_t channels, - audio_in_acoustics_t acoustics, int audioSession) { Parcel data, reply; @@ -185,7 +184,6 @@ public: data.writeInt32(samplingRate); data.writeInt32(static_cast <uint32_t>(format)); data.writeInt32(channels); - data.writeInt32(static_cast <uint32_t>(acoustics)); data.writeInt32(audioSession); remote()->transact(GET_INPUT, data, &reply); return static_cast <audio_io_handle_t> (reply.readInt32()); @@ -465,14 +463,11 @@ status_t BnAudioPolicyService::onTransact( uint32_t samplingRate = 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()); int audioSession = data.readInt32(); audio_io_handle_t input = getInput(inputSource, samplingRate, format, channels, - acoustics, audioSession); reply->writeInt32(static_cast <int>(input)); return NO_ERROR; |
