Loading media/libaudioclient/AudioRecord.cpp +26 −3 Original line number Diff line number Diff line Loading @@ -235,7 +235,8 @@ status_t AudioRecord::set( const audio_attributes_t* pAttributes, audio_port_handle_t selectedDeviceId, audio_microphone_direction_t selectedMicDirection, float microphoneFieldDimension) float microphoneFieldDimension, int32_t maxSharedAudioHistoryMs) { status_t status = NO_ERROR; uint32_t channelCount; Loading Loading @@ -268,6 +269,7 @@ status_t AudioRecord::set( mSelectedDeviceId = selectedDeviceId; mSelectedMicDirection = selectedMicDirection; mSelectedMicFieldDimension = microphoneFieldDimension; mMaxSharedAudioHistoryMs = maxSharedAudioHistoryMs; switch (transferType) { case TRANSFER_DEFAULT: Loading Loading @@ -816,6 +818,7 @@ status_t AudioRecord::createRecord_l(const Modulo<uint32_t> &epoch) input.selectedDeviceId = mSelectedDeviceId; input.sessionId = mSessionId; originalSessionId = mSessionId; input.maxSharedAudioHistoryMs = mMaxSharedAudioHistoryMs; do { media::CreateRecordResponse response; Loading @@ -837,7 +840,7 @@ status_t AudioRecord::createRecord_l(const Modulo<uint32_t> &epoch) usleep((20 + rand() % 30) * 10000); } while (1); ALOG_ASSERT(record != 0); ALOG_ASSERT(output.audioRecord != 0); // AudioFlinger now owns the reference to the I/O handle, // so we are no longer responsible for releasing it. Loading Loading @@ -925,6 +928,10 @@ status_t AudioRecord::createRecord_l(const Modulo<uint32_t> &epoch) AudioSystem::addAudioDeviceCallback(this, output.inputId, output.portId); } if (!mSharedAudioPackageName.empty()) { mAudioRecord->shareAudioHistory(mSharedAudioPackageName, mSharedAudioStartMs); } mPortId = output.portId; // We retain a copy of the I/O handle, but don't own the reference mInput = output.inputId; Loading Loading @@ -1589,6 +1596,22 @@ void AudioRecord::setLogSessionId(const char *logSessionId) .record(); } status_t AudioRecord::shareAudioHistory(const std::string& sharedPackageName, int64_t sharedStartMs) { AutoMutex lock(mLock); if (mAudioRecord == 0) { return NO_INIT; } status_t status = statusTFromBinderStatus( mAudioRecord->shareAudioHistory(sharedPackageName, sharedStartMs)); if (status == NO_ERROR) { mSharedAudioPackageName = sharedPackageName; mSharedAudioStartMs = sharedStartMs; } return status; } // ========================================================================= void AudioRecord::DeathNotifier::binderDied(const wp<IBinder>& who __unused) Loading media/libaudioclient/IAudioFlinger.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -138,6 +138,8 @@ IAudioFlinger::CreateRecordInput::toAidl() const { aidl.config = VALUE_OR_RETURN(legacy2aidl_audio_config_base_t_AudioConfigBase(config)); aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient_AudioClient(clientInfo)); aidl.riid = VALUE_OR_RETURN(legacy2aidl_audio_unique_id_t_int32_t(riid)); aidl.maxSharedAudioHistoryMs = VALUE_OR_RETURN( convertIntegral<int32_t>(maxSharedAudioHistoryMs)); aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(flags)); aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount)); aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount)); Loading @@ -151,10 +153,13 @@ ConversionResult<IAudioFlinger::CreateRecordInput> IAudioFlinger::CreateRecordInput::fromAidl( const media::CreateRecordRequest& aidl) { IAudioFlinger::CreateRecordInput legacy; legacy.attr = VALUE_OR_RETURN(aidl2legacy_AudioAttributesInternal_audio_attributes_t(aidl.attr)); legacy.attr = VALUE_OR_RETURN( aidl2legacy_AudioAttributesInternal_audio_attributes_t(aidl.attr)); legacy.config = VALUE_OR_RETURN(aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.config)); legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient_AudioClient(aidl.clientInfo)); legacy.riid = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_unique_id_t(aidl.riid)); legacy.maxSharedAudioHistoryMs = VALUE_OR_RETURN( convertIntegral<int32_t>(aidl.maxSharedAudioHistoryMs)); legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_input_flags_t_mask(aidl.flags)); legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount)); legacy.notificationFrameCount = VALUE_OR_RETURN( Loading media/libaudioclient/aidl/android/media/CreateRecordRequest.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ parcelable CreateRecordRequest { AudioClient clientInfo; /** Interpreted as audio_unique_id_t. */ int riid; int maxSharedAudioHistoryMs; /** Bitmask, indexed by AudioInputFlags. */ int flags; long frameCount; Loading media/libaudioclient/aidl/android/media/IAudioRecord.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -48,4 +48,6 @@ interface IAudioRecord { /* Set the microphone zoom (for processing). */ void setPreferredMicrophoneFieldDimension(float zoom); void shareAudioHistory(@utf8InCpp String sharedAudioPackageName, long sharedAudioStartMs); } media/libaudioclient/include/media/AudioRecord.h +10 −1 Original line number Diff line number Diff line Loading @@ -241,7 +241,8 @@ public: audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE, audio_microphone_direction_t selectedMicDirection = MIC_DIRECTION_UNSPECIFIED, float selectedMicFieldDimension = MIC_FIELD_DIMENSION_DEFAULT); float selectedMicFieldDimension = MIC_FIELD_DIMENSION_DEFAULT, int32_t maxSharedAudioHistoryMs = 0); /* Result of constructing the AudioRecord. This must be checked for successful initialization * before using any AudioRecord API (except for set()), because using Loading Loading @@ -596,6 +597,10 @@ public: */ void setLogSessionId(const char *logSessionId); status_t shareAudioHistory(const std::string& sharedPackageName, int64_t sharedStartMs); /* * Dumps the state of an audio record. */ Loading Loading @@ -779,6 +784,10 @@ private: audio_microphone_direction_t mSelectedMicDirection; float mSelectedMicFieldDimension; int32_t mMaxSharedAudioHistoryMs = 0; std::string mSharedAudioPackageName = {}; int64_t mSharedAudioStartMs = 0; private: class MediaMetrics { public: Loading Loading
media/libaudioclient/AudioRecord.cpp +26 −3 Original line number Diff line number Diff line Loading @@ -235,7 +235,8 @@ status_t AudioRecord::set( const audio_attributes_t* pAttributes, audio_port_handle_t selectedDeviceId, audio_microphone_direction_t selectedMicDirection, float microphoneFieldDimension) float microphoneFieldDimension, int32_t maxSharedAudioHistoryMs) { status_t status = NO_ERROR; uint32_t channelCount; Loading Loading @@ -268,6 +269,7 @@ status_t AudioRecord::set( mSelectedDeviceId = selectedDeviceId; mSelectedMicDirection = selectedMicDirection; mSelectedMicFieldDimension = microphoneFieldDimension; mMaxSharedAudioHistoryMs = maxSharedAudioHistoryMs; switch (transferType) { case TRANSFER_DEFAULT: Loading Loading @@ -816,6 +818,7 @@ status_t AudioRecord::createRecord_l(const Modulo<uint32_t> &epoch) input.selectedDeviceId = mSelectedDeviceId; input.sessionId = mSessionId; originalSessionId = mSessionId; input.maxSharedAudioHistoryMs = mMaxSharedAudioHistoryMs; do { media::CreateRecordResponse response; Loading @@ -837,7 +840,7 @@ status_t AudioRecord::createRecord_l(const Modulo<uint32_t> &epoch) usleep((20 + rand() % 30) * 10000); } while (1); ALOG_ASSERT(record != 0); ALOG_ASSERT(output.audioRecord != 0); // AudioFlinger now owns the reference to the I/O handle, // so we are no longer responsible for releasing it. Loading Loading @@ -925,6 +928,10 @@ status_t AudioRecord::createRecord_l(const Modulo<uint32_t> &epoch) AudioSystem::addAudioDeviceCallback(this, output.inputId, output.portId); } if (!mSharedAudioPackageName.empty()) { mAudioRecord->shareAudioHistory(mSharedAudioPackageName, mSharedAudioStartMs); } mPortId = output.portId; // We retain a copy of the I/O handle, but don't own the reference mInput = output.inputId; Loading Loading @@ -1589,6 +1596,22 @@ void AudioRecord::setLogSessionId(const char *logSessionId) .record(); } status_t AudioRecord::shareAudioHistory(const std::string& sharedPackageName, int64_t sharedStartMs) { AutoMutex lock(mLock); if (mAudioRecord == 0) { return NO_INIT; } status_t status = statusTFromBinderStatus( mAudioRecord->shareAudioHistory(sharedPackageName, sharedStartMs)); if (status == NO_ERROR) { mSharedAudioPackageName = sharedPackageName; mSharedAudioStartMs = sharedStartMs; } return status; } // ========================================================================= void AudioRecord::DeathNotifier::binderDied(const wp<IBinder>& who __unused) Loading
media/libaudioclient/IAudioFlinger.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -138,6 +138,8 @@ IAudioFlinger::CreateRecordInput::toAidl() const { aidl.config = VALUE_OR_RETURN(legacy2aidl_audio_config_base_t_AudioConfigBase(config)); aidl.clientInfo = VALUE_OR_RETURN(legacy2aidl_AudioClient_AudioClient(clientInfo)); aidl.riid = VALUE_OR_RETURN(legacy2aidl_audio_unique_id_t_int32_t(riid)); aidl.maxSharedAudioHistoryMs = VALUE_OR_RETURN( convertIntegral<int32_t>(maxSharedAudioHistoryMs)); aidl.flags = VALUE_OR_RETURN(legacy2aidl_audio_input_flags_t_int32_t_mask(flags)); aidl.frameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(frameCount)); aidl.notificationFrameCount = VALUE_OR_RETURN(convertIntegral<int64_t>(notificationFrameCount)); Loading @@ -151,10 +153,13 @@ ConversionResult<IAudioFlinger::CreateRecordInput> IAudioFlinger::CreateRecordInput::fromAidl( const media::CreateRecordRequest& aidl) { IAudioFlinger::CreateRecordInput legacy; legacy.attr = VALUE_OR_RETURN(aidl2legacy_AudioAttributesInternal_audio_attributes_t(aidl.attr)); legacy.attr = VALUE_OR_RETURN( aidl2legacy_AudioAttributesInternal_audio_attributes_t(aidl.attr)); legacy.config = VALUE_OR_RETURN(aidl2legacy_AudioConfigBase_audio_config_base_t(aidl.config)); legacy.clientInfo = VALUE_OR_RETURN(aidl2legacy_AudioClient_AudioClient(aidl.clientInfo)); legacy.riid = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_unique_id_t(aidl.riid)); legacy.maxSharedAudioHistoryMs = VALUE_OR_RETURN( convertIntegral<int32_t>(aidl.maxSharedAudioHistoryMs)); legacy.flags = VALUE_OR_RETURN(aidl2legacy_int32_t_audio_input_flags_t_mask(aidl.flags)); legacy.frameCount = VALUE_OR_RETURN(convertIntegral<size_t>(aidl.frameCount)); legacy.notificationFrameCount = VALUE_OR_RETURN( Loading
media/libaudioclient/aidl/android/media/CreateRecordRequest.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ parcelable CreateRecordRequest { AudioClient clientInfo; /** Interpreted as audio_unique_id_t. */ int riid; int maxSharedAudioHistoryMs; /** Bitmask, indexed by AudioInputFlags. */ int flags; long frameCount; Loading
media/libaudioclient/aidl/android/media/IAudioRecord.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -48,4 +48,6 @@ interface IAudioRecord { /* Set the microphone zoom (for processing). */ void setPreferredMicrophoneFieldDimension(float zoom); void shareAudioHistory(@utf8InCpp String sharedAudioPackageName, long sharedAudioStartMs); }
media/libaudioclient/include/media/AudioRecord.h +10 −1 Original line number Diff line number Diff line Loading @@ -241,7 +241,8 @@ public: audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE, audio_microphone_direction_t selectedMicDirection = MIC_DIRECTION_UNSPECIFIED, float selectedMicFieldDimension = MIC_FIELD_DIMENSION_DEFAULT); float selectedMicFieldDimension = MIC_FIELD_DIMENSION_DEFAULT, int32_t maxSharedAudioHistoryMs = 0); /* Result of constructing the AudioRecord. This must be checked for successful initialization * before using any AudioRecord API (except for set()), because using Loading Loading @@ -596,6 +597,10 @@ public: */ void setLogSessionId(const char *logSessionId); status_t shareAudioHistory(const std::string& sharedPackageName, int64_t sharedStartMs); /* * Dumps the state of an audio record. */ Loading Loading @@ -779,6 +784,10 @@ private: audio_microphone_direction_t mSelectedMicDirection; float mSelectedMicFieldDimension; int32_t mMaxSharedAudioHistoryMs = 0; std::string mSharedAudioPackageName = {}; int64_t mSharedAudioStartMs = 0; private: class MediaMetrics { public: Loading