修复摄像头、科大讯飞、rcsp、彩屏仓等相关测试问题;

This commit is contained in:
huxi
2025-12-10 09:40:24 +08:00
parent bc195654bf
commit 719f612ab5
84 changed files with 3520 additions and 178 deletions
@@ -447,6 +447,8 @@ static void ai_txt_empty_handler(void *priv)
char empty_str_copy[50] = "您好像并没有说话";
strcpy(empty_str, empty_str_copy);
ui_text_set_textu_by_id(AI_DIAL_TXT, (char *)empty_str, strlen((char *)empty_str), FONT_DEFAULT | FONT_SHOW_MULTI_LINE);
} else {
ui_text_set_textu_by_id(AI_DIAL_TXT, (char *)ai_dial_txt1, strlen((char *)ai_dial_txt1), FONT_DEFAULT);
}
}
@@ -685,6 +687,30 @@ static int AI_dialogue_ontouch(void *ctr, struct element_touch_event *e)
}
return true;
}
static int AI_dial_time_onchange(void *ctr, enum element_change_event e, void *arg)
{
struct ui_number *ui_num = (struct ui_number *)ctr;
struct unumber num;
switch (e) {
case ON_CHANGE_INIT:
cuntdown_flag = 60;
num.type = TYPE_NUM;
num.numbs = 1;
num.number[0] = cuntdown_flag;
ui_number_update(ui_num, &num);
break;
default:
break;
}
return 0;
}
REGISTER_UI_EVENT_HANDLER(AI_DIALOGUE)
.onchange = AI_dialogue_onchange,
.onkey = NULL,
.ontouch = NULL,
};
REGISTER_UI_EVENT_HANDLER(AI_DIALOGUE)
.onchange = AI_dialogue_onchange,
@@ -696,6 +722,12 @@ REGISTER_UI_EVENT_HANDLER(AI_DIAL_VOICE)
.onkey = NULL,
.ontouch = AI_dialogue_ontouch,
};
REGISTER_UI_EVENT_HANDLER(AI_DIAL_TIME)
.onchange = AI_dial_time_onchange,
.onkey = NULL,
.ontouch = NULL,
};
//****************************************************************************************/
// layout3-AI表盘 //
/****************************************************************************************/
@@ -128,8 +128,10 @@ void camera_dec_reflush_sync(int status)
int msg[3] = {0};
if (!status) {
//正常刷新
msg[0] = (int)camera_dec_flush;
} else {
//异常显示
msg[0] = (int) camera_rec_err;
}
msg[1] = 1;
@@ -178,6 +180,9 @@ static int cam_ctrl_view_video(int enable)
}
static void cam_camera_photo_savc_cb(char *path)
{
if (jljpeg_stream_src_data_get()) {
return;
}
jljpeg_stream_src_data_save_to_file(path);
if (__this && (__this->photo_save_cnt > 0)) {
__this->photo_save_cnt--;
@@ -357,6 +362,29 @@ static int cam_handler_prepare_cb(void *ctrl, int count, int start)
return 0;
}
//****************************************************************************************//
// 消息处理
//****************************************************************************************//
static int ui_video_show_exit_handler(const char *type, u32 arg)
{
log_info("[%s]", __func__);
switch (__this->layout_curr) {
case CAM_SHOW_LAYOUT:
cam_layout_sw(CAM_PHOTO_LAYOUT);
break;
default:
break;
}
return true;
}
static const struct uimsg_handl ui_msg_handler[] = {
{ "video_show_exit", ui_video_show_exit_handler },
{ NULL, NULL}, /* 必须以此结尾! */
};
//****************************************************************************************//
// 提醒
//****************************************************************************************//
@@ -390,6 +418,7 @@ static int cam_layer_onchange(void *ctrl, enum element_change_event event, void
//图层初始化变量
/* f_format("sd0","fat",0); */
cam_ctrl_init();
ui_register_msg_handler(ID_WINDOW_CAMERA, ui_msg_handler);
break;
case ON_CHANGE_RELEASE:
cam_ctrl_deinit();
@@ -522,6 +551,10 @@ static int cam_camera_layout_onchange(void *ctrl, enum element_change_event even
jljpeg_stream_src_data_len_get());
break;
case ON_CHANGE_RELEASE:
if (__this->video_doing) {
jlcamera_video_rec_stop();
__this->video_doing = 0;
}
//关闭摄像头
jlcamera_video_rec_deinit();
//关闭jpeg数据流解码
@@ -817,6 +850,8 @@ static int cam_photo_list_ontouch(void *_ctrl, struct element_touch_event *e)
if (__this->view_remap[i] == dyn_idx) {
if (!__this->view_vaild[i]) {
return true;
} else {
break;
}
}
}
@@ -912,7 +947,88 @@ static void avi_flush_timer(void *p)
jlgpu_scheduler_wait_sync();
}
void __jpeg_draw_cb_gpu(int id, u8 *dst_buf, struct rect *dst_r, struct rect *src_r, u8 bytes_per_pixel, void *priv, void *matrix);
static void camera_video_dec_flush(void)
{
struct element *elm;
elm = ui_core_get_element_by_id(CAM_SHOW_LAYOUT);
if (elm != NULL) {
/* printf(">>>>>>elm != NULL"); */
ui_redraw(CAM_SHOW_LAYOUT);
}
}
void video_dec_reflush_sync(int status)
{
void jlui_malloc_ram_info_dump();
/* jlui_malloc_ram_info_dump(); */
log_debug("%s status:%d !!\n", __func__, status);
int msg[3] = {0};
if (!status) {
//正常刷新
msg[0] = (int) camera_video_dec_flush;
} else {
//异常显示
}
msg[1] = 1;
msg[2] = 0;
int ret = os_taskq_post_type("ui", Q_CALLBACK, 3, msg);
}
#if 0//使用video_dec解码测试.
extern int video_dec_init();
extern int video_dec_deinit();
extern int video_dec_set_path(s8(*path)[64], u8 path_number);
extern int video_dec_start(u8 index, u8 mode);
extern int video_dec_refresh_cb_register(void (*cb)(int status));
extern int video_dec_stop();
static int cam_show_layout_onchange(void *ctrl, enum element_change_event event, void *arg)
{
struct ui_grid *grid = (struct ui_grid *)ctrl;
struct element *elm = (struct element *)ctrl;
struct draw_context *dc = (struct draw_context *)arg;
switch (event) {
case ON_CHANGE_INIT:
if (!__this->sel_path) {
break;
}
if (__this->view_video) {
video_dec_init();
video_dec_refresh_cb_register(video_dec_reflush_sync);
video_dec_set_path((s8(*)[64])__this->sel_path, 1);
video_dec_start(0, 0);
}
break;
case ON_CHANGE_SHOW_POST:
if (!__this->sel_path) {
break;
}
ui_custom_draw_clear(dc);
if (__this->view_video) {
//实时显示画面
if (!jljpeg_stream_src_data_len_get()) {
//码流数据为空时不显示
break;
}
jpeg_image_ram(dc, 40, 0, 240, 320,
jljpeg_stream_src_data_get(),
jljpeg_stream_src_data_len_get());
}
break;
case ON_CHANGE_RELEASE:
video_dec_stop();
video_dec_deinit();
break;
default:
break;
}
return false;
}
#endif
static int cam_show_layout_onchange1(void *ctrl, enum element_change_event event, void *arg)
{
struct ui_grid *grid = (struct ui_grid *)ctrl;
struct element *elm = (struct element *)ctrl;
@@ -935,11 +1051,11 @@ static int cam_show_layout_onchange(void *ctrl, enum element_change_event event,
if (!get_aviplay_handle()) {
break;
}
/* u16 timer_id = 0; */
/* if (!avi_get_avi_playtimer_id()) { */
/* timer_id = sys_timeout_add((void *)elm->id, (avi_flush_timer), 10); // 强制满帧刷新 */
/* avi_set_avi_playtimer_id(timer_id); */
/* } */
u16 timer_id = 0;
if (!avi_get_avi_playtimer_id()) {
timer_id = sys_timeout_add((void *)elm->id, (avi_flush_timer), 10); // 强制满帧刷新
avi_set_avi_playtimer_id(timer_id);
}
u32 avip = (u32)get_avi_player_st_handle();
log_debug("player->st %x %d %d ", avip, avi_get_width(get_avi_player_st_handle()), avi_get_height(get_avi_player_st_handle()));
ui_draw(dc,
@@ -970,9 +1086,9 @@ static int cam_show_layout_onchange(void *ctrl, enum element_change_event event,
}
return false;
}
REGISTER_UI_EVENT_HANDLER(CAM_SHOW_LAYOUT)
.onchange = cam_show_layout_onchange,
/* .onchange = cam_show_layout_onchange, */
.onchange = cam_show_layout_onchange1,
.onkey = NULL,
.ontouch = NULL,
};
@@ -165,6 +165,11 @@ static int show_onchange(void *ctr, enum element_change_event e, void *arg)
{
switch (e) {
case ON_CHANGE_INIT:
struct unumber num;
num.type = TYPE_NUM;
num.numbs = 1;
num.number[0] = 20;
ui_number_update_by_id(AI_TIME, &num);
send_0X09_ENTER();
break;
case ON_CHANGE_FIRST_SHOW:
@@ -254,6 +259,7 @@ static void AI_time1_handler(void *priv)//20秒倒计时,不息屏
if (i_flag == 0) { //20倒计时结束后,超时标志位置1
i_flag = 20;
ai_timeout = true;
ui_text_show_index_by_id(AI_TEXT, 0);
} else if (flag_button == 0) { //按钮控件按下,开始录音倒计时
i_flag = 20;
}
@@ -391,7 +397,7 @@ static void AI_thinking_handler(void *priv)
ui_core_redraw(pic);
}
flag++;
if (flag == 25) { //等待5秒没有获得信号,切到列表
if (flag == 100) { //等待5秒没有获得信号,切到列表
flag = 0;
page_showtxt();
}
@@ -480,10 +486,10 @@ static void reflash_gettxt_handler(void *priv)
static void reflash_gettxtII_handler(void *priv)
{
if (ai_txt1) {
ui_text_set_textu_by_id(AI_TXT1, (char *)ai_txt1, strlen((char *)ai_txt1), FONT_DEFAULT | FONT_SHOW_SCROLL);
ui_text_set_textu_by_id(AI_TXT1, (char *)ai_txt1, strlen((char *)ai_txt1), FONT_DEFAULT);
} else {
ai_txt1 = NULL;
ui_text_set_textu_by_id(AI_TXT1, (char *)ai_txt1, 0, FONT_DEFAULT | FONT_SHOW_SCROLL);
ui_text_set_textu_by_id(AI_TXT1, (char *)ai_txt1, 0, FONT_DEFAULT);
}
}
void memset_txt(void)
@@ -17,6 +17,7 @@
#include "vad_main.h"
#include "ifly_socket.h"
#include "cat1/cat1_common.h"
#include "font/language_list.h"
#if TCFG_IFLYTEK_ENABLE //科大讯飞网络版
@@ -45,6 +46,7 @@
// ui参数
struct ifly_ui_t {
u8 net_fail;
u16 time_id; // 定时器
u16 task_create_timer;
u16 switch_pic_cnt; // 动图循环
@@ -184,12 +186,18 @@ REGISTER_UI_EVENT_HANDLER(IFLY_BUTTON_TTS_PLAY)
static void reflash_gettxt_handler(void *priv)
{
if (ifly_check_net_connect() == false) {
u8 *net_fail = (u8 *)priv;
if (ifly_check_net_connect() == false && !(*net_fail)) {
UI_MSG_POST("tts_network_no_connect");
}
ui_auto_shut_down_re_run();
font_lang_set(UnicodeMixRightword);
ui_text_set_textu_by_id(AI_4,
p_ifly_net->local_text, strlen(p_ifly_net->local_text),
FONT_DEFAULT | FONT_SHOW_MULTI_LINE);
ui_text_set_textu_by_id(IFLY_TEXT_TTS_TXT,
p_ifly_net->ai_text, strlen(p_ifly_net->ai_text),
FONT_DEFAULT | FONT_SHOW_MULTI_LINE | FONT_VERTICAL_SCROLL);
@@ -217,7 +225,12 @@ static int showtxt_onchange(void *ctr, enum element_change_event e, void *arg)
sys_timer_del(ifly_ui->time_id);
ifly_ui->time_id = 0;
}
ifly_ui->time_id = sys_timer_add(NULL, reflash_gettxt_handler, 1000);
if (ifly_check_net_connect()) {
ifly_ui->net_fail = 0;
} else {
ifly_ui->net_fail = 1;
}
ifly_ui->time_id = sys_timer_add((void *)&ifly_ui->net_fail, reflash_gettxt_handler, 1000);
break;
case ON_CHANGE_FIRST_SHOW:
break;
@@ -502,6 +515,26 @@ REGISTER_UI_EVENT_HANDLER(IFLY_LAYOUT_VAD)
.ontouch = NULL,
};
static int no_connect_ontouch(void *ctr, struct element_touch_event *e)
{
switch (e->event) {
case ELM_EVENT_TOUCH_R_MOVE:
if (ifly_ui && ifly_ui->cur_layout) {
ui_hide(IFLY_LAYOUT_NO_CONNECT);
ui_show(ifly_ui->cur_layout);
return true;
}
break;
default:
break;
}
return false;
}
REGISTER_UI_EVENT_HANDLER(IFLY_LAYOUT_NO_CONNECT)
.onchange = NULL,
.onkey = NULL,
.ontouch = no_connect_ontouch,
};
static void ifly_no_content_time_deal(void *priv)
{
@@ -87,6 +87,7 @@ static int uvc_layout_onchange(void *ctrl, enum element_change_event event, void
switch (event) {
case ON_CHANGE_INIT:
ui_auto_shut_down_disable();
jljpeg_stream_init();
jluvc_set_refresh_cb(ui_uvc_ui_reflush);
break;
@@ -97,6 +98,7 @@ static int uvc_layout_onchange(void *ctrl, enum element_change_event event, void
}
dc = (struct draw_context *)arg;
/* ui_custom_draw_clear(dc); */
/* put_buf(jljpeg_stream_src_data_get(),128); */
jlgpu_scheduler_wait_sync();
jlgpu_task_clean_up_by_id(dc->gpu_task_head, dc->elm->id, 0x1);
jpeg_image_ram(dc, 0, 0, UVC_JPG_WIDTH , UVC_JPG_HEIGHT,
@@ -105,6 +107,7 @@ static int uvc_layout_onchange(void *ctrl, enum element_change_event event, void
break;
case ON_CHANGE_RELEASE:
jljpeg_stream_deinit();
ui_auto_shut_down_enable();
break;
default:
return false;