Set and unset all audio feed callbacks on create/destroy 62/238762/6
authorSuyeon Hwang <stom.hwang@samsung.com>
Fri, 17 Jul 2020 06:19:50 +0000 (15:19 +0900)
committerSuyeon Hwang <stom.hwang@samsung.com>
Tue, 8 Jun 2021 07:58:31 +0000 (16:58 +0900)
Change-Id: Ia79cd65c242fe5392c615d81596f5b13217c7192
Signed-off-by: Suyeon Hwang <stom.hwang@samsung.com>
server/vcd_recorder.c

index f532aca9cd58c7501e34b975a1dd35aca08ec7b0..f122ef6257a8660940ff0f082498c5f906b74d79 100644 (file)
@@ -536,6 +536,24 @@ int vcd_recorder_create(vcd_recoder_audio_cb audio_cb, vcd_recorder_interrupt_cb
        ma_ap_initialize();
        ma_ap_set_audio_streaming_cb(audio_streaming_cb, NULL);
 
+       /* Set audio feed callback */
+#ifdef TV_BT_MODE
+       if (BT_ERROR_NONE != bt_hid_set_audio_data_receive_cb(_bt_hid_audio_data_receive_cb, NULL)) {
+               SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail bt_hid_set_audio_data_receive_cb()");
+       }
+#endif
+#ifdef TV_FFV_MODE
+       if (g_farfieldvoice_h) {
+               SLOG(LOG_INFO, TAG_VCD, "[Recorder INFO] Register farfield voice audio callback");
+               farfield_voice_register_audio_cb(g_farfieldvoice_h, _ffv_audio_function_cb, NULL);
+       }
+#endif
+#ifdef TV_MSF_WIFI_MODE
+       if (MSFResult_OK != RegisterMSFAudioCallback(__msf_wifi_audio_data_receive_cb, NULL)) {
+               SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to start Wi-Fi audio");
+       }
+#endif
+
        return 0;
 }
 
@@ -544,21 +562,7 @@ int vcd_recorder_destroy()
        ma_ap_deinitialize();
        int ret = -1;
        if (VCD_RECORDER_STATE_RECORDING == g_recorder_state) {
-               if (0 == strncmp(VCE_AUDIO_ID_BLUETOOTH, g_current_audio_type, strlen(VCE_AUDIO_ID_BLUETOOTH))) {
-#ifdef TV_BT_MODE
-                       bt_hid_unset_audio_data_receive_cb();
-#endif
-               } else if (0 == strncmp(VCE_AUDIO_ID_WIFI, g_current_audio_type, strlen(VCE_AUDIO_ID_WIFI))) {
-#ifdef TV_MSF_WIFI_MODE
-                       UnRegisterMSFAudioCallback();
-#endif
-               } else {
-                       ret = audio_in_unprepare(g_audio_h);
-                       if (AUDIO_IO_ERROR_NONE != ret) {
-                               SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to unprepare audio : %d", ret);
-                       }
-               }
-               g_recorder_state = VCD_RECORDER_STATE_READY;
+               vcd_recorder_stop();
        }
 
        ret = sound_manager_remove_device_connection_changed_cb(g_device_id);
@@ -576,6 +580,11 @@ int vcd_recorder_destroy()
                SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to audio in destroy, ret(%d)", ret);
        g_audio_h = NULL;
 
+
+#ifdef TV_MSF_WIFI_MODE
+       UnRegisterMSFAudioCallback();
+#endif
+
 #ifdef TV_FFV_MODE
        if (NULL != g_farfieldvoice_h) {
                SLOG(LOG_INFO, TAG_VCD, "[Recorder INFO] Unregister farfield voice");
@@ -586,9 +595,7 @@ int vcd_recorder_destroy()
 
 #ifdef TV_BT_MODE
        bt_hid_unset_audio_data_receive_cb();
-
        bt_hid_host_deinitialize();
-
        bt_product_deinit();
 #endif
 
@@ -607,7 +614,7 @@ int vcd_recorder_destroy()
                fclose(g_pcm_fp);
        g_pcm_fp = NULL;
 
-       return 0;
+       return VCD_ERROR_NONE;
 }
 
 int vcd_recorder_set(const char* audio_type, vce_audio_type_e type, int rate, int channel)
