Developer Documentation

Table of Contents

1 Notes for external developers

本文档对内部FFmpeg开发人员最有用. 需要在其应用程序中使用API​​的外部开发人员应参考公共头文件中的API doxygen文档,并查看doc / examples和源代码中的示例以了解如何使用公共API.

您可以在商业程序中使用FFmpeg库,但建议您发布自己制作的任何补丁 . 在这种情况下,最好的处理方法是按照本文档其余部分中说明的准则将补丁发送到ffmpeg-devel邮件列表.

有关在外部程序中使用FFmpeg的更多详细法律信息,请阅读源代码树中的LICENSE文件,并查阅https://ffmpeg.org/legal.html .

2 Contributing

有两种方法使代码进入FFmpeg:

  • 将补丁提交到ffmpeg-devel邮件列表. 有关详细信息,请参见提交补丁 .
  • 直接将更改提交到主树.

无论采用哪种方式,更改都应由代码的维护者在提交之前进行检查. 并且他们应该遵循编码规则 . 进行提交的开发人员和作者应对其更改负责,并应尝试解决其提交原因的问题.

3 Coding Rules

3.1 Code formatting conventions

关于文件缩进,有以下准则:

  • Indent size is 4.
  • 禁止在Makefiles之外使用TAB字符,也不能使用任何形式的尾随空格. 包含两者的提交将被git存储库拒绝.
  • 您应该尝试将代码行限制为80个字符; 但是,仅当这可以提高可读性时,才这样做.
  • 使用K&R编码样式.

该演示文稿是受"缩进-i4 -kr -nut"启发的.

FFmpeg的主要优先事项是简单性和较小的代码大小,以最大程度地减少错误计数.

3.2 Comments

使用JavaDoc / Doxygen格式(请参见下面的示例),以便可以自动生成代码文档. 所有非平凡的函数都应在其上方加一个注释,以解释该函数的功能,即使只是一句话. 所有结构及其成员变量也应记录在案.

避免使用Qt样式和类似的Doxygen语法! 在其中,即替换//!///相似. 标记命令也应使用@语法,即使用@param而不是\param .

/**
 * @file
 * MPEG codec.
 * @author ...
 */

/**
 * Summary sentence.
 * more text ...
 * ...
 */
typedef struct Foobar {
    int var1; /**< var1 description */
    int var2; ///< var2 description
    /** var3 description */
    int var3;
} Foobar;

/**
 * Summary sentence.
 * more text ...
 * ...
 * @param my_parameter description of my_parameter
 * @return return value description
 */
int myfunc(int my_parameter)
...

3.3 C language features

FFmpeg用ISO C90语言编程,具有ISO C99的一些附加功能,即:

  • ' inline '关键字;
  • ' // '注释;
  • 指定的struct初始值设定项(' struct sx = {.i = 17}; ');
  • 复合文字(' x =(struct s){17,23}; ').
  • for具有变量定义的循环(' for(int i = 0; i <8; i ++) ');
  • 假定有符号整数的实现定义的行为与二进制补码的预期行为匹配. 整数转换中不可表示的值将被二进制截断. 有符号值的右移使用符号扩展名.

我们关心的所有编译器均支持这些功能,因此,除非它们绝对不会损害清晰度和性能,否则我们将不接受删除它们的补丁.

所有代码都必须使用最新版本的GCC和许多其他当前支持的编译器进行编译. 为确保兼容性,请不要使用其他C99功能或GCC扩展. 尤其要注意:

  • 混合声明和声明;
  • ' long long '(改用' int64_t ');
  • ' __attribute__ '不受' #ifdef __GNUC__ '或类似名称的保护;
  • GCC语句表达式(' (x =({int y = 4; y;}) ').

3.4 Naming conventions

所有名称都应包含下划线(_),而不是CamelCase. 例如," avfilter_get_video_buffer "是可接受的函数名称,而" AVFilterGetVideo "则不是. 类型名称是个例外,例如结构和枚举. 他们应该始终在CamelCase中.

命名变量和函数有以下约定:

  • 对于局部变量,不需要前缀.
  • 对于声明为static文件作用域变量和函数,不需要前缀.
  • For variables and functions visible outside of file scope, but only used internally by a library, an ff_ prefix should be used, e.g. ‘ff_w64_demuxer’.
  • 对于在文件范围之外可见的,在多个库内部使用的变量和函数,请使用avpriv_作为前缀,例如' avpriv_report_missing_feature '.
  • 每个图书馆都有自己的公共符号的前缀,除了常用的av_avformat_为libavformat流, avcodec_用于libavcodec的, swr_为libswresample等). 检查现有代码并相应选择名称. 请注意,出于追溯兼容的原因,一些没有这些前缀的符号也会被导出. 这些异常在lib<name>/lib<name>.v文件中声明.

