如题
离线
带SYNC LCD控制器,
8080 MPU LCD 控制器得看下手册,应该也带了。
晕哥,裸机怎么把硬解后的JPEG图片现在在LCD屏上啊?能知道指导下吗?不是很熟悉这个NUC972。以前的,是用LCD的驱动。这个是自带驱动的。所以不熟悉
离线
Non-OS BSP\NUC970 Non-OS BSP v1.00.000\BSP\Non-OS BSP\SampleCode\JPEG
u8Item = sysGetChar(); switch(u8Item) { case '0': g_u32DecFormat = JPEG_DEC_PRIMARY_PACKET_YUV422; break; case '1': g_u32DecFormat = JPEG_DEC_PRIMARY_PACKET_RGB555; break; case '2': g_u32DecFormat = JPEG_DEC_PRIMARY_PACKET_RGB565; break; case '3': g_u32DecFormat = JPEG_DEC_PRIMARY_PACKET_RGB888; break; case '4': g_u32DecFormat = JPEG_DEC_PRIMARY_PACKET_RGB555R1; break; case '5': g_u32DecFormat = JPEG_DEC_PRIMARY_PACKET_RGB565R1; break; case '6': g_u32DecFormat = JPEG_DEC_PRIMARY_PACKET_RGB555R2; break; case '7': g_u32DecFormat = JPEG_DEC_PRIMARY_PACKET_RGB565R2; break; case '8': if(g_bDecPanelTest) sysprintf("\n<Not support Planar format Panel Test>\n"); else g_u32DecFormat = JPEG_DEC_PRIMARY_PLANAR_YUV; break; default: sysprintf("Write Item\n"); break; } break; case '4':
这个demo可以直接把jpeg解码到 内存或者显存.
主要是不知道怎么显示
离线
JPEG解码成565成功后,直接用memcpy(u8FrameBufPtr,g_pu8DecFrameBuffer,480*272*2);?就可以显示?不科学啊..
离线
如果 u8FrameBufPtr 是帧缓冲区, 这个能显示没毛病。
是这个吗?u8FrameBufPtr =vpostGetFrameBuffer();?叠加层只显示在叠加层的吧?
离线
离线
搞定了?
没,现在是,屏幕是有显示,但是只在800*200.这里一次性显示5张图片。连续的
离线
我感觉是在解码成565的时候,没有DMF对齐4个字节,但是不知道怎么去改
离线
大概是这样,字体花屏那一块,真的是花屏
离线
貌似你宽度和图片(解码)的宽度不匹配造成的.
晕哥,这个怎么说?我是直接拿官方例子,然后拿一张图片解码。 解码的程序我没做改动。如果是这个问题的,该怎么改呢?
离线
你的图片是 800 宽度?
不是,高800 宽480
离线
那自己编辑一个 800 x 480 的 jpeg 图片文件再试一试。
自己编辑?是指自己解码,还是做一个图片? 喔,对。我上传的图片,显示图的地方,是5张图片连一起的,不是一张图片
离线
那显示一张图片对吗?
晕哥,我没表达好,我想显示一张图片,正确显示是,LCD应该显示800*480的图片。但是现在LCD是显示了5张相同的图片。而且显示的位置是连续的,本来图片是800*480,现在看来是图片却显示成了100*20
离线
酱紫吧,你在最顶上画一条红色线试一试。
然后接着画绿色,蓝色线,判断帧缓冲区有没有问题,如果没有问题再来解决解码问题。
晕哥,不好意思啊,昨天停电,我现在加了这一段
uint32 CursorTbl[] = {0x00,0x55555555,0xaaaaaaaa,0xffffffff};
for (i=0; i<16; i++) {
for(j = 0; j < 32; j++) {
u32CursorBuf[i+16*j] = CursorTbl[j&3];//µÈͬ j%4
}
}
// Start hardware cursor
vpostHCInit(u32CursorBuf, HC_MODE0);
// Set hardware cursor position
vpostHCPosCtrl(50, 50);
屏幕显示 一个小正方形,里面填充的颜色是红绿蓝黄,正常运行
离线
叠加层也没问题
离线
那看起来帧缓冲区没有问题,那把 jpeg 解码器解出来的 RGB/YUV 存成文件,
用电脑软件打开看看,是不是解码不正确?
弱弱问一句,保存的文件,是以什么格式啊? .dat? .c? .bmp?
离线
我先确认下 我保存的代码有没错先。
VOID JpegDecTest (char *jpgFeil)
{
/*
解码部分函数,
*/
//解码完成
/*-文件保存代码-*/
strcpy(path, "dec_test.dat");
fr = f_open(&fil, path, FA_OPEN_ALWAYS | FA_WRITE | FA_READ);
if(fr != FR_OK)
{
return;
}
nStatus = f_write(&fil, (UINT8 *)((UINT32)g_pu8DecFrameBuffer | 0x80000000), len, &nWriteLen);
if(nStatus != FR_OK)
{
return;
}
f_close(&fil);
}
我的保存代码大概是这样 我待会上传.dat文件
保存的文件是0个字节。
纳闷
最近编辑记录 19697805 (2018-06-27 11:16:58)
离线
我用官方的解码出来的,保存的文件.dat,就不是0字节
离线
不知道,我用官方的解码出来的显示,也是相同的现象
离线
这个是解压,保存的 麻烦大佬们看看。谢谢
离线
jpg文件是什么分辨率,我下午帮你看看
JPG是800*480的~谢谢大佬
离线
我也是觉得解码有问题,但是这个文件是用官方例程解码,保存的
离线
有没有可能是速度的问题,刷屏的屏幕太快。导致的,但是自己又是英瞎
离线
那跟时钟有关系吗?
离线
结束贴。我找到问题了,问题出于LCD参数配置,我用5寸屏幕800*480,像素高宽设置800*480,我把这里改成480*272,就没这个情况了
离线
尴尬,我LCD参数
static VPOST_T DEF_E50A2V1 = { 480, 272, 0, 0,VPOSTB_DATA16or18, 0, VPOSTB_COLORTYPE_16M,VPOSTB_DEVICE_SYNC_HIGHCOLOR,0x020d03a0, 0x01e00320, 0x03250321,0x03780348,0x01f001ed,};
这是我现在LCD参数配置,不知道其他484会有影响分辨率,但我觉得不科学啊,这个可能。
晕哥大佬,我们来探究探究,行吗?
离线
喔,还有那个图片缩放,官方好像没例子~给的参考,不大,晕哥有用过吗?请教请教
离线
尴尬,我LCD参数
static VPOST_T DEF_E50A2V1 = { 480, 272, 0, 0,VPOSTB_DATA16or18, 0, VPOSTB_COLORTYPE_16M,VPOSTB_DEVICE_SYNC_HIGHCOLOR,0x020d03a0, 0x01e00320, 0x03250321,0x03780348,0x01f001ed,};
这是我现在LCD参数配置,不知道其他484会有影响分辨率,但我觉得不科学啊,这个可能。
晕哥大佬,我们来探究探究,行吗?
这个问题解决了,5寸屏好像是有高分和低分的两种,我用的是低分所以设置480*272 高分的就是800*480
离线
5寸的只见过800*480的,至于你说的480*272应该是4.3寸的。
我也不知道,我看我的LCD手册是800*480。
离线