@@ -1120,64 +1127,18 @@ int vcd_recorder_start()
        }
 
        g_buffer_count = 0;
-
-       SLOG(LOG_INFO, TAG_VCD, "[Recorder] Enter, recorder state(%d)", g_recorder_state);
-
-       if (VCD_RECORDER_STATE_RECORDING == g_recorder_state)   return 0;
-
-       bool started = false;
-       SLOG(LOG_INFO, TAG_VCD, "[Recorder] audio type : %s", g_current_audio_type);
-
-       if (NULL != g_current_audio_type) {
-               if (0 == strncmp(VCE_AUDIO_ID_BLUETOOTH, g_current_audio_type, strlen(VCE_AUDIO_ID_BLUETOOTH))) {
 #ifdef TV_BT_MODE
-                       if (BT_ERROR_NONE != bt_hid_set_audio_data_receive_cb(_bt_hid_audio_data_receive_cb, NULL)) {
-                               SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail bt_hid_set_audio_data_receive_cb()");
-                       }
-                       SLOG(LOG_INFO, TAG_VCD, "[Recorder] Start bt audio");
-                       g_bt_extend_count = 0;
-                       started = true;
+       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_INFO, TAG_VCD, "[Recorder] call farfield_voice_register_audio_cb() function");
-#ifdef TV_FFV_MODE
-                       if (g_farfieldvoice_h) {
-                               SLOG(LOG_INFO, TAG_VCD, "[Recorder INFO] Register farfield voice audio callback");
-                               farfield_voice_register_audio_cb(g_farfieldvoice_h, _ffv_audio_function_cb, NULL);
-                       }
-#endif
-                       started = true;
-               } else if (0 == strncmp(VCE_AUDIO_ID_WIFI, g_current_audio_type, strlen(VCE_AUDIO_ID_WIFI))) {
-                       SLOG(LOG_INFO, TAG_VCD, "[Recorder] call RegisterMSFAudioCallback() function");
-#ifdef TV_MSF_WIFI_MODE
 
-                       ret = RegisterMSFAudioCallback(__msf_wifi_audio_data_receive_cb, NULL);
-                       SLOG(LOG_ERROR, TAG_VCD, "[Recorder] ret = %d", ret);
-                       if (MSFResult_OK == ret) {
-                               started = true;
-                       } else {
-                               SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to start Wi-Fi audio");
-                               return VCD_ERROR_OPERATION_FAILED;
-                       }
-#endif
-               }
+       SLOG(LOG_INFO, TAG_VCD, "[Recorder] Enter, recorder state(%d)", g_recorder_state);
+       if (VCD_RECORDER_STATE_RECORDING == g_recorder_state) {
+               return VCD_ERROR_NONE;
        }
 
-       SLOG(LOG_INFO, TAG_VCD, "[Recorder] started = %d", started);
-       if (false == started) {
+       if (NULL != g_current_audio_type && 0 == strncmp(VCE_AUDIO_ID_NONE, g_current_audio_type, strlen(VCE_AUDIO_ID_NONE))) {
                /* check audio format */
                __check_audio_format();
-#if 0
-               ret = sound_manager_acquire_focus(g_stream_info_h, SOUND_STREAM_FOCUS_FOR_RECORDING, NULL);
-               if (SOUND_MANAGER_ERROR_NONE != ret) {
-                       SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to acquire focus : %d", ret);
-               } else {
-                       ret = audio_in_set_sound_stream_info(g_audio_h, g_stream_info_h);
-                       if (AUDIO_IO_ERROR_NONE != ret) {
-                               SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to set stream info : %d", ret);
-                       }
-               }
-#endif
 
                ret = audio_in_prepare(g_audio_h);
                if (AUDIO_IO_ERROR_NONE != ret) {
@@ -1226,7 +1187,7 @@ int vcd_recorder_start()
                SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] File not found!");
        }
 #endif
-       return 0;
+       return VCD_ERROR_NONE;
 }
 
 int vcd_recorder_stop()
