1e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov/* 2e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov * Copyright (C) 2016 The Android Open Source Project 3e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov * 4e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov * Licensed under the Apache License, Version 2.0 (the "License"); 5e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov * you may not use this file except in compliance with the License. 6e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov * You may obtain a copy of the License at 7e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov * 8e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov * http://www.apache.org/licenses/LICENSE-2.0 9e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov * 10e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov * Unless required by applicable law or agreed to in writing, software 11e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov * distributed under the License is distributed on an "AS IS" BASIS, 12e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov * See the License for the specific language governing permissions and 14e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov * limitations under the License. 15e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov */ 16e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov 17e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#ifndef ANDROID_EFFECT_VISUALIZER_CORE_H_ 18e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#define ANDROID_EFFECT_VISUALIZER_CORE_H_ 19e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov 20e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#include <system/audio_effect.h> 21e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov 22e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#if __cplusplus 23e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganovextern "C" { 24e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#endif 25e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov 26e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#ifndef OPENSL_ES_H_ 27e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganovstatic const effect_uuid_t SL_IID_VISUALIZATION_ = 28e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov { 0xe46b26a0, 0xdddd, 0x11db, 0x8afd, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } }; 29e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganovconst effect_uuid_t * const SL_IID_VISUALIZATION = &SL_IID_VISUALIZATION_; 30e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#endif //OPENSL_ES_H_ 31e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov 32e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#define VISUALIZER_CAPTURE_SIZE_MAX 1024 // maximum capture size in samples 33e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#define VISUALIZER_CAPTURE_SIZE_MIN 128 // minimum capture size in samples 34e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov 35e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov// to keep in sync with frameworks/base/media/java/android/media/audiofx/Visualizer.java 36e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#define VISUALIZER_SCALING_MODE_NORMALIZED 0 37e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#define VISUALIZER_SCALING_MODE_AS_PLAYED 1 38e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov 39e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#define MEASUREMENT_MODE_NONE 0x0 40e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#define MEASUREMENT_MODE_PEAK_RMS 0x1 41e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov 42e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#define MEASUREMENT_IDX_PEAK 0 43e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#define MEASUREMENT_IDX_RMS 1 44e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#define MEASUREMENT_COUNT 2 45e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov 46e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov/* enumerated parameters for Visualizer effect */ 47e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganovtypedef enum 48e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov{ 49e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov VISUALIZER_PARAM_CAPTURE_SIZE, // Sets the number PCM samples in the capture. 50e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov VISUALIZER_PARAM_SCALING_MODE, // Sets the way the captured data is scaled 51e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov VISUALIZER_PARAM_LATENCY, // Informs the visualizer about the downstream latency 52e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov VISUALIZER_PARAM_MEASUREMENT_MODE, // Sets which measurements are to be made 53e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov} t_visualizer_params; 54e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov 55e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov/* commands */ 56e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganovtypedef enum 57e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov{ 58e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov VISUALIZER_CMD_CAPTURE = EFFECT_CMD_FIRST_PROPRIETARY, // Gets the latest PCM capture. 59e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov VISUALIZER_CMD_MEASURE, // Gets the current measurements 60e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov}t_visualizer_cmds; 61e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov 62e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov// VISUALIZER_CMD_CAPTURE retrieves the latest PCM snapshot captured by the visualizer engine. 63e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov// It returns the number of samples specified by VISUALIZER_PARAM_CAPTURE_SIZE 64e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov// in 8 bit unsigned format (0 = 0x80) 65e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov 66e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov// VISUALIZER_CMD_MEASURE retrieves the lastest measurements as int32_t saved in the 67e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov// MEASUREMENT_IDX_* array index order. 68e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov 69e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#if __cplusplus 70e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov} // extern "C" 71e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#endif 72e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov 73e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov 74e6d4b6ad85f9b4c342a19ee5ccea4b77d2853378Mikhail Naganov#endif /*ANDROID_EFFECT_VISUALIZER_CORE_H_*/ 75