此外,不应侵入为系统保留的名称空间. 以_t结尾的标识符由POSIX保留. 还要避免名称以___开头,后跟大写字母,因为它们是C标准保留的. 以_开头的名称在文件级别保留,并且不能用于外部可见的符号. 如有疑问,请避免使用以_开头的名称.

3.5 Miscellaneous conventions

  • 在libavformat和libavcodec中禁止使用fprintf和printf,请改用av_log().
  • 仅在必要时使用演员表. 如果不必要的括号不能使代码更易于理解,则也应避免.

3.6 Editor configuration

为了将Vim配置为遵循FFmpeg格式约定,请将以下代码段粘贴到.vimrc中

" indentation rules for FFmpeg: 4 spaces, no tabs
set expandtab
set shiftwidth=4
set softtabstop=4
set cindent
set cinoptions=(0
" Allow tabs in Makefiles.
autocmd FileType make,automake set noexpandtab shiftwidth=8 softtabstop=8
" Trailing whitespace and tabs are forbidden, so highlight them.
highlight ForbiddenWhitespace ctermbg=red guibg=red
match ForbiddenWhitespace /\s\+$\|\t/
" Do not highlight spaces at the end of line while typing on that line.
autocmd InsertEnter * match ForbiddenWhitespace /\t\|\s\+\%#\@<!$/

对于Emacs,将这些大致等效的行添加到.emacs.d / init.el中

(c-add-style "ffmpeg"
             '("k&r"
               (c-basic-offset . 4)
               (indent-tabs-mode . nil)
               (show-trailing-whitespace . t)
               (c-offsets-alist
                (statement-cont . (c-lineup-assignments +)))
               )
             )
(setq c-default-style "ffmpeg")

4 Development Policy

4.1 Patches/Committing

Licenses for patches must be compatible with FFmpeg.

贡献应根据LGPL 2.1许可,包括"或任何更高版本"条款,或者,如果您更喜欢礼物式许可证,则应获得ISCMIT许可证. 包含"或任何更高版本"子句的GPL 2也可以接受,但LGPL是首选. 如果添加新文件,请为其提供适当的许可证标题. 不要从随机位置复制和粘贴它,而要使用现有文件作为模板.

You must not commit code which breaks FFmpeg!

这意味着未完成的代码将被启用并中断编译,或编译但不起作用/中断回归测试. 未完成但被禁用的代码可能会在某些情况下被允许使用,例如缺少示例或具有少量功能子集的实现. 在您推送之前,请务必检查邮件列表中是否有任何评论者,并测试FATE.

Keep the main commit message short with an extended description below.

提交消息的首行应以' topic:short description '的形式作为标题,并与正文之间以换行符分隔,并包含为何需要进行更改的说明. 如果提交修复了错误跟踪器上的已知错误,则提交消息应包含其错误ID. 在Bug跟踪器上引用该问题并不能免除您在提交消息中编写bug摘录的麻烦.

Testing must be adequate but not excessive.

如果它对您和其他人都有效,并且通过了FATE,则可以提交它,只要它符合其他提交条件即可. 您不必担心测试过度. 如果您的代码有问题(可移植性,触发器编译器错误,异常环境等),则将报告这些问题并最终予以解决.

Do not commit unrelated changes together.

他们应该将它们分成独立的部分. 同样不要忘记,如果B部分依赖于A部分,但A不依赖于B部分,那么A可以并且应该首先提交并与B分开.将更改很好地划分为独立的部分可以使您在提交日志邮件列表更加容易. 这也有助于以后进行调试. 另外,如果您对拆分还是不拆分有疑问,请不要犹豫,在开发者邮件列表中询问/讨论.

Ask before you change the build system (configure, etc).

不要在未事先询问的情况下将更改提交到构建系统(Makefiles,configure脚本),该更改会更改行为,默认设置等. 这同样适用于编译器警告修复程序,外观琐碎的修复程序以及其他开发人员维护的代码. 通常,我们有理由按照自己的方式做事. 将您的更改作为补丁发送到ffmpeg-devel邮件列表,如果代码维护者说"确定",则可以提交. 这不适用于您编写和/或维护的文件.

