Windows环境下编译 aom 源码详细过程

AV1

AV1是一种开源的视频编码格式,由开放媒体联盟(AOMedia Video 1,简称AOMedia或AOM)开发。AV1旨在提供比现有的视频编码格式如H.264和H.265更好的压缩效率,同时保持或提高视频质量。AV1的编码效率显著高于H.264,且与H.265相近,但AV1的解码复杂度较低,这意味着在相同的硬件条件下,AV1可以提供更快的解码速度。

AV1的主要优势包括:

  • 开放和免费:AV1是完全开源的,并且不需要支付专利费用,这使得它在商业和非商业应用中都非常有吸引力。

  • 高压缩率:AV1提供了比H.264和H.265更高的压缩率,这意味着在相同的视频质量下,AV1的视频文件可以更小。

  • 兼容性:AV1支持8K分辨率的视频,这使得它非常适合未来的视频应用,如超高清视频流和虚拟现实。

  • 跨平台:AV1可以在各种设备上运行,包括智能手机、平板电脑、PC和游戏机。

  • 实时编码:虽然AV1的编码过程比H.264和H.265更复杂,但随着硬件的发展,实时编码AV1视频已经成为可能。

AV1的劣势包括:

  • 编码时间:由于AV1的编码过程较为复杂,因此编码时间通常比H.264和H.265更长。

  • 解码要求:尽管AV1的解码复杂度低于H.265,但对于一些旧的或性能较低的设备来说,解码AV1视频可能仍然具有挑战性。

  • 市场接受度:尽管AV1具有许多优势,但它仍然是一个相对较新的技术,需要时间来获得广泛的市场接受度

aom

AOMedia Video 1视频组开发符合AV1标准的参考源码。

  • aom官网:https://aomedia.googlesource.com/?format=HTML
    在这里插入图片描述

Windows环境编译aom源码详细过程

  1. 源码下载:git clone https://aomedia.googlesource.com/aom;源码文件目录如下:
D:\_codec\aom [main ≡]> ls


    目录: D:\_codec\aom


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2024/5/11     23:03                aom
d-----         2024/5/11     23:03                aom_dsp
d-----         2024/5/11     23:03                aom_mem
d-----         2024/5/11     23:03                aom_ports
d-----         2024/5/11     23:03                aom_scale
d-----         2024/5/11     23:03                aom_util
d-----         2024/5/11     23:03                apps
d-----         2024/5/11     23:03                av1
d-----         2024/5/11     23:03                build
d-----         2024/5/11     23:03                common
d-----         2024/5/11     23:03                doc
d-----         2024/5/11     23:03                examples
d-----         2024/5/11     23:03                stats
d-----         2024/5/11     23:03                test
d-----         2024/5/11     23:03                third_party
d-----         2024/5/11     23:03                tools
-a----         2024/5/11     23:03            255 .clang-format
-a----         2024/5/11     23:03           3204 .cmake-format.py
-a----         2024/5/11     23:03            466 .gitattributes
-a----         2024/5/11     23:03             70 .gitignore
-a----         2024/5/11     23:03           5891 .mailmap
-a----         2024/5/11     23:03           7052 aomedia_logo_200.png
-a----         2024/5/11     23:03          12411 AUTHORS
-a----         2024/5/11     23:03          42892 CHANGELOG
-a----         2024/5/11     23:03          43052 CMakeLists.txt
-a----         2024/5/11     23:03            173 codereview.settings
-a----         2024/5/11     23:03          15260 docs.cmake
-a----         2024/5/11     23:03           2183 keywords.dox
-a----         2024/5/11     23:03         107932 libs.doxy_template
-a----         2024/5/11     23:03           1343 LICENSE
-a----         2024/5/11     23:03           1719 mainpage.dox
-a----         2024/5/11     23:03           5809 PATENTS
-a----         2024/5/11     23:03          25188 README.md
-a----         2024/5/11     23:03           2466 Sample.cfg
-a----         2024/5/11     23:03           5327 usage.dox
-a----         2024/5/11     23:03            232 usage_cx.dox
-a----         2024/5/11     23:03            977 usage_dx.dox

  1. 根据README.md提示下载依赖工具
