qq382903916

qq382903916

0个粉丝

1

问答

0

专栏

0

资料

qq382903916  发布于  2018-02-26 15:55:09
采纳率 0%
1个问答
2745

hi3516a移植qt5.6

本帖最后由 qq382903916 于 2018-2-26 19:51 编辑

运行应用,提示报错:
Failed to open framebuffer /dev/fb0 (Operation not permitted)
linuxfb: Failed to initialize screen


先运行了sample_hifb,


麻烦提供下解决方法:)
我来回答
回答4个
时间排序
认可量排序

qq382903916

0个粉丝

1

问答

0

专栏

0

资料

qq382903916 2018-02-26 19:54:43
认可0
本帖最后由 qq382903916 于 2018-2-26 20:02 编辑

./sample_hifb &
sample_hifb部分,修改后,运行qt应用,应用没反应。。。。。。。。。。。。。。。。。。。。
int main(int argc, char* argv[])

{

    HI_S32 s32Ret = HI_SUCCESS;

    HI_CHAR ch;

    HI_BOOL bExit = HI_FALSE;

    signal(SIGINT, SAMPLE_HIFB_HandleSig);

    signal(SIGTERM, SAMPLE_HIFB_HandleSig);

    SAMPLE_HIFB_StandardMode();

    return s32Ret;

}

HI_S32 SAMPLE_HIFB_StandardMode(HI_VOID)
{

    HI_S32 s32Ret = HI_SUCCESS;

    pthread_t phifb0 = -1;

    PTHREAD_HIFB_SAMPLE_INFO stInfo0;

    HI_U32 u32PicWidth;

    HI_U32 u32PicHeight;

    SIZE_S  stSize;

    VO_LAYER VoLayer = 0;

    VO_PUB_ATTR_S stPubAttr;

    VO_VIDEO_LAYER_ATTR_S stLayerAttr;

    HI_U32 u32VoFrmRate;

    VB_CONF_S       stVbConf;

    HI_U32 u32BlkSize;

    /******************************************

     step  1: init variable

    ******************************************/

    memset(&stVbConf, 0, sizeof(VB_CONF_S));

    if (VO_INTF_CVBS == g_enVoIntfType)
    {

        u32PicWidth = WIDTH_720;
        u32PicHeight = HEIGHT_576;

    }
    else

    {

        u32PicWidth = WIDTH_1920;
        u32PicHeight = HEIGHT_1080;

    }

    u32BlkSize = CEILING_2_POWER(u32PicWidth, SAMPLE_SYS_ALIGN_WIDTH)\

                 * CEILING_2_POWER(u32PicHeight, SAMPLE_SYS_ALIGN_WIDTH) * 2;

    stVbConf.u32MaxPoolCnt = 128;
    stVbConf.astCommPool[0].u32BlkSize = u32BlkSize;
    stVbConf.astCommPool[0].u32BlkCnt =  6;

    /******************************************
     step 2: mpp system init.
    ******************************************/
    s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);
    if (HI_SUCCESS != s32Ret)
    {

        SAMPLE_PRT("system init failed with %d!\n", s32Ret);
        goto SAMPLE_HIFB_NoneBufMode_0;

    }

    /******************************************
     step 3:  start vo dev.
    *****************************************/
    if (VO_INTF_CVBS == g_enVoIntfType)
    {
        stPubAttr.enIntfSync = VO_OUTPUT_PAL;
        stPubAttr.enIntfType = g_enVoIntfType;
        stPubAttr.u32BgColor = 0x0000FF;
    }
    else
    {
        stPubAttr.enIntfSync = VO_OUTPUT_1080P60;
        stPubAttr.enIntfType = g_enVoIntfType;
        stPubAttr.u32BgColor = 0x0000FF;
    }

    stLayerAttr.bClusterMode = HI_FALSE;
    stLayerAttr.bDoubleFrame = HI_FALSE;
    stLayerAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;

    s32Ret = SAMPLE_COMM_VO_GetWH(stPubAttr.enIntfSync, &stSize.u32Width, \
                                  &stSize.u32Height, &u32VoFrmRate);

    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("get vo wh failed with %d!\n", s32Ret);
        goto SAMPLE_HIFB_NoneBufMode_0;
    }

    memcpy(&stLayerAttr.stImageSize, &stSize, sizeof(stSize));
    stLayerAttr.u32DispFrmRt = 30 ;
    stLayerAttr.stDispRect.s32X = 0;
    stLayerAttr.stDispRect.s32Y = 0;

    stLayerAttr.stDispRect.u32Width = stSize.u32Width;
    stLayerAttr.stDispRect.u32Height = stSize.u32Height;

    s32Ret = SAMPLE_COMM_VO_StartDev(VoDev, &stPubAttr);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("start vo dev failed with %d!\n", s32Ret);
        goto SAMPLE_HIFB_NoneBufMode_0;
    }

    s32Ret = SAMPLE_COMM_VO_StartLayer(VoLayer, &stLayerAttr, HI_TRUE);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("start vo layer failed with %d!\n", s32Ret);
        goto SAMPLE_HIFB_NoneBufMode_1;
    }

    /******************************************

     step 4:  start hifb.

    *****************************************/
    stInfo0.layer   =  0;
    stInfo0.fd      = -1;
    stInfo0.ctrlkey =  2;
