From 8cf3a0788df2ee184b498086b1b8da322eeadcca Mon Sep 17 00:00:00 2001 From: Ivan Lozano Date: Wed, 9 Aug 2017 09:01:33 -0700 Subject: [PATCH] Generate the IPlayer interface with AIDL. This removes the manually rolled IPlayer implementation and instead uses an aidl generated implementation. The IPlayer aidl file is moved from frameworks/base/. Test: run cts --module CtsMediaTestCases Bug: 64223827 Change-Id: Ia609f7ba1cc6f71ce919d6174dd8b5e0e1b05575 --- include/media/VolumeShaper.h | 42 ++++++++++--------- media/libaaudio/src/Android.mk | 3 +- media/libaudioclient/Android.bp | 3 +- media/libaudioclient/AudioTrack.cpp | 4 +- media/libaudioclient/IAudioTrack.cpp | 8 ++-- media/libaudioclient/PlayerBase.cpp | 33 ++++++++------- media/libaudioclient/TrackPlayerBase.cpp | 18 +++++--- .../aidl/android/media/IPlayer.aidl | 34 +++++++++++++++ .../media/VolumeShaper/Configuration.aidl | 19 +++++++++ .../android/media/VolumeShaper/Operation.aidl | 19 +++++++++ .../android/media/VolumeShaper/State.aidl | 19 +++++++++ .../libaudioclient/include/media/AudioTrack.h | 10 ++--- .../include/media/IAudioTrack.h | 8 ++-- .../libaudioclient/include/media/PlayerBase.h | 28 ++++++------- .../include/media/TrackPlayerBase.h | 6 +-- media/libmedia/IMediaPlayer.cpp | 8 ++-- media/libmedia/include/media/IMediaPlayer.h | 8 ++-- media/libmedia/include/media/mediaplayer.h | 8 ++-- media/libmedia/mediaplayer.cpp | 2 + .../MediaPlayerService.cpp | 3 +- .../MediaPlayerService.h | 18 ++++---- .../include/MediaPlayerInterface.h | 8 ++-- services/audioflinger/AudioFlinger.h | 8 ++-- services/audioflinger/PlaybackTracks.h | 12 +++--- services/audioflinger/Tracks.cpp | 3 +- 25 files changed, 223 insertions(+), 109 deletions(-) create mode 100644 media/libaudioclient/aidl/android/media/IPlayer.aidl create mode 100644 media/libaudioclient/aidl/android/media/VolumeShaper/Configuration.aidl create mode 100644 media/libaudioclient/aidl/android/media/VolumeShaper/Operation.aidl create mode 100644 media/libaudioclient/aidl/android/media/VolumeShaper/State.aidl diff --git a/include/media/VolumeShaper.h b/include/media/VolumeShaper.h index 302641ff14..a3aaecef65 100644 --- a/include/media/VolumeShaper.h +++ b/include/media/VolumeShaper.h @@ -37,6 +37,8 @@ namespace android { +namespace media { + // The native VolumeShaper class mirrors the java VolumeShaper class; // in addition, the native class contains implementation for actual operation. // @@ -101,7 +103,7 @@ public: * See "frameworks/base/media/java/android/media/VolumeShaper.java" for * details on the Java implementation. */ - class Configuration : public Interpolator, public RefBase { + class Configuration : public Interpolator, public RefBase, public Parcelable { public: // Must match with VolumeShaper.java in frameworks/base. enum Type : int32_t { @@ -283,7 +285,7 @@ public: } // The parcel layout must match VolumeShaper.java - status_t writeToParcel(Parcel *parcel) const { + status_t writeToParcel(Parcel *parcel) const override { if (parcel == nullptr) return BAD_VALUE; return parcel->writeInt32((int32_t)mType) ?: parcel->writeInt32(mId) @@ -294,17 +296,17 @@ public: ?: Interpolator::writeToParcel(parcel); } - status_t readFromParcel(const Parcel &parcel) { + status_t readFromParcel(const Parcel *parcel) override { int32_t type, optionFlags; - return parcel.readInt32(&type) + return parcel->readInt32(&type) ?: setType((Type)type) - ?: parcel.readInt32(&mId) + ?: parcel->readInt32(&mId) ?: mType == TYPE_ID ? NO_ERROR - : parcel.readInt32(&optionFlags) + : parcel->readInt32(&optionFlags) ?: setOptionFlags((OptionFlag)optionFlags) - ?: parcel.readDouble(&mDurationMs) - ?: Interpolator::readFromParcel(parcel) + ?: parcel->readDouble(&mDurationMs) + ?: Interpolator::readFromParcel(*parcel) ?: checkCurve(); } @@ -336,7 +338,7 @@ public: * See "frameworks/base/media/java/android/media/VolumeShaper.java" for * details on the Java implementation. */ - class Operation : public RefBase { + class Operation : public RefBase, public Parcelable { public: // Must match with VolumeShaper.java. enum Flag : int32_t { @@ -418,18 +420,18 @@ public: return NO_ERROR; } - status_t writeToParcel(Parcel *parcel) const { + status_t writeToParcel(Parcel *parcel) const override { if (parcel == nullptr) return BAD_VALUE; return parcel->writeInt32((int32_t)mFlags) ?: parcel->writeInt32(mReplaceId) ?: parcel->writeFloat(mXOffset); } - status_t readFromParcel(const Parcel &parcel) { + status_t readFromParcel(const Parcel *parcel) override { int32_t flags; - return parcel.readInt32(&flags) - ?: parcel.readInt32(&mReplaceId) - ?: parcel.readFloat(&mXOffset) + return parcel->readInt32(&flags) + ?: parcel->readInt32(&mReplaceId) + ?: parcel->readFloat(&mXOffset) ?: setFlags((Flag)flags); } @@ -455,7 +457,7 @@ public: * See "frameworks/base/media/java/android/media/VolumeShaper.java" for * details on the Java implementation. */ - class State : public RefBase { + class State : public RefBase, public Parcelable { public: State(T volume, S xOffset) : mVolume(volume) @@ -481,15 +483,15 @@ public: mXOffset = xOffset; } - status_t writeToParcel(Parcel *parcel) const { + status_t writeToParcel(Parcel *parcel) const override { if (parcel == nullptr) return BAD_VALUE; return parcel->writeFloat(mVolume) ?: parcel->writeFloat(mXOffset); } - status_t readFromParcel(const Parcel &parcel) { - return parcel.readFloat(&mVolume) - ?: parcel.readFloat(&mXOffset); + status_t readFromParcel(const Parcel *parcel) override { + return parcel->readFloat(&mVolume) + ?: parcel->readFloat(&mXOffset); } std::string toString() const { @@ -1020,6 +1022,8 @@ private: std::list mVolumeShapers; // list provides stable iterators on erase }; // VolumeHandler +} // namespace media + } // namespace android #pragma pop_macro("LOG_TAG") diff --git a/media/libaaudio/src/Android.mk b/media/libaaudio/src/Android.mk index c13fa67faa..112a1927ff 100644 --- a/media/libaaudio/src/Android.mk +++ b/media/libaaudio/src/Android.mk @@ -60,7 +60,8 @@ LOCAL_SRC_FILES = \ binding/RingBufferParcelable.cpp \ binding/SharedMemoryParcelable.cpp \ binding/SharedRegionParcelable.cpp \ - ../../libaudioclient/aidl/android/media/IAudioRecord.aidl + ../../libaudioclient/aidl/android/media/IAudioRecord.aidl \ + ../../libaudioclient/aidl/android/media/IPlayer.aidl LOCAL_CFLAGS += -Wno-unused-parameter -Wall -Werror diff --git a/media/libaudioclient/Android.bp b/media/libaudioclient/Android.bp index a02311bcbc..98e8d95a0e 100644 --- a/media/libaudioclient/Android.bp +++ b/media/libaudioclient/Android.bp @@ -20,6 +20,7 @@ cc_library_shared { // The headers for these interfaces will be available to any modules that // include libaudioclient, at the path "aidl/package/path/BnFoo.h" "aidl/android/media/IAudioRecord.aidl", + "aidl/android/media/IPlayer.aidl", "AudioEffect.cpp", "AudioPolicy.cpp", @@ -49,7 +50,7 @@ cc_library_shared { ], export_shared_lib_headers: ["libbinder"], - local_include_dirs: ["include/media"], + local_include_dirs: ["include/media", "aidl"], header_libs: ["libaudioclient_headers"], export_header_lib_headers: ["libaudioclient_headers"], diff --git a/media/libaudioclient/AudioTrack.cpp b/media/libaudioclient/AudioTrack.cpp index 31e1e2bfef..07875ac99b 100644 --- a/media/libaudioclient/AudioTrack.cpp +++ b/media/libaudioclient/AudioTrack.cpp @@ -39,6 +39,8 @@ static const int kMaxLoopCountNotifications = 32; namespace android { // --------------------------------------------------------------------------- +using media::VolumeShaper; + // TODO: Move to a separate .h template @@ -553,7 +555,7 @@ status_t AudioTrack::set( mFramesWritten = 0; mFramesWrittenServerOffset = 0; mFramesWrittenAtRestore = -1; // -1 is a unique initializer. - mVolumeHandler = new VolumeHandler(); + mVolumeHandler = new media::VolumeHandler(); return NO_ERROR; } diff --git a/media/libaudioclient/IAudioTrack.cpp b/media/libaudioclient/IAudioTrack.cpp index 79e864d100..adff05787a 100644 --- a/media/libaudioclient/IAudioTrack.cpp +++ b/media/libaudioclient/IAudioTrack.cpp @@ -28,6 +28,8 @@ namespace android { +using media::VolumeShaper; + enum { GET_CBLK = IBinder::FIRST_CALL_TRANSACTION, START, @@ -185,7 +187,7 @@ public: return nullptr; } sp state = new VolumeShaper::State; - status = state->readFromParcel(reply); + status = state->readFromParcel(&reply); if (status != NO_ERROR) { return nullptr; } @@ -263,12 +265,12 @@ status_t BnAudioTrack::onTransact( status_t status = data.readInt32(&present); if (status == NO_ERROR && present != 0) { configuration = new VolumeShaper::Configuration(); - status = configuration->readFromParcel(data); + status = configuration->readFromParcel(&data); } status = status ?: data.readInt32(&present); if (status == NO_ERROR && present != 0) { operation = new VolumeShaper::Operation(); - status = operation->readFromParcel(data); + status = operation->readFromParcel(&data); } if (status == NO_ERROR) { status = (status_t)applyVolumeShaper(configuration, operation); diff --git a/media/libaudioclient/PlayerBase.cpp b/media/libaudioclient/PlayerBase.cpp index 7868318686..b0c68e5b5b 100644 --- a/media/libaudioclient/PlayerBase.cpp +++ b/media/libaudioclient/PlayerBase.cpp @@ -22,6 +22,8 @@ namespace android { +using media::VolumeShaper; + //-------------------------------------------------------------------------------------------------- PlayerBase::PlayerBase() : BnPlayer(), mPanMultiplierL(1.0f), mPanMultiplierR(1.0f), @@ -117,23 +119,26 @@ status_t PlayerBase::stopWithStatus() { //------------------------------------------------------------------------------ // Implementation of IPlayer -void PlayerBase::start() { +binder::Status PlayerBase::start() { ALOGD("PlayerBase::start() from IPlayer"); (void)startWithStatus(); + return binder::Status::ok(); } -void PlayerBase::pause() { +binder::Status PlayerBase::pause() { ALOGD("PlayerBase::pause() from IPlayer"); (void)pauseWithStatus(); + return binder::Status::ok(); } -void PlayerBase::stop() { +binder::Status PlayerBase::stop() { ALOGD("PlayerBase::stop() from IPlayer"); (void)stopWithStatus(); + return binder::Status::ok(); } -void PlayerBase::setVolume(float vol) { +binder::Status PlayerBase::setVolume(float vol) { ALOGD("PlayerBase::setVolume() from IPlayer"); { Mutex::Autolock _l(mSettingsLock); @@ -144,9 +149,10 @@ void PlayerBase::setVolume(float vol) { if (status != NO_ERROR) { ALOGW("PlayerBase::setVolume() error %d", status); } + return binder::Status::fromStatusT(status); } -void PlayerBase::setPan(float pan) { +binder::Status PlayerBase::setPan(float pan) { ALOGD("PlayerBase::setPan() from IPlayer"); { Mutex::Autolock _l(mSettingsLock); @@ -163,22 +169,19 @@ void PlayerBase::setPan(float pan) { if (status != NO_ERROR) { ALOGW("PlayerBase::setPan() error %d", status); } + return binder::Status::fromStatusT(status); } -void PlayerBase::setStartDelayMs(int32_t delayMs __unused) { +binder::Status PlayerBase::setStartDelayMs(int32_t delayMs __unused) { ALOGW("setStartDelay() is not supported"); + return binder::Status::ok(); } -void PlayerBase::applyVolumeShaper( - const sp& configuration __unused, - const sp& operation __unused) { +binder::Status PlayerBase::applyVolumeShaper( + const VolumeShaper::Configuration& configuration __unused, + const VolumeShaper::Operation& operation __unused) { ALOGW("applyVolumeShaper() is not supported"); -} - -status_t PlayerBase::onTransact( - uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) -{ - return BnPlayer::onTransact(code, data, reply, flags); + return binder::Status::ok(); } } // namespace android diff --git a/media/libaudioclient/TrackPlayerBase.cpp b/media/libaudioclient/TrackPlayerBase.cpp index 48cd803d31..0a914fc03b 100644 --- a/media/libaudioclient/TrackPlayerBase.cpp +++ b/media/libaudioclient/TrackPlayerBase.cpp @@ -18,6 +18,8 @@ namespace android { +using media::VolumeShaper; + //-------------------------------------------------------------------------------------------------- TrackPlayerBase::TrackPlayerBase() : PlayerBase(), mPlayerVolumeL(1.0f), mPlayerVolumeR(1.0f) @@ -103,18 +105,24 @@ status_t TrackPlayerBase::doSetVolume() { } -void TrackPlayerBase::applyVolumeShaper( - const sp& configuration, - const sp& operation) { +binder::Status TrackPlayerBase::applyVolumeShaper( + const VolumeShaper::Configuration& configuration, + const VolumeShaper::Operation& operation) { + + sp spConfiguration = new VolumeShaper::Configuration(configuration); + sp spOperation = new VolumeShaper::Operation(operation); + if (mAudioTrack != 0) { ALOGD("TrackPlayerBase::applyVolumeShaper() from IPlayer"); - VolumeShaper::Status status = mAudioTrack->applyVolumeShaper(configuration, operation); + VolumeShaper::Status status = mAudioTrack->applyVolumeShaper(spConfiguration, spOperation); if (status < 0) { // a non-negative value is the volume shaper id. ALOGE("TrackPlayerBase::applyVolumeShaper() failed with status %d", status); } + return binder::Status::fromStatusT(status); } else { ALOGD("TrackPlayerBase::applyVolumeShaper()" - " no AudioTrack for volume control from IPlayer"); + " no AudioTrack for volume control from IPlayer"); + return binder::Status::ok(); } } diff --git a/media/libaudioclient/aidl/android/media/IPlayer.aidl b/media/libaudioclient/aidl/android/media/IPlayer.aidl new file mode 100644 index 0000000000..a90fcdd51e --- /dev/null +++ b/media/libaudioclient/aidl/android/media/IPlayer.aidl @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2016 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; + +import android.media.VolumeShaper.Configuration; +import android.media.VolumeShaper.Operation; + +/** + * @hide + */ +interface IPlayer { + oneway void start(); + oneway void pause(); + oneway void stop(); + oneway void setVolume(float vol); + oneway void setPan(float pan); + oneway void setStartDelayMs(int delayMs); + oneway void applyVolumeShaper(in Configuration configuration, + in Operation operation); +} diff --git a/media/libaudioclient/aidl/android/media/VolumeShaper/Configuration.aidl b/media/libaudioclient/aidl/android/media/VolumeShaper/Configuration.aidl new file mode 100644 index 0000000000..fd0e60f5b7 --- /dev/null +++ b/media/libaudioclient/aidl/android/media/VolumeShaper/Configuration.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2017 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.VolumeShaper; + +parcelable Configuration cpp_header "media/VolumeShaper.h"; diff --git a/media/libaudioclient/aidl/android/media/VolumeShaper/Operation.aidl b/media/libaudioclient/aidl/android/media/VolumeShaper/Operation.aidl new file mode 100644 index 0000000000..4290d9d947 --- /dev/null +++ b/media/libaudioclient/aidl/android/media/VolumeShaper/Operation.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2017 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.VolumeShaper; + +parcelable Operation cpp_header "media/VolumeShaper.h"; diff --git a/media/libaudioclient/aidl/android/media/VolumeShaper/State.aidl b/media/libaudioclient/aidl/android/media/VolumeShaper/State.aidl new file mode 100644 index 0000000000..f6a22b8613 --- /dev/null +++ b/media/libaudioclient/aidl/android/media/VolumeShaper/State.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2017 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.VolumeShaper; + +parcelable State cpp_header "media/VolumeShaper.h"; diff --git a/media/libaudioclient/include/media/AudioTrack.h b/media/libaudioclient/include/media/AudioTrack.h index b168fc90c3..014df20a3a 100644 --- a/media/libaudioclient/include/media/AudioTrack.h +++ b/media/libaudioclient/include/media/AudioTrack.h @@ -744,12 +744,12 @@ public: status_t setParameters(const String8& keyValuePairs); /* Sets the volume shaper object */ - VolumeShaper::Status applyVolumeShaper( - const sp& configuration, - const sp& operation); + media::VolumeShaper::Status applyVolumeShaper( + const sp& configuration, + const sp& operation); /* Gets the volume shaper state */ - sp getVolumeShaperState(int id); + sp getVolumeShaperState(int id); /* Get parameters */ String8 getParameters(const String8& keys); @@ -1146,7 +1146,7 @@ protected: // May not match the app selection depending on other // activity and connected devices. - sp mVolumeHandler; + sp mVolumeHandler; private: class DeathNotifier : public IBinder::DeathRecipient { diff --git a/media/libaudioclient/include/media/IAudioTrack.h b/media/libaudioclient/include/media/IAudioTrack.h index 27a62d65d2..94afe3ce66 100644 --- a/media/libaudioclient/include/media/IAudioTrack.h +++ b/media/libaudioclient/include/media/IAudioTrack.h @@ -77,12 +77,12 @@ public: virtual void signal() = 0; /* Sets the volume shaper */ - virtual VolumeShaper::Status applyVolumeShaper( - const sp& configuration, - const sp& operation) = 0; + virtual media::VolumeShaper::Status applyVolumeShaper( + const sp& configuration, + const sp& operation) = 0; /* gets the volume shaper state */ - virtual sp getVolumeShaperState(int id) = 0; + virtual sp getVolumeShaperState(int id) = 0; }; // ---------------------------------------------------------------------------- diff --git a/media/libaudioclient/include/media/PlayerBase.h b/media/libaudioclient/include/media/PlayerBase.h index e63090b725..e7a8abc310 100644 --- a/media/libaudioclient/include/media/PlayerBase.h +++ b/media/libaudioclient/include/media/PlayerBase.h @@ -17,35 +17,31 @@ #ifndef __ANDROID_PLAYER_BASE_H__ #define __ANDROID_PLAYER_BASE_H__ -#include #include #include +#include "android/media/BnPlayer.h" namespace android { -class PlayerBase : public BnPlayer +class PlayerBase : public ::android::media::BnPlayer { public: explicit PlayerBase(); - virtual ~PlayerBase(); + virtual ~PlayerBase() override; virtual void destroy() = 0; //IPlayer implementation - virtual void start(); - virtual void pause(); - virtual void stop(); - virtual void setVolume(float vol); - virtual void setPan(float pan); - virtual void setStartDelayMs(int32_t delayMs); - virtual void applyVolumeShaper( - const sp& configuration, - const sp& operation) override; - - virtual status_t onTransact( - uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags); - + virtual binder::Status start() override; + virtual binder::Status pause() override; + virtual binder::Status stop() override; + virtual binder::Status setVolume(float vol) override; + virtual binder::Status setPan(float pan) override; + virtual binder::Status setStartDelayMs(int32_t delayMs) override; + virtual binder::Status applyVolumeShaper( + const media::VolumeShaper::Configuration& configuration, + const media::VolumeShaper::Operation& operation) override; status_t startWithStatus(); status_t pauseWithStatus(); diff --git a/media/libaudioclient/include/media/TrackPlayerBase.h b/media/libaudioclient/include/media/TrackPlayerBase.h index 2d113c05a2..66e9b3bf20 100644 --- a/media/libaudioclient/include/media/TrackPlayerBase.h +++ b/media/libaudioclient/include/media/TrackPlayerBase.h @@ -32,9 +32,9 @@ public: virtual void destroy(); //IPlayer implementation - virtual void applyVolumeShaper( - const sp& configuration, - const sp& operation); + virtual binder::Status applyVolumeShaper( + const media::VolumeShaper::Configuration& configuration, + const media::VolumeShaper::Operation& operation); //FIXME move to protected field, so far made public to minimize changes to AudioTrack logic sp mAudioTrack; diff --git a/media/libmedia/IMediaPlayer.cpp b/media/libmedia/IMediaPlayer.cpp index 3996227ae3..cda3b3a1ca 100644 --- a/media/libmedia/IMediaPlayer.cpp +++ b/media/libmedia/IMediaPlayer.cpp @@ -35,6 +35,8 @@ namespace android { +using media::VolumeShaper; + enum { DISCONNECT = IBinder::FIRST_CALL_TRANSACTION, SET_DATA_SOURCE_URL, @@ -509,7 +511,7 @@ public: return nullptr; } sp state = new VolumeShaper::State(); - status = state->readFromParcel(reply); + status = state->readFromParcel(&reply); if (status != NO_ERROR) { return nullptr; } @@ -851,14 +853,14 @@ status_t BnMediaPlayer::onTransact( status_t status = data.readInt32(&present); if (status == NO_ERROR && present != 0) { configuration = new VolumeShaper::Configuration(); - status = configuration->readFromParcel(data); + status = configuration->readFromParcel(&data); } if (status == NO_ERROR) { status = data.readInt32(&present); } if (status == NO_ERROR && present != 0) { operation = new VolumeShaper::Operation(); - status = operation->readFromParcel(data); + status = operation->readFromParcel(&data); } if (status == NO_ERROR) { status = (status_t)applyVolumeShaper(configuration, operation); diff --git a/media/libmedia/include/media/IMediaPlayer.h b/media/libmedia/include/media/IMediaPlayer.h index e5a98dd2a4..e657716e9f 100644 --- a/media/libmedia/include/media/IMediaPlayer.h +++ b/media/libmedia/include/media/IMediaPlayer.h @@ -91,10 +91,10 @@ public: virtual status_t getRetransmitEndpoint(struct sockaddr_in* endpoint) = 0; virtual status_t setNextPlayer(const sp& next) = 0; - virtual VolumeShaper::Status applyVolumeShaper( - const sp& configuration, - const sp& operation) = 0; - virtual sp getVolumeShaperState(int id) = 0; + virtual media::VolumeShaper::Status applyVolumeShaper( + const sp& configuration, + const sp& operation) = 0; + virtual sp getVolumeShaperState(int id) = 0; // Modular DRM virtual status_t prepareDrm(const uint8_t uuid[16], diff --git a/media/libmedia/include/media/mediaplayer.h b/media/libmedia/include/media/mediaplayer.h index 623c374d84..cb0a99f95d 100644 --- a/media/libmedia/include/media/mediaplayer.h +++ b/media/libmedia/include/media/mediaplayer.h @@ -266,10 +266,10 @@ public: status_t setRetransmitEndpoint(const char* addrString, uint16_t port); status_t setNextMediaPlayer(const sp& player); - VolumeShaper::Status applyVolumeShaper( - const sp& configuration, - const sp& operation); - sp getVolumeShaperState(int id); + media::VolumeShaper::Status applyVolumeShaper( + const sp& configuration, + const sp& operation); + sp getVolumeShaperState(int id); // Modular DRM status_t prepareDrm(const uint8_t uuid[16], const Vector& drmSessionId); status_t releaseDrm(); diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp index efe947adc8..49101d190b 100644 --- a/media/libmedia/mediaplayer.cpp +++ b/media/libmedia/mediaplayer.cpp @@ -48,6 +48,8 @@ namespace android { +using media::VolumeShaper; + MediaPlayer::MediaPlayer() { ALOGV("constructor"); diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp index 496db0d3a3..ba98f18e47 100644 --- a/media/libmediaplayerservice/MediaPlayerService.cpp +++ b/media/libmediaplayerservice/MediaPlayerService.cpp @@ -93,6 +93,7 @@ using android::OK; using android::BAD_VALUE; using android::NOT_ENOUGH_DATA; using android::Parcel; +using android::media::VolumeShaper; // Max number of entries in the filter. const int kMaxFilterSize = 64; // I pulled that out of thin air. @@ -1577,7 +1578,7 @@ MediaPlayerService::AudioOutput::AudioOutput(audio_session_t sessionId, uid_t ui mSendLevel(0.0), mAuxEffectId(0), mFlags(AUDIO_OUTPUT_FLAG_NONE), - mVolumeHandler(new VolumeHandler()) + mVolumeHandler(new media::VolumeHandler()) { ALOGV("AudioOutput(%d)", sessionId); if (attr != NULL) { diff --git a/media/libmediaplayerservice/MediaPlayerService.h b/media/libmediaplayerservice/MediaPlayerService.h index 06b9cad9b6..25691f9f37 100644 --- a/media/libmediaplayerservice/MediaPlayerService.h +++ b/media/libmediaplayerservice/MediaPlayerService.h @@ -132,10 +132,10 @@ class MediaPlayerService : public BnMediaPlayerService virtual status_t setParameters(const String8& keyValuePairs); virtual String8 getParameters(const String8& keys); - virtual VolumeShaper::Status applyVolumeShaper( - const sp& configuration, - const sp& operation) override; - virtual sp getVolumeShaperState(int id) override; + virtual media::VolumeShaper::Status applyVolumeShaper( + const sp& configuration, + const sp& operation) override; + virtual sp getVolumeShaperState(int id) override; private: static void setMinBufferCount(); @@ -165,7 +165,7 @@ class MediaPlayerService : public BnMediaPlayerService float mSendLevel; int mAuxEffectId; audio_output_flags_t mFlags; - sp mVolumeHandler; + sp mVolumeHandler; mutable Mutex mLock; // static variables below not protected by mutex @@ -343,10 +343,10 @@ private: virtual status_t getRetransmitEndpoint(struct sockaddr_in* endpoint); virtual status_t setNextPlayer(const sp& player); - virtual VolumeShaper::Status applyVolumeShaper( - const sp& configuration, - const sp& operation) override; - virtual sp getVolumeShaperState(int id) override; + virtual media::VolumeShaper::Status applyVolumeShaper( + const sp& configuration, + const sp& operation) override; + virtual sp getVolumeShaperState(int id) override; sp createPlayer(player_type playerType); diff --git a/media/libmediaplayerservice/include/MediaPlayerInterface.h b/media/libmediaplayerservice/include/MediaPlayerInterface.h index e8d59a7297..bcdca37a73 100644 --- a/media/libmediaplayerservice/include/MediaPlayerInterface.h +++ b/media/libmediaplayerservice/include/MediaPlayerInterface.h @@ -146,10 +146,10 @@ public: virtual status_t setParameters(const String8& /* keyValuePairs */) { return NO_ERROR; } virtual String8 getParameters(const String8& /* keys */) { return String8::empty(); } - virtual VolumeShaper::Status applyVolumeShaper( - const sp& configuration, - const sp& operation); - virtual sp getVolumeShaperState(int id); + virtual media::VolumeShaper::Status applyVolumeShaper( + const sp& configuration, + const sp& operation); + virtual sp getVolumeShaperState(int id); }; MediaPlayerBase() : mCookie(0), mNotify(0) {} diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h index 1b7d8750a2..de617b9533 100644 --- a/services/audioflinger/AudioFlinger.h +++ b/services/audioflinger/AudioFlinger.h @@ -557,10 +557,10 @@ private: virtual void pause(); virtual status_t attachAuxEffect(int effectId); virtual status_t setParameters(const String8& keyValuePairs); - virtual VolumeShaper::Status applyVolumeShaper( - const sp& configuration, - const sp& operation) override; - virtual sp getVolumeShaperState(int id) override; + virtual media::VolumeShaper::Status applyVolumeShaper( + const sp& configuration, + const sp& operation) override; + virtual sp getVolumeShaperState(int id) override; virtual status_t getTimestamp(AudioTimestamp& timestamp); virtual void signal(); // signal playback thread for a change in control block diff --git a/services/audioflinger/PlaybackTracks.h b/services/audioflinger/PlaybackTracks.h index 1c1a98969b..946d88f918 100644 --- a/services/audioflinger/PlaybackTracks.h +++ b/services/audioflinger/PlaybackTracks.h @@ -82,11 +82,11 @@ public: virtual bool isFastTrack() const { return (mFlags & AUDIO_OUTPUT_FLAG_FAST) != 0; } // implement volume handling. - VolumeShaper::Status applyVolumeShaper( - const sp& configuration, - const sp& operation); -sp getVolumeShaperState(int id); - sp getVolumeHandler() { return mVolumeHandler; } + media::VolumeShaper::Status applyVolumeShaper( + const sp& configuration, + const sp& operation); + sp getVolumeShaperState(int id); + sp getVolumeHandler() { return mVolumeHandler; } protected: // for numerous @@ -163,7 +163,7 @@ protected: ExtendedTimestamp mSinkTimestamp; - sp mVolumeHandler; // handles multiple VolumeShaper configs and operations + sp mVolumeHandler; // handles multiple VolumeShaper configs and operations private: // The following fields are only for fast tracks, and should be in a subclass diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp index 16eeccc1c9..50c0e23f04 100644 --- a/services/audioflinger/Tracks.cpp +++ b/services/audioflinger/Tracks.cpp @@ -52,6 +52,7 @@ namespace android { +using media::VolumeShaper; // ---------------------------------------------------------------------------- // TrackBase // ---------------------------------------------------------------------------- @@ -399,7 +400,7 @@ AudioFlinger::PlaybackThread::Track::Track( mAuxEffectId(0), mHasVolumeController(false), mPresentationCompleteFrames(0), mFrameMap(16 /* sink-frame-to-track-frame map memory */), - mVolumeHandler(new VolumeHandler(sampleRate)), + mVolumeHandler(new media::VolumeHandler(sampleRate)), // mSinkTimestamp mFastIndex(-1), mCachedVolume(1.0),