@@ -1240,7 +1201,7 @@ int vcd_recorder_stop()
        }
 
        if (VCD_RECORDER_STATE_READY == g_recorder_state)
-               return 0;
+               return VCD_ERROR_NONE;
 
        g_recorder_state = VCD_RECORDER_STATE_READY;
 
@@ -1256,91 +1217,17 @@ int vcd_recorder_stop()
                fclose(g_pcm_fp);
        g_pcm_fp = NULL;
 
-       bool stoped = false;
-
-       if (NULL != g_current_audio_type) {
-               if (0 == strncmp(VCE_AUDIO_ID_BLUETOOTH, g_current_audio_type, strlen(VCE_AUDIO_ID_BLUETOOTH))) {
-#ifdef TV_BT_MODE
-                       // Unregister callback for bluetooth audio
-                       bt_hid_unset_audio_data_receive_cb();
-
-                       int bt_retry = 0;
-                       while (5 > bt_retry) {
-                               ret = bt_hid_rc_stop_sending_voice(NULL);
-                               if (BT_ERROR_NONE == ret) {
-                                       SLOG(LOG_INFO, TAG_VCD, "[Recorder] Stop bt audio recorder");
-                                       stoped = true;
-                                       break;
-                               } else if (BT_ERROR_NOW_IN_PROGRESS == ret) {
-                                       SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail bt_hid_rc_stop_sending_voice()");
-                                       usleep(50000);
-                                       bt_retry++;
-                               } else {
-                                       break;
-                               }
-                       }
-                       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_INFO, TAG_VCD, "[DEBUG] Recorder reset to NONE");
-                               vcd_recorder_set(VCE_AUDIO_ID_NONE, g_audio_type, g_audio_rate, g_audio_channel);
-                       }
-
-                       if (false == stoped) {
-                               SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to stop bt audio");
-                               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_INFO, TAG_VCD, "[DEBUG] FFV");
-#ifdef TV_FFV_MODE
-                       // Unregister callback for far field audio
-                       if (g_farfieldvoice_h)
-                               farfield_voice_unregister_audio_cb(g_farfieldvoice_h);
-#endif
-                       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_INFO, 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
-                       // Unregister callback for wifi audio
-                       UnRegisterMSFAudioCallback();
-
-                       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_WIFI, sizeof(VCE_AUDIO_ID_WIFI)))) {
-                               SLOG(LOG_INFO, 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;
-#endif
-               } else  {
-                       SLOG(LOG_INFO, TAG_VCD, "[Recorder] current audio type is NONE");
-               }
-       }
-
-       if (false == stoped) {
+       if (NULL != g_current_audio_type && 0 == strncmp(VCE_AUDIO_ID_NONE, g_current_audio_type, strlen(VCE_AUDIO_ID_NONE))) {
                ret = audio_in_unprepare(g_audio_h);
                if (AUDIO_IO_ERROR_NONE != ret) {
                        SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to stop audio : %d", ret);
                        return VCD_ERROR_OPERATION_FAILED;
                }
-
-#if 0
-               ret = sound_manager_release_focus(g_stream_info_h, SOUND_STREAM_FOCUS_FOR_RECORDING, NULL);
-               if (SOUND_MANAGER_ERROR_NONE != ret) {
-                       SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to release focus : %d", ret);
-               }
-#endif
        }
 
-       return 0;
+       vcd_recorder_set(VCE_AUDIO_ID_NONE, g_audio_type, g_audio_rate, g_audio_channel);
+
+       return VCD_ERROR_NONE;
 }
 
 int vcd_recorder_get_state()