Cosmetic changes should be kept in separate patches.

如果源缩进和其他外观更改与功能更改混合在一起,我们将拒绝它们,此类提交将被拒绝并删除. 每个开发人员都有自己的缩进样式,您不应更改它. 当然,如果您(重新)编写某些内容,则可以使用您自己的样式,即使我们希望整个FFmpeg的缩进是一致的(许多项目都采用给定的缩进样式,但我们不这样做). 如果您确实需要进行缩进更改(请避免这种情况),请严格将其与实际更改分开.

注意:如果必须将if(){..}放在一大段(> 5行)的代码上,则不要更改内部部分的缩进(不要将其向右移动)! 或者在单独的提交中这样做

Commit messages should always be filled out properly.

始终填写提交日志消息. 请在几行内容中说明您所做的更改以及更改的原因. 如果您修复了特定的错误,可以参考邮件列表中的帖子. 评论如"固定!" 或"已更改". 是不可接受的. 推荐格式:

area changed: Short 1 line description

details describing what and why and giving references.

Credit the author of the patch.

确保提交的作者设置正确. (请参阅git commit –author)如果应用了修补程序,请向ffmpeg-devel(或从何处获得修补程序)发送答案,说明您已应用了修补程序.

Complex patches should refer to discussion surrounding them.

当应用已在邮件列表上详细讨论过的补丁时,请在日志消息中引用该线程.

Always wait long enough before pushing changes

未经许可,请勿承诺他人积极维护的代码. 发送补丁到ffmpeg-devel. 如果没有人在合理的时间内回答(构建失败和安全修复为12小时,小更改为3天,大补丁为1周),如果您认为还可以,请提交补丁. 另请注意,维护人员可以简单地要求更多时间进行检查!

4.2 Code

API/ABI changes should be discussed before they are made.

在未首先在ffmpeg-devel邮件列表上进行讨论之前,请勿更改程序的行为(重命名选项等)或公共API或ABI. 请勿删除广泛使用的功能或特性(可以删除冗余代码).

Remember to check if you need to bump versions for libav*.

根据更改,您可能需要更改版本整数. 第一个组件的增加意味着与先前版本没有向后兼容性(例如,从公共API中删除功能). 增加第二个组件意味着向后兼容的更改(例如,向公共API添加功能或现有数据结构的扩展). 增加第三部分意味着值得注意的二进制兼容更改(例如,对解码器重要的编码器错误修复). 第三部分始终从100开始,以区分FFmpeg和Libav.

Warnings for correct code may be disabled if there is no other option.

编译器警告指出样式错误的潜在错误或代码. 如果警告类型始终指向正确且干净的代码,则应禁用该警告,而不是更改代码. 因此,其余警告可能是错误或正确的代码. 如果是错误,则必须修复该错误. 如果不是这样,则应更改代码以不生成警告,除非这会导致速度变慢或使代码混淆.

Check untrusted input properly.

在将它们用作数组索引或其他有风险的东西之前,切勿写入未分配的内存,切勿在数组末尾写入,始终检查从某些不受信任的源读取的值.

4.3 Documentation/Other

Subscribe to the ffmpeg-devel mailing list.

订阅ffmpeg-devel邮件列表很重要. 几乎所有不重要的补丁都将发送到那里进行审查. 其他开发人员可能会对您的贡献发表评论. 我们希望您能看到这些评论,并根据需要进行改进. (注意,经验丰富的提交者还有其他渠道,有时可能会跳过琐碎的修复程序.)此外,此处有关错误修复程序和其他开发人员对FFmpeg的改进的讨论可能对您有所帮助. 最后,通过成为列表订阅者,您的贡献将被立即发布到列表中,而不会受到非订阅者所经历的消息的影响.

但是,对于项目而言,与您订阅ffmpeg-devel列表相比,我们收到您的补丁更为重要. 如果您有补丁程序,并且不想订阅和讨论该补丁程序,那么请务必将其发送到列表中.

Subscribe to the ffmpeg-cvslog mailing list.

所有提交的差异都发送到ffmpeg-cvslog邮件列表. 一些开发人员阅读此列表以查看来自所有来源的所有代码库更改. 订阅此列表不是强制性的.

Keep the documentation up to date.

如果您更改行为或添加功能,请更新文档. 如果不确定如何最好地执行此操作,请将补丁发送到ffmpeg-devel,文档维护者将审核并提交您的东西.

Important discussions should be accessible to all.

