資源簡介
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個文件信息
評論
共有 條評論