chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

自己生成MJPG格式AVI文件

聚豐開(kāi)發(fā) ? 2018-11-02 14:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


注:本文是作者以前發(fā)表在其個(gè)人博客,現(xiàn)在發(fā)布到“聚豐開(kāi)發(fā)”專欄




現(xiàn)在電子產(chǎn)品經(jīng)常需要使用到視頻,于是對(duì)視頻技術(shù)的需求也日益高漲,通常做法是采用現(xiàn)成的硬件或軟件方案來(lái)實(shí)現(xiàn)對(duì)視頻數(shù)據(jù)的處理,要說(shuō)掌握這部分算法的人并不多,大多數(shù)工程師沒(méi)有時(shí)間和精力去消化吸收這些算法。


MJPG是最簡(jiǎn)單的視頻文件格式,存儲(chǔ)時(shí)是將圖像用JPG格式一幀一幀的保存起來(lái),回放的時(shí)候按照規(guī)定的時(shí)間間隔一幀一幀的回放。用這種處理方法算法相對(duì)比較簡(jiǎn)單,如果對(duì)圖像要求不高可以達(dá)到20~30倍的壓縮率,對(duì)于單片機(jī)來(lái)說(shuō)不失為一種可行性較高的備選方案。


以前有個(gè)項(xiàng)目需要支持MJPG文件,為此我寫(xiě)了一段PC程序進(jìn)行代碼驗(yàn)證,同時(shí)生成測(cè)試用MJPG文件。具體做法是預(yù)先做好10張JPG圖片,每張圖片都有VGA和QVGA兩種尺寸,然后按輸入?yún)?shù)生成相應(yīng)的MJPG文件。比如輸入選擇VGA/10幀,生成的MJPG文件第一秒為第一張VGA圖片重復(fù)10次,依此類推。


程序生成的MJPG用電腦播放,如果能正常播放,就說(shuō)明代碼對(duì)文件格式的處理基本正確。這里程序每一幀都對(duì)應(yīng)有自己的JPG數(shù)據(jù),實(shí)際上可以不這么做,MJPG文件有音頻和視頻流的播放序號(hào),如果相鄰的視頻幀內(nèi)容相同,是可以將播放序號(hào)指向同一張JPG圖像數(shù)據(jù)的。




每一幀自己有獨(dú)立的JPG圖像數(shù)據(jù)
播放序號(hào): JPG01 JPG02 JPG03 ... JPG09 JPG10 JPG11
JPG01_Data:
...(第一張圖片內(nèi)容)...
JPG02_Data:
...(第一張圖片內(nèi)容)...
...
JPG09_Data:
...(第一張圖片內(nèi)容)...
JPG10_Data:
...(第一張圖片內(nèi)容)...
JPG11_Data:
...(第二張圖片內(nèi)容)...

相鄰幀相同利用同一張JPG數(shù)據(jù)
播放序號(hào): JPG01 JPG01 JPG01 ... JPG01 JPG01 JPG02
JPG01_Data:
...(第一張圖片內(nèi)容)...
JPG02_Data:
...(第二張圖片內(nèi)容)...
...
JPG10_Data:
...(第十張圖片內(nèi)容)...

注意代碼只是用于臨時(shí)工具,沒(méi)有詳細(xì)注釋進(jìn)行說(shuō)明,代碼書(shū)寫(xiě)也存在許多不規(guī)范的地方。



-------------------------參考代碼---------------------------

#include "string.h"
#include "stdio.h"