尝试将重要的讨论和请求(也)保留在公共开发人员邮件列表中,以便所有开发人员都可以从中受益.

Check your entries in MAINTAINERS.

确保MAINTAINERS文件中没有所维护的代码库任何部分. 如果缺少您要维护的内容,请在其后加上您的名字. 如果在某个时候不再需要维护某些代码,那么请帮助寻找新的维护者,并且不要忘记更新MAINTAINERS文件.

我们认为我们的规则不太难. 如果您有意见,请与我们联系.

5 Code of conduct

对他人和第三方要友好和尊重. 以您自己想要的方式对待他人.

体贴. 并非每个人都拥有与您相同的观点和优先事项. 不同的意见和解释对项目有帮助. 从不同的角度看待问题有助于发展.

不要为可归因于无能的事情而assume之以鼻. 即使是恶意的,也很难以此作为初始假设.

即使有人违规,也要保持友好. 每个人偶尔都会遇到糟糕的一天. 如果您自己的日子不好或生气,那么请尝试休息一下,并在冷静后回复,而不必生气.

如果可以,请尝试帮助其他团队成员并进行合作.

软件开发的目标是创造卓越的技术,而不是让任何人变得更好并与他人"取胜". 大型软件项目只有通过团队合作才能成功.

如果有人挣扎,不要放下他们. 相反,请给他们伸出援助之手,并向他们指出正确的方向.

最后,请记住Bill和Ted不朽的话:"彼此友善".

6 Submitting patches

首先,如果尚未阅读上面的编码规则 ,尤其是有关补丁提交的规则.

提交补丁程序时,请使用git format-patchgit send-email . 我们看不到其他差异:-).

另外,请不要提交包含多个不相关更改的补丁. 将其拆分为独立的独立块. 这并不意味着按文件分割文件. 取而代之的是,使补丁尽可能小,同时仍将其保持为包含单个更改的逻辑单元,即使它跨越多个文件也是如此. 这使我们更轻松地查看补丁程序,并大大增加了应用补丁程序的机会.

使用FFmpeg的patcheck工具检查补丁. 该工具位于工具目录中.

提交补丁之前,请运行回归测试 ,以验证它不会引起意外问题.

如果您告诉我们补丁程序的功能(例如"用lrintf替换lrint")以及原因(例如" * BSD不符合C99且没有lrint()"),那么它也有很大帮助.

另外,如果您发送多个补丁,请将每个补丁作为单独的邮件发送,请勿将多个无关的补丁附加到同一封邮件中.

修补程序应发布到ffmpeg-devel邮件列表中. 尽可能使用git send-email ,因为它可以正确发送补丁,而无需额外的照顾. 如果不能,则将修补程序作为以base64编码的附件发送,这样您的修补程序就不会在传输过程中被丢弃. 另外,请确保使用正确的mime类型(文本/ x-diff或文本/ x-patch或至少是text / plain),并且每个邮件仅内嵌或附加一个补丁. 您可以检查https://patchwork.ffmpeg.org ,如果您的补丁未显示,则其MIME类型可能是错误的.

您的补丁将在邮件列表中进行审查. 您可能会被要求进行一些更改,并期望发送包含合并请求的改进版本. 此过程可能会经历几次迭代. 一旦您的补丁被认为足够好,一些开发人员就会将其选中并将其提交给官方的FFmpeg树.

给我们几天时间来回应. 但是,如果一段时间没有反应,请通过电子邮件发送提醒. 您的补丁最终应得到处理.

7 New codecs or formats checklist

  1. 您是否使用av_cold进行编解码器初始化和关闭功能?
  2. 您是否在NULL_IF_CONFIG_SMALL下将long_name添加到AVCodec或AVInputFormat / AVOutputFormat结构?
  3. 您是否在libavcodec / version.hlibavformat / version.h更改了次要版本号(并重置了微型版本号)?
  4. 您是否在allcodecs.callformats.c中注册了它?
  5. 您是否将AVCodecID添加到avcodec.h中 ? 添加新的编解码器ID时,还要在libavcodec / codec_desc.c中的编解码器描述符列表中添加一个条目.
  6. 如果它具有FourCC,即使仅是解码器,您是否也将其添加到libavformat / riff.c中
  7. 您是否添加了规则来编译Makefile中的相应文件? 即使您只是将格式添加到已经由其他规则(例如原始解复用器)编译的文件中,也请记住这样做.
  8. 您是否在doc / general.texi中将条目添加到支持的格式或编解码器表中?
  9. 您是否在变更日志中添加了条目?
  10. 如果它依赖于解析器或库,是否在configure中添加了该依赖关系?
  11. 在提交之前,您是否git add了适当的文件?
  12. 您是否确定它可以独立编译,即使用configure --disable-everything --enable-decoder=foo (或--enable-demuxer或您的组件是什么)?

