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;
}
hi3531的hifb显示1080p60Hz的更多相关文章
- 在HI3531上移植和运行QT4.8.6
在HI3531上移植和运行QT4.8.6 1. 前言: 近段有点时间,想把QT移植到HI3531上,在网上查找了很多资料,但都不是很全面,有些有问题也没有得到很好的体现. 2. ...
- Hi3531 SDK v2.0.8.0 安装
1.Hi3531 SDK包位置 在"Hi3531_V100R001***/01.software/board"目录下,您可以看到一个 Hi3531_SDK_Vx.x.x.x.tgz ...
- HI3531例子程序说明
Hisilicon Hi35xx 样例程序使用说明 1. 样例程序文件结构说明 sample # MPP 样例程序 |-- common # hi35x ...
- hi3531 SDK已编译文件系统制作jffs2文件系统镜像并解决问题 .
一, 安装SDK 1.Hi3531 SDK包位置 在"Hi3531_V100R001***/01.software/board"目录下,您可以看到一个 Hi3531_SDK_Vx. ...
- MiniGUI + Hi3531 笔记 .
一.移动光驱安装Ubuntu 10.04 1. 重启系统按住Delete进入BIOS界面! 2. 退出/高级模式 --> 启动 --> 启动设备选择. 移动光驱正常被识别后这里应该 ...
- hi3531 SDK已编译文件系统制作jffs2文件系统镜像并解决这个问题 .
一, 安装SDK 1.Hi3531 SDK包位置 在"Hi3531_V100R001***/01.software/board"文件夹下,您能够看到一个 Hi3531_SDK_Vx ...
- win10 环境 gitbash 显示中文乱码问题处理
gitbash 是 windows 环境下非常好用的命令行终端,可以模拟一下linux下的命令如ls / mkdir 等等,如果使用过程中遇到中文显示不完整或乱码的情况,多半是因为编码问题导致的,修改 ...
- 关于textview显示特殊符号居中的问题
话说这是2017年的第一篇博客,也是一篇技术博客.先从简单的一篇解决问题开始吧,千里之行,始于足下! ------------------------------------------------- ...
- IE的F12开发人员工具不显示问题
按下F12之后,开发人员工具在桌面上看不到,但是任务栏里有显示.将鼠标放在任务栏的开发人员工具上,出现一片透明的区域,选中之后却出不来.将鼠标移动到开发人员工具的缩略图上,右键-最大化,工具就全屏出现 ...
随机推荐
- 学习dos命令行总结
dir:列出当前目录下的所有文件及文件夹. md 文件夹:创建文件夹 rd 文件夹:删除文件夹 echo 文件内容>文件名(扩展名):创建带文件内容的新文件 echo 文件内容>>文 ...
- 前端-css
页面css排版不错乱: 1.最外层div中 定义width=980px,当页面缩小以后,就在下面出现滚动条 2.使用 media 技术,bootstrp技术.页面自使用 一.css选择器 选择器 样式 ...
- iOS-常用三方工具
#菜单 pod 'LGSideMenuController' # 刷新 pod 'MJRefresh' # 网络请求 pod 'AFNetworking', '~> 3.0' # 图片缓存 po ...
- java文件监控[转]
原文链接:http://blog.csdn.net/dancen/article/details/7786987#comments 问题:存在两个文件目录,且称之为源目录和目标目录,需要不定期将源目录 ...
- Java数据结构和算法(十五)——无权无向图
前面我们介绍了树这种数据结构,树是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合,把它叫做“树”是因为它看起来像一棵倒挂的树,包括二叉树.红黑树.2-3-4树.堆等各种不同的 ...
- 深入浅出Hadoop之mapreduce
卿哥原创,转载请注明出处,谢谢 之前已经作出预告,那么今天就聊聊mapreduce,起源于Google的map reduce paper, 而后经历了mapreduce 1,和构建于yarn上的map ...
- selenium headlesschrome下设置最大窗口模式
做微博登录的时候,用selenium的chrome界面模式,可以用下面方式显示最大窗口: from selenium.webdriver.chrome.options import Options c ...
- HoloLens开发手记-世界坐标系 Coordinate systems
坐标系 Coordinate systems 全息的核心是,全息应用可以在真实世界中放置全息图形并使得它们看起来和听起来像真实的物体.这涉及到了物体在真实世界中的定位和方向的确定,这对用户来说很重要. ...
- Struts2 中添加 Servlet
Struts2中如何添加Servlet 以前Java开发都是Servlet的天下,如今是各种框架横行,遇到一个需要将以前的Servlet加入到现有的Struts2的环境中. Google之后发现Sta ...
- 【Tools】ubuntu16.04升级Python2.7到3.5
最近开始学Python,但我发现我ubuntu16.04上默认的Python是2.7,并不是3,x 于是准备Python升级,记录安装过程给初学者参考一下. 1.先取得管理员权限, 个人习惯先取得管理 ...