/*unsigned char mMJPEG_Header[] =
{
0x52,0x49,0x46,0x46,//0x0000 "RIFF"
0x00,0x00,0x00,0x00,//0x0004 length of data, need update
it
0x41,0x56,0x49,0x20,//0x0008 RIFF form identifier "AVI "

0x4C,0x49,0x53,0x54,//0x000C List identifier "LIST"
0x46,0x01,0x00,0x00,//0x0010 Length of list(326 bytes)
0x68,0x64,0x72,0x6C,//0x0014 List type identifier "hdrl"

0x61,0x76,0x69,0x68,//0x0018 Chunk identifier "avih"
0x38,0x00,0x00,0x00,//0x001C Length of chunk(56 bytes)
0x00,0x00,0x00,0x00,//0x0020 Number of us per fer fram
e(=1000000/FrameRate), need update it
0x00,0x00,0x00,0x00,//0x0024 Max bytes per second(ignored)
0x00,0x00,0x00,0x00,//0x0028 Padding granularity(ignored)
0x10,0x00,0x01,0x00,//0x00,0x00,0x00,0x00,//0x002C Flags
0x00,0x00,0x00,0x00,//0x0030 Total number of frame, need update it
0x00,0x00,0x00,0x00,//0x0034 Intial frame number for frames
0x02,0x00,0x00,0x00,//0x0038 Number of streams(2)
0x00,0x00,0x10,0x00,//0x00,0x00,0x00,0x00,//0x003C Suggested buffer size(ignored)
0x00,0x00,0x00,0x00,//0x0040 Width of video, need update it
0x00,0x00,0x00,0x00,//0x0044 Height of video, need update it
0x00,0x00,0x00,0x00,//0x0048 Reserved
0x00,0x00,0x00,0x00,//0x004C Reserved
0x00,0x00,0x00,0x00,//0x0050 Reserved
0x00,0x00,0x00,0x00,//0x0054 Reserved

0x4C,0x49,0x53,0x54,//0x0058 List identifier "LIST"
0x94,0x00,0x00,0x00,//0x005C Length of list(148 bytes)
0x73,0x74,0x72,0x6C,//0x0060 List type identifier"strl"

0x73,0x74,0x72,0x68,//0x0064 Chunk identifier "strh"
0x38,0x00,0x00,0x00,//0x0068 Length of chunk(56 bytes)
0x76,0x69,0x64,0x73,//0x006C Stream type identifier "vids"
0x4D,0x4A,0x50,0x47,//0x0070 Stream handler identifier "MJPG"
0x00,0x00,0x00,0x00,//0x0074 Flags
0x00,0x00,//0x0078 Priority(ignored)
0x00,0x00,//0x007A Language(ignored)
0x00,0x00,0x00,0x00,//0x007C Initial frame number(usually is 0)
0x01,0x00,0x00,0x00,//0x0080 Scale(usually is 1)
0x40,0x42,0x0f,0x00,//0x00,0x00,0x00,0x00,//0x0084 Frame rate, need update it
0x00,0x00,0x00,0x00,//0x0088 Star(usually is 0)
0x00,0x00,0x00,0x00,//0x008C Length(usually is total numbers
of frames), need update it
0x00,0x00,0x10,0x00,//0x00,0x00,0x00,0x00,//0x0090 Suggested buffer size(ignored)
0x10,0x27,0x00,0x00,//0x00,0x00,0x00,0x00,//0x0094 Quality(ignored)
0x00,0x00,0x00,0x00,//0x0098 Sample size(ignored)
0x00,0x00,//0x009C Frame upper left X coordinate
0x00,0x00,//0x009E Frame upper left Y coordinate
0x00,0x00,//0x00A0 Frame lower right X coordinate, need update it
0x00,0x00,//0x00A2 Frame lower right Y coordinate, need update it

0x73,0x74,0x72,0x66,//0x00A4 Chunk identifier "strf"
0x48,0x00,0x00,0x00,//0x00A8 Length of chunk(72 bytes)
0x28,0x00,0x00,0x00,//0x48,0x00,0x00,0x00,//0x00AC Length of this chunk(72 bytes)
0x00,0x00,0x00,0x00,//0x00B0 Width of video, need update it
0x00,0x00,0x00,0x00,//0x00B4 Height of video, need update it
0x01,0x00,//0x00B8 Number of planes(1)
0x18,0x00,//0x10,0x00,//0x00BA Bits per pi
xel(16)
0x4D,0x4A,0x50,0x47,//0x00BC Stream handler identifier "MJPG"
0x00,0x00,0x00,0x00,//0x00C0 Raw image size, need update it
0x00,0x00,0x00,0x00,//0x00C4 X pixels per meter(ignored)
0x00,0x00,0x00,0x00,//0x00C8 Y pixels pre meter(ignored)
0x00,0x00,0x00,0x00,//0x00CC Number of colors used(ignored)
0x00,0x00,0x00,0x00,//0x00D0 Number of colors important(ignored)
0x00,0x00,0x00,0x00,//0x00D4 DV audio channel 0 auxillary source(ignored)
0x00,0x00,0x00,0x00,//0x00D8 DV audio channel 0 auxillary control(ignored)
0x00,0x00,0x00,0x00,//0x00DC DV audio channel 1 auxillary source(ignored)
0x00,0x00,0x00,0x00,//0x00E0 DV audio channel 1 auxillary control(ignored)
0x00,0x00,0x00,0x00,//0x00E4 DV video auxillary source(ignored)
0x00,0x00,0x00,0x00,//0x00E8 DV video auxillary control(ignored)
0x00,0x00,0x00,0x00,//0x00EC Reserved
0x00,0x00,0x00,0x00,//0x00F0 Reserved

0x4C,0x49,0x53,0x54,//0x00F4 List identifier "LIST"
0x62,0x00,0x00,0x00,//0x00F8 Length of list(98 bytes)
0x73,0x74,0x72,0x6C,//0x00FC List type identifier "strl"

0x73,0x74,0x72,0x68,//0x0100 Chunk indentifier "strh"
0x38,0x00,0x00,0x00,//0x0104 Length of chunk(56 bytes)
0x61,0x75,0x64,0x73,//0x0108 Stream type identifier "auds"
0x00,0x00,0x00,0x00,//0x20,0x20,0x20,0x20,//0x010C Stream handler identifier
0x00,0x00,0x00,0x00,//0x0110 Flags
0x00,0x00,//0x0114 Priority(ignored)
0x00,0x00,//0x0116 Language(ignored)
0x00,0x00,0x00,0x00,//0x0118 Initial frame number(usually is 0)
0x01,0x00,0x00,0x00,//0x011C Scale(usually is 1)
0x40,0x1F,0x00,0x00,//0x0120 Sampling rate(8k)
0x00,0x00,0x00,0x00,//0x0124 Start(usually is 0)
0x00,0x00,0x00,0x00,//0x0128 Length(number of audio data segments), need update it
0x00,0x00,0x10,0x00,//0x00,0x00,0x00,0x00,//0x012C Suggested buffer size(ignored)
0x10,0x27,0x00,0x00,//0x00,0x00,0x00,0x00,//0x0130 Quality(ignored)
0x01,0x00,0x00,0x00,//0x00,0x00,0x00,0x00,//0x0134 Sample size(ignored)
0x00,0x00,//0x0138 Frame upper left X coordinate(ignored)
0x00,0x00,//0x013A Frame upper left Y coordinate(ignored)
0x00,0x00,//0x013C Frame lower right X coordinate(ignored)
0x00,0x00,//0x013E Frame lower right Y coordinate(ignored)

0x73,0x74,0x72,0x66,//0x0140 Chunk identifier "strf"
0x12,0x00,0x00,0x00,//0x0144 Length of chunk(18 bytes)
0x01,0x00,//0x0148 Format tag(PCM is 1)
0x01,0x00,//0x014A Number of audio channels(1)
0x40,0x1F,0x00,0x00,//0x014C Sampling rate(8k)
0x40,0x1F,0x00,0x00,//0x0150 Sampling rate x Number of audio channels
0x01,0x00,//0x00,0x00,//0x0154 Block alignment(ignored)
0x08,0x00,//0x0156 Bits per sample(8)
0x00,0x00,//0x0158 Size of extra information(0)

//0x4C,0x49,0x53,0x54,//0x015A List identifier "LIST"
//0x00,0x00,0x00,0x00,//0x015E Length of list, need update it
//0x6D,0x6F,0x76,0x69//0x0162 List type identifier "movi"
};*/


