#ifdef TV_PRODUCT
#define TV_BT_MODE
#define TV_MSF_WIFI_MODE
+#define TV_FFV_MODE
#endif
#include <audio_io.h>
#ifdef TV_MSF_WIFI_MODE
#include <MSFVoiceInterface.h>
#endif
+#ifdef TV_FFV_MODE
+#include <farfield-voice-api.h>
+#endif
#endif
#include "vcd_client_data.h"
#define FOCUS_SERVER_READY "/tmp/.focus_server_ready"
#define VCE_AUDIO_ID_NONE "VC_AUDIO_ID_NONE" /**< None audio id */
+#define VCE_AUDIO_ID_FFV "VC_FARFIELD_VOICE_VD"
static vcd_recorder_state_e g_recorder_state = VCD_RECORDER_STATE_READY;
static int g_device_id = -1;
+#ifdef TV_FFV_MODE
+farfield_voice_h g_farfieldvoice_h = NULL;
+#endif
+
static sound_stream_info_h g_stream_for_volume_h = NULL;
static virtual_sound_stream_h g_virtual_sound_stream_h = NULL;
#endif
return;
}
+#endif
+#ifdef TV_FFV_MODE
+static void _ffv_audio_function_cb(void* data, unsigned int length, void* user_data)
+{
+ if (0 != strncmp(g_current_audio_type, VCE_AUDIO_ID_FFV, sizeof(VCE_AUDIO_ID_FFV))) {
+ vcd_state_e state = vcd_config_get_service_state();
+ if (VCD_STATE_READY == state) {
+ vcd_recorder_set(VCE_AUDIO_ID_FFV, VCE_AUDIO_TYPE_PCM_S16_LE, 16000, 1);
+ } else {
+ SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] current audio type is (%s)", g_current_audio_type);
+ return;
+ }
+ }
+
+ if (NULL != g_audio_cb) {
+ if (0 != g_audio_cb(data, length)) {
+ SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to read audio");
+ vcd_recorder_stop();
+ }
+ }
+}
#endif
#if 1
g_interrupt_cb = interrupt_cb;
g_recorder_state = VCD_RECORDER_STATE_READY;
+#ifdef TV_FFV_MODE
+ g_farfieldvoice_h = farfield_voice_init();
+ if (NULL == g_farfieldvoice_h)
+ {
+ SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to init farfield_voice_init");
+ }
+
+ if (g_farfieldvoice_h)
+ {
+ farfield_voice_register_audio_cb(g_farfieldvoice_h, _ffv_audio_function_cb, NULL);
+ }
+#endif
+
#ifdef TV_BT_MODE
bool is_bt_failed = false;
if (0 != ret)
SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to audio in destroy, ret(%d)", ret);
+#ifdef TV_FFV_MODE
+ if (NULL != g_farfieldvoice_h)
+ {
+ farfield_voice_unregister_audio_cb(g_farfieldvoice_h);
+ farfield_voice_final(g_farfieldvoice_h);
+ g_farfieldvoice_h = NULL;
+ }
+#endif
+
#ifdef TV_BT_MODE
bt_hid_unset_audio_data_receive_cb();
if (NULL != g_current_audio_type) {
if ((!strncmp(g_current_audio_type, VCE_AUDIO_ID_NONE, strlen(g_current_audio_type)) &&
strncmp(audio_type, VCE_AUDIO_ID_BLUETOOTH, strlen(audio_type)) &&
+ strncmp(audio_type, VCE_AUDIO_ID_FFV, strlen(audio_type)) &&
strncmp(audio_type, VCE_AUDIO_ID_WIFI, strlen(audio_type))) ||
(strncmp(g_current_audio_type, VCE_AUDIO_ID_BLUETOOTH, strlen(g_current_audio_type)) &&
+ strncmp(g_current_audio_type, VCE_AUDIO_ID_FFV, strlen(g_current_audio_type)) &&
strncmp(g_current_audio_type, VCE_AUDIO_ID_WIFI, strlen(g_current_audio_type)) &&
strncmp(g_current_audio_type, VCE_AUDIO_ID_NONE, strlen(g_current_audio_type)) &&
!strncmp(audio_type, VCE_AUDIO_ID_NONE, strlen(audio_type)))) {
}
g_current_audio_type = strdup(audio_type);
+ } else if (0 == strncmp(VCE_AUDIO_ID_FFV, audio_type, strlen(VCE_AUDIO_ID_FFV))) {
+ if (NULL != g_current_audio_type) {
+ free(g_current_audio_type);
+ g_current_audio_type = NULL;
+ }
+
+ g_current_audio_type = strdup(audio_type);
} else {
if (false == g_is_valid_audio_in) {
SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Audio-in is NOT valid");
g_bt_extend_count = 0;
#endif
+ } else if (0 == strncmp(VCE_AUDIO_ID_FFV, g_current_audio_type, strlen(VCE_AUDIO_ID_FFV))) {
+ SLOG(LOG_DEBUG, TAG_VCD, "[Recorder] call FARFIELD() function");
+ started = true;
} else if (0 == strncmp(VCE_AUDIO_ID_WIFI, g_current_audio_type, strlen(VCE_AUDIO_ID_WIFI))) {
SLOG(LOG_DEBUG, TAG_VCD, "[Recorder] call RegisterMSFAudioCallback() function");
#ifdef TV_MSF_WIFI_MODE
}
if (NULL != g_current_audio_type &&
(!strncmp(g_current_audio_type, VCE_AUDIO_ID_BLUETOOTH, sizeof(VCE_AUDIO_ID_BLUETOOTH)) ||
+ !strncmp(g_current_audio_type, VCE_AUDIO_ID_FFV, sizeof(VCE_AUDIO_ID_FFV)) ||
!strncmp(g_current_audio_type, VCE_AUDIO_ID_WIFI, sizeof(VCE_AUDIO_ID_WIFI)))) {
SLOG(LOG_DEBUG, TAG_VCD, "[DEBUG] Recorder reset to NONE");
vcd_recorder_set(VCE_AUDIO_ID_NONE, g_audio_type, g_audio_rate, g_audio_channel);
return VCD_ERROR_OPERATION_FAILED;
}
#endif
+ } else if (0 == strncmp(VCE_AUDIO_ID_FFV, g_current_audio_type, strlen(VCE_AUDIO_ID_FFV))) {
+ SLOG(LOG_DEBUG, TAG_VCD, "[DEBUG] FFV");
+ if (NULL != g_current_audio_type &&
+ (!strncmp(g_current_audio_type, VCE_AUDIO_ID_BLUETOOTH, sizeof(VCE_AUDIO_ID_BLUETOOTH)) ||
+ !strncmp(g_current_audio_type, VCE_AUDIO_ID_FFV, sizeof(VCE_AUDIO_ID_FFV)) ||
+ !strncmp(g_current_audio_type, VCE_AUDIO_ID_WIFI, sizeof(VCE_AUDIO_ID_WIFI)))) {
+ SLOG(LOG_DEBUG, TAG_VCD, "[DEBUG] Recorder reset to NONE");
+ vcd_recorder_set(VCE_AUDIO_ID_NONE, g_audio_type, g_audio_rate, g_audio_channel);
+ }
+ stoped = true;
+
} else if (0 == strncmp(VCE_AUDIO_ID_WIFI, g_current_audio_type, strlen(VCE_AUDIO_ID_WIFI))) {
#ifdef TV_MSF_WIFI_MODE
UnRegisterMSFAudioCallback();