Loading media/libaaudio/examples/input_monitor/src/input_monitor.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -48,8 +48,8 @@ int main(int argc, char **argv) //aaudio_performance_mode_t requestedPerformanceMode = AAUDIO_PERFORMANCE_MODE_NONE; const aaudio_performance_mode_t requestedPerformanceMode = AAUDIO_PERFORMANCE_MODE_LOW_LATENCY; //aaudio_performance_mode_t requestedPerformanceMode = AAUDIO_PERFORMANCE_MODE_POWER_SAVING; const aaudio_sharing_mode_t requestedSharingMode = AAUDIO_SHARING_MODE_SHARED; //const aaudio_sharing_mode_t requestedSharingMode = AAUDIO_SHARING_MODE_EXCLUSIVE; //const aaudio_sharing_mode_t requestedSharingMode = AAUDIO_SHARING_MODE_SHARED; const aaudio_sharing_mode_t requestedSharingMode = AAUDIO_SHARING_MODE_EXCLUSIVE; aaudio_sharing_mode_t actualSharingMode; AAudioStream *aaudioStream = nullptr; Loading @@ -70,7 +70,7 @@ int main(int argc, char **argv) printf("%s - Monitor input level using AAudio\n", argv[0]); // AAudio_setMMapPolicy(AAUDIO_POLICY_ALWAYS); AAudio_setMMapPolicy(AAUDIO_POLICY_ALWAYS); recorder.setPerformanceMode(requestedPerformanceMode); recorder.setSharingMode(requestedSharingMode); Loading media/libaaudio/examples/write_sine/src/write_sine.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -27,15 +27,15 @@ #define SAMPLE_RATE 48000 #define NUM_SECONDS 4 #define MMAP_POLICY AAUDIO_UNSPECIFIED //#define MMAP_POLICY AAUDIO_UNSPECIFIED //#define MMAP_POLICY AAUDIO_POLICY_NEVER //#define MMAP_POLICY AAUDIO_POLICY_AUTO //#define MMAP_POLICY AAUDIO_POLICY_ALWAYS #define MMAP_POLICY AAUDIO_POLICY_ALWAYS #define REQUESTED_FORMAT AAUDIO_FORMAT_PCM_I16 #define REQUESTED_SHARING_MODE AAUDIO_SHARING_MODE_SHARED //#define REQUESTED_SHARING_MODE AAUDIO_SHARING_MODE_EXCLUSIVE //#define REQUESTED_SHARING_MODE AAUDIO_SHARING_MODE_SHARED #define REQUESTED_SHARING_MODE AAUDIO_SHARING_MODE_EXCLUSIVE int main(int argc, char **argv) Loading media/libaaudio/src/client/AudioStreamInternal.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ aaudio_result_t AudioStreamInternal::open(const AudioStreamBuilder &builder) { setSampleRate(configuration.getSampleRate()); setSamplesPerFrame(configuration.getSamplesPerFrame()); setDeviceId(configuration.getDeviceId()); setSharingMode(configuration.getSharingMode()); // Save device format so we can do format conversion and volume scaling together. mDeviceFormat = configuration.getAudioFormat(); Loading services/oboeservice/AAudioService.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -107,7 +107,7 @@ aaudio_handle_t AAudioService::openStream(const aaudio::AAudioStreamRequest &req } if (sharingMode == AAUDIO_SHARING_MODE_EXCLUSIVE) { serviceStream = new AAudioServiceStreamMMAP(); serviceStream = new AAudioServiceStreamMMAP(mCachedUserId); result = serviceStream->open(request, configurationOutput); if (result != AAUDIO_OK) { // fall back to using a shared stream Loading services/oboeservice/AAudioServiceStreamMMAP.cpp +25 −6 Original line number Diff line number Diff line Loading @@ -41,11 +41,12 @@ using namespace aaudio; * Service Stream that uses an MMAP buffer. */ AAudioServiceStreamMMAP::AAudioServiceStreamMMAP() AAudioServiceStreamMMAP::AAudioServiceStreamMMAP(uid_t serviceUid) : AAudioServiceStreamBase() , mMmapStreamCallback(new MyMmapStreamCallback(*this)) , mPreviousFrameCounter(0) , mMmapStream(nullptr) { , mMmapStream(nullptr) , mCachedUserId(serviceUid) { } AAudioServiceStreamMMAP::~AAudioServiceStreamMMAP() { Loading Loading @@ -153,10 +154,29 @@ aaudio_result_t AAudioServiceStreamMMAP::open(const aaudio::AAudioStreamRequest status); return AAUDIO_ERROR_UNAVAILABLE; } else { ALOGD("createMmapBuffer status %d shared_address = %p buffer_size %d burst_size %d", ALOGD("createMmapBuffer status %d shared_address = %p buffer_size %d burst_size %d" "Sharable FD: %s", status, mMmapBufferinfo.shared_memory_address, mMmapBufferinfo.buffer_size_frames, mMmapBufferinfo.burst_size_frames); abs(mMmapBufferinfo.buffer_size_frames), mMmapBufferinfo.burst_size_frames, mMmapBufferinfo.buffer_size_frames < 0 ? "Yes" : "No"); } mCapacityInFrames = mMmapBufferinfo.buffer_size_frames; // FIXME: the audio HAL indicates if the shared memory fd can be shared outside of audioserver // by returning a negative buffer size if (mCapacityInFrames < 0) { // Exclusive mode is possible from any client mCapacityInFrames = -mCapacityInFrames; } else { // exclusive mode is only possible if the final fd destination is inside audioserver if ((mMmapClient.clientUid != mCachedUserId) && configurationInput.getSharingMode() == AAUDIO_SHARING_MODE_EXCLUSIVE) { // Fallback is handled by caller but indicate what is possible in case // this is used in the future configurationOutput.setSharingMode(AAUDIO_SHARING_MODE_SHARED); return AAUDIO_ERROR_UNAVAILABLE; } } // Get information about the stream and pass it back to the caller. Loading @@ -166,7 +186,6 @@ aaudio_result_t AAudioServiceStreamMMAP::open(const aaudio::AAudioStreamRequest mAudioDataFileDescriptor = mMmapBufferinfo.shared_memory_fd; mFramesPerBurst = mMmapBufferinfo.burst_size_frames; mCapacityInFrames = mMmapBufferinfo.buffer_size_frames; mAudioFormat = AAudioConvert_androidToAAudioDataFormat(config.format); mSampleRate = config.sample_rate; Loading Loading
media/libaaudio/examples/input_monitor/src/input_monitor.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -48,8 +48,8 @@ int main(int argc, char **argv) //aaudio_performance_mode_t requestedPerformanceMode = AAUDIO_PERFORMANCE_MODE_NONE; const aaudio_performance_mode_t requestedPerformanceMode = AAUDIO_PERFORMANCE_MODE_LOW_LATENCY; //aaudio_performance_mode_t requestedPerformanceMode = AAUDIO_PERFORMANCE_MODE_POWER_SAVING; const aaudio_sharing_mode_t requestedSharingMode = AAUDIO_SHARING_MODE_SHARED; //const aaudio_sharing_mode_t requestedSharingMode = AAUDIO_SHARING_MODE_EXCLUSIVE; //const aaudio_sharing_mode_t requestedSharingMode = AAUDIO_SHARING_MODE_SHARED; const aaudio_sharing_mode_t requestedSharingMode = AAUDIO_SHARING_MODE_EXCLUSIVE; aaudio_sharing_mode_t actualSharingMode; AAudioStream *aaudioStream = nullptr; Loading @@ -70,7 +70,7 @@ int main(int argc, char **argv) printf("%s - Monitor input level using AAudio\n", argv[0]); // AAudio_setMMapPolicy(AAUDIO_POLICY_ALWAYS); AAudio_setMMapPolicy(AAUDIO_POLICY_ALWAYS); recorder.setPerformanceMode(requestedPerformanceMode); recorder.setSharingMode(requestedSharingMode); Loading
media/libaaudio/examples/write_sine/src/write_sine.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -27,15 +27,15 @@ #define SAMPLE_RATE 48000 #define NUM_SECONDS 4 #define MMAP_POLICY AAUDIO_UNSPECIFIED //#define MMAP_POLICY AAUDIO_UNSPECIFIED //#define MMAP_POLICY AAUDIO_POLICY_NEVER //#define MMAP_POLICY AAUDIO_POLICY_AUTO //#define MMAP_POLICY AAUDIO_POLICY_ALWAYS #define MMAP_POLICY AAUDIO_POLICY_ALWAYS #define REQUESTED_FORMAT AAUDIO_FORMAT_PCM_I16 #define REQUESTED_SHARING_MODE AAUDIO_SHARING_MODE_SHARED //#define REQUESTED_SHARING_MODE AAUDIO_SHARING_MODE_EXCLUSIVE //#define REQUESTED_SHARING_MODE AAUDIO_SHARING_MODE_SHARED #define REQUESTED_SHARING_MODE AAUDIO_SHARING_MODE_EXCLUSIVE int main(int argc, char **argv) Loading
media/libaaudio/src/client/AudioStreamInternal.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ aaudio_result_t AudioStreamInternal::open(const AudioStreamBuilder &builder) { setSampleRate(configuration.getSampleRate()); setSamplesPerFrame(configuration.getSamplesPerFrame()); setDeviceId(configuration.getDeviceId()); setSharingMode(configuration.getSharingMode()); // Save device format so we can do format conversion and volume scaling together. mDeviceFormat = configuration.getAudioFormat(); Loading
services/oboeservice/AAudioService.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -107,7 +107,7 @@ aaudio_handle_t AAudioService::openStream(const aaudio::AAudioStreamRequest &req } if (sharingMode == AAUDIO_SHARING_MODE_EXCLUSIVE) { serviceStream = new AAudioServiceStreamMMAP(); serviceStream = new AAudioServiceStreamMMAP(mCachedUserId); result = serviceStream->open(request, configurationOutput); if (result != AAUDIO_OK) { // fall back to using a shared stream Loading
services/oboeservice/AAudioServiceStreamMMAP.cpp +25 −6 Original line number Diff line number Diff line Loading @@ -41,11 +41,12 @@ using namespace aaudio; * Service Stream that uses an MMAP buffer. */ AAudioServiceStreamMMAP::AAudioServiceStreamMMAP() AAudioServiceStreamMMAP::AAudioServiceStreamMMAP(uid_t serviceUid) : AAudioServiceStreamBase() , mMmapStreamCallback(new MyMmapStreamCallback(*this)) , mPreviousFrameCounter(0) , mMmapStream(nullptr) { , mMmapStream(nullptr) , mCachedUserId(serviceUid) { } AAudioServiceStreamMMAP::~AAudioServiceStreamMMAP() { Loading Loading @@ -153,10 +154,29 @@ aaudio_result_t AAudioServiceStreamMMAP::open(const aaudio::AAudioStreamRequest status); return AAUDIO_ERROR_UNAVAILABLE; } else { ALOGD("createMmapBuffer status %d shared_address = %p buffer_size %d burst_size %d", ALOGD("createMmapBuffer status %d shared_address = %p buffer_size %d burst_size %d" "Sharable FD: %s", status, mMmapBufferinfo.shared_memory_address, mMmapBufferinfo.buffer_size_frames, mMmapBufferinfo.burst_size_frames); abs(mMmapBufferinfo.buffer_size_frames), mMmapBufferinfo.burst_size_frames, mMmapBufferinfo.buffer_size_frames < 0 ? "Yes" : "No"); } mCapacityInFrames = mMmapBufferinfo.buffer_size_frames; // FIXME: the audio HAL indicates if the shared memory fd can be shared outside of audioserver // by returning a negative buffer size if (mCapacityInFrames < 0) { // Exclusive mode is possible from any client mCapacityInFrames = -mCapacityInFrames; } else { // exclusive mode is only possible if the final fd destination is inside audioserver if ((mMmapClient.clientUid != mCachedUserId) && configurationInput.getSharingMode() == AAUDIO_SHARING_MODE_EXCLUSIVE) { // Fallback is handled by caller but indicate what is possible in case // this is used in the future configurationOutput.setSharingMode(AAUDIO_SHARING_MODE_SHARED); return AAUDIO_ERROR_UNAVAILABLE; } } // Get information about the stream and pass it back to the caller. Loading @@ -166,7 +186,6 @@ aaudio_result_t AAudioServiceStreamMMAP::open(const aaudio::AAudioStreamRequest mAudioDataFileDescriptor = mMmapBufferinfo.shared_memory_fd; mFramesPerBurst = mMmapBufferinfo.burst_size_frames; mCapacityInFrames = mMmapBufferinfo.buffer_size_frames; mAudioFormat = AAudioConvert_androidToAAudioDataFormat(config.format); mSampleRate = config.sample_rate; Loading