Loading media/libaudioclient/Android.bp +10 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ cc_library_shared { // AIDL files for audioclient interfaces // The headers for these interfaces will be available to any modules that // include libaudioclient, at the path "aidl/package/path/BnFoo.h" ":libaudioclient_aidl_callback", ":libaudioclient_aidl_private", ":libaudioclient_aidl", Loading Loading @@ -138,3 +139,12 @@ filegroup { ], path: "aidl", } // AIDL interface for audio track callback filegroup { name: "libaudioclient_aidl_callback", srcs: [ "aidl/android/media/IAudioTrackCallback.aidl", ], path: "aidl", } media/libaudioclient/AudioTrack.cpp +26 −3 Original line number Diff line number Diff line Loading @@ -217,7 +217,8 @@ AudioTrack::AudioTrack() mPreviousSchedulingGroup(SP_DEFAULT), mPausedPosition(0), mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE), mRoutedDeviceId(AUDIO_PORT_HANDLE_NONE) mRoutedDeviceId(AUDIO_PORT_HANDLE_NONE), mAudioTrackCallback(new AudioTrackCallback()) { mAttributes.content_type = AUDIO_CONTENT_TYPE_UNKNOWN; mAttributes.usage = AUDIO_USAGE_UNKNOWN; Loading Loading @@ -248,7 +249,8 @@ AudioTrack::AudioTrack( mState(STATE_STOPPED), mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(SP_DEFAULT), mPausedPosition(0) mPausedPosition(0), mAudioTrackCallback(new AudioTrackCallback()) { mAttributes = AUDIO_ATTRIBUTES_INITIALIZER; Loading Loading @@ -281,7 +283,8 @@ AudioTrack::AudioTrack( mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(SP_DEFAULT), mPausedPosition(0), mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE) mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE), mAudioTrackCallback(new AudioTrackCallback()) { mAttributes = AUDIO_ATTRIBUTES_INITIALIZER; Loading Loading @@ -1527,6 +1530,7 @@ status_t AudioTrack::createTrack_l() input.notificationFrameCount = mNotificationFramesReq; input.selectedDeviceId = mSelectedDeviceId; input.sessionId = mSessionId; input.audioTrackCallback = mAudioTrackCallback; IAudioFlinger::CreateTrackOutput output; Loading Loading @@ -3376,4 +3380,23 @@ void AudioTrack::AudioTrackThread::pauseInternal(nsecs_t ns) mPausedNs = ns; } binder::Status AudioTrack::AudioTrackCallback::onCodecFormatChanged( const std::vector<uint8_t>& audioMetadata) { AutoMutex _l(mAudioTrackCbLock); sp<media::IAudioTrackCallback> callback = mCallback.promote(); if (callback.get() != nullptr) { callback->onCodecFormatChanged(audioMetadata); } else { mCallback.clear(); } return binder::Status::ok(); } void AudioTrack::AudioTrackCallback::setAudioTrackCallback( const sp<media::IAudioTrackCallback> &callback) { AutoMutex lock(mAudioTrackCbLock); mCallback = callback; } } // namespace android media/libaudioclient/aidl/android/media/IAudioTrackCallback.aidl 0 → 100644 +24 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.media; /** * @hide */ interface IAudioTrackCallback { oneway void onCodecFormatChanged(in byte[] audioMetadata); } media/libaudioclient/include/media/AudioTrack.h +19 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,9 @@ #include <media/Modulo.h> #include <utils/threads.h> #include "android/media/BnAudioTrackCallback.h" #include "android/media/IAudioTrackCallback.h" namespace android { // ---------------------------------------------------------------------------- Loading Loading @@ -885,8 +888,6 @@ public: virtual void onAudioDeviceUpdate(audio_io_handle_t audioIo, audio_port_handle_t deviceId); /* Obtain the pending duration in milliseconds for playback of pure PCM * (mixable without embedded timing) data remaining in AudioTrack. * Loading Loading @@ -933,6 +934,10 @@ public: */ audio_port_handle_t getPortId() const { return mPortId; }; void setAudioTrackCallback(const sp<media::IAudioTrackCallback>& callback) { mAudioTrackCallback->setAudioTrackCallback(callback); } protected: /* copying audio tracks is not allowed */ AudioTrack(const AudioTrack& other); Loading Loading @@ -1254,6 +1259,18 @@ private: }; MediaMetrics mMediaMetrics; std::string mMetricsId; // GUARDED_BY(mLock), could change in createTrack_l(). private: class AudioTrackCallback : public media::BnAudioTrackCallback { public: binder::Status onCodecFormatChanged(const std::vector<uint8_t>& audioMetadata) override; void setAudioTrackCallback(const sp<media::IAudioTrackCallback>& callback); private: Mutex mAudioTrackCbLock; wp<media::IAudioTrackCallback> mCallback; }; sp<AudioTrackCallback> mAudioTrackCallback; }; }; // namespace android Loading media/libaudioclient/include/media/IAudioFlinger.h +5 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ #include <vector> #include "android/media/IAudioRecord.h" #include "android/media/IAudioTrackCallback.h" namespace android { Loading Loading @@ -83,6 +84,8 @@ public: } notificationsPerBuffer = parcel->readInt32(); speed = parcel->readFloat(); audioTrackCallback = interface_cast<media::IAudioTrackCallback>( parcel->readStrongBinder()); /* input/output arguments*/ (void)parcel->read(&flags, sizeof(audio_output_flags_t)); Loading @@ -107,6 +110,7 @@ public: } (void)parcel->writeInt32(notificationsPerBuffer); (void)parcel->writeFloat(speed); (void)parcel->writeStrongBinder(IInterface::asBinder(audioTrackCallback)); /* input/output arguments*/ (void)parcel->write(&flags, sizeof(audio_output_flags_t)); Loading @@ -125,6 +129,7 @@ public: sp<IMemory> sharedBuffer; uint32_t notificationsPerBuffer; float speed; sp<media::IAudioTrackCallback> audioTrackCallback; /* input/output */ audio_output_flags_t flags; Loading Loading
media/libaudioclient/Android.bp +10 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ cc_library_shared { // AIDL files for audioclient interfaces // The headers for these interfaces will be available to any modules that // include libaudioclient, at the path "aidl/package/path/BnFoo.h" ":libaudioclient_aidl_callback", ":libaudioclient_aidl_private", ":libaudioclient_aidl", Loading Loading @@ -138,3 +139,12 @@ filegroup { ], path: "aidl", } // AIDL interface for audio track callback filegroup { name: "libaudioclient_aidl_callback", srcs: [ "aidl/android/media/IAudioTrackCallback.aidl", ], path: "aidl", }
media/libaudioclient/AudioTrack.cpp +26 −3 Original line number Diff line number Diff line Loading @@ -217,7 +217,8 @@ AudioTrack::AudioTrack() mPreviousSchedulingGroup(SP_DEFAULT), mPausedPosition(0), mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE), mRoutedDeviceId(AUDIO_PORT_HANDLE_NONE) mRoutedDeviceId(AUDIO_PORT_HANDLE_NONE), mAudioTrackCallback(new AudioTrackCallback()) { mAttributes.content_type = AUDIO_CONTENT_TYPE_UNKNOWN; mAttributes.usage = AUDIO_USAGE_UNKNOWN; Loading Loading @@ -248,7 +249,8 @@ AudioTrack::AudioTrack( mState(STATE_STOPPED), mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(SP_DEFAULT), mPausedPosition(0) mPausedPosition(0), mAudioTrackCallback(new AudioTrackCallback()) { mAttributes = AUDIO_ATTRIBUTES_INITIALIZER; Loading Loading @@ -281,7 +283,8 @@ AudioTrack::AudioTrack( mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(SP_DEFAULT), mPausedPosition(0), mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE) mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE), mAudioTrackCallback(new AudioTrackCallback()) { mAttributes = AUDIO_ATTRIBUTES_INITIALIZER; Loading Loading @@ -1527,6 +1530,7 @@ status_t AudioTrack::createTrack_l() input.notificationFrameCount = mNotificationFramesReq; input.selectedDeviceId = mSelectedDeviceId; input.sessionId = mSessionId; input.audioTrackCallback = mAudioTrackCallback; IAudioFlinger::CreateTrackOutput output; Loading Loading @@ -3376,4 +3380,23 @@ void AudioTrack::AudioTrackThread::pauseInternal(nsecs_t ns) mPausedNs = ns; } binder::Status AudioTrack::AudioTrackCallback::onCodecFormatChanged( const std::vector<uint8_t>& audioMetadata) { AutoMutex _l(mAudioTrackCbLock); sp<media::IAudioTrackCallback> callback = mCallback.promote(); if (callback.get() != nullptr) { callback->onCodecFormatChanged(audioMetadata); } else { mCallback.clear(); } return binder::Status::ok(); } void AudioTrack::AudioTrackCallback::setAudioTrackCallback( const sp<media::IAudioTrackCallback> &callback) { AutoMutex lock(mAudioTrackCbLock); mCallback = callback; } } // namespace android
media/libaudioclient/aidl/android/media/IAudioTrackCallback.aidl 0 → 100644 +24 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.media; /** * @hide */ interface IAudioTrackCallback { oneway void onCodecFormatChanged(in byte[] audioMetadata); }
media/libaudioclient/include/media/AudioTrack.h +19 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,9 @@ #include <media/Modulo.h> #include <utils/threads.h> #include "android/media/BnAudioTrackCallback.h" #include "android/media/IAudioTrackCallback.h" namespace android { // ---------------------------------------------------------------------------- Loading Loading @@ -885,8 +888,6 @@ public: virtual void onAudioDeviceUpdate(audio_io_handle_t audioIo, audio_port_handle_t deviceId); /* Obtain the pending duration in milliseconds for playback of pure PCM * (mixable without embedded timing) data remaining in AudioTrack. * Loading Loading @@ -933,6 +934,10 @@ public: */ audio_port_handle_t getPortId() const { return mPortId; }; void setAudioTrackCallback(const sp<media::IAudioTrackCallback>& callback) { mAudioTrackCallback->setAudioTrackCallback(callback); } protected: /* copying audio tracks is not allowed */ AudioTrack(const AudioTrack& other); Loading Loading @@ -1254,6 +1259,18 @@ private: }; MediaMetrics mMediaMetrics; std::string mMetricsId; // GUARDED_BY(mLock), could change in createTrack_l(). private: class AudioTrackCallback : public media::BnAudioTrackCallback { public: binder::Status onCodecFormatChanged(const std::vector<uint8_t>& audioMetadata) override; void setAudioTrackCallback(const sp<media::IAudioTrackCallback>& callback); private: Mutex mAudioTrackCbLock; wp<media::IAudioTrackCallback> mCallback; }; sp<AudioTrackCallback> mAudioTrackCallback; }; }; // namespace android Loading
media/libaudioclient/include/media/IAudioFlinger.h +5 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ #include <vector> #include "android/media/IAudioRecord.h" #include "android/media/IAudioTrackCallback.h" namespace android { Loading Loading @@ -83,6 +84,8 @@ public: } notificationsPerBuffer = parcel->readInt32(); speed = parcel->readFloat(); audioTrackCallback = interface_cast<media::IAudioTrackCallback>( parcel->readStrongBinder()); /* input/output arguments*/ (void)parcel->read(&flags, sizeof(audio_output_flags_t)); Loading @@ -107,6 +110,7 @@ public: } (void)parcel->writeInt32(notificationsPerBuffer); (void)parcel->writeFloat(speed); (void)parcel->writeStrongBinder(IInterface::asBinder(audioTrackCallback)); /* input/output arguments*/ (void)parcel->write(&flags, sizeof(audio_output_flags_t)); Loading @@ -125,6 +129,7 @@ public: sp<IMemory> sharedBuffer; uint32_t notificationsPerBuffer; float speed; sp<media::IAudioTrackCallback> audioTrackCallback; /* input/output */ audio_output_flags_t flags; Loading