dm365的LCD显示

原文地址:dm365的LCD显示 作者:mick

对DM365的decode做了修改,想让他原来的从小电视输出,改成用LCD输出。

在DM365上面接了一个LCD屏幕。屏幕是800*480,被设置成720*480大小。

从decode出来的数据,应该是YUV420PSEMI的,而就目前我知道的,LCD输出时UYVY的422格式。

声明一下,目前没太多文档读,有些地方可能不对,希望谁发现了,就回帖告诉我一声,不胜感激。

 

decode是用fifo活的的一帧的数据,在一个Buffer_Handle中。声明了两个hSrcBuf, hDstBuf,分别是源和目的。

下面是两行打印信息,关于这两个Buffer_Handle的。

************hSrc below:
[15] @ 0x4378a000 (0x86ee2000 phys) numBytes 718848 (718848) useMask 2 (3) ref no
        Width 720 (720) Height 480 (576) Pos 24x24 LineLength 768 (720)
************hDst below:
[0] @ 0x40c00000 (0x80a00000 phys) numBytes 691200 (691200) useMask 0 (1) ref yes
        Width 720 (720) Height 480 (480) Pos 0x0 LineLength 1440 (1440)

这两个视频帧的物理空间上的值在括号里面,是虚拟出来的空间的值在括号前面。可以看到,源的linelength是768,所以拷贝的时候,后面会有一些无用的数据。

 

没有用decode自带的那个framecopy什么的,因为我用那个图像只能被扁着显示在左边的一半地方……

然后我调用了ccv里面的420到422的转化,然后手动修改了dmai里面的转化代码,目前得到了黑白的数据,也就是y值。但是u,v的值还没搞好,现在是黑白图像,不过能够全屏720*480显示了。

for(i = 0; i < srcDim.height; i++) {
   for(j=0; j < srcDim.width/4; j++) {   
    *dst++ = *src_u;
    *dst++ = *src++;
    *dst++ = *src_v;
    *dst++ = *src++;    
    
    *dst++ = *src_u;
    *dst++ = *src++;
    *dst++ = *src_v;
    *dst++ = *src++;
    src_u += 2;
    src_v += 2;
   }
   dst = dst + (dstDim.lineLength - srcDim.width*2);
   src = src + (srcDim.lineLength - srcDim.width);
   src_u = src_u + (srcDim.lineLength - srcDim.width);
   src_v = src_v + (srcDim.lineLength - srcDim.width);
        }

这是我幻想的,算上u跟v的转化,可是u跟v的效果不行,颜色没加上……继续努力中

 

不过,看dmai的代码,好像dm365不支持硬件ccv转化,用这种软的,相当浪费arm资源,打印的arm显示,已经占用超过90%了,而且只能显示5帧左右。

你可能感兴趣的:(DM365,LCD显示)