66 lines
1.9 KiB
C
66 lines
1.9 KiB
C
#include "avilib.h"
|
|
|
|
//读取AVI文件视频帧和音频帧行写卡在PC上验证
|
|
int video_dec_demo(void)
|
|
{
|
|
char *filename = "storage/sd0/C/VID_0001.AVI";
|
|
avi_t *in_fd = AVI_open_input_file(filename, 1);
|
|
if (in_fd == NULL) {
|
|
printf("AVI_open_input_file err \n");
|
|
return -1;
|
|
}
|
|
|
|
u8 *file_buf = malloc(20 * 1024);
|
|
if (!file_buf) {
|
|
printf("file_buf malloc err\n");
|
|
return -1;
|
|
}
|
|
|
|
int total_frame = AVI_video_frames(in_fd);
|
|
printf("AVI total video frame:%d \n", total_frame);
|
|
int audio_chunks = AVI_audio_chunks(in_fd);
|
|
printf("AVI total audio frame:%d \n", audio_chunks);
|
|
|
|
char save_file_name[64];
|
|
int i = 0;
|
|
for (i = 0; i < total_frame; i++) {
|
|
AVI_set_video_position(in_fd, i);
|
|
|
|
int keyframe;
|
|
int file_len = AVI_read_frame(in_fd, (char *)file_buf, &keyframe);
|
|
if (file_len > 0) {
|
|
printf("write video frame:%d \n", i);
|
|
snprintf(save_file_name, sizeof(save_file_name), "storage/sd0/C/avi_test/jpg_%d.jpg", i);
|
|
FILE *fd = fopen(save_file_name, "w+");
|
|
fwrite(file_buf, 1, file_len, fd);
|
|
fclose(fd);
|
|
}
|
|
}
|
|
|
|
snprintf(save_file_name, sizeof(save_file_name), "storage/sd0/C/avi_test/test.pcm");
|
|
FILE *fd = fopen(save_file_name, "w+");
|
|
|
|
u32 offset = 0;
|
|
for (i = 0; i < audio_chunks; i++) {
|
|
int audio_chunk_size = AVI_audio_size(in_fd, i);
|
|
AVI_set_audio_position(in_fd, offset);
|
|
|
|
|
|
int file_len = AVI_read_audio_chunk(in_fd, (char *)file_buf);
|
|
if (file_len > 0) {
|
|
printf("write audio frame:%d size:%d chunk_size:%d \n", i, file_len, audio_chunk_size);
|
|
fwrite(file_buf, 1, file_len, fd);
|
|
}
|
|
|
|
offset += audio_chunk_size;
|
|
}
|
|
fclose(fd);
|
|
|
|
|
|
AVI_close(in_fd);
|
|
free(file_buf);
|
|
|
|
/* os_time_dly(-1); */
|
|
return 0;
|
|
}
|