156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi/*
256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * Copyright (C) 2015 The Android Open Source Project
356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi *
456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License");
556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * you may not use this file except in compliance with the License.
656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * You may obtain a copy of the License at
756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi *
856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi *      http://www.apache.org/licenses/LICENSE-2.0
956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi *
1056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * Unless required by applicable law or agreed to in writing, software
1156ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS,
1256ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * See the License for the specific language governing permissions and
1456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi * limitations under the License.
1556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi */
1656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi
17ad3183e2d4cecd02f6261270a7ea1c68be0efa0fFrançois Gaffie#pragma once
18ad3183e2d4cecd02f6261270a7ea1c68be0efa0fFrançois Gaffie
19ad3183e2d4cecd02f6261270a7ea1c68be0efa0fFrançois Gaffie#include <utils/Errors.h>
20ad3183e2d4cecd02f6261270a7ea1c68be0efa0fFrançois Gaffie#include <utils/RefBase.h>
21ad3183e2d4cecd02f6261270a7ea1c68be0efa0fFrançois Gaffie#include <system/audio.h>
22ad3183e2d4cecd02f6261270a7ea1c68be0efa0fFrançois Gaffie
2356ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivinamespace android {
2456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi
2556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Triviclass AudioGain: public RefBase
2656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi{
2756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivipublic:
2856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi    AudioGain(int index, bool useInChannelMask);
2956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi    virtual ~AudioGain() {}
3056ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi
31a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    void setMode(audio_gain_mode_t mode) { mGain.mode = mode; }
32a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    const audio_gain_mode_t &getMode() const { return mGain.mode; }
33a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie
34a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    void setChannelMask(audio_channel_mask_t mask) { mGain.channel_mask = mask; }
35a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    const audio_channel_mask_t &getChannelMask() const { return mGain.channel_mask; }
36a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie
37a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    void setMinValueInMb(int minValue) { mGain.min_value = minValue; }
38a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    int getMinValueInMb() const { return mGain.min_value; }
39a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie
40a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    void setMaxValueInMb(int maxValue) { mGain.max_value = maxValue; }
41a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    int getMaxValueInMb() const { return mGain.max_value; }
42a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie
43a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    void setDefaultValueInMb(int defaultValue) { mGain.default_value = defaultValue; }
44a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    int getDefaultValueInMb() const { return mGain.default_value; }
45a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie
46a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    void setStepValueInMb(uint32_t stepValue) { mGain.step_value = stepValue; }
47a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    int getStepValueInMb() const { return mGain.step_value; }
48a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie
49a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    void setMinRampInMs(uint32_t minRamp) { mGain.min_ramp_ms = minRamp; }
50a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    int getMinRampInMs() const { return mGain.min_ramp_ms; }
51a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie
52a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    void setMaxRampInMs(uint32_t maxRamp) { mGain.max_ramp_ms = maxRamp; }
53a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    int getMaxRampInMs() const { return mGain.max_ramp_ms; }
54a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie
55a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    // TODO: remove dump from here (split serialization)
5656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi    void dump(int fd, int spaces, int index) const;
5756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi
5856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi    void getDefaultConfig(struct audio_gain_config *config);
5956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi    status_t checkConfig(const struct audio_gain_config *config);
60a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie
61a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie    const struct audio_gain &getGain() const { return mGain; }
62a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffie
63a8ecc2c72ca26389bd6b0162181d60aaeaca8149François Gaffieprivate:
6456ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi    int               mIndex;
6556ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi    struct audio_gain mGain;
6656ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi    bool              mUseInChannelMask;
6756ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi};
6856ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi
6956ec4ffcbae8aeac6c5245fc7b825d02e2e6cefdJean-Michel Trivi}; // namespace android
70