1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
/*
* Copyright (c) 2016-2017,2019, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2015 The Android Open Source Project *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef QAHW_PLAYBACK_TEST_H
#define QAHW_PLAYBACK_TEST_H
#include <getopt.h>
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <time.h>
#include <signal.h>
#include <cutils/str_parms.h>
#include <tinyalsa/asoundlib.h>
#include "qahw_api.h"
#include "qahw_defs.h"
#include "qahw_effect_api.h"
#include "qahw_effect_test.h"
#define MAX_STR_LEN 256
typedef void* qap_module_handle_t;
bool kpi_mode;
bool enable_dump;
float vol_level;
uint8_t render_format;
bool ec_ref;
enum {
FILE_WAV = 1,
FILE_MP3,
FILE_AAC,
FILE_AAC_ADTS,
FILE_FLAC,
FILE_ALAC,
FILE_VORBIS,
FILE_WMA,
FILE_AC3,
FILE_AAC_LATM,
FILE_EAC3,
FILE_EAC3_JOC,
FILE_DTS,
FILE_MP2,
FILE_APTX,
FILE_TRUEHD,
FILE_IEC61937,
FILE_APE
};
typedef enum {
USB_MODE_DEVICE,
USB_MODE_HOST,
USB_MODE_NONE
} usb_mode_type_t;
typedef enum {
AAC_LC = 1,
AAC_HE_V1,
AAC_HE_V2,
AAC_LOAS
} aac_format_type_t;
typedef enum {
WMA = 1,
WMA_PRO,
WMA_LOSSLESS
} wma_format_type_t;
struct audio_config_params {
qahw_module_handle_t *qahw_mod_handle;
audio_io_handle_t handle;
audio_devices_t input_device;
audio_config_t config;
audio_input_flags_t flags;
const char* kStreamName ;
audio_source_t kInputSource;
char *file_name;
volatile bool thread_exit;
};
typedef struct {
qahw_module_handle_t *qahw_in_hal_handle;
qahw_module_handle_t *qahw_out_hal_handle;
audio_io_handle_t handle;
char* filename;
FILE* file_stream;
char* timestamp_filename;
FILE* timestamp_file_ptr;
FILE* framesize_file_ptr;
int filetype;
int stream_index;
audio_devices_t output_device;
audio_devices_t input_device;
audio_config_t config;
audio_output_flags_t flags;
qahw_stream_handle_t* out_handle;
qahw_stream_handle_t* in_handle;
int channels;
aac_format_type_t aac_fmt_type;
wma_format_type_t wma_fmt_type;
char *kvpair_values;
bool flags_set;
usb_mode_type_t usb_mode;
int effect_index;
int effect_preset_strength;
bool drift_query;
bool drift_correction;
bool play_later;
char *device_url;
thread_func_t ethread_func;
thread_data_t *ethread_data;
cmd_data_t cmd_data;
int bytes_to_read;
qap_module_handle_t qap_module_handle;
bool sec_input;
bool system_input;
pthread_cond_t write_cond;
pthread_mutex_t write_lock;
pthread_cond_t drain_cond;
pthread_mutex_t drain_lock;
bool drain_received;
bool interactive_strm;
qahw_mix_matrix_params_t mm_params_pan_scale;
qahw_mix_matrix_params_t mm_params_downmix;
int mix_ctrl;
int pan_scale_ctrl;
pthread_cond_t input_buffer_available_cond;
pthread_mutex_t input_buffer_available_lock;
uint32_t input_buffer_available_size;
char *set_params;
bool bt_wbs;
}stream_config;
qahw_module_handle_t * load_hal(audio_devices_t dev);
int unload_hals();
int get_wav_header_length (FILE* file_stream);
#ifndef QAP
#define hal_test_qap_usage() (0)
#define qap_wrapper_get_single_kvp(key, kv_pairs, status) (0)
#define qap_wrapper_session_open(kv_pairs, stream_data, num_of_streams,\
qap_out_hal_handle_t) (0)
#define qap_wrapper_session_close() (0)
#define qap_wrapper_stream_open(stream_data) (0)
#define qap_wrapper_get_cmd_string_from_arg_array(argc, argv, status) (0)
#define qap_wrapper_start_stream (stream_data) (0)
#define is_qap_session_active(argc, argv, kvp_string) (0)
#define get_play_list(fp, stream_param, num_of_streams, kvp_str) (0)
#define check_for_playlist(kvp_string) (0)
inline int start_playback_through_qap(char * kvp_string __unused,
int num_of_streams __unused,
qahw_module_handle_t *qap_out_hal_handle_t __unused)
{
return 0;
}
#define start_playback_through_qap_playlist(cmd_kvp_str, num_of_streams,\
kvp_string, stream_param, qap_wrapper_session_active,\
qap_out_hal_handle_t) (0)
#else
void hal_test_qap_usage();
char * qap_wrapper_get_single_kvp(const char *key, const char *kv_pairs, int *status);
int qap_wrapper_session_open(char *kv_pairs, void* stream_data, int num_of_streams,\
qahw_module_handle_t *qap_out_hal_handle_t);
int qap_wrapper_session_close();
qap_module_handle_t qap_wrapper_stream_open(void* stream_data);
char * qap_wrapper_get_cmd_string_from_arg_array(int argc, char * argv[], int *status);
void *qap_wrapper_start_stream (void* stream_data);
void get_file_format(stream_config *stream_info);
bool is_qap_session_active(int argc, char* argv[], char *kvp_string);
void get_play_list(FILE *fp, stream_config (*stream_param)[], int *num_of_streams, char *kvp_str[]);
char* check_for_playlist(char *kvp_string);
int start_playback_through_qap(char * kvp_string, int num_of_streams,\
qahw_module_handle_t *qap_out_hal_handle_t);
int start_playback_through_qap_playlist(char *cmd_kvp_str[], int num_of_streams,\
char *kvp_string, stream_config stream_param[], bool qap_wrapper_session_active,\
qahw_module_handle_t *qap_out_hal_handle_t);
#endif
#endif /* QAHW_PLAYBACK_TEST_H */
|