1CONTEXT 2======= 3 4The FFmpeg project merges all the changes from the Libav project 5(https://libav.org) since the origin of the fork (around 2011). 6 7With the exceptions of some commits due to technical/political disagreements or 8issues, the changes are merged on a more or less regular schedule (daily for 9years thanks to Michael, but more sparse nowadays). 10 11WHY 12=== 13 14The majority of the active developers believe the project needs to keep this 15policy for various reasons. 16 17The most important one is that we don't want our users to have to choose 18between two distributors of libraries of the exact same name in order to have a 19different set of features and bugfixes. By taking the responsibility of 20unifying the two codebases, we allow users to benefit from the changes from the 21two teams. 22 23Today, FFmpeg has a much larger user database (we are distributed by every 24major distribution), so we consider this mission a priority. 25 26A different approach to the merge could have been to pick the changes we are 27interested in and drop most of the cosmetics and other less important changes. 28Unfortunately, this makes the following picks much harder, especially since the 29Libav project is involved in various deep API changes. As a result, we decide 30to virtually take everything done there. 31 32Any Libav developer is of course welcome anytime to contribute directly to the 33FFmpeg tree. Of course, we fully understand and are forced to accept that very 34few Libav developers are interested in doing so, but we still want to recognize 35their work. This leads us to create merge commits for every single one from 36Libav. The original commit appears totally unchanged with full authorship in 37our history (and the conflict are solved in the merge one). That way, not a 38single thing from Libav will be lost in the future in case some reunification 39happens, or that project disappears one way or another. 40 41DOWNSIDES 42========= 43 44Of course, there are many downsides to this approach. 45 46- It causes a non negligible merge commits pollution. We make sure there are 47 not several level of merges entangled (we do a 1:1 merge/commit), but it's 48 still a non-linear history. 49 50- Many duplicated work. For instance, we added libavresample in our tree to 51 keep compatibility with Libav when our libswresample was already covering the 52 exact same purpose. The same thing happened for various elements such as the 53 ProRes support (but differences in features, bugs, licenses, ...). There are 54 many work to do to unify them, and any help is very much welcome. 55 56- So much manpower from both FFmpeg and Libav is lost because of this mess. We 57 know it, and we don't know how to fix it. It takes incredible time to do 58 these merges, so we have even less time to work on things we personally care 59 about. The bad vibes also do not help with keeping our developers motivated. 60 61- There is a growing technical risk factor with the merges due to the codebase 62 differing more and more. 63 64MERGE GUIDELINES 65================ 66 67The following gives developer guidelines on how to proceed when merging Libav commits. 68 69Before starting, you can reduce the risk of errors on merge conflicts by using 70a different merge conflict style: 71 72 $ git config --global merge.conflictstyle diff3 73 74tools/libav-merge-next-commit is a script to help merging the next commit in 75the queue. It assumes a remote named libav. It has two modes: merge, and noop. 76The noop mode creates a merge with no change to the HEAD. You can pass a hash 77as extra argument to reference a justification (it is common that we already 78have the change done in FFmpeg). 79 80Also see tools/murge, you can copy and paste a 3 way conflict into its stdin 81and it will display colored diffs. Any arguments to murge (like ones to suppress 82whitespace differences) are passed into colordiff. 83 84TODO/FIXME/UNMERGED 85=================== 86 87Stuff that didn't reach the codebase: 88------------------------------------- 89 90- HEVC DSP and x86 MC SIMD improvements from Libav (see https://ffmpeg.org/pipermail/ffmpeg-devel/2015-December/184777.html) 91 - 1f821750f hevcdsp: split the qpel functions by width instead of by the subpixel fraction 92 - 818bfe7f0 hevcdsp: split the epel functions by width 93 - 688417399 hevcdsp: split the pred functions by width 94 - a853388d2 hevc: change the stride of the MC buffer to be in bytes instead of elements 95 - 0cef06df0 checkasm: add HEVC MC tests 96 - e7078e842 hevcdsp: add x86 SIMD for MC 97 - 7993ec19a hevc: Add hevc_get_pixel_4/8/12/16/24/32/48/64 98- use av_cpu_max_align() instead of hardcoding alignment requirements (see https://ffmpeg.org/pipermail/ffmpeg-devel/2017-September/215834.html) 99 - f44ec22e0 lavc: use av_cpu_max_align() instead of hardcoding alignment requirements 100 - 4de220d2e frame: allow align=0 (meaning automatic) for av_frame_get_buffer() 101- Support recovery from an already present HLS playlist (see 16cb06bb30) 102- Remove all output devices (see 8e7e042d41, 8d3db95f20, 6ce13070bd, d46cd24986 and https://ffmpeg.org/pipermail/ffmpeg-devel/2017-September/216904.html) 103- avcodec/libaomenc: export the Sequence Header OBU as extradata (See a024c3ce9a) 104 105Collateral damage that needs work locally: 106------------------------------------------ 107 108- Merge proresenc_anatoliy.c and proresenc_kostya.c 109- Fix MIPS AC3 downmix 110 111Extra changes needed to be aligned with Libav: 112---------------------------------------------- 113 114- Switching our examples to the new encode/decode API (see 67d28f4a0f) 115- HEVC IDCT bit depth 12-bit support (Libav added 8 and 10 but doesn't have 12) 116