### Prerequisites {#prerequisites}

1. [CMake](https://cmake.org). See CMakeLists.txt for the minimum version
   required.
2. [Git](https://git-scm.com/).
3. A modern C compiler. gcc 6+, clang 7+, Microsoft Visual Studio 2019+ or
   the latest version of MinGW-w64 (clang64 or ucrt toolchains) are
   recommended. A C++ compiler is necessary to build the unit tests and some
   features contained in the examples.
4. [Perl](https://www.perl.org/).
5. For x86 targets, [yasm](http://yasm.tortall.net/) or a recent version (2.14
   or later) of [nasm](http://www.nasm.us/). (If both yasm and nasm are
   present, yasm will be used by default. Pass -DENABLE_NASM=ON to cmake to
   select nasm.) If you download yasm with the intention to work with Visual
   Studio, please download win32.exe or win64.exe and rename it into yasm.exe.
   DO NOT download or use vsyasm.exe.
6. Building the documentation requires
   [doxygen version 1.8.10 or newer](http://doxygen.org).
7. Emscripten builds require the portable
   [EMSDK](https://kripken.github.io/emscripten-site/index.html).
  1. 下载CMake工具。
    在这里插入图片描述
D:\_codec\emsdk [main ≡]> cmake
Usage

  cmake [options] <path-to-source>
  cmake [options] <path-to-existing-build>
  cmake [options] -S <path-to-source> -B <path-to-build>

Specify a source directory to (re-)generate a build system for it in the
current working directory.  Specify an existing build directory to
re-generate its build system.

Run 'cmake --help' for more information.
  1. 下载git:https://git-scm.com/
    在这里插入图片描述
D:\_codec\emsdk [main ≡]> git
usage: git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           [--config-env=<name>=<envvar>] <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone     Clone a repository into a new directory
   init      Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add       Add file contents to the index
   mv        Move or rename a file, a directory, or a symlink
   restore   Restore working tree files
   rm        Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
   bisect    Use binary search to find the commit that introduced a bug
   diff      Show changes between commits, commit and working tree, etc
   grep      Print lines matching a pattern
   log       Show commit logs
   show      Show various types of objects
   status    Show the working tree status

grow, mark and tweak your common history
   branch    List, create, or delete branches
   commit    Record changes to the repository
   merge     Join two or more development histories together
   rebase    Reapply commits on top of another base tip
   reset     Reset current HEAD to the specified state
   switch    Switch branches
   tag       Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch     Download objects and refs from another repository
   pull      Fetch from and integrate with another repository or a local branch
   push      Update remote refs along with associated objects

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.
See 'git help git' for an overview of the system.
  1. A modern C compiler. gcc 6+, clang 7+, Microsoft Visual Studio 2019+ or the latest version of MinGW-w64 (clang64 or ucrt toolchains)。
  2. nasm安装
D:\_codec\emsdk [main ≡]> nasm
nasm: fatal: no input file specified
Type C:\Users\yance\AppData\Local\bin\NASM\nasm.exe -h for help.
  1. 从官网下载Doxygen安装软件。
    在这里插入图片描述
    Doxygen
    在这里插入图片描述

  2. 安装Graphviz:https://www.graphviz.org/download/,点击安装即可,注意要勾选到环境变量中。
    在这里插入图片描述
    在这里插入图片描述

  3. 从Perl官网下载安装包,下载MSI后缀的安装包。Perl是一种计算机程序语言。
    在这里插入图片描述
    安装配置Perl,点击下载下来的strawberry-perl-5.38.2.2-64bit.msi进行安装,一直next下去即可。
    在这里插入图片描述
    在这里插入图片描述
    验证Perl:PowerShell中输入命令 perl -v,出现如下提示信息即表示安装成功。

C:\Users\yance> perl -v
Locale 'Chinese (Simplified)_China.936' is unsupported, and may crash the interpreter.

This is perl 5, version 38, subversion 2 (v5.38.2) built for MSWin32-x64-multi-thread

Copyright 1987-2023, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at https://www.perl.org/, the Perl Home Page.
  1. EMSDK安装,下载:https://github.com/emscripten-core/emsdk,之后cd到源码,输入如下命令
.\emsdk update
git pull
.\emsdk install --global latest
.\emsdk activate latest
.\emsdk_env.bat

EMSDK验证:

D:\_codec\emsdk [main ≡]> emcc -v
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.59 (0e4c5994eb5b8defd38367a416d0703fd506ad81)
clang version 19.0.0git (https:/github.com/llvm/llvm-project df762a1643bb5b0b3c907611d118c82d4b68a39d)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: D:\_codec\emsdk\upstream\bin
  1. 用CMake-GUI生成sln文件:按照1-2-3-4-5的过程即可生成sln文件

在这里插入图片描述
生成sln文件:
在这里插入图片描述

  1. 用VS2022打开sln文件,点击运行:一段时间等待,完成编译。
    在这里插入图片描述
    在目录可以看到生成的所有库文件和可执行文件,后续可以研究aom源码了。
D:\_codec\aom\build\debug [main ≡ +1963 ~0 -0 !]> ls


    目录: D:\_codec\aom\build\debug


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         2024/5/12     10:10       40067812 aom.lib
-a----         2024/5/12     10:10       18613760 aomdec.exe
-a----         2024/5/12     10:10       18788352 aomdec.pdb
-a----         2024/5/12     10:10       18707456 aomenc.exe
-a----         2024/5/12     10:10       18919424 aomenc.pdb
-a----         2024/5/12     10:10         191722 aom_av1_rc.lib
-a----         2024/5/12     10:10         438272 aom_av1_rc.pdb
-a----         2024/5/12     10:10       18641408 aom_cx_set_ref.exe
-a----         2024/5/12     10:10       18845696 aom_cx_set_ref.pdb
-a----         2024/5/12     10:09        2789186 aom_gmock.lib
-a----         2024/5/12     10:09        1404928 aom_gmock.pdb
-a----         2024/5/12     10:09        9564822 aom_gtest.lib
-a----         2024/5/12     10:09        1847296 aom_gtest.pdb
-a----         2024/5/12     10:09           2112 aom_pc.lib
-a----         2024/5/12     10:09          69632 aom_pc.pdb
-a----         2024/5/12     10:03           2206 aom_version.lib
-a----         2024/5/12     10:03          69632 aom_version.pdb
-a----         2024/5/12     10:10       18588160 decode_to_md5.exe
-a----         2024/5/12     10:10       18755584 decode_to_md5.pdb
-a----         2024/5/12     10:10       18588672 decode_with_drops.exe
-a----         2024/5/12     10:10       18755584 decode_with_drops.pdb
-a----         2024/5/12     10:10       18592256 dump_obu.exe
-a----         2024/5/12     10:10       18796544 dump_obu.pdb
-a----         2024/5/12     10:10       18661888 lightfield_bitstream_parsing.exe
-a----         2024/5/12     10:10       18894848 lightfield_bitstream_parsing.pdb
-a----         2024/5/12     10:10       18597376 lightfield_decoder.exe
-a----         2024/5/12     10:10       18771968 lightfield_decoder.pdb
-a----         2024/5/12     10:10       18705408 lightfield_encoder.exe
-a----         2024/5/12     10:10       18886656 lightfield_encoder.pdb
-a----         2024/5/12     10:10       18593280 lightfield_tile_list_decoder.exe
-a----         2024/5/12     10:10       18763776 lightfield_tile_list_decoder.pdb
-a----         2024/5/12     10:10       18634240 lossless_encoder.exe
-a----         2024/5/12     10:10       18837504 lossless_encoder.pdb
-a----         2024/5/12     10:10       18644480 noise_model.exe
-a----         2024/5/12     10:10       18837504 noise_model.pdb
-a----         2024/5/12     10:10       18638336 photon_noise_table.exe
-a----         2024/5/12     10:10       18837504 photon_noise_table.pdb
-a----         2024/5/12     10:10       18589696 scalable_decoder.exe
-a----         2024/5/12     10:10       18755584 scalable_decoder.pdb
-a----         2024/5/12     10:10       18637312 scalable_encoder.exe
-a----         2024/5/12     10:10       18837504 scalable_encoder.pdb
-a----         2024/5/12     10:10       18635776 set_maps.exe
-a----         2024/5/12     10:10       18829312 set_maps.pdb
-a----         2024/5/12     10:10       18588160 simple_decoder.exe
-a----         2024/5/12     10:10       18739200 simple_decoder.pdb
-a----         2024/5/12     10:10       18635264 simple_encoder.exe
-a----         2024/5/12     10:10       18837504 simple_encoder.pdb
-a----         2024/5/12     10:10       18756096 svc_encoder_rtc.exe
-a----         2024/5/12     10:10       18993152 svc_encoder_rtc.pdb
-a----         2024/5/12     10:10       19226112 test_aom_rc.exe
-a----         2024/5/12     10:10       23744512 test_aom_rc.pdb
-a----         2024/5/12     10:10       19263488 test_intra_pred_speed.exe
-a----         2024/5/12     10:10       23531520 test_intra_pred_speed.pdb
-a----         2024/5/12     10:11       50193408 test_libaom.exe
-a----         2024/5/12     10:11      203837440 test_libaom.pdb
-a----         2024/5/12     10:10       18637312 twopass_encoder.exe
-a----         2024/5/12     10:10       18829312 twopass_encoder.pdb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/616506.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Xilinx 千兆以太网TEMAC IP核 MDIO 配置及物理接口

基于AXI4-Lite接口可以访问MDIO(Management Data Input/Output)接口&#xff0c;而MDIO接口连接MAC外部的PHY芯片&#xff0c;用户可通过AXI4-Lite接口实现对PHY芯片的配置。 1 MDIO接口简介 开放系统互连模型OSI的最低两层分别是数据链路层和物理层&#xff0c;数据链路层的…

【PHP【实战版】系统性学习】——登录注册页面的教程,让编写PHP注册变成一个简单的事情

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

Unity编辑器如何多开同一个项目?

在联网游戏的开发过程中&#xff0c;多开客户端进行联调是再常见不过的需求。但是Unity并不支持编辑器多开同一个项目&#xff0c;每次都得项目打个包(耗时2分钟以上)&#xff0c;然后编辑器开一个进程&#xff0c;exe 再开一个&#xff0c;真的有够XX的。o(╥﹏╥)o没错&#…

如何利用ChatGPT辅助下处理:ENVI、GEE、Python等遥感数据

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本课程重点介绍ChatGPT在遥感中的应用&#xff0c;人工智…

重卡生产流程的可视化管理与优化

重卡车间可视化是一个将车间内部生产流程、设备状态及人员配置直观展现的技术手段&#xff0c;确保制造过程的每个环节都在最优状态下运行。 在重卡制造领域&#xff0c;从底盘组装、车身焊接、涂装到最终的总装和检验&#xff0c;每一个工作过程都至关重要&#xff0c;对于保…

web入门——导航栏

本专栏内容代码来自《响应式web&#xff08;HTML5CSS3Bootstrap&#xff09;》教材。 导航栏 实现代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content&…

基于springboot的代驾管理系统的设计与实现

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

DI-engine强化学习入门(七)如何自定义神经网络模型

在强化学习中,需要根据决策问题和策略选择合适的神经网络。DI-engine中,神经网络模型可以通过两种方式指定: 使用配置文件中的cfg.policy.model自动生成默认模型。这种方式下,可以在配置文件中指定神经网络的类型(MLP、CNN等)以及超参数(隐层大小、激活函数等),DI-engine会根据…

https://是怎么实现的?

默认的网站建设好后都是http访问模式&#xff0c;这种模式对于纯内容类型的网站来说&#xff0c;没有什么问题&#xff0c;但如果受到中间网络劫持会让网站轻易的跳转钓鱼网站&#xff0c;为避免这种情况下发生&#xff0c;所以传统的网站改为https协议&#xff0c;这种协议自己…

文本检测模型 DBNet 一种基于分割算法的模型 对每个像素点进行自适应二值化,并将二值化过程与网络训练相结合 可微分二值化模块 概率图

文本检测模型 DBNet DBNet文本检测模型是一种基于分割算法的模型,其优化之处在于对每个像素点进行自适应二值化,并将二值化过程与网络训练相结合。 传统的文本检测方法通常将二值化作为一个后处理步骤,与网络训练分开进行。而DBNet则提出了一种可微分的二值化方法,即将文…

常见的几种物联网无线组网技术——青创智通

工业物联网解决方案-工业IOT-青创智通 随着物联网技术的不断发展&#xff0c;无线组网技术成为了物联网中不可或缺的一部分。无线组网技术可以使得各种设备之间无需通过有线连接即可进行数据传输和通信&#xff0c;从而提高了设备的灵活性和可扩展性。下面将介绍几种常见的物联…

行业分析---马斯克的Tesla

1 背景 在前面的博文《行业分析---我眼中的Apple Inc.》中&#xff0c;笔者曾介绍过苹果公司的财报和商业。依然本着提升自己看公司的能力&#xff0c;尝试去分析相对熟悉的公司&#xff0c;看懂它的商业。在之前的博客《自动驾驶---Tesla之FSD简介》中&#xff0c;笔者也简单介…

c++父类指针指向子类

有一个常见的c题&#xff0c;就是父类和子类的构造函数和析构函数分别调用顺序&#xff1a; 父类构造函数子类构造函数子类析构函数父类析构函数 以及父类中的函数在子类中重新实现后&#xff0c;父类指针指向子类后&#xff0c;该指针调用的函数是父类中的还是子类中的&…

Doris【部署 01】Linux部署MPP数据库Doris稳定版(下载+安装+连接+测试)

本次安装测试的为稳定版2.0.8官方文档 https://doris.apache.org/zh-CN/docs/2.0/get-starting/quick-start 这个简短的指南将告诉你如何下载 Doris 最新稳定版本&#xff0c;在单节点上安装并运行它&#xff0c;包括创建数据库、数据表、导入数据及查询等。 Linux部署稳定版Do…

简易留言板

目录 前端实现 数据库的使用 创建数据表 创建项目 连接数据库 后端实现 接口定义 持久层 业务逻辑层 控制层 前端代码完善 留言板是一个常见的功能&#xff0c;在本篇文章中&#xff0c;将实现一个简易的留言板&#xff1a; 页面中能够显示所有留言内容&#xff0c…

AI应用案例:新闻文本分类

随着科学技术的不断发展&#xff0c;互联网技术得以快速的发展和普及&#xff0c;并已在各行各业得到了广泛的应用&#xff0c;从中致使了网络上的信息呈现出爆炸式的增长状态&#xff0c;达到了“足不出户&#xff0c;万事皆知”的境况&#xff0c;充分体现了互联网新闻给生活…

深入理解WPF的ResourceDictionary

深入理解WPF的ResourceDictionary 介绍 在WPF中&#xff0c;ResourceDictionary用于集中管理和共享资源&#xff08;如样式、模板、颜色等&#xff09;&#xff0c;从而实现资源的重用和统一管理。本文详细介绍了ResourceDictionary的定义、使用和合并方法。 定义和用法 Res…

设施农业(大棚种植)远程监控系统设计 STM32+51单片机 含pcb 上下位机源码 原理图

目录 摘要 1. 引言 2. 系统方案 3. 系统硬件设计 4. 系统软件设计 5. 系统创新 6. 评测与结论 7、实物图 8、原理图 ​9、程序 10、资料内容 资料下载地址&#xff1a;设施农业(大棚种植)远程监控系统设计 STM3251单片机 含pcb 上下位机源码 原理图 论文 摘要 …

【论文笔记】Training language models to follow instructions with human feedback B部分

Training language models to follow instructions with human feedback B 部分 回顾一下第一代 GPT-1 &#xff1a; 设计思路是 “海量无标记文本进行无监督预训练少量有标签文本有监督微调” 范式&#xff1b;模型架构是基于 Transformer 的叠加解码器&#xff08;掩码自注意…

生产性服务业与生活性服务业如何区分

服务业的兴旺发达是现代经济的显著特征&#xff0c;是经济社会发展的必然趋势&#xff0c;是衡量经济发展现代化、国际化、高端化的重要标志。生产性服务业和生活性服务业是服务业的重要组成部分&#xff0c;是当前中国经济最具活力的产业&#xff0c;也是未来经济发展最具潜力…