目录

文章目录

  • 目录
  • 前言
  • 源码下载
  • SDL+FreeType+SDL_ttf库编译过程
    • freeType编译过程
    • SDL编译过程
    • SDL_ttf编译过程
  • 测试
  • 总结
  • 番外

前言

刚开始接触海思的时候要实现的功能就是OSD显示,虽然功能简单,但是要花了很长的时间,主要是对海思平台不够了解,同时对交叉编译测试还不太明白(虽然现在也不怎么明白),特此记录一下!当然也会抽时间把Hifb实现OSD的方式整理一下。毕竟Hifb是图形层叠加,而SDL+FreeType+SDL_ttf的方式是直接叠加在视频层,如果加上缩放就不好用了!
本文参考易百纳论坛,在这个论坛中找到许多解决问题的方法,希望以后有能力帮助别人吧!虽然对海思平台接触也不多!

源码下载

这里使用的就是易百纳论坛提供的源码文件。

SDL+FreeType+SDL_ttf库编译过程

freeType编译过程

  • 解压:tar -xvf freetype-2.4.10.tar.gz
  • 进入freeType目录:
./configure CC=arm-hisiv500-linux-gcc --host=arm-hisiv500-linux
  • make
  • make install

SDL编译过程

  • 解压:tar -xvf SDL-1.2.15.tar.gz
  • 进入SDL目录:
./configure CC=arm-hisiv500-linux-gcc --host=arm-hisiv500-linux --disable-alsa --disable-pulseaudio --enable-esd=no --prefix=/opt/sdl/install

出现问题1:

./src/audio/esd/SDL_esdaudio.c:30:17: fatal error: esd.h: 没有那个文件或目录

解决方法1:
加上--enable-esd=no,这个错误好像是音频相关的错误,这里直接关掉音频。

  • make
  • make install

SDL_ttf编译过程

  • 解压:tar xvf SDL_ttf-2.0.11.tar.gz
  • 进入SDL_ttf-2.0.11目录:
./configure CC=arm-hisiv500-linux-gcc --host=arm-hisiv500-linux

若上述过程成功,会在/usr/local目录下生成相应文件:
在/usr/local目录下执行tree -L 2(ps:有时间要研究下tree命令),结果如下:

.
├── bin
│   ├── freetype-config
│   └── sdl-config
├── etc
├── games
├── include
│   ├── freetype2
│   ├── ft2build.h
│   └── SDL
├── lib
│   ├── libfreetype.a
│   ├── libfreetype.la
│   ├── libfreetype.so -> libfreetype.so.6.9.0
│   ├── libfreetype.so.6 -> libfreetype.so.6.9.0
│   ├── libfreetype.so.6.9.0
│   ├── libSDL-1.2.so.0 -> libSDL-1.2.so.0.11.4
│   ├── libSDL-1.2.so.0.11.4
│   ├── libSDL.a
│   ├── libSDL.la
│   ├── libSDLmain.a
│   ├── libSDLmain.la
│   ├── libSDL.so -> libSDL-1.2.so.0.11.4
│   ├── libSDL_ttf-2.0.so.0 -> libSDL_ttf-2.0.so.0.10.1
│   ├── libSDL_ttf-2.0.so.0.10.1
│   ├── libSDL_ttf.a
│   ├── libSDL_ttf.la
│   ├── libSDL_ttf.so -> libSDL_ttf-2.0.so.0.10.1
│   ├── pkgconfig
│   ├── python2.7
│   └── python3.5
├── man -> share/man
├── sbin
├── share
│   ├── aclocal
│   ├── ca-certificates
│   ├── emacs
│   ├── fonts
│   ├── man
│   ├── sgml
│   └── xml
└── src
  • 拷贝生成sdl库
mkdir -C /opt/sdl_lib
cd /opt/sdl_lib
cp /usr/local/include/ ./ -rf
cp /usr/local/lib/ ./ -rf

测试

ps:这个程序不是我写的,感谢作者Sues

/*************************************************************************> File Name: test.c> Author: Sues> Mail: sumory.kaka@foxmail.com > Created Time: 2017年02月28日 星期二 21时47分05秒************************************************************************/#include <stdio.h>
#include "SDL.h"
#include "SDL_ttf.h"int main(int argc, const char *argv[])
{char * pstr = "hello";SDL_PixelFormat *fmt;TTF_Font *font;  SDL_Surface *text, *temp;  if (TTF_Init() < 0 ) {  fprintf(stderr, "Couldn't initialize TTF: %s\n", SDL_GetError());  SDL_Quit();}  font = TTF_OpenFont("./simhei.ttf", 48); if ( font == NULL ) {  fprintf(stderr, "Couldn't load %d pt font from %s: %s\n", 18, "ptsize", SDL_GetError());  }  SDL_Color forecol = { 0xff, 0xff, 0xff, 0xff };  text = TTF_RenderUTF8_Solid(font, pstr, forecol);fmt = (SDL_PixelFormat*)malloc(sizeof(SDL_PixelFormat));memset(fmt,0,sizeof(SDL_PixelFormat));fmt->BitsPerPixel = 16;fmt->BytesPerPixel = 2;fmt->colorkey = 0xffffffff;fmt->alpha = 0xff;temp = SDL_ConvertSurface(text,fmt,0);SDL_SaveBMP(temp, "save.bmp"); free(fmt);SDL_FreeSurface(text);  SDL_FreeSurface(temp);TTF_CloseFont(font);  TTF_Quit();  return 0;
}

编译命令:

arm-hisiv500-linux-gcc test.c `sdl-config --cflags --libs` -I/opt/sdl_lib/include -I/opt/sdl_lib/include/SDL -L/opt/sdl_lib/lib -lSDL -lSDL_ttf -Wl,-rpath -o test

