Loading include/media/AudioRecord.h +6 −0 Original line number Diff line number Diff line Loading @@ -178,6 +178,8 @@ public: int sessionId = AUDIO_SESSION_ALLOCATE, transfer_type transferType = TRANSFER_DEFAULT, audio_input_flags_t flags = AUDIO_INPUT_FLAG_NONE, int uid = -1, pid_t pid = -1, const audio_attributes_t* pAttributes = NULL); /* Terminates the AudioRecord and unregisters it from AudioFlinger. Loading Loading @@ -214,6 +216,8 @@ public: int sessionId = AUDIO_SESSION_ALLOCATE, transfer_type transferType = TRANSFER_DEFAULT, audio_input_flags_t flags = AUDIO_INPUT_FLAG_NONE, int uid = -1, pid_t pid = -1, const audio_attributes_t* pAttributes = NULL); /* Result of constructing the AudioRecord. This must be checked for successful initialization Loading Loading @@ -577,6 +581,8 @@ private: sp<DeathNotifier> mDeathNotifier; uint32_t mSequence; // incremented for each new IAudioRecord attempt int mClientUid; pid_t mClientPid; audio_attributes_t mAttributes; // For Device Selection API Loading include/media/IAudioFlinger.h +1 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ public: size_t *pFrameCount, track_flags_t *flags, pid_t tid, // -1 means unused, otherwise must be valid non-0 int clientUid, int *sessionId, size_t *notificationFrames, sp<IMemory>& cblk, Loading media/libmedia/AudioRecord.cpp +22 −3 Original line number Diff line number Diff line Loading @@ -85,6 +85,8 @@ AudioRecord::AudioRecord( int sessionId, transfer_type transferType, audio_input_flags_t flags, int uid, pid_t pid, const audio_attributes_t* pAttributes) : mStatus(NO_INIT), mOpPackageName(opPackageName), Loading @@ -96,7 +98,7 @@ AudioRecord::AudioRecord( { mStatus = set(inputSource, sampleRate, format, channelMask, frameCount, cbf, user, notificationFrames, false /*threadCanCallJava*/, sessionId, transferType, flags, pAttributes); uid, pid, pAttributes); } AudioRecord::~AudioRecord() Loading Loading @@ -136,12 +138,15 @@ status_t AudioRecord::set( int sessionId, transfer_type transferType, audio_input_flags_t flags, int uid, pid_t pid, const audio_attributes_t* pAttributes) { ALOGV("set(): inputSource %d, sampleRate %u, format %#x, channelMask %#x, frameCount %zu, " "notificationFrames %u, sessionId %d, transferType %d, flags %#x, opPackageName %s", "notificationFrames %u, sessionId %d, transferType %d, flags %#x, opPackageName %s " "uid %d, pid %d", inputSource, sampleRate, format, channelMask, frameCount, notificationFrames, sessionId, transferType, flags, String8(mOpPackageName).string()); sessionId, transferType, flags, String8(mOpPackageName).string(), uid, pid); switch (transferType) { case TRANSFER_DEFAULT: Loading Loading @@ -228,6 +233,19 @@ status_t AudioRecord::set( } ALOGV("set(): mSessionId %d", mSessionId); int callingpid = IPCThreadState::self()->getCallingPid(); int mypid = getpid(); if (uid == -1 || (callingpid != mypid)) { mClientUid = IPCThreadState::self()->getCallingUid(); } else { mClientUid = uid; } if (pid == -1 || (callingpid != mypid)) { mClientPid = callingpid; } else { mClientPid = pid; } mFlags = flags; mCbf = cbf; Loading Loading @@ -513,6 +531,7 @@ status_t AudioRecord::openRecord_l(size_t epoch, const String16& opPackageName) &temp, &trackFlags, tid, mClientUid, &mSessionId, ¬ificationFrames, iMem, Loading media/libmedia/IAudioFlinger.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -178,6 +178,7 @@ public: size_t *pFrameCount, track_flags_t *flags, pid_t tid, int clientUid, int *sessionId, size_t *notificationFrames, sp<IMemory>& cblk, Loading @@ -197,6 +198,7 @@ public: track_flags_t lFlags = flags != NULL ? *flags : (track_flags_t) TRACK_DEFAULT; data.writeInt32(lFlags); data.writeInt32((int32_t) tid); data.writeInt32((int32_t) clientUid); int lSessionId = AUDIO_SESSION_ALLOCATE; if (sessionId != NULL) { lSessionId = *sessionId; Loading Loading @@ -958,6 +960,7 @@ status_t BnAudioFlinger::onTransact( size_t frameCount = data.readInt64(); track_flags_t flags = (track_flags_t) data.readInt32(); pid_t tid = (pid_t) data.readInt32(); int clientUid = data.readInt32(); int sessionId = data.readInt32(); size_t notificationFrames = data.readInt64(); sp<IMemory> cblk; Loading @@ -965,7 +968,7 @@ status_t BnAudioFlinger::onTransact( status_t status; sp<IAudioRecord> record = openRecord(input, sampleRate, format, channelMask, opPackageName, &frameCount, &flags, tid, &sessionId, ¬ificationFrames, cblk, buffers, &status); clientUid, &sessionId, ¬ificationFrames, cblk, buffers, &status); LOG_ALWAYS_FATAL_IF((record != 0) != (status == NO_ERROR)); reply->writeInt64(frameCount); reply->writeInt32(flags); Loading services/audioflinger/AudioFlinger.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -1425,6 +1425,7 @@ sp<IAudioRecord> AudioFlinger::openRecord( size_t *frameCount, IAudioFlinger::track_flags_t *flags, pid_t tid, int clientUid, int *sessionId, size_t *notificationFrames, sp<IMemory>& cblk, Loading Loading @@ -1494,8 +1495,7 @@ sp<IAudioRecord> AudioFlinger::openRecord( // TODO: the uid should be passed in as a parameter to openRecord recordTrack = thread->createRecordTrack_l(client, sampleRate, format, channelMask, frameCount, lSessionId, notificationFrames, IPCThreadState::self()->getCallingUid(), flags, tid, &lStatus); clientUid, flags, tid, &lStatus); LOG_ALWAYS_FATAL_IF((lStatus == NO_ERROR) && (recordTrack == 0)); if (lStatus == NO_ERROR) { Loading Loading
include/media/AudioRecord.h +6 −0 Original line number Diff line number Diff line Loading @@ -178,6 +178,8 @@ public: int sessionId = AUDIO_SESSION_ALLOCATE, transfer_type transferType = TRANSFER_DEFAULT, audio_input_flags_t flags = AUDIO_INPUT_FLAG_NONE, int uid = -1, pid_t pid = -1, const audio_attributes_t* pAttributes = NULL); /* Terminates the AudioRecord and unregisters it from AudioFlinger. Loading Loading @@ -214,6 +216,8 @@ public: int sessionId = AUDIO_SESSION_ALLOCATE, transfer_type transferType = TRANSFER_DEFAULT, audio_input_flags_t flags = AUDIO_INPUT_FLAG_NONE, int uid = -1, pid_t pid = -1, const audio_attributes_t* pAttributes = NULL); /* Result of constructing the AudioRecord. This must be checked for successful initialization Loading Loading @@ -577,6 +581,8 @@ private: sp<DeathNotifier> mDeathNotifier; uint32_t mSequence; // incremented for each new IAudioRecord attempt int mClientUid; pid_t mClientPid; audio_attributes_t mAttributes; // For Device Selection API Loading
include/media/IAudioFlinger.h +1 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ public: size_t *pFrameCount, track_flags_t *flags, pid_t tid, // -1 means unused, otherwise must be valid non-0 int clientUid, int *sessionId, size_t *notificationFrames, sp<IMemory>& cblk, Loading
media/libmedia/AudioRecord.cpp +22 −3 Original line number Diff line number Diff line Loading @@ -85,6 +85,8 @@ AudioRecord::AudioRecord( int sessionId, transfer_type transferType, audio_input_flags_t flags, int uid, pid_t pid, const audio_attributes_t* pAttributes) : mStatus(NO_INIT), mOpPackageName(opPackageName), Loading @@ -96,7 +98,7 @@ AudioRecord::AudioRecord( { mStatus = set(inputSource, sampleRate, format, channelMask, frameCount, cbf, user, notificationFrames, false /*threadCanCallJava*/, sessionId, transferType, flags, pAttributes); uid, pid, pAttributes); } AudioRecord::~AudioRecord() Loading Loading @@ -136,12 +138,15 @@ status_t AudioRecord::set( int sessionId, transfer_type transferType, audio_input_flags_t flags, int uid, pid_t pid, const audio_attributes_t* pAttributes) { ALOGV("set(): inputSource %d, sampleRate %u, format %#x, channelMask %#x, frameCount %zu, " "notificationFrames %u, sessionId %d, transferType %d, flags %#x, opPackageName %s", "notificationFrames %u, sessionId %d, transferType %d, flags %#x, opPackageName %s " "uid %d, pid %d", inputSource, sampleRate, format, channelMask, frameCount, notificationFrames, sessionId, transferType, flags, String8(mOpPackageName).string()); sessionId, transferType, flags, String8(mOpPackageName).string(), uid, pid); switch (transferType) { case TRANSFER_DEFAULT: Loading Loading @@ -228,6 +233,19 @@ status_t AudioRecord::set( } ALOGV("set(): mSessionId %d", mSessionId); int callingpid = IPCThreadState::self()->getCallingPid(); int mypid = getpid(); if (uid == -1 || (callingpid != mypid)) { mClientUid = IPCThreadState::self()->getCallingUid(); } else { mClientUid = uid; } if (pid == -1 || (callingpid != mypid)) { mClientPid = callingpid; } else { mClientPid = pid; } mFlags = flags; mCbf = cbf; Loading Loading @@ -513,6 +531,7 @@ status_t AudioRecord::openRecord_l(size_t epoch, const String16& opPackageName) &temp, &trackFlags, tid, mClientUid, &mSessionId, ¬ificationFrames, iMem, Loading
media/libmedia/IAudioFlinger.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -178,6 +178,7 @@ public: size_t *pFrameCount, track_flags_t *flags, pid_t tid, int clientUid, int *sessionId, size_t *notificationFrames, sp<IMemory>& cblk, Loading @@ -197,6 +198,7 @@ public: track_flags_t lFlags = flags != NULL ? *flags : (track_flags_t) TRACK_DEFAULT; data.writeInt32(lFlags); data.writeInt32((int32_t) tid); data.writeInt32((int32_t) clientUid); int lSessionId = AUDIO_SESSION_ALLOCATE; if (sessionId != NULL) { lSessionId = *sessionId; Loading Loading @@ -958,6 +960,7 @@ status_t BnAudioFlinger::onTransact( size_t frameCount = data.readInt64(); track_flags_t flags = (track_flags_t) data.readInt32(); pid_t tid = (pid_t) data.readInt32(); int clientUid = data.readInt32(); int sessionId = data.readInt32(); size_t notificationFrames = data.readInt64(); sp<IMemory> cblk; Loading @@ -965,7 +968,7 @@ status_t BnAudioFlinger::onTransact( status_t status; sp<IAudioRecord> record = openRecord(input, sampleRate, format, channelMask, opPackageName, &frameCount, &flags, tid, &sessionId, ¬ificationFrames, cblk, buffers, &status); clientUid, &sessionId, ¬ificationFrames, cblk, buffers, &status); LOG_ALWAYS_FATAL_IF((record != 0) != (status == NO_ERROR)); reply->writeInt64(frameCount); reply->writeInt32(flags); Loading
services/audioflinger/AudioFlinger.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -1425,6 +1425,7 @@ sp<IAudioRecord> AudioFlinger::openRecord( size_t *frameCount, IAudioFlinger::track_flags_t *flags, pid_t tid, int clientUid, int *sessionId, size_t *notificationFrames, sp<IMemory>& cblk, Loading Loading @@ -1494,8 +1495,7 @@ sp<IAudioRecord> AudioFlinger::openRecord( // TODO: the uid should be passed in as a parameter to openRecord recordTrack = thread->createRecordTrack_l(client, sampleRate, format, channelMask, frameCount, lSessionId, notificationFrames, IPCThreadState::self()->getCallingUid(), flags, tid, &lStatus); clientUid, flags, tid, &lStatus); LOG_ALWAYS_FATAL_IF((lStatus == NO_ERROR) && (recordTrack == 0)); if (lStatus == NO_ERROR) { Loading