From: CCC <2393524978@qq.com> Date: Thu, 29 Jun 2023 06:41:42 +0000 (+0800) Subject: MMI_VIDEO_CALL_SUPPORT_JRTC X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=f7117e8ce930d218b83e366adcd6ada0005b8375;p=mirrors%2F8910_C55.git MMI_VIDEO_CALL_SUPPORT_JRTC --- diff --git a/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/c/mmi_jrtc_client.c b/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/c/mmi_jrtc_client.c new file mode 100644 index 00000000..064adc48 --- /dev/null +++ b/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/c/mmi_jrtc_client.c @@ -0,0 +1,282 @@ + + + +#ifdef MMI_VIDEO_CALL_SUPPORT_JRTC + +#include +#include + +#include "mmi_video_call.h" +#include "jrtc.h" + +// for network +#include +#include + +#include "mn_type.h" +#include "mmk_type.h" +#include "mmk_timer.h" +#include "mmi_module.h" +#include "mmiconnection_export.h" +#include "mmiphone_export.h" +#include "mmipdp_export.h" + + +typedef enum jrtc_state video_call_jrtc_state_e; +typedef enum jrtc_error video_call_jrtc_error_e; +typedef struct jrtc_image_t video_call_jrtc_image_t; + +typedef struct +{ + void * state_task; + video_call_jrtc_image_t video_frame; + video_call_jrtc_image_t camera_frame; + void * jrtc_ptr; + TIMER_ID closed_timer_id; + uint8_t closing; +} video_call_jrtc_t; + + +extern voip_phone_call_params_t voipcall_params; +static video_call_jrtc_t s_video_call_jrtc = {0}; + + +static uint8_t voip_jrtc_get_image(void * preview_buf); + + +void mmi_video_call_jrtc_config_init(void) +{ + char appkey[24+1] = "dc1db81c19d1da4f5fb4a197"; + char key[16+1] = "K75A1vS562671d38"; + char uid[64+1] = {0}; + char tokens[128+1] = ""; + MN_DUAL_SYS_E dual_sys = MN_DUAL_SYS_1; + MN_IMEI_T imei_arr = {0}; + uint8 imei_str[20] = {0}; + + MNNV_GetIMEIEx(dual_sys, imei_arr); + ConvertBcdToDigitalStr(MN_MAX_IMEI_LENGTH, imei_arr, imei_str); + sprintf ( (char*) uid, "%s", imei_str); + + SCI_TRACE_LOW("[@CHENG_VIDEO_CALL][%s][%d]: \n", __FUNCTION__, __LINE__); + + jrtc_config(appkey, uid, key, tokens); +} + +static void mmi_video_call_jrtc_clean_up(void) +{ + SCI_TRACE_LOW("[@CHENG_VIDEO_CALL][%s][%d]: \n", __FUNCTION__, __LINE__); + + if(NULL != s_video_call_jrtc.state_task) + { + SCI_TRACE_LOW("[@CHENG_VIDEO_CALL][%s][%d]: \n", __FUNCTION__, __LINE__); + + lv_task_del(s_video_call_jrtc.state_task); + } + + Hal_Mem_Set(&voip_jrtc, 0, sizeof(video_call_jrtc_t)); +} + +static void mmi_video_call_jrtc_timeout_cb(void * para) +{ + SCI_TRACE_LOW("[@CHENG_VIDEO_CALL][%s][%d]: \n", __FUNCTION__, __LINE__); + + mmi_video_call_jrtc_clean_up(); +} + +static void mmi_video_call_jrtc_on_state(lv_task_t * task) +{ + static int8_t oldstate = -1; + video_call_jrtc_state_e state = jrtc_state(s_video_call_jrtc.jrtc_ptr); + + if(state != oldstate) + { + SCI_TRACE_LOW("[@CHENG_VIDEO_CALL][%s][%d]: oldstate=%d,state=%d\n", __FUNCTION__, __LINE__, oldstate, state); + } + + switch(state) + { + case JRTC_CLOSED: + if((NULL != s_video_call_jrtc.jrtc_ptr) && (NULL == s_video_call_jrtc.closed_timer_id)) + { + video_call_jrtc_error_e err = jrtc_error(s_video_call_jrtc.jrtc_ptr); + + SCI_TRACE_LOW("[@CHENG_VIDEO_CALL][%s][%d]: error=%d\n", __FUNCTION__, __LINE__, err); + + if(!s_video_call_jrtc.closing) + { + jrtc_close(s_video_call_jrtc.jrtc_ptr, JRTC_ENIL); + s_video_call_jrtc.closing = 1; + } + + s_video_call_jrtc.closed_timer_id = Hal_Timer_Start(100, mmi_video_call_jrtc_timeout_cb, NULL, 0); + } + + if(MMI_VOIP_CALL_STATE_NULL != voipcall_params.state) + { + watch_voip_call_response_no_carrier(0, 1); + } + break; + + case JRTC_LEAVING: + break; + + case JRTC_OPENED: + break; + + case JRTC_JOINING: + break; + + case JRTC_JOINED: + break; + + case JRTC_TALKING: + if(MMI_VOIP_CALL_STATE_ACTIVE != voipcall_params.state) + { + watch_voip_call_response_connect(0); + } + + /* Get image */ + if (MMI_VIDEO_CALL_TYPE_VIDEO == voipcall_params.voip_call_type) + { + void *buf = voip_phone_get_video_buffer(); + if(voip_jrtc_get_image(buf)) + { + lv_canvas_set_buffer(voip_phone_get_ext()->canvas, buf, canvas_width, canvas_heigh, LV_IMG_CF_TRUE_COLOR); + } + } + break; + + default: + break; + } + + oldstate = state; +} + + +static int8_t mmi_video_call_jrtc_open(const char* roomid, MMI_VIDEO_CALL_TYPE_E calltype) +{ + SCI_TRACE_LOW("[@CHENG_VIDEO_CALL][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, roomid, calltype); + + Hal_Mem_Set(&voip_jrtc, 0, sizeof(video_call_jrtc_t)); + + if (MMI_VIDEO_CALL_TYPE_VIDEO == calltype) + { + s_video_call_jrtc.rxframe.width = s_video_call_jrtc.txframe.width = 176; // 240; // 176; + s_video_call_jrtc.rxframe.height = s_video_call_jrtc.txframe.height = 144; // 320; // 144; + s_video_call_jrtc.rxframe.fps = s_video_call_jrtc.txframe.fps = 8; // 10; + s_video_call_jrtc.rxframe.kbps = s_video_call_jrtc.txframe.kbps = 120; // 240; + + mci_videocall_camera_set_sensor(1); // 0:rear camera; 1:front camera + + s_video_call_jrtc.jrtc_ptr= jrtc_open(roomid, 0, &s_video_call_jrtc.rxframe, &s_video_call_jrtc.txframe); + } + else + { + s_video_call_jrtc.jrtc_ptr= jrtc_open(roomid, 0, NULL, NULL); + } + + if (!s_video_call_jrtc.jrtc_ptr) + { + SCI_TRACE_LOW("[@CHENG_VIDEO_CALL][%s][%d]: \n", __FUNCTION__, __LINE__); + mmi_video_call_jrtc_clean_up(); + return -1; + } + jrtc_activate(s_video_call_jrtc.jrtc_ptr, JRTC_AUDIO|JRTC_CAMERA); + + s_video_call_jrtc.state_task = lv_task_create(mmi_video_call_jrtc_on_state, VIDEO_RENDER_PERIOD, LV_TASK_PRIO_HIGH, NULL); + return 0; +} + +int8 mmi_video_call_dial(char * number, MMI_VIDEO_CALL_TYPE_E calltype) +{ + int8 ret = -1; + + if (NULL == s_video_call_jrtc.jrtc_ptr) + ret = mmi_video_call_jrtc_open(number, calltype); + + SCI_TRACE_LOW("[@CHENG_VIDEO_CALL][%s][%d]: %s,%d,%d\n", __FUNCTION__, __LINE__, number, calltype, ret); + return ret; +} + +void mmi_video_call_hangup(BOOL bye) +{ + SCI_TRACE_LOW("[@CHENG_VIDEO_CALL][%s][%d]: %p,%d\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr, bye); + + if (NULL != s_video_call_jrtc.jrtc_ptr) + { + video_call_jrtc_error_e err = (TRUE == bye) ? JRTC_EBYE : JRTC_EAUDIOCALL; + + jrtc_close(s_video_call_jrtc.jrtc_ptr, err); + s_video_call_jrtc.closing = 1; + } + else + { + watch_voip_call_response_no_carrier(0, 0); + } +} + +int8_t mmi_video_call_answer_req(void) +{ + int8_t ret = -1; + + SCI_TRACE_LOW("[@CHENG_VIDEO_CALL][%s][%d]: %p\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr); + if (NULL == s_video_call_jrtc.jrtc_ptr) + ret = mmi_video_call_jrtc_open(voipcall_params.number, voipcall_params.voip_call_type); + + return ret; +} + +void mmi_video_call_reject_req(BOOL bye) +{ + SCI_TRACE_LOW("[@CHENG_VIDEO_CALL][%s][%d]: %p,%d\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr, bye); + + if (NULL != s_video_call_jrtc.jrtc_ptr) + { + video_call_jrtc_error_e err = (TRUE == bye) ? JRTC_EBYE : JRTC_EAUDIOCALL; + + jrtc_close(s_video_call_jrtc.jrtc_ptr, err); + s_video_call_jrtc.closing = 1; + } + else + { + watch_voip_call_response_no_carrier(0, 0); + } +} + + +//extern unsigned yuv420_scale(int src_width, int src_height, int dst_width, int dst_height, unsigned char *src_buf, unsigned char *dst_buf, unsigned char semi); +//extern unsigned rgb565_scale(int32_t src_width, int32_t src_height, int32_t dst_width, int32_t dst_height, uint8_t *src_buf, uint8_t *dst_buf); +//extern void yuv420_2_rgb565(int width, int height, const unsigned char *src, unsigned short *dst, unsigned semi); + +static uint8_t voip_jrtc_get_image(void * preview_buf) +{ + uint8_t ret = 0; + lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext(); + LV_ASSERT_MEM(ext); + + video_call_jrtc_image_t * frame = NULL; + if(ext->local_remote_switch_flag == VOIP_REMOTE_SWITCH_REMOTE) + frame = &s_video_call_jrtc.rxframe; + else + frame = &s_video_call_jrtc.txframe; + + if (frame->put != frame->get) { +#if (ENABLE_VIDEO_SCALE == 0) + yuv420_2_rgb565(frame->width, frame->height, frame->data, preview_buf, frame->format); +#else + Hal_Yuv420_Render(frame->width, frame->height, canvas_width, canvas_heigh, frame->data, preview_buf, frame->format); +#endif + + frame->get = frame->put; + ret = 1; + voip_fps_check(frame->fps); + } + + return ret; +} + +#endif + + diff --git a/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/c/mmi_video_call.c b/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/c/mmi_video_call.c new file mode 100644 index 00000000..a1fa639b --- /dev/null +++ b/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/c/mmi_video_call.c @@ -0,0 +1,964 @@ + + + +#ifdef MMI_VIDEO_CALL_SUPPORT_JRTC + +#include +#include + +#include "video_call_demo.h" +#include "agora_video_call.h" + + +// for network +#include +#include + +#include "mn_type.h" +#include "mmk_type.h" +#include "mmk_timer.h" +#include "mmi_module.h" +#include "mmiconnection_export.h" +#include "mmiphone_export.h" +#include "mmipdp_export.h" + +typedef struct { + int32_t activated; + MMIPDP_INTERFACE_E ps_interface; + uint32 net_id; + uint32 net_type; +} net_state_t; + +static net_state_t* get_net_state_instance() +{ + static net_state_t _net_state = { 0, MMIPDP_INTERFACE_GPRS, -1, -1 }; + return &_net_state; +} + +static void net_msg_handler(MMIPDP_CNF_INFO_T *m) +{ + net_state_t *p_net_state = get_net_state_instance(); + + LOGD(TAG, "enter"); + + if (m == NULL || m->ps_interface != p_net_state->ps_interface) + { + LOGE(TAG, "invalid argument"); + return; + } + + switch (m->msg_id) + { + case MMIPDP_ACTIVE_CNF: + if (m->result == MMIPDP_RESULT_SUCC) + { + p_net_state->net_type = p_net_state->ps_interface; + p_net_state->net_id = m->nsapi; + p_net_state->activated = 1; + LOGD(TAG, "activate success, type %u id %u", p_net_state->net_type, p_net_state->net_id); + } + else + { + LOGD(TAG, "activate failed"); + } + break; + + case MMIPDP_ACTIVE_TIMOUT_IND: + LOGD(TAG, "activate failed"); + break; + + case MMIPDP_DEACTIVE_IND: + case MMIPDP_DEACTIVE_CNF: + case MMIPDP_SERVICE_CHANGE_IND: + case MMIPDP_SUSPEND_IND: + case MMIPDP_RESUME_IND: + case MMIPDP_REACTIVE_TIMER_IND: + case MMIPDP_PS_ACTIVE_CNF: + case MMIPDP_PS_DEACTIVE_CNF: + case MMIPDP_PS_DEACTIVE_IND: + default: + LOGD(TAG, "Unknown Event: msg_id = %d", m->msg_id); + break; + } + + LOGD(TAG, "exit"); +} + +static int __activate_gprs(net_state_t *s) +{ + MMIPDP_ACTIVE_INFO_T active_info = { 0 }; + char *apn = NULL; + int n, i; + + if (!MMIAPIPHONE_IsSimAvailable (0)) + { + LOGE(TAG, "can't find any sim card"); + return -1; + } + + n = MMIAPICONNECTION_GetLinkSettingNum(0); + + for (i = 0; i < n; i++) + { + MMICONNECTION_LINKSETTING_DETAIL_T *ls = MMIAPICONNECTION_GetLinkSettingItemByIndex(0, i); + + if (ls != NULL && ls->apn_len) + { + apn = (char *)ls->apn; + break; + } + } + + if (apn == NULL) + { + LOGE(TAG, "can't find any apn"); + return -1; + } + + active_info.app_handler = MMI_MODULE_CAMERA; + active_info.dual_sys = 0; + active_info.apn_ptr = apn; + active_info.user_name_ptr = NULL; + active_info.psw_ptr = NULL; + active_info.priority = 3; + active_info.ps_service_rat = MN_UNSPECIFIED; + active_info.ps_interface = MMIPDP_INTERFACE_GPRS; + active_info.handle_msg_callback = net_msg_handler; + active_info.ps_service_type = IM_E; + active_info.storage = MN_GPRS_STORAGE_ALL; + active_info.ip_type = MMICONNECTION_IP_V4; + + return (MMIAPIPDP_Active (&active_info)) ? 0 : -1; +} + +static int __activate_wifi(net_state_t *s) +{ + MMIPDP_ACTIVE_INFO_T active_info = {0}; + active_info.app_handler = MMI_MODULE_CAMERA; + active_info.handle_msg_callback = net_msg_handler; + active_info.ps_interface = MMIPDP_INTERFACE_WIFI; + + return (MMIAPIPDP_Active(&active_info)) ? 0 : -1; +} + +int32_t video_call_activate_net(net_state_t *s) +{ + int i; + + if (s->ps_interface == MMIPDP_INTERFACE_GPRS) + { + __activate_gprs(s); + } + else + { + __activate_wifi(s); + } + + for (i = 0; i < 50; i++) + { + SCI_Sleep(200); + + if (s->net_id != -1) + { + break; + } + } + + if (s->net_id == -1) + { + LOGE(TAG, "net %s activate failed", (s->ps_interface == MMIPDP_INTERFACE_GPRS ? "GPRS" : "WIFI")); + return -1; + } + +EXIT: + return 0; +} + +typedef enum +{ + CMD_START, + CMD_STOP, +} cmd_e; + +typedef struct +{ + cmd_e cmd; +} video_call_cmd_t; + +static void avc_msg_notify_callback(avc_msg_t *p_msg) +{ + LOGD(TAG, "recv msg. code=%d", p_msg->code); + + switch (p_msg->code) + { + case AVC_MSG_JOIN_CHANNEL_SUCCESS: + break; + + case AVC_MSG_USER_JOINED: + break; + + case AVC_MSG_USER_OFFLINE: + break; + + case AVC_MSG_CONNECTION_LOST: + break; + + case AVC_MSG_INVALID_APP_ID: + break; + + case AVC_MSG_INVALID_CHANNEL_NAME: + break; + + case AVC_MSG_INVALID_TOKEN: + break; + + case AVC_MSG_TOKEN_EXPIRED: + break; + + default: + LOGW(TAG, "no msg handler, code %d", p_msg->code); + break; + } + + MMIAPI_HandleAgoraVideoCallNotifyMsg(p_msg->code); +} + +#define CERTIFICATE_MAX_LEN (2048) +static void worker_task_entry(uint32 argc, void* argv) +{ + int rval = 0; + avc_init_t init = {0}; + char str_certificate[CERTIFICATE_MAX_LEN] = {0}; + uint32_t str_certificate_len; + avc_config_t config = {0}; + video_call_cmd_t *sig_ptr = NULL; + uint32_t *p_b_thread_created = (uint32_t *)argv; + + *p_b_thread_created = 1; + + while (1) + { + sig_ptr = (video_call_cmd_t *)SCI_GetSignal(SCI_IdentifyThread()); + assert(sig_ptr); + + if (sig_ptr->cmd == CMD_START) + { + // step 0: activate net if net_id is invalid + // Vendor SHOULD set net params directly from their own network manager + net_state_t *p_net_state = get_net_state_instance(); + + if (!p_net_state->activated) + { + video_call_activate_net(p_net_state); + } + + // check whether net is activated + if (!p_net_state->activated) + { + LOGE(TAG, "net isn't activated, pls activate first to obtain net_type & net_id"); + goto START_FAIL; + } + + // step 1: avc init, contain license activate + str_certificate_len = sizeof(str_certificate); + + init.net_id = p_net_state->net_id; + init.enable_license_activate = false; init.license.str_customer_key = "a0be1cc6bdba446c8010756e1eb41c57"; + init.license.str_customer_secret = "a12dfaa0469f4c38a661718270ad3cdb"; + init.license.str_license_key = "test_163"; + init.license.str_certificate = str_certificate; + + rval = avc_init(&init); + + if (rval != 0) + { + LOGE(TAG, "avc init failed"); + goto INIT_FAIL; + } + + // step 2: Vendor SHOULD config correctly + config.p_appid = "ce534ffc2a5e4883a492279afdba20fe"; + config.p_token = NULL; + config.p_log_dir = NULL; + config.p_channel_name = "avc_demo_8910"; + config.enable_net_param = false; + config.net_param_type = -1; + config.net_param_id = -1; + config.msg_notify_cb = avc_msg_notify_callback; + config.enable_net_param = p_net_state->activated; + config.net_param_type = p_net_state->net_type; + config.net_param_id = p_net_state->net_id; + config.enable_bwe_param = true; + config.uid = 0; + config.bwe_param_max_bps = 1000 * 1000; + config.str_certificate = str_certificate; + + // step 3: validate config + // a. check appid, if certificate is disabled, appid is MUST + // b. check token, if certificate is enabled, token is MUST + // c. check channel name, MUST + // Vendor can check certificate enable on website: https://console.agora.io + if (config.p_appid == NULL || strcmp(config.p_appid, "") == 0) + { + LOGW(TAG, "invalid appid in config"); + goto START_FAIL; + } + + if (config.p_appid == NULL && (config.p_token == NULL || strcmp(config.p_token, "") == 0)) + { + LOGW(TAG, "invalid token in config"); + goto START_FAIL; + } + + if (!config.enable_net_param || config.net_param_type < 0 || config.net_param_id < 0) + { + LOGW(TAG, "invalid net param in config"); + goto START_FAIL; + } + + // step 4: call avc_start + rval = avc_start(&config); + if (rval < 0) + { + LOGE(TAG, "avc start failed, reason:%s", avc_err_2_str(rval)); + goto START_FAIL; + } + + LOGI(TAG, "avc start success"); + + INIT_FAIL: + START_FAIL: + LOGI(TAG, "avc start, rval %d", rval); + + } + else if (sig_ptr->cmd == CMD_STOP) + { + avc_stop(); + avc_fini(); + } + + SCI_FREE(sig_ptr); + } + + SCI_ThreadExit(); +} + +#define CALL_TASK_THREAD_NAME "VIDEO_CALL_WORKER_TASK" +#define CALL_TASK_QUEUE_NAME "Q_VIDEO_CALL_WORKER_TASK" +#define CALL_TASK_STACK_SIZE (8 * 1024) +#define CALL_TASK_QUEUE_NUM (4 * 30) +#define CALL_TASK_TASK_PRIV (67) + +static uint32_t gs_worker_task_id = -1; +static void _create_worker_task(void) +{ + static uint32_t b_thread_created = 0; + + if (b_thread_created) + { + return; + } + + gs_worker_task_id = SCI_CreateAppThread(CALL_TASK_THREAD_NAME, // Name string of the thread + CALL_TASK_QUEUE_NAME, // Queue name string of the thread + worker_task_entry, // Entry function of the thread + 1, // First parameter for entry function, + &b_thread_created, // Second parameter for entry function, + CALL_TASK_STACK_SIZE, // Size of the thread stack in bytes + CALL_TASK_QUEUE_NUM, // Number of messages which can be enqueued + CALL_TASK_TASK_PRIV, // Priority of the thread. + SCI_PREEMPT, // Indicates if the thread is preemptable. + SCI_AUTO_START); + + while (!b_thread_created) + { + SCI_Sleep(20); + } +} + +int video_call_start(void) +{ + video_call_cmd_t *cmd_ptr = NULL; + + LOGD(TAG, "enter"); + + _create_worker_task(); + + cmd_ptr = (video_call_cmd_t *)SCI_ALLOCA(sizeof(video_call_cmd_t)); + cmd_ptr->cmd = CMD_START; + SCI_SendSignal((xSignalHeader)cmd_ptr, gs_worker_task_id); + LOGD(TAG, "exit"); + + return 0; +} + +int video_call_stop(void) +{ + video_call_cmd_t *cmd_ptr = NULL; + + if (-1 == gs_worker_task_id) + { + LOGW(TAG, "video call not start now."); + return 0; + } + + LOGD(TAG, "enter"); + cmd_ptr = (video_call_cmd_t *)SCI_ALLOCA(sizeof(video_call_cmd_t)); + cmd_ptr->cmd = CMD_STOP; + SCI_SendSignal((xSignalHeader)cmd_ptr, gs_worker_task_id); + LOGD(TAG, "video call stop"); + + return 0; +} + + + + + +#include "sci_types.h" +#include "mmi_common.h" +#include "mmi_font.h" +#include "mmiset_nv.h" +#include "mmi_id.h" +#include "mmiset_id.h" +#include "window_parse.h" +#include "mmidisplay_data.h" +#include "mereg_videocall.h" +#include "mmiset_text.h" +#include "gps_at6558r_ref.h" +#include "mmi_protocol_customer_api.h" +#include "mmi_protocol_main_api.h" +#include "mmipub.h" +#include "Mmicc_text.h" + + +#include "videochatservice.h" + +/**---------------------------------------------------------------------------* + ** Compiler Flag * + **---------------------------------------------------------------------------*/ +#ifdef __cplusplus + extern "C" + { +#endif + + +static MEREG_LOCAL_USER_ID_STRUCT_T s_userId = {0}; + +static VC_CONTACTS_DATA_T s_video_call_contact_info = {0}; +static uint8 s_video_call_contact_index = 0; +static uint8 s_video_call_win_status = 0; // 0-contact list menu; 1-call button select +static MMI_VIDEO_CALL_PARAMS_T s_video_call_params = {0}; + + + + + + + +PUBLIC void MMIAPI_InitMeregUserId(void) +{ + MN_RETURN_RESULT_E return_value = MN_RETURN_FAILURE; + + MMINV_READ(MMINV_MEREG_USER_ID, &s_userId, return_value); + + if (MN_RETURN_SUCCESS != return_value) + { + memset(&s_userId, 0x0, sizeof(MEREG_LOCAL_USER_ID_STRUCT_T)); + MMINV_WRITE(MMINV_MEREG_USER_ID, &s_userId); + } +} + +PUBLIC BOOLEAN MMIAPI_GetMeregUserId(uint32 * local_userId) +{ + MN_RETURN_RESULT_E return_value = MN_RETURN_FAILURE; + + MMINV_READ(MMINV_MEREG_USER_ID, &s_userId, return_value); + + if (MN_RETURN_SUCCESS != return_value) + { + memset(&s_userId, 0x0, sizeof(MEREG_LOCAL_USER_ID_STRUCT_T)); + MMINV_WRITE(MMINV_MEREG_USER_ID, &s_userId); + } + + *local_userId = s_userId.id_number; + + return s_userId.id_valid; +} + +PUBLIC void MMIAPI_SetMeregUserId(uint32 server_userId) +{ + SPRD_TRACE_INFO("MMIAPI_SetMeregUserId: server_userId = %d", server_userId); + + if(server_userId) + { + s_userId.id_valid = TRUE; + s_userId.id_number = server_userId; + + MMINV_WRITE(MMINV_MEREG_USER_ID, &s_userId); + } +} + +PUBLIC void MMIAPI_ResetMeregUserId(void) +{ + memset(&s_userId, 0x0, sizeof(MEREG_LOCAL_USER_ID_STRUCT_T)); + MMINV_WRITE(MMINV_MEREG_USER_ID, &s_userId); +} + + +PUBLIC void MMIAPI_SetMeregVideoCallContactInfo(VC_CONTACTS_DATA_T *vc_contact) +{ + uint8 vc_contact_num = vc_contact->vc_contact_num >= MMIAPI_VC_CONTACT_MAX_NUM ? MMIAPI_VC_CONTACT_MAX_NUM : vc_contact->vc_contact_num; + + SPRD_TRACE_INFO("MMIAPI_SetMeregVideoCallContactInfo: vc_contact_num = %d", vc_contact_num); + + memset(&s_vc_contact_info, 0x0, sizeof(VC_CONTACTS_DATA_T)); + + if(vc_contact_num) + { + memcpy(&s_vc_contact_info, vc_contact, sizeof(VC_CONTACTS_DATA_T)); + + SPRD_TRACE_INFO("MMIAPI_SetMeregVideoCallContactInfo: s_vc_contact_info.vc_contact_num = %d", s_vc_contact_info.vc_contact_num); + + MMK_SendMsg(MMISET_MEREG_VIDEOCALL_WIN_ID, MSG_FULL_PAINT, PNULL); + + } +} + +PUBLIC void MMIAPI_GetUserId(char* id_buf) +{ + char tempBuf[64] = {0}; + + sprintf ((char*) tempBuf, "%u",s_userId.id_number); + + SPRD_TRACE_INFO("MMIAPI_GetUserId tempBuf =%s",tempBuf); + + strcat(id_buf, tempBuf); +} + +PUBLIC void MMIAPI_GetContactInfo(char* id_buf) +{ + char tempBuf[64] = {0}; + + sprintf ((char*) tempBuf, "%s",s_vc_contact_info.vc_data[s_video_call_contact_index].vc_user_id); + + SPRD_TRACE_INFO("MMIAPI_GetContactInfo tempBuf =%s",tempBuf); + + strcat(id_buf, tempBuf); +} + +PUBLIC void MMIAPI_SendVoiceCall(BOOLEAN call) +{ + + int32 user_id = 0; + + SPRD_TRACE_INFO("MMIAPI_SendVoiceCall: voice"); + + sscanf(s_vc_contact_info.vc_data[s_video_call_contact_index].vc_user_id,"%d",&user_id); + + SPRD_TRACE_INFO("MMIAPI_SendVoiceCall user_id =%d",user_id); + + km_FZD_net_action_TALK(call, user_id); //voice + +} + +PUBLIC void MMIAPI_PlayVideoCallRing(void) +{ + uint8 s_agora_call_volume = 0; + + MMIDEFAULT_TurnOnBackLight(); + MMIDEFAULT_AllowTurnOffBackLight(FALSE); + MMIAPISET_StopAllRing(TRUE); + + if(MMIAPIENVSET_GetActiveModeId() != MMIENVSET_SILENT_MODE) + { + s_agora_call_volume = MMIAPISET_GetCallRingVolume(); + MMIAPISET_PlayCallRingByVol(s_agora_call_volume, 1, AUD_PLAY_FOREVER, MMISET_RING_TYPE_CALL, PNULL); + } +} + + +PUBLIC void MMIAPI_StopVideoCallRing(void) +{ + if(MMIAPISET_IsPlayingAppRing()) + { + MMIAPISET_StopAppRing(); + } +} + + + + + + + +static MMI_RESULT_E mmi_video_call_hangup_button_cb(void) +{ + //mmi_video_call_button_call(MMI_VIDEO_CALL_TYPE_VIDEO); + + return 0; +} + +static void mmi_video_call_dialing_win_display(MMI_WIN_ID_T win_id, MMI_CTRL_ID_T ctrl_id) +{ + GUI_LCD_DEV_INFO lcd_dev_info = {GUI_MAIN_LCD_ID, GUI_BLOCK_MAIN}; + GUI_RECT_T full_rect = MMITHEME_GetFullScreenRect(); + GUI_RECT_T ctrl_rect = {MMI_MAINSCREEN_HEIGHT-70, MMI_MAINSCREEN_HEIGHT-10-125, MMI_MAINSCREEN_WIDTH-30, MMI_MAINSCREEN_HEIGHT-10}; + GUI_BG_T ctrl_bg = {0}; + GUI_POINT_T image_point = {0}; + MMI_IMAGE_ID_T image_id = IMAGE_NULL; + uint16 image_width = 0, image_height = 0; + + //background + GUI_FillRect(&lcd_dev_info, full_rect, MMI_BLACK_COLOR); + + image_id = IMAGE_VIDEO_CALL_CONTACT_PHOTO; + GUIRES_GetImgWidthHeight(&image_width,&image_height, image_id, win_id); + image_point.x = (MMI_MAINSCREEN_WIDTH - image_width) / 2; + image_point.y = 40; + IMG_EnableTransparentColor(TRUE); + GUIRES_DisplayImg(&image_point, PNULL, PNULL, win_id, image_id, &lcd_dev_info); + IMG_EnableTransparentColor(FALSE); + + //button + GUIBUTTON_SetRect( ctrl_id, &ctrl_rect); + //GUIBUTTON_SetFont( ctrl_id, &font_all); + + //MMI_GetLabelTextByLang(TXT_GO_TO_WORK, &display_text); + //ctrl_bg.bg_type = GUI_BG_COLOR; + //ctrl_bg.color = GUI_RGB8882RGB565(0X0ECC92); //GUI_RGB2RGB565(0x40, 0x40, 0x40); + //GUIBUTTON_SetBg(ctrl_id, &ctrl_bg); + GUIBUTTON_SetGrayed(ctrl_id, FALSE, &ctrl_bg, FALSE); + + GUIBUTTON_SetRunSheen(ctrl_id, FALSE); + //GUIBUTTON_SetText( ctrl_id, display_text.wstr_ptr, display_text.wstr_len); + GUIBUTTON_SetCallBackFunc(ctrl_id, mmi_video_call_hangup_button_cb); + GUIBUTTON_SetVisible(ctrl_id, TRUE, FALSE); +} + +LOCAL MMI_RESULT_E HandleVideoCallDialingWindow(MMI_WIN_ID_T win_id, MMI_MESSAGE_ID_E msg_id, DPARAM param) +{ + MMI_RESULT_E result = MMI_RESULT_TRUE; + GUI_POINT_T dis_point = {0, 0}; + MMI_CTRL_ID_T ctrl_id = MMI_COMMON_BUTTON_CTRL_ID; + + switch (msg_id) + { + case MSG_OPEN_WINDOW: + break; + + case MSG_FULL_PAINT: + mmi_video_call_dialing_win_display(win_id, ctrl_id); + break; + + case MSG_CTL_PENOK: + case MSG_CTL_MIDSK: + case MSG_APP_WEB: + break; + + case MSG_KEYDOWN_CANCEL: + case MSG_CTL_CANCEL: + MMK_CloseWin(win_id); + break; + + case MSG_KEYDOWN_OK: + case MSG_CTL_OK: + break; + + case MSG_CLOSE_WINDOW: + break; + + default: + result = MMI_RESULT_FALSE; + break; + } + + return result; +} + +WINDOW_TABLE(MMI_VIDEO_CALL_DIALING_WIN_TAB) = +{ + WIN_FUNC( (uint32)HandleVideoCallDialingWindow), + WIN_ID( MMI_VIDEO_CALL_DIALING_WIN_ID ), + WIN_HIDE_STATUS, + //WIN_TITLE(TXT_MAINMENU_VIDEO_CALL), + CREATE_BUTTON_CTRL(IMAGE_VIDEO_CALL_HANGUP_BUTTON, MMI_COMMON_BUTTON_CTRL_ID), + END_WIN +}; + + +static void mmi_win_init_video_call_main(MMI_WIN_ID_T win_id, MMI_CTRL_ID_T ctrl_id) +{ + s_video_call_contact_index = 0; + s_video_call_win_status = 0; + memset(&s_video_call_params, 0x0, sizeof(s_video_call_params)); + + //get video call contact members from server + km_FZD_net_action_MEMBERS(); +} + +static void mmi_win_display_video_call_contact_list(MMI_WIN_ID_T win_id, MMI_CTRL_ID_T ctrl_id) +{ + uint8 index = 0; + uint8 total_item = s_video_call_contact_info.vc_contact_num > MMIAPI_VC_CONTACT_MAX_NUM ? MMIAPI_VC_CONTACT_MAX_NUM : s_vc_contact_info.vc_contact_num; + + GUILIST_RemoveAllItems(ctrl_id); + GUILIST_SetMaxItem( ctrl_id, total_item, FALSE ); //max item MMIAPI_VC_CONTACT_MAX_NUM = 50 + + for (index = 0; index < total_item; index++) + { + BOOLEAN is_update = FALSE; + GUILIST_ITEM_T item_t = {0}; + GUILIST_ITEM_DATA_T item_data = {0}; + char t_str[32] = {0}; + wchar temp_wstr[32] = {0}; + //MMI_IMAGE_ID_T t_image = IMAGE_NULL; + //MMI_STRING_T t_text = {0}; + + if(NULL != s_video_call_contact_info.vc_data[index].vc_name) + { + MMIAPICOM_Wstrcpy(temp_wstr, s_video_call_contact_info.vc_data[index].vc_name); + } + else + { + MMIAPICOM_StrToWstr(s_video_call_contact_info.vc_data[index].vc_number, temp_wstr); + } + + item_t.item_data_ptr = &item_data; + + //set item style + item_t.item_style = GUIITEM_STYLE_ONE_LINE_TEXT; // GUIITEM_STYLE_ONE_LINE_TEXT_ICON; + item_t.item_state |= GUIITEM_STATE_SELFADAPT_RECT|GUIITEM_STATE_CONTENT_CHECK; + + item_data.item_content[0].item_data_type = GUIITEM_DATA_TEXT_BUFFER; //GUIITEM_DATA_TEXT_ID; + item_data.item_content[0].item_data.text_buffer.wstr_len = MMIAPICOM_Wstrlen(temp_wstr); + item_data.item_content[0].item_data.text_buffer.wstr_ptr = temp_wstr; + + item_data.softkey_id[LEFT_BUTTON] = TXT_NULL; + item_data.softkey_id[RIGHT_BUTTON] = TXT_NULL; + item_data.softkey_id[MIDDLE_BUTTON] = TXT_NULL; + + if( is_update ) + { + GUILIST_ReplaceItem(ctrl_id, &item_t, index); + } + else + { + GUILIST_AppendItem(ctrl_id, &item_t); + } + } + + GUILIST_SetCurItemIndex(ctrl_id, s_video_call_contact_index); + MMK_SetAtvCtrl(win_id, ctrl_id); +} + +static void mmi_video_call_dial_timeout_cb(void) +{ + if(0 != s_video_call_params.dial_timer_id) + MMK_StopTimer(s_video_call_params.dial_timer_id); + + memset(&s_video_call_params, 0x0, sizeof(s_video_call_params)); + +} + +static void mmi_video_call_button_call(MMI_VIDEO_CALL_TYPE_E calltype) +{ + int dial_ret = -1; + + if(0 != s_video_call_params.dial_timer_id) + MMK_StopTimer(s_video_call_params.dial_timer_id); + + if(0 != s_video_call_params.incoming_timer_id) + MMK_StopTimer(s_video_call_params.incoming_timer_id); + + memset(&s_video_call_params, 0x0, sizeof(s_video_call_params)); + + s_video_call_params.state = MMI_VIDEO_CALL_STATE_DIALING; + s_video_call_params.calltype = calltype; + s_video_call_params.is_mt = FALSE; + strcpy(s_video_call_params.number, s_video_call_contact_info.vc_data[s_video_call_contact_index].vc_number); + MMIAPICOM_Wstrcpy(s_video_call_params.name, s_video_call_contact_info.vc_data[s_video_call_contact_index].vc_name) + + dial_ret = mmi_video_call_dial(s_video_call_params.number, calltype); + if(0 == s_video_call_params.dial_timer_id) + { + uint32 time_out = (-1 == dial_ret) ? 1*1000 : 60 * 1000; + + s_video_call_params.dial_timer_id = MMK_CreateTimerCallback(time_out, mmi_video_call_dial_timeout_cb, PNULL, FALSE); + } + + MMK_CreateWin((uint32*)MMI_VIDEO_CALL_DIALING_WIN_TAB, PNULL); + + return 0; +} + +static MMI_RESULT_E mmi_video_call_voice_button_cb(void) +{ + mmi_video_call_button_call(MMI_VIDEO_CALL_TYPE_VOICE); + + return 0; +} + +static MMI_RESULT_E mmi_video_call_video_button_cb(void) +{ + mmi_video_call_button_call(MMI_VIDEO_CALL_TYPE_VIDEO); + + return 0; +} + +static void mmi_win_display_video_call_button(MMI_WIN_ID_T win_id, MMI_CTRL_ID_T button_ctrl0, MMI_CTRL_ID_T button_ctrl1) +{ + GUI_RECT_T ctrl_rect0 = {30, 10, MMI_MAINSCREEN_WIDTH-30, 10+125}, ctrl_rect1 = {30, MMI_MAINSCREEN_HEIGHT-10-125, MMI_MAINSCREEN_WIDTH-30, MMI_MAINSCREEN_HEIGHT-10}; + GUI_BG_T ctrl_bg = {0}; + + GUIAPICTRL_SetState(button_ctrl0, GUICTRL_STATE_INVISIBLE, FALSE); + GUIAPICTRL_SetState(button_ctrl1, GUICTRL_STATE_INVISIBLE, FALSE); + + //button 0 + GUIBUTTON_SetRect( button_ctrl0, &ctrl_rect0); + //GUIBUTTON_SetFont( button_ctrl0, &font_all); + + //MMI_GetLabelTextByLang(TXT_GO_TO_WORK, &display_text); + //ctrl_bg.bg_type = GUI_BG_COLOR; + //ctrl_bg.color = GUI_RGB8882RGB565(0X0ECC92); //GUI_RGB2RGB565(0x40, 0x40, 0x40); + //GUIBUTTON_SetBg(button_ctrl0, &ctrl_bg); + GUIBUTTON_SetGrayed(button_ctrl0, FALSE, &ctrl_bg, FALSE); + + GUIBUTTON_SetRunSheen(button_ctrl0, FALSE); + //GUIBUTTON_SetText( button_ctrl0, display_text.wstr_ptr, display_text.wstr_len); + GUIBUTTON_SetCallBackFunc(button_ctrl0, mmi_video_call_voice_button_cb); + //GUIBUTTON_SetVisible(button_ctrl0, FALSE, FALSE); + + //button 1 + GUIBUTTON_SetRect( button_ctrl1, &ctrl_rect1); + //GUIBUTTON_SetFont( button_ctrl1, &font_all); + + //MMI_GetLabelTextByLang(TXT_GO_OFF_WORK, &display_text); + //ctrl_bg.bg_type = GUI_BG_COLOR; + //ctrl_bg.color = GUI_RGB8882RGB565(0X0ECC92); //GUI_RGB2RGB565(0x40, 0x40, 0x40); + //GUIBUTTON_SetBg(button_ctrl1, &ctrl_bg); + GUIBUTTON_SetGrayed(button_ctrl1, FALSE, &ctrl_bg, FALSE); + + GUIBUTTON_SetRunSheen(button_ctrl1, FALSE); + //GUIBUTTON_SetText( button_ctrl1, display_text.wstr_ptr, display_text.wstr_len); + GUIBUTTON_SetCallBackFunc(button_ctrl1, mmi_video_call_video_button_cb); + //GUIBUTTON_SetVisible(button_ctrl1, FALSE, FALSE); +} + +static void mmi_win_display_video_call_main(MMI_WIN_ID_T win_id, MMI_CTRL_ID_T ctrl_id, MMI_CTRL_ID_T button_ctrl0, MMI_CTRL_ID_T button_ctrl1) +{ + GUI_LCD_DEV_INFO lcd_dev_info = {GUI_MAIN_LCD_ID, GUI_BLOCK_MAIN}; + GUI_RECT_T full_rect = MMITHEME_GetFullScreenRect(); + + //background + GUI_FillRect(&lcd_dev_info, full_rect, MMI_BLACK_COLOR); + GUIAPICTRL_SetState(ctrl_id, GUICTRL_STATE_INVISIBLE, TRUE); + GUIAPICTRL_SetState(button_ctrl0, GUICTRL_STATE_INVISIBLE, TRUE); + GUIAPICTRL_SetState(button_ctrl1, GUICTRL_STATE_INVISIBLE, TRUE); + + if(0 == s_video_call_win_status) + { + GUIAPICTRL_SetState(ctrl_id, GUICTRL_STATE_INVISIBLE, FALSE); + mmi_win_display_video_call_contact_list(win_id, ctrl_id); + } + else if(1 == s_video_call_win_status) + { + GUIAPICTRL_SetState(button_ctrl0, GUICTRL_STATE_INVISIBLE, FALSE); + GUIAPICTRL_SetState(button_ctrl1, GUICTRL_STATE_INVISIBLE, FALSE); + mmi_win_display_video_call_button(win_id, button_ctrl0, button_ctrl1); + } +} + +LOCAL MMI_RESULT_E HandleVideoCallMainWindow(MMI_WIN_ID_T win_id, MMI_MESSAGE_ID_E msg_id, DPARAM param) +{ + MMI_RESULT_E result = MMI_RESULT_TRUE; + MMI_CTRL_ID_T ctrl_id = MMI_COMMON_LIST_CTRL_ID, button_ctrl0 = MMI_COMMON_BUTTON_0_CTRL_ID, button_ctrl1 = MMI_COMMON_BUTTON_1_CTRL_ID; + + switch (msg_id) + { + case MSG_OPEN_WINDOW: + mmi_win_init_video_call_main(win_id, ctrl_id, button_ctrl0, button_ctrl1); + break; + + case MSG_FULL_PAINT: + mmi_win_display_video_call_main(win_id, ctrl_id, button_ctrl0, button_ctrl1); + break; + + case MSG_CTL_PENOK: + case MSG_CTL_MIDSK: + case MSG_APP_WEB: + //user make a call by press or long press green key + if(0 != GUILIST_GetTotalItemNum(ctrl_id)) // && (GUILIST_GetSelectedItemIndex(ctrl_id, PNULL, 0) == 0)) + { + s_video_call_contact_index = GUILIST_GetCurItemIndex(ctrl_id); + s_video_call_win_status = 1; // display button + + MMK_SendMsg(win_id, MSG_FULL_PAINT, PNULL); + } + break; + + case MSG_KEYDOWN_CANCEL: + case MSG_CTL_CANCEL: + MMK_CloseWin(win_id); + break; + + case MSG_KEYDOWN_OK: + case MSG_CTL_OK: + break; + + case MSG_CLOSE_WINDOW: + //stop hero server + MMIHERO_VoiceChatServerExit(); + break; + + default: + result = MMI_RESULT_FALSE; + break; + } + + return (result); +} + +WINDOW_TABLE(MMI_VIDEO_CALL_MAIN_WIN_TAB) = +{ + WIN_FUNC( (uint32)HandleVideoCallMainWindow ), + WIN_ID( MMI_VIDEO_CALL_MAIN_WIN_ID ), + WIN_HIDE_STATUS, + WIN_TITLE(TXT_MAINMENU_VIDEO_CALL), + CREATE_LISTBOX_CTRL(GUILIST_TEXTLIST_E, MMI_COMMON_LIST_CTRL_ID), + CREATE_BUTTON_CTRL(IMAGE_VIDEO_CALL_VOICE_BUTTON, MMI_COMMON_BUTTON_0_CTRL_ID), + CREATE_BUTTON_CTRL(IMAGE_VIDEO_CALL_VIDEO_BUTTON, MMI_COMMON_BUTTON_1_CTRL_ID), + END_WIN +}; + +PUBLIC BOOLEAN MMIAPI_EnterVideoCallMainWindow(void) +{ + MN_DUAL_SYS_E dual_sys = MN_DUAL_SYS_1; + + if(0 == MNPHONE_GetAttState(dual_sys)) // or use (FALSE == MMIAPIPHONE_GetDataServiceSIM(&dual_sys)) + { + MMIPUB_OpenAlertWarningWin(STR_SIM_SEARCH_FAIL); + return FALSE; + } + + if(FALSE == MMIAPIPHONE_IsSimAvailable(dual_sys)) + { + MMIPUB_OpenAlertWarningWin(STR_SIM_NOT_SIM_EXT01); + return FALSE; + } + + MMK_CreateWin((uint32*)MMI_VIDEO_CALL_MAIN_WIN_TAB, PNULL); + return TRUE; +} + + +/**---------------------------------------------------------------------------* + ** Compiler Flag * + **---------------------------------------------------------------------------*/ +#ifdef __cplusplus + } +#endif + + +#endif + diff --git a/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/h/jrtc.h b/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/h/jrtc.h new file mode 100644 index 00000000..6097a4a6 --- /dev/null +++ b/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/h/jrtc.h @@ -0,0 +1,297 @@ +#ifndef __JRTC_H__ +#define __JRTC_H__ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * ºô½ÐÁ÷³Ì: ¼ÙÉè `É豸A' ºô½Ð `É豸B' + * + * Æô¶¯Á¬½ÓÁ÷³Ì + * - A ÐèÒª "ijÖÖÍÆËÍ»úÖÆ" (³¤Á¬½Ó,ÍÆËÍ·½Ê½) ֪ͨµ½B, + * - A ´ò¿ªÍ¨ÐÅ(jrtc_open), ³õʼ״̬Ϊ JRTC_OPENED + * - B ÊÕµ½ "¸ÃÖÖÍÆËÍ֪ͨ" ºóÒ²´ò¿ªÍ¨ÐÅ(jrtc_open), ³õʼ״̬Ϊ JRTC_OPENED + * - A Ö÷¶¯¼¤»îýÌåÉ豸,ÒÔ±ã×Ô¶¯½ÓÌý + * jrtc_activate(jc, JRTC_AUDIO|JRTC_CAMERA) + * + * ³É¹¦½¨Á¢ÍøÂçͨµÀ + * - A ºÍ B ÔÚ·þÎñÆ÷É϶ԺôºóÁ¬Í¨, ͨ»°×´Ì¬¶¼±äΪ JRTC_JOINED + * - A ¿ÉÒÔ¿ªÊ¼äÖȾ¾µÍ·Ô¤ÀÀ(äÖȾÁ÷³Ì) + * + * ±»½ÐÁ÷³Ì + * - B ÊÕµ½AµÄÒôÊÓÆµÊý¾Ý, ͨ»°×´Ì¬±äΪ JRTC_TALKING + * - B ¿ÉÒÔ¿ªÊ¼äÖȾ¶Ô¶ËÊÓÆµ(äÖȾÁ÷³Ì) + * - B µ¯³ö½ÓÌýÌáʾ, ÈôÓû§Ñ¡Ôñ"¾Ü½Ó"Ôò½øÈë¹Ò¶ÏÁ÷³Ì + * - B ÔÚ½çÃæÑ¡Ôñ½ÓÌýºó, Ò²¼¤»îýÌåÉ豸 + * jrtc_activate(jc,JRTC_AUDIO|JRTC_CAMERA) + * + * Ö÷½ÐÁ÷³Ì + * - A ÔÚÊÕµ½ÒôÊÓÆµÊý¾Ýºó, ״̬±äΪJRTC_TALKING + * - A Ò²¿ªÊ¼äÖȾ¶Ô¶ËÊÓÆµ(äÖȾÁ÷³Ì) + * + * ¹Ò¶ÏÁ÷³Ì + * - A µ÷Óà jrtc_close Ö÷¶¯¹Ò¶Ï + * - B ͨ»°×´Ì¬½«±äΪ JRTC_LEAVING »ò JRTC_CLOSED + * - ͨ¹ý jrtc_error() ¿ÉÒÔ»ñÈ¡¹Ò¶ÏµÄÔ­Òò(³ö´íÖµ) + * - B µ÷Óà jrtc_close ½áÊøÍ¨»° + * + * ×î¼òº¯ÊýÁ÷³Ì + * - jrtc_config(...); // ÅäÖû·¾³,Ö»Ðèµ÷ÓÃÒ»´Î + * - jc = jrtc_open(...);// ´ò¿ªÍ¨»°,·µ»Ø¶ÔÏó + * - jrtc_activate(jc,JRTC_AUDIO|JRTC_CAMERA);//¼¤»îÉ豸 + * - ÔÚ UI Ïß³Ì,¸üÐÂÊÓÆµ»òÔ¤ÀÀ,²Î¿¼ÏÂÃæµÄ`äÖȾÁ÷³Ì' + * - jrtc_close(jc, JRTC_EBYE); //Ö÷¶¯¹Ò¶Ï, ²¢ÇҵȴýÍøÂçÏ߳̽áÊø + * + * ÊÕµ½À´µçÖжϵĴ¦Àí + * - jrtc_close(jc, JRTC_EAUDIOCALL);//½áÊøÍ¨»°,µÈ´ýÍøÂçÏ߳̽áÊø + */ + +/** ͨ»°×´Ì¬ */ +enum jrtc_state +{ + JRTC_CLOSED=0,/*< ³õʼ״̬ */ + JRTC_LEAVING, /*< jrtc_leave »òÄÚ²¿³ö´íºóµÄ״̬ */ + JRTC_OPENED, /*< µ÷ÓÃjrtc_open ºóµÄ״̬ */ + JRTC_JOINING, /*< ¼ÓÈëÖеÄ״̬ */ + JRTC_JOINED, /*< ³É¹¦¼ÓÈë»á»° */ + JRTC_TALKING, /*< ÊÕµ½Ã½ÌåºóµÄ״̬ */ +}; + +/** ͨ»°´íÎóÖµ */ +enum jrtc_error +{ + JRTC_ENIL = 0, /* unknown error */ + JRTC_EPERM = 1, /* Operation not permitted */ + JRTC_ENONET = 64, /* Machine is not on the network */ + JRTC_EPROTO = 71, /* Protocol error */ + JRTC_EMSGSIZE = 90, /* Message too long */ + JRTC_ECONNRESET=104, /* Connection reset by peer */ + JRTC_ETIMEDOUT =101, /* Connection timed out */ + JRTC_ECONNREFUSED=111,/* Connection refused or closed */ + + JRTC_EOFFLINE = 128, /* Peer offline or over */ + JRTC_EDECLINE = 129, /* Peer decline the call */ + JRTC_EINVOKETIMEOUT = 130, /* IoTUnit invoke timeout */ + JRTC_ECALLSERVERERROR = 131, /* Call server error */ + JRTC_EROOMNOTFND = 132, /* Room or callee not found */ + JRTC_ECALLTIMEOUT = 133, /* Call timeout */ + JRTC_ENOTREG = 134, /* device id not registered */ + JRTC_ELOGIN = 135, /* device id login failed */ + JRTC_ETOKEN_NOTFOUND = 136, /* secret not found */ + JRTC_ETOKEN_INV = 137, /* token invalid */ + JRTC_ETOKEN_EXPIRE = 138, /* token expire */ + JRTC_ECODECINVALID = 139, /* Codec params invalid */ + + JRTC_EAUDIOCALL = 252, /* external audio call, don't close audio deivce */ + JRTC_EAUDIO=253, /* Audio device error */ + JRTC_EVIDEO=254, /* Video device error */ + + JRTC_EBYE = 255, /* Success, Closed by peer leave */ +}; + +/** ͨ»°ÖеÄýÌåÉ豸 */ +enum jrtc_device +{ + JRTC_SPEAKER = 1, + JRTC_MICROPHONE = 2, + JRTC_CAMERA = 4, + JRTC_AUDIO = 3, +}; + +enum jrtc_netstat +{ + JRTC_NET_NORMAL = 0, /* network is normal or unknown */ + JRTC_LOCAL_POOR = 1, + JRTC_REMOTE_POOR = 2, +}; + +/** Êý¾ÝÀàÐÍ + * @note + * | Èí¼þϵͳ | ƽ̨ | ²É¼¯¸ñʽ | ±àÂëºó¸ñʽ | ½âÂëºó¸ñʽ | + * | ------------ | -------- | ---------- | ---------- | ------------ | + * | Unisoc Mocor | UIS8910 | JRTC_UYVY | JRTC_JPEG | JRTC_UYVY, JRTC_JPEG [^1] | + * + * [^1]: ¿Éͨ¹ý video.format = JRTC_JPEG; jrtc_open(..., &video); ÉèÖà + */ +enum jrtc_dtype +{ + JRTC_I420 = 0, /*< ͼÏñ×Ö½ÚÊý=W*H*3/2 */ + JRTC_NV12 = 1, /*< ͼÏñ×Ö½ÚÊý=W*H*3/2 */ + JRTC_UYVY = 2, /*< ͼÏñ×Ö½ÚÊý=W*H*2 */ + JRTC_JPEG = 3, /*< ±£³Ö¼æÈÝÐÔ */ + JRTC_NV16 = 4, /*< ͼÏñ×Ö½ÚÊý=W*H*2 */ + + JRTC_RGB565 = 64, + + JRTC_H264 = 96, + JRTC_H263 = 97, +}; + +/** äÖȾÁ÷³Ì: + * jrtc_image_t* img ´ú±í jrtc_open Öд«Èë video »ò camera + * - ¼ì²âµ±Ç°ÎªÍ¨»°×´Ì¬, ·ñÔòÎÞÐëäÖȾ + * if (jrtc_state(jc) < JRTC_JOINED) break; + * + * - ÄÚ²¿×Ô¶¯¸üÐÂͼÏñ: + * if (img->get == img->put) { + * '¸üÐÂͼÏñÄÚÈÝ: ¼´¶ÔimgÖеÄdata, width, height, format ¸³Öµ' + * img->put++;//Ôö¼Óд¼ÆÊý + * } + * + * - ÉϲãUIÏß³Ì(App ½çÃæ²ã)¸ºÔð»æÖÆÍ¼Ïñ: + * if (img->get != img->put) { + * '½çÃæ»æÖƲÙ×÷: ¼´Ê¹ÓÃimgÖеÄdata, ¸üнçÃæ¿Ø¼þ' + * img->get = img->put;//Ôö¼Ó¶Á¼ÆÊý + * } + * + * ÔÚjrtc_open()ÖÐÓÃÓÚÉèÖý¨ÒéÖµ, ͨ»°¹ý³ÌÖÐÓÃÓÚ»ñȡͼÏñÊý¾Ý. + * ÀýÈç, Ï£Íû½ÓÊպͷ¢ËͶ¼ÊÇ240x240, 8Ö¡/ÃëµÄÊÓÆµÍ¨»°: + * static struct jrtc_image_t video, camera; + * video.width = camera.width = 240; + * video.height = camera.height = 240; + * video.fps = camera.fps = 8; + * video.kbps = camera.kbps = 120; + * //×¢Òâ,ÒÔÉϽöÊǽ¨ÒéÖµ, ÔÚ×îÖÕ½Óͨʱ, ÓÉ·þÎñÆ÷¾ö¶¨Êµ¼ÊÖµ + * //ÈôÄÚ²¿Ê¹ÓÃjpeg ±àÂë,Ôò»áºöÂÔ kbps Öµ + * + * jc = jrtc_open(roomid, 0, &video, &camera); + */ +struct jrtc_image_t +{/* ¿ÉǿתΪ jrtc_photo_t ʹÓà */ + void* data; + unsigned bytes; + unsigned short width, height; + char format;/*< enum jrtc_dtype */ + char fps; + unsigned short kbps; + volatile char put, get; + char reserve[2]; +}; + +/** µ±Ç°µÄ°æ±¾ºÅ */ +#define JRTC_VERSION "1.7.0.0" + +/** ÅäÖÃÈ«¾Ö²ÎÊý,Ö»Ðèµ÷ÓÃÒ»´Î. + * ×¢Òâ: + * - appkey ¹Ì¶¨³¤¶ÈΪ24 + * - key ¹Ì¶¨³¤¶ÈΪ16 + * - uid ÏÞÖÆ×î´ó×Ö·ûÊýΪ64 + * - tokens ÏÞÖÆ×î´ó×Ö·ûÊýΪ128 + * + * @param[in] appkey µ±Ç°APPÌØÓеıêʶ, ÐèÏòJuphoonÉêÇë»ñµÃ + * @param[in] uid ÕË»§ + * @param[in] key ͨѶÃÜÔ¿, ±ØÐëÓëappkeyÆ¥Åä, ÐèÏòJuphoonÉêÇë»ò×¢²á + * @param[in] ÓÃÓÚ¼øÈ¨µÄtokens,ĬÈÏΪ"" + */ +void jrtc_config (const char* appkey, const char* uid, const char key[16], const char* tokens); + +/**Õ¹Èñ UIX8910 ƽ̨ ÐèÒªÉèÖÃPDPÁ÷³Ìºó»ñµÃµÄÍøÂç ID */ +extern unsigned _jrtc_net_id; +/**Õ¹Èñ UIX8910 ƽ̨µÄ¾µÍ·½Ç¶È,¼´²É¼¯Í¼ÏñÐèҪ˳ʱÕëÐýת¸ÃÖµ,²ÅÄÜÕýÁ¢. ĬÈÏ90 */ +extern unsigned _jrtc_cam_angle; + +/** ·ÖÅäͨ»°×ÊÔ´²¢Æô¶¯ÍøÂçÏß³Ì + * ×¢Òâ: + * - ¶Ôticket³¤¶ÈºÍ²ÎÊýroomid¶¼ÏÞÖÆ×î´ó×Ö·ûÊýΪ64 + * - ÄÚ²¿É豸³õʼûÓ줻î,ºóÐøÐèÒªµ÷ÈçÏ¿ªÆô + * jrtc_activate(jc,JRTC_AUDIO|JRTC_CAMERA) + * + * ticket ×÷Ϊͨ»°ID, Ψһ±êʶÿ´Îͨ»°: + * - ²»Äܰüº¬JSONÐèתÒåµÄ×Ö·û + * - ÿ´Îͨ»°, ҪʹÓò»Í¬µÄ ticket,(Ëæ»ú²úÉú»òÏò·þÎñÆ÷ÉêÇë) + * - A ºô½Ðǰ,ÉêÇë»ñµÃ ticket + * - A ÐèҪͨ"ijÖÖÍÆËÍ»úÖÆ"(³¤Á¬½Ó,ÍÆËÍ·½Ê½) ½« ticket ֪ͨµ½B + * - A ºÍB ¶Ôºôʱ, ±ØÐëʹÓÃÏàͬµÄticket, ÒÔ±ã·þÎñÆ÷¾«È·±êʶ»á»° + * + * @param[in] id ¼ÓÈëÒ»¶ÔÒ»»á»°(¶Ô·½µÄuid)»ò·¿¼ä(ÒÔroom:ǰ׺µÄ·¿¼äµØÖ·) + * @param[in] ticket hashÖµ,¿Éͨ¹ýÆäËû·¾¶»ñµÃ,ĬÈÏΪNULL,½öÓÃÓÚµ÷ÊÔ. + * @param[in,out] video ÆÚÍû½ÓÊÕµÄÊÓÆµ³ß´çºÍÖ¡ËÙ,ÂëÂÊ. Èô NULL,Ôò²»½ÓÊÕÊÓÆµ + * @param[in,out] camera ÓÃÓÚÔ¤ÀÀͼÏñ,½¨ÒéµÄ·¢ËͳߴçºÍÖ¡ËÙ,ÂëÂÊ. Èô NULL, Ôò²»Ê¹ÓþµÍ·. + * ×îÖÕµÄÊÓÆµ³ß´çºÍ¾µÍ·µÄ³ß´ç,¶¼ÓÉ·þÎñÆ÷ЭÉ̾ö¶¨. + */ +struct jrtc_t* jrtc_open (const char* id, const char* ticket, struct jrtc_image_t* video, struct jrtc_image_t* camera); + +/** ÊÍ·Åͨ»°×ÊÔ´,²¢µÈ´ýÍøÂçÏ߳̽áÊø. + * + * @param[in] err Ö÷¶¯¹Ò¶ÏΪ JRTC_EBYE + * µ«µ±ÓïÒôµç»°ÖжÏʱ, ÐëÉèÖÃΪJRTC_EAUDIOCALL, + * ÆäËûδ֪Çé¿ö,¿ÉÉèÖÃΪ JRTC_ENIL(²»Ð޸ĹҶÏÔ­Òò) + */ +void jrtc_close (struct jrtc_t* jc, enum jrtc_error err); + +/** ±àÂëǰµÄµÄÊÓÆµÖ¡ */ +struct jrtc_photo_t +{ + void* data; + unsigned bytes; + unsigned short width,height; + char format;/*< enum jrtc_dtype */ + char reserve[3]; +}; + +/** ¶¯Ì¬ÉèÖÃǰºó¾µÍ· + * @param[in] camera 0Ϊºó¾µÍ·,1ÊÇǰ¾µÍ· + * @param[in] effect ±àÂëǰͼÏñµÄ´¦Àí»Øµ÷ + * ½ûÖ¹¸Ä±äͼÏñ³ß´çºÍ¸ñʽ. + * ¿ÉÉèÖÃΪ NULL + * @code + * static char* encoding = NULL; + * //Ö»¾µÏñ·¢ËÍͼÏñ + * jrtc_set_camera(jc, 1, [](struct jrtc_photo_t* frame){ + * auto preview = frame->data; + * if (!encoding) encoding = new char[frame->bytes]; + * + * assert (frame->format == JRTC_UYVY && "¸ù¾Ýƽ̨ѡÔñת»»º¯Êý"); + * jrtc_uyvy_mirror(frame, frame->width, frame->height, encoding); + * frame->data = encoding; + * }); + * //Ö»¾µÏñÔ¤ÀÀͼÏñ + * jrtc_set_camera(jc, 1, [](struct jrtc_photo_t* frame){ + * auto preview = frame->data; + * if (!encoding) encoding = new char[frame->bytes]; + * frame->data = memcpy(encoding, preview, frame->bytes); + * + * assert (frame->format == JRTC_UYVY && "¸ù¾Ýƽ̨ѡÔñת»»º¯Êý"); + * jrtc_uyvy_mirror(frame, frame->width, frame->height, preview); + * }); + * //ͬʱ¾µÏñÔ¤ÀÀºÍ·¢ËÍͼÏñ + * jrtc_set_camera(jc, 1, [](struct jrtc_photo_t* frame){ + * auto preview = frame->data; + * if (!encoding) encoding = new char[frame->bytes]; + * frame->data = memcpy(encoding, preview, frame->bytes); + * + * assert (frame->format == JRTC_UYVY && "¸ù¾Ýƽ̨ѡÔñת»»º¯Êý"); + * jrtc_uyvy_mirror(frame, frame->width, frame->height, preview); + * frame->data = preview; + * }); + * @endcode + */ +void jrtc_set_camera (struct jrtc_t* jc, int camera, + void (*effect) (struct jrtc_photo_t* frame)); + +/** ¼¤»îÉ豸, ¿ªÆô·¢ËÍÄÜÁ¦ + * @param[in] devices jrtc_device µÄ¼¯ºÏ + */ +void jrtc_activate (struct jrtc_t* jc, int devices); + +/** ½û»îÉ豸, ¹Ø±Õ·¢ËÍÄÜÁ¦ + * @param[in] devices jrtc_device µÄ¼¯ºÏ + */ +void jrtc_deactivate (struct jrtc_t* jc, int devices); + +/** ·µ»ØÍ¨»°×´Ì¬ */ +enum jrtc_state jrtc_state (const struct jrtc_t *jc); + +/** ·µ»Ø×î½üµÄ³ö´íÖµ */ +enum jrtc_error jrtc_error (const struct jrtc_t *jc); + +/** ·µ»ØÍøÂç״̬ + * @param[out] remote_active_devices ¶Ô¶ËµÄµÄÊý¾ÝÁ÷״̬. jrtc_device µÄ¼¯ºÏ + * ÔÊÐí NULL. + */ +enum jrtc_netstat jrtc_netstat(struct jrtc_t* jc, int *remote_active_devices); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/h/jrtc0.h b/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/h/jrtc0.h new file mode 100644 index 00000000..18dff25d --- /dev/null +++ b/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/h/jrtc0.h @@ -0,0 +1,154 @@ +#ifndef __JRTC_0_H__ +#define __JRTC_0_H__ +#include "jrtc.h" +#ifdef __cplusplus +extern "C" { +#endif + +/** ͨ»°×´Ì¬ + * jrtc_alloc jrtc_schedule jrtc_schedule + * JRTC_CLOSED ----------> JRTC_OPENED -------------> JRTC_JOINING -------------> JRTC_JOINED + * ^ | + * | jrtc_step | jrtc_schedule + * | jrtc_leave »ò ÄÚ²¿³ö´í | ÊÕµ½Ã½ÌåÊý¾Ý + * JRTC_LEAVING <---------------------------+------------- JRTC_TALKING <-------------+ + * | ^ + * | jrtc_schedule | + * +------------------+ + */ + +/** ÖØÖ÷þÎñÆ÷µØÖ· + * ×¢Òâ: + * - ÊÖ¹¤ÉèÖÃеØÖ·,ͨ³£Ö»ÓÃÓÚ²âÊÔ + * - srvURL ÏÞÖÆ×î´ó×Ö·ûÊýΪ128 + * - srvURL Ϊ¿Õʱ, »Ö¸´ÎªÄÚÖõÄĬÈÏ·þÎñÆ÷µØÖ· + * + * @param[in] srvURL ·þÎñÆ÷µØÖ· + */ +void jrtc_config_server (const char* srvURL); + +/** ·ÖÅäͨ»°×ÊÔ´ + * ×¢Òâ: + * - ÄÚ²¿Ö±½ÓÒýÓõØÖ·,ÓÉÍⲿ±£Ö¤ÄÚ´æµÄÓÐЧÐÔ + * - ÄÚ²¿Ã»ÓÐÆô¶¯ÍøÂçÏß³Ì,ÐèÒª²»¶ÏµÄµ÷ÓÃÈçÏÂÇý¶¯ + * jrtc_schedule(jc, nowMs); + * - ÄÚ²¿É豸³õʼûÓ줻î,ºóÐøÐèÒªµ÷ÈçÏ¿ªÆô + * jrtc_activate(jc,JRTC_AUDIO|JRTC_CAMERA) + * + * ticket ×÷Ϊͨ»°ID, Ψһ±êʶÿ´Îͨ»°: + * - ²»Äܰüº¬JSONÐèתÒåµÄ×Ö·û + * - ÿ´Îͨ»°, ҪʹÓò»Í¬µÄ ticket,(Ëæ»ú²úÉú»òÏò·þÎñÆ÷ÉêÇë) + * - A ºô½Ðǰ,ÉêÇë»ñµÃ ticket + * - A ÐèҪͨ"ijÖÖÍÆËÍ»úÖÆ"(³¤Á¬½Ó,ÍÆËÍ·½Ê½) ½« ticket ֪ͨµ½B + * - A ºÍB ¶Ôºôʱ, ±ØÐëʹÓÃÏàͬµÄticket, ÒÔ±ã·þÎñÆ÷¾«È·±êʶ»á»° + * + * @param[in] roomid ¼ÓÈëµÄ·¿¼äºÅ(¶Ô·½ÕË»§) + * @param[in] ticket ÓÃÓÚ·¿¼äµÄhashÖµ,¿Éͨ¹ýÆäËû·¾¶»ñµÃ,ĬÈÏΪNULL,½öÓÃÓÚµ÷ÊÔ. + * @param[in] video ÆÚÍû½ÓÊÕµÄÊÓÆµ³ß´çºÍÖ¡ËÙ,ÂëÂÊ. Èô NULL,Ôò²»½ÓÊÕÊÓÆµ + * @param[in] camera ÓÃÓÚÔ¤ÀÀͼÏñ,½¨ÒéµÄ·¢ËͳߴçºÍÖ¡ËÙ,ÂëÂÊ. Èô NULL, Ôò²»Ê¹ÓþµÍ·. + * ×îÖÕµÄÊÓÆµ³ß´çºÍ¾µÍ·µÄ³ß´ç,¶¼ÓÉ·þÎñÆ÷ЭÉ̾ö¶¨. + */ +struct jrtc_t* jrtc_alloc (const char* roomid, const char* ticket, struct jrtc_image_t* video, struct jrtc_image_t* camera); + +/** µ¥²½¸üÐÂͨ»° + * ÒªÇóʵʱÐÔ´¦Àí, Îñ±ØÔÚ¶ÀÁ¢Ïß³ÌÖгÖÐø¸üÐÂ, + * µ±·µ»Ø JRTC_CLOSED ʱ, ¿ÉÒÔÍ˳ö¸ÃÏß³Ì. + * ÀýÈç: + * Æô¶¯ÍøÂçÏß³Ì([jc]{ + * do { + * state = jrtc_schedule(jc, µ±Ç°ºÁÃë); + * } while(state != JRTC_CLOSED); + * } + * + * @param[in] ms µ±Ç°ºÁÃë + */ +enum jrtc_state jrtc_schedule (struct jrtc_t* jc, unsigned ms); + +/** Ö÷¶¯À뿪/¹Ò¶Ï + * ×¢Òâ: ÕâÀïÖ»¸Ä±ä״̬, Ïú»Ù½«ÔÚjrtc_schedule()ÖÐ×Ô¶¯´¦Àí + * + * @param[in] err Ö÷¶¯¹Ò¶ÏΪ JRTC_EBYE + * µ«µ±ÓïÒôµç»°ÖжÏʱ, ÐëÉèÖÃΪJRTC_EAUDIOCALL, + * ÆäËûδ֪Çé¿ö,¿ÉÉèÖÃΪ JRTC_ENIL(²»Ð޸ĹҶÏÔ­Òò) + */ +enum jrtc_state jrtc_leave (struct jrtc_t *jc, enum jrtc_error err); + +/** ¾µÏñ + * @param[in] dst_w Ä¿±ê¿í¶È, »á×Ô¶¯²Ã¼ô,µ«²»Ëõ·Å + * @param[in] dst_h Ä¿±ê¸ß¶È, ¸ºÊýʱ»áÏÈÉÏÏ·­×ª(µÈ¼ÛÓÚÐýת180¶È) + * @param[out] dst Ä¿±êÄÚ´æ + */ +void jrtc_i420_mirror(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); +void jrtc_nv12_mirror(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); +void jrtc_uyvy_mirror(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); +void jrtc_nv16_mirror(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); + +/** ˳ʱÕëת90¶È + * @param[in] dst_w Ä¿±ê¿í¶È, »á×Ô¶¯²Ã¼ô,µ«²»Ëõ·Å + * @param[in] dst_h Ä¿±ê¸ß¶È, ¸ºÊýʱ»áÏÈÉÏÏ·­×ª(µÈ¼ÛÓÚת90ºóˮƽ¾µÏñ) + * @param[out] dst Ä¿±êÄÚ´æ + */ +void jrtc_i420_rotate90(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); +void jrtc_nv12_rotate90(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); +void jrtc_uyvy_rotate90(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); +void jrtc_nv16_rotate90(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); + +/** ˳ʱÕëת270¶È + * @param[in] dst_w Ä¿±ê¿í¶È, »á×Ô¶¯²Ã¼ô,µ«²»Ëõ·Å + * @param[in] dst_h Ä¿±ê¸ß¶È, ¸ºÊýʱ»áÏÈÉÏÏ·­×ª(µÈ¼ÛÓÚת270ºóˮƽ¾µÏñ) + * @param[out] dst Ä¿±êÄÚ´æ + */ +void jrtc_i420_rotate270(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); +void jrtc_nv12_rotate270(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); +void jrtc_uyvy_rotate270(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); +void jrtc_nv16_rotate270(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); + +/** ²Ã¼ô + * @param[in] dst_w Ä¿±ê¿í¶È, »á×Ô¶¯²Ã¼ô,µ«²»Ëõ·Å + * @param[in] dst_h Ä¿±ê¸ß¶È, ¸ºÊýʱ»áÏÈÉÏÏ·­×ª + * @param[out] dst Ä¿±êÄÚ´æ + */ +void jrtc_i420_copy(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); +void jrtc_nv12_copy(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); +void jrtc_uyvy_copy(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); +void jrtc_nv16_copy(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); + +/** ת»»Îª RGB565 + * @param[in] dst_w Ä¿±ê¿í¶È, »á×Ô¶¯²Ã¼ô,µ«²»Ëõ·Å + * @param[in] dst_h Ä¿±ê¸ß¶È, ¸ºÊýʱ»áÏÈÉÏÏ·­×ª + * @param[out] dst Ä¿±êÄÚ´æ, Êä³ö³¤¶ÈΪ dst_w*dst_h*sizeof(short) + */ +void jrtc_i420_torgb565(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); +void jrtc_nv12_torgb565(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); +void jrtc_uyvy_torgb565(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); +void jrtc_nv16_torgb565(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst); + +/** ¿ÉÓÅ»¯ÅäÖõIJÎÊý @{ */ +extern unsigned JRTC_SESSION_TIMEOUT; /*< ½¨Á¢Í¨»°×ܵij¬Ê±·§Öµ,ĬÈÏ 300 Ãë*/ +extern unsigned JRTC_REPLY_TIMEOUT; /*< ½¨Á¢Í¨»°Öеȴý·þÎñÆ÷Ó¦´ðµÄ³¬Ê±·§Öµ,ĬÈÏ120 Ãë */ +extern unsigned JRTC_MEDIA_TIMEOUT; /*< ½ÓÊÕýÌåÊý¾ÝµÄ³¬Ê±·§Öµ, ĬÈÏ 20 Ãë */ +extern unsigned JRTC_MAX_RTP_SIZE; /*< ·¢Ë͵Ä×î´ó RTP °ü·§Öµ, ĬÈÏ1200,²»ÄÜ´óÓÚ1500 */ +extern unsigned JRTC_AUDIO_RED_LOSS;/*< ¿ªÆôÒôƵÈßÓà±àÂëµÄ¶ª°üÂÊ·§Öµ, ĬÈÏ 10 % */ +extern unsigned JRTC_VIDEO_FEC_LOSS; /*< ¿ªÆôÊÓÆµÈßÓà±àÂëµÄ¶ª°üÂÊ·§Öµ, ĬÈÏ 5 % */ +extern unsigned JRTC_VIDEO_FEC_MAX_RTT;/*< ¿ªÆôÊÓÆµÈßÓà±àÂëµÄRTTÉÏÏÞ, ĬÈÏ 3000 ms, 0 ÔòÇ¿ÖÆ¹Ø±ÕFEC */ +extern unsigned JRTC_VIDEO_FEC_MAX_BW_RATIO; /*< ¿ªÆôÊÓÆµÈßÓà±àÂëµÄ¶îÍâµÄÂëÂÊÕ¼±È, ĬÈÏ 80 %, 0 ÔòÇ¿ÖÆ¹Ø±ÕFEC */ +extern unsigned JRTC_VIDEO_INIT_GOP; /*< ³õʼĬÈϵÄÊÓÆµ¹Ø¼üÖ¡¼ä¸ô, ĬÈÏ2000 ms */ +extern unsigned JRTC_TASK_STACK_KB; /*< ÄÚ²¿Ï̵߳ÄÕ»´óС,ÓëÆ½Ì¨Ïà¹Ø */ +extern unsigned JRTC_TASK_PRIORITY; /*< ÄÚ²¿Ï̵߳ÄÓÅÏȼ¶,ÓëÆ½Ì¨Ïà¹Ø */ +/** @} */ + +/** ¿É¸¨Öúµ÷ÊÔµÄÈ«¾ÖÖµ @{ */ +extern char _jrtc_errstr[256]; /* ×î½ü´íÎóÃèÊö */ +extern const char* _jrtc_version; /* µ±Ç°°æ±¾ºÅ */ +/* ÒÔÏÂÊÇjrtc_config(...)ÖеÄÈë²ÎÖµ */ +extern char _jrtc_appkey[25]; +extern char _jrtc_uid[65]; +extern char _jrtc_srvURL[129]; +extern char _jrtc_aeskey[17]; +extern char _jrtc_tokens[129]; +/** @} */ + +#ifdef __cplusplus +} +#endif +#endif diff --git a/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/h/mmi_video_call.h b/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/h/mmi_video_call.h new file mode 100644 index 00000000..76810da4 --- /dev/null +++ b/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/h/mmi_video_call.h @@ -0,0 +1,68 @@ + + + +#ifndef __MMI_VIDEO_CALL_H__ +#define __MMI_VIDEO_CALL_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#ifdef MMI_VIDEO_CALL_SUPPORT_JRTC + + +#define __VIDEO_CALL_DEBUG__ +#ifdef __VIDEO_CALL_DEBUG__ +#define VIDEO_CALL_DEBUG_PRINTF(fmt, ...) SCI_TRACE_LOW("[VIDEO_CALL]"fmt, ##__VA_ARGS__) +#else +#define VIDEO_CALL_DEBUG_PRINTF(fmt, ...) +#endif + +typedef enum +{ + MMI_VIDEO_CALL_TYPE_VOICE = 0, + MMI_VIDEO_CALL_TYPE_VIDEO, + MMI_VIDEO_CALL_TYPE_MAX +}MMI_VIDEO_CALL_TYPE_E; + + +typedef enum +{ + MMI_VIDEO_CALL_STATE_NULL = 0, + MMI_VIDEO_CALL_STATE_ACTIVE = 1, + MMI_VIDEO_CALL_STATE_HOLDING = 2, + MMI_VIDEO_CALL_STATE_DIALING = 3, /* MO call only */ + MMI_VIDEO_CALL_STATE_ALERTING = 4, /* MO call only */ + MMI_VIDEO_CALL_STATE_INCOMING = 5, /* MT call only */ + MMI_VIDEO_CALL_STATE_WAITING = 6, /* MT call only */ + MMI_VIDEO_CALL_STATE_INVALID = 0xFF +} MMI_VIDEO_CALL_STATE_E; + +#define MMI_VIDEO_CALL_NUMBER_LEN (32) +typedef struct { + MMI_VIDEO_CALL_STATE_E state; + MMI_VIDEO_CALL_TYPE_E calltype; + BOOLEAN is_mt; /* true if MT call */ + BOOLEAN ring_off; /* true if ring off by user */ + BOOLEAN ring_off_timeout; /* true if ring off timeout */ + char number[MMI_VIDEO_CALL_NUMBER_LEN]; + wchar name[MMI_VIDEO_CALL_NUMBER_LEN]; + uint8 dial_timer_id; + uint8 incoming_timer_id; + uint8 speaker_volume; /* speaker volume during call procedure */ +} MMI_VIDEO_CALL_PARAMS_T; + + +void mmi_video_call_jrtc_config_init(void); +PUBLIC BOOLEAN MMIAPI_EnterVideoCallMainWindow(void); + + +int mmi_video_call_start(void); +int mmi_video_call_stop(void); +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/lib/libjrtc.a b/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/lib/libjrtc.a new file mode 100644 index 00000000..b8334495 Binary files /dev/null and b/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/lib/libjrtc.a differ diff --git a/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/lib/libjrtc_DEBUG.a b/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/lib/libjrtc_DEBUG.a new file mode 100644 index 00000000..6b791fcc Binary files /dev/null and b/MS_Code/MS_MMI_Main/source/mmi_app/app/jrtc_video_call/lib/libjrtc_DEBUG.a differ diff --git a/MS_Code/MS_MMI_Main/source/mmi_app/app/mainmenu/c/mmi_mainmenu_data_240X280.c b/MS_Code/MS_MMI_Main/source/mmi_app/app/mainmenu/c/mmi_mainmenu_data_240X280.c index 462588fa..fb9ddebb 100644 --- a/MS_Code/MS_MMI_Main/source/mmi_app/app/mainmenu/c/mmi_mainmenu_data_240X280.c +++ b/MS_Code/MS_MMI_Main/source/mmi_app/app/mainmenu/c/mmi_mainmenu_data_240X280.c @@ -238,17 +238,8 @@ static const MMI_MAINMENU_ITEM_T s_mainmenu_one_page_item_data[] = {ID_MAINMENU_TOOLS, TXT_MAINMENU_ICON_APPS, IMAGE_ONE_PAGE_TOOLS, IMAGE_MAINMENU_ICON_SELECT, MMIMANMENU_EnterTools, 0}, -#if defined(HERO_ENGINE_SUPPORT) -#ifdef HERO_APP_SMART_OPEN - {ID_HERO_APP_SMART, TXT_HERO_APP_SMART, IMAGE_ONE_PAGE_VOICE, IMAGE_NULL, MMIMAINMENU_StartHeroAppSmart, 0}, -#endif -#ifdef HERO_APP_WSTORE_OPEN - {ID_HERO_APP_WSTORE, TXT_HERO_APP_WSTORE, IMAGE_ONE_PAGE_APP_WSTORE, IMAGE_NULL, MMIMAINMENU_StartHeroAppWstore, 0}, - {ID_HERO_APP_WSTORE_MANAGE, TXT_HERO_APP_WSTORE_MANAGE, IMAGE_ONE_PAGE_APP_WSTORE_MANAGE, IMAGE_NULL, MMIMAINMENU_StartHeroAppWstoreManage, 0}, -#endif -#ifdef HERO_VIDEO_CHAT_SUPPORT - {ID_HERO_APP_VOICE_CHAT, TXT_HERO_APP_VOICE_CHAT, IMAGE_ONE_PAGE_VIDEOCHAT, IMAGE_NULL, MMIMAINMENU_StartHeroVideoChat, 0}, -#endif +#ifdef MMI_VIDEO_CALL_SUPPORT_JRTC + {ID_MAINMENU_VIDEO_CALL, TXT_MAINMENU_VIDEO_CALL, IMAGE_ONE_PAGE_VIDEO_CALL, IMAGE_NULL, MMIMAINMENU_StartVideoCall, 0}, #endif {ID_SETTINGS_PHONE, STXT_HEADER_SETTINGS, IMAGE_ONE_PAGE_SETTINGS, IMAGE_MAINMENU_ICON_SELECT, MMIMAINMENU_StartPhoneSetting, 0}, @@ -465,9 +456,81 @@ static const MMI_MAINMENU_ITEM_T s_mainmenu_one_page_item_data[] = #endif #endif -//#if defined(MMI_PROJECT_C55_DS_D11XG_DT_FZD)||defined(MMI_PROJECT_C55_DS_D11G_DT_FZD)||defined(MMI_PROJECT_C55_DS_D11W_DT_FZD)||defined(MMI_PROJECT_C55_DS_D11W_QCB_FZD)\ -// ||defined(MMI_PROJECT_C55_DS_D11G_PRO18_FZD)||defined(MMI_PROJECT_C55_DS_D11XG_QCB_FZD) -#if defined(MMI_C55_D11_MENU_STYLE_SUPPORT) && !defined(MMI_PROJECT_C55_ZHMF_Q7) + +#if defined(MMI_PROJECT_C55_ZHMF_Q7) +static const MMI_MAINMENU_ITEM_T s_mainmenu_item_data[] = +{ + {ID_COMMUNICATION_DIAL, TXT_COMM_DIALPAD, IMAGE_MAINMENU_DIAL, IMAGE_NULL, MMIMAINMENU_StartDial, 0}, + {ID_COMMUNICATION_PB, TXT_MAINMENU_PB, IMAGE_MAINMENU_PB, IMAGE_NULL, MMIMAINMENU_StartPB, 0}, + {ID_COMMUNICATION_MESSAGE, STXT_HEADER_MESSAGES, IMAGE_MAINMENU_MESSAGE, IMAGE_NULL, MMIMAINMENU_StartMessage, 0}, + + #ifdef MMI_WECHAT_SUPPORT + {ID_MENU_WECHAHT, TXT_MAINMENU_WECHAT, IMAGE_MAINMENU_WECHAT, IMAGE_NULL, MMIMAINMENU_StartWechat, 0}, + #endif + + #if defined(MMI_HEART_RATE_ONLY_DETECT_SUPPORT) + {ID_MENU_HEARTRATE_DETECT, TXT_MAINMENU_HEART, IMAGE_MAINMENU_HEARTRATE, IMAGE_NULL, MMIMAINMENU_StartHeartRateDetectWin, 0}, + #endif + + #if defined(MMI_SPO2_ONLY_DETECT_SUPPORT) + {ID_MENU_SPO2_DETECT, TXT_MAINMENU_SPO2, IMAGE_MAINMENU_SPO2, IMAGE_NULL, MMIMAINMENU_StartSpo2DetectWin, 0}, + #endif + + #if defined(MMI_STEP_SUPPORT) + {ID_MAINMENU_STEP, TXT_MAINMENU_STEP, IMAGE_MAINMENU_STEP, IMAGE_NULL, MMIMAINMENU_StartStep, 0}, + #endif + #if defined(MMI_SPORTS_SUPPORT) + {ID_MAINMENU_SPORTS, TXT_MAINMENU_STEP, IMAGE_MAINMENU_STEP, IMAGE_NULL, MMIMAINMENU_StartSports, 0}, + #endif + + #if defined(MMI_TEMP_LIST_STYLE_SUPPORT) + {ID_MENU_TEMPERATURE, TXT_MAINMENU_TEMPERATURE, IMAGE_MAINMENU_TEMPERATURE, IMAGE_NULL, MMIMAINMENU_StartTempListStyle, 0}, + #endif + + #ifdef CAMERA_SUPPORT + {ID_ENTERTAIMENT_CAMERA, STR_MENU_CAMERA, IMAGE_MAINMENU_CAMERA, IMAGE_NULL, MMIMAINMENU_StartDCPhoto, 0}, + #ifdef PIC_VIEWER_SUPPORT + {ID_PIC_VIEWER, TXT_COMMON_PIC, IMAGE_MAINMENU_PHOTOS, IMAGE_NULL, MMIMAINMENU_StartPicViewer, 0}, + #endif + #endif + + #if defined(MMI_WEATHER_SUPPORT) + {ID_MAINMENU_WEATHER, TXT_MAINMENU_WEATHER, IMAGE_MAINMENU_WEATHER, IMAGE_NULL, MMIMAINMENU_StartWeather, 0}, + #endif + + #if defined(MMI_SLEEP_SUPPORT) + {ID_MAINMENU_SLEEP, TXT_MAINMENU_SLEEP, IMAGE_MAINMENU_SLEEP, IMAGE_NULL, MMIMAINMENU_StartPedometer, 0}, + #endif + + {ID_TOOLS_ALARM, TXT_MAINMENU_ALARM, IMAGE_MAINMENU_ALARM, IMAGE_NULL, MMIMANMENU_OpenAlarmMainWin, 0}, + + #if defined(MMI_COUNTDOWN_SUPPORT) + {ID_MAINMENU_COUNTDOWN, TXT_MAINMENU_COUNTDOWN, IMAGE_MAINMENU_COUNTDOWN, IMAGE_NULL, MMIMAINMENU_StartCountdown, 0}, + #endif + + #ifdef MMI_INDIAN_SOS_SUPPORT + {ID_SETTINGS_SOS, TXT_SETTINGS_SOS, IMAGE_MAINMENU_SOS, IMAGE_NULL, MMIMAINMENU_StartSOSSetting, 0}, + #endif + + #if defined(MMI_STOPWATCH_SUPPORT) + {ID_MAINMENU_STOPWATCH, TXT_MAINMENU_STOPWATCH, IMAGE_MAINMENU_STOPWATCH, IMAGE_NULL, MMIMAINMENU_StartStopwatch, 0}, + #endif + + #if defined(MMI_TIMEREMIND_SUPPORT) + {ID_MAINMENU_TIMEREMIND, TXT_MAINMENU_TIMEREMIND, IMAGE_MAINMENU_TIMEREMIND, IMAGE_NULL, MMIMAINMENU_StartTimeremind, 0}, + #endif + + #if defined(MMI_AGORA_VIDEO_CALL_SUPPORT) + {ID_AGORA_VIDEO_CALL, TXT_VIDEO_CALL, IMAGE_AGORA_MAINMENU_ICON, IMAGE_NULL, MMIMAINMENU_StartAgoraVideoCall, 0}, + #endif + +#ifdef MMI_VIDEO_CALL_SUPPORT_JRTC + {ID_MAINMENU_VIDEO_CALL, TXT_MAINMENU_VIDEO_CALL, IMAGE_MAINMENU_VIDEO_CALL, IMAGE_NULL, MMIMAINMENU_StartVideoCall, 0}, +#endif + + {ID_SETTINGS_PHONE, TXT_MAINMENU_SETTINGS, IMAGE_MAINMENU_SETTINGS, IMAGE_NULL, MMIMAINMENU_StartPhoneSetting, 0}, +}; +#elif defined(MMI_C55_D11_MENU_STYLE_SUPPORT) static const MMI_MAINMENU_ITEM_T s_mainmenu_item_data[] = { {ID_COMMUNICATION_PB, TXT_MAINMENU_PB, IMAGE_MAINMENU_PB, IMAGE_NULL, MMIMAINMENU_StartPB, 0}, diff --git a/MS_Code/MS_MMI_Main/source/mmi_app/app/mainmenu/c/mmi_mainmenu_item_func.c b/MS_Code/MS_MMI_Main/source/mmi_app/app/mainmenu/c/mmi_mainmenu_item_func.c index d01cb684..7df83e5e 100644 --- a/MS_Code/MS_MMI_Main/source/mmi_app/app/mainmenu/c/mmi_mainmenu_item_func.c +++ b/MS_Code/MS_MMI_Main/source/mmi_app/app/mainmenu/c/mmi_mainmenu_item_func.c @@ -2976,5 +2976,12 @@ PUBLIC void MMIMAINMENU_enter_BEIDOU_TIME_SERVICE(uint32 param1, uint32 param2) } #endif +#ifdef MMI_VIDEO_CALL_SUPPORT_JRTC +PUBLIC void MMIMAINMENU_StartVideoCall(uint32 param1, uint32 param2) +{ + MMIAPI_EnterVideoCallMainWindow(); +} +#endif + diff --git a/MS_Code/MS_MMI_Main/source/mmi_app/app/mainmenu/h/mmi_mainmenu_item_func.h b/MS_Code/MS_MMI_Main/source/mmi_app/app/mainmenu/h/mmi_mainmenu_item_func.h index 34705faa..7dd6fad3 100644 --- a/MS_Code/MS_MMI_Main/source/mmi_app/app/mainmenu/h/mmi_mainmenu_item_func.h +++ b/MS_Code/MS_MMI_Main/source/mmi_app/app/mainmenu/h/mmi_mainmenu_item_func.h @@ -1633,6 +1633,9 @@ PUBLIC void MMIMAINMENU_enter_DANGER_REPORT(uint32 param1, uint32 param2); PUBLIC void MMIMAINMENU_enter_INSPECT_MESSAGE(uint32 param1, uint32 param2); PUBLIC void MMIMAINMENU_enter_BEIDOU_TIME_SERVICE(uint32 param1, uint32 param2); #endif +#ifdef MMI_VIDEO_CALL_SUPPORT_JRTC +PUBLIC void MMIMAINMENU_StartVideoCall(uint32 param1, uint32 param2); +#endif /**--------------------------------------------------------------------------* diff --git a/MS_Code/MS_MMI_Main/source/mmi_app/common/h/common_mdu_def.h b/MS_Code/MS_MMI_Main/source/mmi_app/common/h/common_mdu_def.h index 3cc4a67d..ade8c02a 100644 --- a/MS_Code/MS_MMI_Main/source/mmi_app/common/h/common_mdu_def.h +++ b/MS_Code/MS_MMI_Main/source/mmi_app/common/h/common_mdu_def.h @@ -8363,6 +8363,9 @@ RES_ADD_IMG(IMAGE_MAINMENU_DANGER_REPORT,"\\MMI_RES_##\\IMAG\\main_menu\\IMAGE_M RES_ADD_IMG(IMAGE_MAINMENU_INSPECT_MESSAGE,"\\MMI_RES_##\\IMAG\\main_menu\\IMAGE_MAINMENU_INSPECT_MESSAGE.png",IMG_CMP_PNG_ARGB_RLE,0) RES_ADD_IMG(IMAGE_MAINMENU_BEIDOU_TIME_SERVICE,"\\MMI_RES_##\\IMAG\\main_menu\\IMAGE_MAINMENU_BEIDOU_TIME_SERVICE.png",IMG_CMP_PNG_ARGB_RLE,0) #endif +#ifdef MMI_VIDEO_CALL_SUPPORT_JRTC +RES_ADD_IMG(IMAGE_MAINMENU_VIDEO_CALL,"\\MMI_RES_##\\IMAG\\main_menu\\IMAGE_MAINMENU_VIDEO_CALL.png",IMG_CMP_PNG_ARGB_RLE,0) +#endif #endif //MMI_REMOVE_IMAGE_DIR_MAIN_MENU @@ -8499,6 +8502,10 @@ RES_ADD_IMG(IMAGE_ONE_PAGE_IMEI_QRCODE,"\\MMI_RES_##\\IMAG\\main_menu\\one_page\ #endif #endif +#ifdef MMI_VIDEO_CALL_SUPPORT_JRTC +RES_ADD_IMG(IMAGE_ONE_PAGE_VIDEO_CALL,"\\MMI_RES_##\\IMAG\\main_menu\\one_page\\IMAGE_ONE_PAGE_VIDEOCHAT.png",IMG_CMP_PNG_ARGB_RLE,0) +#endif + #ifdef MMI_PROJECT_C55T_FXFT_N55 RES_ADD_IMG(IMAGE_ONE_PAGE_WORK_CLOCK_IN,"\\MMI_RES_##\\IMAG\\main_menu\\one_page\\IMAGE_ONE_PAGE_WORK_CLOCK_IN.png",IMG_CMP_PNG_ARGB_RLE,0) RES_ADD_IMG(IMAGE_ONE_PAGE_INSPECT_CLOCK_IN,"\\MMI_RES_##\\IMAG\\main_menu\\one_page\\IMAGE_ONE_PAGE_INSPECT_CLOCK_IN.png",IMG_CMP_PNG_ARGB_RLE,0) @@ -13890,6 +13897,15 @@ RES_ADD_IMG(IMAGE_INSPECT_STATUS_1,"\\MMI_RES_##\\IMAG\\patrol_inspect\\IMAGE_IN RES_ADD_IMG(IMAGE_INSPECT_STATUS_2,"\\MMI_RES_##\\IMAG\\patrol_inspect\\IMAGE_INSPECT_STATUS_2.png",IMG_CMP_PNG_ARGB_RLE,0) // #endif +#ifdef MMI_VIDEO_CALL_SUPPORT_JRTC +RES_ADD_STRING(TXT_MAINMENU_VIDEO_CALL,"Video call") + +RES_ADD_IMG(IMAGE_VIDEO_CALL_VOICE_BUTTON,"\\MMI_RES_##\\IMAG\\video_call\\IMAGE_VIDEO_CALL_VOICE_BUTTON.png",IMG_CMP_PNG_ARGB_RLE,0) +RES_ADD_IMG(IMAGE_VIDEO_CALL_VIDEO_BUTTON,"\\MMI_RES_##\\IMAG\\video_call\\IMAGE_VIDEO_CALL_VIDEO_BUTTON.png",IMG_CMP_PNG_ARGB_RLE,0) +RES_ADD_IMG(IMAGE_VIDEO_CALL_HANGUP_BUTTON,"\\MMI_RES_##\\IMAG\\video_call\\IMAGE_VIDEO_CALL_VIDEO_BUTTON.png",IMG_CMP_PNG_ARGB_RLE,0) +RES_ADD_IMG(IMAGE_VIDEO_CALL_ANSWER_BUTTON,"\\MMI_RES_##\\IMAG\\video_call\\IMAGE_VIDEO_CALL_ANSWER_BUTTON.png",IMG_CMP_PNG_ARGB_RLE,0) +RES_ADD_IMG(IMAGE_VIDEO_CALL_CONTACT_PHOTO,"\\MMI_RES_##\\IMAG\\video_call\\IMAGE_VIDEO_CALL_CONTACT_PHOTO.png",IMG_CMP_PNG_ARGB_RLE,0) +#endif diff --git a/MS_Code/MS_MMI_Main/source/mmi_app/common/h/mmi_id.def b/MS_Code/MS_MMI_Main/source/mmi_app/common/h/mmi_id.def index e8a61ede..ded1b9f4 100644 --- a/MS_Code/MS_MMI_Main/source/mmi_app/common/h/mmi_id.def +++ b/MS_Code/MS_MMI_Main/source/mmi_app/common/h/mmi_id.def @@ -403,5 +403,10 @@ WIN_ID_DEF(MMI_CHR_POWER_SAVE_QUERY_WIN_ID), WIN_ID_DEF(MMI_DANGER_TYPE_REPORTING_WIN_ID), WIN_ID_DEF(MMI_INSPECT_MESSAGE_CONTENT_WIN_ID), #endif +#ifdef MMI_VIDEO_CALL_SUPPORT_JRTC + WIN_ID_DEF(MMI_VIDEO_CALL_MAIN_WIN_ID), + WIN_ID_DEF(MMI_VIDEO_CALL_DIALING_WIN_ID), + WIN_ID_DEF(MMI_VIDEO_CALL_INCOMING_WIN_ID), +#endif diff --git a/MS_Code/MS_MMI_Main/source/mmi_app/common/h/mmi_menu_id.def b/MS_Code/MS_MMI_Main/source/mmi_app/common/h/mmi_menu_id.def index b194c9da..36359436 100644 --- a/MS_Code/MS_MMI_Main/source/mmi_app/common/h/mmi_menu_id.def +++ b/MS_Code/MS_MMI_Main/source/mmi_app/common/h/mmi_menu_id.def @@ -854,5 +854,8 @@ MENU_ID_DEF(ID_MAINMENU_INSPECT_MESSAGE), MENU_ID_DEF(ID_MAINMENU_BEIDOU_TIME_SERVICE), #endif +#ifdef MMI_VIDEO_CALL_SUPPORT_JRTC + MENU_ID_DEF(ID_MAINMENU_VIDEO_CALL), +#endif diff --git a/MS_Code/MS_MMI_Main/source/mmi_app/kernel/c/mmi_protocol_main_api.c b/MS_Code/MS_MMI_Main/source/mmi_app/kernel/c/mmi_protocol_main_api.c index 943bdef2..2cedb663 100644 --- a/MS_Code/MS_MMI_Main/source/mmi_app/kernel/c/mmi_protocol_main_api.c +++ b/MS_Code/MS_MMI_Main/source/mmi_app/kernel/c/mmi_protocol_main_api.c @@ -256,8 +256,10 @@ extern void MMIAPI_InbuiltSchedulePowerOnOffGet(ALARM_AUTO_POWER_STRUCT *out_ala #endif #if defined(MMI_MEREG_VIDEO_CALL_SUPPORT) +#if defined(HERO_VIDEO_CHAT_SUPPORT) extern BOOLEAN MMIHERO_VoiceChatServerRegister(void); #endif +#endif /***************************************************************************** @@ -9034,8 +9036,12 @@ void km_FZD_net_parse_CALLING(signed char *next_buf,int next_buf_len,signed char MMIAPIDC_Exit(); } + #if defined(HERO_VIDEO_CHAT_SUPPORT) if(TRUE == MMIHERO_VoiceChatServerRegister()) km_FZD_net_action_CALLING(); + #elif defined(MMI_VIDEO_CALL_SUPPORT_JRTC) + + #endif #else km_FZD_net_action_CALLING(); #endif diff --git a/MS_Code/MS_MMI_Main/source/mmi_app/kernel/c/mmimain.c b/MS_Code/MS_MMI_Main/source/mmi_app/kernel/c/mmimain.c index a7ac1319..df105f07 100644 --- a/MS_Code/MS_MMI_Main/source/mmi_app/kernel/c/mmimain.c +++ b/MS_Code/MS_MMI_Main/source/mmi_app/kernel/c/mmimain.c @@ -2510,6 +2510,10 @@ void APP_Init(POWER_RESTART_CONDITION_E restart_condition) #if defined(FOTA_SUPPORT_ABUP) && !defined(WIN32) abup_boot_hal_init(); #endif + +#ifdef MMI_VIDEO_CALL_SUPPORT_JRTC + mmi_video_call_jrtc_config_init(); +#endif } /*****************************************************************************/ diff --git a/MS_Code/MS_MMI_Main/source/resource/mmi_res_240x280.zip b/MS_Code/MS_MMI_Main/source/resource/mmi_res_240x280.zip index 97288eb0..9d5245f5 100644 Binary files a/MS_Code/MS_MMI_Main/source/resource/mmi_res_240x280.zip and b/MS_Code/MS_MMI_Main/source/resource/mmi_res_240x280.zip differ diff --git a/MS_Code/Makefile.third-party b/MS_Code/Makefile.third-party index 443a4847..e64a3510 100644 --- a/MS_Code/Makefile.third-party +++ b/MS_Code/Makefile.third-party @@ -1661,3 +1661,11 @@ ifeq ($(strip $(INCAR_ALIPAY_ADULT_SUPPORT)),TRUE) endif #========================================================================================== + +ifeq ($(strip $(MMI_VIDEO_CALL_SUPPORT_JRTC)), TRUE) + ifeq ($(strip $(VERSION_TYPE)), RELEASE) + 3RD_LIBS += MS_MMI_Main/source/mmi_app/app/jrtc_video_call/lib/libjrtc.a + else + 3RD_LIBS += MS_MMI_Main/source/mmi_app/app/jrtc_video_call/lib/libjrtc_DEBUG.a + endif +endif diff --git a/MS_Code/make/app_main/app_main.mk b/MS_Code/make/app_main/app_main.mk index bb774ea6..e6369ad7 100644 --- a/MS_Code/make/app_main/app_main.mk +++ b/MS_Code/make/app_main/app_main.mk @@ -607,7 +607,7 @@ MINCPATH += external/libc MINCPATH += external/sqlite endif -#APIÎļþ +#API�ļ� ifeq ($(strip $(KURO_SUPPORT)), TRUE) MSRCPATH += $(MMI_DIR)/source/mmi_app/app/kuro/c endif @@ -945,7 +945,7 @@ endif endif -#APIÎļþ +#API�ļ� SOURCES += mmipim_export.c mmiocr_export.c \ mmidm_export.c mmiengtd_export.c mmifm_export.c mmidcd_export.c mmimms_export.c mmipb_export.c mmipic_edit_export.c \ @@ -1027,7 +1027,7 @@ SOURCES += mmiaut_wintab.c mmiaut_net.c mmiaut_export.c endif ### mmi slide support -SOURCES += mmi_slide.c #.cºÍ.h¾ùÓÃMMI_SLIDE_SUPPORT ¿ØÖÆ£¬Èç¹ûMMI_SLIDE_SUPPORTÆÁ±Î£¬ÔòËùÓÐslideÏà¹Øcode²»²ÎÓë±àÒëºÍlink +SOURCES += mmi_slide.c #.c��.h����MMI_SLIDE_SUPPORT ���ƣ����MMI_SLIDE_SUPPORT����������slide���code����������link ifeq ($(strip $(CMCC_UI_STYLE)), TRUE) SOURCES += mmics_export.c mmics_id.c mmics_main.c mmics_menutable.c mmics_nv.c mmics_wintab.c @@ -1483,7 +1483,7 @@ ifeq ($(strip $(CAMERA_SUPPORT)), TRUE) ifeq ($(strip $(MMI_CAMERA_LAST_IMAGE)), TRUE) MCFLAG_OPT += -DMMIDC_F_LAST_IMAGE ifeq ($(strip $(VIDEO_PLAYER_SUPPORT)), TRUE) - MCFLAG_OPT += -DVIDEOTHUMBNAIL_SUPPORT #ÊÓÆµÎļþËõÂÔͼÌáÈ¡ + MCFLAG_OPT += -DVIDEOTHUMBNAIL_SUPPORT #��Ƶ�ļ�����ͼ��ȡ endif endif @@ -1665,7 +1665,7 @@ endif #SOURCES += mmikl_qqvgalock.c #MMI_KEY_LOCK_EFFECT_QQVGA #keylock effect end -#ÃðÆÁ¼´ËøÆÁ +#���������� ifeq ($(strip $(__MMI_KEYLOCK_BACKLIGHT_MENU_SEPARATE__)), TRUE) MMI_KEYLOCK_BACKLIGHT_MENU_SEPARATE = TRUE endif @@ -1686,7 +1686,7 @@ ifeq ($(strip $(MMI_PDA_SUPPORT)), TRUE) #MCFLAG_OPT += -DEFFECT_LIGHT_GRID_WALLPAPER_SUPPORT -#call log²»ÏÔʾÖ÷²Ëµ¥ +#call log����ʾ���˵� MCFLAG_OPT += -DMMI_CALLLOG_HIDE_MAINMENU MSRCPATH += $(MMI_DIR)/source/mmi_app/app/mmise/c @@ -1814,9 +1814,9 @@ else SOURCES += mmivirtualarray.c mmifilearray.c endif -#´æÔÚ¸´ÔÓÎı¾,ÐèÒªÑϸñµÄ¼ÆËã×Ö·û´®µÄ¿í¸ß -#ÐèÒªÁÙʱ±äÁ¿×ö»òÅÐ¶Ï -#arabic, thai, hindi, hebrew, tibetµÈÓïÑÔΪ¸´ÔÓÎı¾ +#���ڸ����ı�,��Ҫ�ϸ�ļ����ַ����Ŀ��� +#��Ҫ��ʱ���������ж� +#arabic, thai, hindi, hebrew, tibet������Ϊ�����ı� ifeq ($(strip $(IM_ARABIC_SUPPORT)), TRUE) MCFLAG_OPT_COMPLEX_TEMP ?= -DCOMPLEX_TEXT_SCRIPT endif @@ -1850,9 +1850,9 @@ MCFLAG_OPT_COMPLEX_TEMP ?= -DCOMPLEX_TEXT_SCRIPT endif MCFLAG_OPT += $(MCFLAG_OPT_COMPLEX_TEMP) -#´æÔÚ¸´ÔÓÎı¾,ÐèÒªÑϸñµÄ¼ÆËã×Ö·û´®µÄ¿í¸ß +#���ڸ����ı�,��Ҫ�ϸ�ļ����ַ����Ŀ��� -#ÏÂÀ­´°¿Ú +#�������� ifeq ($(strip $(PDA_UI_DROPDOWN_WIN)), TRUE) MSRCPATH += $(MMI_DIR)/source/mmi_app/app/dropdownwin/c MINCPATH += $(MMI_DIR)/source/mmi_app/app/dropdownwin/h @@ -1912,7 +1912,7 @@ ifeq ($(strip $(MMI_3DUI_SUPPORT)), TRUE) MINCPATH += $(MMI_DIR)/source/mmi_app/app/mmise/h endif -#Ôö¼ÓÃðÆÁÌØÐ§µÄºê +#����������Ч�ĺ� ifeq ($(strip $(UI_P3D_SUPPORT)), TRUE) ifeq ($(strip $(SE_CRT_SUPPORT)), TRUE) ifeq ($(strip $(MMI_PDA_SUPPORT)),TRUE) @@ -1924,7 +1924,7 @@ endif ifeq ($(strip $(LOCK_SCREEN_SPECIAL_EFFECT_SUPPORT)),TRUE) SOURCES += mmiss_screenclose_special.c -endif#´æÔÚ¸´ÔÓÎı¾,ÐèÒªÑϸñµÄ¼ÆËã×Ö·û´®µÄ¿í¸ß +endif#���ڸ����ı�,��Ҫ�ϸ�ļ����ַ����Ŀ��� OPERA_SUPPORT=FALSE @@ -1955,7 +1955,7 @@ endif -#ͼƬä¯ÀÀÆ÷¿ìËÙä¯ÀÀ½çÃæ +#ͼƬ���������������� #ifeq ($(strip $(PIC_QUICKVIEW_SUPPORT)),TRUE) #SOURCES += mmipicview_quickview.c #endif @@ -1993,7 +1993,7 @@ endif ifeq ($(strip $(HERO_ENGINE_SUPPORT)), TRUE) - ifeq ($(strip $(HERO_ENGINE_SUPPORT_CLIENT_INFO)),TRUE) #¿Í»§¶¨ÖÆÅäÖÃÒªÇó;Ҫȥ³ýǰһ¶¨ÒªºÍ¿Í»§È·ÈÏ; + ifeq ($(strip $(HERO_ENGINE_SUPPORT_CLIENT_INFO)),TRUE) #�ͻ���������Ҫ��;Ҫȥ��ǰһ��Ҫ�Ϳͻ�ȷ��; #MCFLAG_OPT += -D__HERO_ENGINE_SUPPORT_CLIENT_INFO__ MCFLAG_OPT += -DHERO_ENGINE_CFG_VAR_HANDSETID_FIRST=$(strip $(HERO_ENGINE_CFG_VAR_HANDSETID_FIRST)) @@ -2219,7 +2219,7 @@ ifeq ($(strip $(MMIAP_SUPPORT)), TRUE) endif endif - #@ºǫ́·Ç²¥·Å״̬(°üÀ¨ÔÝÍ£)£¬ÊÍ·Åaudio handle + #@��̨�Dz���״̬(������ͣ)���ͷ�audio handle MMI_AP_F_RELEASE_BG_AUDIO = TRUE ##==============================================## @@ -2347,7 +2347,7 @@ MSRCPATH += MS_MMI_Main/source/mmi_app/app/alipay/alipayid2/hal/demo/crypto/src SOURCES += aesx.c sha1x.c md5x.c sha256x.c ls_hal_aes.c ls_hal_hash.c ls_hal_rand.c ls_hal_sst.c ls_osa.c prov_base64.c endif -#Ö§³ÖMocorʾÀý´úÂë +#֧��Mocorʾ������ ifeq ($(strip $(MMI_REFACTOR_SAMPLE)), TRUE) SOURCES += mmiappsample_menutable.c mmiappsample_nv.c mmiappsample_id.c mmiappsample_appmain.c mmiappsample_mainwin.c mmiappsample_windatawin.c mmiappsample_eventwin.c mmiappsample_filterwin.c @@ -3036,3 +3036,11 @@ MSRCPATH += $(MMI_DIR)/source/mmi_app/app/blood_glucose/c SOURCES += blood_glucose.c endif + +ifeq ($(strip $(MMI_VIDEO_CALL_SUPPORT_JRTC)), TRUE) +MINCPATH += $(MMI_DIR)/source/mmi_app/app/jrtc_video_call/h +MSRCPATH += $(MMI_DIR)/source/mmi_app/app/jrtc_video_call/c + +SOURCES += mmi_video_call.c mmi_jrtc_client.c +endif +