unsigned char mMJPEG_Header[]={
0x52, 0x49, 0x46, 0x46, 0x34, 0x06, 0x1c, 0x00, 0x41, 0x56, 0x49, 0x20, 0x4c, 0x49, 0x53, 0x54,
0x46, 0x01, 0x00, 0x00, 0x68, 0x64, 0x72, 0x6c, 0x61, 0x76, 0x69, 0x68, 0x38, 0x00, 0x00, 0x00,
0x6a, 0x04, 0x01, 0x00, 0x4a, 0x65, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,
0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x26, 0x48, 0x00, 0x00,
0x40, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x49, 0x53, 0x54, 0x74, 0x00, 0x00, 0x00,
0x73, 0x74, 0x72, 0x6c, 0x73, 0x74, 0x72, 0x68, 0x38, 0x00, 0x00, 0x00, 0x76, 0x69, 0x64, 0x73,
0x6d, 0x6a, 0x70, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x6a, 0x04, 0x01, 0x00, 0x40, 0x42, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
0x26, 0x48, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x01, 0xf0, 0x00, 0x73, 0x74, 0x72, 0x66, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x40, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x4d, 0x4a, 0x50, 0x47,
0x00, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x4c, 0x49, 0x53, 0x54, 0x5c, 0x00, 0x00, 0x00, 0x73, 0x74, 0x72, 0x6c,
0x73, 0x74, 0x72, 0x68, 0x38, 0x00, 0x00, 0x00, 0x61, 0x75, 0x64, 0x73, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x10, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x2a, 0x01, 0x00, 0x10, 0x2b, 0x00, 0x00,
0x10, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x73, 0x74, 0x72, 0x66, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x2b, 0x00, 0x00,
0x10, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x49, 0x44, 0x49, 0x54, 0x1a, 0x00, 0x00, 0x00,
0x54, 0x48, 0x55, 0x20, 0x4e, 0x4f, 0x56, 0x20, 0x30, 0x36, 0x20, 0x31, 0x36, 0x3a, 0x34, 0x32,
0x3a, 0x32, 0x36, 0x20, 0x32, 0x30, 0x30, 0x38, 0x0a, 0x00, 0x4c, 0x49, 0x53, 0x54, 0x18, 0x00,
0x00, 0x00, 0x49, 0x4e, 0x46, 0x4f, 0x49, 0x53, 0x46, 0x54, 0x0c, 0x00, 0x00, 0x00, 0x43, 0x61,
0x6e, 0x6f, 0x6e, 0x4d, 0x56, 0x49, 0x30, 0x32, 0x00, 0x00, 0x4a, 0x55, 0x4e, 0x4b, 0x7e, 0x06,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4c, 0x49, 0x53, 0x54, 0x3c, 0xf7, 0x1b, 0x00, 0x6d, 0x6f, 0x76, 0x69};

