资源简介
1,用的库是官方的HAL库
2,硬件是原子的F429核心板(底板没有。。),用到的外设有,NANDFLASH、SDRAM、USB、一个按键
3,播放设备用的是windows的ECap软件。
4,NANDFLASH里面预存了原子的测试文件夹,里面有做好的AVI文件,名字是“[卢冠廷-一生所爱]_240160_10帧.avi”
5,由于NANDFLASH读取速度不理想,变读取边发送USB的话,经常出错,而且帧卡顿,所以这里先把内容缓存到SDRAM上,然后在发送。
6,使用方法是上电后,点击按键,开始缓存AVI文件到SDRAM中,大约1分钟左右,就可以在ECap上播放了
7,可以在串口上看到一些打印信息,核心板的串口是TTL电平的,需要自己转换。

代码片段和文件信息
#include “avi.h“
#include “usart.h“
AVI_INFO avix; //avi文件相关信息
u8*const AVI_VIDS_FLAG_TBL[2]={“00dc““01dc“};//视频编码标志字符串00dc/01dc
u8*const AVI_AUDS_FLAG_TBL[2]={“00wb““01wb“};//音频编码标志字符串00wb/01wb
//avi解码初始化
//buf:输入缓冲区
//size:缓冲区大小
//返回值:AVI_OKavi文件解析成功
// 其他错误代码
AVISTATUS avi_init(u8 *bufu16 size)
{
u16 offset;
u8 *tbuf;
AVISTATUS res=AVI_OK;
AVI_HEADER *aviheader;
LIST_HEADER *listheader;
AVIH_HEADER *avihheader;
STRH_HEADER *strhheader;
STRF_BMPHEADER *bmpheader;
STRF_WAVHEADER *wavheader;
tbuf=buf;
aviheader=(AVI_HEADER*)buf;
if(aviheader->RiffID!=AVI_RIFF_ID)return AVI_RIFF_ERR; //RIFF ID错误
if(aviheader->AviID!=AVI_AVI_ID)return AVI_AVI_ERR; //AVI ID错误
buf+=sizeof(AVI_HEADER); //偏移
listheader=(LIST_HEADER*)(buf);
if(listheader->ListID!=AVI_LIST_ID)return AVI_LIST_ERR; //LIST ID错误
if(listheader->ListType!=AVI_HDRL_ID)return AVI_HDRL_ERR; //HDRL ID错误
buf+=sizeof(LIST_HEADER); //偏移
avihheader=(AVIH_HEADER*)(buf);
if(avihheader->BlockID!=AVI_AVIH_ID)return AVI_AVIH_ERR; //AVIH ID错误
avix.SecPerframe=avihheader->SecPerframe; //得到帧间隔时间
avix.Totalframe=avihheader->Totalframe; //得到总帧数
buf+=avihheader->BlockSize+8; //偏移
listheader=(LIST_HEADER*)(buf);
if(listheader->ListID!=AVI_LIST_ID)return AVI_LIST_ERR; //LIST ID错误
if(listheader->ListType!=AVI_STRL_ID)return AVI_STRL_ERR; //STRL ID错误
strhheader=(STRH_HEADER*)(buf+12);
if(strhheader->BlockID!=AVI_STRH_ID)return AVI_STRH_ERR; //STRH ID错误
if(strhheader->StreamType==AVI_VIDS_STREAM) //视频帧在前
{
if(strhheader->Handler!=AVI_FORMAT_MJPG)return AVI_FORMAT_ERR; //非MJPG视频流不支持
avix.VideoFLAG=(u8*)AVI_VIDS_FLAG_TBL[0]; //视频流标记 “00dc“
avix.AudioFLAG=(u8*)AVI_AUDS_FLAG_TBL[1]; //音频流标记 “01wb“
bmpheader=(STRF_BMPHEADER*)(buf+12+strhheader->BlockSize+8);//strf
if(bmpheader->BlockID!=AVI_STRF_ID)return AVI_STRF_ERR; //STRF ID错误
avix.Width=bmpheader->bmiHeader.Width;
avix.Height=bmpheader->bmiHeader.Height;
buf+=listheader->BlockSize+8; //偏移
listheader=(LIST_HEADER*)(buf);
if(listheader->ListID!=AVI_LIST_ID)//是不含有音频帧的视频文件
{
avix.SampleRate=0; //音频采样率
avix.Channels=0; //音频通道数
avix.AudioType=0; //音频格式
}else
{
if(listheader->ListType!=AVI_STRL_ID)return AVI_STRL_ERR; //STRL ID错误
strhheader=(STRH_HEADER*)(buf+12);
if(strhheader->BlockID!=AVI_STRH_ID)return AVI_STRH_ERR; //STRH ID错误
if(strhheader->StreamType!=AVI_AUDS_STREAM)return AVI_FORMAT_ERR;//格式错误
wavheader=(STRF_WAVHEADER*)(buf+12+strhheader->BlockSize+8);//strf
if(wavheader->BlockID!=AVI_STRF_ID)return AVI_STRF_ERR; //STRF ID错误
avix.SampleRate=wavheader->SampleRate; //音频采样率
avix.Channels=wavheader->Channels; //音频通道数
avix.AudioType=wavheader->FormatTag; //音频格式
}
}else if(strhheader->StreamType==AVI_AUDS_STREAM) //音频帧在前
{
avix.VideoFLA
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6104 2018-04-04 11:49 USB_UVC_AVI\APP\avi.c
文件 6702 2018-04-04 13:27 USB_UVC_AVI\APP\avi.h
文件 24423 2016-01-30 00:54 USB_UVC_AVI\CORE\cmsis_armcc.h
文件 114498 2016-01-30 00:54 USB_UVC_AVI\CORE\core_cm4.h
文件 3620 2016-01-30 00:54 USB_UVC_AVI\CORE\core_cmFunc.h
文件 3636 2016-01-30 00:54 USB_UVC_AVI\CORE\core_cmInstr.h
文件 3662 2016-01-30 00:54 USB_UVC_AVI\CORE\core_cmSimd.h
文件 31702 2016-01-30 00:56 USB_UVC_AVI\CORE\startup_stm32f429xx.s
文件 18133 2018-03-23 13:37 USB_UVC_AVI\DRIVER\ftl.c
文件 1678 2018-03-23 13:07 USB_UVC_AVI\DRIVER\ftl.h
文件 2966 2018-03-20 14:36 USB_UVC_AVI\DRIVER\KEY.c
文件 1227 2018-03-20 13:54 USB_UVC_AVI\DRIVER\KEY.h
文件 317 2018-03-15 11:58 USB_UVC_AVI\DRIVER\led.c
文件 109 2018-03-15 11:47 USB_UVC_AVI\DRIVER\led.h
文件 24910 2018-03-23 13:06 USB_UVC_AVI\DRIVER\nand.c
文件 3323 2018-03-23 13:06 USB_UVC_AVI\DRIVER\nand.h
文件 6325 2018-03-20 08:45 USB_UVC_AVI\DRIVER\sdram.c
文件 1049 2018-03-20 08:45 USB_UVC_AVI\DRIVER\sdram.h
文件 2388 2018-04-04 14:25 USB_UVC_AVI\DRIVER\timer.c
文件 285 2018-04-04 14:25 USB_UVC_AVI\DRIVER\timer.h
文件 5091 2018-03-22 13:40 USB_UVC_AVI\DRIVER\usart.c
文件 591 2018-03-21 16:57 USB_UVC_AVI\DRIVER\usart.h
文件 13537 2018-03-20 13:05 USB_UVC_AVI\DRIVER\w25qxx.c
文件 2233 2018-03-20 10:02 USB_UVC_AVI\DRIVER\w25qxx.h
文件 724722 2017-08-18 15:43 USB_UVC_AVI\Fatfs\cc936.c
文件 7708 2018-03-29 09:42 USB_UVC_AVI\Fatfs\diskio.c
文件 2707 2016-04-12 21:25 USB_UVC_AVI\Fatfs\diskio.h
文件 193221 2017-08-31 11:04 USB_UVC_AVI\Fatfs\ff.c
文件 13815 2017-08-31 11:04 USB_UVC_AVI\Fatfs\ff.h
文件 10674 2018-03-29 09:46 USB_UVC_AVI\Fatfs\ffconf.h
............此处省略213个文件信息
相关资源
- I2C读写AT24C02 基于STM32F103 cube116540
- 基于stm32f103ve的程序——跑马灯实验
- 基于STM32RCT6的步进电机驱动程序
- stm32f407上的两个can发送和接收例程
- STM32 led 时钟
- STM32 2.4G通信例程
- 直流无刷电机方波驱动 stm32 例程代码
- STM32中文资料
- usb hid调试工具
- HID调试助手
- STM32蓝牙和串口程序
- USB.Over.Network.Server 注册机
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- WPF USB 网络 串口 通信软件
- stm32f030 IAP Demo(原创)
- USB转串口驱动,FT232R驱动程序,最新
- STM32基于rt_thread操作系统的SDHC卡文件
- WinCE下CP210x的驱动程序
- hidusage.h hidpi.h 等USB开发用头文件
- NRF24L01实现51与STM32双向通讯
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- stm32官方例程
- STM32F103定时器中断程序
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- STM32定时器使用入门。看了这个程序会
- SIM908 SDIO FSMC STM32 FIFO
评论
共有 条评论