SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3848|回复: 0
打印 上一主题 下一主题

[Discuss] 把openh264链入Visual Studio

[复制链接]

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
跳转到指定楼层
楼主
发表于 2017-7-16 14:47:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ancientcc 于 2017-7-16 14:48 编辑

为什么要把openh264链入Visual Studio
  openh264功能丰富,这里只链入webrtc需要的模块:Windows上的H264编码。webrtc框架处理H264时,iOS、Android都是用硬编码、硬解码,因而不须要openh264,至于Windows平台是openh264编码,ffmpeg解码。
  openh264代码量大,既然只要H264编码,那就要做到只编译这一部分源码。

webrtc中的openh264
  相比于openh264官方是供的源码包,webrtc源包码中包括了google特有的*.gn编译。通过看*.gn相关文件就能知道怎么编写*.sln了。
  只须要编码模块,openh264.def移除WelsCreateSVCDecoder、WelsDestroySVCDecoder。

Visual Studio中yasm的命令行
  1. yasm -Xvc -DX86_32 -DPREFIX -g cv8 -f win32  -I"." -I"$(SolutionDir)../../codec/common/x86" "%(FullPath)" -o $(IntDir)sample_sc.obj
  2. -DPREFIX:让输出函数的函数名有“_”前缀。
复制代码
  asm中实现的输出函数(global修饰)一旦不加“_”,外面的C代码就无法调用这函数,链接时时会出未定义符号错,这里提供个快速判断asm生成的obj是否带“_”的方法。更多这方面细节参数“把ffmpeg链入Visual Studio”。
  我是按以下逻辑得出要定义“PREFIX”。以要输出WelsCPUIdVerify为例,它是在cpuid.asm实现,以下是定义语句。
  1. <openh264>/codec/common/x86/cpuid.asm
  2. WELS_EXTERN WelsCPUIdVerify

  3. <openh264>/codec/common/x86/asm_inc.asm
  4. %macro WELS_EXTERN 1
  5.     ALIGN 16, nop
  6.     %ifdef PREFIX
  7.         global _%1
  8.         %define %1 _%1
  9.     %else
  10.         global %1
  11.     %endif
  12.     %1:
  13. %endmacro
复制代码
按WELS_EXTERN定义,只有定义了“PREFIX”才会增加向函数增加“_”。但让我感到奇怪,BUILD.gn中对x86是不定义PREFIX!
  1. <openh264>/BUILD.gn
  2.   yasm_assemble("openh264_common_yasm") {
  3.     include_dirs = openh264_common_include_dirs
  4.     sources = openh264_common_sources_asm_x86
  5.     if (target_cpu == "x86") {
  6.       defines = [ "X86_32" ]
  7.     } else {  # x64
  8.       if (is_mac) {
  9.         defines = [
  10.           "PREFIX",
  11.           "UNIX64",
  12.         ]
  13.       } else if (is_win) {
  14.         defines = [ "WIN64" ]
  15.       } else if (is_linux) {
  16.         defines = [ "UNIX64" ]
  17.       }
  18.     }
  19.   }
复制代码
只有iOS、Mac OS X才定义“PREFIX”。——但不定义“PREFIX”会出链接时不能找到函数错误。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-2 01:00 , Processed in 0.060182 second(s), 19 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表