Loading media/libaudioclient/AudioRecord.cpp +2 −12 Original line number Diff line number Diff line Loading @@ -130,11 +130,7 @@ status_t AudioRecord::getMetrics(mediametrics::Item * &item) } AudioRecord::AudioRecord(const AttributionSourceState &client) : mActive(false), mStatus(NO_INIT), mClientAttributionSource(client), mSessionId(AUDIO_SESSION_ALLOCATE), mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(SP_DEFAULT), mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE), mRoutedDeviceId(AUDIO_PORT_HANDLE_NONE), mSelectedMicDirection(MIC_DIRECTION_UNSPECIFIED), mSelectedMicFieldDimension(MIC_FIELD_DIMENSION_DEFAULT) : mClientAttributionSource(client) { } Loading @@ -154,13 +150,7 @@ AudioRecord::AudioRecord( audio_port_handle_t selectedDeviceId, audio_microphone_direction_t selectedMicDirection, float microphoneFieldDimension) : mActive(false), mStatus(NO_INIT), mClientAttributionSource(client), mSessionId(AUDIO_SESSION_ALLOCATE), mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(SP_DEFAULT), mProxy(nullptr) : mClientAttributionSource(client) { uid_t uid = VALUE_OR_FATAL(aidl2legacy_int32_t_uid_t(mClientAttributionSource.uid)); pid_t pid = VALUE_OR_FATAL(aidl2legacy_int32_t_pid_t(mClientAttributionSource.pid)); Loading media/libaudioclient/include/media/AudioRecord.h +16 −13 Original line number Diff line number Diff line Loading @@ -681,7 +681,7 @@ private: // Current client state: false = stopped, true = active. Protected by mLock. If more states // are added, consider changing this to enum State { ... } mState as in AudioTrack. bool mActive; bool mActive = false; // for client callback handler Loading @@ -708,7 +708,7 @@ private: Modulo<uint32_t> mNewPosition; // in frames uint32_t mUpdatePeriod; // in frames, zero means no EVENT_NEW_POS status_t mStatus; status_t mStatus = NO_INIT; android::content::AttributionSourceState mClientAttributionSource; // Owner's attribution source Loading Loading @@ -736,8 +736,8 @@ private: // held to read or write those bits reliably. audio_input_flags_t mOrigFlags; // as specified in constructor or set(), const audio_session_t mSessionId; audio_port_handle_t mPortId; // Id from Audio Policy Manager audio_session_t mSessionId = AUDIO_SESSION_ALLOCATE; audio_port_handle_t mPortId = AUDIO_PORT_HANDLE_NONE; /** * mLogSessionId is a string identifying this AudioRecord for the metrics service. Loading @@ -756,9 +756,9 @@ private: sp<IMemory> mBufferMemory; audio_io_handle_t mInput = AUDIO_IO_HANDLE_NONE; // from AudioSystem::getInputforAttr() int mPreviousPriority; // before start() SchedPolicy mPreviousSchedulingGroup; bool mAwaitBoost; // thread should wait for priority boost before running int mPreviousPriority = ANDROID_PRIORITY_NORMAL; // before start() SchedPolicy mPreviousSchedulingGroup = SP_DEFAULT; bool mAwaitBoost = false; // thread should wait for priority boost before running // The proxy should only be referenced while a lock is held because the proxy isn't // multi-thread safe. Loading Loading @@ -799,14 +799,17 @@ private: // For Device Selection API // a value of AUDIO_PORT_HANDLE_NONE indicated default (AudioPolicyManager) routing. audio_port_handle_t mSelectedDeviceId; // Device requested by the application. audio_port_handle_t mRoutedDeviceId; // Device actually selected by audio policy manager: // May not match the app selection depending on other // activity and connected devices // Device requested by the application. audio_port_handle_t mSelectedDeviceId = AUDIO_PORT_HANDLE_NONE; // Device actually selected by AudioPolicyManager: This may not match the app // selection depending on other activity and connected devices audio_port_handle_t mRoutedDeviceId = AUDIO_PORT_HANDLE_NONE; wp<AudioSystem::AudioDeviceCallback> mDeviceCallback; audio_microphone_direction_t mSelectedMicDirection; float mSelectedMicFieldDimension; audio_microphone_direction_t mSelectedMicDirection = MIC_DIRECTION_UNSPECIFIED; float mSelectedMicFieldDimension = MIC_FIELD_DIMENSION_DEFAULT; int32_t mMaxSharedAudioHistoryMs = 0; std::string mSharedAudioPackageName = {}; Loading media/libaudioclient/tests/audiorecord_tests.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,25 @@ using namespace android; // Test that the basic constructor returns an object that doesn't crash // on stop() or destruction. TEST(AudioRecordTestBasic, EmptyAudioRecord) { AttributionSourceState attributionSource; attributionSource.packageName = "AudioRecordTest"; attributionSource.uid = VALUE_OR_FATAL(legacy2aidl_uid_t_int32_t(getuid())); attributionSource.pid = VALUE_OR_FATAL(legacy2aidl_pid_t_int32_t(getpid())); attributionSource.token = sp<BBinder>::make(); const auto ar = sp<AudioRecord>::make(attributionSource); // test key commands on an unset AudioRecord. EXPECT_EQ(NO_INIT, ar->initCheck()); EXPECT_EQ(true, ar->stopped()); // just don't crash. ar->stop(); } class AudioRecordTest : public ::testing::Test { public: void SetUp() override { Loading Loading
media/libaudioclient/AudioRecord.cpp +2 −12 Original line number Diff line number Diff line Loading @@ -130,11 +130,7 @@ status_t AudioRecord::getMetrics(mediametrics::Item * &item) } AudioRecord::AudioRecord(const AttributionSourceState &client) : mActive(false), mStatus(NO_INIT), mClientAttributionSource(client), mSessionId(AUDIO_SESSION_ALLOCATE), mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(SP_DEFAULT), mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE), mRoutedDeviceId(AUDIO_PORT_HANDLE_NONE), mSelectedMicDirection(MIC_DIRECTION_UNSPECIFIED), mSelectedMicFieldDimension(MIC_FIELD_DIMENSION_DEFAULT) : mClientAttributionSource(client) { } Loading @@ -154,13 +150,7 @@ AudioRecord::AudioRecord( audio_port_handle_t selectedDeviceId, audio_microphone_direction_t selectedMicDirection, float microphoneFieldDimension) : mActive(false), mStatus(NO_INIT), mClientAttributionSource(client), mSessionId(AUDIO_SESSION_ALLOCATE), mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(SP_DEFAULT), mProxy(nullptr) : mClientAttributionSource(client) { uid_t uid = VALUE_OR_FATAL(aidl2legacy_int32_t_uid_t(mClientAttributionSource.uid)); pid_t pid = VALUE_OR_FATAL(aidl2legacy_int32_t_pid_t(mClientAttributionSource.pid)); Loading
media/libaudioclient/include/media/AudioRecord.h +16 −13 Original line number Diff line number Diff line Loading @@ -681,7 +681,7 @@ private: // Current client state: false = stopped, true = active. Protected by mLock. If more states // are added, consider changing this to enum State { ... } mState as in AudioTrack. bool mActive; bool mActive = false; // for client callback handler Loading @@ -708,7 +708,7 @@ private: Modulo<uint32_t> mNewPosition; // in frames uint32_t mUpdatePeriod; // in frames, zero means no EVENT_NEW_POS status_t mStatus; status_t mStatus = NO_INIT; android::content::AttributionSourceState mClientAttributionSource; // Owner's attribution source Loading Loading @@ -736,8 +736,8 @@ private: // held to read or write those bits reliably. audio_input_flags_t mOrigFlags; // as specified in constructor or set(), const audio_session_t mSessionId; audio_port_handle_t mPortId; // Id from Audio Policy Manager audio_session_t mSessionId = AUDIO_SESSION_ALLOCATE; audio_port_handle_t mPortId = AUDIO_PORT_HANDLE_NONE; /** * mLogSessionId is a string identifying this AudioRecord for the metrics service. Loading @@ -756,9 +756,9 @@ private: sp<IMemory> mBufferMemory; audio_io_handle_t mInput = AUDIO_IO_HANDLE_NONE; // from AudioSystem::getInputforAttr() int mPreviousPriority; // before start() SchedPolicy mPreviousSchedulingGroup; bool mAwaitBoost; // thread should wait for priority boost before running int mPreviousPriority = ANDROID_PRIORITY_NORMAL; // before start() SchedPolicy mPreviousSchedulingGroup = SP_DEFAULT; bool mAwaitBoost = false; // thread should wait for priority boost before running // The proxy should only be referenced while a lock is held because the proxy isn't // multi-thread safe. Loading Loading @@ -799,14 +799,17 @@ private: // For Device Selection API // a value of AUDIO_PORT_HANDLE_NONE indicated default (AudioPolicyManager) routing. audio_port_handle_t mSelectedDeviceId; // Device requested by the application. audio_port_handle_t mRoutedDeviceId; // Device actually selected by audio policy manager: // May not match the app selection depending on other // activity and connected devices // Device requested by the application. audio_port_handle_t mSelectedDeviceId = AUDIO_PORT_HANDLE_NONE; // Device actually selected by AudioPolicyManager: This may not match the app // selection depending on other activity and connected devices audio_port_handle_t mRoutedDeviceId = AUDIO_PORT_HANDLE_NONE; wp<AudioSystem::AudioDeviceCallback> mDeviceCallback; audio_microphone_direction_t mSelectedMicDirection; float mSelectedMicFieldDimension; audio_microphone_direction_t mSelectedMicDirection = MIC_DIRECTION_UNSPECIFIED; float mSelectedMicFieldDimension = MIC_FIELD_DIMENSION_DEFAULT; int32_t mMaxSharedAudioHistoryMs = 0; std::string mSharedAudioPackageName = {}; Loading
media/libaudioclient/tests/audiorecord_tests.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,25 @@ using namespace android; // Test that the basic constructor returns an object that doesn't crash // on stop() or destruction. TEST(AudioRecordTestBasic, EmptyAudioRecord) { AttributionSourceState attributionSource; attributionSource.packageName = "AudioRecordTest"; attributionSource.uid = VALUE_OR_FATAL(legacy2aidl_uid_t_int32_t(getuid())); attributionSource.pid = VALUE_OR_FATAL(legacy2aidl_pid_t_int32_t(getpid())); attributionSource.token = sp<BBinder>::make(); const auto ar = sp<AudioRecord>::make(attributionSource); // test key commands on an unset AudioRecord. EXPECT_EQ(NO_INIT, ar->initCheck()); EXPECT_EQ(true, ar->stopped()); // just don't crash. ar->stop(); } class AudioRecordTest : public ::testing::Test { public: void SetUp() override { Loading