注:本文是作者以前发表在其个人博客,现在发布到“聚丰开发”专栏
现在电子产品经常需要使用到视频,于是对视频技术的需求也日益高涨,通常做法是采用现成的硬件或软件方案来实现对视频数据的处理,要说掌握这部分算法的人并不多,大多数工程师没有时间和精力去消化吸收这些算法。
mjpg是最简单的视频文件格式,存储时是将图像用jpg格式一帧一帧的保存起来,回放的时候按照规定的时间间隔一帧一帧的回放。用这种处理方法算法相对比较简单,如果对图像要求不高可以达到20~30倍的压缩率,对于单片机来说不失为一种可行性较高的备选方案。
以前有个项目需要支持mjpg文件,为此我写了一段pc程序进行代码验证,同时生成测试用mjpg文件。具体做法是预先做好10张jpg图片,每张图片都有vga和qvga两种尺寸,然后按输入参数生成相应的mjpg文件。比如输入选择vga/10帧,生成的mjpg文件第一秒为第一张vga图片重复10次,依此类推。
程序生成的mjpg用电脑播放,如果能正常播放,就说明代码对文件格式的处理基本正确。这里程序每一帧都对应有自己的jpg数据,实际上可以不这么做,mjpg文件有音频和视频流的播放序号,如果相邻的视频帧内容相同,是可以将播放序号指向同一张jpg图像数据的。
每一帧自己有独立的jpg图像数据
播放序号: jpg01 jpg02 jpg03 ... jpg09 jpg10 jpg11
jpg01_data:
...(第一张图片内容)...
jpg02_data:
...(第一张图片内容)...
...
jpg09_data:
...(第一张图片内容)...
jpg10_data:
...(第一张图片内容)...
jpg11_data:
...(第二张图片内容)...
相邻帧相同利用同一张jpg数据
播放序号: jpg01 jpg01 jpg01 ... jpg01 jpg01 jpg02
jpg01_data:
...(第一张图片内容)...
jpg02_data:
...(第二张图片内容)...
...
jpg10_data:
...(第十张图片内容)...
注意代码只是用于临时工具,没有详细注释进行说明,代码书写也存在许多不规范的地方。
-------------------------参考代码---------------------------
#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 frame(=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 identifierstrl
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 pixel(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((mframerate30))
{
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]=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>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();
}
新能源汽车电驱系统MCU软件开发工具包-DriveSoft
5G开发者告诉你,5G是如何影响生活和AI的?
数据可信确保物联网创新商业模式加速落地
小米Google宣布合作 Android TV版小米盒子进军美国
无线中继器是什么_无线中继器有什么作用
自己生成MJPG格式AVI文件
互联网未来三年将被云存储技术颠覆
联想推出主打极致轻薄的YOGA S系列
马斯克爱动漫、比尔盖茨爱刷碗、彼得蒂尔痴迷“长生不老”,盘点硅谷大佬们的“特殊癖好”
苹果动作太快!昨日更新的MacBook/MacBook Pro国行正式上市
!销售/维修HP6632B电源HP6632B 小兵/李S
百度地图宣布上线语音定制功能,可定制属于自己的个性化的语音包
兴元科技签约百家千县 携手探索元宇宙乡村振兴新未来
AI芯片的几种选择,你更看好哪个?
锤子M1L从2799元降至1799元,这款旗舰机已降至最低价
怎样才能避免买到劣质的光纤跳线
机器人创业之路并不是那么简单好产品仅是开始市场落地才是关键
多核SoC的系统结构设计
Realme确认即将推出的Realme 6系列将进行30w有线充电
鲲云科技联手戴尔集团 在AI计算加速方面开展深入合作