hi3531的hifb显示1080p60Hz

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/fb.h>
#include <sys/mman.h>   //mmap

#include "hifb.h"
#include "sample_comm.h"
#define IMAGE_WIDTH 1920
#define IMAGE_HEIGHT 1080
#define IMAGE_SIZE (1920*1080*3)
#define IMAGE_NUM 14
#define IMAGE_PATH "./res/%d.bits"
 struct fb_bitfield       a16 = {15, 1, 0}, a32 = {24, 8, 0};
 struct fb_bitfield       r16 = {10, 5, 0}, r32 = {16, 8, 0};
 struct fb_bitfield       g16 = {5, 5, 0},  g32 = {8, 8, 0};
 struct fb_bitfield       b16 = {0, 5, 0},  b32 = {0, 8, 0};
 HIFB_ALPHA_S             stAlpha;
 HIFB_COLORKEY_S          stColorKey;
FILE                     *fp1,*fp2,*fp3;
   char  bmp_buf[1920*1080*3*4];
int main()
{
 int fd;
 int i;
 struct fb_fix_screeninfo fix;
 struct fb_var_screeninfo var;

 unsigned char *pShowScreen;
 unsigned char *pHideScreen;
 HIFB_POINT_S stPoint = {0, 0};
 FILE *fp;
 VO_PUB_ATTR_S stPubAttr = {0};
 char image_name[128];
 /*0. open VO device 0 */
 /* …… initialize the attributes for stPubAttr */
 HI_MPI_VO_SetPubAttr(0, &stPubAttr);
 HI_MPI_VO_Enable(0);
 /*1. open Framebuffer device overlay 0*/
 fd = open("/dev/fb0", O_RDWR);
 if(fd < 0)
 {
 printf("open fb0 failed!\n");
 return -1;
 }

   HI_BOOL  bShow = HI_FALSE;

 /*2. set the screen original position*/
 if (ioctl(fd, FBIOPUT_SCREEN_ORIGIN_HIFB, &stPoint) < 0)
 {
 printf("set screen original show position failed!\n");
 return -1;
 }

 /*3. get the variable screen info*/
 if (ioctl(fd, FBIOGET_VSCREENINFO, &var) < 0)
 {
 printf("Get variable screen info failed!\n");
 close(fd);
 return -1;
 }
 /*4. modify the variable screen info
 the screen size: IMAGE_WIDTH*IMAGE_HEIGHT
 the virtual screen size: IMAGE_WIDTH*(IMAGE_HEIGHT*2)
 the pixel format: ARGB1555
 */
    printf("%d,%d,%d,%d,%d,%d,%d\n", var.xres_virtual,var.yres_virtual,var.xres,var.yres,var.xoffset,var.yoffset,var.bits_per_pixel);
 var.xres = var.xres_virtual = IMAGE_WIDTH;
 var.yres = IMAGE_HEIGHT;
 var.yres_virtual = IMAGE_HEIGHT*2;
 var.bits_per_pixel = 32;

 var.xoffset = 0;
 var.yoffset = 0;

 var.red = r32;
 var.green = g32;
 var.blue = b32;
 var.transp = a32;

 /*5. set the variable screeninfo*/
 if (ioctl(fd, FBIOPUT_VSCREENINFO, &var) < 0)
 {
 printf("Put variable screen info failed!\n");
 close(fd);
 return -1;
 }
  printf("%d,%d,%d,%d,%d,%d,%d\n", var.xres_virtual,var.yres_virtual,var.xres,var.yres,var.xoffset,var.yoffset,var.bits_per_pixel);
 /*6. get the fix screen info*/
 if (ioctl(fd, FBIOGET_FSCREENINFO, &fix) < 0)
 {
 printf("Get fix screen info failed!\n");
 close(fd);
 return -1;
 }
 /*7. map the physical video memory for user use*/

 pShowScreen = mmap(NULL, fix.smem_len, PROT_READ|PROT_WRITE,MAP_SHARED, fd, 0);
 //pHideScreen = pShowScreen + (1920*1080*3;
 memset(pShowScreen, 0, 1920*1080*8);
   printf("fix.smem_len: %d\n", fix.smem_len);
 /*8. load the bitmaps from file to hide screen and set pan display the
 hide screen*/

 
 unsigned int h,w,u32Height = 1080;
 unsigned int u32Width = 1920;
    bShow = HI_TRUE;
     if (ioctl(fd, FBIOPUT_SHOW_HIFB, &bShow) < 0)
     {
  printf("FBIOPUT_SHOW_HIFB failed!\n");
  close(fd);
  return -1;
       }

     fp1 = fopen("1080P1.bmp", "rb");

        if(fp1==NULL) printf("fp1 not open\n");
        fread(bmp_buf, 54, 1, fp1);
        fread(bmp_buf, u32Width*u32Height*3, 1, fp1);
        fclose(fp1);

 fp2 = fopen("2.bmp", "rb");

        if(fp2==NULL) printf("fp1 not open\n");
        fread(bmp_buf+u32Width*u32Height*3, 54, 1, fp2);
        fread(bmp_buf+u32Width*u32Height*3, u32Width*u32Height*3, 1, fp2);
        fclose(fp2);

 fp3 = fopen("3.bmp", "rb");

        if(fp3==NULL) printf("fp1 not open\n");
        fread(bmp_buf+u32Width*u32Height*6, 54, 1, fp3);
        fread(bmp_buf+u32Width*u32Height*6, u32Width*u32Height*3, 1, fp3);
        fclose(fp3);
        printf("ok open file\n");   

int index=0;
for( index=0;index<100;index++)
{
 ////////////////////////////////////////////////////////////////////////////////////
  for(h=0;h<u32Height;h++)
     {
  for(w=0;w<u32Width;w++)
  {
            *(unsigned char *)(pShowScreen+(1-index%2)*u32Width*u32Height*4+h*u32Width*4+w*4+0) =  bmp_buf[(u32Height-1-h)*u32Width*3+w*3+0+(index%3)*u32Width*u32Height*3]; //b
            *(unsigned char *)(pShowScreen+(1-index%2)*u32Width*u32Height*4+h*u32Width*4+w*4+1) =  bmp_buf[(u32Height-1-h)*u32Width*3+w*3+1+(index%3)*u32Width*u32Height*3]; //g
            *(unsigned char *)(pShowScreen+(1-index%2)*u32Width*u32Height*4+h*u32Width*4+w*4+2) =  bmp_buf[(u32Height-1-h)*u32Width*3+w*3+2+(index%3)*u32Width*u32Height*3]; //r
            *(unsigned char *)(pShowScreen+(1-index%2)*u32Width*u32Height*4+h*u32Width*4+w*4+3) = 0xff; //a
  }
     }

 ////////////////////////////////////////////////////////////////////////////////////
  if(index%2==0)
  {
      var.yoffset = u32Height;
  }
  else
  {
      var.yoffset = 0;
  }
  if (ioctl(fd, FBIOPAN_DISPLAY, &var) < 0)
  {
   printf("FBIOPAN_DISPLAY failed!\n");
   close(fd);
   return -1;
  }
  sleep(3);
}

 printf("Enter to quit!\n");
 getchar();
 /*9. close the devices*/
 close(fd);
 HI_MPI_VO_Disable(0);
 return 0;
}

 