HI_S32 i, x, y;
    TDE_HANDLE s32Handle;
    struct fb_fix_screeninfo fix;
    struct fb_var_screeninfo var;

    HI_U32 u32FixScreenStride = 0;

    HI_U8* pShowScreen;

    HI_U8* pHideScreen;

    HI_U32 u32HideScreenPhy = 0;

    HI_U16* pShowLine;

    HI_U16* ptemp = NULL;

    HIFB_ALPHA_S stAlpha;

    HIFB_POINT_S stPoint = {0, 0};

    HI_CHAR file[12] = "/dev/fb0";

    HI_CHAR image_name[FILE_NAME_LEN];

    HI_U8* pDst = NULL;

    HI_BOOL bShow;

    PTHREAD_HIFB_SAMPLE_INFO* pstInfo;

    HIFB_COLORKEY_S stColorKey;

    TDE2_RECT_S stSrcRect, stDstRect;

    TDE2_SURFACE_S stSrc, stDst;

    HI_U32 Phyaddr;

    HI_VOID* Viraddr;

    HI_U32 u32Width;

    HI_U32 u32Height;

    if (VO_INTF_CVBS == g_enVoIntfType)
    {

        u32Width = WIDTH_720;

        u32Height = HEIGHT_576;

    }
    else
    {
        u32Width = WIDTH_1920;
        u32Height = HEIGHT_1080;
    }

    pstInfo = (PTHREAD_HIFB_SAMPLE_INFO*)(&stInfo0);

    switch (pstInfo->layer)
    {

        case GRAPHICS_LAYER_G0 :

            strcpy(file, "/dev/fb0");

            break;

        default:

            strcpy(file, "/dev/fb0");

            break;

    }

    /* 1. open framebuffer device overlay 0 */

    pstInfo->fd = open(file, O_RDWR, 0);

    if (pstInfo->fd < 0)

    {

        SAMPLE_PRT("open %s failed!\n", file);
        return HI_NULL;

    }

    bShow = HI_FALSE;

    if (ioctl(pstInfo->fd, FBIOPUT_SHOW_HIFB, &bShow) < 0)

    {

        SAMPLE_PRT("FBIOPUT_SHOW_HIFB failed!\n");

        return HI_NULL;
    }

    /* 2. set the screen original position */

    switch (pstInfo->layer)
    {

        case GRAPHICS_LAYER_G0:

        {

            stPoint.s32XPos = 0;

            stPoint.s32YPos = 0;

        }

        break;

        default:

            break;

    }

    if (ioctl(pstInfo->fd, FBIOPUT_SCREEN_ORIGIN_HIFB, &stPoint) < 0)
    {
        SAMPLE_PRT("set screen original show position failed!\n");

        close(pstInfo->fd);

        return HI_NULL;
    }
    /* 3. get the variable screen info */

    if (ioctl(pstInfo->fd, FBIOGET_VSCREENINFO, &var) < 0)
    {

        SAMPLE_PRT("Get variable screen info failed!\n");

        close(pstInfo->fd);

        return HI_NULL;

    }
    /* 4. modify the variable screen info

          the screen size: IMAGE_WIDTH*IMAGE_HEIGHT

          the virtual screen size: VIR_SCREEN_WIDTH*VIR_SCREEN_HEIGHT

          (which equals to VIR_SCREEN_WIDTH*(IMAGE_HEIGHT*2))

          the pixel format: ARGB1555

    */
    usleep(4 * 1000 * 1000);
    switch (pstInfo->layer)
    {
        case GRAPHICS_LAYER_G0:

        {

            var.xres_virtual = u32Width;

            var.yres_virtual = u32Height * 2;

            var.xres = u32Width;

            var.yres = u32Height;

        }

        break;

        default:

            break;

    }
    var.transp = s_a16;

    var.red = s_r16;

    var.green = s_g16;

    var.blue = s_b16;

    var.bits_per_pixel = 16;

    var.activate = FB_ACTIVATE_NOW;

    /* 5. set the variable screeninfo */

    if (ioctl(pstInfo->fd, FBIOPUT_VSCREENINFO, &var) < 0)

    {

        SAMPLE_PRT("Put variable screen info failed!\n");

        close(pstInfo->fd);

        return HI_NULL;

    }

    /* 6. get the fix screen info */

    if (ioctl(pstInfo->fd, FBIOGET_FSCREENINFO, &fix) < 0)

    {

        SAMPLE_PRT("Get fix screen info failed!\n");

        close(pstInfo->fd);

        return HI_NULL;

    }

        while(1)
        {
             sleep(10);
             printf("................\n");
        }
    return s32Ret;

SAMPLE_HIFB_NoneBufMode_1:

    SAMPLE_COMM_VO_StopDev(VoDev);

SAMPLE_HIFB_NoneBufMode_0:

    SAMPLE_COMM_SYS_Exit();
    return s32Ret;

}

qq382903916

0个粉丝

1

问答

0

专栏

0

资料

qq382903916 2018-02-26 20:30:35
认可0
qt好像一直阻塞没反应。。。。。

hero

0个粉丝

1

问答

0

专栏

0

资料

hero 2018-02-27 08:36:09
认可0
Mark     :lol:lol

做个好菜鸟

0个粉丝

13

问答

0

专栏

0

资料

做个好菜鸟 2018-02-27 15:08:25
认可0
楼主好,我是在HI3531上移植的QT,把我移植成功后的一些注意点分享一下,给楼主做个参考:
1、要在Qapplication a(argc,argv);之前进行hifb的开启与初始化工作。
2、qt好像只支持ARGB8888模式,因此在初始化hifb时配置为ARGB8888
3、QT代码中添加    QWSServer::setBackground(QColor(0x0,0x0,0x0,0x0));

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区