wasd4862

wasd4862

0个粉丝

8

问答

0

专栏

1

资料

wasd4862  发布于  2013-09-16 18:22:15
采纳率 0%
8个问答
7311

海思hi3531 hifb 按1080p显示图像

 
海思sample_hifb   设置虚拟屏幕和可见屏幕尺寸时,出现后面     "Put variable screen info failed!"    求指点

                             
                              var.xres_virtual = 1920;
                              var.yres_virtual = 1080;
                              var.xres = 1920;            ////可见屏幕尺寸
                   var.yres = 1080;

                              var.transp = g_a32;
                              var.red    = g_r32;
                              var.green  = g_g32;
                              var.blue   = g_b32;
                              var.bits_per_pixel = 32;
                              var.activate = FB_ACTIVATE_NOW;

                              /* 6. set the variable screeninfo */
                              if (ioctl(pstInfo->fd, FBIOPUT_VSCREENINFO, &var) < 0)
                              {
                                  printf("Put variable screen info failed!\n");
                                  close(pstInfo->fd);
                                  return false;
                              }
                              printf("open FBIOPUT_VSCREENINFO \n");
我来回答
回答6个
时间排序
认可量排序

david

42个粉丝

368

问答

253

专栏

229

资料

david 2013-09-18 10:05:11
认可0
                              var.xres_virtual = 1920;
                              var.yres_virtual = 1080;
                              var.xres = 1920;            ////可见屏幕尺寸
                   var.yres = 1080;

xres 和 yres调小看看 (虚拟的)

wasd4862

0个粉丝

8

问答

0

专栏

1

资料

wasd4862 2013-09-20 11:51:23
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=4296&ptid=2207]david 发表于 2013-9-18 10:05[/url]
var.xres_virtual = 1920;
                              var.yres_virtu ...[/quote]

把 xres 和 yres调小也失败,
                 把设成  var.xres_virtual = 1920;
                               var.yres_virtual = 960;
                               var.xres = 1920;            ////可见屏幕尺寸
                    var.yres = 960;
这样就可以,用的HDMI输出,显示器也是支持1080P显示的。

但是屏幕占不满,底边空了一段黑的。只要将 var.yres_virtual , var.yres ,其中一个设成1080,就会失败

hilinux

0个粉丝

17

问答

0

专栏

0

资料

hilinux 2013-09-21 15:48:20
认可0
var.bits_per_pixel = 32;

这个设置为 16

shensifeng2011

0个粉丝

2

问答

0

专栏

0

资料

shensifeng2011 2014-01-15 14:05:37
认可0
你好 我想请教下,想在framebuffer上输出一张图片显示,我有个程序 显示一直是黑屏,能帮我看下吗
#include
#include
#include
#include
#include
#include "inc/hifb.h"
#define IMAGE_WIDTH 1096
#define IMAGE_HEIGHT 346
#define IMAGE_SIZE (1096 * 346 * 2)
#define IMAGE_NUM 14
//#define IMAGE_PATH "/0705-yinxr/%d.bmp"
#define IMAGE_PATH                "/0705-yinxr/blui_update.png"

static struct fb_bitfield g_r16 = {10, 5, 0};
static struct fb_bitfield g_g16 = {5, 5, 0};
static struct fb_bitfield g_b16 = {0, 5, 0};
static struct fb_bitfield g_a16 = {15, 1, 0};

/*bit area for argb 8888*/
static struct fb_bitfield g_r32 = {16, 8, 0};
static struct fb_bitfield g_g32 = {8, 8, 0};
static struct fb_bitfield g_b32 = {0, 8, 0};
static struct fb_bitfield g_a32 = {24, 8, 0};

int main()
{
    int fd;
    int i = 0;
    struct fb_fix_screeninfo fix;
    struct fb_var_screeninfo var;
    unsigned char *pShowScreen;
    unsigned char *pHideScreen;
    HIFB_POINT_S stPoint = {100, 0};
    HIFB_ALPHA_S stAlpha;
   
    FILE *fp;
    char image_name[128];

    /*1. open Framebuffer device overlay 0*/
    fd = open("/dev/fb0", O_RDWR);
    if(fd < 0)
    {
        printf("open fb0 failed!\n");
        return -1;
    }

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

#if 0
    stAlpha.bAlphaEnable = HI_TRUE;
    stAlpha.bAlphaChannel = HI_TRUE;
    stAlpha.u8Alpha0 = 0xff;
    stAlpha.u8Alpha1 = 0xff;
    stAlpha.u8GlobalAlpha = 0xff;
#endif
    if (ioctl(fd, FBIOPUT_ALPHA_HIFB,  &stAlpha) < 0)
    {
        printf("Set alpha failed!\n");
                close(fd);
        return HI_NULL;
    }   
    /*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
            */
#if 1
    var.xres = 1920;
    var.yres = 1080;
    var.xres_virtual = 1920;   
    var.yres_virtual = 1080 * 2;
    var.transp= g_a16;
    var.red = g_r16;
    var.green = g_g16;
    var.blue = g_b16;
    var.bits_per_pixel = 16;   
#endif

    /*5. set the variable screeninfo*/
    if (ioctl(fd, FBIOPUT_VSCREENINFO, &var) < 0)
    {
        printf("Put variable screen info failed!\n");
        close(fd);
        return -1;
    }
   
    /*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 + IMAGE_SIZE;
    memset(pShowScreen, 0, IMAGE_SIZE);


    /*8. load the bitmaps from file to hide screen and set pan display the
            hide screen*/
    //for(i = 0; i < IMAGE_NUM; i++)
    {
        sprintf(image_name, IMAGE_PATH);
        fp = fopen(image_name, "rb");
        if(NULL == fp)
        {
            printf("Load %s failed!\n", image_name);
            close(fd);
            return -1;
        }
        fread(pHideScreen, 1, IMAGE_SIZE, fp);
        fclose(fp);
#if 0
        if(i % 2)
        {
            var.yoffset = 0;
            pHideScreen = pShowScreen + IMAGE_SIZE;
        }
        else
        {
            var.yoffset = IMAGE_HEIGHT;
            pHideScreen = pShowScreen;
        }
#endif

        if (ioctl(fd, FBIOPAN_DISPLAY, &var) < 0)
        {
            printf("FBIOPAN_DISPLAY failed!\n");
            close(fd);
            return -1;
        }
    }

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

jorley

0个粉丝

2

问答

0

专栏

0

资料

jorley 2014-03-14 16:35:08
认可0
我之前也遇到设置1080P参数时,报 "Put variable screen info failed!" 错误,后来发现是hifb:vram0_size设置值太小了,默认是7200,不够1920*1080*4(32bit),在mpp/ko_hi3531中的load3531文件中设置该值,可以参考一下《HiFB开发指南.pdf》中第2章节,有解释这个。

wasd4862

0个粉丝

8

问答

0

专栏

1

资料

wasd4862 2013-09-18 09:23:12
认可0
自己顶下!
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区