• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #pragma once
18 
19 #include <vector>
20 
21 #include <aidl/android/hardware/audio/effect/BnEffect.h>
22 #include "effect-impl/EffectImpl.h"
23 
24 namespace aidl::android::hardware::audio::effect {
25 
26 class VisualizerSwContext final : public EffectContext {
27   public:
28     static const int kMinCaptureSize = 0x80;
29     static const int kMaxCaptureSize = 0x400;
30     static const int kMaxLatencyMs = 3000;
31     static const int kMaxCaptureBufSize = 0xffff;
VisualizerSwContext(int statusDepth,const Parameter::Common & common)32     VisualizerSwContext(int statusDepth, const Parameter::Common& common)
33         : EffectContext(statusDepth, common) {
34         LOG(DEBUG) << __func__;
35         mCaptureSampleBuffer.resize(kMaxCaptureBufSize);
36         fill(mCaptureSampleBuffer.begin(), mCaptureSampleBuffer.end(), 0x80);
37     }
38 
39     RetCode setVsCaptureSize(int captureSize);
getVsCaptureSize()40     int getVsCaptureSize() const { return mCaptureSize; }
41 
42     RetCode setVsScalingMode(Visualizer::ScalingMode scalingMode);
getVsScalingMode()43     Visualizer::ScalingMode getVsScalingMode() const { return mScalingMode; }
44 
45     RetCode setVsMeasurementMode(Visualizer::MeasurementMode measurementMode);
getVsMeasurementMode()46     Visualizer::MeasurementMode getVsMeasurementMode() const { return mMeasurementMode; }
47 
48     RetCode setVsLatency(int latency);
getVsLatency()49     int getVsLatency() const { return mLatency; }
50 
getVsMeasurement()51     Visualizer::Measurement getVsMeasurement() const { return mMeasurement; }
getVsCaptureSampleBuffer()52     std::vector<uint8_t> getVsCaptureSampleBuffer() const { return mCaptureSampleBuffer; }
53 
54   private:
55     int mCaptureSize = kMaxCaptureSize;
56     Visualizer::ScalingMode mScalingMode = Visualizer::ScalingMode::NORMALIZED;
57     Visualizer::MeasurementMode mMeasurementMode = Visualizer::MeasurementMode::NONE;
58     int mLatency = 0;
59     const Visualizer::Measurement mMeasurement = {0, 0};
60     std::vector<uint8_t> mCaptureSampleBuffer;
61 };
62 
63 class VisualizerSw final : public EffectImpl {
64   public:
65     static const std::string kEffectName;
66     static const Capability kCapability;
67     static const Descriptor kDescriptor;
VisualizerSw()68     VisualizerSw() { LOG(DEBUG) << __func__; }
~VisualizerSw()69     ~VisualizerSw() {
70         cleanUp();
71         LOG(DEBUG) << __func__;
72     }
73 
74     ndk::ScopedAStatus getDescriptor(Descriptor* _aidl_return) override;
75     ndk::ScopedAStatus setParameterSpecific(const Parameter::Specific& specific) override;
76     ndk::ScopedAStatus getParameterSpecific(const Parameter::Id& id,
77                                             Parameter::Specific* specific) override;
78 
79     std::shared_ptr<EffectContext> createContext(const Parameter::Common& common) override;
80     std::shared_ptr<EffectContext> getContext() override;
81     RetCode releaseContext() override;
82 
83     IEffect::Status effectProcessImpl(float* in, float* out, int samples) override;
getEffectName()84     std::string getEffectName() override { return kEffectName; }
85 
86   private:
87     static const std::vector<Range::VisualizerRange> kRanges;
88     std::shared_ptr<VisualizerSwContext> mContext;
89     ndk::ScopedAStatus getParameterVisualizer(const Visualizer::Tag& tag,
90                                               Parameter::Specific* specific);
91 };
92 }  // namespace aidl::android::hardware::audio::effect
93