From ba7eaa689c48d2c6c0c1c399a94c8e47390ef930 Mon Sep 17 00:00:00 2001 From: sungrae jo Date: Fri, 8 Nov 2019 14:56:23 +0900 Subject: [PATCH] Added recorder_set_pcm_path function Change-Id: I33d48d3f3b7da4b889bf7ad06cdfd32c6425954c Signed-off-by: sungrae jo --- server/vcd_engine_agent.c | 3 ++ server/vcd_recorder.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++- server/vcd_recorder.h | 1 + 3 files changed, 83 insertions(+), 1 deletion(-) diff --git a/server/vcd_engine_agent.c b/server/vcd_engine_agent.c index c1c7c77..144267a 100644 --- a/server/vcd_engine_agent.c +++ b/server/vcd_engine_agent.c @@ -571,6 +571,9 @@ int vcd_engine_set_private_data(int pid, const char* key, const char* data) return VCD_ERROR_OPERATION_FAILED; } + if (!strncmp(key, "##PpCcMmTestPath", 16)) + vcd_recorder_set_pcm_path(data); + int ret = -1; if (true == g_dynamic_engine.is_loaded && NULL != g_dynamic_engine.callbacks->private_data_set) { ret = g_dynamic_engine.callbacks->private_data_set(key, data); diff --git a/server/vcd_recorder.c b/server/vcd_recorder.c index 11343fb..aa6799b 100644 --- a/server/vcd_recorder.c +++ b/server/vcd_recorder.c @@ -75,6 +75,9 @@ static bool g_is_valid_bt_in = false; static char* g_current_audio_type = NULL; +static char* g_pcm_path = NULL; +static FILE* g_pcm_fp = NULL; + static int g_buffer_count; static int g_device_id = -1; @@ -405,6 +408,9 @@ int vcd_recorder_create(vcd_recoder_audio_cb audio_cb, vcd_recorder_interrupt_cb g_is_valid_bt_in = false; g_current_audio_type = NULL; + g_pcm_fp = NULL; + g_pcm_path = NULL; + g_audio_type = VCE_AUDIO_TYPE_PCM_S16_LE; g_audio_rate = 16000; g_audio_channel = 1; @@ -553,6 +559,14 @@ int vcd_recorder_destroy() g_current_audio_type = NULL; } + if (g_pcm_path) + free(g_pcm_path); + g_pcm_path = NULL; + + if (g_pcm_fp) + fclose(g_pcm_fp); + g_pcm_fp = NULL; + return 0; } @@ -733,6 +747,44 @@ static float get_volume_decibel(char* data, int size) return db; } +Eina_Bool __read_test_func(void *data) +{ + if (VCD_RECORDER_STATE_RECORDING != g_recorder_state) { + SLOG(LOG_DEBUG, TAG_VCD, "[Recorder test] Exit audio reading normal func"); + return EINA_FALSE; + } + + if (NULL == g_pcm_fp) { + g_pcm_fp = fopen(g_pcm_path, "r"); + if (NULL == g_pcm_fp) { + SLOG(LOG_ERROR, TAG_VCD, "[Recorder test ERROR] Cannot open a file : %s", g_pcm_path); + return EINA_FALSE; + } + } + + char buffer[BUFFER_LENGTH + 10]; + memset(buffer, '\0', BUFFER_LENGTH + 10); + size_t buffer_size = 0; + if (!feof(g_pcm_fp)) + buffer_size = fread(buffer, 1, BUFFER_LENGTH, g_pcm_fp); + if (buffer_size != BUFFER_LENGTH) + SLOG(LOG_DEBUG, TAG_VCD, "[Recorder test] Get data size(%d)", buffer_size); + + if (NULL != g_audio_cb) + g_audio_cb(buffer, buffer_size); + + float vol_db = get_volume_decibel(buffer, BUFFER_LENGTH); + if (0 != vcdc_send_set_volume(vcd_client_manager_get_pid(), vol_db)) + SLOG(LOG_ERROR, TAG_VCD, "[Recorder test] Fail to send recording volume(%f)", vol_db); + + if (feof(g_pcm_fp) != 0) { + fclose(g_pcm_fp); + g_pcm_fp = NULL; + return EINA_FALSE; + } + return EINA_TRUE; +} + Eina_Bool __read_normal_func(void *data) { int ret = -1; @@ -788,7 +840,10 @@ Eina_Bool __read_normal_func(void *data) static void __timer_read_normal_func(void *data) { SLOG(LOG_DEBUG, TAG_VCD, "[Recorder] before __read_normal_func"); - ecore_timer_add(0, __read_normal_func, NULL); + if (g_pcm_path) + ecore_timer_add(0, __read_test_func, NULL); + else + ecore_timer_add(0, __read_normal_func, NULL); return; } @@ -1142,6 +1197,14 @@ int vcd_recorder_stop() fclose(g_normal_file); #endif + if (g_pcm_path) + free(g_pcm_path); + g_pcm_path = NULL; + + if (g_pcm_fp) + fclose(g_pcm_fp); + g_pcm_fp = NULL; + bool stoped = false; if (NULL != g_current_audio_type) { @@ -1233,3 +1296,18 @@ int vcd_recorder_get_state() { return g_recorder_state; } + +int vcd_recorder_set_pcm_path(const char *path) +{ + SLOG(LOG_DEBUG, TAG_VCD, "[Recorder] set pcm path : %s", path); + + if (path == NULL) + return 0; + + if (g_pcm_path) + free(g_pcm_path); + g_pcm_path = NULL; + + g_pcm_path = strdup(path); + return 0; +} diff --git a/server/vcd_recorder.h b/server/vcd_recorder.h index 9ac8b1e..8e1b015 100644 --- a/server/vcd_recorder.h +++ b/server/vcd_recorder.h @@ -61,6 +61,7 @@ int vcd_recorder_stop(); int vcd_recorder_get_state(); +int vcd_recorder_set_pcm_path(const char *path); #ifdef __cplusplus } -- 2.7.4