8 Patch submission checklist

  1. 应用了补丁程序后, make fate通过吗?
  2. 补丁是用git format-patch还是send-email生成的吗?
  3. 您是否签署了补丁程序? ( git commit -s )查看登录你的工作签退的意思.
  4. 您是否提供了明确的git commit日志消息?
  5. 是针对最新FFmpeg git master分支的补丁吗?
  6. 您订阅了ffmpeg-devel吗? (该列表仅是由于垃圾邮件的订阅者)
  7. 您是否检查过更改是否很小,以至于较小的补丁和/或更简单的最终代码无法实现相同的目的?
  8. 如果更改是为了加快关键代码的速度,您是否对其进行了基准测试?
  9. 如果您进行了任何基准测试,是否在邮件中提供了基准?
  10. 您是否检查过补丁程序不会引起缓冲区溢出或其他安全问题?
  11. 您是否对解码器或解复用器进行了针对损坏数据的测试? 如果否,请参阅工具/传送器,噪声比特流滤波器和zzuf . 当馈送损坏的数据时,您的解码器或解复用器不应崩溃,以(近)无限循环结尾或分配可笑的内存量.
  12. 您是否针对示例文件测试了解码器或解复用器? 可以从https://samples.ffmpeg.org获得样本.
  13. 贴剂是否不混合功能性和外观变化?
  14. 您是否在代码中添加了制表符或尾随空格? 两者都被禁止.
  15. 补丁是否附在您发送的电子邮件上?
  16. 补丁的mime类型正确吗? 它应该是text / x-diff或text / x-patch或至少text / plain,而不是application / octet-stream.
  17. 如果补丁程序修复了错误,是否对错误进行了详细分析?
  18. 如果补丁程序修复了错误,您是否提供了足够的信息(包括示例),以便可以复制该错误并可以验证该修复程序? 请注意,请勿将大于100k的示例附加到邮件中,而应提供URL,您可以上传到ftp://upload.ffmpeg.org.
  19. 您是否提供了有关补丁程序更改的详细摘要?
  20. 您是否提供了冗长的解释,为什么它会像现在这样改变事情?
  21. 如果应用了补丁,您是否提供了用户可见优点和缺点的详细摘要?
  22. 您是否提供了一个示例,以便我们可以轻松验证补丁程序添加的新功能?
  23. 如果添加了新文件,是否插入了许可证标题? 它应取自FFmpeg,而不是从其他位置随机复制和粘贴.
  24. 您应该在字母顺序列表中保持字母顺序,只要这样做不会破坏API / ABI兼容性.
  25. 内容相似的行应垂直对齐,以提高可读性.
  26. 考虑为您的代码添加回归测试.
  27. 如果添加了YASM代码,请检查–disable-yasm是否仍可使用.
  28. 确保检查函数的返回值并返回适当的错误代码. 众所周知,尤其是像av_malloc()这样的内存分配函数没有得到检查,这是一个严重的问题.
  29. 使用valgrind和/或Address Sanitizer测试您的代码,以确保其没有泄漏,无数组访问等问题.

9 Patch review process

除非已明确指出该补丁程序不适用于git master分支,否则所有发布到ffmpeg-devel的补丁程序都将受到审核. 评论和评论将作为对补丁程序的回复发布在邮件列表中. 然后,补丁提交者必须处理每个评论,可以通过重新提交更改的补丁或通过讨论来解决. 重新提交的修补程序本身将像其他任何修补程序一样进行审查. 如果某个补丁通过审核且没有任何评论,那么它就会被批准,这可能会导致简单补丁和小补丁立即发生,而大补丁通常需要更改并审核多次才能批准. 补丁获得批准后,将被提交到存储库.

我们将审核所有提交的补丁程序,但有时我们会很忙,因此特别是对于大型补丁程序可能需要数周的时间.

如果您认为审核过程太慢,并且愿意尝试接管您所更改的代码区域的维护工作,则只需克隆git master并在此处维护代码区域. 我们将合并每个维护得最好的区域.

重新提交补丁时,请不要进行与审核期间收到的评论无关的任何重大更改. 这样的补丁将被拒绝. 而是将重大更改或新功能作为单独的补丁提交.

