1、摄像头添加SD卡录满处理;

2、修复摄像头、科大讯飞等相关问题;
This commit is contained in:
huxi
2026-01-08 11:29:46 +08:00
parent dc11ee3fc4
commit 36e62db3a4
65 changed files with 3092 additions and 2904 deletions
+18 -15
View File
@@ -123,9 +123,9 @@ u16 app_video_task_switch_flag_set(u16 flag)
#define AVI_FILE_COUNT (sizeof(avi_files) / sizeof(avi_files[0]))
static void parse_list_chunk(FILE *file, long list_end, ChunkCallback callback,
void *user_param, long file_size, const char **parent_hierarchy,
int parent_level);
static int parse_list_chunk(FILE *file, long list_end, ChunkCallback callback,
void *user_param, long file_size, const char **parent_hierarchy,
int parent_level);
typedef void (*DisplayMJpegFunc)(void *player, FILE *file, int data, int chunk_size, int width, int height);
typedef void (*PlayPCMFunc)(void *player, FILE *file, int data, int chunk_size);
@@ -479,6 +479,7 @@ char parse_riff_file(FILE *file, ChunkCallback callback, void *user_param, int
log_info("\n\n\n\n\nRIFF chunk_size: %d\n\n\n\n\n", chunk_size);
/* 校验块大小合法性 */
long current_pos = ftell(file) - __this->file_offset;
/* printf("%s 111 chunk:%s current_pos: %d, chunk_size: %d, file_size: %d", __func__, chunk_id, (int)current_pos, chunk_size, (int)file_size); */
log_info("\n\n\n\n[%s]current_pos: %d, chunk_size: %d, file_size: %d\n\n\n\n", __func__, (int)current_pos, chunk_size, (int)file_size);
if (current_pos + chunk_size > file_size) {
log_info("校验块大小合法性 %d %d %d", (int)current_pos, chunk_size, (int)file_size);
@@ -507,9 +508,9 @@ char parse_riff_file(FILE *file, ChunkCallback callback, void *user_param, int
log_error("Failed to read sub chunk size");
return -AVI_READ_SUB_CHUNK_ID_FAIL;
}
/* 校验子块大小 */
current_pos = ftell(file) - __this->file_offset;
/* printf("%s 222 chunk:%s current_pos: %d, chunk_size: %d, file_size: %d", __func__, sub_chunk_id, (int)current_pos, sub_chunk_size, (int)file_size); */
if (current_pos + sub_chunk_size > file_size) {
log_info("校验子块大小 %d %d %d", (int)current_pos, sub_chunk_size, (int)file_size);
log_error("Sub chunk exceeds file size");
@@ -541,9 +542,9 @@ char parse_riff_file(FILE *file, ChunkCallback callback, void *user_param, int
fseek(file, current_pos + sub_chunk_size, SEEK_SET);
} else {
long list_end = ftell(file) - __this->file_offset + sub_chunk_size - 4;
parse_list_chunk(file, list_end, callback, user_param, file_size,
list_hierarchy, 4);
int ret = parse_list_chunk(file, list_end, callback, user_param, file_size,
list_hierarchy, 4);
return ret;
fseek(file, current_pos + sub_chunk_size, SEEK_SET); // add
}
} else {
@@ -567,9 +568,9 @@ char parse_riff_file(FILE *file, ChunkCallback callback, void *user_param, int
return 0;
}
/* LIST块解析实现 */
static void parse_list_chunk(FILE *file, long list_end, ChunkCallback callback,
void *user_param, long file_size, const char **parent_hierarchy,
int parent_level)
static int parse_list_chunk(FILE *file, long list_end, ChunkCallback callback,
void *user_param, long file_size, const char **parent_hierarchy,
int parent_level)
{
while (ftell(file) - __this->file_offset < list_end) {
wdt_clear();
@@ -580,20 +581,21 @@ static void parse_list_chunk(FILE *file, long list_end, ChunkCallback callback,
/* 读取子块头 */
if (avi_fread(sub_chunk_id, 1, 4, file) != 4) {
log_error("Failed to read sub chunk ID");
return;
return -AVI_READ_SUB_CHUNK_ID_FAIL;
}
sub_chunk_id[4] = '\0';
if (avi_fread(&sub_chunk_size, 4, 1, file) != 1) {
log_error("Failed to read sub chunk size");
return;
return -AVI_READ_SUB_CHUNK_SIZE_FAIL;
}
/* 校验子块大小 */
long current_pos = ftell(file) - __this->file_offset;
/* printf("%s 333 chunk:%s current_pos: %d, chunk_size: %d, file_size: %d", __func__, sub_chunk_id, (int)current_pos, sub_chunk_size, (int)file_size); */
if (current_pos + sub_chunk_size > file_size) {
log_error("Sub chunk exceeds file size");
return;
return -AVI_SUB_CHUNK_LEN_ERR;
}
/* 构建层级信息 */
@@ -608,7 +610,7 @@ static void parse_list_chunk(FILE *file, long list_end, ChunkCallback callback,
if (avi_fread(list_type, 1, 4, file) != 4) {
log_error("Failed to read nested LIST type");
avi_free(current_hierarchy);
return;
return -AVI_LIST_TYPE_ERR;
}
list_type[4] = '\0';
@@ -654,6 +656,7 @@ static void parse_list_chunk(FILE *file, long list_end, ChunkCallback callback,
avi_free(current_hierarchy);
}
return 0;
}
// 打印流头信息(增强版)