boboboblog

boboboblog

0个粉丝

2

问答

0

专栏

0

资料

boboboblog  发布于  2017-09-15 15:21:06
采纳率 0%
2个问答
5372

分享一个hi35xx上QT界面和音视频处理业务整合成一个程序的例子

 
本帖最后由 boboboblog 于 2017-9-15 16:07 编辑

1.目的:
        在海思hi35xx平台上,将QT界面显示和音视频处理业务整合为一个程序,简化开发步骤。以前看了本论坛的很多例子(比如goodman的帖子),很受启发,现将自己的实现也分享出来,抛砖引玉, 共同探讨。

2.思路:
        将hi35xx上的音视频应用业务编写成音视频应用业务共享库,然后在QT中直接引用。音视频应用业务库中完成MPP基础部分初始化、音视频业务初始化和处理、以及对QT来说比较重要的VO设备配置,因为QT的图形层是叠加在视频层上的。
        在QT中引入音视频应用业务库,调用音视频应用业务库的入口启动函数,完成音视频应用业务部分的功能,然后再进行QT本身的初始化和启动流程。

        (1)、音视频应用业务库的编译:以hi3521A为例,在mpp/sample/下面有很多的多媒体例子程序,这儿就以sample_vio例子编译成库进程说明;首先还是使用以前的编译环境,只对Makefile作一些小的修改就行,以前是编译输出执行程序,
        这儿改成编译输出为共享库就行,比如输出libvio.so库。
       
        (2)、在QT中引用音视频应用业务库:首先在QT项目文件中引入libvio.so库,因为VO设备要先进行初始化配置,所以在QT的main函数最开始处创建一个线程,然后调用libvio.so库的入口函数vio_main(为了不冲突,将sample_vio.c的mian改
        成了vio_main)。接着通过/dev/fb设备,对frame buffer进行相应配置,最后再执行QT程序的常规初始化处理。
我来回答
回答11个
时间排序
认可量排序

boboboblog

0个粉丝

2

问答

0

专栏

0

资料

boboboblog 2017-09-15 15:35:53
认可0
本帖最后由 boboboblog 于 2017-9-15 16:05 编辑

3.QT例子程序

//创建线程,运行libvio的入口程序,完成mpp初始化,视频业务初始化与处理,VO设置的配置
void vio_start(void)
{
    static pthread_t vio_pt;

    pthread_create(&vio_pt, NULL, vio_main, NULL);
}


//完成frame buffer分辨率、颜色格式相关参数配置
int frame_buffer_init(void)
{
        ......
        fb_fd = open( "/dev/fb0", O_RDWR, 0);
   
        //set the variable screeninfo  
         ioctl(fb_fd, FBIOPUT_VSCREENINFO, &var);
       
        ......
        return HI_SUCCESS;
}


//QT main
int main(int argc, char *argv[])
{
    //vio start
    vio_start();

    //frame buffer init
    frame_buffer_init();

    //QApp init
    QApplication a(argc, argv, QApplication::GuiServer);

    // wind init
    MainWindow w;
    w.show();

    return a.exec();
}

为了在QT中引用libvio.so,修改QT项目中的*.pro文件:
        LIBS +=  -L /opt/Hi352xx_SDK_Vx.x.x.x/mpp/sample/vio -lvio

4.总结:
        目前整合后的程序运行OK,视频采集和显示正常,QT界面也能正常的叠加到视频层上。运行时可能会提示库和字体找不到,指定一下存放目录就行了。

testforvc

0个粉丝

1

问答

0

专栏

0

资料

testforvc 2017-09-28 10:30:02
认可0
多谢分享 学习了

fengzheng822

0个粉丝

5

问答

0

专栏

0

资料

fengzheng822 2017-12-11 09:31:07
认可0
谢谢分享,学习一下

zcx

0个粉丝

2

问答

0

专栏

0

资料

zcx 2018-01-22 15:35:45
认可0
想了好久的问题,被点醒了,厉害了

hero

0个粉丝

1

问答

0

专栏

0

资料

hero 2018-02-06 08:14:59
认可0

多谢分享 学习了

qn1517817579

0个粉丝

0

问答

0

专栏

0

资料

qn1517817579 2018-03-02 11:30:05
认可0
谢谢分享!新手学习一下!

shineway

0个粉丝

0

问答

0

专栏

0

资料

shineway 2018-03-09 16:02:48
认可0
非常范德萨发发到付

ssbaoer89

0个粉丝

0

问答

0

专栏

0

资料

ssbaoer89 2019-08-14 17:59:45
认可0
222222 谷歌地图

qn1605712854

0个粉丝

0

问答

0

专栏

0

资料

qn1605712854 2020-11-20 09:57:49
认可0
小白请教前辈
文中说“只对Makefile作一些小的修改就行,以前是编译输出执行程序,
        这儿改成编译输出为共享库就行,比如输出libvio.so库。”
怎么修改才能实现了?请告知一下可以吗?
我把 Makefile 的TARGET=libhisivio.so改成这样,主函数改名后
编译出错了
opt/hisi-linux/x86-arm/aarch64-himix100-linux/host_bin/../target/usr/lib/crt1.o:在函数‘_start’中:
/home/sying/SDK_CPU_UNIFIED/build/script/aarch64-himix100-linux/aarch64_himix100_build_dir/src/glibc-2.24/csu/../sysdeps/aarch64/start.S:86:对‘main’未定义的引用
collect2: error: ld returned 1 exit status
/home/cxlvyy/HISDK/Hi3559AV100_SDK_V2.0.2.0/mpp/sample/hilibvio/../linux.mak:10: recipe for target 'libhisivio.so' failed
make: *** [libhisivio.so] Error 1

qn1551678766

0个粉丝

0

问答

0

专栏

0

资料

qn1551678766 2020-11-26 17:14:36
认可0
感谢分享!新手学习一下!:)

ꫛꫀꪝ陈二狗

0个粉丝

1

问答

0

专栏

0

资料

ꫛꫀꪝ陈二狗 2021-05-10 15:59:48
认可0

感谢分享。

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

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区