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