- 收藏
- 点赞
- 分享
- 举报
Qt+海思sample基础代码,快速开发必备!!
[i=s] 本帖最后由 ymir 于 2019-9-26 22:55 编辑 [/i]
2019-09-26 其实在海思上使用Qt没有必要像该帖子的描述的方法那么复杂,而且使用帖子里描述的方式实施起来也特别的麻烦。从我发这个帖子到现在已经有四年了,我看大家还在关注这个老的帖子,真是过意不去。 Qt4.8的界面实现基于Framebuffer,因此在海思系统中,如果要使用Qt进行界面开发,你必须将Framebuffer初始化好,而初始化Fb,必须先初始化MPI系统。因此比较方便的方式就是使用海思的媒体库,编写一个媒体初始化动态库,此动态库完成MPI系统,FrameBuffer系统的配置,给Qt界面系统的运行创建环境。Qt的界面系统在QApplicatio启动之前都不会去动FrameBuffer,因此在你的QApplication对象调用exce()之前对媒体系统进行初始化动态库即可。 当然这个最终方式我早就发了帖子了,竟然没什么人看。。。 地址 http://bbs.ebaina.com/forum.php?mod=viewthread&tid=10915&extra=&page=1
这是我上一个粗略的过程,记录之前走过的路,大家也可以参考一下。我也是帮助了两个网友后突发的想写这个帖子, 帮助大家在Qt的移植过程中加快步伐! [=http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=8036&extra=page%3D1]我的上个帖子 Qt编译过程可以参看GoodMan大神的编译过程 地址:[=http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=8086&extra=page%3D1]嵌入式Qt编译过 我的Qt库的编译安装路径为/opt/Qt4.8 就是在编译的时候指定 --prefix /opt/Qt4.8 编译完成后的目录大概是这样的 [code][root@bogon:1 opt]# tree Qt4.8/ -L 1 Qt4.8/ ├── bin ├── include ├── lib ├── mkspecs ├── plugins └── translations[/code] 之后将海思sample目录下的东西库拷贝到这里 [code][root@bogon:1 opt]# tree Qt4.8/ -L 1 Qt4.8/ ├── bin ├── hilib // mpp 目录下的lib文件夹的内容都放在这里 ├── hinclude // mpp 目录下的include下的所有文件都放在这里 ├── include ├── lib ├── mkspecs ├── plugins └── translations[/code] 因为我们的目的是在代码中复用sample下的基础代码,然而这部分代码与内核代码,以及外部驱动代码都有一定的联系我之前试着 将这部分代码抽离出来,后来没成功。考虑到可能要做的移植工作很多,最后还是决定将qt工程嵌入到samplke目录下,直接使用其 各个目录下的Makefiel文件,因为他们都已经定义好了编译规则,我们只需要参考其他的工程文件的Makeifle即可定义好我们的规则。 开动: Qt库我就不说了,按照自己的配置也可以,只要将相应的库文件放进去就行了,库文件移植到板子的时候,只需要留下so动态库文 件即可,其余的静态库.a文件什么的,以及工具都删除即可,将库放到板子的同目录就可以了,在指定库搜索路径添加你的的动态 库路径。我之前写了个qt的测试程序,拖了几个控件,在windows上编译通过。之后我们将该工程代码放到sample目录下,大概是 这样的: [code] [root@bogon:1 sample]# tree -L 1 . ├── audio ├── common ├── guiclick //该目录为从测试工程目录,其中存放着代码 ├── hifb ├── LIB ├── Makefile ├── Makefile.param ├── QtBuild //该目录为新建的编译目录。 ├── region ├── tde ├── vda ├── vdec ├── venc ├── vio └── work[/code] 然后在~/.bashrc 中添加一行PATH=$PATH:/opt/Qt4.8.5 运行source ~/.bahrc 使变量生效,之后运行qmake如果有正常的输出,就是配置好了, 若没有检查相应的错误。 之后就开始我们的移植之路 我们将工程文件放到sample目录下。工程目录大概这样的: [code][root@bogon:1 sample]# tree -L 1 guiclick/ guiclick/ ├── guiclick.pro ├── guiclick.pro.user ├── main.cpp ├── mainwindow.cpp ├── mainwindow.h └── mainwindow.ui[/code] 然后我们在sample下新建一个编译目录: mkdir Qtbuild, 进入Qtbuild。 之后使用命令[root@bogon:1 QtBuild]# qmak -r ../guiclick/guiclick.pro生成Makefile 然后修改Makefile文件内容[color=Red],请注意下面变更的内容,尤其注意 “=”号前面是否有”:“,“+”等符号[/color] 修改Makefile内容 变更: [code] 9 ####### Compiler, tools and options 10 include ../Makefile.param // 添加一行: 添加sample目录编译控制文件。 11 CC = arm-hisiv100nptl-linux-gcc
14 #CFLAGS := -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES) //因为在上层的Makefile.parram中定义了CFALGS,而我们的编译需要依赖该 //选项,所以这里修改为+= 15 CFLAGS += -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
16 CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
16 CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES) 17 INCPATH := -I/opt/Qt4.8/mkspecs/qws/linux-arm-hisiv100nptl-g++ -I../guiclick -I/opt/Qt4.8/include/QtCore -I/opt/Qt4.8/include/QtNetwork -I/ opt/Qt4.8/include/QtGui -I/opt/Qt4.8/include -I. -I. -I../guiclick -I. //这里是添加海思库的头文件支持。 18 INCPATH += -I/opt/Qt4.8/hinclud -I.
21 LIBS := $(SUBLIBS) -L/opt/Qt4.8/lib -lQtGui -L/opt/Qt4.8/lib -lQtNetwork -lQtCore -lpthread //添加海思库文件依赖,为了方便,我们把所有的库文件都指定 22 LIBS += -L/opt/Qt4.8/hilib -lmpi -lhdmi -ltde -lanr -laec -ljpeg -lresampler -lVoiceEngine 23 AR = arm-hisiv100nptl-linux-ar cqs
86 .SUFFIXES: .o .c .cpp .cc .cxx .C 87 88 .cpp.o: 89 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" $(MPI_LIBS) $(AUDIO_LIBA) $(JPEGD_LIBA) // 添加这部分主要是在编译main.cpp的时候需要到这些库的支持,这些库在上层的Makefile.param中定义了 90
104 105 all: Makefile $(TARGET) 106 // 编译的目标文件依赖于公共代码,就是上层的common文件夹下的代码,使用该部分代码可以快速开发 107 $(TARGET): ui_mainwindow.h $(OBJECTS) $(COMM_OBJ) // 添加链接参数,加入海思库文件以及公共代码的编译.o文件 108 $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(COMM_OBJ) $(LIBS)
219 220 main.o: ../guiclick/main.cpp // CFLAG指定了common文件夹的头文件,而我们使用的sample的实例代码主要还是这部分,如果不加CFLAG //会有hi_common.h,以及某些驱动头文件找不到的错误,在编译的时候也需要指定库 221 $(CXX) -c $(CXXFLAGS) $(CFLAGS) $(INCPATH) -o main.o ../guiclick/main.cpp 222 [/code]
之后是guiclick/main.cpp文件内容的更改,主要是在该文件中对相关内容进行初始化。代码在二楼给出 之后就是可以编译了。运行make即可编译出来了。编译出来放到板子上运行就好咯。 PDF下载: [attach]2643[/attach]
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
-
2017-08-17 11:57:34
-
2015-07-28 11:33:12
-
2013-06-24 15:45:00
-
2021-05-31 17:34:29
-
2015-09-15 16:55:59
-
2017-04-11 10:21:01
-
2015-08-14 09:54:01
-
2016-04-08 23:45:46
-
2016-11-25 17:01:55
-
2016-08-26 10:17:04
-
2017-10-09 16:50:21
-
2015-01-30 20:24:25
-
2017-02-13 15:52:07
-
2015-07-06 12:27:16
-
2020-10-10 17:25:44
-
2022-11-21 18:35:47
-
2019-07-01 17:21:35
-
2016-11-04 18:55:16
-
2016-06-29 18:03:58
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
-
10EB-RV1126-BC-191板子运行自己编码的程序
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明