diff options
| -rw-r--r-- | include/audiomanager/AudioManager.h | 10 | ||||
| -rw-r--r-- | include/audiomanager/IAudioManager.h | 4 | ||||
| -rw-r--r-- | services/audiomanager/IAudioManager.cpp | 24 |
3 files changed, 37 insertions, 1 deletions
diff --git a/include/audiomanager/AudioManager.h b/include/audiomanager/AudioManager.h index 009dc5242c..639df7a531 100644 --- a/include/audiomanager/AudioManager.h +++ b/include/audiomanager/AudioManager.h @@ -20,7 +20,6 @@ namespace android { // must be kept in sync with definitions in AudioPlaybackConfiguration.java - #define PLAYER_PIID_INVALID -1 typedef enum { @@ -40,6 +39,15 @@ typedef enum { PLAYER_STATE_STOPPED = 4, } player_state_t; +// must be kept in sync with definitions in AudioManager.java +#define RECORD_RIID_INVALID -1 + +typedef enum { + RECORDER_STATE_UNKNOWN = -1, + RECORDER_STATE_STARTED = 0, + RECORDER_STATE_STOPPED = 1, +} recorder_state_t; + }; // namespace android #endif // ANDROID_AUDIOMANAGER_H diff --git a/include/audiomanager/IAudioManager.h b/include/audiomanager/IAudioManager.h index d279bbd045..d0642c6bbb 100644 --- a/include/audiomanager/IAudioManager.h +++ b/include/audiomanager/IAudioManager.h @@ -36,6 +36,8 @@ public: PLAYER_ATTRIBUTES = IBinder::FIRST_CALL_TRANSACTION + 1, PLAYER_EVENT = IBinder::FIRST_CALL_TRANSACTION + 2, RELEASE_PLAYER = IBinder::FIRST_CALL_TRANSACTION + 3, + TRACK_RECORDER = IBinder::FIRST_CALL_TRANSACTION + 4, + RECORDER_EVENT = IBinder::FIRST_CALL_TRANSACTION + 5, }; DECLARE_META_INTERFACE(AudioManager) @@ -48,6 +50,8 @@ public: audio_content_type_t content)= 0; /*oneway*/ virtual status_t playerEvent(audio_unique_id_t piid, player_state_t event) = 0; /*oneway*/ virtual status_t releasePlayer(audio_unique_id_t piid) = 0; + virtual audio_unique_id_t trackRecorder(const sp<IBinder>& recorder) = 0; + /*oneway*/ virtual status_t recorderEvent(audio_unique_id_t riid, recorder_state_t event) = 0; }; // ---------------------------------------------------------------------------- diff --git a/services/audiomanager/IAudioManager.cpp b/services/audiomanager/IAudioManager.cpp index b9b07064e2..f5d4826307 100644 --- a/services/audiomanager/IAudioManager.cpp +++ b/services/audiomanager/IAudioManager.cpp @@ -98,6 +98,30 @@ public: data.writeInt32((int32_t) piid); return remote()->transact(RELEASE_PLAYER, data, &reply, IBinder::FLAG_ONEWAY); } + + virtual audio_unique_id_t trackRecorder(const sp<IBinder>& recorder) { + Parcel data, reply; + data.writeInterfaceToken(IAudioManager::getInterfaceDescriptor()); + data.writeStrongBinder(recorder); + // get new RIId in reply + const status_t res = remote()->transact(TRACK_RECORDER, data, &reply, 0); + if (res != OK || reply.readExceptionCode() != 0) { + ALOGE("trackRecorder() failed, riid is %d", RECORD_RIID_INVALID); + return RECORD_RIID_INVALID; + } else { + const audio_unique_id_t riid = (audio_unique_id_t) reply.readInt32(); + ALOGV("trackRecorder() returned riid %d", riid); + return riid; + } + } + + virtual status_t recorderEvent(audio_unique_id_t riid, recorder_state_t event) { + Parcel data, reply; + data.writeInterfaceToken(IAudioManager::getInterfaceDescriptor()); + data.writeInt32((int32_t) riid); + data.writeInt32((int32_t) event); + return remote()->transact(RECORDER_EVENT, data, &reply, IBinder::FLAG_ONEWAY); + } }; IMPLEMENT_META_INTERFACE(AudioManager, "android.media.IAudioService"); |