时间: 2025-01-19 19:20:05

hi3531的hifb显示1080p60Hz的相关文章

MiniGUI + Hi3531 笔记 .

一.移动光驱安装Ubuntu 10.04      1.   重启系统按住Delete进入BIOS界面!      2.   退出/高级模式 --> 启动 --> 启动设备选择. 移动光驱正常被识别后这里应该是有2个选项的:            (1)SATA :WOC WD6401AALS-00E3A0 (默认硬盘)            (2)TSSTcorp CDDVDW SE-208AB TS00 (移动光驱)            我们直接点击(2)启动读取移动光驱中的光盘, 耐心

hi3531 SDK已编译文件系统制作jffs2文件系统镜像并解决问题 .

一, 安装SDK 1.Hi3531 SDK包位置     在"Hi3531_V100R001***/01.software/board"目录下,您可以看到一个 Hi3531_SDK_Vx.x.x.x.tgz 的文件, 该文件就是Hi3531的软件开发包. 2.解压缩SDK包     在linux服务器上(或者一台装有linux的PC上,主流的linux发行版本均可以),使用命令:tar -zxf Hi3531_SDK_Vx.x.x.x.tgz , 解压缩该文件,可以得到一个Hi3531

Hi3531 SDK v2.0.8.0 安装

1.Hi3531 SDK包位置     在"Hi3531_V100R001***/01.software/board"目录下,您可以看到一个 Hi3531_SDK_Vx.x.x.x.tgz 的文件, 该文件就是Hi3531的软件开发包. 2.解压缩SDK包     在linux服务器上(或者一台装有linux的PC上,主流的linux发行版本均可以),使用命令:tar -zxf Hi3531_SDK_Vx.x.x.x.tgz , 解压缩该文件,可以得到一个Hi3531_SDK_Vx.x

