From 49e69a1e683c570170bd0603b3c5fb5fe2826801 Mon Sep 17 00:00:00 2001 From: jiabin Date: Tue, 15 Oct 2019 16:04:13 -0700 Subject: [PATCH] Add equals functions for classes in libaudiofoundation. Add equals functions that can be used to check if current object is the same as the given object by checking if all members are the same. Bug: 135621476 Test: make Change-Id: Idcf09587f629e6719e9dcf2f0fb7d68a01eafef9 --- media/libaudiofoundation/AudioGain.cpp | 26 +++++++++++++++++++ media/libaudiofoundation/AudioPort.cpp | 25 ++++++++++++++++++ media/libaudiofoundation/AudioProfile.cpp | 20 ++++++++++++++ .../DeviceDescriptorBase.cpp | 9 +++++++ .../include/media/AudioGain.h | 4 +++ .../include/media/AudioPort.h | 4 +++ .../include/media/AudioProfile.h | 4 +++ .../include/media/DeviceDescriptorBase.h | 2 ++ 8 files changed, 94 insertions(+) diff --git a/media/libaudiofoundation/AudioGain.cpp b/media/libaudiofoundation/AudioGain.cpp index 269de280a1..0d283351cb 100644 --- a/media/libaudiofoundation/AudioGain.cpp +++ b/media/libaudiofoundation/AudioGain.cpp @@ -24,6 +24,8 @@ #define ALOGVV(a...) do { } while(0) #endif +#include + #include #include #include @@ -111,6 +113,22 @@ void AudioGain::dump(std::string *dst, int spaces, int index) const dst->append(base::StringPrintf("%*s- max_ramp_ms: %d ms\n", spaces, "", mGain.max_ramp_ms)); } +bool AudioGain::equals(const sp& other) const +{ + return other != nullptr && + mUseInChannelMask == other->mUseInChannelMask && + mUseForVolume == other->mUseForVolume && + // Compare audio gain + mGain.mode == other->mGain.mode && + mGain.channel_mask == other->mGain.channel_mask && + mGain.min_value == other->mGain.min_value && + mGain.max_value == other->mGain.max_value && + mGain.default_value == other->mGain.default_value && + mGain.step_value == other->mGain.step_value && + mGain.min_ramp_ms == other->mGain.min_ramp_ms && + mGain.max_ramp_ms == other->mGain.max_ramp_ms; +} + status_t AudioGain::writeToParcel(android::Parcel *parcel) const { status_t status = NO_ERROR; @@ -145,6 +163,14 @@ status_t AudioGain::readFromParcel(const android::Parcel *parcel) return status; } +bool AudioGains::equals(const AudioGains &other) const +{ + return std::equal(begin(), end(), other.begin(), other.end(), + [](const sp& left, const sp& right) { + return left->equals(right); + }); +} + status_t AudioGains::writeToParcel(android::Parcel *parcel) const { status_t status = NO_ERROR; if ((status = parcel->writeVectorSize(*this)) != NO_ERROR) return status; diff --git a/media/libaudiofoundation/AudioPort.cpp b/media/libaudiofoundation/AudioPort.cpp index 754601443e..f98869092b 100644 --- a/media/libaudiofoundation/AudioPort.cpp +++ b/media/libaudiofoundation/AudioPort.cpp @@ -105,6 +105,16 @@ void AudioPort::log(const char* indent) const ALOGI("%s Port[nm:%s, type:%d, role:%d]", indent, mName.c_str(), mType, mRole); } +bool AudioPort::equals(const sp &other) const +{ + return other != nullptr && + mGains.equals(other->getGains()) && + mName.compare(other->getName()) == 0 && + mType == other->getType() && + mRole == other->getRole() && + mProfiles.equals(other->getAudioProfiles()); +} + status_t AudioPort::writeToParcel(Parcel *parcel) const { status_t status = NO_ERROR; @@ -218,6 +228,21 @@ bool AudioPortConfig::hasGainController(bool canUseForVolume) const : audioport->getGains().size() > 0; } +bool AudioPortConfig::equals(const sp &other) const +{ + return other != nullptr && + mSamplingRate == other->getSamplingRate() && + mFormat == other->getFormat() && + mChannelMask == other->getChannelMask() && + // Compare audio gain config + mGain.index == other->mGain.index && + mGain.mode == other->mGain.mode && + mGain.channel_mask == other->mGain.channel_mask && + std::equal(std::begin(mGain.values), std::end(mGain.values), + std::begin(other->mGain.values)) && + mGain.ramp_duration_ms == other->mGain.ramp_duration_ms; +} + status_t AudioPortConfig::writeToParcel(Parcel *parcel) const { status_t status = NO_ERROR; diff --git a/media/libaudiofoundation/AudioProfile.cpp b/media/libaudiofoundation/AudioProfile.cpp index e8ee20b9cb..91be346748 100644 --- a/media/libaudiofoundation/AudioProfile.cpp +++ b/media/libaudiofoundation/AudioProfile.cpp @@ -118,6 +118,18 @@ void AudioProfile::dump(std::string *dst, int spaces) const } } +bool AudioProfile::equals(const sp& other) const +{ + return other != nullptr && + mName.compare(other->mName) == 0 && + mFormat == other->getFormat() && + mChannelMasks == other->getChannels() && + mSamplingRates == other->getSampleRates() && + mIsDynamicFormat == other->isDynamicFormat() && + mIsDynamicChannels == other->isDynamicChannels() && + mIsDynamicRate == other->isDynamicRate(); +} + status_t AudioProfile::writeToParcel(Parcel *parcel) const { status_t status = NO_ERROR; @@ -284,4 +296,12 @@ status_t AudioProfileVector::readFromParcel(const Parcel *parcel) return status; } +bool AudioProfileVector::equals(const AudioProfileVector& other) const +{ + return std::equal(begin(), end(), other.begin(), other.end(), + [](const sp& left, const sp& right) { + return left->equals(right); + }); +} + } // namespace android diff --git a/media/libaudiofoundation/DeviceDescriptorBase.cpp b/media/libaudiofoundation/DeviceDescriptorBase.cpp index 672d06cf44..18fd184c46 100644 --- a/media/libaudiofoundation/DeviceDescriptorBase.cpp +++ b/media/libaudiofoundation/DeviceDescriptorBase.cpp @@ -110,6 +110,15 @@ void DeviceDescriptorBase::log() const AudioPort::log(" "); } +bool DeviceDescriptorBase::equals(const sp &other) const +{ + return other != nullptr && + static_cast(this)->equals(other) && + static_cast(this)->equals(other) && + mAddress.compare(other->address()) == 0 && + mDeviceType == other->type(); +} + status_t DeviceDescriptorBase::writeToParcel(Parcel *parcel) const { status_t status = NO_ERROR; diff --git a/media/libaudiofoundation/include/media/AudioGain.h b/media/libaudiofoundation/include/media/AudioGain.h index 6a7fb5594b..859f1e750b 100644 --- a/media/libaudiofoundation/include/media/AudioGain.h +++ b/media/libaudiofoundation/include/media/AudioGain.h @@ -67,6 +67,8 @@ public: const struct audio_gain &getGain() const { return mGain; } + bool equals(const sp& other) const; + status_t writeToParcel(Parcel* parcel) const override; status_t readFromParcel(const Parcel* parcel) override; @@ -96,6 +98,8 @@ public: return 0; } + bool equals(const AudioGains& other) const; + status_t writeToParcel(Parcel* parcel) const override; status_t readFromParcel(const Parcel* parcel) override; }; diff --git a/media/libaudiofoundation/include/media/AudioPort.h b/media/libaudiofoundation/include/media/AudioPort.h index 503d0a7ad2..3c013cbbbd 100644 --- a/media/libaudiofoundation/include/media/AudioPort.h +++ b/media/libaudiofoundation/include/media/AudioPort.h @@ -81,6 +81,8 @@ public: void log(const char* indent) const; + bool equals(const sp& other) const; + status_t writeToParcel(Parcel* parcel) const override; status_t readFromParcel(const Parcel* parcel) override; @@ -113,6 +115,8 @@ public: bool hasGainController(bool canUseForVolume = false) const; + bool equals(const sp& other) const; + status_t writeToParcel(Parcel* parcel) const override; status_t readFromParcel(const Parcel* parcel) override; diff --git a/media/libaudiofoundation/include/media/AudioProfile.h b/media/libaudiofoundation/include/media/AudioProfile.h index 4bf2428112..730138a337 100644 --- a/media/libaudiofoundation/include/media/AudioProfile.h +++ b/media/libaudiofoundation/include/media/AudioProfile.h @@ -68,6 +68,8 @@ public: void dump(std::string *dst, int spaces) const; + bool equals(const sp& other) const; + status_t writeToParcel(Parcel* parcel) const override; status_t readFromParcel(const Parcel* parcel) override; @@ -105,6 +107,8 @@ public: virtual void dump(std::string *dst, int spaces) const; + bool equals(const AudioProfileVector& other) const; + status_t writeToParcel(Parcel* parcel) const override; status_t readFromParcel(const Parcel* parcel) override; }; diff --git a/media/libaudiofoundation/include/media/DeviceDescriptorBase.h b/media/libaudiofoundation/include/media/DeviceDescriptorBase.h index 9f300d5bca..6a34b4d5bb 100644 --- a/media/libaudiofoundation/include/media/DeviceDescriptorBase.h +++ b/media/libaudiofoundation/include/media/DeviceDescriptorBase.h @@ -53,6 +53,8 @@ public: void log() const; std::string toString() const; + bool equals(const sp& other) const; + status_t writeToParcel(Parcel* parcel) const override; status_t readFromParcel(const Parcel* parcel) override;