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