|
|
|
@ -23,16 +23,22 @@ 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 Libav mailing list. |
|
|
|
|
@section Integrating libav in your program |
|
|
|
|
|
|
|
|
|
Shared libraries should be used whenever is possible in order to reduce |
|
|
|
|
the effort distributors have to pour to support programs and to ensure |
|
|
|
|
only the public api is used. |
|
|
|
|
|
|
|
|
|
You can use Libav in your commercial program, but you must abide to the |
|
|
|
|
license, LGPL or GPL depending on the specific features used, please refer |
|
|
|
|
to @url{http://libav.org/legal.html} for a quick checklist and to |
|
|
|
|
@url{http://git.libav.org/?p=libav.git;a=blob;f=COPYING.GPLv2}, |
|
|
|
|
@url{http://git.libav.org/?p=libav.git;a=blob;f=COPYING.GPLv3}, |
|
|
|
|
@url{http://git.libav.org/?p=libav.git;a=blob;f=COPYING.LGPLv2.1}, |
|
|
|
|
@url{http://git.libav.org/?p=libav.git;a=blob;f=COPYING.LGPLv3} for the |
|
|
|
|
exact text of the licenses. |
|
|
|
|
Any modification to the source code can be suggested for inclusion. |
|
|
|
|
The best way to proceed is to send your patches to the Libav mailing list. |
|
|
|
|
|
|
|
|
|
@anchor{Coding Rules} |
|
|
|
|
@section Coding Rules |
|
|
|
@ -129,17 +135,33 @@ should also be avoided if they don't make the code easier to understand. |
|
|
|
|
an "or any later version" clause is also acceptable, but LGPL is |
|
|
|
|
preferred. |
|
|
|
|
@item |
|
|
|
|
You must not commit code which breaks Libav! (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. |
|
|
|
|
All the patches MUST be reviewed in the mailing list before they are |
|
|
|
|
committed. |
|
|
|
|
@item |
|
|
|
|
The Libav coding style should remain consistent. Changes to |
|
|
|
|
conform will be suggested during the review or implemented on commit. |
|
|
|
|
@item |
|
|
|
|
Patches should be generated using @code{git format-patch} or directly sent |
|
|
|
|
using @code{git send-email}. |
|
|
|
|
Please make sure you give the proper credit by setting the correct author |
|
|
|
|
in the commit. |
|
|
|
|
@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. |
|
|
|
|
The commit message should have a short first line in the form of |
|
|
|
|
@samp{topic: short description} as header, separated by a newline |
|
|
|
|
from the body consting in few lines explaining the reason of the patch. |
|
|
|
|
Referring to the issue on the bug tracker does not exempt to report an |
|
|
|
|
excerpt of the bug. |
|
|
|
|
@item |
|
|
|
|
Work in progress patches should be sent to the mailing list with the [WIP] |
|
|
|
|
or the [RFC] tag. |
|
|
|
|
@item |
|
|
|
|
Branches in public personal repos are advised as way to |
|
|
|
|
work on issues collaboratively. |
|
|
|
|
@item |
|
|
|
|
You do not have to over-test things. If it works for you and you think it |
|
|
|
|
should work for others, send it to the mailing list for review. |
|
|
|
|
If you have doubt about portability please state it in the submission so |
|
|
|
|
people with specific hardware could test it. |
|
|
|
|
@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 |
|
|
|
@ -147,70 +169,32 @@ should also be avoided if they don't make the code easier to understand. |
|
|
|
|
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 programs (renaming options etc) or public |
|
|
|
|
API or ABI without first discussing it on the libav-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 libav-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 Libav 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 libav-commits mailing list is publicly |
|
|
|
|
archived you should add some SPAM protection to the email address. Send an |
|
|
|
|
answer to libav-devel (or wherever you got the patch from) saying that |
|
|
|
|
you applied the patch. |
|
|
|
|
@item |
|
|
|
|
Patches that change behavior of the programs (renaming options etc) or |
|
|
|
|
public API or ABI should be discussed in depth and possible few days should |
|
|
|
|
pass between discussion and commit. |
|
|
|
|
Changes to the build system (Makefiles, configure script) which alter |
|
|
|
|
the expected behavior should be considered in the same regard. |
|
|
|
|
@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 libav-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 libav-commits 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. |
|
|
|
|
Subscribe to the libav-devel and libav-commits mailing list. |
|
|
|
|
Bugs and possible improvements or general questions regarding commits |
|
|
|
|
are discussed on libav-devel. 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 libav-devel, the documentation |
|
|
|
|
maintainer(s) will review and commit your stuff. |
|
|
|
|
unsure how best to do this, send an [RFC] patch to libav-devel. |
|
|
|
|
@item |
|
|
|
|
Try to keep important discussions and requests (also) on the public |
|
|
|
|
developer mailing list, so that all developers can benefit from them. |
|
|
|
|
All discussions and decisions should be reported on the public developer |
|
|
|
|
mailing list, so that there is a reference to them. |
|
|
|
|
Other media (e.g. IRC) should be used for coordination and immediate |
|
|
|
|
collaboration. |
|
|
|
|
@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. |
|
|
|
|
as array index or other risky things. Always use valgrind to doublecheck. |
|
|
|
|
@item |
|
|
|
|
Remember to check if you need to bump versions for the specific libav |
|
|
|
|
parts (libavutil, libavcodec, libavformat) you are changing. You need |
|
|
|
@ -223,13 +207,12 @@ should also be avoided if they don't make the code easier to understand. |
|
|
|
|
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. |
|
|
|
|
Compiler warnings indicate potential bugs or code with bad style. |
|
|
|
|
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. |
|
|
|
|
If a type of warning leads to too many false positives, that warning |
|
|
|
|
should be disabled, not the code changed. |
|
|
|
|
@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. |
|
|
|
@ -237,16 +220,15 @@ should also be avoided if they don't make the code easier to understand. |
|
|
|
|
|
|
|
|
|
We think our rules are not too hard. If you have comments, contact us. |
|
|
|
|
|
|
|
|
|
Note, these rules are mostly borrowed from the MPlayer project. |
|
|
|
|
Note, some rules were 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 :-) |
|
|
|
|
First, read the (@pxref{Coding Rules}) above if you did not yet, in particular |
|
|
|
|
the rules regarding patch submission. |
|
|
|
|
|
|
|
|
|
Also please do not submit a patch which contains several unrelated changes. |
|
|
|
|
As stated already, 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 |
|
|
|
@ -256,8 +238,8 @@ for us and greatly increases your chances of getting your patch applied. |
|
|
|
|
Use the patcheck tool of Libav to check your patch. |
|
|
|
|
The tool is located in the tools directory. |
|
|
|
|
|
|
|
|
|
Run the regression tests before submitting a patch so that you can |
|
|
|
|
verify that there are no big problems. |
|
|
|
|
Run the @pxref{Regression Tests} before submitting a patch in order to verify |
|
|
|
|
it does not cause unexpected problems. |
|
|
|
|
|
|
|
|
|
Patches should be posted as base64 encoded attachments (or any other |
|
|
|
|
encoding which ensures that the patch will not be trashed during |
|
|
|
@ -266,16 +248,20 @@ transmission) to the libav-devel mailing list, see |
|
|
|
|
|
|
|
|
|
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()') |
|
|
|
|
and has no lrint()'). This kind of explanation should be the body of the |
|
|
|
|
commit message. |
|
|
|
|
|
|
|
|
|
Also please if you send several patches, send each patch as a separate mail, |
|
|
|
|
do not attach several unrelated patches to the same mail. |
|
|
|
|
|
|
|
|
|
Use @code{git send-email} when possible since it will properly send patches |
|
|
|
|
without requiring extra care. |
|
|
|
|
|
|
|
|
|
Your patch will be reviewed on the mailing list. You will likely be asked |
|
|
|
|
to make some changes and are expected to send in an improved version that |
|
|
|
|
incorporates the requests from the review. This process may go through |
|
|
|
|
several iterations. Once your patch is deemed good enough, some developer |
|
|
|
|
will pick it up and commit it to the official Libav tree. |
|
|
|
|
several iterations. Once your patch is deemed good enough, it will be |
|
|
|
|
committed to the official Libav tree. |
|
|
|
|
|
|
|
|
|
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. |
|
|
|
@ -301,8 +287,8 @@ send a reminder by email. Your patch should eventually be dealt with. |
|
|
|
|
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. |
|
|
|
|
Remember to do this even if you are 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 |
|
|
|
|
@file{doc/general.texi}? |
|
|
|
@ -312,7 +298,7 @@ send a reminder by email. Your patch should eventually be dealt with. |
|
|
|
|
If it depends on a parser or a library, did you add that dependency in |
|
|
|
|
configure? |
|
|
|
|
@item |
|
|
|
|
Did you "git add" the appropriate files before committing? |
|
|
|
|
Did you @code{git add} the appropriate files before committing? |
|
|
|
|
@end enumerate |
|
|
|
|
|
|
|
|
|
@section patch submission checklist |
|
|
|
@ -322,13 +308,12 @@ send a reminder by email. Your patch should eventually be dealt with. |
|
|
|
|
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 Libav git master branch? |
|
|
|
|
@item |
|
|
|
|
Are you subscribed to ffmpeg-dev? |
|
|
|
|
(the list is subscribers only due to spam) |
|
|
|
|
Are you subscribed to libav-devel? |
|
|
|
|
(@url{https://lists.libav.org/mailman/listinfo/libav-devel} |
|
|
|
|
the list is subscribers) |
|
|
|
|
@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? |
|
|
|
@ -343,9 +328,6 @@ send a reminder by email. Your patch should eventually be dealt with. |
|
|
|
|
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 |
|
|
|
@ -381,8 +363,6 @@ send a reminder by email. Your patch should eventually be dealt with. |
|
|
|
|
@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 |
|
|
|
@ -401,37 +381,22 @@ 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. |
|
|
|
|
When resubmitting patches, if their size grew or during the review different |
|
|
|
|
issues arisen please split the patch so each issue has a specific patch. |
|
|
|
|
|
|
|
|
|
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 output is checked immediately after each test |
|
|
|
|
has run. |
|
|
|
|
@anchor{Regression Tests} |
|
|
|
|
@section Regression Tests |
|
|
|
|
|
|
|
|
|
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. |
|
|
|
|
Before submitting a patch (or committing to the repository), you should at |
|
|
|
|
least make sure that it does not break anything. |
|
|
|
|
|
|
|
|
|
Run 'make test' to test all the codecs and formats. Commands like |
|
|
|
|
'make regtest-mpeg2' can be used to run a single test. By default, |
|
|
|
|
make will abort if any test fails. To run all tests regardless, |
|
|
|
|
use make -k. To get a more verbose output, use 'make V=1 test' or |
|
|
|
|
'make V=2 test'. |
|
|
|
|
If the code changed has already a test present in FATE you should run it, |
|
|
|
|
otherwise it is advised to add it. |
|
|
|
|
|
|
|
|
|
Run 'make fulltest' to test all the codecs, formats and FFserver. |
|
|
|
|
Improvements to codec or demuxer might change the FATE results. Make sure |
|
|
|
|
to commit the update reference with the change and to explain in the comment |
|
|
|
|
why the expected result changed. |
|
|
|
|
|
|
|
|
|
[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]. |
|
|
|
|
Please refer to @file{doc/fate.txt}. |
|
|
|
|
|
|
|
|
|
@bye |
|
|
|
|