HI3531例子程序说明

Hisilicon Hi35xx 样例程序使用说明 1. 样例程序文件结构说明    sample            # MPP 样例程序     |-- common       # hi35xx样例程序使用的公用函数     |---hi3521       # hi3521/hi3520A样例程序     |      |-- vio          # 视频输入/输出功能实现演示     |      |-- venc         # 视频编码功能实现演示     |     

IE8中显示“收藏夹栏”为灰色无法点击开启

  浏览器的收藏夹是我们平时用到的最多功能之一,为了更方便的打开收藏夹中的网页,在IE8浏览器下,我们可以在工具栏的空白处单击右键,然后选择"收藏夹栏"即可在工具栏上显示收藏网页.但是在IE8中可能会遇到"收藏夹栏"无法点击勾选的情况,故障如下: 解决方案: 若此问题出现在Win7系统中可通过修改组策略来解决问题. 提示:更改注册表设置有一定危险,可能会造成系统瘫痪,建议在进行操作之前,先对注册表进行备份 按下 Windows + R 键打开"运行&quo

解决win7系统所有中文显示乱码的方法教程

  在win7系统下我们如果把语言操作系统界面语言修改为英文后,有部分用户的电脑中的英文字体将显示乱码的问题,对于出现该问题是因为中文不是Unicode语言,用户在将系统语言设置为英文后,语言设置的非Unicode设置出问题而导致的,故此我们需要将非Unicode的语言修改为中文语言即可解决这个问题,下面我们看下具体的操作教程吧! 解决win7系统所有中文显示乱码的方法教程 1.点击开始菜单图标并单击打开控制面板. 2.在区域和语言设置-管理中,选择更改显示语言. 3.选择管理标签,并点击更改系

html-c# 提取微信文章中的图片是WEBP格式,如何转成JPG格式以便能够正常显示?

问题描述 c# 提取微信文章中的图片是WEBP格式,如何转成JPG格式以便能够正常显示? 根据微信文章地址,提取到了微信文章的HTML源文件,但图片是WEBP格式,并防盗链. 请问,如何通过C#方法,把WEBP转成JPG格式用于保存在本地以便可以正常浏览? 提取到的微信图片的地址如下: http://mmbiz.qpic.cn/mmbiz/Ek7ZheM28KXya0WfIFv58aNZEBb3YSWX9iaMJHLhuz7o5xNia68MItJfDya947ibSX1HVNpy9V3iaJr

MathType希腊字母无法显示怎么解决

  解决方法如下: 1.双击公式进入到MathType编辑窗口,选择"样式"--"定义". 在MathType窗口中选择"样式"--"定义" 2.将"希腊字母"."U.C希腊语"和"符号"的字体都改为"Symbol","确定".此时公式编辑器中的希腊字母上就不会出现"叉"号了. 将"希腊字母&quo

MathType公式显示问号怎么解决

  MathType公式显示问号怎么解决 1.双击显示有问题的公式进入到MathType编辑页面,点击"预置"--"公式预置"--"保存到文件",输入文件的名称,并保存到一定的路径下. 在预置中将公式保存为一个文件 2.在Word中的MathType菜单下,选择"格式化公式(Format Equation)"--"MathType公式选项(MathType preference file)",点击"