欢迎大家查看补丁. 另外,如果您正在等待补丁程序的审查,请考虑帮助审查其他补丁程序,这是一种使所有人的补丁程序尽快得到审查的好方法.

10 Regression tests

在提交补丁(或提交到存储库)之前,您至少应该测试一下您没有破坏任何东西.

运行" make fate"即可完成此操作,请参阅fate.html了解详细信息.

[当然,某些补丁可能会改变回归测试的结果. 在这种情况下,回归测试的参考结果应作相应修改].

10.1 Adding files to the fate-suite dataset

如果没有可用的混合器或编码器来生成用于特定测试的测试媒体,则该媒体必须包含在命运套件中. 首先,请确保样本文件尽可能小,以充分测试相应的解码器或解复用器. 大文件会增加网络带宽和磁盘空间要求. 有了有效的命运测试和命运示例后,请在提交到ffmpeg-devel邮件列表的补丁系列的提交消息或简介消息中,提供下载示例媒体的直接链接.

10.2 Visualizing Test Coverage

FFmpeg构建系统允许使用覆盖率工具gcov / lcov轻松地可视化测试覆盖率. 这涉及以下步骤:

  1. Configure to compile with instrumentation enabled: configure --toolchain=gcov.
  2. 手动或通过FATE运行测试用例. 这可以是完整的FATE回归套件,也可以是FFmpeg提供的任何前端工具的任意调用(以任意组合).
  3. 运行make lcov以HTML格式生成coverage数据.
  4. 在首选的HTML查看器中查看lcov/index.html .

您可以使用命令make lcov-reset重置覆盖率测量. 运行新测试后,您将需要重新运行make lcov .

10.3 Using Valgrind

配置脚本为使用valgrind发现与内存处理相关的错误提供了一种快捷方式. 就在选项添加--toolchain=valgrind-memcheck--toolchain=valgrind-massif ,在配置路线,合理的默认值将为无论是MEMCHECK或Valgrind的套件的地块工具的监督下运行的命运进行设置.

如果需要更好地控制valgrind的调用方式,请在配置行中使用--target-exec='valgrind <your_custom_valgrind_options>选项.

11 Release process

FFmpeg维护了一组发行分支 ,对于系统集成商和发行商(例如Linux发行版等),建议将其交付. 发行经理通常会在https://ffmpeg.org网站上准备,测试和发布tarball.

有两种发行版本:

  1. 主要版本始终包含最新和最出色的功能.
  2. 点发布是从发布分支(称为release/X中切出的,其中X是发布版本号.

请注意,我们向用户保证,任何FFmpeg发行版中的共享库在任何情况下都不会破坏针对同一发行系列的早期版本编译的程序!

However, from time to time, we do make API changes that require adaptations in applications. Such changes are only allowed in (new) major releases and require further steps such as bumping library version numbers and/or adjustments to the symbol versioning file. Please discuss such changes on the ffmpeg-devel mailing list in time to allow forward planning.

11.1 Criteria for Point Releases

符合以下条件的更改是可以纳入点发布的有效候选者:

  1. 修复了一个安全问题,该问题最好由http://cve.mitre.org/发布的CVE编号标识.
  2. 修复了https://trac.ffmpeg.org中记录的错误.
  3. 改进了随附的文档.
  4. 与同一发行版分支的先前版本保持源代码和二进制兼容性.

检查规则的顺序是(1 OR 2 OR 3)AND 4.

11.2 Release Checklist

发布过程涉及以下步骤:

  1. 确保RELEASE文件包含即将发布的版本的版本号.
  2. https://trac.ffmpeg.org/admin/ticket/versions中添加发行版.
  3. 宣布打算释放邮件列表.
  4. 确保所有相关的安全修复程序都已向后移植. 请参阅https://ffmpeg.org/security.html .
  5. 确保FATE回归套件至少在i386amd64上仍通过release分支(请参阅回归测试 ).
  6. 准备bz2gz格式的发行包,并补充包含gpg签名的文件
  7. https://ffmpeg.org/releases上发布压缩包. 创建并推送带有nX格式的带注释的标签,其中X包含版本号.
  8. 提出补丁并将其与网站新闻条目一起发送到ffmpeg-devel邮件列表.
  9. 发布新闻条目.
  10. 发送公告到邮件列表.

该文档于20202月27日使用makeinfo生成 .

telepoint.bg提供的托管

by  ICOPY.SITE