一直想用6410的jpg解码器替换wince的解码器,这几天终于有时间,弄了一下。过程不是太复杂,大致如下:
1.从wince自带的decoder例子开始,主要是修改renderImage部分。
2.注册表的配置,因为wince的例子没有注册表配置,所以这部分花了不少时间。
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftimagingcodecs]
'_LastCookie'=dword:00000001
[HKEY_LOCAL_MACHINESoftwareMicrosoftImagingCodecss3c6410 jpeg Decoder]
'MIME Type'='image/jpeg'
'Filename Extension'='*.jpg'
'File Type Description'='JPEG file'
'DLLNAME'='imgcodec'
'Signature Mask'=hex:
ff,ff ;SigMask
'Signature Pattern'=hex:
ff,d8 ;SigPattern
'Signature Size'=dword:2
'Signature Count'=dword:1
'Format ID'= hex:
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
; AE,3C,6B,B9,28,07,D3,11,9D,7B,00,00,F8,1E,F3,2E
;'{b96b3cae-0728-11d3-9d7b-0000f81ef32e}' ;ImageFormatJPEG
'CLSID'= hex:
FA,80,A2,80,A3,C2,0c,4E,98,BF,67,32,9B,22,FD,BF
;'{80A280FA-C2A3-4e0c-98BF-67329B22FDBF}' ;CLSID_JPEGDecoder
'Flags'=dword:00020022
'Version'=dword:1
'_InfoSize'=dword:d0
微软的文档上没有提到_LastCookie,一开始没设置_LastCookie,结果总是用系统的解码器。
3.在测试时发再现,解了几十幅图后,就出错了。经过一下午的郁闷,终于找到原因:
在jpeg驱动中,VirtualAllocCopyEx与VirtualFreeEx的用法出现问题。
开始是VirtualFreeEx(JPGRegCtx->callerProcess, // HANDLE hProcess
JPGRegCtx->strUserBuf,
JPG_STREAM_BUF_SIZE,
MEM_DECOMMIT);
好象并没有真正释放虚拟内存,最后导制VirtualAllocCopyEx出错.
改成VirtualFreeEx(JPGRegCtx->callerProcess, // HANDLE hProcess
(UINT32)JPGRegCtx->strUserBuf& ~VM_BLOCK_OFST_MASK,
0,
MEM_RELEASE);
后问题解决了。
上一篇:linux-2.6.38到tiny6410的移植手册(连载4)__USB设备(U盘,摄像头,wifi)
下一篇:c, cs, vala 性能简单测试
推荐阅读最新更新时间:2024-11-09 23:47
设计资源 培训 开发板 精华推荐
- Sg1527A稳压脉宽调制器典型应用电路
- 51单片机射频RFID卡
- 使用 Richtek Technology Corporation 的 RT8110D 的参考设计
- 用于延迟启动电路的 NCV2574 降压型开关稳压器的典型应用
- LT6656AIS6-1.25、1.25V 精密电流和升压电压基准的典型应用
- 适用面包板的最小系统板【STC8A8K】
- OP484FPZ 2.5V 参考在单 3V 电源上运行的典型应用
- EVAL-ADE7878EB,用于评估 ADE7878 电能计量 IC 的评估板
- 使用 ON Semiconductor 的 LA4533M 的参考设计
- 35W、12V DC 至 DC 单路输出电源