Linux 下使用S3C6410的post处理器的进行硬件缩放

在嵌入式下,在移植软件时经常会碰到这样的问题,就是显示分辩率的变化.一般软件往往针对桌面机的环境编译没有太多问题,但是在嵌入式环境下,受限的LCD显示有着很大的问题.


这种情况下,一种方法是修改代码,让其在嵌入式的LCD上显示.另外一种是使用软件进行显示缩放. 这两个方法只在部分条件有效,而且修改的工作量极大,更多情况是无法修改,比如SDL下的Dosbox是针对 640*480,修改源码的分辩率成 480*272 后,基本屏幕显示完全错位.软件无法正常运行.


这里有一种思路是使用s3c6410的post process.它是一个硬件进行图像和视频缩放的的模块.用POST后,只需要简单调整frame buffer显示库代码,即可以让原来无法移植的软件在嵌入式环境下自由缩放.


 一.Post Process 说明

   s3c6410的Post Process支持图像和视频缩放和格式转换,因为是硬件操作,所以速度非常之快.

  这是DataSheet 对其功能说明.


  •  Dedicated DMA with offset address 

• 3 Channel scaling pipelines for video/graphic scaling up/down or zooming in/out 

• Video input format: 420, 422 format 

• Graphic input format: 16-bit (565format) or 24-bit 

• Graphics Output format to Memory: 16-bit (565 format) / 24-bit graphic data (progressive only) 

• Video Output format to Memory: YCbCr420, YCbCr422 

• Output format to external FIFO: YCbCr444 / RGB (30-bit) for interlace and progressive 

• FreeRun Mode Operation  

• Programmable source image size up to 4096 × 4096 resolution 

• Programmable destination image size up to 2048 × 2048 resolution 

• Programmable scaling ratio 

• Format conversion for video signals 

• Color space conversion from YCbCr to RGB 

• Color Space conversion from RGB to YCbCr  


  它的主要处理流程是在系一种统内存中开辟一个PP的帧内存.其中数据被PP处理后,有两个流向,一个是通过DMA直接传到例如显存当中,这样可以直接显示,另外一种是传到硬件队列当中,然后可以发送到LCD,TV等设备当中.

  

Linux 下使用S3C6410的post处理器的进行硬件缩放

   

 二.官方的Linux PP测试程序.

  

  官方有一个Linux下的测试程序,是演示的如果使用Post Process的驱动 s3c-pp的演示代码.它是用双缓冲的把两幅640*480的原始图像,在任意分辩率下进行缩放后,交替在屏幕上显示.

   

  这里有两个版本,我选择是 Multimedia_DD\PP_V2.5\v3.xx\pp_app 的测试程序.

  我是在4.3"的s3c6410开发板上运行.fb的信息是 480*272 bpp采用16.


  这样需要对原有的代码post_test.c进行简单修改.

  

  1.23行,设备结点修改为 #define PP_DEVICE_FILE_NAME"/dev/s3c-pp"


  2. 25,26行,分辩率修改为4.3"的配置

     #define LCD_WIDTH 480

     #define LCD_HEIGHT 272


  Makefile 的修改,将CC=....的值调整为 CC=arm-linux-gcc


  编译成功后,可以选择如下两种方式运行.

    ./post_test 0 10000

   其中第一个参数是PP的输出方式,0是采用DMA输出,1是采用FIFO,两种情况测试均成功.

   第二个参数是两幅图像交错显示时,每次显示的时间.单位是微秒.


这是在我的开发板显示效果,结果是比较令人满意.


   

Linux 下使用S3C6410的post处理器的进行硬件缩放

Linux 下使用S3C6410的post处理器的进行硬件缩放

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyszgw.html