void make_qvga_mjpeg()
{
unsigned long mFrameRate,mFrameTime,i,j,k,mTemp;
unsigned long mTargetFileLength,mSourceFileLength;
unsigned long mOffset,mSize;
unsigned char sFileName[256],ch;
FILE *fp1,*fp2,*fp3,*fp4;

mFrameRate=0;
printf("\r\nBegin make QVGA MJPG file\r\n");
while((mFrameRate<5)||(mframerate>30))
{
printf("Please input frame rate(5~30):");
scan
f("%d",&mFrameRate);
}
printf("Please input target filename:");
scanf("%s",sFileName);

mFrameTime=1000000/mFrameRate;

mMJPEG_Header[0x20]=(unsigned char)mFrameTime&0xFF;
mMJPEG_Header[0x21]=(unsigned char)(mFrameTime>>8)&0xFF;
mMJPEG_Header[0x22]=(unsigned char)(mFrameTime>>16)&0xFF;
mMJPEG_Header[0x23]=(unsigned char)(mFrameTime>>24)&0xFF;

mMJPEG_Header[0x30]=(unsigned char)(mFrameRate*10)&0xFF;
mMJPEG_Header[0x31]=(unsigned char)((mFrameRate*10)>>8)&0xFF;
mMJPEG_Header[0x32]=(unsigned char)((mFrameRate*10)>>16)&0xFF;
mMJPEG_Header[0x33]=(unsigned char)((mFrameRate*10)>>24)&0xFF;

mMJPEG_Header[0x40]=0x40;
mMJPEG_Header[0x41]=0x01;
mMJPEG_Header[0x42]=0x00;
mMJPEG_Header[0x43]=0x00;

mMJPEG_Header[0x44]=0xF0;
mMJPEG_Header[0x45]=0x00;
mMJPEG_Header[0x46]=0x00;
mMJPEG_Header[0x47]=0x00;

mMJPEG_Header[0x80]=(unsigned char)mFrameTime&0xFF;
mMJPEG_Header[0x81]=(unsigned char)(mFrameTime>>8)&0xFF;
mMJPEG_Header[0x82]=(unsigned char)(mFrameTime>>16)&0xFF;
mMJPEG_Header[0x83]=(unsigned char)(mFrameTime>>24)&0xFF;

//mMJPEG_Header[0x84]=(unsigned char)mFrameRate&0xFF;
//mMJPEG_Header[0x85]=(unsigned char)(mFrameRate>>8)&0xFF;
//mMJPEG_Header[0x86]=(unsigned char)(mFrameRate>>16)&0xFF;
//mMJPEG_Header[0x87]=(unsigned char)(mFrameRate>>24)&0xFF;

mMJPEG_Header[0x8C]=(unsigned char)(mFrameRate*10)&0xFF;
mMJPEG_Header[0x8D]=(unsigned char)((mFrameRate*10)>>8)&0xFF;
mMJPEG_Header[0x8E]=(unsigned char)((mFrameRate*10)>>16)&0xFF;
mMJPEG_Header[0x8F]=(unsigned char)((mFrameRate*10)>>24)&0xFF;

mMJPEG_Header[0xA0]=0x40;
mMJPEG_Header[0xA1]=0x01;
mMJPEG_Header[0xA2]=0xF0;
mMJPEG_Header[0xA3]=0x00;

mMJPEG_Header[0xB0]=0x40;
mMJPEG_Header[0xB1]=0x01;
mMJPEG_Header[0xB2]=0x00;
mMJPEG_Header[0xB3]=0x00;

mMJPEG_Header[0xB4]=0xF0;
mMJPEG_Header[0xB5]=0x00;
mMJPEG_Header[0xB6]=0x00;
mMJPEG_Header[0xB7]=0x00;

//mMJPEG_Header[0xBA]=0x18;//must set as 24
//mMJPEG_Header[0xBB]=0x00;

mMJPEG_Header[0xC0]=0x00;
mMJPEG_Header[0xC1]=0x58;
mMJPEG_Header[0xC2]=0x02;
mMJPEG_Header[0xC3]=0x00;

mMJPEG_Header[0x120-0x20]=0x40;
mMJPEG_Header[0x121-0x20]=0x1F;
mMJPEG_Header[0x122-0x20]=0x00;
mMJPEG_Header[0x123-0x20]=0x00;

mMJPEG_Header[0x128-0x20]=(unsigned char)(8000*10)&0xFF;
mMJPEG_Header[0x129-0x20]=(unsigned char)((8000*10)>>8)&0xFF;
mMJPEG_Header[0x12A-0x20]=(unsigned char)((8000*10)>>16)&0xFF;
mMJPEG_Header[0x12B-0x20]=(unsigned char)((8000*10)>>24)&0xFF;

mMJPEG_Header[0x12C-0x20]=0x40;
mMJPEG_Header[0x12D-0x20]=0x1F;
mMJPEG_Header[0x12E-0x20]=0x00;
mMJPEG_Header[0x12F-0x20]=0x00;

mMJPEG_Header[0x14C-0x20]=0x40;
mMJPEG_Header[0x14D-0x20]=0x1F;
mMJPEG_Header[0x14E-0x20]=0x00;
mMJPEG_Header[0x14F-0x20]=0x00;

mMJPEG_Header[0x150-0x20]=0x40;
mMJPEG_Header[0x151-0x20]=0x1f;
mMJPEG_Header[0x152-0x20]=0x00;
mMJPEG_Header[0x153-0x20]=0x00;

/*mMJPEG_Header[0x120]=0x10;
mMJPEG_Header[0x121]=0x2B;
mMJPEG_Header[0x122]=0x00;
mMJPEG_Header[0x123]=0x00;

mMJPEG_Header[0x128]=(unsigned char)(8000*10)&0xFF;
mMJPEG_Header[0x129]=(unsigned char)((8000*10)>>8)&0xFF;
mMJPEG_Header[0x12A]=(unsigned char)((8000*10)>>16)&0xFF;
mMJPEG_Header[0x12B]=(unsigned char)((8000*10)>>24)&0xFF;

mMJPEG_Header[0x12C]=0x10;
mMJPEG_Header[0x12D]=0x2B;
mMJPEG_Header[0x12E]=0x00;
mMJPEG_Header[0x12F]=0x00;

mMJPEG_Header[0x14C]=0x10;
mMJPEG_Header[0x14D]=0x2B;
mMJPEG_Header[0x14E]=0x00;
mMJPEG_Header[0x14F]=0x00;

mMJPEG_Header[0x150]=0x10;
mMJPEG_Header[0x151]=0x2B;
mMJPEG_Header[0x152]=0x00;
mMJPEG_Header[0x153]=0x00;*/

mMJPEG_Header[0x3C]=0x00;
mMJPEG_Header[0x3D]=0x00;
mMJPEG_Header[0x3E]=0x10;
mMJPEG_Header[0x3F]=0x00;

mMJPEG_Header[0x90]=0x00;
mMJPEG_Header[0x91]=0x00;
mMJPEG_Header[0x92]=0x10;
mMJPEG_Header[0x93]=0x00;


fp1=fopen(sFileName,"wb+");
if(fp1==NULL)
{
printf("Target file open error!\r\n");
fcloseall();
return;
}
fp3=fopen("idx_tmp.bin","wb+");
if(fp3==NULL)
{
printf("Target file open error!\r\n");
fcloseall();
return;
}
fp4=fopen("10.pcm","rb+");
if(fp4==NULL)
{
printf("Source file open error!\r\n");
fcloseall();
return;
}

fwrite(mMJPEG_Header,1,sizeof(mMJPEG_Header),fp1);

//----------------
/*ch='L';
fwrite(&ch,1,1,fp3);
ch='I';
fwrite(&ch,1,1,fp3);
ch='S';
fwrite(&ch,1,1,fp3);
ch='T';
fwrite(&ch,1,1,fp3);
ch=0;
fwrite(&ch,1,1,fp3);
ch=0;
fwrite(&ch,1,1,fp3);
ch=0;
fwrite(&ch,1,1,fp3);
ch=0;
fwrite(&ch,1,1,fp3);
ch='m';
fwrite(&ch,1,1,fp3);
ch='o';
fwrite(&ch,1,1,fp3);
ch='v';
fwrite(&ch,1,1,fp3);
ch='i';
fwrite(&ch,1,1,fp3);*/
//-------------

ch='i';
fwrite(&ch,1,1,fp3);
ch='d';
fwrite(&ch,1,1,fp3);
ch='x';
fwrite(&ch,1,1,fp3);
ch='1';
fwrite(&ch,1,1,fp3);
mTemp=0;
fwrite(&mTemp,1,4,fp3);
mOffset=4;

for(i=0;i<10;i++)
{
switch(i)
{
case 0:
printf("0b.jpg ");
fp2=fopen("0b.jpg","rb+");
break;
case 1:
printf("1b.jpg ");
fclose(fp2);
fp2=fopen("1b.jpg","rb+");
break;
case 2:
printf("2b.jpg ");
fclose(fp2);
fp2=fopen("2b.jpg","rb+");
break;
case 3:
printf("3b.jpg ");
fclose(fp2);
fp2=fopen("3b.jpg","rb+");
break;
case 4:
printf("4b.jpg ");
fclose(fp2);
fp2=fopen("4b.jpg","rb");
break;
case 5:
printf("5b.jpg ");
fclose(fp2);
fp2=fopen("5b.jpg","rb+");
break;
case 6:
printf("6b.jpg ");
fclose(fp2);
fp2=fopen("6b.jpg","rb+");
break;
case 7:
printf("7b.jpg ");
fclose(fp2);
fp2=fopen("7b.jpg","rb+");
break;
case 8:
printf("8b.jpg ");
fclose(fp2);
fp2=fopen("8b.jpg","rb+");
break;
default:
printf("9b.jpg ");
fclose(fp2);
fp2=fopen("9b.jpg","rb+");
break;
}
if(fp2==NULL)
{
printf("Source file open error!\r\n");
fcloseall();
return;
}
//mSourceFileLength=(unsigned long)filelength(fp2);
fseek(fp2,0,SEEK_END);
mSourceFileLength=(unsigned long)ftell(fp2);


for(j=0;j{
//video
ch='0';
fwrite(&ch,1,1,fp3);
ch='0';
fwrite(&ch,1,1,fp3);
ch='d';
fwrite(&ch,1,1,fp3);
ch='c';
fwrite(&ch,1,1,fp3);
mTemp=0x00000010;
fwrite(&mTemp,1,4,fp3);
fwrite(&mOffset,1,4,fp3);
mSize=mSourceFileLength;
if(mSize&1)
{
//mSize++;
}
fwrite(&mSize,1,4,fp3);
mOffset+=(mSize+8);


ch='0';
fwrite(&ch,1,1,fp1);
ch='0';
fwrite(&ch,1,1,fp1);
ch='d';
fwrite(&ch,1,1,fp1);
ch='c';
fwrite(&ch,1,1,fp1);
mSize=mSourceFileLength;
if(mSize&1)
{
//mSize++;
}
fwrite(&mSize,1,4,fp1);
fseek(fp2,0,SEEK_SET);
for(k=0;k{
if((k&0xFF)==0)
{
printf(".");
}
fread(&ch,1,1,fp2);
fwrite(&ch,1,1,fp1);
}
if(mSourceFileLength&1)
{
ch=0;//double bytes align
//fwrite(&ch,1,1,fp1);
}

//audio
ch='0';
fwrite(&ch,1,1,fp3);
ch='1';
fwrite(&ch,1,1,fp3);
ch='w';
fwrite(&ch,1,1,fp3);
ch='b';
fwrite(&ch,1,1,fp3);
mTemp=0x00000010;
fwrite(&mTemp,1,4,fp3);
fwrite(&mOffset,1,4,fp3);
mSize=8000/mFrameRate;
if(mSize&1)
{
//mSize++;//double bytes align
}
fwrite(&mSize,1,4,fp3);
mOffset+=(mSize+8);

k=ftell(fp1);
ch='0';
fwrite(&ch,1,1,fp1);
ch='1';
fwrite(&ch,1,1,fp1);
ch='w';
fwrite(&ch,1,1,fp1);
ch='b';
fwrite(&ch,1,1,fp1);
mSize=8000/mFrameRate;
if(mSize&1)
{
//mSize++;//double bytes align
}
fwrite(&mSize,1,4,fp1);
ch=0;
for(k=0;k{
if((k&0xFF)==0)
{
printf(".");
}
//ch++;
fread(&ch,1,1,fp4);
fwrite(&ch,1,1,fp1);
}
}
}
mTargetFileLength=ftell(fp1);
if(mTargetFileLength&1)
{
ch=0;
fwrite(&ch,1,1,fp1);
}
mSize=ftell(fp3);
mSize-=8;
fseek(fp3,4,SEEK_SET);
fwrite(&mSize,1,4,fp3);

mTargetFileLength=ftell(fp1);
mTargetFileLength-=0x808;
fseek(fp1,0x0804,SEEK_SET);
fwrite(&mTargetFileLength,1,4,fp1);
//mTargetFileLength=ftell(fp1);
//mTargetFileLength-=(sizeof(mMJPEG_Header)+8);
//fseek(fp1,sizeof(mMJPEG_Header)+4,SEEK_SET);
//fwrite(&mTargetFileLength,1,4,fp1);

fseek(fp1,0,SEEK_END);
mSize+=8;
fseek(fp3,0,SEEK_SET);
for(i=0;i{
fread(&ch,1,1,fp3);
fwrite(&ch,1,1,fp1);
}

mTargetFileLength=ftell(fp1);
fseek(fp1,0x0004,SEEK_SET);
mTargetFileLength-=8;
fwrite(&mTargetFileLength,1,4,fp1);

printf("\r\n");
fcloseall();
}

void make_vga_mjpeg()
{
unsigned long mFrameRate,mFrameTime,i,j,k,mTemp;
unsigned long mTargetFileLength,mSourceFileLength;
unsigned long mOffset,mSize;
unsigned char sFileName[256],ch;
FILE *fp1,*fp2,*fp3,*fp4;

mFrameRate=0;
printf("\r\nBegin make VGA MJPG file\r\n");
while((mFrameRate<5)||(mframerate>30))
{
printf("Please input frame rate(5~30):");
scanf("%d",&mFrameRate);
}
printf("Please input target filename:");
scanf("%s",sFileName);

mFrameTime=1000000/mFrameRate;

mMJPEG_Header[0x20]=(unsigned char)mFrameTime&0xFF;
mMJPEG_Header[0x21]=(unsigned char)(mFrameTime>>8)&0xFF;
mMJPEG_Header[0x22]=(unsigned char)(mFrameTime>>16)&0xFF;
mMJPEG_Header[0x23]=(unsigned char)(mFrameTime>>24)&0xFF;

mMJPEG_Header[0x30]=(unsigned char)(mFrameRate*10)&0xFF;
mMJPEG_Header[0x31]=(unsigned char)((mFrameRate*10)>>8)&0xFF;
mMJPEG_Header[0x32]=(unsigned char)((mFrameRate*10)>>16)&0xFF;
mMJPEG_Header[0x33]=(unsigned char)((mFrameRate*10)>>24)&0xFF;

mMJPEG_Header[0x40]=0x80;
mMJPEG_Header[0x41]=0x02;
mMJPEG_Header[0x42]=0x00;
mMJPEG_Header[0x43]=0x00;

mMJPEG_Header[0x44]=0xE0;
mMJPEG_Header[0x45]=0x01;
mMJPEG_Header[0x46]=0x00;
mMJPEG_Header[0x47]=0x00;

mMJPEG_Header[0x80]=(unsigned char)mFrameTime&0xFF;
mMJPEG_Header[0x81]=(unsigned char)(mFrameTime>>8)&0xFF;
mMJPEG_Header[0x82]=(unsigned char)(mFrameTime>>16)&0xFF;
mMJPEG_Header[0x83]=(unsigned char)(mFrameTime>>24)&0xFF;

//mMJPEG_Header[0x84]=(unsigned char)mFrameRate&0xFF;
//mMJPEG_Header[0x85]=(unsigned char)(mFrameRate>>8)&0xFF;
//mMJPEG_Header[0x86]=(unsigned char)(mFrameRate>>16)&0xFF;
//mMJPEG_Header[0x87]=(unsigned char)(mFrameRate>>24)&0xFF;

mMJPEG_Header[0x8C]=(unsigned char)(mFrameRate*10)&0xFF;
mMJPEG_Header[0x8D]=(unsigned char)((mFrameRate*10)>>8)&0xFF;
mMJPEG_Header[0x8E]=(unsigned char)((mFrameRate*10)>>16)&0xFF;
mMJPEG_Header[0x8F]=(unsigned char)((mFrameRate*10)>>24)&0xFF;

mMJPEG_Header[0xA0]=0x80;
mMJPEG_Header[0xA1]=0x02;
mMJPEG_Header[0xA2]=0xE0;
mMJPEG_Header[0xA3]=0x01;

mMJPEG_Header[0xB0]=0x80;
mMJPEG_Header[0xB1]=0x02;
mMJPEG_Header[0xB2]=0x00;
mMJPEG_Header[0xB3]=0x00;

mMJPEG_Header[0xB4]=0xE0;
mMJPEG_Header[0xB5]=0x01;
mMJPEG_Header[0xB6]=0x00;
mMJPEG_Header[0xB7]=0x00;

//mMJPEG_Header[0xBA]=0x18;//must set as 24
//mMJPEG_Header[0xBB]=0x00;

mMJPEG_Header[0xC0]=0x00;
mMJPEG_Header[0xC1]=0x60;
mMJPEG_Header[0xC2]=0x09;
mMJPEG_Header[0xC3]=0x00;

mMJPEG_Header[0x120-0x20]=0x40;
mMJPEG_Header[0x121-0x20]=0x1F;
mMJPEG_Header[0x122-0x20]=0x00;
mMJPEG_Header[0x123-0x20]=0x00;

mMJPEG_Header[0x128-0x20]=(unsigned char)(8000*10)&0xFF;
mMJPEG_Header[0x129-0x20]=(unsigned char)((8000*10)>>8)&0xFF;
mMJPEG_Header[0x12A-0x20]=(unsigned char)((8000*10)>>16)&0xFF;
mMJPEG_Header[0x12B-0x20]=(unsigned char)((8000*10)>>24)&0xFF;

mMJPEG_Header[0x12C-0x20]=0x40;
mMJPEG_Header[0x12D-0x20]=0x1F;
mMJPEG_Header[0x12E-0x20]=0x00;
mMJPEG_Header[0x12F-0x20]=0x00;

mMJPEG_Header[0x14C-0x20]=0x40;
mMJPEG_Header[0x14D-0x20]=0x1F;
mMJPEG_Header[0x14E-0x20]=0x00;
mMJPEG_Header[0x14F-0x20]=0x00;

mMJPEG_Header[0x150-0x20]=0x40;
mMJPEG_Header[0x151-0x20]=0x1F;
mMJPEG_Header[0x152-0x20]=0x00;
mMJPEG_Header[0x153-0x20]=0x00;

/*mMJPEG_Header[0x120]=0x10;
mMJPEG_Header[0x121]=0x2B;
mMJPEG_Header[0x122]=0x00;
mMJPEG_Header[0x123]=0x00;

mMJPEG_Header[0x128]=(unsigned char)(8000*10)&0xFF;
mMJPEG_Header[0x129]=(unsigned char)((8000*10)>>8)&0xFF;
mMJPEG_Header[0x12A]=(unsigned char)((8000*10)>>16)&0xFF;
mMJPEG_Header[0x12B]=(unsigned char)((8000*10)>>24)&0xFF;

mMJPEG_Header[0x12C]=0x10;
mMJPEG_Header[0x12D]=0x2B;
mMJPEG_Header[0x12E]=0x00;
mMJPEG_Header[0x12F]=0x00;

mMJPEG_Header[0x14C]=0x10;
mMJPEG_Header[0x14D]=0x2B;
mMJPEG_Header[0x14E]=0x00;
mMJPEG_Header[0x14F]=0x00;

mMJPEG_Header[0x150]=0x10;
mMJPEG_Header[0x151]=0x2B;
mMJPEG_Header[0x152]=0x00;
mMJPEG_Header[0x153]=0x00;*/

mMJPEG_Header[0x3C]=0x00;
mMJPEG_Header[0x3D]=0x00;
mMJPEG_Header[0x3E]=0x10;
mMJPEG_Header[0x3F]=0x00;

mMJPEG_Header[0x90]=0x00;
mMJPEG_Header[0x91]=0x00;
mMJPEG_Header[0x92]=0x10;
mMJPEG_Header[0x93]=0x00;

fp1=fopen(sFileName,"wb+");
if(fp1==NULL)
{
printf("Target file open error!\r\n");
fcloseall();
return;
}
fp3=fopen("idx_tmp.bin","wb+");
if(fp3==NULL)
{
printf("Target file open error!\r\n");
fcloseall();
return;
}
fp4=fopen("10.pcm","rb+");
if(fp4==NULL)
{
printf("Source file open error!\r\n");
fcloseall();
return;
}

fwrite(mMJPEG_Header,1,sizeof(mMJPEG_Header),fp1);


//----------------
/*ch='L';
fwrite(&ch,1,1,fp3);
ch='I';
fwrite(&ch,1,1,fp3);
ch='S';
fwrite(&ch,1,1,fp3);
ch='T';
fwrite(&ch,1,1,fp3);
ch=0;
fwrite(&ch,1,1,fp3);
ch=0;
fwrite(&ch,1,1,fp3);
ch=0;
fwrite(&ch,1,1,fp3);
ch=0;
fwrite(&ch,1,1,fp3);
ch='m';
fwrite(&ch,1,1,fp3);
ch='o';
fwrite(&ch,1,1,fp3);
ch='v';
fwrite(&ch,1,1,fp3);
ch='i';
fwrite(&ch,1,1,fp3);*/
//-------------

ch='i';
fwrite(&ch,1,1,fp3);
ch='d';
fwrite(&ch,1,1,fp3);
ch='x';
fwrite(&ch,1,1,fp3);
ch='1';
fwrite(&ch,1,1,fp3);
mTemp=0;
fwrite(&mTemp,1,4,fp3);
mOffset=4;

for(i=0;i<10;i++)
{
switch(i)
{
case 0:
printf("0a.jpg ");
fp2=fopen("0a.jpg","rb+");
break;
case 1:
printf("1a.jpg ");
fclose(fp2);
fp2=fopen("1a.jpg","rb+");
break;
case 2:
printf("2a.jpg ");
fclose(fp2);
fp2=fopen("2a.jpg","rb+");
break;
case 3:
printf("3a.jpg ");
fclose(fp2);
fp2=fopen("3a.jpg","rb+");
break;
case 4:
printf("4a.jpg ");
fclose(fp2);
fp2=fopen("4a.jpg","rb");
break;
case 5:
printf("5a.jpg ");
fclose(fp2);
fp2=fopen("5a.jpg","rb+");
break;
case 6:
printf("6a.jpg ");
fclose(fp2);
fp2=fopen("6a.jpg","rb+");
break;
case 7:
printf("7a.jpg ");
fclose(fp2);
fp2=fopen("7a.jpg","rb+");
break;
case 8:
printf("8a.jpg ");
fclose(fp2);
fp2=fopen("8a.jpg","rb+");
break;
default:
printf("9a.jpg ");
fclose(fp2);
fp2=fopen("9a.jpg","rb+");
break;
}
if(fp2==NULL)
{
printf("Source file open error!\r\n");
fcloseall();
return;
}
//mSourceFileLength=(unsigned long)filelength(fp2);
fseek(fp2,0,SEEK_END);
mSourceFileLength=(unsigned long)ftell(fp2);


for(j=0;j{
//video
ch='0';
fwrite(&ch,1,1,fp3);
ch='0';
fwrite(&ch,1,1,fp3);
ch='d';
fwrite(&ch,1,1,fp3);
ch='c';
fwrite(&ch,1,1,fp3);
mTemp=0x00000010;
fwrite(&mTemp,1,4,fp3);
fwrite(&mOffset,1,4,fp3);
mSize=mSourceFileLength;
if(mSize&1)
{
//mSize++;
}
fwrite(&mSize,1,4,fp3);
mOffset+=(mSize+8);


ch='0';
fwrite(&ch,1,1,fp1);
ch='0';
fwrite(&ch,1,1,fp1);
ch='d';
fwrite(&ch,1,1,fp1);
ch='c';
fwrite(&ch,1,1,fp1);
mSize=mSourceFileLength;
if(mSize&1)
{
//mSize++;
}
fwrite(&mSize,1,4,fp1);
fseek(fp2,0,SEEK_SET);
for(k=0;k{
if((k&0xFF)==0)
{
printf(".");
}
fread(&ch,1,1,fp2);
fwrite(&ch,1,1,fp1);
}
if(mSourceFileLength&1)
{
ch=0;//double bytes align
//fwrite(&ch,1,1,fp1);
}

//audio
ch='0';
fwrite(&ch,1,1,fp3);
ch='1';
fwrite(&ch,1,1,fp3);
ch='w';
fwrite(&ch,1,1,fp3);
ch='b';
fwrite(&ch,1,1,fp3);
mTemp=0x00000010;
fwrite(&mTemp,1,4,fp3);
fwrite(&mOffset,1,4,fp3);
mSize=8000/mFrameRate;
if(mSize&1)
{
//mSize++;//double bytes align
}
fwrite(&mSize,1,4,fp3);
mOffset+=(mSize+8);

k=ftell(fp1);
ch='0';
fwrite(&ch,1,1,fp1);
ch='1';
fwrite(&ch,1,1,fp1);
ch='w';
fwrite(&ch,1,1,fp1);
ch='b';
fwrite(&ch,1,1,fp1);
mSize=8000/mFrameRate;
if(mSize&1)
{
//mSize++;//double bytes align
}
fwrite(&mSize,1,4,fp1);
ch=0;
for(k=0;k{
if((k&0xFF)==0)
{
printf(".");
}
//ch++;
fread(&ch,1,1,fp4);
fwrite(&ch,1,1,fp1);
}
}
}
mTargetFileLength=ftell(fp1);
if(mTargetFileLength&1)
{
ch=0;
fwrite(&ch,1,1,fp1);
}
mSize=ftell(fp3);
mSize-=8;
fseek(fp3,4,SEEK_SET);
fwrite(&mSize,1,4,fp3);


mTargetFileLength=ftell(fp1);
mTargetFileLength-=0x808;
fseek(fp1,0x0804,SEEK_SET);
fwrite(&mTargetFileLength,1,4,fp1);
//mTargetFileLength=ftell(fp1);
//mTargetFileLength-=(sizeof(mMJPEG_Header)+8);
//fseek(fp1,sizeof(mMJPEG_Header)+4,SEEK_SET);
//fwrite(&mTargetFileLength,1,4,fp1);

fseek(fp1,0,SEEK_END);
mSize+=8;
fseek(fp3,0,SEEK_SET);
for(i=0;i{
fread(&ch,1,1,fp3);
fwrite(&ch,1,1,fp1);
}

mTargetFileLength=ftell(fp1);
fseek(fp1,0x0004,SEEK_SET);
mTargetFileLength-=8;
fwrite(&mTargetFileLength,1,4,fp1);

printf("\r\n");
fcloseall();
}

main()
{
char ch;
do
{
printf("\r\nSelect image size(1 QVGA, 2 VGA):");
//scanf("%c",&ch);
ch=getch();
printf("%c",ch);
}while((ch!='1')&&(ch!='2'));

if(ch=='1')
{
make_qvga_mjpeg();
}
else
{
make_vga_mjpeg();
}
printf("\r\nPress any key to Exit");
getch();

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • AVI文件
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    6609
  • MJPG
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    7407
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    win10環(huán)境下使用vivado生成.bit與.mcs文件

    在hbirdv2參考文檔中使用make指令生成system.bit和system.mcs文件,但是虛擬機(jī)本身會(huì)消耗計(jì)算資源,導(dǎo)致運(yùn)行速度變慢,對(duì)于不習(xí)慣在linux下編輯代碼的人,還需要來(lái)回倒騰代碼
    發(fā)表于 10-27 08:25

    使用env生成的keil文件好多文件找不到路徑,為什么?

    使用env生成文件,使用了 scons —target=mdk5 —dist命令生成文件 但是用mdk打開(kāi)后全是報(bào)錯(cuò) 請(qǐng)問(wèn)大佬有遇到這種情況嗎
    發(fā)表于 09-23 06:41

    N9H2x如何將視頻轉(zhuǎn)換為 AVI 文件?

    N9H2x如何將視頻轉(zhuǎn)換為 AVI 文件
    發(fā)表于 09-01 08:05

    技術(shù)貼|【RK3588】ELF 2開(kāi)發(fā)板如何添加exFAT和NTFS文件系統(tǒng)格式

    基于RK3588設(shè)計(jì)的ELF2開(kāi)發(fā)板在搭載Desktop22.04系統(tǒng)時(shí),對(duì)TF卡的文件系統(tǒng)支持存在以下限制:不支持exFAT格式;支持NTFS格式,但需手動(dòng)掛載;針對(duì)上述兼容性問(wèn)題,本文將介紹
    的頭像 發(fā)表于 08-27 17:21 ?3213次閱讀
    技術(shù)貼|【RK3588】ELF 2開(kāi)發(fā)板如何添加exFAT和NTFS<b class='flag-5'>文件</b>系統(tǒng)<b class='flag-5'>格式</b>

    一文讀懂WAV音頻文件格式

    本文主要為后面ESP32 I2S音頻系列文章做鋪墊,所以本篇將介紹WAV音頻文件格式,并通過(guò)C代碼生成一段1S的正弦波WAV音頻寫(xiě)入到SD卡里面。
    的頭像 發(fā)表于 08-25 17:49 ?3860次閱讀
    一文讀懂WAV音頻<b class='flag-5'>文件格式</b>

    淺談電子工程師困惑多年的EDA行業(yè)的標(biāo)準(zhǔn)格式

    話說(shuō)每個(gè)行業(yè)有每個(gè)行業(yè)的標(biāo)準(zhǔn),工業(yè)軟件領(lǐng)域文件格式也有達(dá)成一定程度默契,比如不同CAD軟件有自己獨(dú)特的格式,為了各自的用途,有的可以滿足不同的曲面,特殊圖形的處理,有的是為了輕量化需求。工具之間交換
    的頭像 發(fā)表于 08-23 12:34 ?489次閱讀
    淺談電子工程師困惑多年的EDA行業(yè)的標(biāo)準(zhǔn)<b class='flag-5'>格式</b>

    AICube生成部署文件失敗的原因?怎么解決?

    我按照網(wǎng)上的方法安裝了dotnet,和AICube,并且我是安裝在非中文路徑,但是嘗試了一天了,都不能成功的生成部署文件,我使用軟件自帶的樣例,但是就是不能生成部署文件 期待結(jié)果和實(shí)際
    發(fā)表于 08-05 06:26

    求助,關(guān)于STM32Cubemx 6.15版本生成工程的文件編碼的問(wèn)題求解

    之前升級(jí)6.13和6.14版本的時(shí)候重新生成工程會(huì)將文件編碼強(qiáng)制轉(zhuǎn)換成UTF-8格式,導(dǎo)致中文注釋亂碼。但是在安裝文件夾下面的STM32CubeMX.l4j.ini
    發(fā)表于 07-29 12:31

    服務(wù)器數(shù)據(jù)恢復(fù)—ocfs2文件系統(tǒng)被格式化為Ext4文件系統(tǒng)的數(shù)據(jù)恢復(fù)案例

    服務(wù)器存儲(chǔ)數(shù)據(jù)恢復(fù)環(huán)境&故障: 人為誤操作將Ext4文件系統(tǒng)誤裝入一臺(tái)服務(wù)器存儲(chǔ)上的Ocfs2文件系統(tǒng)數(shù)據(jù)卷上,導(dǎo)致原Ocfs2文件系統(tǒng)被格式化為Ext4
    的頭像 發(fā)表于 06-10 12:03 ?563次閱讀
    服務(wù)器數(shù)據(jù)恢復(fù)—ocfs2<b class='flag-5'>文件</b>系統(tǒng)被<b class='flag-5'>格式</b>化為Ext4<b class='flag-5'>文件</b>系統(tǒng)的數(shù)據(jù)恢復(fù)案例

    STM32CubeMX生成代碼就會(huì)覆蓋CMakeLists.txt文件,怎么解決?

    請(qǐng)教一下用STM32CubeMX生成代碼后,我自己加了一個(gè)頭文件和源文件,這些自己加的文件不是要
    發(fā)表于 03-12 08:03

    STM32CubeMX生成的FreeRTOS源碼格式如何優(yōu)化?

    如圖,STM32CubeMX生成的FreeRTOS源碼格式有待優(yōu)化,空格都是以箭頭的方式呈現(xiàn),觀感很差。FreeRTOS官方下載的源碼則不存在這個(gè)問(wèn)題,說(shuō)明是STM32CubeMX生成源碼的過(guò)程出現(xiàn)的
    發(fā)表于 03-10 08:04

    CHK文件恢復(fù)專家輔助程序

    CHK文件恢復(fù)專家u盤(pán)文件格式的輔助程序?
    發(fā)表于 03-06 17:21 ?0次下載

    請(qǐng)問(wèn)DLP5530PGUQ1EVM所輸出的bin格式文件如何生成?

    bin格式文件。請(qǐng)問(wèn)這里可以通過(guò)程序?qū)氲腷in格式文件如何生成?有特殊的格式要求嗎?直接將圖片轉(zhuǎn)換的bin
    發(fā)表于 02-25 06:36

    《DNESP32S3使用指南-IDF版_V1.6》第四十三章 視頻播放器實(shí)驗(yàn)

    微軟開(kāi)發(fā)的一種符合RIFF文件規(guī)范的數(shù)字音頻與視頻文件格式,原先用于Microsoft Video for Windows (簡(jiǎn)稱VFW)環(huán)境,現(xiàn)在已被多數(shù)操作系統(tǒng)直接支持。AVI格式
    發(fā)表于 01-16 09:24

    EE-110:ELF和DWARF文件格式快速入門(mén)

    電子發(fā)燒友網(wǎng)站提供《EE-110:ELF和DWARF文件格式快速入門(mén).pdf》資料免費(fèi)下載
    發(fā)表于 01-05 09:41 ?0次下載
    EE-110:ELF和DWARF<b class='flag-5'>文件格式</b>快速入門(mén)