|  |  | @@ -10,9 +10,7 @@ | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @contents | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @chapter Developers Guide | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @section Notes for external developers | 
		
	
		
			
			|  |  |  | @chapter Notes for external developers | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | This document is mostly useful for internal FFmpeg developers. | 
		
	
		
			
			|  |  |  | External developers who need to use the API in their application should | 
		
	
	
		
			
				|  |  | @@ -30,7 +28,7 @@ For more detailed legal information about the use of FFmpeg in | 
		
	
		
			
			|  |  |  | external programs read the @file{LICENSE} file in the source tree and | 
		
	
		
			
			|  |  |  | consult @url{https://ffmpeg.org/legal.html}. | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @section Contributing | 
		
	
		
			
			|  |  |  | @chapter Contributing | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | There are 3 ways by which code gets into FFmpeg. | 
		
	
		
			
			|  |  |  | @itemize @bullet | 
		
	
	
		
			
				|  |  | @@ -47,9 +45,9 @@ The developer making the commit and the author are responsible for their changes | 
		
	
		
			
			|  |  |  | and should try to fix issues their commit causes. | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @anchor{Coding Rules} | 
		
	
		
			
			|  |  |  | @section Coding Rules | 
		
	
		
			
			|  |  |  | @chapter Coding Rules | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @subsection Code formatting conventions | 
		
	
		
			
			|  |  |  | @section Code formatting conventions | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | There are the following guidelines regarding the indentation in files: | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -74,7 +72,7 @@ The presentation is one inspired by 'indent -i4 -kr -nut'. | 
		
	
		
			
			|  |  |  | The main priority in FFmpeg is simplicity and small code size in order to | 
		
	
		
			
			|  |  |  | minimize the bug count. | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @subsection Comments | 
		
	
		
			
			|  |  |  | @section 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. | 
		
	
	
		
			
				|  |  | @@ -114,7 +112,7 @@ int myfunc(int my_parameter) | 
		
	
		
			
			|  |  |  | ... | 
		
	
		
			
			|  |  |  | @end example | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @subsection C language features | 
		
	
		
			
			|  |  |  | @section C language features | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | FFmpeg is programmed in the ISO C90 language with a few additional | 
		
	
		
			
			|  |  |  | features from ISO C99, namely: | 
		
	
	
		
			
				|  |  | @@ -160,7 +158,7 @@ mixing statements and declarations; | 
		
	
		
			
			|  |  |  | GCC statement expressions (@samp{(x = (@{ int y = 4; y; @})}). | 
		
	
		
			
			|  |  |  | @end itemize | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @subsection Naming conventions | 
		
	
		
			
			|  |  |  | @section Naming conventions | 
		
	
		
			
			|  |  |  | All names should be composed with underscores (_), not CamelCase. For example, | 
		
	
		
			
			|  |  |  | @samp{avfilter_get_video_buffer} is an acceptable function name and | 
		
	
		
			
			|  |  |  | @samp{AVFilterGetVideo} is not. The exception from this are type names, like | 
		
	
	
		
			
				|  |  | @@ -204,7 +202,7 @@ letter as they are reserved by the C standard. Names starting with @code{_} | 
		
	
		
			
			|  |  |  | are reserved at the file level and may not be used for externally visible | 
		
	
		
			
			|  |  |  | symbols. If in doubt, just avoid names starting with @code{_} altogether. | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @subsection Miscellaneous conventions | 
		
	
		
			
			|  |  |  | @section Miscellaneous conventions | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @itemize @bullet | 
		
	
		
			
			|  |  |  | @item | 
		
	
	
		
			
				|  |  | @@ -216,7 +214,7 @@ Casts should be used only when necessary. Unneeded parentheses | 
		
	
		
			
			|  |  |  | should also be avoided if they don't make the code easier to understand. | 
		
	
		
			
			|  |  |  | @end itemize | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @subsection Editor configuration | 
		
	
		
			
			|  |  |  | @section Editor configuration | 
		
	
		
			
			|  |  |  | In order to configure Vim to follow FFmpeg formatting conventions, paste | 
		
	
		
			
			|  |  |  | the following snippet into your @file{.vimrc}: | 
		
	
		
			
			|  |  |  | @example | 
		
	
	
		
			
				|  |  | @@ -249,9 +247,9 @@ For Emacs, add these roughly equivalent lines to your @file{.emacs.d/init.el}: | 
		
	
		
			
			|  |  |  | (setq c-default-style "ffmpeg") | 
		
	
		
			
			|  |  |  | @end lisp | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @section Development Policy | 
		
	
		
			
			|  |  |  | @chapter Development Policy | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @subsection Patches/Committing | 
		
	
		
			
			|  |  |  | @section Patches/Committing | 
		
	
		
			
			|  |  |  | @subheading Licenses for patches must be compatible with FFmpeg. | 
		
	
		
			
			|  |  |  | Contributions should be licensed under the | 
		
	
		
			
			|  |  |  | @uref{http://www.gnu.org/licenses/lgpl-2.1.html, LGPL 2.1}, | 
		
	
	
		
			
				|  |  | @@ -350,7 +348,7 @@ time-frame (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! | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @subsection Code | 
		
	
		
			
			|  |  |  | @section Code | 
		
	
		
			
			|  |  |  | @subheading API/ABI changes should be discussed before they are made. | 
		
	
		
			
			|  |  |  | Do not change behavior of the programs (renaming options etc) or public | 
		
	
		
			
			|  |  |  | API or ABI without first discussing it on the ffmpeg-devel mailing list. | 
		
	
	
		
			
				|  |  | @@ -381,7 +379,8 @@ 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. | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @subsection Documentation/Other | 
		
	
		
			
			|  |  |  | @section Documentation/Other | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @subheading Subscribe to the ffmpeg-cvslog mailing list. | 
		
	
		
			
			|  |  |  | It is important to do this as the diffs of all commits are sent there and | 
		
	
		
			
			|  |  |  | reviewed by all the other developers. Bugs and possible improvements or | 
		
	
	
		
			
				|  |  | @@ -406,7 +405,7 @@ finding a new maintainer and also don't forget to update the @file{MAINTAINERS} | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | We think our rules are not too hard. If you have comments, contact us. | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @section Code of conduct | 
		
	
		
			
			|  |  |  | @chapter Code of conduct | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | Be friendly and respectful towards others and third parties. | 
		
	
		
			
			|  |  |  | Treat others the way you yourself want to be treated. | 
		
	
	
		
			
				|  |  | @@ -436,7 +435,7 @@ Finally, keep in mind the immortal words of Bill and Ted, | 
		
	
		
			
			|  |  |  | "Be excellent to each other." | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @anchor{Submitting patches} | 
		
	
		
			
			|  |  |  | @section Submitting patches | 
		
	
		
			
			|  |  |  | @chapter Submitting patches | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | First, read the @ref{Coding Rules} above if you did not yet, in particular | 
		
	
		
			
			|  |  |  | the rules regarding patch submission. | 
		
	
	
		
			
				|  |  | @@ -485,7 +484,7 @@ Give us a few days to react. But if some time passes without reaction, | 
		
	
		
			
			|  |  |  | send a reminder by email. Your patch should eventually be dealt with. | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @section New codecs or formats checklist | 
		
	
		
			
			|  |  |  | @chapter New codecs or formats checklist | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @enumerate | 
		
	
		
			
			|  |  |  | @item | 
		
	
	
		
			
				|  |  | @@ -537,7 +536,7 @@ Did you make sure it compiles standalone, i.e. with | 
		
	
		
			
			|  |  |  | @end enumerate | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @section patch submission checklist | 
		
	
		
			
			|  |  |  | @chapter Patch submission checklist | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @enumerate | 
		
	
		
			
			|  |  |  | @item | 
		
	
	
		
			
				|  |  | @@ -650,7 +649,7 @@ Test your code with valgrind and or Address Sanitizer to ensure it's free | 
		
	
		
			
			|  |  |  | of leaks, out of array accesses, etc. | 
		
	
		
			
			|  |  |  | @end enumerate | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @section Patch review process | 
		
	
		
			
			|  |  |  | @chapter Patch review process | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | All patches posted to ffmpeg-devel will be reviewed, unless they contain a | 
		
	
		
			
			|  |  |  | clear note that the patch is not for the git master branch. | 
		
	
	
		
			
				|  |  | @@ -681,7 +680,7 @@ to be reviewed, please consider helping to review other patches, that is a great | 
		
	
		
			
			|  |  |  | way to get everyone's patches reviewed sooner. | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @anchor{Regression tests} | 
		
	
		
			
			|  |  |  | @section Regression tests | 
		
	
		
			
			|  |  |  | @chapter Regression tests | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | Before submitting a patch (or committing to the repository), you should at least | 
		
	
		
			
			|  |  |  | test that you did not break anything. | 
		
	
	
		
			
				|  |  | @@ -692,7 +691,7 @@ Running 'make fate' accomplishes this, please see @url{fate.html} for details. | 
		
	
		
			
			|  |  |  | this case, the reference results of the regression tests shall be modified | 
		
	
		
			
			|  |  |  | accordingly]. | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @subsection Adding files to the fate-suite dataset | 
		
	
		
			
			|  |  |  | @section Adding files to the fate-suite dataset | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | When there is no muxer or encoder available to generate test media for a | 
		
	
		
			
			|  |  |  | specific test then the media has to be included in the fate-suite. | 
		
	
	
		
			
				|  |  | @@ -703,7 +702,7 @@ Once you have a working fate test and fate sample, provide in the commit | 
		
	
		
			
			|  |  |  | message or introductory message for the patch series that you post to | 
		
	
		
			
			|  |  |  | the ffmpeg-devel mailing list, a direct link to download the sample media. | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @subsection Visualizing Test Coverage | 
		
	
		
			
			|  |  |  | @section Visualizing Test Coverage | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | The FFmpeg build system allows visualizing the test coverage in an easy | 
		
	
		
			
			|  |  |  | manner with the coverage tools @code{gcov}/@code{lcov}.  This involves | 
		
	
	
		
			
				|  |  | @@ -730,7 +729,7 @@ You can use the command @code{make lcov-reset} to reset the coverage | 
		
	
		
			
			|  |  |  | measurements. You will need to rerun @code{make lcov} after running a | 
		
	
		
			
			|  |  |  | new test. | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @subsection Using Valgrind | 
		
	
		
			
			|  |  |  | @section Using Valgrind | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | The configure script provides a shortcut for using valgrind to spot bugs | 
		
	
		
			
			|  |  |  | related to memory handling. Just add the option | 
		
	
	
		
			
				|  |  | @@ -744,7 +743,7 @@ In case you need finer control over how valgrind is invoked, use the | 
		
	
		
			
			|  |  |  | your configure line instead. | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @anchor{Release process} | 
		
	
		
			
			|  |  |  | @section Release process | 
		
	
		
			
			|  |  |  | @chapter Release process | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | FFmpeg maintains a set of @strong{release branches}, which are the | 
		
	
		
			
			|  |  |  | recommended deliverable for system integrators and distributors (such as | 
		
	
	
		
			
				|  |  | @@ -776,7 +775,7 @@ adjustments to the symbol versioning file. Please discuss such changes | 
		
	
		
			
			|  |  |  | on the @strong{ffmpeg-devel} mailing list in time to allow forward planning. | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @anchor{Criteria for Point Releases} | 
		
	
		
			
			|  |  |  | @subsection Criteria for Point Releases | 
		
	
		
			
			|  |  |  | @section Criteria for Point Releases | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | Changes that match the following criteria are valid candidates for | 
		
	
		
			
			|  |  |  | inclusion into a point release: | 
		
	
	
		
			
				|  |  | @@ -800,7 +799,7 @@ point releases of the same release branch. | 
		
	
		
			
			|  |  |  | The order for checking the rules is (1 OR 2 OR 3) AND 4. | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | @subsection Release Checklist | 
		
	
		
			
			|  |  |  | @section Release Checklist | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | The release process involves the following steps: | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | 
 |