Make AudioGain parcelable.

Make AudioGain parcelable so that it can be easier to use in binder
call.

Bug: 135621476
Test: make
Change-Id: I4159e92a27c6d99570ac2e2175c3d46fa7975059
gugelfrei
jiabin 5 years ago
parent 9ccb28b1cc
commit 84e43c724a

@ -111,4 +111,64 @@ 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));
}
status_t AudioGain::writeToParcel(android::Parcel *parcel) const
{
status_t status = NO_ERROR;
if ((status = parcel->writeInt32(mIndex)) != NO_ERROR) return status;
if ((status = parcel->writeBool(mUseInChannelMask)) != NO_ERROR) return status;
if ((status = parcel->writeBool(mUseForVolume)) != NO_ERROR) return status;
if ((status = parcel->writeUint32(mGain.mode)) != NO_ERROR) return status;
if ((status = parcel->writeUint32(mGain.channel_mask)) != NO_ERROR) return status;
if ((status = parcel->writeInt32(mGain.min_value)) != NO_ERROR) return status;
if ((status = parcel->writeInt32(mGain.max_value)) != NO_ERROR) return status;
if ((status = parcel->writeInt32(mGain.default_value)) != NO_ERROR) return status;
if ((status = parcel->writeUint32(mGain.step_value)) != NO_ERROR) return status;
if ((status = parcel->writeUint32(mGain.min_ramp_ms)) != NO_ERROR) return status;
status = parcel->writeUint32(mGain.max_ramp_ms);
return status;
}
status_t AudioGain::readFromParcel(const android::Parcel *parcel)
{
status_t status = NO_ERROR;
if ((status = parcel->readInt32(&mIndex)) != NO_ERROR) return status;
if ((status = parcel->readBool(&mUseInChannelMask)) != NO_ERROR) return status;
if ((status = parcel->readBool(&mUseForVolume)) != NO_ERROR) return status;
if ((status = parcel->readUint32(&mGain.mode)) != NO_ERROR) return status;
if ((status = parcel->readUint32(&mGain.channel_mask)) != NO_ERROR) return status;
if ((status = parcel->readInt32(&mGain.min_value)) != NO_ERROR) return status;
if ((status = parcel->readInt32(&mGain.max_value)) != NO_ERROR) return status;
if ((status = parcel->readInt32(&mGain.default_value)) != NO_ERROR) return status;
if ((status = parcel->readUint32(&mGain.step_value)) != NO_ERROR) return status;
if ((status = parcel->readUint32(&mGain.min_ramp_ms)) != NO_ERROR) return status;
status = parcel->readUint32(&mGain.max_ramp_ms);
return status;
}
status_t AudioGains::writeToParcel(android::Parcel *parcel) const {
status_t status = NO_ERROR;
if ((status = parcel->writeUint64(this->size())) != NO_ERROR) return status;
for (const auto &audioGain : *this) {
if ((status = parcel->writeParcelable(*audioGain)) != NO_ERROR) {
break;
}
}
return status;
}
status_t AudioGains::readFromParcel(const android::Parcel *parcel) {
status_t status = NO_ERROR;
uint64_t count;
if ((status = parcel->readUint64(&count)) != NO_ERROR) return status;
for (uint64_t i = 0; i < count; i++) {
sp<AudioGain> audioGain = new AudioGain(0, false);
if ((status = parcel->readParcelable(audioGain.get())) != NO_ERROR) {
this->clear();
break;
}
this->push_back(audioGain);
}
return status;
}
} // namespace android

@ -16,6 +16,8 @@
#pragma once
#include <binder/Parcel.h>
#include <binder/Parcelable.h>
#include <utils/Errors.h>
#include <utils/RefBase.h>
#include <system/audio.h>
@ -24,7 +26,7 @@
namespace android {
class AudioGain: public RefBase
class AudioGain: public RefBase, public Parcelable
{
public:
AudioGain(int index, bool useInChannelMask);
@ -65,6 +67,9 @@ public:
const struct audio_gain &getGain() const { return mGain; }
status_t writeToParcel(Parcel* parcel) const override;
status_t readFromParcel(const Parcel* parcel) override;
private:
int mIndex;
struct audio_gain mGain;
@ -72,7 +77,7 @@ private:
bool mUseForVolume = false;
};
class AudioGains : public std::vector<sp<AudioGain> >
class AudioGains : public std::vector<sp<AudioGain> >, public Parcelable
{
public:
bool canUseForVolume() const
@ -90,6 +95,9 @@ public:
push_back(gain);
return 0;
}
status_t writeToParcel(Parcel* parcel) const override;
status_t readFromParcel(const Parcel* parcel) override;
};
} // namespace android

Loading…
Cancel
Save