打印

DM642+TVP5150图像采集压缩[720*576==>360*288]

[复制链接]
2291|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
古董|  楼主 | 2013-5-17 15:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
QXD-DM642video2.zip (260.32 KB)
如题,我采集到的图像是720*576的,现在我想把它压缩成360*288并存到SRAM中指定的区域;
对这块不是很了解,Q上有人和我说可以用两种办法:
1.配置EDMA可直接得到360*288的图像;
2.取出的720*576的图像通算法处理得到360*288的图像;

对于第一个半法,我修改了vportcap.c开头的几个参数,得到的是左上角的图像;下面一些相关的参数我也改了试过,但都得不到图像;
第二种办法,设想是隔行隔列(以单字节为单位)进行取值然后拼起来,但SRAM是64位的,实际操作时以4个字节一个单位的,出来的360*144的图像。这是一开始的做法。

对于第二种办法,我现在是想在L2区定义一个360*288的Uint8的数组来取样,结果未出........

不知各位大哥有什么好的建议,望不吝赐教!

相关帖子

沙发
1988020566| | 2013-5-17 23:42 | 只看该作者
用ov72XX也没有调试出来呢。

使用特权

评论回复
板凳
古董|  楼主 | 2013-5-23 17:53 | 只看该作者
抽出来了,四路,有点卡哦,有点瞬间移动的感觉!
        for(;;)
        {//00
    for(i=0;i<4;i++) //第一路Y分量取值,分为上半部分和下半分两个大部分,每个大部分又分为上下两个小部分,即分为四个部分,每个部分为720*72字节
            {//11
            for(j=i*144;j<(i+1)*144;j+=2)//隔行取值[72行],存到临时空间
                {
                     DAT_copy((void *)(capYbuffer1 + j * numPixels),
                     (void *)(tempSpace + ((j-i*144)/2)* numPixels), numPixels);
                    }            
            if(i<2)
                {//12
                        for(j=i*72;j<(i+1)*72;j++)//临时空间数据移到显示区,一行一行的处理
                        for(k=0;k<720;k+=2)//隔列取值
                        {
                          *(Uint8 *)(disYbuffer +j *numPixels +(k/2))= *(Uint8 *)(tempSpace+(j-i*72)*numPixels+k);
                                  *(Uint8 *)(tepYbuffer1 +j *numPixels +(k/2))= *(Uint8 *)(tempSpace+(j-i*72)*numPixels+k);
                        }
              }//12
                else
                     { //13
                        for(j=144+i*72;j<144+(i+1)*72;j++)
                        for(k=0;k<720;k+=2)
                        {
                          *(Uint8 *)(disYbuffer +j *numPixels +(k/2))= *(Uint8 *)(tempSpace+(j-i*72-144)*numPixels+k);
                                  *(Uint8 *)(tepYbuffer1 +j *numPixels +(k/2))= *(Uint8 *)(tempSpace+(j-i*72-144)*numPixels+k);
                        }
              }//13
                    }//11
                    

                for(i=0;i<2;i++)//第一路Cb,Cr分量
            { //22
            if(i<1)
                {//55
                    for(j=0;j<288;j+=2)
                    {
                        DAT_copy((void *)(capCbbuffer1 + j * numPixels/2),
                        (void *)(tempSpace + (j/2)* numPixels/2), numPixels/2);
                        }
                        
                        for(j=0;j<144;j++)
                        for(k=0;k<360;k+=2)
                        {
                          *(Uint8 *)(disCbbuffer +j*numPixels/2 +(k/2))= *(Uint8 *)(tempSpace+j*numPixels/2+k);   
                                  *(Uint8 *)(tepCbbuffer1 +j*numPixels/2 +(k/2))= *(Uint8 *)(tempSpace+j*numPixels/2+k);
                        }
                              
                                                
                        for(j=0;j<288;j+=2)
                    {
                        DAT_copy((void *)(capCrbuffer1 + j * numPixels/2),
                        (void *)(tempSpace + (j/2)* numPixels/2), numPixels/2);
                        }
                        
                        for(j=0;j<144;j++)
                        for(k=0;k<360;k+=2)
                        {
                          *(Uint8 *)(disCrbuffer +j*numPixels/2 +(k/2))= *(Uint8 *)(tempSpace+j*numPixels/2+k);
                                  *(Uint8 *)(tepCrbuffer1 +j*numPixels/2 +(k/2))= *(Uint8 *)(tempSpace+j*numPixels/2+k);
                        }     
                        
              }//55
                       else
                     {//44
                        for(j=288;j<576;j+=2)
                    {
                        DAT_copy((void *)(capCbbuffer1 + j * numPixels/2),
                        (void *)(tempSpace + ((j-288)/2)* numPixels/2), numPixels/2);
                        }
                        
                        for(j=288;j<432;j++)
                        for(k=0;k<360;k+=2)
                        {
                          *(Uint8 *)(disCbbuffer +j*numPixels/2 +(k/2))= *(Uint8 *)(tempSpace+(j-288)*numPixels/2+k);
                                  *(Uint8 *)(tepCbbuffer1 +j*numPixels/2 +(k/2))= *(Uint8 *)(tempSpace+(j-288)*numPixels/2+k);
                        }
                        
                        
                        for(j=288;j<576;j+=2)
                    {
                        DAT_copy((void *)(capCrbuffer1 + j * numPixels/2),
                        (void *)(tempSpace + ((j-288)/2)* numPixels/2), numPixels/2);
                        }
                        
                        for(j=288;j<432;j++)
                        for(k=0;k<360;k+=2)
                        {
                          *(Uint8 *)(disCrbuffer +j*numPixels/2 +(k/2))= *(Uint8 *)(tempSpace+(j-288)*numPixels/2+k);
                                  *(Uint8 *)(tepCrbuffer1 +j*numPixels/2 +(k/2))= *(Uint8 *)(tempSpace+(j-288)*numPixels/2+k);
                        }
              }//44
                    }//22

                  
                 for(i=0;i<4;i++) //第二路Y
            { //33
                for(j=i*144;j<(i+1)*144;j+=2)
                {
                     DAT_copy((void *)(capYbuffer2 + j * numPixels),
                     (void *)(tempSpace + ((j-i*144)/2)* numPixels), numPixels);
                     }
            if(i<2)
                {
                        for(j=i*72;j<(i+1)*72;j++)
                        for(k=0;k<720;k+=2)
                        {
                          *(Uint8 *)(disYbuffer +j *numPixels+360 +(k/2))= *(Uint8 *)(tempSpace+(j-i*72)*numPixels+k);
                                  *(Uint8 *)(tepYbuffer2 +j *numPixels+360 +(k/2))= *(Uint8 *)(tempSpace+(j-i*72)*numPixels+k);
                        }
              }
                       else
                     {
                        for(j=144+i*72;j<144+(i+1)*72;j++)
                        for(k=0;k<720;k+=2)
                        {
                          *(Uint8 *)(disYbuffer +j *numPixels+360 +(k/2))= *(Uint8 *)(tempSpace+(j-i*72-144)*numPixels+k);
                                  *(Uint8 *)(tepYbuffer2 +j *numPixels+360 +(k/2))= *(Uint8 *)(tempSpace+(j-i*72-144)*numPixels+k);
                        }
                        
              }
                    }//33
                for(i=0;i<2;i++)        //第二路UV
            {//44
            if(i<1)
                {
                    for(j=0;j<288;j+=2)
                    {
                        DAT_copy((void *)(capCbbuffer2 + j * numPixels/2),
                        (void *)(tempSpace + (j/2)* numPixels/2), numPixels/2);
                        }
                        
                        for(j=0;j<144;j++)
                        for(k=0;k<360;k+=2)
                        {
                          *(Uint8 *)(disCbbuffer +j*numPixels/2+180 +(k/2))= *(Uint8 *)(tempSpace+j*numPixels/2+k);
                                  *(Uint8 *)(tepCbbuffer2 +j*numPixels/2+180 +(k/2))= *(Uint8 *)(tempSpace+j*numPixels/2+k);
                        }
                        for(j=0;j<288;j++)
                    {
                        DAT_copy((void *)(capCrbuffer2 + j * numPixels/2),
                        (void *)(tempSpace + (j/2)* numPixels/2), numPixels/2);
                        j++;
                        }
                        
                        for(j=0;j<144;j++)
                        for(k=0;k<360;k+=2)
                        {
                          *(Uint8 *)(disCrbuffer +j*numPixels/2+180 +(k/2))= *(Uint8 *)(tempSpace+j*numPixels/2+k);
                                  *(Uint8 *)(tepCrbuffer2 +j*numPixels/2+180 +(k/2))= *(Uint8 *)(tempSpace+j*numPixels/2+k);
                        }     
              }
                       else
                     {
                        for(j=288;j<576;j+=2)
                    {
                        DAT_copy((void *)(capCbbuffer2 + j * numPixels/2),
                        (void *)(tempSpace + ((j-288)/2)* numPixels/2), numPixels/2);
                        }
                        
                        for(j=288;j<432;j++)
                        for(k=0;k<360;k+=2)
                        {
                          *(Uint8 *)(disCbbuffer +j*numPixels/2+180 +(k/2))= *(Uint8 *)(tempSpace+(j-288)*numPixels/2+k);
                                  *(Uint8 *)(tepCbbuffer2 +j*numPixels/2+180 +(k/2))= *(Uint8 *)(tempSpace+(j-288)*numPixels/2+k);
                        }
                        for(j=288;j<576;j+=2)
                    {
                        DAT_copy((void *)(capCrbuffer2 + j * numPixels/2),
                        (void *)(tempSpace + ((j-288)/2)* numPixels/2), numPixels/2);
                        }
                        
                        for(j=288;j<432;j++)
                        for(k=0;k<360;k+=2)
                        {
                          *(Uint8 *)(disCrbuffer +j*numPixels/2+180 +(k/2))= *(Uint8 *)(tempSpace+(j-288)*numPixels/2+k);
                                  *(Uint8 *)(tepCrbuffer2 +j*numPixels/2+180 +(k/2))= *(Uint8 *)(tempSpace+(j-288)*numPixels/2+k);
                        }
              }
                    }//44
                    
  
                for(i=0;i<4;i++) //第三路Y
            {//55
               for(j=i*144;j<(i+1)*144;j+=2)
               {
                    DAT_copy((void *)(capYbuffer3 + j * numPixels),
                    (void *)(tempSpace + ((j-i*144)/2)* numPixels), numPixels);
                    }
            if(i<2)
                {
                        for(j=i*72;j<(i+1)*72;j++)
                        for(k=0;k<720;k+=2)
                        {
                          *(Uint8 *)(disYbuffer +(j+144) *numPixels +(k/2))= *(Uint8 *)(tempSpace+(j-i*72)*numPixels+k);
                                  *(Uint8 *)(tepYbuffer3 +(j+144) *numPixels +(k/2))= *(Uint8 *)(tempSpace+(j-i*72)*numPixels+k);
                        }
              }
              
                       else
                     {
                        for(j=144+i*72;j<144+(i+1)*72;j++)
                        for(k=0;k<720;k+=2)
                        {
                          *(Uint8 *)(disYbuffer +(j+144) *numPixels +(k/2))= *(Uint8 *)(tempSpace+(j-i*72-144)*numPixels+k);
                                  *(Uint8 *)(tepYbuffer3 +(j+144) *numPixels +(k/2))= *(Uint8 *)(tempSpace+(j-i*72-144)*numPixels+k);
                        }
                        
              }
                    }//55
                for(i=0;i<2;i++)        //第三路UV
            {//66
            if(i<1)
                {
                    for(j=0;j<288;j+=2)
                    {
                        DAT_copy((void *)(capCbbuffer3 + j * numPixels/2),
                        (void *)(tempSpace + (j/2)* numPixels/2), numPixels/2);
                        }
                        
                        for(j=0;j<144;j++)
                        for(k=0;k<360;k+=2)
                        {
                          *(Uint8 *)(disCbbuffer +(j+144)*numPixels/2 +(k/2))= *(Uint8 *)(tempSpace+j*numPixels/2+k);
                                  *(Uint8 *)(tepCbbuffer3 +(j+144)*numPixels/2 +(k/2))= *(Uint8 *)(tempSpace+j*numPixels/2+k);
                        }
                              
                                                
                        for(j=0;j<288;j+=2)
                    {
                        DAT_copy((void *)(capCrbuffer3 + j * numPixels/2),
                        (void *)(tempSpace + (j/2)* numPixels/2), numPixels/2);
                        }
                        
                        for(j=0;j<144;j++)
                        for(k=0;k<360;k+=2)
                        {
                          *(Uint8 *)(disCrbuffer +(j+144)*numPixels/2 +(k/2))= *(Uint8 *)(tempSpace+j*numPixels/2+k);
                                  *(Uint8 *)(tepCrbuffer3 +(j+144)*numPixels/2 +(k/2))= *(Uint8 *)(tempSpace+j*numPixels/2+k);
                        }     
                        
              }
                       else
                     {
                        for(j=288;j<576;j+=2)
                    {
                        DAT_copy((void *)(capCbbuffer3 + j * numPixels/2),
                        (void *)(tempSpace + ((j-288)/2)* numPixels/2), numPixels/2);
                        }
                        
                        for(j=288;j<432;j++)
                        for(k=0;k<360;k+=2)
                        {
                          *(Uint8 *)(disCbbuffer +(j+144)*numPixels/2 +(k/2))= *(Uint8 *)(tempSpace+(j-288)*numPixels/2+k);
                                  *(Uint8 *)(tepCbbuffer3 +(j+144)*numPixels/2 +(k/2))= *(Uint8 *)(tempSpace+(j-288)*numPixels/2+k);
                        }
                        for(j=288;j<576;j+=2)
                    {
                        DAT_copy((void *)(capCrbuffer3 + j * numPixels/2),
                        (void *)(tempSpace + ((j-288)/2)* numPixels/2), numPixels/2);
                        }
                        
                        for(j=288;j<432;j++)
                        for(k=0;k<360;k+=2)
                        {
                          *(Uint8 *)(disCrbuffer +(j+144)*numPixels/2 +(k/2))= *(Uint8 *)(tempSpace+(j-288)*numPixels/2+k);
                                  *(Uint8 *)(tepCrbuffer3 +(j+144)*numPixels/2 +(k/2))= *(Uint8 *)(tempSpace+(j-288)*numPixels/2+k);  
                        }
              }
                    } //66
                for(i=0;i<4;i++) //第四路Y
            {//77
                    for(j=i*144;j<(i+1)*144;j+=2)
                        {
                            DAT_copy((void *)(capYbuffer4 + j * numPixels),
                            (void *)(tempSpace + ((j-i*144)/2)* numPixels), numPixels);
                            }
                    if(i<2)
                        {
                                for(j=i*72;j<(i+1)*72;j++)
                                for(k=0;k<720;k+=2)
                                {
                                  *(Uint8 *)(disYbuffer +(j+144) *numPixels+360 +(k/2))= *(Uint8 *)(tempSpace+(j-i*72)*numPixels+k);
                                          *(Uint8 *)(tepYbuffer4 +(j+144) *numPixels+360 +(k/2))= *(Uint8 *)(tempSpace+(j-i*72)*numPixels+k);
                                }
                      }
                      else
                             {
                                for(j=144+i*72;j<144+(i+1)*72;j++)
                                for(k=0;k<720;k+=2)
                                {
                                  *(Uint8 *)(disYbuffer +(j+144) *numPixels+360 +(k/2))= *(Uint8 *)(tempSpace+(j-i*72-144)*numPixels+k);
                                          *(Uint8 *)(tepYbuffer4 +(j+144) *numPixels+360 +(k/2))= *(Uint8 *)(tempSpace+(j-i*72-144)*numPixels+k);
                                }
                      }
                    }//77
                for(i=0;i<2;i++) //第四路UV
            {//88
            if(i<1)
                {
                    for(j=0;j<288;j+=2)
                    {
                        DAT_copy((void *)(capCbbuffer4 + j * numPixels/2),
                        (void *)(tempSpace + (j/2)* numPixels/2), numPixels/2);
                        }
                        
                        for(j=0;j<144;j++)
                        for(k=0;k<360;k+=2)
                        {
                          *(Uint8 *)(disCbbuffer +(j+144)*numPixels/2+180 +(k/2))= *(Uint8 *)(tempSpace+j*numPixels/2+k);
                                  *(Uint8 *)(tepCbbuffer4 +(j+144)*numPixels/2+180 +(k/2))= *(Uint8 *)(tempSpace+j*numPixels/2+k);
                        }
                              
                                                
                        for(j=0;j<288;j+=2)
                    {
                        DAT_copy((void *)(capCrbuffer4 + j * numPixels/2),
                        (void *)(tempSpace + (j/2)* numPixels/2), numPixels/2);
                        }
                        
                        for(j=0;j<144;j++)
                        for(k=0;k<360;k+=2)
                        {
                          *(Uint8 *)(disCrbuffer +(j+144)*numPixels/2+180 +(k/2))= *(Uint8 *)(tempSpace+j*numPixels/2+k);
                                  *(Uint8 *)(tepCrbuffer4 +(j+144)*numPixels/2+180 +(k/2))= *(Uint8 *)(tempSpace+j*numPixels/2+k);
                        }     
                        
              }
               else
                        {
                        for(j=288;j<576;j+=2)
                    {
                        DAT_copy((void *)(capCbbuffer4 + j * numPixels/2),
                        (void *)(tempSpace + ((j-288)/2)* numPixels/2), numPixels/2);
                        }
                        
                        for(j=288;j<432;j++)
                        for(k=0;k<360;k+=2)
                        {
                          *(Uint8 *)(disCbbuffer +(j+144)*numPixels/2+180 +(k/2))= *(Uint8 *)(tempSpace+(j-288)*numPixels/2+k);
                                  *(Uint8 *)(tepCbbuffer4 +(j+144)*numPixels/2+180 +(k/2))= *(Uint8 *)(tempSpace+(j-288)*numPixels/2+k);
                        }
                        
                        
                        for(j=288;j<576;j+=2)
                    {
                        DAT_copy((void *)(capCrbuffer4 + j * numPixels/2),
                        (void *)(tempSpace + ((j-288)/2)* numPixels/2), numPixels/2);
                        }
                        
                        for(j=288;j<432;j++)
                        for(k=0;k<360;k+=2)
                        {
                          *(Uint8 *)(disCrbuffer +(j+144)*numPixels/2+180 +(k/2))= *(Uint8 *)(tempSpace+(j-288)*numPixels/2+k);
                                  *(Uint8 *)(tepCrbuffer4 +(j+144)*numPixels/2+180 +(k/2))= *(Uint8 *)(tempSpace+(j-288)*numPixels/2+k);
                        }
            }
                    } //88
}//00

使用特权

评论回复
地板
古董|  楼主 | 2013-5-23 17:55 | 只看该作者
看来还是需要寻求直接采样的办法哦!

使用特权

评论回复
5
zhangmangui| | 2013-5-23 23:58 | 只看该作者
古董 发表于 2013-5-23 17:55
看来还是需要寻求直接采样的办法哦!

这一块一直没接触过  虽然很感兴趣

使用特权

评论回复
6
古董|  楼主 | 2013-5-24 10:09 | 只看该作者
古董 发表于 2013-5-23 17:53
抽出来了,四路,有点卡哦,有点瞬间移动的感觉!
        for(;;)
        {//00

又测试了下,如果把转存部分的语句注释掉则没有卡的感觉,实际上显示转存到最后不是用的,到时或许可以达到预期效果哦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:Think and Then Do It ,As soon As![[url=http://www.caterwang.com]www.caterwang.cn[/url]]

22

主题

234

帖子

2

粉丝