硬件:战舰的板子,TCP模块
目的:stm32接收TCP的jpg文件数据,存到缓存,然后解码显示
参考:光盘中 实验42-图片显示实验 的程序,用图片解码库 tjpgd 解码
目前传输图片无误,问题出在解码上,移植tjpgd主要是提供infunc和outfunc函数,即输入数据和输出显示。
光盘中实验程序中的infunc函数的实现是:(tjgpd.c 1033行)
[mw_shl_code=c,true]u32 jpeg_in_func(JDEC* jd,u8* buf,u32 num)
{
u32 rb;
FIL *dev=(FIL*)jd->device;
if(buf)
{
f_read(dev,buf,num,&rb);
return rb;
}else return (f_lseek(dev,f_tell(dev)+num)==FR_OK)?num:0;
} (注释复制成乱码,删掉了)[/mw_shl_code]
其中用了文件读的方式,读到buf里面。我希望改成直接读ram里现成的,于是改成:
[mw_shl_code=c,true]u32 jpeg_in_func(JDEC* jd,u8* buf,u32 num)
{
static u32 offset=0;
if(buf){
// buf=Rx_Buffer+offset;
memcpy(buf,Rx_Buffer+offset,num);
offset+=num;
}
// else
//{
// offset=0;
//}
return num;
}
其中Rx_Buffer是ram中的jpg数据;我看了,和传输的文件内容一致。
但是经jd_prepare函数调用后buf中的数据总是不正确,不知这段程序怎么写,请大家看看问题在哪。
另:jd_prepare函数中定义了BYTE *seg,调用上面函数时作为u8* buf的实参传递进去,我跟踪了一下,有时候在jpeg_in_func函数中buf被赋值了,可返回时seg还是原来的值没变,不知何故。
不知哪位兄弟做过在RAM中直接解码的,希望指教一下![/mw_shl_code]
|