From a752069dbacae4f25de71c637619123a967065d7 Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Wed, 24 Jun 2009 22:58:58 +0000 Subject: [PATCH] Split developer documentation off from general documentation. Originally committed as revision 19269 to svn://svn.ffmpeg.org/ffmpeg/trunk --- Makefile | 2 +- doc/developer.texi | 418 +++++++++++++++++++++++++++++++++++++++++++++ doc/general.texi | 407 ------------------------------------------- 3 files changed, 419 insertions(+), 408 deletions(-) create mode 100644 doc/developer.texi diff --git a/Makefile b/Makefile index 195041e65c..7361ce31d2 100644 --- a/Makefile +++ b/Makefile @@ -76,7 +76,7 @@ cmdutils.o cmdutils.d: version.h alltools: $(addsuffix $(EXESUF),$(addprefix tools/, cws2fws pktdumper qt-faststart trasher)) -documentation: $(addprefix doc/, ffmpeg-doc.html faq.html ffserver-doc.html \ +documentation: $(addprefix doc/, developer.html faq.html ffmpeg-doc.html ffserver-doc.html \ ffplay-doc.html general.html $(ALLMANPAGES)) doc/%.html: doc/%.texi diff --git a/doc/developer.texi b/doc/developer.texi new file mode 100644 index 0000000000..e78936124d --- /dev/null +++ b/doc/developer.texi @@ -0,0 +1,418 @@ +\input texinfo @c -*- texinfo -*- + +@settitle Developer Documentation +@titlepage +@sp 7 +@center @titlefont{Developer Documentation} +@sp 3 +@end titlepage + + +@chapter Developers Guide + +@section API +@itemize @bullet +@item libavcodec is the library containing the codecs (both encoding and +decoding). Look at @file{libavcodec/apiexample.c} to see how to use it. + +@item libavformat is the library containing the file format handling (mux and +demux code for several formats). Look at @file{ffplay.c} to use it in a +player. See @file{libavformat/output-example.c} to use it to generate +audio or video streams. + +@end itemize + +@section Integrating libavcodec or libavformat in your program + +You can integrate all the source code of the libraries to link them +statically to avoid any version problem. All you need is to provide a +'config.mak' and a 'config.h' in the parent directory. See the defines +generated by ./configure to understand what is needed. + +You can use libavcodec or libavformat in your commercial program, but +@emph{any patch you make must be published}. The best way to proceed is +to send your patches to the FFmpeg mailing list. + +@node Coding Rules +@section Coding Rules + +FFmpeg is programmed in the ISO C90 language with a few additional +features from ISO C99, namely: +@itemize @bullet +@item +the @samp{inline} keyword; +@item +@samp{//} comments; +@item +designated struct initializers (@samp{struct s x = @{ .i = 17 @};}) +@item +compound literals (@samp{x = (struct s) @{ 17, 23 @};}) +@end itemize + +These features are supported by all compilers we care about, so we will not +accept patches to remove their use unless they absolutely do not impair +clarity and performance. + +All code must compile with GCC 2.95 and GCC 3.3. Currently, FFmpeg also +compiles with several other compilers, such as the Compaq ccc compiler +or Sun Studio 9, and we would like to keep it that way unless it would +be exceedingly involved. To ensure compatibility, please do not use any +additional C99 features or GCC extensions. Especially watch out for: +@itemize @bullet +@item +mixing statements and declarations; +@item +@samp{long long} (use @samp{int64_t} instead); +@item +@samp{__attribute__} not protected by @samp{#ifdef __GNUC__} or similar; +@item +GCC statement expressions (@samp{(x = (@{ int y = 4; y; @})}). +@end itemize + +Indent size is 4. +The presentation is the one specified by 'indent -i4 -kr -nut'. +The TAB character is forbidden outside of Makefiles as is any +form of trailing whitespace. Commits containing either will be +rejected by the Subversion repository. + +The main priority in FFmpeg is simplicity and small code size in order to +minimize the bug count. + +Comments: Use the JavaDoc/Doxygen +format (see examples below) so that code documentation +can be generated automatically. All nontrivial functions should have a comment +above them explaining what the function does, even if it is just one sentence. +All structures and their member variables should be documented, too. +@example +/** + * @@file mpeg.c + * 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) +... +@end example + +fprintf and printf are forbidden in libavformat and libavcodec, +please use av_log() instead. + +Casts should be used only when necessary. Unneeded parentheses +should also be avoided if they don't make the code easier to understand. + +@section Development Policy + +@enumerate +@item + Contributions should be licensed under the LGPL 2.1, including an + "or any later version" clause, or the MIT license. GPL 2 including + an "or any later version" clause is also acceptable, but LGPL is + preferred. +@item + You must not commit code which breaks FFmpeg! (Meaning unfinished but + enabled code which breaks compilation or compiles but does not work or + breaks the regression tests) + You can commit unfinished stuff (for testing etc), but it must be disabled + (#ifdef etc) by default so it does not interfere with other developers' + work. +@item + You do not have to over-test things. If it works for you, and you think it + should work for others, then commit. If your code has problems + (portability, triggers compiler bugs, unusual environment etc) they will be + reported and eventually fixed. +@item + Do not commit unrelated changes together, split them into self-contained + pieces. Also do not forget that if part B depends on part A, but A does not + depend on B, then A can and should be committed first and separate from B. + Keeping changes well split into self-contained parts makes reviewing and + understanding them on the commit log mailing list easier. This also helps + in case of debugging later on. + Also if you have doubts about splitting or not splitting, do not hesitate to + ask/discuss it on the developer mailing list. +@item + Do not change behavior of the program (renaming options etc) without + first discussing it on the ffmpeg-devel mailing list. Do not remove + functionality from the code. Just improve! + + Note: Redundant code can be removed. +@item + Do not commit changes to the build system (Makefiles, configure script) + which change behavior, defaults etc, without asking first. The same + applies to compiler warning fixes, trivial looking fixes and to code + maintained by other developers. We usually have a reason for doing things + the way we do. Send your changes as patches to the ffmpeg-devel mailing + list, and if the code maintainers say OK, you may commit. This does not + apply to files you wrote and/or maintain. +@item + We refuse source indentation and other cosmetic changes if they are mixed + with functional changes, such commits will be rejected and removed. Every + developer has his own indentation style, you should not change it. Of course + if you (re)write something, you can use your own style, even though we would + prefer if the indentation throughout FFmpeg was consistent (Many projects + force a given indentation style - we do not.). If you really need to make + indentation changes (try to avoid this), separate them strictly from real + changes. + + NOTE: If you had to put if()@{ .. @} over a large (> 5 lines) chunk of code, + then either do NOT change the indentation of the inner part within (do not + move it to the right)! or do so in a separate commit +@item + Always fill out the commit log message. Describe in a few lines what you + changed and why. You can refer to mailing list postings if you fix a + particular bug. Comments such as "fixed!" or "Changed it." are unacceptable. +@item + If you apply a patch by someone else, include the name and email address in + the log message. Since the ffmpeg-cvslog mailing list is publicly + archived you should add some SPAM protection to the email address. Send an + answer to ffmpeg-devel (or wherever you got the patch from) saying that + you applied the patch. +@item + When applying patches that have been discussed (at length) on the mailing + list, reference the thread in the log message. +@item + Do NOT commit to code actively maintained by others without permission. + Send a patch to ffmpeg-devel instead. If no one answers within a reasonable + timeframe (12h for build failures and security fixes, 3 days small changes, + 1 week for big patches) then commit your patch if you think it is OK. + Also note, the maintainer can simply ask for more time to review! +@item + Subscribe to the ffmpeg-cvslog mailing list. The diffs of all commits + are sent there and reviewed by all the other developers. Bugs and possible + improvements or general questions regarding commits are discussed there. We + expect you to react if problems with your code are uncovered. +@item + Update the documentation if you change behavior or add features. If you are + unsure how best to do this, send a patch to ffmpeg-devel, the documentation + maintainer(s) will review and commit your stuff. +@item + Try to keep important discussions and requests (also) on the public + developer mailing list, so that all developers can benefit from them. +@item + Never write to unallocated memory, never write over the end of arrays, + always check values read from some untrusted source before using them + as array index or other risky things. +@item + Remember to check if you need to bump versions for the specific libav + parts (libavutil, libavcodec, libavformat) you are changing. You need + to change the version integer. + Incrementing the first component means no backward compatibility to + previous versions (e.g. removal of a function from the public API). + Incrementing the second component means backward compatible change + (e.g. addition of a function to the public API or extension of an + existing data structure). + Incrementing the third component means a noteworthy binary compatible + change (e.g. encoder bug fix that matters for the decoder). +@item + Compiler warnings indicate potential bugs or code with bad style. If a type of + warning always points to correct and clean code, that warning should + be disabled, not the code changed. + Thus the remaining warnings can either be bugs or correct code. + If it is a bug, the bug has to be fixed. If it is not, the code should + be changed to not generate a warning unless that causes a slowdown + or obfuscates the code. +@item + If you add a new file, give it a proper license header. Do not copy and + paste it from a random place, use an existing file as template. +@end enumerate + +We think our rules are not too hard. If you have comments, contact us. + +Note, these rules are mostly borrowed from the MPlayer project. + +@section Submitting patches + +First, (@pxref{Coding Rules}) above if you did not yet. + +When you submit your patch, try to send a unified diff (diff '-up' +option). We cannot read other diffs :-) + +Also please do not submit a patch which contains several unrelated changes. +Split it into separate, self-contained pieces. This does not mean splitting +file by file. Instead, make the patch as small as possible while still +keeping it as a logical unit that contains an individual change, even +if it spans multiple files. This makes reviewing your patches much easier +for us and greatly increases your chances of getting your patch applied. + +Run the regression tests before submitting a patch so that you can +verify that there are no big problems. + +Patches should be posted as base64 encoded attachments (or any other +encoding which ensures that the patch will not be trashed during +transmission) to the ffmpeg-devel mailing list, see +@url{http://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel} + +It also helps quite a bit if you tell us what the patch does (for example +'replaces lrint by lrintf'), and why (for example '*BSD isn't C99 compliant +and has no lrint()') + +Also please if you send several patches, send each patch as a separate mail, +do not attach several unrelated patches to the same mail. + +@section New codecs or formats checklist + +@enumerate +@item + Did you use av_cold for codec initialization and close functions? +@item + Did you add a long_name under NULL_IF_CONFIG_SMALL to the AVCodec or + AVInputFormat/AVOutputFormat struct? +@item + Did you bump the minor version number in @file{avcodec.h} or + @file{avformat.h}? +@item + Did you register it in @file{allcodecs.c} or @file{allformats.c}? +@item + Did you add the CodecID to @file{avcodec.h}? +@item + If it has a fourcc, did you add it to @file{libavformat/riff.c}, + even if it is only a decoder? +@item + Did you add a rule to compile the appropriate files in the Makefile? + Remember to do this even if you're just adding a format to a file that is + already being compiled by some other rule, like a raw demuxer. +@item + Did you add an entry to the table of supported formats or codecs in the + documentation? +@item + Did you add an entry in the Changelog? +@item + If it depends on a parser or a library, did you add that dependency in + configure? +@item + Did you "svn add" the appropriate files before commiting? +@end enumerate + +@section patch submission checklist + +@enumerate +@item + Do the regression tests pass with the patch applied? +@item + Does @code{make checkheaders} pass with the patch applied? +@item + Is the patch a unified diff? +@item + Is the patch against latest FFmpeg SVN? +@item + Are you subscribed to ffmpeg-dev? + (the list is subscribers only due to spam) +@item + Have you checked that the changes are minimal, so that the same cannot be + achieved with a smaller patch and/or simpler final code? +@item + If the change is to speed critical code, did you benchmark it? +@item + If you did any benchmarks, did you provide them in the mail? +@item + Have you checked that the patch does not introduce buffer overflows or + other security issues? +@item + Did you test your decoder or demuxer against damaged data? If no, see + tools/trasher and the noise bitstream filter. Your decoder or demuxer + should not crash or end in a (near) infinite loop when fed damaged data. +@item + Is the patch created from the root of the source tree, so it can be + applied with @code{patch -p0}? +@item + Does the patch not mix functional and cosmetic changes? +@item + Did you add tabs or trailing whitespace to the code? Both are forbidden. +@item + Is the patch attached to the email you send? +@item + Is the mime type of the patch correct? It should be text/x-diff or + text/x-patch or at least text/plain and not application/octet-stream. +@item + If the patch fixes a bug, did you provide a verbose analysis of the bug? +@item + If the patch fixes a bug, did you provide enough information, including + a sample, so the bug can be reproduced and the fix can be verified? + Note please do not attach samples >100k to mails but rather provide a + URL, you can upload to ftp://upload.ffmpeg.org +@item + Did you provide a verbose summary about what the patch does change? +@item + Did you provide a verbose explanation why it changes things like it does? +@item + Did you provide a verbose summary of the user visible advantages and + disadvantages if the patch is applied? +@item + Did you provide an example so we can verify the new feature added by the + patch easily? +@item + If you added a new file, did you insert a license header? It should be + taken from FFmpeg, not randomly copied and pasted from somewhere else. +@item + You should maintain alphabetical order in alphabetically ordered lists as + long as doing so does not break API/ABI compatibility. +@item + Lines with similar content should be aligned vertically when doing so + improves readability. +@item + Did you provide a suggestion for a clear commit log message? +@end enumerate + +@section Patch review process + +All patches posted to ffmpeg-devel will be reviewed, unless they contain a +clear note that the patch is not for SVN. +Reviews and comments will be posted as replies to the patch on the +mailing list. The patch submitter then has to take care of every comment, +that can be by resubmitting a changed patch or by discussion. Resubmitted +patches will themselves be reviewed like any other patch. If at some point +a patch passes review with no comments then it is approved, that can for +simple and small patches happen immediately while large patches will generally +have to be changed and reviewed many times before they are approved. +After a patch is approved it will be committed to the repository. + +We will review all submitted patches, but sometimes we are quite busy so +especially for large patches this can take several weeks. + +When resubmitting patches, please do not make any significant changes +not related to the comments received during review. Such patches will +be rejected. Instead, submit significant changes or new features as +separate patches. + +@section Regression tests + +Before submitting a patch (or committing to the repository), you should at least +test that you did not break anything. + +The regression tests build a synthetic video stream and a synthetic +audio stream. These are then encoded and decoded with all codecs or +formats. The CRC (or MD5) of each generated file is recorded in a +result file. A 'diff' is launched to compare the reference results and +the result file. + +The regression tests then go on to test the FFserver code with a +limited set of streams. It is important that this step runs correctly +as well. + +Run 'make test' to test all the codecs and formats. + +Run 'make fulltest' to test all the codecs, formats and FFserver. + +[Of course, some patches may change the results of the regression tests. In +this case, the reference results of the regression tests shall be modified +accordingly]. + +@bye diff --git a/doc/general.texi b/doc/general.texi index 2f155479cc..5e73af9eb4 100644 --- a/doc/general.texi +++ b/doc/general.texi @@ -983,411 +983,4 @@ BeOS support is broken in mysterious ways. For information about compiling FFmpeg on OS/2 see @url{http://www.edm2.com/index.php/FFmpeg}. -@chapter Developers Guide - -@section API -@itemize @bullet -@item libavcodec is the library containing the codecs (both encoding and -decoding). Look at @file{libavcodec/apiexample.c} to see how to use it. - -@item libavformat is the library containing the file format handling (mux and -demux code for several formats). Look at @file{ffplay.c} to use it in a -player. See @file{libavformat/output-example.c} to use it to generate -audio or video streams. - -@end itemize - -@section Integrating libavcodec or libavformat in your program - -You can integrate all the source code of the libraries to link them -statically to avoid any version problem. All you need is to provide a -'config.mak' and a 'config.h' in the parent directory. See the defines -generated by ./configure to understand what is needed. - -You can use libavcodec or libavformat in your commercial program, but -@emph{any patch you make must be published}. The best way to proceed is -to send your patches to the FFmpeg mailing list. - -@node Coding Rules -@section Coding Rules - -FFmpeg is programmed in the ISO C90 language with a few additional -features from ISO C99, namely: -@itemize @bullet -@item -the @samp{inline} keyword; -@item -@samp{//} comments; -@item -designated struct initializers (@samp{struct s x = @{ .i = 17 @};}) -@item -compound literals (@samp{x = (struct s) @{ 17, 23 @};}) -@end itemize - -These features are supported by all compilers we care about, so we will not -accept patches to remove their use unless they absolutely do not impair -clarity and performance. - -All code must compile with GCC 2.95 and GCC 3.3. Currently, FFmpeg also -compiles with several other compilers, such as the Compaq ccc compiler -or Sun Studio 9, and we would like to keep it that way unless it would -be exceedingly involved. To ensure compatibility, please do not use any -additional C99 features or GCC extensions. Especially watch out for: -@itemize @bullet -@item -mixing statements and declarations; -@item -@samp{long long} (use @samp{int64_t} instead); -@item -@samp{__attribute__} not protected by @samp{#ifdef __GNUC__} or similar; -@item -GCC statement expressions (@samp{(x = (@{ int y = 4; y; @})}). -@end itemize - -Indent size is 4. -The presentation is the one specified by 'indent -i4 -kr -nut'. -The TAB character is forbidden outside of Makefiles as is any -form of trailing whitespace. Commits containing either will be -rejected by the Subversion repository. - -The main priority in FFmpeg is simplicity and small code size in order to -minimize the bug count. - -Comments: Use the JavaDoc/Doxygen -format (see examples below) so that code documentation -can be generated automatically. All nontrivial functions should have a comment -above them explaining what the function does, even if it is just one sentence. -All structures and their member variables should be documented, too. -@example -/** - * @@file mpeg.c - * 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) -... -@end example - -fprintf and printf are forbidden in libavformat and libavcodec, -please use av_log() instead. - -Casts should be used only when necessary. Unneeded parentheses -should also be avoided if they don't make the code easier to understand. - -@section Development Policy - -@enumerate -@item - Contributions should be licensed under the LGPL 2.1, including an - "or any later version" clause, or the MIT license. GPL 2 including - an "or any later version" clause is also acceptable, but LGPL is - preferred. -@item - You must not commit code which breaks FFmpeg! (Meaning unfinished but - enabled code which breaks compilation or compiles but does not work or - breaks the regression tests) - You can commit unfinished stuff (for testing etc), but it must be disabled - (#ifdef etc) by default so it does not interfere with other developers' - work. -@item - You do not have to over-test things. If it works for you, and you think it - should work for others, then commit. If your code has problems - (portability, triggers compiler bugs, unusual environment etc) they will be - reported and eventually fixed. -@item - Do not commit unrelated changes together, split them into self-contained - pieces. Also do not forget that if part B depends on part A, but A does not - depend on B, then A can and should be committed first and separate from B. - Keeping changes well split into self-contained parts makes reviewing and - understanding them on the commit log mailing list easier. This also helps - in case of debugging later on. - Also if you have doubts about splitting or not splitting, do not hesitate to - ask/discuss it on the developer mailing list. -@item - Do not change behavior of the program (renaming options etc) without - first discussing it on the ffmpeg-devel mailing list. Do not remove - functionality from the code. Just improve! - - Note: Redundant code can be removed. -@item - Do not commit changes to the build system (Makefiles, configure script) - which change behavior, defaults etc, without asking first. The same - applies to compiler warning fixes, trivial looking fixes and to code - maintained by other developers. We usually have a reason for doing things - the way we do. Send your changes as patches to the ffmpeg-devel mailing - list, and if the code maintainers say OK, you may commit. This does not - apply to files you wrote and/or maintain. -@item - We refuse source indentation and other cosmetic changes if they are mixed - with functional changes, such commits will be rejected and removed. Every - developer has his own indentation style, you should not change it. Of course - if you (re)write something, you can use your own style, even though we would - prefer if the indentation throughout FFmpeg was consistent (Many projects - force a given indentation style - we do not.). If you really need to make - indentation changes (try to avoid this), separate them strictly from real - changes. - - NOTE: If you had to put if()@{ .. @} over a large (> 5 lines) chunk of code, - then either do NOT change the indentation of the inner part within (do not - move it to the right)! or do so in a separate commit -@item - Always fill out the commit log message. Describe in a few lines what you - changed and why. You can refer to mailing list postings if you fix a - particular bug. Comments such as "fixed!" or "Changed it." are unacceptable. -@item - If you apply a patch by someone else, include the name and email address in - the log message. Since the ffmpeg-cvslog mailing list is publicly - archived you should add some SPAM protection to the email address. Send an - answer to ffmpeg-devel (or wherever you got the patch from) saying that - you applied the patch. -@item - When applying patches that have been discussed (at length) on the mailing - list, reference the thread in the log message. -@item - Do NOT commit to code actively maintained by others without permission. - Send a patch to ffmpeg-devel instead. If no one answers within a reasonable - timeframe (12h for build failures and security fixes, 3 days small changes, - 1 week for big patches) then commit your patch if you think it is OK. - Also note, the maintainer can simply ask for more time to review! -@item - Subscribe to the ffmpeg-cvslog mailing list. The diffs of all commits - are sent there and reviewed by all the other developers. Bugs and possible - improvements or general questions regarding commits are discussed there. We - expect you to react if problems with your code are uncovered. -@item - Update the documentation if you change behavior or add features. If you are - unsure how best to do this, send a patch to ffmpeg-devel, the documentation - maintainer(s) will review and commit your stuff. -@item - Try to keep important discussions and requests (also) on the public - developer mailing list, so that all developers can benefit from them. -@item - Never write to unallocated memory, never write over the end of arrays, - always check values read from some untrusted source before using them - as array index or other risky things. -@item - Remember to check if you need to bump versions for the specific libav - parts (libavutil, libavcodec, libavformat) you are changing. You need - to change the version integer. - Incrementing the first component means no backward compatibility to - previous versions (e.g. removal of a function from the public API). - Incrementing the second component means backward compatible change - (e.g. addition of a function to the public API or extension of an - existing data structure). - Incrementing the third component means a noteworthy binary compatible - change (e.g. encoder bug fix that matters for the decoder). -@item - Compiler warnings indicate potential bugs or code with bad style. If a type of - warning always points to correct and clean code, that warning should - be disabled, not the code changed. - Thus the remaining warnings can either be bugs or correct code. - If it is a bug, the bug has to be fixed. If it is not, the code should - be changed to not generate a warning unless that causes a slowdown - or obfuscates the code. -@item - If you add a new file, give it a proper license header. Do not copy and - paste it from a random place, use an existing file as template. -@end enumerate - -We think our rules are not too hard. If you have comments, contact us. - -Note, these rules are mostly borrowed from the MPlayer project. - -@section Submitting patches - -First, (@pxref{Coding Rules}) above if you did not yet. - -When you submit your patch, try to send a unified diff (diff '-up' -option). We cannot read other diffs :-) - -Also please do not submit a patch which contains several unrelated changes. -Split it into separate, self-contained pieces. This does not mean splitting -file by file. Instead, make the patch as small as possible while still -keeping it as a logical unit that contains an individual change, even -if it spans multiple files. This makes reviewing your patches much easier -for us and greatly increases your chances of getting your patch applied. - -Run the regression tests before submitting a patch so that you can -verify that there are no big problems. - -Patches should be posted as base64 encoded attachments (or any other -encoding which ensures that the patch will not be trashed during -transmission) to the ffmpeg-devel mailing list, see -@url{http://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel} - -It also helps quite a bit if you tell us what the patch does (for example -'replaces lrint by lrintf'), and why (for example '*BSD isn't C99 compliant -and has no lrint()') - -Also please if you send several patches, send each patch as a separate mail, -do not attach several unrelated patches to the same mail. - -@section New codecs or formats checklist - -@enumerate -@item - Did you use av_cold for codec initialization and close functions? -@item - Did you add a long_name under NULL_IF_CONFIG_SMALL to the AVCodec or - AVInputFormat/AVOutputFormat struct? -@item - Did you bump the minor version number in @file{avcodec.h} or - @file{avformat.h}? -@item - Did you register it in @file{allcodecs.c} or @file{allformats.c}? -@item - Did you add the CodecID to @file{avcodec.h}? -@item - If it has a fourcc, did you add it to @file{libavformat/riff.c}, - even if it is only a decoder? -@item - Did you add a rule to compile the appropriate files in the Makefile? - Remember to do this even if you're just adding a format to a file that is - already being compiled by some other rule, like a raw demuxer. -@item - Did you add an entry to the table of supported formats or codecs in the - documentation? -@item - Did you add an entry in the Changelog? -@item - If it depends on a parser or a library, did you add that dependency in - configure? -@item - Did you "svn add" the appropriate files before commiting? -@end enumerate - -@section patch submission checklist - -@enumerate -@item - Do the regression tests pass with the patch applied? -@item - Does @code{make checkheaders} pass with the patch applied? -@item - Is the patch a unified diff? -@item - Is the patch against latest FFmpeg SVN? -@item - Are you subscribed to ffmpeg-dev? - (the list is subscribers only due to spam) -@item - Have you checked that the changes are minimal, so that the same cannot be - achieved with a smaller patch and/or simpler final code? -@item - If the change is to speed critical code, did you benchmark it? -@item - If you did any benchmarks, did you provide them in the mail? -@item - Have you checked that the patch does not introduce buffer overflows or - other security issues? -@item - Did you test your decoder or demuxer against damaged data? If no, see - tools/trasher and the noise bitstream filter. Your decoder or demuxer - should not crash or end in a (near) infinite loop when fed damaged data. -@item - Is the patch created from the root of the source tree, so it can be - applied with @code{patch -p0}? -@item - Does the patch not mix functional and cosmetic changes? -@item - Did you add tabs or trailing whitespace to the code? Both are forbidden. -@item - Is the patch attached to the email you send? -@item - Is the mime type of the patch correct? It should be text/x-diff or - text/x-patch or at least text/plain and not application/octet-stream. -@item - If the patch fixes a bug, did you provide a verbose analysis of the bug? -@item - If the patch fixes a bug, did you provide enough information, including - a sample, so the bug can be reproduced and the fix can be verified? - Note please do not attach samples >100k to mails but rather provide a - URL, you can upload to ftp://upload.ffmpeg.org -@item - Did you provide a verbose summary about what the patch does change? -@item - Did you provide a verbose explanation why it changes things like it does? -@item - Did you provide a verbose summary of the user visible advantages and - disadvantages if the patch is applied? -@item - Did you provide an example so we can verify the new feature added by the - patch easily? -@item - If you added a new file, did you insert a license header? It should be - taken from FFmpeg, not randomly copied and pasted from somewhere else. -@item - You should maintain alphabetical order in alphabetically ordered lists as - long as doing so does not break API/ABI compatibility. -@item - Lines with similar content should be aligned vertically when doing so - improves readability. -@item - Did you provide a suggestion for a clear commit log message? -@end enumerate - -@section Patch review process - -All patches posted to ffmpeg-devel will be reviewed, unless they contain a -clear note that the patch is not for SVN. -Reviews and comments will be posted as replies to the patch on the -mailing list. The patch submitter then has to take care of every comment, -that can be by resubmitting a changed patch or by discussion. Resubmitted -patches will themselves be reviewed like any other patch. If at some point -a patch passes review with no comments then it is approved, that can for -simple and small patches happen immediately while large patches will generally -have to be changed and reviewed many times before they are approved. -After a patch is approved it will be committed to the repository. - -We will review all submitted patches, but sometimes we are quite busy so -especially for large patches this can take several weeks. - -When resubmitting patches, please do not make any significant changes -not related to the comments received during review. Such patches will -be rejected. Instead, submit significant changes or new features as -separate patches. - -@section Regression tests - -Before submitting a patch (or committing to the repository), you should at least -test that you did not break anything. - -The regression tests build a synthetic video stream and a synthetic -audio stream. These are then encoded and decoded with all codecs or -formats. The CRC (or MD5) of each generated file is recorded in a -result file. A 'diff' is launched to compare the reference results and -the result file. - -The regression tests then go on to test the FFserver code with a -limited set of streams. It is important that this step runs correctly -as well. - -Run 'make test' to test all the codecs and formats. - -Run 'make fulltest' to test all the codecs, formats and FFserver. - -[Of course, some patches may change the results of the regression tests. In -this case, the reference results of the regression tests shall be modified -accordingly]. - @bye