在开发板上执行test,会生成save.bmp,打开后可以发现是Hello!
注意:执行需要

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/sdl_lib/lib #/opt/sdl_lib/lib目录是我存放动态库文件的地方
# 同时需要在test文件下防止simhei.ttf文件,这样才能找到字体

总结

参考的是如下博主的资源,感谢这位博主的分享!
参考链接

番外

因为BMP图片不能设置透明,所以显示的图在视频帧上会导致视频的背景是黑色的,而且无法去除。这个问题我纠结了好久,最后也是在易百纳论坛找到的解决方法!
重点在于zhuangweiye大神的回答:


s32Ret = SAMPLE_RGN_UpdateCanvas("sys_time.bmp", &stBitmap, HI_TRUE, 0x8000, &stSize, stCanvasInfo.u32Stride, stRgnAttrSet.unAttr.stOverlayEx.enPixelFmt);

有时间再把区域+SDL的方法显示位图这一部分搞上来,暂时还是写写编译的东西吧!

Hi3519V101移植SDL+FreeType+SDL_ttf相关推荐

  1. Hi3516a移植SDL+FreeType+SDL_ttf

    SDL+FreeType+SDL_ttf库编译过程 freeType编译过程 解压:tar -xvf freetype-2.4.10.tar.gz 进入freeType目录: ./configure ...

  2. ARM Linux下编译freetype、sdl、sdl_ttf

    当前使用环境 开发平台:ubuntu18.04.1 x86_64 海思硬件:GK7605 交叉编译工具链:arm-gcc6.3-linux-uclibceabi-(其他平台及工具链类似) 1.下载库及 ...

  3. SDL使用SDL_ttf显示文字

    搞了一天终于成功显示了,网上找了好多资料都不能正常显示,出现各种异常,最后终于用这种方式搞定了 先看显示效果 备注一下: 两个库的版本分别为SDL1.3.0.0   SDL_ttf-2.0.11 编程 ...

  4. hi3519v101移植rtl8189ftv(sdio)驱动

    1.下载rtl8189ftv驱动: git clone https://github.com/jwrdegoede/rtl8189ES_linux.git git checkout -b rtl818 ...

  5. 海思osd+freetype+SDL+SDL_ttf编译成功后,Makefile的编写

    请先移步我的上一篇转载博文http://blog.csdn.net/qq_26671365/article/details/78974661,这里先感谢一下博文的原创者,使我受益匪浅. 这里假设你已经 ...

  6. SDL及扩展库在ARM-Linux 完整移植

    SDL的正确运行需要大量的支持库 1.编译安装支持库 在ARM-LINUX编译SDL之前.需要编译如下安装库. 常见的库的iconv,zlib,freetype等都要 SDL支持库的移植参见.我的博客 ...

  7. SDL以及扩展库的交叉编译过程简介

    下面我介绍一下SDL以及SDL的扩展库在arm11上的交叉编译 在这里我将SDL 交叉编译的相关都安装在/opt/arm目录下 相关简介: SDL官方网站 http://www.libsdl.org/ ...

  8. 最简单的基于FFmpeg的移动端例子附件:SDL Android HelloWorld

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

  9. GUI 图片显示(SDL 多媒体开发库)——基于 rt-smart 微内核操作系统

    目录 SDL 跨平台多媒体开发库简介 快速体验 rt-smart:GUI SDL SDL GUI 开发环境搭建及演示 硬件环境搭建 软件环境搭建 1.下载 AR-Pi Smart SDK 2.下载和安 ...

最新文章

  1. html5 div 鼠标跟随,CSS实用:DIV+CSS打造跟随鼠标的层
  2. Stella 知识库--解析论坛的架构(1)
  3. LeetCode H-Index II(二分法)
  4. 汇编语言随笔(13)- 外中断(可屏蔽中断)、实验15
  5. 《剑指offer》求二叉树的最小深度(非递归法)
  6. java替换html中的样式
  7. 前端学习(2182):keep-alive及其他问题
  8. Elasticsearch7.15.2 修改IK分词器源码实现基于MySql8的词库热更新
  9. qt中QHostAddress与QString相互转换
  10. [Node.js] 模块化 -- fs文件读取模块
  11. 真香!全场景AI计算开源框架MindSpore,我爱了
  12. 【五级流水线CPU】—— 6. 加载存储指令(14)
  13. UniqueIdentifier 数据类型
  14. 从键盘输入3个整数,输出其中最大数
  15. JavaScript JSON.stringify()
  16. ---Xubuntu简体中文版, USB盘启动安装方法!
  17. Windows 10 - 安装 Mysql - zip压缩包详细安装教程
  18. android MediaCodec 音频编解码的实现——转码
  19. oracle批量备份表的存储过程
  20. 实现手机来电铃声,通知铃声、警告铃声等音频定制化功能(一,添加扫描分区myimage)

热门文章

  1. CISCO思科考试考生注册指导手册
  2. 系统启动过程和系统安装过程
  3. 解决Idea中yml文件不显示小绿叶图标
  4. Sen2Cor对哨兵2号L1C数据的预处理
  5. 【游戏逆向】游戏玩家技能冷却分析
  6. 单片机流水灯全亮c语言程序,终极流水灯单片机C语言程序.doc
  7. Atmel ATSAMV70Q20 的 CAN 扩展帧收发设置
  8. Win 10上帝模式 的开启和高级隐藏文件
  9. [Unity3D]Unity3D官方案例SpaceShooter开发教程
  10. 流氓软件与流氓系统的清理故事