Pranjal12345 commited on
Commit
b86f76f
1 Parent(s): cc62117

Upload 8017 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. bin/ffmpeg/.mailmap +24 -0
  2. bin/ffmpeg/.travis.yml +30 -0
  3. bin/ffmpeg/CONTRIBUTING.md +4 -0
  4. bin/ffmpeg/COPYING.GPLv2 +339 -0
  5. bin/ffmpeg/COPYING.GPLv3 +674 -0
  6. bin/ffmpeg/COPYING.LGPLv2.1 +502 -0
  7. bin/ffmpeg/COPYING.LGPLv3 +165 -0
  8. bin/ffmpeg/CREDITS +6 -0
  9. bin/ffmpeg/Changelog +2070 -0
  10. bin/ffmpeg/INSTALL.md +17 -0
  11. bin/ffmpeg/LICENSE.md +129 -0
  12. bin/ffmpeg/MAINTAINERS +643 -0
  13. bin/ffmpeg/Makefile +198 -0
  14. bin/ffmpeg/README.md +46 -0
  15. bin/ffmpeg/RELEASE +1 -0
  16. bin/ffmpeg/RELEASE_NOTES +15 -0
  17. bin/ffmpeg/VERSION +1 -0
  18. bin/ffmpeg/compat/aix/math.h +31 -0
  19. bin/ffmpeg/compat/atomics/dummy/stdatomic.h +176 -0
  20. bin/ffmpeg/compat/atomics/gcc/stdatomic.h +173 -0
  21. bin/ffmpeg/compat/atomics/pthread/stdatomic.c +39 -0
  22. bin/ffmpeg/compat/atomics/pthread/stdatomic.h +197 -0
  23. bin/ffmpeg/compat/atomics/suncc/stdatomic.h +186 -0
  24. bin/ffmpeg/compat/atomics/win32/stdatomic.h +181 -0
  25. bin/ffmpeg/compat/cuda/cuda_runtime.h +192 -0
  26. bin/ffmpeg/compat/cuda/dynlink_loader.h +33 -0
  27. bin/ffmpeg/compat/dispatch_semaphore/semaphore.h +42 -0
  28. bin/ffmpeg/compat/djgpp/math.c +47 -0
  29. bin/ffmpeg/compat/djgpp/math.h +25 -0
  30. bin/ffmpeg/compat/float/float.h +35 -0
  31. bin/ffmpeg/compat/float/limits.h +22 -0
  32. bin/ffmpeg/compat/getopt.c +84 -0
  33. bin/ffmpeg/compat/msvcrt/snprintf.c +71 -0
  34. bin/ffmpeg/compat/msvcrt/snprintf.h +38 -0
  35. bin/ffmpeg/compat/os2threads.h +229 -0
  36. bin/ffmpeg/compat/solaris/make_sunver.pl +352 -0
  37. bin/ffmpeg/compat/strtod.c +93 -0
  38. bin/ffmpeg/compat/va_copy.h +34 -0
  39. bin/ffmpeg/compat/w32dlfcn.h +150 -0
  40. bin/ffmpeg/compat/w32pthreads.h +191 -0
  41. bin/ffmpeg/compat/windows/makedef +129 -0
  42. bin/ffmpeg/compat/windows/mslink +9 -0
  43. bin/ffmpeg/compat/windows/mswindres +32 -0
  44. bin/ffmpeg/configure +0 -0
  45. bin/ffmpeg/doc/APIchanges +0 -0
  46. bin/ffmpeg/doc/Doxyfile +0 -0
  47. bin/ffmpeg/doc/Makefile +157 -0
  48. bin/ffmpeg/doc/authors.texi +11 -0
  49. bin/ffmpeg/doc/bitstream_filters.texi +949 -0
  50. bin/ffmpeg/doc/bootstrap.min.css +0 -0
bin/ffmpeg/.travis.yml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ language: c
2
+ sudo: false
3
+ os:
4
+ - linux
5
+ - osx
6
+ addons:
7
+ apt:
8
+ packages:
9
+ - nasm
10
+ - diffutils
11
+ compiler:
12
+ - clang
13
+ - gcc
14
+ matrix:
15
+ exclude:
16
+ - os: osx
17
+ compiler: gcc
18
+ cache:
19
+ directories:
20
+ - ffmpeg-samples
21
+ before_install:
22
+ - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew update; fi
23
+ install:
24
+ - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew install nasm; fi
25
+ script:
26
+ - mkdir -p ffmpeg-samples
27
+ - ./configure --samples=ffmpeg-samples --cc=$CC
28
+ - make -j 8
29
+ - make fate-rsync
30
+ - make check -j 8
bin/ffmpeg/CONTRIBUTING.md ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ # Note to Github users
2
+ Patches should be submitted to the [ffmpeg-devel mailing list](https://ffmpeg.org/mailman/listinfo/ffmpeg-devel) using `git format-patch` or `git send-email`. Github pull requests should be avoided because they are not part of our review process and **will be ignored**.
3
+
4
+ See [https://ffmpeg.org/developer.html#Contributing](https://ffmpeg.org/developer.html#Contributing) for more information.
bin/ffmpeg/COPYING.GPLv2 ADDED
@@ -0,0 +1,339 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 2, June 1991
3
+
4
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ Preamble
10
+
11
+ The licenses for most software are designed to take away your
12
+ freedom to share and change it. By contrast, the GNU General Public
13
+ License is intended to guarantee your freedom to share and change free
14
+ software--to make sure the software is free for all its users. This
15
+ General Public License applies to most of the Free Software
16
+ Foundation's software and to any other program whose authors commit to
17
+ using it. (Some other Free Software Foundation software is covered by
18
+ the GNU Lesser General Public License instead.) You can apply it to
19
+ your programs, too.
20
+
21
+ When we speak of free software, we are referring to freedom, not
22
+ price. Our General Public Licenses are designed to make sure that you
23
+ have the freedom to distribute copies of free software (and charge for
24
+ this service if you wish), that you receive source code or can get it
25
+ if you want it, that you can change the software or use pieces of it
26
+ in new free programs; and that you know you can do these things.
27
+
28
+ To protect your rights, we need to make restrictions that forbid
29
+ anyone to deny you these rights or to ask you to surrender the rights.
30
+ These restrictions translate to certain responsibilities for you if you
31
+ distribute copies of the software, or if you modify it.
32
+
33
+ For example, if you distribute copies of such a program, whether
34
+ gratis or for a fee, you must give the recipients all the rights that
35
+ you have. You must make sure that they, too, receive or can get the
36
+ source code. And you must show them these terms so they know their
37
+ rights.
38
+
39
+ We protect your rights with two steps: (1) copyright the software, and
40
+ (2) offer you this license which gives you legal permission to copy,
41
+ distribute and/or modify the software.
42
+
43
+ Also, for each author's protection and ours, we want to make certain
44
+ that everyone understands that there is no warranty for this free
45
+ software. If the software is modified by someone else and passed on, we
46
+ want its recipients to know that what they have is not the original, so
47
+ that any problems introduced by others will not reflect on the original
48
+ authors' reputations.
49
+
50
+ Finally, any free program is threatened constantly by software
51
+ patents. We wish to avoid the danger that redistributors of a free
52
+ program will individually obtain patent licenses, in effect making the
53
+ program proprietary. To prevent this, we have made it clear that any
54
+ patent must be licensed for everyone's free use or not licensed at all.
55
+
56
+ The precise terms and conditions for copying, distribution and
57
+ modification follow.
58
+
59
+ GNU GENERAL PUBLIC LICENSE
60
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
+
62
+ 0. This License applies to any program or other work which contains
63
+ a notice placed by the copyright holder saying it may be distributed
64
+ under the terms of this General Public License. The "Program", below,
65
+ refers to any such program or work, and a "work based on the Program"
66
+ means either the Program or any derivative work under copyright law:
67
+ that is to say, a work containing the Program or a portion of it,
68
+ either verbatim or with modifications and/or translated into another
69
+ language. (Hereinafter, translation is included without limitation in
70
+ the term "modification".) Each licensee is addressed as "you".
71
+
72
+ Activities other than copying, distribution and modification are not
73
+ covered by this License; they are outside its scope. The act of
74
+ running the Program is not restricted, and the output from the Program
75
+ is covered only if its contents constitute a work based on the
76
+ Program (independent of having been made by running the Program).
77
+ Whether that is true depends on what the Program does.
78
+
79
+ 1. You may copy and distribute verbatim copies of the Program's
80
+ source code as you receive it, in any medium, provided that you
81
+ conspicuously and appropriately publish on each copy an appropriate
82
+ copyright notice and disclaimer of warranty; keep intact all the
83
+ notices that refer to this License and to the absence of any warranty;
84
+ and give any other recipients of the Program a copy of this License
85
+ along with the Program.
86
+
87
+ You may charge a fee for the physical act of transferring a copy, and
88
+ you may at your option offer warranty protection in exchange for a fee.
89
+
90
+ 2. You may modify your copy or copies of the Program or any portion
91
+ of it, thus forming a work based on the Program, and copy and
92
+ distribute such modifications or work under the terms of Section 1
93
+ above, provided that you also meet all of these conditions:
94
+
95
+ a) You must cause the modified files to carry prominent notices
96
+ stating that you changed the files and the date of any change.
97
+
98
+ b) You must cause any work that you distribute or publish, that in
99
+ whole or in part contains or is derived from the Program or any
100
+ part thereof, to be licensed as a whole at no charge to all third
101
+ parties under the terms of this License.
102
+
103
+ c) If the modified program normally reads commands interactively
104
+ when run, you must cause it, when started running for such
105
+ interactive use in the most ordinary way, to print or display an
106
+ announcement including an appropriate copyright notice and a
107
+ notice that there is no warranty (or else, saying that you provide
108
+ a warranty) and that users may redistribute the program under
109
+ these conditions, and telling the user how to view a copy of this
110
+ License. (Exception: if the Program itself is interactive but
111
+ does not normally print such an announcement, your work based on
112
+ the Program is not required to print an announcement.)
113
+
114
+ These requirements apply to the modified work as a whole. If
115
+ identifiable sections of that work are not derived from the Program,
116
+ and can be reasonably considered independent and separate works in
117
+ themselves, then this License, and its terms, do not apply to those
118
+ sections when you distribute them as separate works. But when you
119
+ distribute the same sections as part of a whole which is a work based
120
+ on the Program, the distribution of the whole must be on the terms of
121
+ this License, whose permissions for other licensees extend to the
122
+ entire whole, and thus to each and every part regardless of who wrote it.
123
+
124
+ Thus, it is not the intent of this section to claim rights or contest
125
+ your rights to work written entirely by you; rather, the intent is to
126
+ exercise the right to control the distribution of derivative or
127
+ collective works based on the Program.
128
+
129
+ In addition, mere aggregation of another work not based on the Program
130
+ with the Program (or with a work based on the Program) on a volume of
131
+ a storage or distribution medium does not bring the other work under
132
+ the scope of this License.
133
+
134
+ 3. You may copy and distribute the Program (or a work based on it,
135
+ under Section 2) in object code or executable form under the terms of
136
+ Sections 1 and 2 above provided that you also do one of the following:
137
+
138
+ a) Accompany it with the complete corresponding machine-readable
139
+ source code, which must be distributed under the terms of Sections
140
+ 1 and 2 above on a medium customarily used for software interchange; or,
141
+
142
+ b) Accompany it with a written offer, valid for at least three
143
+ years, to give any third party, for a charge no more than your
144
+ cost of physically performing source distribution, a complete
145
+ machine-readable copy of the corresponding source code, to be
146
+ distributed under the terms of Sections 1 and 2 above on a medium
147
+ customarily used for software interchange; or,
148
+
149
+ c) Accompany it with the information you received as to the offer
150
+ to distribute corresponding source code. (This alternative is
151
+ allowed only for noncommercial distribution and only if you
152
+ received the program in object code or executable form with such
153
+ an offer, in accord with Subsection b above.)
154
+
155
+ The source code for a work means the preferred form of the work for
156
+ making modifications to it. For an executable work, complete source
157
+ code means all the source code for all modules it contains, plus any
158
+ associated interface definition files, plus the scripts used to
159
+ control compilation and installation of the executable. However, as a
160
+ special exception, the source code distributed need not include
161
+ anything that is normally distributed (in either source or binary
162
+ form) with the major components (compiler, kernel, and so on) of the
163
+ operating system on which the executable runs, unless that component
164
+ itself accompanies the executable.
165
+
166
+ If distribution of executable or object code is made by offering
167
+ access to copy from a designated place, then offering equivalent
168
+ access to copy the source code from the same place counts as
169
+ distribution of the source code, even though third parties are not
170
+ compelled to copy the source along with the object code.
171
+
172
+ 4. You may not copy, modify, sublicense, or distribute the Program
173
+ except as expressly provided under this License. Any attempt
174
+ otherwise to copy, modify, sublicense or distribute the Program is
175
+ void, and will automatically terminate your rights under this License.
176
+ However, parties who have received copies, or rights, from you under
177
+ this License will not have their licenses terminated so long as such
178
+ parties remain in full compliance.
179
+
180
+ 5. You are not required to accept this License, since you have not
181
+ signed it. However, nothing else grants you permission to modify or
182
+ distribute the Program or its derivative works. These actions are
183
+ prohibited by law if you do not accept this License. Therefore, by
184
+ modifying or distributing the Program (or any work based on the
185
+ Program), you indicate your acceptance of this License to do so, and
186
+ all its terms and conditions for copying, distributing or modifying
187
+ the Program or works based on it.
188
+
189
+ 6. Each time you redistribute the Program (or any work based on the
190
+ Program), the recipient automatically receives a license from the
191
+ original licensor to copy, distribute or modify the Program subject to
192
+ these terms and conditions. You may not impose any further
193
+ restrictions on the recipients' exercise of the rights granted herein.
194
+ You are not responsible for enforcing compliance by third parties to
195
+ this License.
196
+
197
+ 7. If, as a consequence of a court judgment or allegation of patent
198
+ infringement or for any other reason (not limited to patent issues),
199
+ conditions are imposed on you (whether by court order, agreement or
200
+ otherwise) that contradict the conditions of this License, they do not
201
+ excuse you from the conditions of this License. If you cannot
202
+ distribute so as to satisfy simultaneously your obligations under this
203
+ License and any other pertinent obligations, then as a consequence you
204
+ may not distribute the Program at all. For example, if a patent
205
+ license would not permit royalty-free redistribution of the Program by
206
+ all those who receive copies directly or indirectly through you, then
207
+ the only way you could satisfy both it and this License would be to
208
+ refrain entirely from distribution of the Program.
209
+
210
+ If any portion of this section is held invalid or unenforceable under
211
+ any particular circumstance, the balance of the section is intended to
212
+ apply and the section as a whole is intended to apply in other
213
+ circumstances.
214
+
215
+ It is not the purpose of this section to induce you to infringe any
216
+ patents or other property right claims or to contest validity of any
217
+ such claims; this section has the sole purpose of protecting the
218
+ integrity of the free software distribution system, which is
219
+ implemented by public license practices. Many people have made
220
+ generous contributions to the wide range of software distributed
221
+ through that system in reliance on consistent application of that
222
+ system; it is up to the author/donor to decide if he or she is willing
223
+ to distribute software through any other system and a licensee cannot
224
+ impose that choice.
225
+
226
+ This section is intended to make thoroughly clear what is believed to
227
+ be a consequence of the rest of this License.
228
+
229
+ 8. If the distribution and/or use of the Program is restricted in
230
+ certain countries either by patents or by copyrighted interfaces, the
231
+ original copyright holder who places the Program under this License
232
+ may add an explicit geographical distribution limitation excluding
233
+ those countries, so that distribution is permitted only in or among
234
+ countries not thus excluded. In such case, this License incorporates
235
+ the limitation as if written in the body of this License.
236
+
237
+ 9. The Free Software Foundation may publish revised and/or new versions
238
+ of the General Public License from time to time. Such new versions will
239
+ be similar in spirit to the present version, but may differ in detail to
240
+ address new problems or concerns.
241
+
242
+ Each version is given a distinguishing version number. If the Program
243
+ specifies a version number of this License which applies to it and "any
244
+ later version", you have the option of following the terms and conditions
245
+ either of that version or of any later version published by the Free
246
+ Software Foundation. If the Program does not specify a version number of
247
+ this License, you may choose any version ever published by the Free Software
248
+ Foundation.
249
+
250
+ 10. If you wish to incorporate parts of the Program into other free
251
+ programs whose distribution conditions are different, write to the author
252
+ to ask for permission. For software which is copyrighted by the Free
253
+ Software Foundation, write to the Free Software Foundation; we sometimes
254
+ make exceptions for this. Our decision will be guided by the two goals
255
+ of preserving the free status of all derivatives of our free software and
256
+ of promoting the sharing and reuse of software generally.
257
+
258
+ NO WARRANTY
259
+
260
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268
+ REPAIR OR CORRECTION.
269
+
270
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
+ POSSIBILITY OF SUCH DAMAGES.
279
+
280
+ END OF TERMS AND CONDITIONS
281
+
282
+ How to Apply These Terms to Your New Programs
283
+
284
+ If you develop a new program, and you want it to be of the greatest
285
+ possible use to the public, the best way to achieve this is to make it
286
+ free software which everyone can redistribute and change under these terms.
287
+
288
+ To do so, attach the following notices to the program. It is safest
289
+ to attach them to the start of each source file to most effectively
290
+ convey the exclusion of warranty; and each file should have at least
291
+ the "copyright" line and a pointer to where the full notice is found.
292
+
293
+ <one line to give the program's name and a brief idea of what it does.>
294
+ Copyright (C) <year> <name of author>
295
+
296
+ This program is free software; you can redistribute it and/or modify
297
+ it under the terms of the GNU General Public License as published by
298
+ the Free Software Foundation; either version 2 of the License, or
299
+ (at your option) any later version.
300
+
301
+ This program is distributed in the hope that it will be useful,
302
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
303
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304
+ GNU General Public License for more details.
305
+
306
+ You should have received a copy of the GNU General Public License along
307
+ with this program; if not, write to the Free Software Foundation, Inc.,
308
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309
+
310
+ Also add information on how to contact you by electronic and paper mail.
311
+
312
+ If the program is interactive, make it output a short notice like this
313
+ when it starts in an interactive mode:
314
+
315
+ Gnomovision version 69, Copyright (C) year name of author
316
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317
+ This is free software, and you are welcome to redistribute it
318
+ under certain conditions; type `show c' for details.
319
+
320
+ The hypothetical commands `show w' and `show c' should show the appropriate
321
+ parts of the General Public License. Of course, the commands you use may
322
+ be called something other than `show w' and `show c'; they could even be
323
+ mouse-clicks or menu items--whatever suits your program.
324
+
325
+ You should also get your employer (if you work as a programmer) or your
326
+ school, if any, to sign a "copyright disclaimer" for the program, if
327
+ necessary. Here is a sample; alter the names:
328
+
329
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
+
332
+ <signature of Ty Coon>, 1 April 1989
333
+ Ty Coon, President of Vice
334
+
335
+ This General Public License does not permit incorporating your program into
336
+ proprietary programs. If your program is a subroutine library, you may
337
+ consider it more useful to permit linking proprietary applications with the
338
+ library. If this is what you want to do, use the GNU Lesser General
339
+ Public License instead of this License.
bin/ffmpeg/COPYING.GPLv3 ADDED
@@ -0,0 +1,674 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 3, 29 June 2007
3
+
4
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
5
+ Everyone is permitted to copy and distribute verbatim copies
6
+ of this license document, but changing it is not allowed.
7
+
8
+ Preamble
9
+
10
+ The GNU General Public License is a free, copyleft license for
11
+ software and other kinds of works.
12
+
13
+ The licenses for most software and other practical works are designed
14
+ to take away your freedom to share and change the works. By contrast,
15
+ the GNU General Public License is intended to guarantee your freedom to
16
+ share and change all versions of a program--to make sure it remains free
17
+ software for all its users. We, the Free Software Foundation, use the
18
+ GNU General Public License for most of our software; it applies also to
19
+ any other work released this way by its authors. You can apply it to
20
+ your programs, too.
21
+
22
+ When we speak of free software, we are referring to freedom, not
23
+ price. Our General Public Licenses are designed to make sure that you
24
+ have the freedom to distribute copies of free software (and charge for
25
+ them if you wish), that you receive source code or can get it if you
26
+ want it, that you can change the software or use pieces of it in new
27
+ free programs, and that you know you can do these things.
28
+
29
+ To protect your rights, we need to prevent others from denying you
30
+ these rights or asking you to surrender the rights. Therefore, you have
31
+ certain responsibilities if you distribute copies of the software, or if
32
+ you modify it: responsibilities to respect the freedom of others.
33
+
34
+ For example, if you distribute copies of such a program, whether
35
+ gratis or for a fee, you must pass on to the recipients the same
36
+ freedoms that you received. You must make sure that they, too, receive
37
+ or can get the source code. And you must show them these terms so they
38
+ know their rights.
39
+
40
+ Developers that use the GNU GPL protect your rights with two steps:
41
+ (1) assert copyright on the software, and (2) offer you this License
42
+ giving you legal permission to copy, distribute and/or modify it.
43
+
44
+ For the developers' and authors' protection, the GPL clearly explains
45
+ that there is no warranty for this free software. For both users' and
46
+ authors' sake, the GPL requires that modified versions be marked as
47
+ changed, so that their problems will not be attributed erroneously to
48
+ authors of previous versions.
49
+
50
+ Some devices are designed to deny users access to install or run
51
+ modified versions of the software inside them, although the manufacturer
52
+ can do so. This is fundamentally incompatible with the aim of
53
+ protecting users' freedom to change the software. The systematic
54
+ pattern of such abuse occurs in the area of products for individuals to
55
+ use, which is precisely where it is most unacceptable. Therefore, we
56
+ have designed this version of the GPL to prohibit the practice for those
57
+ products. If such problems arise substantially in other domains, we
58
+ stand ready to extend this provision to those domains in future versions
59
+ of the GPL, as needed to protect the freedom of users.
60
+
61
+ Finally, every program is threatened constantly by software patents.
62
+ States should not allow patents to restrict development and use of
63
+ software on general-purpose computers, but in those that do, we wish to
64
+ avoid the special danger that patents applied to a free program could
65
+ make it effectively proprietary. To prevent this, the GPL assures that
66
+ patents cannot be used to render the program non-free.
67
+
68
+ The precise terms and conditions for copying, distribution and
69
+ modification follow.
70
+
71
+ TERMS AND CONDITIONS
72
+
73
+ 0. Definitions.
74
+
75
+ "This License" refers to version 3 of the GNU General Public License.
76
+
77
+ "Copyright" also means copyright-like laws that apply to other kinds of
78
+ works, such as semiconductor masks.
79
+
80
+ "The Program" refers to any copyrightable work licensed under this
81
+ License. Each licensee is addressed as "you". "Licensees" and
82
+ "recipients" may be individuals or organizations.
83
+
84
+ To "modify" a work means to copy from or adapt all or part of the work
85
+ in a fashion requiring copyright permission, other than the making of an
86
+ exact copy. The resulting work is called a "modified version" of the
87
+ earlier work or a work "based on" the earlier work.
88
+
89
+ A "covered work" means either the unmodified Program or a work based
90
+ on the Program.
91
+
92
+ To "propagate" a work means to do anything with it that, without
93
+ permission, would make you directly or secondarily liable for
94
+ infringement under applicable copyright law, except executing it on a
95
+ computer or modifying a private copy. Propagation includes copying,
96
+ distribution (with or without modification), making available to the
97
+ public, and in some countries other activities as well.
98
+
99
+ To "convey" a work means any kind of propagation that enables other
100
+ parties to make or receive copies. Mere interaction with a user through
101
+ a computer network, with no transfer of a copy, is not conveying.
102
+
103
+ An interactive user interface displays "Appropriate Legal Notices"
104
+ to the extent that it includes a convenient and prominently visible
105
+ feature that (1) displays an appropriate copyright notice, and (2)
106
+ tells the user that there is no warranty for the work (except to the
107
+ extent that warranties are provided), that licensees may convey the
108
+ work under this License, and how to view a copy of this License. If
109
+ the interface presents a list of user commands or options, such as a
110
+ menu, a prominent item in the list meets this criterion.
111
+
112
+ 1. Source Code.
113
+
114
+ The "source code" for a work means the preferred form of the work
115
+ for making modifications to it. "Object code" means any non-source
116
+ form of a work.
117
+
118
+ A "Standard Interface" means an interface that either is an official
119
+ standard defined by a recognized standards body, or, in the case of
120
+ interfaces specified for a particular programming language, one that
121
+ is widely used among developers working in that language.
122
+
123
+ The "System Libraries" of an executable work include anything, other
124
+ than the work as a whole, that (a) is included in the normal form of
125
+ packaging a Major Component, but which is not part of that Major
126
+ Component, and (b) serves only to enable use of the work with that
127
+ Major Component, or to implement a Standard Interface for which an
128
+ implementation is available to the public in source code form. A
129
+ "Major Component", in this context, means a major essential component
130
+ (kernel, window system, and so on) of the specific operating system
131
+ (if any) on which the executable work runs, or a compiler used to
132
+ produce the work, or an object code interpreter used to run it.
133
+
134
+ The "Corresponding Source" for a work in object code form means all
135
+ the source code needed to generate, install, and (for an executable
136
+ work) run the object code and to modify the work, including scripts to
137
+ control those activities. However, it does not include the work's
138
+ System Libraries, or general-purpose tools or generally available free
139
+ programs which are used unmodified in performing those activities but
140
+ which are not part of the work. For example, Corresponding Source
141
+ includes interface definition files associated with source files for
142
+ the work, and the source code for shared libraries and dynamically
143
+ linked subprograms that the work is specifically designed to require,
144
+ such as by intimate data communication or control flow between those
145
+ subprograms and other parts of the work.
146
+
147
+ The Corresponding Source need not include anything that users
148
+ can regenerate automatically from other parts of the Corresponding
149
+ Source.
150
+
151
+ The Corresponding Source for a work in source code form is that
152
+ same work.
153
+
154
+ 2. Basic Permissions.
155
+
156
+ All rights granted under this License are granted for the term of
157
+ copyright on the Program, and are irrevocable provided the stated
158
+ conditions are met. This License explicitly affirms your unlimited
159
+ permission to run the unmodified Program. The output from running a
160
+ covered work is covered by this License only if the output, given its
161
+ content, constitutes a covered work. This License acknowledges your
162
+ rights of fair use or other equivalent, as provided by copyright law.
163
+
164
+ You may make, run and propagate covered works that you do not
165
+ convey, without conditions so long as your license otherwise remains
166
+ in force. You may convey covered works to others for the sole purpose
167
+ of having them make modifications exclusively for you, or provide you
168
+ with facilities for running those works, provided that you comply with
169
+ the terms of this License in conveying all material for which you do
170
+ not control copyright. Those thus making or running the covered works
171
+ for you must do so exclusively on your behalf, under your direction
172
+ and control, on terms that prohibit them from making any copies of
173
+ your copyrighted material outside their relationship with you.
174
+
175
+ Conveying under any other circumstances is permitted solely under
176
+ the conditions stated below. Sublicensing is not allowed; section 10
177
+ makes it unnecessary.
178
+
179
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180
+
181
+ No covered work shall be deemed part of an effective technological
182
+ measure under any applicable law fulfilling obligations under article
183
+ 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184
+ similar laws prohibiting or restricting circumvention of such
185
+ measures.
186
+
187
+ When you convey a covered work, you waive any legal power to forbid
188
+ circumvention of technological measures to the extent such circumvention
189
+ is effected by exercising rights under this License with respect to
190
+ the covered work, and you disclaim any intention to limit operation or
191
+ modification of the work as a means of enforcing, against the work's
192
+ users, your or third parties' legal rights to forbid circumvention of
193
+ technological measures.
194
+
195
+ 4. Conveying Verbatim Copies.
196
+
197
+ You may convey verbatim copies of the Program's source code as you
198
+ receive it, in any medium, provided that you conspicuously and
199
+ appropriately publish on each copy an appropriate copyright notice;
200
+ keep intact all notices stating that this License and any
201
+ non-permissive terms added in accord with section 7 apply to the code;
202
+ keep intact all notices of the absence of any warranty; and give all
203
+ recipients a copy of this License along with the Program.
204
+
205
+ You may charge any price or no price for each copy that you convey,
206
+ and you may offer support or warranty protection for a fee.
207
+
208
+ 5. Conveying Modified Source Versions.
209
+
210
+ You may convey a work based on the Program, or the modifications to
211
+ produce it from the Program, in the form of source code under the
212
+ terms of section 4, provided that you also meet all of these conditions:
213
+
214
+ a) The work must carry prominent notices stating that you modified
215
+ it, and giving a relevant date.
216
+
217
+ b) The work must carry prominent notices stating that it is
218
+ released under this License and any conditions added under section
219
+ 7. This requirement modifies the requirement in section 4 to
220
+ "keep intact all notices".
221
+
222
+ c) You must license the entire work, as a whole, under this
223
+ License to anyone who comes into possession of a copy. This
224
+ License will therefore apply, along with any applicable section 7
225
+ additional terms, to the whole of the work, and all its parts,
226
+ regardless of how they are packaged. This License gives no
227
+ permission to license the work in any other way, but it does not
228
+ invalidate such permission if you have separately received it.
229
+
230
+ d) If the work has interactive user interfaces, each must display
231
+ Appropriate Legal Notices; however, if the Program has interactive
232
+ interfaces that do not display Appropriate Legal Notices, your
233
+ work need not make them do so.
234
+
235
+ A compilation of a covered work with other separate and independent
236
+ works, which are not by their nature extensions of the covered work,
237
+ and which are not combined with it such as to form a larger program,
238
+ in or on a volume of a storage or distribution medium, is called an
239
+ "aggregate" if the compilation and its resulting copyright are not
240
+ used to limit the access or legal rights of the compilation's users
241
+ beyond what the individual works permit. Inclusion of a covered work
242
+ in an aggregate does not cause this License to apply to the other
243
+ parts of the aggregate.
244
+
245
+ 6. Conveying Non-Source Forms.
246
+
247
+ You may convey a covered work in object code form under the terms
248
+ of sections 4 and 5, provided that you also convey the
249
+ machine-readable Corresponding Source under the terms of this License,
250
+ in one of these ways:
251
+
252
+ a) Convey the object code in, or embodied in, a physical product
253
+ (including a physical distribution medium), accompanied by the
254
+ Corresponding Source fixed on a durable physical medium
255
+ customarily used for software interchange.
256
+
257
+ b) Convey the object code in, or embodied in, a physical product
258
+ (including a physical distribution medium), accompanied by a
259
+ written offer, valid for at least three years and valid for as
260
+ long as you offer spare parts or customer support for that product
261
+ model, to give anyone who possesses the object code either (1) a
262
+ copy of the Corresponding Source for all the software in the
263
+ product that is covered by this License, on a durable physical
264
+ medium customarily used for software interchange, for a price no
265
+ more than your reasonable cost of physically performing this
266
+ conveying of source, or (2) access to copy the
267
+ Corresponding Source from a network server at no charge.
268
+
269
+ c) Convey individual copies of the object code with a copy of the
270
+ written offer to provide the Corresponding Source. This
271
+ alternative is allowed only occasionally and noncommercially, and
272
+ only if you received the object code with such an offer, in accord
273
+ with subsection 6b.
274
+
275
+ d) Convey the object code by offering access from a designated
276
+ place (gratis or for a charge), and offer equivalent access to the
277
+ Corresponding Source in the same way through the same place at no
278
+ further charge. You need not require recipients to copy the
279
+ Corresponding Source along with the object code. If the place to
280
+ copy the object code is a network server, the Corresponding Source
281
+ may be on a different server (operated by you or a third party)
282
+ that supports equivalent copying facilities, provided you maintain
283
+ clear directions next to the object code saying where to find the
284
+ Corresponding Source. Regardless of what server hosts the
285
+ Corresponding Source, you remain obligated to ensure that it is
286
+ available for as long as needed to satisfy these requirements.
287
+
288
+ e) Convey the object code using peer-to-peer transmission, provided
289
+ you inform other peers where the object code and Corresponding
290
+ Source of the work are being offered to the general public at no
291
+ charge under subsection 6d.
292
+
293
+ A separable portion of the object code, whose source code is excluded
294
+ from the Corresponding Source as a System Library, need not be
295
+ included in conveying the object code work.
296
+
297
+ A "User Product" is either (1) a "consumer product", which means any
298
+ tangible personal property which is normally used for personal, family,
299
+ or household purposes, or (2) anything designed or sold for incorporation
300
+ into a dwelling. In determining whether a product is a consumer product,
301
+ doubtful cases shall be resolved in favor of coverage. For a particular
302
+ product received by a particular user, "normally used" refers to a
303
+ typical or common use of that class of product, regardless of the status
304
+ of the particular user or of the way in which the particular user
305
+ actually uses, or expects or is expected to use, the product. A product
306
+ is a consumer product regardless of whether the product has substantial
307
+ commercial, industrial or non-consumer uses, unless such uses represent
308
+ the only significant mode of use of the product.
309
+
310
+ "Installation Information" for a User Product means any methods,
311
+ procedures, authorization keys, or other information required to install
312
+ and execute modified versions of a covered work in that User Product from
313
+ a modified version of its Corresponding Source. The information must
314
+ suffice to ensure that the continued functioning of the modified object
315
+ code is in no case prevented or interfered with solely because
316
+ modification has been made.
317
+
318
+ If you convey an object code work under this section in, or with, or
319
+ specifically for use in, a User Product, and the conveying occurs as
320
+ part of a transaction in which the right of possession and use of the
321
+ User Product is transferred to the recipient in perpetuity or for a
322
+ fixed term (regardless of how the transaction is characterized), the
323
+ Corresponding Source conveyed under this section must be accompanied
324
+ by the Installation Information. But this requirement does not apply
325
+ if neither you nor any third party retains the ability to install
326
+ modified object code on the User Product (for example, the work has
327
+ been installed in ROM).
328
+
329
+ The requirement to provide Installation Information does not include a
330
+ requirement to continue to provide support service, warranty, or updates
331
+ for a work that has been modified or installed by the recipient, or for
332
+ the User Product in which it has been modified or installed. Access to a
333
+ network may be denied when the modification itself materially and
334
+ adversely affects the operation of the network or violates the rules and
335
+ protocols for communication across the network.
336
+
337
+ Corresponding Source conveyed, and Installation Information provided,
338
+ in accord with this section must be in a format that is publicly
339
+ documented (and with an implementation available to the public in
340
+ source code form), and must require no special password or key for
341
+ unpacking, reading or copying.
342
+
343
+ 7. Additional Terms.
344
+
345
+ "Additional permissions" are terms that supplement the terms of this
346
+ License by making exceptions from one or more of its conditions.
347
+ Additional permissions that are applicable to the entire Program shall
348
+ be treated as though they were included in this License, to the extent
349
+ that they are valid under applicable law. If additional permissions
350
+ apply only to part of the Program, that part may be used separately
351
+ under those permissions, but the entire Program remains governed by
352
+ this License without regard to the additional permissions.
353
+
354
+ When you convey a copy of a covered work, you may at your option
355
+ remove any additional permissions from that copy, or from any part of
356
+ it. (Additional permissions may be written to require their own
357
+ removal in certain cases when you modify the work.) You may place
358
+ additional permissions on material, added by you to a covered work,
359
+ for which you have or can give appropriate copyright permission.
360
+
361
+ Notwithstanding any other provision of this License, for material you
362
+ add to a covered work, you may (if authorized by the copyright holders of
363
+ that material) supplement the terms of this License with terms:
364
+
365
+ a) Disclaiming warranty or limiting liability differently from the
366
+ terms of sections 15 and 16 of this License; or
367
+
368
+ b) Requiring preservation of specified reasonable legal notices or
369
+ author attributions in that material or in the Appropriate Legal
370
+ Notices displayed by works containing it; or
371
+
372
+ c) Prohibiting misrepresentation of the origin of that material, or
373
+ requiring that modified versions of such material be marked in
374
+ reasonable ways as different from the original version; or
375
+
376
+ d) Limiting the use for publicity purposes of names of licensors or
377
+ authors of the material; or
378
+
379
+ e) Declining to grant rights under trademark law for use of some
380
+ trade names, trademarks, or service marks; or
381
+
382
+ f) Requiring indemnification of licensors and authors of that
383
+ material by anyone who conveys the material (or modified versions of
384
+ it) with contractual assumptions of liability to the recipient, for
385
+ any liability that these contractual assumptions directly impose on
386
+ those licensors and authors.
387
+
388
+ All other non-permissive additional terms are considered "further
389
+ restrictions" within the meaning of section 10. If the Program as you
390
+ received it, or any part of it, contains a notice stating that it is
391
+ governed by this License along with a term that is a further
392
+ restriction, you may remove that term. If a license document contains
393
+ a further restriction but permits relicensing or conveying under this
394
+ License, you may add to a covered work material governed by the terms
395
+ of that license document, provided that the further restriction does
396
+ not survive such relicensing or conveying.
397
+
398
+ If you add terms to a covered work in accord with this section, you
399
+ must place, in the relevant source files, a statement of the
400
+ additional terms that apply to those files, or a notice indicating
401
+ where to find the applicable terms.
402
+
403
+ Additional terms, permissive or non-permissive, may be stated in the
404
+ form of a separately written license, or stated as exceptions;
405
+ the above requirements apply either way.
406
+
407
+ 8. Termination.
408
+
409
+ You may not propagate or modify a covered work except as expressly
410
+ provided under this License. Any attempt otherwise to propagate or
411
+ modify it is void, and will automatically terminate your rights under
412
+ this License (including any patent licenses granted under the third
413
+ paragraph of section 11).
414
+
415
+ However, if you cease all violation of this License, then your
416
+ license from a particular copyright holder is reinstated (a)
417
+ provisionally, unless and until the copyright holder explicitly and
418
+ finally terminates your license, and (b) permanently, if the copyright
419
+ holder fails to notify you of the violation by some reasonable means
420
+ prior to 60 days after the cessation.
421
+
422
+ Moreover, your license from a particular copyright holder is
423
+ reinstated permanently if the copyright holder notifies you of the
424
+ violation by some reasonable means, this is the first time you have
425
+ received notice of violation of this License (for any work) from that
426
+ copyright holder, and you cure the violation prior to 30 days after
427
+ your receipt of the notice.
428
+
429
+ Termination of your rights under this section does not terminate the
430
+ licenses of parties who have received copies or rights from you under
431
+ this License. If your rights have been terminated and not permanently
432
+ reinstated, you do not qualify to receive new licenses for the same
433
+ material under section 10.
434
+
435
+ 9. Acceptance Not Required for Having Copies.
436
+
437
+ You are not required to accept this License in order to receive or
438
+ run a copy of the Program. Ancillary propagation of a covered work
439
+ occurring solely as a consequence of using peer-to-peer transmission
440
+ to receive a copy likewise does not require acceptance. However,
441
+ nothing other than this License grants you permission to propagate or
442
+ modify any covered work. These actions infringe copyright if you do
443
+ not accept this License. Therefore, by modifying or propagating a
444
+ covered work, you indicate your acceptance of this License to do so.
445
+
446
+ 10. Automatic Licensing of Downstream Recipients.
447
+
448
+ Each time you convey a covered work, the recipient automatically
449
+ receives a license from the original licensors, to run, modify and
450
+ propagate that work, subject to this License. You are not responsible
451
+ for enforcing compliance by third parties with this License.
452
+
453
+ An "entity transaction" is a transaction transferring control of an
454
+ organization, or substantially all assets of one, or subdividing an
455
+ organization, or merging organizations. If propagation of a covered
456
+ work results from an entity transaction, each party to that
457
+ transaction who receives a copy of the work also receives whatever
458
+ licenses to the work the party's predecessor in interest had or could
459
+ give under the previous paragraph, plus a right to possession of the
460
+ Corresponding Source of the work from the predecessor in interest, if
461
+ the predecessor has it or can get it with reasonable efforts.
462
+
463
+ You may not impose any further restrictions on the exercise of the
464
+ rights granted or affirmed under this License. For example, you may
465
+ not impose a license fee, royalty, or other charge for exercise of
466
+ rights granted under this License, and you may not initiate litigation
467
+ (including a cross-claim or counterclaim in a lawsuit) alleging that
468
+ any patent claim is infringed by making, using, selling, offering for
469
+ sale, or importing the Program or any portion of it.
470
+
471
+ 11. Patents.
472
+
473
+ A "contributor" is a copyright holder who authorizes use under this
474
+ License of the Program or a work on which the Program is based. The
475
+ work thus licensed is called the contributor's "contributor version".
476
+
477
+ A contributor's "essential patent claims" are all patent claims
478
+ owned or controlled by the contributor, whether already acquired or
479
+ hereafter acquired, that would be infringed by some manner, permitted
480
+ by this License, of making, using, or selling its contributor version,
481
+ but do not include claims that would be infringed only as a
482
+ consequence of further modification of the contributor version. For
483
+ purposes of this definition, "control" includes the right to grant
484
+ patent sublicenses in a manner consistent with the requirements of
485
+ this License.
486
+
487
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
488
+ patent license under the contributor's essential patent claims, to
489
+ make, use, sell, offer for sale, import and otherwise run, modify and
490
+ propagate the contents of its contributor version.
491
+
492
+ In the following three paragraphs, a "patent license" is any express
493
+ agreement or commitment, however denominated, not to enforce a patent
494
+ (such as an express permission to practice a patent or covenant not to
495
+ sue for patent infringement). To "grant" such a patent license to a
496
+ party means to make such an agreement or commitment not to enforce a
497
+ patent against the party.
498
+
499
+ If you convey a covered work, knowingly relying on a patent license,
500
+ and the Corresponding Source of the work is not available for anyone
501
+ to copy, free of charge and under the terms of this License, through a
502
+ publicly available network server or other readily accessible means,
503
+ then you must either (1) cause the Corresponding Source to be so
504
+ available, or (2) arrange to deprive yourself of the benefit of the
505
+ patent license for this particular work, or (3) arrange, in a manner
506
+ consistent with the requirements of this License, to extend the patent
507
+ license to downstream recipients. "Knowingly relying" means you have
508
+ actual knowledge that, but for the patent license, your conveying the
509
+ covered work in a country, or your recipient's use of the covered work
510
+ in a country, would infringe one or more identifiable patents in that
511
+ country that you have reason to believe are valid.
512
+
513
+ If, pursuant to or in connection with a single transaction or
514
+ arrangement, you convey, or propagate by procuring conveyance of, a
515
+ covered work, and grant a patent license to some of the parties
516
+ receiving the covered work authorizing them to use, propagate, modify
517
+ or convey a specific copy of the covered work, then the patent license
518
+ you grant is automatically extended to all recipients of the covered
519
+ work and works based on it.
520
+
521
+ A patent license is "discriminatory" if it does not include within
522
+ the scope of its coverage, prohibits the exercise of, or is
523
+ conditioned on the non-exercise of one or more of the rights that are
524
+ specifically granted under this License. You may not convey a covered
525
+ work if you are a party to an arrangement with a third party that is
526
+ in the business of distributing software, under which you make payment
527
+ to the third party based on the extent of your activity of conveying
528
+ the work, and under which the third party grants, to any of the
529
+ parties who would receive the covered work from you, a discriminatory
530
+ patent license (a) in connection with copies of the covered work
531
+ conveyed by you (or copies made from those copies), or (b) primarily
532
+ for and in connection with specific products or compilations that
533
+ contain the covered work, unless you entered into that arrangement,
534
+ or that patent license was granted, prior to 28 March 2007.
535
+
536
+ Nothing in this License shall be construed as excluding or limiting
537
+ any implied license or other defenses to infringement that may
538
+ otherwise be available to you under applicable patent law.
539
+
540
+ 12. No Surrender of Others' Freedom.
541
+
542
+ If conditions are imposed on you (whether by court order, agreement or
543
+ otherwise) that contradict the conditions of this License, they do not
544
+ excuse you from the conditions of this License. If you cannot convey a
545
+ covered work so as to satisfy simultaneously your obligations under this
546
+ License and any other pertinent obligations, then as a consequence you may
547
+ not convey it at all. For example, if you agree to terms that obligate you
548
+ to collect a royalty for further conveying from those to whom you convey
549
+ the Program, the only way you could satisfy both those terms and this
550
+ License would be to refrain entirely from conveying the Program.
551
+
552
+ 13. Use with the GNU Affero General Public License.
553
+
554
+ Notwithstanding any other provision of this License, you have
555
+ permission to link or combine any covered work with a work licensed
556
+ under version 3 of the GNU Affero General Public License into a single
557
+ combined work, and to convey the resulting work. The terms of this
558
+ License will continue to apply to the part which is the covered work,
559
+ but the special requirements of the GNU Affero General Public License,
560
+ section 13, concerning interaction through a network will apply to the
561
+ combination as such.
562
+
563
+ 14. Revised Versions of this License.
564
+
565
+ The Free Software Foundation may publish revised and/or new versions of
566
+ the GNU General Public License from time to time. Such new versions will
567
+ be similar in spirit to the present version, but may differ in detail to
568
+ address new problems or concerns.
569
+
570
+ Each version is given a distinguishing version number. If the
571
+ Program specifies that a certain numbered version of the GNU General
572
+ Public License "or any later version" applies to it, you have the
573
+ option of following the terms and conditions either of that numbered
574
+ version or of any later version published by the Free Software
575
+ Foundation. If the Program does not specify a version number of the
576
+ GNU General Public License, you may choose any version ever published
577
+ by the Free Software Foundation.
578
+
579
+ If the Program specifies that a proxy can decide which future
580
+ versions of the GNU General Public License can be used, that proxy's
581
+ public statement of acceptance of a version permanently authorizes you
582
+ to choose that version for the Program.
583
+
584
+ Later license versions may give you additional or different
585
+ permissions. However, no additional obligations are imposed on any
586
+ author or copyright holder as a result of your choosing to follow a
587
+ later version.
588
+
589
+ 15. Disclaimer of Warranty.
590
+
591
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592
+ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593
+ HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594
+ OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596
+ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597
+ IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598
+ ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599
+
600
+ 16. Limitation of Liability.
601
+
602
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604
+ THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605
+ GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606
+ USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608
+ PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609
+ EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610
+ SUCH DAMAGES.
611
+
612
+ 17. Interpretation of Sections 15 and 16.
613
+
614
+ If the disclaimer of warranty and limitation of liability provided
615
+ above cannot be given local legal effect according to their terms,
616
+ reviewing courts shall apply local law that most closely approximates
617
+ an absolute waiver of all civil liability in connection with the
618
+ Program, unless a warranty or assumption of liability accompanies a
619
+ copy of the Program in return for a fee.
620
+
621
+ END OF TERMS AND CONDITIONS
622
+
623
+ How to Apply These Terms to Your New Programs
624
+
625
+ If you develop a new program, and you want it to be of the greatest
626
+ possible use to the public, the best way to achieve this is to make it
627
+ free software which everyone can redistribute and change under these terms.
628
+
629
+ To do so, attach the following notices to the program. It is safest
630
+ to attach them to the start of each source file to most effectively
631
+ state the exclusion of warranty; and each file should have at least
632
+ the "copyright" line and a pointer to where the full notice is found.
633
+
634
+ <one line to give the program's name and a brief idea of what it does.>
635
+ Copyright (C) <year> <name of author>
636
+
637
+ This program is free software: you can redistribute it and/or modify
638
+ it under the terms of the GNU General Public License as published by
639
+ the Free Software Foundation, either version 3 of the License, or
640
+ (at your option) any later version.
641
+
642
+ This program is distributed in the hope that it will be useful,
643
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
644
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645
+ GNU General Public License for more details.
646
+
647
+ You should have received a copy of the GNU General Public License
648
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
649
+
650
+ Also add information on how to contact you by electronic and paper mail.
651
+
652
+ If the program does terminal interaction, make it output a short
653
+ notice like this when it starts in an interactive mode:
654
+
655
+ <program> Copyright (C) <year> <name of author>
656
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657
+ This is free software, and you are welcome to redistribute it
658
+ under certain conditions; type `show c' for details.
659
+
660
+ The hypothetical commands `show w' and `show c' should show the appropriate
661
+ parts of the General Public License. Of course, your program's commands
662
+ might be different; for a GUI interface, you would use an "about box".
663
+
664
+ You should also get your employer (if you work as a programmer) or school,
665
+ if any, to sign a "copyright disclaimer" for the program, if necessary.
666
+ For more information on this, and how to apply and follow the GNU GPL, see
667
+ <http://www.gnu.org/licenses/>.
668
+
669
+ The GNU General Public License does not permit incorporating your program
670
+ into proprietary programs. If your program is a subroutine library, you
671
+ may consider it more useful to permit linking proprietary applications with
672
+ the library. If this is what you want to do, use the GNU Lesser General
673
+ Public License instead of this License. But first, please read
674
+ <http://www.gnu.org/philosophy/why-not-lgpl.html>.
bin/ffmpeg/COPYING.LGPLv2.1 ADDED
@@ -0,0 +1,502 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU LESSER GENERAL PUBLIC LICENSE
2
+ Version 2.1, February 1999
3
+
4
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ [This is the first released version of the Lesser GPL. It also counts
10
+ as the successor of the GNU Library Public License, version 2, hence
11
+ the version number 2.1.]
12
+
13
+ Preamble
14
+
15
+ The licenses for most software are designed to take away your
16
+ freedom to share and change it. By contrast, the GNU General Public
17
+ Licenses are intended to guarantee your freedom to share and change
18
+ free software--to make sure the software is free for all its users.
19
+
20
+ This license, the Lesser General Public License, applies to some
21
+ specially designated software packages--typically libraries--of the
22
+ Free Software Foundation and other authors who decide to use it. You
23
+ can use it too, but we suggest you first think carefully about whether
24
+ this license or the ordinary General Public License is the better
25
+ strategy to use in any particular case, based on the explanations below.
26
+
27
+ When we speak of free software, we are referring to freedom of use,
28
+ not price. Our General Public Licenses are designed to make sure that
29
+ you have the freedom to distribute copies of free software (and charge
30
+ for this service if you wish); that you receive source code or can get
31
+ it if you want it; that you can change the software and use pieces of
32
+ it in new free programs; and that you are informed that you can do
33
+ these things.
34
+
35
+ To protect your rights, we need to make restrictions that forbid
36
+ distributors to deny you these rights or to ask you to surrender these
37
+ rights. These restrictions translate to certain responsibilities for
38
+ you if you distribute copies of the library or if you modify it.
39
+
40
+ For example, if you distribute copies of the library, whether gratis
41
+ or for a fee, you must give the recipients all the rights that we gave
42
+ you. You must make sure that they, too, receive or can get the source
43
+ code. If you link other code with the library, you must provide
44
+ complete object files to the recipients, so that they can relink them
45
+ with the library after making changes to the library and recompiling
46
+ it. And you must show them these terms so they know their rights.
47
+
48
+ We protect your rights with a two-step method: (1) we copyright the
49
+ library, and (2) we offer you this license, which gives you legal
50
+ permission to copy, distribute and/or modify the library.
51
+
52
+ To protect each distributor, we want to make it very clear that
53
+ there is no warranty for the free library. Also, if the library is
54
+ modified by someone else and passed on, the recipients should know
55
+ that what they have is not the original version, so that the original
56
+ author's reputation will not be affected by problems that might be
57
+ introduced by others.
58
+
59
+ Finally, software patents pose a constant threat to the existence of
60
+ any free program. We wish to make sure that a company cannot
61
+ effectively restrict the users of a free program by obtaining a
62
+ restrictive license from a patent holder. Therefore, we insist that
63
+ any patent license obtained for a version of the library must be
64
+ consistent with the full freedom of use specified in this license.
65
+
66
+ Most GNU software, including some libraries, is covered by the
67
+ ordinary GNU General Public License. This license, the GNU Lesser
68
+ General Public License, applies to certain designated libraries, and
69
+ is quite different from the ordinary General Public License. We use
70
+ this license for certain libraries in order to permit linking those
71
+ libraries into non-free programs.
72
+
73
+ When a program is linked with a library, whether statically or using
74
+ a shared library, the combination of the two is legally speaking a
75
+ combined work, a derivative of the original library. The ordinary
76
+ General Public License therefore permits such linking only if the
77
+ entire combination fits its criteria of freedom. The Lesser General
78
+ Public License permits more lax criteria for linking other code with
79
+ the library.
80
+
81
+ We call this license the "Lesser" General Public License because it
82
+ does Less to protect the user's freedom than the ordinary General
83
+ Public License. It also provides other free software developers Less
84
+ of an advantage over competing non-free programs. These disadvantages
85
+ are the reason we use the ordinary General Public License for many
86
+ libraries. However, the Lesser license provides advantages in certain
87
+ special circumstances.
88
+
89
+ For example, on rare occasions, there may be a special need to
90
+ encourage the widest possible use of a certain library, so that it becomes
91
+ a de-facto standard. To achieve this, non-free programs must be
92
+ allowed to use the library. A more frequent case is that a free
93
+ library does the same job as widely used non-free libraries. In this
94
+ case, there is little to gain by limiting the free library to free
95
+ software only, so we use the Lesser General Public License.
96
+
97
+ In other cases, permission to use a particular library in non-free
98
+ programs enables a greater number of people to use a large body of
99
+ free software. For example, permission to use the GNU C Library in
100
+ non-free programs enables many more people to use the whole GNU
101
+ operating system, as well as its variant, the GNU/Linux operating
102
+ system.
103
+
104
+ Although the Lesser General Public License is Less protective of the
105
+ users' freedom, it does ensure that the user of a program that is
106
+ linked with the Library has the freedom and the wherewithal to run
107
+ that program using a modified version of the Library.
108
+
109
+ The precise terms and conditions for copying, distribution and
110
+ modification follow. Pay close attention to the difference between a
111
+ "work based on the library" and a "work that uses the library". The
112
+ former contains code derived from the library, whereas the latter must
113
+ be combined with the library in order to run.
114
+
115
+ GNU LESSER GENERAL PUBLIC LICENSE
116
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117
+
118
+ 0. This License Agreement applies to any software library or other
119
+ program which contains a notice placed by the copyright holder or
120
+ other authorized party saying it may be distributed under the terms of
121
+ this Lesser General Public License (also called "this License").
122
+ Each licensee is addressed as "you".
123
+
124
+ A "library" means a collection of software functions and/or data
125
+ prepared so as to be conveniently linked with application programs
126
+ (which use some of those functions and data) to form executables.
127
+
128
+ The "Library", below, refers to any such software library or work
129
+ which has been distributed under these terms. A "work based on the
130
+ Library" means either the Library or any derivative work under
131
+ copyright law: that is to say, a work containing the Library or a
132
+ portion of it, either verbatim or with modifications and/or translated
133
+ straightforwardly into another language. (Hereinafter, translation is
134
+ included without limitation in the term "modification".)
135
+
136
+ "Source code" for a work means the preferred form of the work for
137
+ making modifications to it. For a library, complete source code means
138
+ all the source code for all modules it contains, plus any associated
139
+ interface definition files, plus the scripts used to control compilation
140
+ and installation of the library.
141
+
142
+ Activities other than copying, distribution and modification are not
143
+ covered by this License; they are outside its scope. The act of
144
+ running a program using the Library is not restricted, and output from
145
+ such a program is covered only if its contents constitute a work based
146
+ on the Library (independent of the use of the Library in a tool for
147
+ writing it). Whether that is true depends on what the Library does
148
+ and what the program that uses the Library does.
149
+
150
+ 1. You may copy and distribute verbatim copies of the Library's
151
+ complete source code as you receive it, in any medium, provided that
152
+ you conspicuously and appropriately publish on each copy an
153
+ appropriate copyright notice and disclaimer of warranty; keep intact
154
+ all the notices that refer to this License and to the absence of any
155
+ warranty; and distribute a copy of this License along with the
156
+ Library.
157
+
158
+ You may charge a fee for the physical act of transferring a copy,
159
+ and you may at your option offer warranty protection in exchange for a
160
+ fee.
161
+
162
+ 2. You may modify your copy or copies of the Library or any portion
163
+ of it, thus forming a work based on the Library, and copy and
164
+ distribute such modifications or work under the terms of Section 1
165
+ above, provided that you also meet all of these conditions:
166
+
167
+ a) The modified work must itself be a software library.
168
+
169
+ b) You must cause the files modified to carry prominent notices
170
+ stating that you changed the files and the date of any change.
171
+
172
+ c) You must cause the whole of the work to be licensed at no
173
+ charge to all third parties under the terms of this License.
174
+
175
+ d) If a facility in the modified Library refers to a function or a
176
+ table of data to be supplied by an application program that uses
177
+ the facility, other than as an argument passed when the facility
178
+ is invoked, then you must make a good faith effort to ensure that,
179
+ in the event an application does not supply such function or
180
+ table, the facility still operates, and performs whatever part of
181
+ its purpose remains meaningful.
182
+
183
+ (For example, a function in a library to compute square roots has
184
+ a purpose that is entirely well-defined independent of the
185
+ application. Therefore, Subsection 2d requires that any
186
+ application-supplied function or table used by this function must
187
+ be optional: if the application does not supply it, the square
188
+ root function must still compute square roots.)
189
+
190
+ These requirements apply to the modified work as a whole. If
191
+ identifiable sections of that work are not derived from the Library,
192
+ and can be reasonably considered independent and separate works in
193
+ themselves, then this License, and its terms, do not apply to those
194
+ sections when you distribute them as separate works. But when you
195
+ distribute the same sections as part of a whole which is a work based
196
+ on the Library, the distribution of the whole must be on the terms of
197
+ this License, whose permissions for other licensees extend to the
198
+ entire whole, and thus to each and every part regardless of who wrote
199
+ it.
200
+
201
+ Thus, it is not the intent of this section to claim rights or contest
202
+ your rights to work written entirely by you; rather, the intent is to
203
+ exercise the right to control the distribution of derivative or
204
+ collective works based on the Library.
205
+
206
+ In addition, mere aggregation of another work not based on the Library
207
+ with the Library (or with a work based on the Library) on a volume of
208
+ a storage or distribution medium does not bring the other work under
209
+ the scope of this License.
210
+
211
+ 3. You may opt to apply the terms of the ordinary GNU General Public
212
+ License instead of this License to a given copy of the Library. To do
213
+ this, you must alter all the notices that refer to this License, so
214
+ that they refer to the ordinary GNU General Public License, version 2,
215
+ instead of to this License. (If a newer version than version 2 of the
216
+ ordinary GNU General Public License has appeared, then you can specify
217
+ that version instead if you wish.) Do not make any other change in
218
+ these notices.
219
+
220
+ Once this change is made in a given copy, it is irreversible for
221
+ that copy, so the ordinary GNU General Public License applies to all
222
+ subsequent copies and derivative works made from that copy.
223
+
224
+ This option is useful when you wish to copy part of the code of
225
+ the Library into a program that is not a library.
226
+
227
+ 4. You may copy and distribute the Library (or a portion or
228
+ derivative of it, under Section 2) in object code or executable form
229
+ under the terms of Sections 1 and 2 above provided that you accompany
230
+ it with the complete corresponding machine-readable source code, which
231
+ must be distributed under the terms of Sections 1 and 2 above on a
232
+ medium customarily used for software interchange.
233
+
234
+ If distribution of object code is made by offering access to copy
235
+ from a designated place, then offering equivalent access to copy the
236
+ source code from the same place satisfies the requirement to
237
+ distribute the source code, even though third parties are not
238
+ compelled to copy the source along with the object code.
239
+
240
+ 5. A program that contains no derivative of any portion of the
241
+ Library, but is designed to work with the Library by being compiled or
242
+ linked with it, is called a "work that uses the Library". Such a
243
+ work, in isolation, is not a derivative work of the Library, and
244
+ therefore falls outside the scope of this License.
245
+
246
+ However, linking a "work that uses the Library" with the Library
247
+ creates an executable that is a derivative of the Library (because it
248
+ contains portions of the Library), rather than a "work that uses the
249
+ library". The executable is therefore covered by this License.
250
+ Section 6 states terms for distribution of such executables.
251
+
252
+ When a "work that uses the Library" uses material from a header file
253
+ that is part of the Library, the object code for the work may be a
254
+ derivative work of the Library even though the source code is not.
255
+ Whether this is true is especially significant if the work can be
256
+ linked without the Library, or if the work is itself a library. The
257
+ threshold for this to be true is not precisely defined by law.
258
+
259
+ If such an object file uses only numerical parameters, data
260
+ structure layouts and accessors, and small macros and small inline
261
+ functions (ten lines or less in length), then the use of the object
262
+ file is unrestricted, regardless of whether it is legally a derivative
263
+ work. (Executables containing this object code plus portions of the
264
+ Library will still fall under Section 6.)
265
+
266
+ Otherwise, if the work is a derivative of the Library, you may
267
+ distribute the object code for the work under the terms of Section 6.
268
+ Any executables containing that work also fall under Section 6,
269
+ whether or not they are linked directly with the Library itself.
270
+
271
+ 6. As an exception to the Sections above, you may also combine or
272
+ link a "work that uses the Library" with the Library to produce a
273
+ work containing portions of the Library, and distribute that work
274
+ under terms of your choice, provided that the terms permit
275
+ modification of the work for the customer's own use and reverse
276
+ engineering for debugging such modifications.
277
+
278
+ You must give prominent notice with each copy of the work that the
279
+ Library is used in it and that the Library and its use are covered by
280
+ this License. You must supply a copy of this License. If the work
281
+ during execution displays copyright notices, you must include the
282
+ copyright notice for the Library among them, as well as a reference
283
+ directing the user to the copy of this License. Also, you must do one
284
+ of these things:
285
+
286
+ a) Accompany the work with the complete corresponding
287
+ machine-readable source code for the Library including whatever
288
+ changes were used in the work (which must be distributed under
289
+ Sections 1 and 2 above); and, if the work is an executable linked
290
+ with the Library, with the complete machine-readable "work that
291
+ uses the Library", as object code and/or source code, so that the
292
+ user can modify the Library and then relink to produce a modified
293
+ executable containing the modified Library. (It is understood
294
+ that the user who changes the contents of definitions files in the
295
+ Library will not necessarily be able to recompile the application
296
+ to use the modified definitions.)
297
+
298
+ b) Use a suitable shared library mechanism for linking with the
299
+ Library. A suitable mechanism is one that (1) uses at run time a
300
+ copy of the library already present on the user's computer system,
301
+ rather than copying library functions into the executable, and (2)
302
+ will operate properly with a modified version of the library, if
303
+ the user installs one, as long as the modified version is
304
+ interface-compatible with the version that the work was made with.
305
+
306
+ c) Accompany the work with a written offer, valid for at
307
+ least three years, to give the same user the materials
308
+ specified in Subsection 6a, above, for a charge no more
309
+ than the cost of performing this distribution.
310
+
311
+ d) If distribution of the work is made by offering access to copy
312
+ from a designated place, offer equivalent access to copy the above
313
+ specified materials from the same place.
314
+
315
+ e) Verify that the user has already received a copy of these
316
+ materials or that you have already sent this user a copy.
317
+
318
+ For an executable, the required form of the "work that uses the
319
+ Library" must include any data and utility programs needed for
320
+ reproducing the executable from it. However, as a special exception,
321
+ the materials to be distributed need not include anything that is
322
+ normally distributed (in either source or binary form) with the major
323
+ components (compiler, kernel, and so on) of the operating system on
324
+ which the executable runs, unless that component itself accompanies
325
+ the executable.
326
+
327
+ It may happen that this requirement contradicts the license
328
+ restrictions of other proprietary libraries that do not normally
329
+ accompany the operating system. Such a contradiction means you cannot
330
+ use both them and the Library together in an executable that you
331
+ distribute.
332
+
333
+ 7. You may place library facilities that are a work based on the
334
+ Library side-by-side in a single library together with other library
335
+ facilities not covered by this License, and distribute such a combined
336
+ library, provided that the separate distribution of the work based on
337
+ the Library and of the other library facilities is otherwise
338
+ permitted, and provided that you do these two things:
339
+
340
+ a) Accompany the combined library with a copy of the same work
341
+ based on the Library, uncombined with any other library
342
+ facilities. This must be distributed under the terms of the
343
+ Sections above.
344
+
345
+ b) Give prominent notice with the combined library of the fact
346
+ that part of it is a work based on the Library, and explaining
347
+ where to find the accompanying uncombined form of the same work.
348
+
349
+ 8. You may not copy, modify, sublicense, link with, or distribute
350
+ the Library except as expressly provided under this License. Any
351
+ attempt otherwise to copy, modify, sublicense, link with, or
352
+ distribute the Library is void, and will automatically terminate your
353
+ rights under this License. However, parties who have received copies,
354
+ or rights, from you under this License will not have their licenses
355
+ terminated so long as such parties remain in full compliance.
356
+
357
+ 9. You are not required to accept this License, since you have not
358
+ signed it. However, nothing else grants you permission to modify or
359
+ distribute the Library or its derivative works. These actions are
360
+ prohibited by law if you do not accept this License. Therefore, by
361
+ modifying or distributing the Library (or any work based on the
362
+ Library), you indicate your acceptance of this License to do so, and
363
+ all its terms and conditions for copying, distributing or modifying
364
+ the Library or works based on it.
365
+
366
+ 10. Each time you redistribute the Library (or any work based on the
367
+ Library), the recipient automatically receives a license from the
368
+ original licensor to copy, distribute, link with or modify the Library
369
+ subject to these terms and conditions. You may not impose any further
370
+ restrictions on the recipients' exercise of the rights granted herein.
371
+ You are not responsible for enforcing compliance by third parties with
372
+ this License.
373
+
374
+ 11. If, as a consequence of a court judgment or allegation of patent
375
+ infringement or for any other reason (not limited to patent issues),
376
+ conditions are imposed on you (whether by court order, agreement or
377
+ otherwise) that contradict the conditions of this License, they do not
378
+ excuse you from the conditions of this License. If you cannot
379
+ distribute so as to satisfy simultaneously your obligations under this
380
+ License and any other pertinent obligations, then as a consequence you
381
+ may not distribute the Library at all. For example, if a patent
382
+ license would not permit royalty-free redistribution of the Library by
383
+ all those who receive copies directly or indirectly through you, then
384
+ the only way you could satisfy both it and this License would be to
385
+ refrain entirely from distribution of the Library.
386
+
387
+ If any portion of this section is held invalid or unenforceable under any
388
+ particular circumstance, the balance of the section is intended to apply,
389
+ and the section as a whole is intended to apply in other circumstances.
390
+
391
+ It is not the purpose of this section to induce you to infringe any
392
+ patents or other property right claims or to contest validity of any
393
+ such claims; this section has the sole purpose of protecting the
394
+ integrity of the free software distribution system which is
395
+ implemented by public license practices. Many people have made
396
+ generous contributions to the wide range of software distributed
397
+ through that system in reliance on consistent application of that
398
+ system; it is up to the author/donor to decide if he or she is willing
399
+ to distribute software through any other system and a licensee cannot
400
+ impose that choice.
401
+
402
+ This section is intended to make thoroughly clear what is believed to
403
+ be a consequence of the rest of this License.
404
+
405
+ 12. If the distribution and/or use of the Library is restricted in
406
+ certain countries either by patents or by copyrighted interfaces, the
407
+ original copyright holder who places the Library under this License may add
408
+ an explicit geographical distribution limitation excluding those countries,
409
+ so that distribution is permitted only in or among countries not thus
410
+ excluded. In such case, this License incorporates the limitation as if
411
+ written in the body of this License.
412
+
413
+ 13. The Free Software Foundation may publish revised and/or new
414
+ versions of the Lesser General Public License from time to time.
415
+ Such new versions will be similar in spirit to the present version,
416
+ but may differ in detail to address new problems or concerns.
417
+
418
+ Each version is given a distinguishing version number. If the Library
419
+ specifies a version number of this License which applies to it and
420
+ "any later version", you have the option of following the terms and
421
+ conditions either of that version or of any later version published by
422
+ the Free Software Foundation. If the Library does not specify a
423
+ license version number, you may choose any version ever published by
424
+ the Free Software Foundation.
425
+
426
+ 14. If you wish to incorporate parts of the Library into other free
427
+ programs whose distribution conditions are incompatible with these,
428
+ write to the author to ask for permission. For software which is
429
+ copyrighted by the Free Software Foundation, write to the Free
430
+ Software Foundation; we sometimes make exceptions for this. Our
431
+ decision will be guided by the two goals of preserving the free status
432
+ of all derivatives of our free software and of promoting the sharing
433
+ and reuse of software generally.
434
+
435
+ NO WARRANTY
436
+
437
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
438
+ WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
439
+ EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
440
+ OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
441
+ KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
442
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
443
+ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
444
+ LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
445
+ THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
446
+
447
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
448
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
449
+ AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
450
+ FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
451
+ CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
452
+ LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
453
+ RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
454
+ FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
455
+ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
456
+ DAMAGES.
457
+
458
+ END OF TERMS AND CONDITIONS
459
+
460
+ How to Apply These Terms to Your New Libraries
461
+
462
+ If you develop a new library, and you want it to be of the greatest
463
+ possible use to the public, we recommend making it free software that
464
+ everyone can redistribute and change. You can do so by permitting
465
+ redistribution under these terms (or, alternatively, under the terms of the
466
+ ordinary General Public License).
467
+
468
+ To apply these terms, attach the following notices to the library. It is
469
+ safest to attach them to the start of each source file to most effectively
470
+ convey the exclusion of warranty; and each file should have at least the
471
+ "copyright" line and a pointer to where the full notice is found.
472
+
473
+ <one line to give the library's name and a brief idea of what it does.>
474
+ Copyright (C) <year> <name of author>
475
+
476
+ This library is free software; you can redistribute it and/or
477
+ modify it under the terms of the GNU Lesser General Public
478
+ License as published by the Free Software Foundation; either
479
+ version 2.1 of the License, or (at your option) any later version.
480
+
481
+ This library is distributed in the hope that it will be useful,
482
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
483
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
484
+ Lesser General Public License for more details.
485
+
486
+ You should have received a copy of the GNU Lesser General Public
487
+ License along with this library; if not, write to the Free Software
488
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
489
+
490
+ Also add information on how to contact you by electronic and paper mail.
491
+
492
+ You should also get your employer (if you work as a programmer) or your
493
+ school, if any, to sign a "copyright disclaimer" for the library, if
494
+ necessary. Here is a sample; alter the names:
495
+
496
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
497
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
498
+
499
+ <signature of Ty Coon>, 1 April 1990
500
+ Ty Coon, President of Vice
501
+
502
+ That's all there is to it!
bin/ffmpeg/COPYING.LGPLv3 ADDED
@@ -0,0 +1,165 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU LESSER GENERAL PUBLIC LICENSE
2
+ Version 3, 29 June 2007
3
+
4
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
5
+ Everyone is permitted to copy and distribute verbatim copies
6
+ of this license document, but changing it is not allowed.
7
+
8
+
9
+ This version of the GNU Lesser General Public License incorporates
10
+ the terms and conditions of version 3 of the GNU General Public
11
+ License, supplemented by the additional permissions listed below.
12
+
13
+ 0. Additional Definitions.
14
+
15
+ As used herein, "this License" refers to version 3 of the GNU Lesser
16
+ General Public License, and the "GNU GPL" refers to version 3 of the GNU
17
+ General Public License.
18
+
19
+ "The Library" refers to a covered work governed by this License,
20
+ other than an Application or a Combined Work as defined below.
21
+
22
+ An "Application" is any work that makes use of an interface provided
23
+ by the Library, but which is not otherwise based on the Library.
24
+ Defining a subclass of a class defined by the Library is deemed a mode
25
+ of using an interface provided by the Library.
26
+
27
+ A "Combined Work" is a work produced by combining or linking an
28
+ Application with the Library. The particular version of the Library
29
+ with which the Combined Work was made is also called the "Linked
30
+ Version".
31
+
32
+ The "Minimal Corresponding Source" for a Combined Work means the
33
+ Corresponding Source for the Combined Work, excluding any source code
34
+ for portions of the Combined Work that, considered in isolation, are
35
+ based on the Application, and not on the Linked Version.
36
+
37
+ The "Corresponding Application Code" for a Combined Work means the
38
+ object code and/or source code for the Application, including any data
39
+ and utility programs needed for reproducing the Combined Work from the
40
+ Application, but excluding the System Libraries of the Combined Work.
41
+
42
+ 1. Exception to Section 3 of the GNU GPL.
43
+
44
+ You may convey a covered work under sections 3 and 4 of this License
45
+ without being bound by section 3 of the GNU GPL.
46
+
47
+ 2. Conveying Modified Versions.
48
+
49
+ If you modify a copy of the Library, and, in your modifications, a
50
+ facility refers to a function or data to be supplied by an Application
51
+ that uses the facility (other than as an argument passed when the
52
+ facility is invoked), then you may convey a copy of the modified
53
+ version:
54
+
55
+ a) under this License, provided that you make a good faith effort to
56
+ ensure that, in the event an Application does not supply the
57
+ function or data, the facility still operates, and performs
58
+ whatever part of its purpose remains meaningful, or
59
+
60
+ b) under the GNU GPL, with none of the additional permissions of
61
+ this License applicable to that copy.
62
+
63
+ 3. Object Code Incorporating Material from Library Header Files.
64
+
65
+ The object code form of an Application may incorporate material from
66
+ a header file that is part of the Library. You may convey such object
67
+ code under terms of your choice, provided that, if the incorporated
68
+ material is not limited to numerical parameters, data structure
69
+ layouts and accessors, or small macros, inline functions and templates
70
+ (ten or fewer lines in length), you do both of the following:
71
+
72
+ a) Give prominent notice with each copy of the object code that the
73
+ Library is used in it and that the Library and its use are
74
+ covered by this License.
75
+
76
+ b) Accompany the object code with a copy of the GNU GPL and this license
77
+ document.
78
+
79
+ 4. Combined Works.
80
+
81
+ You may convey a Combined Work under terms of your choice that,
82
+ taken together, effectively do not restrict modification of the
83
+ portions of the Library contained in the Combined Work and reverse
84
+ engineering for debugging such modifications, if you also do each of
85
+ the following:
86
+
87
+ a) Give prominent notice with each copy of the Combined Work that
88
+ the Library is used in it and that the Library and its use are
89
+ covered by this License.
90
+
91
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
92
+ document.
93
+
94
+ c) For a Combined Work that displays copyright notices during
95
+ execution, include the copyright notice for the Library among
96
+ these notices, as well as a reference directing the user to the
97
+ copies of the GNU GPL and this license document.
98
+
99
+ d) Do one of the following:
100
+
101
+ 0) Convey the Minimal Corresponding Source under the terms of this
102
+ License, and the Corresponding Application Code in a form
103
+ suitable for, and under terms that permit, the user to
104
+ recombine or relink the Application with a modified version of
105
+ the Linked Version to produce a modified Combined Work, in the
106
+ manner specified by section 6 of the GNU GPL for conveying
107
+ Corresponding Source.
108
+
109
+ 1) Use a suitable shared library mechanism for linking with the
110
+ Library. A suitable mechanism is one that (a) uses at run time
111
+ a copy of the Library already present on the user's computer
112
+ system, and (b) will operate properly with a modified version
113
+ of the Library that is interface-compatible with the Linked
114
+ Version.
115
+
116
+ e) Provide Installation Information, but only if you would otherwise
117
+ be required to provide such information under section 6 of the
118
+ GNU GPL, and only to the extent that such information is
119
+ necessary to install and execute a modified version of the
120
+ Combined Work produced by recombining or relinking the
121
+ Application with a modified version of the Linked Version. (If
122
+ you use option 4d0, the Installation Information must accompany
123
+ the Minimal Corresponding Source and Corresponding Application
124
+ Code. If you use option 4d1, you must provide the Installation
125
+ Information in the manner specified by section 6 of the GNU GPL
126
+ for conveying Corresponding Source.)
127
+
128
+ 5. Combined Libraries.
129
+
130
+ You may place library facilities that are a work based on the
131
+ Library side by side in a single library together with other library
132
+ facilities that are not Applications and are not covered by this
133
+ License, and convey such a combined library under terms of your
134
+ choice, if you do both of the following:
135
+
136
+ a) Accompany the combined library with a copy of the same work based
137
+ on the Library, uncombined with any other library facilities,
138
+ conveyed under the terms of this License.
139
+
140
+ b) Give prominent notice with the combined library that part of it
141
+ is a work based on the Library, and explaining where to find the
142
+ accompanying uncombined form of the same work.
143
+
144
+ 6. Revised Versions of the GNU Lesser General Public License.
145
+
146
+ The Free Software Foundation may publish revised and/or new versions
147
+ of the GNU Lesser General Public License from time to time. Such new
148
+ versions will be similar in spirit to the present version, but may
149
+ differ in detail to address new problems or concerns.
150
+
151
+ Each version is given a distinguishing version number. If the
152
+ Library as you received it specifies that a certain numbered version
153
+ of the GNU Lesser General Public License "or any later version"
154
+ applies to it, you have the option of following the terms and
155
+ conditions either of that published version or of any later version
156
+ published by the Free Software Foundation. If the Library as you
157
+ received it does not specify a version number of the GNU Lesser
158
+ General Public License, you may choose any version of the GNU Lesser
159
+ General Public License ever published by the Free Software Foundation.
160
+
161
+ If the Library as you received it specifies that a proxy can decide
162
+ whether future versions of the GNU Lesser General Public License shall
163
+ apply, that proxy's public statement of acceptance of any version is
164
+ permanent authorization for you to choose that version for the
165
+ Library.
bin/ffmpeg/CREDITS ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ See the Git history of the project (git://source.ffmpeg.org/ffmpeg) to
2
+ get the names of people who have contributed to FFmpeg.
3
+
4
+ To check the log, you can type the command "git log" in the FFmpeg
5
+ source directory, or browse the online repository at
6
+ http://source.ffmpeg.org.
bin/ffmpeg/Changelog ADDED
@@ -0,0 +1,2070 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Entries are sorted chronologically from oldest to youngest within each release,
2
+ releases are sorted from youngest to oldest.
3
+
4
+ version 6.0:
5
+ - Radiance HDR image support
6
+ - ddagrab (Desktop Duplication) video capture filter
7
+ - ffmpeg -shortest_buf_duration option
8
+ - ffmpeg now requires threading to be built
9
+ - ffmpeg now runs every muxer in a separate thread
10
+ - Add new mode to cropdetect filter to detect crop-area based on motion vectors and edges
11
+ - VAAPI decoding and encoding for 10/12bit 422, 10/12bit 444 HEVC and VP9
12
+ - WBMP (Wireless Application Protocol Bitmap) image format
13
+ - a3dscope filter
14
+ - bonk decoder and demuxer
15
+ - Micronas SC-4 audio decoder
16
+ - LAF demuxer
17
+ - APAC decoder and demuxer
18
+ - Media 100i decoders
19
+ - DTS to PTS reorder bsf
20
+ - ViewQuest VQC decoder
21
+ - backgroundkey filter
22
+ - nvenc AV1 encoding support
23
+ - MediaCodec decoder via NDKMediaCodec
24
+ - MediaCodec encoder
25
+ - oneVPL support for QSV
26
+ - QSV AV1 encoder
27
+ - QSV decoding and encoding for 10/12bit 422, 10/12bit 444 HEVC and VP9
28
+ - showcwt multimedia filter
29
+ - corr video filter
30
+ - adrc audio filter
31
+ - afdelaysrc audio filter
32
+ - WADY DPCM decoder and demuxer
33
+ - CBD2 DPCM decoder
34
+ - ssim360 video filter
35
+ - ffmpeg CLI new options: -stats_enc_pre[_fmt], -stats_enc_post[_fmt],
36
+ -stats_mux_pre[_fmt]
37
+ - hstack_vaapi, vstack_vaapi and xstack_vaapi filters
38
+ - XMD ADPCM decoder and demuxer
39
+ - media100 to mjpegb bsf
40
+ - ffmpeg CLI new option: -fix_sub_duration_heartbeat
41
+ - WavArc decoder and demuxer
42
+ - CrystalHD decoders deprecated
43
+ - SDNS demuxer
44
+ - RKA decoder and demuxer
45
+ - filtergraph syntax in ffmpeg CLI now supports passing file contents
46
+ as option values, by prefixing option name with '/'
47
+ - hstack_qsv, vstack_qsv and xstack_qsv filters
48
+
49
+
50
+ version 5.1:
51
+ - add ipfs/ipns gateway support
52
+ - dialogue enhance audio filter
53
+ - dropped obsolete XvMC hwaccel
54
+ - pcm-bluray encoder
55
+ - DFPWM audio encoder/decoder and raw muxer/demuxer
56
+ - SITI filter
57
+ - Vizrt Binary Image encoder/decoder
58
+ - avsynctest source filter
59
+ - feedback video filter
60
+ - pixelize video filter
61
+ - colormap video filter
62
+ - colorchart video source filter
63
+ - multiply video filter
64
+ - PGS subtitle frame merge bitstream filter
65
+ - blurdetect filter
66
+ - tiltshelf audio filter
67
+ - QOI image format support
68
+ - ffprobe -o option
69
+ - virtualbass audio filter
70
+ - VDPAU AV1 hwaccel
71
+ - PHM image format support
72
+ - remap_opencl filter
73
+ - added chromakey_cuda filter
74
+ - added bilateral_cuda filter
75
+
76
+
77
+ version 5.0:
78
+ - ADPCM IMA Westwood encoder
79
+ - Westwood AUD muxer
80
+ - ADPCM IMA Acorn Replay decoder
81
+ - Argonaut Games CVG demuxer
82
+ - Argonaut Games CVG muxer
83
+ - Concatf protocol
84
+ - afwtdn audio filter
85
+ - audio and video segment filters
86
+ - Apple Graphics (SMC) encoder
87
+ - hsvkey and hsvhold video filters
88
+ - adecorrelate audio filter
89
+ - atilt audio filter
90
+ - grayworld video filter
91
+ - AV1 Low overhead bitstream format muxer
92
+ - swscale slice threading
93
+ - MSN Siren decoder
94
+ - scharr video filter
95
+ - apsyclip audio filter
96
+ - morpho video filter
97
+ - amr parser
98
+ - (a)latency filters
99
+ - GEM Raster image decoder
100
+ - asdr audio filter
101
+ - speex decoder
102
+ - limitdiff video filter
103
+ - xcorrelate video filter
104
+ - varblur video filter
105
+ - huesaturation video filter
106
+ - colorspectrum source video filter
107
+ - RTP packetizer for uncompressed video (RFC 4175)
108
+ - bitpacked encoder
109
+ - VideoToolbox VP9 hwaccel
110
+ - VideoToolbox ProRes hwaccel
111
+ - support loongarch.
112
+ - aspectralstats audio filter
113
+ - adynamicsmooth audio filter
114
+ - libplacebo filter
115
+ - vflip_vulkan, hflip_vulkan and flip_vulkan filters
116
+ - adynamicequalizer audio filter
117
+ - yadif_videotoolbox filter
118
+ - VideoToolbox ProRes encoder
119
+ - anlmf audio filter
120
+ - IMF demuxer (experimental)
121
+
122
+
123
+ version 4.4:
124
+ - AudioToolbox output device
125
+ - MacCaption demuxer
126
+ - PGX decoder
127
+ - chromanr video filter
128
+ - VDPAU accelerated HEVC 10/12bit decoding
129
+ - ADPCM IMA Ubisoft APM encoder
130
+ - Rayman 2 APM muxer
131
+ - AV1 encoding support SVT-AV1
132
+ - Cineform HD encoder
133
+ - ADPCM Argonaut Games encoder
134
+ - Argonaut Games ASF muxer
135
+ - AV1 Low overhead bitstream format demuxer
136
+ - RPZA video encoder
137
+ - ADPCM IMA MOFLEX decoder
138
+ - MobiClip FastAudio decoder
139
+ - MobiClip video decoder
140
+ - MOFLEX demuxer
141
+ - MODS demuxer
142
+ - PhotoCD decoder
143
+ - MCA demuxer
144
+ - AV1 decoder (Hardware acceleration used only)
145
+ - SVS demuxer
146
+ - Argonaut Games BRP demuxer
147
+ - DAT demuxer
148
+ - aax demuxer
149
+ - IPU decoder, parser and demuxer
150
+ - Intel QSV-accelerated AV1 decoding
151
+ - Argonaut Games Video decoder
152
+ - libwavpack encoder removed
153
+ - ACE demuxer
154
+ - AVS3 demuxer
155
+ - AVS3 video decoder via libuavs3d
156
+ - Cintel RAW decoder
157
+ - VDPAU accelerated VP9 10/12bit decoding
158
+ - afreqshift and aphaseshift filters
159
+ - High Voltage Software ADPCM encoder
160
+ - LEGO Racers ALP (.tun & .pcm) muxer
161
+ - AV1 VAAPI decoder
162
+ - adenorm filter
163
+ - ADPCM IMA AMV encoder
164
+ - AMV muxer
165
+ - NVDEC AV1 hwaccel
166
+ - DXVA2/D3D11VA hardware accelerated AV1 decoding
167
+ - speechnorm filter
168
+ - SpeedHQ encoder
169
+ - asupercut filter
170
+ - asubcut filter
171
+ - Microsoft Paint (MSP) version 2 decoder
172
+ - Microsoft Paint (MSP) demuxer
173
+ - AV1 monochrome encoding support via libaom >= 2.0.1
174
+ - asuperpass and asuperstop filter
175
+ - shufflepixels filter
176
+ - tmidequalizer filter
177
+ - estdif filter
178
+ - epx filter
179
+ - Dolby E parser
180
+ - shear filter
181
+ - kirsch filter
182
+ - colortemperature filter
183
+ - colorcontrast filter
184
+ - PFM encoder
185
+ - colorcorrect filter
186
+ - binka demuxer
187
+ - XBM parser
188
+ - xbm_pipe demuxer
189
+ - colorize filter
190
+ - CRI parser
191
+ - aexciter audio filter
192
+ - exposure video filter
193
+ - monochrome video filter
194
+ - setts bitstream filter
195
+ - vif video filter
196
+ - OpenEXR image encoder
197
+ - Simbiosis IMX decoder
198
+ - Simbiosis IMX demuxer
199
+ - Digital Pictures SGA demuxer and decoders
200
+ - TTML subtitle encoder and muxer
201
+ - identity video filter
202
+ - msad video filter
203
+ - gophers protocol
204
+ - RIST protocol via librist
205
+
206
+
207
+ version 4.3:
208
+ - v360 filter
209
+ - Intel QSV-accelerated MJPEG decoding
210
+ - Intel QSV-accelerated VP9 decoding
211
+ - Support for TrueHD in mp4
212
+ - Support AMD AMF encoder on Linux (via Vulkan)
213
+ - IMM5 video decoder
214
+ - ZeroMQ protocol
215
+ - support Sipro ACELP.KELVIN decoding
216
+ - streamhash muxer
217
+ - sierpinski video source
218
+ - scroll video filter
219
+ - photosensitivity filter
220
+ - anlms filter
221
+ - arnndn filter
222
+ - bilateral filter
223
+ - maskedmin and maskedmax filters
224
+ - VDPAU VP9 hwaccel
225
+ - median filter
226
+ - QSV-accelerated VP9 encoding
227
+ - AV1 encoding support via librav1e
228
+ - AV1 frame merge bitstream filter
229
+ - AV1 Annex B demuxer
230
+ - axcorrelate filter
231
+ - mvdv decoder
232
+ - mvha decoder
233
+ - MPEG-H 3D Audio support in mp4
234
+ - thistogram filter
235
+ - freezeframes filter
236
+ - Argonaut Games ADPCM decoder
237
+ - Argonaut Games ASF demuxer
238
+ - xfade video filter
239
+ - xfade_opencl filter
240
+ - afirsrc audio filter source
241
+ - pad_opencl filter
242
+ - Simon & Schuster Interactive ADPCM decoder
243
+ - Real War KVAG demuxer
244
+ - CDToons video decoder
245
+ - siren audio decoder
246
+ - Rayman 2 ADPCM decoder
247
+ - Rayman 2 APM demuxer
248
+ - cas video filter
249
+ - High Voltage Software ADPCM decoder
250
+ - LEGO Racers ALP (.tun & .pcm) demuxer
251
+ - AMQP 0-9-1 protocol (RabbitMQ)
252
+ - Vulkan support
253
+ - avgblur_vulkan, overlay_vulkan, scale_vulkan and chromaber_vulkan filters
254
+ - ADPCM IMA MTF decoder
255
+ - FWSE demuxer
256
+ - DERF DPCM decoder
257
+ - DERF demuxer
258
+ - CRI HCA decoder
259
+ - CRI HCA demuxer
260
+ - overlay_cuda filter
261
+ - switch from AvxSynth to AviSynth+ on Linux
262
+ - mv30 decoder
263
+ - Expanded styling support for 3GPP Timed Text Subtitles (movtext)
264
+ - WebP parser
265
+ - tmedian filter
266
+ - maskedthreshold filter
267
+ - Support for muxing pcm and pgs in m2ts
268
+ - Cunning Developments ADPCM decoder
269
+ - asubboost filter
270
+ - Pro Pinball Series Soundbank demuxer
271
+ - pcm_rechunk bitstream filter
272
+ - scdet filter
273
+ - NotchLC decoder
274
+ - gradients source video filter
275
+ - MediaFoundation encoder wrapper
276
+ - untile filter
277
+ - Simon & Schuster Interactive ADPCM encoder
278
+ - PFM decoder
279
+ - dblur video filter
280
+ - Real War KVAG muxer
281
+
282
+
283
+ version 4.2:
284
+ - tpad filter
285
+ - AV1 decoding support through libdav1d
286
+ - dedot filter
287
+ - chromashift and rgbashift filters
288
+ - freezedetect filter
289
+ - truehd_core bitstream filter
290
+ - dhav demuxer
291
+ - PCM-DVD encoder
292
+ - GIF parser
293
+ - vividas demuxer
294
+ - hymt decoder
295
+ - anlmdn filter
296
+ - maskfun filter
297
+ - hcom demuxer and decoder
298
+ - ARBC decoder
299
+ - libaribb24 based ARIB STD-B24 caption support (profiles A and C)
300
+ - Support decoding of HEVC 4:4:4 content in nvdec and cuviddec
301
+ - removed libndi-newtek
302
+ - agm decoder
303
+ - KUX demuxer
304
+ - AV1 frame split bitstream filter
305
+ - lscr decoder
306
+ - lagfun filter
307
+ - asoftclip filter
308
+ - Support decoding of HEVC 4:4:4 content in vdpau
309
+ - colorhold filter
310
+ - xmedian filter
311
+ - asr filter
312
+ - showspatial multimedia filter
313
+ - VP4 video decoder
314
+ - IFV demuxer
315
+ - derain filter
316
+ - deesser filter
317
+ - mov muxer writes tracks with unspecified language instead of English by default
318
+ - add support for using clang to compile CUDA kernels
319
+
320
+
321
+ version 4.1:
322
+ - deblock filter
323
+ - tmix filter
324
+ - amplify filter
325
+ - fftdnoiz filter
326
+ - aderivative and aintegral audio filters
327
+ - pal75bars and pal100bars video filter sources
328
+ - support mbedTLS based TLS
329
+ - adeclick filter
330
+ - adeclip filter
331
+ - libtensorflow backend for DNN based filters like srcnn
332
+ - vc1 decoder is now bit-exact
333
+ - ATRAC9 decoder
334
+ - lensfun wrapper filter
335
+ - colorconstancy filter
336
+ - AVS2 video decoder via libdavs2
337
+ - IMM4 video decoder
338
+ - Brooktree ProSumer video decoder
339
+ - MatchWare Screen Capture Codec decoder
340
+ - WinCam Motion Video decoder
341
+ - 1D LUT filter (lut1d)
342
+ - RemotelyAnywhere Screen Capture decoder
343
+ - cue and acue filters
344
+ - support for AV1 in MP4
345
+ - transpose_npp filter
346
+ - AVS2 video encoder via libxavs2
347
+ - amultiply filter
348
+ - Block-Matching 3d (bm3d) denoising filter
349
+ - acrossover filter
350
+ - ilbc decoder
351
+ - audio denoiser as afftdn filter
352
+ - AV1 parser
353
+ - SER demuxer
354
+ - sinc audio filter source
355
+ - chromahold filter
356
+ - setparams filter
357
+ - vibrance filter
358
+ - decoding S12M timecode in h264
359
+ - xstack filter
360
+ - pcm vidc decoder and encoder
361
+ - (a)graphmonitor filter
362
+ - yadif_cuda filter
363
+
364
+
365
+ version 4.0:
366
+ - Bitstream filters for editing metadata in H.264, HEVC and MPEG-2 streams
367
+ - Dropped support for OpenJPEG versions 2.0 and below. Using OpenJPEG now
368
+ requires 2.1 (or later) and pkg-config.
369
+ - VDA dropped (use VideoToolbox instead)
370
+ - MagicYUV encoder
371
+ - Raw AMR-NB and AMR-WB demuxers
372
+ - TiVo ty/ty+ demuxer
373
+ - Intel QSV-accelerated MJPEG encoding
374
+ - PCE support for extended channel layouts in the AAC encoder
375
+ - native aptX and aptX HD encoder and decoder
376
+ - Raw aptX and aptX HD muxer and demuxer
377
+ - NVIDIA NVDEC-accelerated H.264, HEVC, MJPEG, MPEG-1/2/4, VC1, VP8/9 hwaccel decoding
378
+ - Intel QSV-accelerated overlay filter
379
+ - mcompand audio filter
380
+ - acontrast audio filter
381
+ - OpenCL overlay filter
382
+ - video mix filter
383
+ - video normalize filter
384
+ - audio lv2 wrapper filter
385
+ - VAAPI MJPEG and VP8 decoding
386
+ - AMD AMF H.264 and HEVC encoders
387
+ - video fillborders filter
388
+ - video setrange filter
389
+ - nsp demuxer
390
+ - support LibreSSL (via libtls)
391
+ - AVX-512/ZMM support added
392
+ - Dropped support for building for Windows XP. The minimum supported Windows
393
+ version is Windows Vista.
394
+ - deconvolve video filter
395
+ - entropy video filter
396
+ - hilbert audio filter source
397
+ - aiir audio filter
398
+ - aiff: add support for CD-ROM XA ADPCM
399
+ - Removed the ffserver program
400
+ - Removed the ffmenc and ffmdec muxer and demuxer
401
+ - VideoToolbox HEVC encoder and hwaccel
402
+ - VAAPI-accelerated ProcAmp (color balance), denoise and sharpness filters
403
+ - Add android_camera indev
404
+ - codec2 en/decoding via libcodec2
405
+ - muxer/demuxer for raw codec2 files and .c2 files
406
+ - Moved nvidia codec headers into an external repository.
407
+ They can be found at http://git.videolan.org/?p=ffmpeg/nv-codec-headers.git
408
+ - native SBC encoder and decoder
409
+ - drmeter audio filter
410
+ - hapqa_extract bitstream filter
411
+ - filter_units bitstream filter
412
+ - AV1 Support through libaom
413
+ - E-AC-3 dependent frames support
414
+ - bitstream filter for extracting E-AC-3 core
415
+ - Haivision SRT protocol via libsrt
416
+ - segafilm muxer
417
+ - vfrdet filter
418
+ - SRCNN filter
419
+
420
+
421
+ version 3.4:
422
+ - deflicker video filter
423
+ - doubleweave video filter
424
+ - lumakey video filter
425
+ - pixscope video filter
426
+ - oscilloscope video filter
427
+ - config.log and other configuration files moved into ffbuild/ directory
428
+ - update cuvid/nvenc headers to Video Codec SDK 8.0.14
429
+ - afir audio filter
430
+ - scale_cuda CUDA based video scale filter
431
+ - librsvg support for svg rasterization
432
+ - crossfeed audio filter
433
+ - spec compliant VP9 muxing support in MP4
434
+ - remove the libnut muxer/demuxer wrappers
435
+ - remove the libschroedinger encoder/decoder wrappers
436
+ - surround audio filter
437
+ - sofalizer filter switched to libmysofa
438
+ - Gremlin Digital Video demuxer and decoder
439
+ - headphone audio filter
440
+ - superequalizer audio filter
441
+ - roberts video filter
442
+ - The x86 assembler default switched from yasm to nasm, pass
443
+ --x86asmexe=yasm to configure to restore the old behavior.
444
+ - additional frame format support for Interplay MVE movies
445
+ - support for decoding through D3D11VA in ffmpeg
446
+ - limiter video filter
447
+ - libvmaf video filter
448
+ - Dolby E decoder and SMPTE 337M demuxer
449
+ - unpremultiply video filter
450
+ - tlut2 video filter
451
+ - floodfill video filter
452
+ - pseudocolor video filter
453
+ - raw G.726 muxer and demuxer, left- and right-justified
454
+ - NewTek NDI input/output device
455
+ - Some video filters with several inputs now use a common set of options:
456
+ blend, libvmaf, lut3d, overlay, psnr, ssim.
457
+ They must always be used by name.
458
+ - FITS demuxer and decoder
459
+ - FITS muxer and encoder
460
+ - add --disable-autodetect build switch
461
+ - drop deprecated qtkit input device (use avfoundation instead)
462
+ - despill video filter
463
+ - haas audio filter
464
+ - SUP/PGS subtitle muxer
465
+ - convolve video filter
466
+ - VP9 tile threading support
467
+ - KMS screen grabber
468
+ - CUDA thumbnail filter
469
+ - V4L2 mem2mem HW assisted codecs
470
+ - Rockchip MPP hardware decoding
471
+ - vmafmotion video filter
472
+ - use MIME type "G726" for little-endian G.726, "AAL2-G726" for big-endian G.726
473
+
474
+
475
+ version 3.3:
476
+ - CrystalHD decoder moved to new decode API
477
+ - add internal ebur128 library, remove external libebur128 dependency
478
+ - Pro-MPEG CoP #3-R2 FEC protocol
479
+ - premultiply video filter
480
+ - Support for spherical videos
481
+ - configure now fails if autodetect-libraries are requested but not found
482
+ - PSD Decoder
483
+ - 16.8 floating point pcm decoder
484
+ - 24.0 floating point pcm decoder
485
+ - Apple Pixlet decoder
486
+ - QDMC audio decoder
487
+ - NewTek SpeedHQ decoder
488
+ - MIDI Sample Dump Standard demuxer
489
+ - readeia608 filter
490
+ - Sample Dump eXchange demuxer
491
+ - abitscope multimedia filter
492
+ - Scenarist Closed Captions demuxer and muxer
493
+ - threshold filter
494
+ - midequalizer filter
495
+ - Optimal Huffman tables for (M)JPEG encoding
496
+ - VAAPI-accelerated MPEG-2 and VP8 encoding
497
+ - FM Screen Capture Codec decoder
498
+ - native Opus encoder
499
+ - ScreenPressor decoder
500
+ - incomplete ClearVideo decoder
501
+ - Intel QSV video scaling and deinterlacing filters
502
+ - Support MOV with multiple sample description tables
503
+ - XPM decoder
504
+ - Removed the legacy X11 screen grabber, use XCB instead
505
+ - MPEG-7 Video Signature filter
506
+ - Removed asyncts filter (use af_aresample instead)
507
+ - Intel QSV-accelerated VP8 video decoding
508
+ - VAAPI-accelerated deinterlacing
509
+
510
+
511
+ version 3.2:
512
+ - libopenmpt demuxer
513
+ - tee protocol
514
+ - Changed metadata print option to accept general urls
515
+ - Alias muxer for Ogg Video (.ogv)
516
+ - VP8 in Ogg muxing
517
+ - curves filter doesn't automatically insert points at x=0 and x=1 anymore
518
+ - 16-bit support in curves filter and selectivecolor filter
519
+ - OpenH264 decoder wrapper
520
+ - MediaCodec H.264/HEVC/MPEG-4/VP8/VP9 hwaccel
521
+ - True Audio (TTA) muxer
522
+ - crystalizer audio filter
523
+ - acrusher audio filter
524
+ - bitplanenoise video filter
525
+ - floating point support in als decoder
526
+ - fifo muxer
527
+ - maskedclamp filter
528
+ - hysteresis filter
529
+ - lut2 filter
530
+ - yuvtestsrc filter
531
+ - CUDA CUVID H.263/VP8/VP9/10 bit HEVC (Dithered) Decoding
532
+ - vaguedenoiser filter
533
+ - added threads option per filter instance
534
+ - weave filter
535
+ - gblur filter
536
+ - avgblur filter
537
+ - sobel and prewitt filter
538
+ - MediaCodec HEVC/MPEG-4/VP8/VP9 decoding
539
+ - Meridian Lossless Packing (MLP) / TrueHD encoder
540
+ - Non-Local Means (nlmeans) denoising filter
541
+ - sdl2 output device and ffplay support
542
+ - sdl1 output device and sdl1 support removed
543
+ - extended mov edit list support
544
+ - libfaac encoder removed
545
+ - Matroska muxer now writes CRC32 elements by default in all Level 1 elements
546
+ - sidedata video and asidedata audio filter
547
+ - Changed mapping of rtp MIME type G726 to codec g726le.
548
+ - spec compliant VAAPI/DXVA2 VC-1 decoding of slices in frame-coded images
549
+
550
+
551
+ version 3.1:
552
+ - DXVA2-accelerated HEVC Main10 decoding
553
+ - fieldhint filter
554
+ - loop video filter and aloop audio filter
555
+ - Bob Weaver deinterlacing filter
556
+ - firequalizer filter
557
+ - datascope filter
558
+ - bench and abench filters
559
+ - ciescope filter
560
+ - protocol blacklisting API
561
+ - MediaCodec H264 decoding
562
+ - VC-2 HQ RTP payload format (draft v1) depacketizer and packetizer
563
+ - VP9 RTP payload format (draft v2) packetizer
564
+ - AudioToolbox audio decoders
565
+ - AudioToolbox audio encoders
566
+ - coreimage filter (GPU based image filtering on OSX)
567
+ - libdcadec removed
568
+ - bitstream filter for extracting DTS core
569
+ - ADPCM IMA DAT4 decoder
570
+ - musx demuxer
571
+ - aix demuxer
572
+ - remap filter
573
+ - hash and framehash muxers
574
+ - colorspace filter
575
+ - hdcd filter
576
+ - readvitc filter
577
+ - VAAPI-accelerated format conversion and scaling
578
+ - libnpp/CUDA-accelerated format conversion and scaling
579
+ - Duck TrueMotion 2.0 Real Time decoder
580
+ - Wideband Single-bit Data (WSD) demuxer
581
+ - VAAPI-accelerated H.264/HEVC/MJPEG encoding
582
+ - DTS Express (LBR) decoder
583
+ - Generic OpenMAX IL encoder with support for Raspberry Pi
584
+ - IFF ANIM demuxer & decoder
585
+ - Direct Stream Transfer (DST) decoder
586
+ - loudnorm filter
587
+ - MTAF demuxer and decoder
588
+ - MagicYUV decoder
589
+ - OpenExr improvements (tile data and B44/B44A support)
590
+ - BitJazz SheerVideo decoder
591
+ - CUDA CUVID H264/HEVC decoder
592
+ - 10-bit depth support in native utvideo decoder
593
+ - libutvideo wrapper removed
594
+ - YUY2 Lossless Codec decoder
595
+ - VideoToolbox H.264 encoder
596
+
597
+
598
+ version 3.0:
599
+ - Common Encryption (CENC) MP4 encoding and decoding support
600
+ - DXV decoding
601
+ - extrastereo filter
602
+ - ocr filter
603
+ - alimiter filter
604
+ - stereowiden filter
605
+ - stereotools filter
606
+ - rubberband filter
607
+ - tremolo filter
608
+ - agate filter
609
+ - chromakey filter
610
+ - maskedmerge filter
611
+ - Screenpresso SPV1 decoding
612
+ - chromaprint fingerprinting muxer
613
+ - ffplay dynamic volume control
614
+ - displace filter
615
+ - selectivecolor filter
616
+ - extensive native AAC encoder improvements and removal of experimental flag
617
+ - ADPCM PSX decoder
618
+ - 3dostr, dcstr, fsb, genh, vag, xvag, ads, msf, svag & vpk demuxer
619
+ - zscale filter
620
+ - wve demuxer
621
+ - zero-copy Intel QSV transcoding in ffmpeg
622
+ - shuffleframes filter
623
+ - SDX2 DPCM decoder
624
+ - vibrato filter
625
+ - innoHeim/Rsupport Screen Capture Codec decoder
626
+ - ADPCM AICA decoder
627
+ - Interplay ACM demuxer and audio decoder
628
+ - XMA1 & XMA2 decoder
629
+ - realtime filter
630
+ - anoisesrc audio filter source
631
+ - IVR demuxer
632
+ - compensationdelay filter
633
+ - acompressor filter
634
+ - support encoding 16-bit RLE SGI images
635
+ - apulsator filter
636
+ - sidechaingate audio filter
637
+ - mipsdspr1 option has been renamed to mipsdsp
638
+ - aemphasis filter
639
+ - mips32r5 option has been removed
640
+ - mips64r6 option has been removed
641
+ - DXVA2-accelerated VP9 decoding
642
+ - SOFAlizer: virtual binaural acoustics filter
643
+ - VAAPI VP9 hwaccel
644
+ - audio high-order multiband parametric equalizer
645
+ - automatic bitstream filtering
646
+ - showspectrumpic filter
647
+ - libstagefright support removed
648
+ - spectrumsynth filter
649
+ - ahistogram filter
650
+ - only seek with the right mouse button in ffplay
651
+ - toggle full screen when double-clicking with the left mouse button in ffplay
652
+ - afftfilt filter
653
+ - convolution filter
654
+ - libquvi support removed
655
+ - support for dvaudio in wav and avi
656
+ - libaacplus and libvo-aacenc support removed
657
+ - Cineform HD decoder
658
+ - new DCA decoder with full support for DTS-HD extensions
659
+ - significant performance improvements in Windows Television (WTV) demuxer
660
+ - nnedi deinterlacer
661
+ - streamselect video and astreamselect audio filter
662
+ - swaprect filter
663
+ - metadata video and ametadata audio filter
664
+ - SMPTE VC-2 HQ profile support for the Dirac decoder
665
+ - SMPTE VC-2 native encoder supporting the HQ profile
666
+
667
+
668
+ version 2.8:
669
+ - colorkey video filter
670
+ - BFSTM/BCSTM demuxer
671
+ - little-endian ADPCM_THP decoder
672
+ - Hap decoder and encoder
673
+ - DirectDraw Surface image/texture decoder
674
+ - ssim filter
675
+ - optional new ASF demuxer
676
+ - showvolume filter
677
+ - Many improvements to the JPEG 2000 decoder
678
+ - Go2Meeting decoding support
679
+ - adrawgraph audio and drawgraph video filter
680
+ - removegrain video filter
681
+ - Intel QSV-accelerated MPEG-2 video and HEVC encoding
682
+ - Intel QSV-accelerated MPEG-2 video and HEVC decoding
683
+ - Intel QSV-accelerated VC-1 video decoding
684
+ - libkvazaar HEVC encoder
685
+ - erosion, dilation, deflate and inflate video filters
686
+ - Dynamic Audio Normalizer as dynaudnorm filter
687
+ - Reverse video and areverse audio filter
688
+ - Random filter
689
+ - deband filter
690
+ - AAC fixed-point decoding
691
+ - sidechaincompress audio filter
692
+ - bitstream filter for converting HEVC from MP4 to Annex B
693
+ - acrossfade audio filter
694
+ - allyuv and allrgb video sources
695
+ - atadenoise video filter
696
+ - OS X VideoToolbox support
697
+ - aphasemeter filter
698
+ - showfreqs filter
699
+ - vectorscope filter
700
+ - waveform filter
701
+ - hstack and vstack filter
702
+ - Support DNx100 (1440x1080@8)
703
+ - VAAPI hevc hwaccel
704
+ - VDPAU hevc hwaccel
705
+ - framerate filter
706
+ - Switched default encoders for webm to VP9 and Opus
707
+ - Removed experimental flag from the JPEG 2000 encoder
708
+
709
+
710
+ version 2.7:
711
+ - FFT video filter
712
+ - TDSC decoder
713
+ - DTS lossless extension (XLL) decoding (not lossless, disabled by default)
714
+ - showwavespic filter
715
+ - DTS decoding through libdcadec
716
+ - Drop support for nvenc API before 5.0
717
+ - nvenc HEVC encoder
718
+ - Detelecine filter
719
+ - Intel QSV-accelerated H.264 encoding
720
+ - MMAL-accelerated H.264 decoding
721
+ - basic APNG encoder and muxer with default extension "apng"
722
+ - unpack DivX-style packed B-frames in MPEG-4 bitstream filter
723
+ - WebM Live Chunk Muxer
724
+ - nvenc level and tier options
725
+ - chorus filter
726
+ - Canopus HQ/HQA decoder
727
+ - Automatically rotate videos based on metadata in ffmpeg
728
+ - improved Quickdraw compatibility
729
+ - VP9 high bit-depth and extended colorspaces decoding support
730
+ - WebPAnimEncoder API when available for encoding and muxing WebP
731
+ - Direct3D11-accelerated decoding
732
+ - Support Secure Transport
733
+ - Multipart JPEG demuxer
734
+
735
+
736
+ version 2.6:
737
+ - nvenc encoder
738
+ - 10bit spp filter
739
+ - colorlevels filter
740
+ - RIFX format for *.wav files
741
+ - RTP/mpegts muxer
742
+ - non continuous cache protocol support
743
+ - tblend filter
744
+ - cropdetect support for non 8bpp, absolute (if limit >= 1) and relative (if limit < 1.0) threshold
745
+ - Camellia symmetric block cipher
746
+ - OpenH264 encoder wrapper
747
+ - VOC seeking support
748
+ - Closed caption Decoder
749
+ - fspp, uspp, pp7 MPlayer postprocessing filters ported to native filters
750
+ - showpalette filter
751
+ - Twofish symmetric block cipher
752
+ - Support DNx100 (960x720@8)
753
+ - eq2 filter ported from libmpcodecs as eq filter
754
+ - removed libmpcodecs
755
+ - Changed default DNxHD colour range in QuickTime .mov derivatives to mpeg range
756
+ - ported softpulldown filter from libmpcodecs as repeatfields filter
757
+ - dcshift filter
758
+ - RTP depacketizer for loss tolerant payload format for MP3 audio (RFC 5219)
759
+ - RTP depacketizer for AC3 payload format (RFC 4184)
760
+ - palettegen and paletteuse filters
761
+ - VP9 RTP payload format (draft 0) experimental depacketizer
762
+ - RTP depacketizer for DV (RFC 6469)
763
+ - DXVA2-accelerated HEVC decoding
764
+ - AAC ELD 480 decoding
765
+ - Intel QSV-accelerated H.264 decoding
766
+ - DSS SP decoder and DSS demuxer
767
+ - Fix stsd atom corruption in DNxHD QuickTimes
768
+ - Canopus HQX decoder
769
+ - RTP depacketization of T.140 text (RFC 4103)
770
+ - Port MIPS optimizations to 64-bit
771
+
772
+
773
+ version 2.5:
774
+ - HEVC/H.265 RTP payload format (draft v6) packetizer
775
+ - SUP/PGS subtitle demuxer
776
+ - ffprobe -show_pixel_formats option
777
+ - CAST128 symmetric block cipher, ECB mode
778
+ - STL subtitle demuxer and decoder
779
+ - libutvideo YUV 4:2:2 10bit support
780
+ - XCB-based screen-grabber
781
+ - UDP-Lite support (RFC 3828)
782
+ - xBR scaling filter
783
+ - AVFoundation screen capturing support
784
+ - ffserver supports codec private options
785
+ - creating DASH compatible fragmented MP4, MPEG-DASH segmenting muxer
786
+ - WebP muxer with animated WebP support
787
+ - zygoaudio decoding support
788
+ - APNG demuxer
789
+ - postproc visualization support
790
+
791
+
792
+ version 2.4:
793
+ - Icecast protocol
794
+ - ported lenscorrection filter from frei0r filter
795
+ - large optimizations in dctdnoiz to make it usable
796
+ - ICY metadata are now requested by default with the HTTP protocol
797
+ - support for using metadata in stream specifiers in fftools
798
+ - LZMA compression support in TIFF decoder
799
+ - H.261 RTP payload format (RFC 4587) depacketizer and experimental packetizer
800
+ - HEVC/H.265 RTP payload format (draft v6) depacketizer
801
+ - added codecview filter to visualize information exported by some codecs
802
+ - Matroska 3D support thorugh side data
803
+ - HTML generation using texi2html is deprecated in favor of makeinfo/texi2any
804
+ - silenceremove filter
805
+
806
+
807
+ version 2.3:
808
+ - AC3 fixed-point decoding
809
+ - shuffleplanes filter
810
+ - subfile protocol
811
+ - Phantom Cine demuxer
812
+ - replaygain data export
813
+ - VP7 video decoder
814
+ - Alias PIX image encoder and decoder
815
+ - Improvements to the BRender PIX image decoder
816
+ - Improvements to the XBM decoder
817
+ - QTKit input device
818
+ - improvements to OpenEXR image decoder
819
+ - support decoding 16-bit RLE SGI images
820
+ - GDI screen grabbing for Windows
821
+ - alternative rendition support for HTTP Live Streaming
822
+ - AVFoundation input device
823
+ - Direct Stream Digital (DSD) decoder
824
+ - Magic Lantern Video (MLV) demuxer
825
+ - On2 AVC (Audio for Video) decoder
826
+ - support for decoding through DXVA2 in ffmpeg
827
+ - libbs2b-based stereo-to-binaural audio filter
828
+ - libx264 reference frames count limiting depending on level
829
+ - native Opus decoder
830
+ - display matrix export and rotation API
831
+ - WebVTT encoder
832
+ - showcqt multimedia filter
833
+ - zoompan filter
834
+ - signalstats filter
835
+ - hqx filter (hq2x, hq3x, hq4x)
836
+ - flanger filter
837
+ - Image format auto-detection
838
+ - LRC demuxer and muxer
839
+ - Samba protocol (via libsmbclient)
840
+ - WebM DASH Manifest muxer
841
+ - libfribidi support in drawtext
842
+
843
+
844
+ version 2.2:
845
+
846
+ - HNM version 4 demuxer and video decoder
847
+ - Live HDS muxer
848
+ - setsar/setdar filters now support variables in ratio expressions
849
+ - elbg filter
850
+ - string validation in ffprobe
851
+ - support for decoding through VDPAU in ffmpeg (the -hwaccel option)
852
+ - complete Voxware MetaSound decoder
853
+ - remove mp3_header_compress bitstream filter
854
+ - Windows resource files for shared libraries
855
+ - aeval filter
856
+ - stereoscopic 3d metadata handling
857
+ - WebP encoding via libwebp
858
+ - ATRAC3+ decoder
859
+ - VP8 in Ogg demuxing
860
+ - side & metadata support in NUT
861
+ - framepack filter
862
+ - XYZ12 rawvideo support in NUT
863
+ - Exif metadata support in WebP decoder
864
+ - OpenGL device
865
+ - Use metadata_header_padding to control padding in ID3 tags (currently used in
866
+ MP3, AIFF, and OMA files), FLAC header, and the AVI "junk" block.
867
+ - Mirillis FIC video decoder
868
+ - Support DNx444
869
+ - libx265 encoder
870
+ - dejudder filter
871
+ - Autodetect VDA like all other hardware accelerations
872
+ - aliases and defaults for Ogg subtypes (opus, spx)
873
+
874
+
875
+ version 2.1:
876
+
877
+ - aecho filter
878
+ - perspective filter ported from libmpcodecs
879
+ - ffprobe -show_programs option
880
+ - compand filter
881
+ - RTMP seek support
882
+ - when transcoding with ffmpeg (i.e. not streamcopying), -ss is now accurate
883
+ even when used as an input option. Previous behavior can be restored with
884
+ the -noaccurate_seek option.
885
+ - ffmpeg -t option can now be used for inputs, to limit the duration of
886
+ data read from an input file
887
+ - incomplete Voxware MetaSound decoder
888
+ - read EXIF metadata from JPEG
889
+ - DVB teletext decoder
890
+ - phase filter ported from libmpcodecs
891
+ - w3fdif filter
892
+ - Opus support in Matroska
893
+ - FFV1 version 1.3 is stable and no longer experimental
894
+ - FFV1: YUVA(444,422,420) 9, 10 and 16 bit support
895
+ - changed DTS stream id in lavf mpeg ps muxer from 0x8a to 0x88, to be
896
+ more consistent with other muxers.
897
+ - adelay filter
898
+ - pullup filter ported from libmpcodecs
899
+ - ffprobe -read_intervals option
900
+ - Lossless and alpha support for WebP decoder
901
+ - Error Resilient AAC syntax (ER AAC LC) decoding
902
+ - Low Delay AAC (ER AAC LD) decoding
903
+ - mux chapters in ASF files
904
+ - SFTP protocol (via libssh)
905
+ - libx264: add ability to encode in YUVJ422P and YUVJ444P
906
+ - Fraps: use BT.709 colorspace by default for yuv, as reference fraps decoder does
907
+ - make decoding alpha optional for prores, ffv1 and vp6 by setting
908
+ the skip_alpha flag.
909
+ - ladspa wrapper filter
910
+ - native VP9 decoder
911
+ - dpx parser
912
+ - max_error_rate parameter in ffmpeg
913
+ - PulseAudio output device
914
+ - ReplayGain scanner
915
+ - Enhanced Low Delay AAC (ER AAC ELD) decoding (no LD SBR support)
916
+ - Linux framebuffer output device
917
+ - HEVC decoder
918
+ - raw HEVC, HEVC in MOV/MP4, HEVC in Matroska, HEVC in MPEG-TS demuxing
919
+ - mergeplanes filter
920
+
921
+
922
+ version 2.0:
923
+
924
+ - curves filter
925
+ - reference-counting for AVFrame and AVPacket data
926
+ - ffmpeg now fails when input options are used for output file
927
+ or vice versa
928
+ - support for Monkey's Audio versions from 3.93
929
+ - perms and aperms filters
930
+ - audio filtering support in ffplay
931
+ - 10% faster aac encoding on x86 and MIPS
932
+ - sine audio filter source
933
+ - WebP demuxing and decoding support
934
+ - ffmpeg options -filter_script and -filter_complex_script, which allow a
935
+ filtergraph description to be read from a file
936
+ - OpenCL support
937
+ - audio phaser filter
938
+ - separatefields filter
939
+ - libquvi demuxer
940
+ - uniform options syntax across all filters
941
+ - telecine filter
942
+ - interlace filter
943
+ - smptehdbars source
944
+ - inverse telecine filters (fieldmatch and decimate)
945
+ - colorbalance filter
946
+ - colorchannelmixer filter
947
+ - The matroska demuxer can now output proper verbatim ASS packets. It will
948
+ become the default at the next libavformat major bump.
949
+ - decent native animated GIF encoding
950
+ - asetrate filter
951
+ - interleave filter
952
+ - timeline editing with filters
953
+ - vidstabdetect and vidstabtransform filters for video stabilization using
954
+ the vid.stab library
955
+ - astats filter
956
+ - trim and atrim filters
957
+ - ffmpeg -t and -ss (output-only) options are now sample-accurate when
958
+ transcoding audio
959
+ - Matroska muxer can now put the index at the beginning of the file.
960
+ - extractplanes filter
961
+ - avectorscope filter
962
+ - ADPCM DTK decoder
963
+ - ADP demuxer
964
+ - RSD demuxer
965
+ - RedSpark demuxer
966
+ - ADPCM IMA Radical decoder
967
+ - zmq filters
968
+ - DCT denoiser filter (dctdnoiz)
969
+ - Wavelet denoiser filter ported from libmpcodecs as owdenoise (formerly "ow")
970
+ - Apple Intermediate Codec decoder
971
+ - Escape 130 video decoder
972
+ - FTP protocol support
973
+ - V4L2 output device
974
+ - 3D LUT filter (lut3d)
975
+ - SMPTE 302M audio encoder
976
+ - support for slice multithreading in libavfilter
977
+ - Hald CLUT support (generation and filtering)
978
+ - VC-1 interlaced B-frame support
979
+ - support for WavPack muxing (raw and in Matroska)
980
+ - XVideo output device
981
+ - vignette filter
982
+ - True Audio (TTA) encoder
983
+ - Go2Webinar decoder
984
+ - mcdeint filter ported from libmpcodecs
985
+ - sab filter ported from libmpcodecs
986
+ - ffprobe -show_chapters option
987
+ - WavPack encoding through libwavpack
988
+ - rotate filter
989
+ - spp filter ported from libmpcodecs
990
+ - libgme support
991
+ - psnr filter
992
+
993
+
994
+ version 1.2:
995
+
996
+ - VDPAU hardware acceleration through normal hwaccel
997
+ - SRTP support
998
+ - Error diffusion dither in Swscale
999
+ - Chained Ogg support
1000
+ - Theora Midstream reconfiguration support
1001
+ - EVRC decoder
1002
+ - audio fade filter
1003
+ - filtering audio with unknown channel layout
1004
+ - allpass, bass, bandpass, bandreject, biquad, equalizer, highpass, lowpass
1005
+ and treble audio filter
1006
+ - improved showspectrum filter, with multichannel support and sox-like colors
1007
+ - histogram filter
1008
+ - tee muxer
1009
+ - il filter ported from libmpcodecs
1010
+ - support ID3v2 tags in ASF files
1011
+ - encrypted TTA stream decoding support
1012
+ - RF64 support in WAV muxer
1013
+ - noise filter ported from libmpcodecs
1014
+ - Subtitles character encoding conversion
1015
+ - blend filter
1016
+ - stereo3d filter ported from libmpcodecs
1017
+
1018
+
1019
+ version 1.1:
1020
+
1021
+ - stream disposition information printing in ffprobe
1022
+ - filter for loudness analysis following EBU R128
1023
+ - Opus encoder using libopus
1024
+ - ffprobe -select_streams option
1025
+ - Pinnacle TARGA CineWave YUV16 decoder
1026
+ - TAK demuxer, decoder and parser
1027
+ - DTS-HD demuxer
1028
+ - remove -same_quant, it hasn't worked for years
1029
+ - FFM2 support
1030
+ - X-Face image encoder and decoder
1031
+ - 24-bit FLAC encoding
1032
+ - multi-channel ALAC encoding up to 7.1
1033
+ - metadata (INFO tag) support in WAV muxer
1034
+ - subtitles raw text decoder
1035
+ - support for building DLLs using MSVC
1036
+ - LVF demuxer
1037
+ - ffescape tool
1038
+ - metadata (info chunk) support in CAF muxer
1039
+ - field filter ported from libmpcodecs
1040
+ - AVR demuxer
1041
+ - geq filter ported from libmpcodecs
1042
+ - remove ffserver daemon mode
1043
+ - AST muxer/demuxer
1044
+ - new expansion syntax for drawtext
1045
+ - BRender PIX image decoder
1046
+ - ffprobe -show_entries option
1047
+ - ffprobe -sections option
1048
+ - ADPCM IMA Dialogic decoder
1049
+ - BRSTM demuxer
1050
+ - animated GIF decoder and demuxer
1051
+ - PVF demuxer
1052
+ - subtitles filter
1053
+ - IRCAM muxer/demuxer
1054
+ - Paris Audio File demuxer
1055
+ - Virtual concatenation demuxer
1056
+ - VobSub demuxer
1057
+ - JSON captions for TED talks decoding support
1058
+ - SOX Resampler support in libswresample
1059
+ - aselect filter
1060
+ - SGI RLE 8-bit / Silicon Graphics RLE 8-bit video decoder
1061
+ - Silicon Graphics Motion Video Compressor 1 & 2 decoder
1062
+ - Silicon Graphics Movie demuxer
1063
+ - apad filter
1064
+ - Resolution & pixel format change support with multithreading for H.264
1065
+ - documentation split into per-component manuals
1066
+ - pp (postproc) filter ported from MPlayer
1067
+ - NIST Sphere demuxer
1068
+ - MPL2, VPlayer, MPlayer, AQTitle, PJS and SubViewer v1 subtitles demuxers and decoders
1069
+ - Sony Wave64 muxer
1070
+ - adobe and limelight publisher authentication in RTMP
1071
+ - data: URI scheme
1072
+ - support building on the Plan 9 operating system
1073
+ - kerndeint filter ported from MPlayer
1074
+ - histeq filter ported from VirtualDub
1075
+ - Megalux Frame demuxer
1076
+ - 012v decoder
1077
+ - Improved AVC Intra decoding support
1078
+
1079
+
1080
+ version 1.0:
1081
+
1082
+ - INI and flat output in ffprobe
1083
+ - Scene detection in libavfilter
1084
+ - Indeo Audio decoder
1085
+ - channelsplit audio filter
1086
+ - setnsamples audio filter
1087
+ - atempo filter
1088
+ - ffprobe -show_data option
1089
+ - RTMPT protocol support
1090
+ - iLBC encoding/decoding via libilbc
1091
+ - Microsoft Screen 1 decoder
1092
+ - join audio filter
1093
+ - audio channel mapping filter
1094
+ - Microsoft ATC Screen decoder
1095
+ - RTSP listen mode
1096
+ - TechSmith Screen Codec 2 decoder
1097
+ - AAC encoding via libfdk-aac
1098
+ - Microsoft Expression Encoder Screen decoder
1099
+ - RTMPS protocol support
1100
+ - RTMPTS protocol support
1101
+ - RTMPE protocol support
1102
+ - RTMPTE protocol support
1103
+ - showwaves and showspectrum filter
1104
+ - LucasArts SMUSH SANM playback support
1105
+ - LucasArts SMUSH VIMA audio decoder (ADPCM)
1106
+ - LucasArts SMUSH demuxer
1107
+ - SAMI, RealText and SubViewer demuxers and decoders
1108
+ - Heart Of Darkness PAF playback support
1109
+ - iec61883 device
1110
+ - asettb filter
1111
+ - new option: -progress
1112
+ - 3GPP Timed Text encoder/decoder
1113
+ - GeoTIFF decoder support
1114
+ - ffmpeg -(no)stdin option
1115
+ - Opus decoder using libopus
1116
+ - caca output device using libcaca
1117
+ - alphaextract and alphamerge filters
1118
+ - concat filter
1119
+ - flite filter
1120
+ - Canopus Lossless Codec decoder
1121
+ - bitmap subtitles in filters (experimental and temporary)
1122
+ - MP2 encoding via TwoLAME
1123
+ - bmp parser
1124
+ - smptebars source
1125
+ - asetpts filter
1126
+ - hue filter
1127
+ - ICO muxer
1128
+ - SubRip encoder and decoder without embedded timing
1129
+ - edge detection filter
1130
+ - framestep filter
1131
+ - ffmpeg -shortest option is now per-output file
1132
+ -pass and -passlogfile are now per-output stream
1133
+ - volume measurement filter
1134
+ - Ut Video encoder
1135
+ - Microsoft Screen 2 decoder
1136
+ - smartblur filter ported from MPlayer
1137
+ - CPiA decoder
1138
+ - decimate filter ported from MPlayer
1139
+ - RTP depacketization of JPEG
1140
+ - Smooth Streaming live segmenter muxer
1141
+ - F4V muxer
1142
+ - sendcmd and asendcmd filters
1143
+ - WebVTT demuxer and decoder (simple tags supported)
1144
+ - RTP packetization of JPEG
1145
+ - faststart option in the MOV/MP4 muxer
1146
+ - support for building with MSVC
1147
+
1148
+
1149
+ version 0.11:
1150
+
1151
+ - Fixes: CVE-2012-2772, CVE-2012-2774, CVE-2012-2775, CVE-2012-2776, CVE-2012-2777,
1152
+ CVE-2012-2779, CVE-2012-2782, CVE-2012-2783, CVE-2012-2784, CVE-2012-2785,
1153
+ CVE-2012-2786, CVE-2012-2787, CVE-2012-2788, CVE-2012-2789, CVE-2012-2790,
1154
+ CVE-2012-2791, CVE-2012-2792, CVE-2012-2793, CVE-2012-2794, CVE-2012-2795,
1155
+ CVE-2012-2796, CVE-2012-2797, CVE-2012-2798, CVE-2012-2799, CVE-2012-2800,
1156
+ CVE-2012-2801, CVE-2012-2802, CVE-2012-2803, CVE-2012-2804,
1157
+ - v408 Quicktime and Microsoft AYUV Uncompressed 4:4:4:4 encoder and decoder
1158
+ - setfield filter
1159
+ - CDXL demuxer and decoder
1160
+ - Apple ProRes encoder
1161
+ - ffprobe -count_packets and -count_frames options
1162
+ - Sun Rasterfile Encoder
1163
+ - ID3v2 attached pictures reading and writing
1164
+ - WMA Lossless decoder
1165
+ - bluray protocol
1166
+ - blackdetect filter
1167
+ - libutvideo encoder wrapper (--enable-libutvideo)
1168
+ - swapuv filter
1169
+ - bbox filter
1170
+ - XBM encoder and decoder
1171
+ - RealAudio Lossless decoder
1172
+ - ZeroCodec decoder
1173
+ - tile video filter
1174
+ - Metal Gear Solid: The Twin Snakes demuxer
1175
+ - OpenEXR image decoder
1176
+ - removelogo filter
1177
+ - drop support for ffmpeg without libavfilter
1178
+ - drawtext video filter: fontconfig support
1179
+ - ffmpeg -benchmark_all option
1180
+ - super2xsai filter ported from libmpcodecs
1181
+ - add libavresample audio conversion library for compatibility
1182
+ - MicroDVD decoder
1183
+ - Avid Meridien (AVUI) encoder and decoder
1184
+ - accept + prefix to -pix_fmt option to disable automatic conversions.
1185
+ - complete audio filtering in libavfilter and ffmpeg
1186
+ - add fps filter
1187
+ - vorbis parser
1188
+ - png parser
1189
+ - audio mix filter
1190
+ - ffv1: support (draft) version 1.3
1191
+
1192
+
1193
+ version 0.10:
1194
+
1195
+ - Fixes: CVE-2011-3929, CVE-2011-3934, CVE-2011-3935, CVE-2011-3936,
1196
+ CVE-2011-3937, CVE-2011-3940, CVE-2011-3941, CVE-2011-3944,
1197
+ CVE-2011-3945, CVE-2011-3946, CVE-2011-3947, CVE-2011-3949,
1198
+ CVE-2011-3950, CVE-2011-3951, CVE-2011-3952
1199
+ - v410 Quicktime Uncompressed 4:4:4 10-bit encoder and decoder
1200
+ - SBaGen (SBG) binaural beats script demuxer
1201
+ - OpenMG Audio muxer
1202
+ - Timecode extraction in DV and MOV
1203
+ - thumbnail video filter
1204
+ - XML output in ffprobe
1205
+ - asplit audio filter
1206
+ - tinterlace video filter
1207
+ - astreamsync audio filter
1208
+ - amerge audio filter
1209
+ - ISMV (Smooth Streaming) muxer
1210
+ - GSM audio parser
1211
+ - SMJPEG muxer
1212
+ - XWD encoder and decoder
1213
+ - Automatic thread count based on detection number of (available) CPU cores
1214
+ - y41p Brooktree Uncompressed 4:1:1 12-bit encoder and decoder
1215
+ - ffprobe -show_error option
1216
+ - Avid 1:1 10-bit RGB Packer codec
1217
+ - v308 Quicktime Uncompressed 4:4:4 encoder and decoder
1218
+ - yuv4 libquicktime packed 4:2:0 encoder and decoder
1219
+ - ffprobe -show_frames option
1220
+ - silencedetect audio filter
1221
+ - ffprobe -show_program_version, -show_library_versions, -show_versions options
1222
+ - rv34: frame-level multi-threading
1223
+ - optimized iMDCT transform on x86 using SSE for for mpegaudiodec
1224
+ - Improved PGS subtitle decoder
1225
+ - dumpgraph option to lavfi device
1226
+ - r210 and r10k encoders
1227
+ - ffwavesynth decoder
1228
+ - aviocat tool
1229
+ - ffeval tool
1230
+ - support encoding and decoding 4-channel SGI images
1231
+
1232
+
1233
+ version 0.9:
1234
+
1235
+ - openal input device added
1236
+ - boxblur filter added
1237
+ - BWF muxer
1238
+ - Flash Screen Video 2 decoder
1239
+ - lavfi input device added
1240
+ - added avconv, which is almost the same for now, except
1241
+ for a few incompatible changes in the options, which will hopefully make them
1242
+ easier to use. The changes are:
1243
+ * The options placement is now strictly enforced! While in theory the
1244
+ options for ffmpeg should be given in [input options] -i INPUT [output
1245
+ options] OUTPUT order, in practice it was possible to give output options
1246
+ before the -i and it mostly worked. Except when it didn't - the behavior was
1247
+ a bit inconsistent. In avconv, it is not possible to mix input and output
1248
+ options. All non-global options are reset after an input or output filename.
1249
+ * All per-file options are now truly per-file - they apply only to the next
1250
+ input or output file and specifying different values for different files
1251
+ will now work properly (notably -ss and -t options).
1252
+ * All per-stream options are now truly per-stream - it is possible to
1253
+ specify which stream(s) should a given option apply to. See the Stream
1254
+ specifiers section in the avconv manual for details.
1255
+ * In ffmpeg some options (like -newvideo/-newaudio/...) are irregular in the
1256
+ sense that they're specified after the output filename instead of before,
1257
+ like all other options. In avconv this irregularity is removed, all options
1258
+ apply to the next input or output file.
1259
+ * -newvideo/-newaudio/-newsubtitle options were removed. Not only were they
1260
+ irregular and highly confusing, they were also redundant. In avconv the -map
1261
+ option will create new streams in the output file and map input streams to
1262
+ them. E.g. avconv -i INPUT -map 0 OUTPUT will create an output stream for
1263
+ each stream in the first input file.
1264
+ * The -map option now has slightly different and more powerful syntax:
1265
+ + Colons (':') are used to separate file index/stream type/stream index
1266
+ instead of dots. Comma (',') is used to separate the sync stream instead
1267
+ of colon.. This is done for consistency with other options.
1268
+ + It's possible to specify stream type. E.g. -map 0:a:2 creates an
1269
+ output stream from the third input audio stream.
1270
+ + Omitting the stream index now maps all the streams of the given type,
1271
+ not just the first. E.g. -map 0:s creates output streams for all the
1272
+ subtitle streams in the first input file.
1273
+ + Since -map can now match multiple streams, negative mappings were
1274
+ introduced. Negative mappings disable some streams from an already
1275
+ defined map. E.g. '-map 0 -map -0:a:1' means 'create output streams for
1276
+ all the stream in the first input file, except for the second audio
1277
+ stream'.
1278
+ * There is a new option -c (or -codec) for choosing the decoder/encoder to
1279
+ use, which makes it possible to precisely specify target stream(s) consistently with
1280
+ other options. E.g. -c:v lib264 sets the codec for all video streams, -c:a:0
1281
+ libvorbis sets the codec for the first audio stream and -c copy copies all
1282
+ the streams without reencoding. Old -vcodec/-acodec/-scodec options are now
1283
+ aliases to -c:v/a/s
1284
+ * It is now possible to precisely specify which stream should an AVOption
1285
+ apply to. E.g. -b:v:0 2M sets the bitrate for the first video stream, while
1286
+ -b:a 128k sets the bitrate for all audio streams. Note that the old -ab 128k
1287
+ syntax is deprecated and will stop working soon.
1288
+ * -map_chapters now takes only an input file index and applies to the next
1289
+ output file. This is consistent with how all the other options work.
1290
+ * -map_metadata now takes only an input metadata specifier and applies to
1291
+ the next output file. Output metadata specifier is now part of the option
1292
+ name, similarly to the AVOptions/map/codec feature above.
1293
+ * -metadata can now be used to set metadata on streams and chapters, e.g.
1294
+ -metadata:s:1 language=eng sets the language of the first stream to 'eng'.
1295
+ This made -vlang/-alang/-slang options redundant, so they were removed.
1296
+ * -qscale option now uses stream specifiers and applies to all streams, not
1297
+ just video. I.e. plain -qscale number would now apply to all streams. To get
1298
+ the old behavior, use -qscale:v. Also there is now a shortcut -q for -qscale
1299
+ and -aq is now an alias for -q:a.
1300
+ * -vbsf/-absf/-sbsf options were removed and replaced by a -bsf option which
1301
+ uses stream specifiers. Use -bsf:v/a/s instead of the old options.
1302
+ * -itsscale option now uses stream specifiers, so its argument is only the
1303
+ scale parameter.
1304
+ * -intra option was removed, use -g 0 for the same effect.
1305
+ * -psnr option was removed, use -flags +psnr for the same effect.
1306
+ * -vf option is now an alias to the new -filter option, which uses stream specifiers.
1307
+ * -vframes/-aframes/-dframes options are now aliases to the new -frames option.
1308
+ * -vtag/-atag/-stag options are now aliases to the new -tag option.
1309
+ - XMV demuxer
1310
+ - LOAS demuxer
1311
+ - ashowinfo filter added
1312
+ - Windows Media Image decoder
1313
+ - amovie source added
1314
+ - LATM muxer/demuxer
1315
+ - Speex encoder via libspeex
1316
+ - JSON output in ffprobe
1317
+ - WTV muxer
1318
+ - Optional C++ Support (needed for libstagefright)
1319
+ - H.264 Decoding on Android via Stagefright
1320
+ - Prores decoder
1321
+ - BIN/XBIN/ADF/IDF text file decoder
1322
+ - aconvert audio filter added
1323
+ - audio support to lavfi input device added
1324
+ - libcdio-paranoia input device for audio CD grabbing
1325
+ - Apple ProRes decoder
1326
+ - CELT in Ogg demuxing
1327
+ - G.723.1 demuxer and decoder
1328
+ - libmodplug support (--enable-libmodplug)
1329
+ - VC-1 interlaced decoding
1330
+ - libutvideo wrapper (--enable-libutvideo)
1331
+ - aevalsrc audio source added
1332
+ - Ut Video decoder
1333
+ - Speex encoding via libspeex
1334
+ - 4:2:2 H.264 decoding support
1335
+ - 4:2:2 and 4:4:4 H.264 encoding with libx264
1336
+ - Pulseaudio input device
1337
+ - Prores encoder
1338
+ - Video Decoder Acceleration (VDA) HWAccel module.
1339
+ - replacement Indeo 3 decoder
1340
+ - new ffmpeg option: -map_channel
1341
+ - volume audio filter added
1342
+ - earwax audio filter added
1343
+ - libv4l2 support (--enable-libv4l2)
1344
+ - TLS/SSL and HTTPS protocol support
1345
+ - AVOptions API rewritten and documented
1346
+ - most of CODEC_FLAG2_*, some CODEC_FLAG_* and many codec-specific fields in
1347
+ AVCodecContext deprecated. Codec private options should be used instead.
1348
+ - Properly working defaults in libx264 wrapper, support for native presets.
1349
+ - Encrypted OMA files support
1350
+ - Discworld II BMV decoding support
1351
+ - VBLE Decoder
1352
+ - OS X Video Decoder Acceleration (VDA) support
1353
+ - compact and csv output in ffprobe
1354
+ - pan audio filter
1355
+ - IFF Amiga Continuous Bitmap (ACBM) decoder
1356
+ - ass filter
1357
+ - CRI ADX audio format muxer and demuxer
1358
+ - Playstation Portable PMP format demuxer
1359
+ - Microsoft Windows ICO demuxer
1360
+ - life source
1361
+ - PCM format support in OMA demuxer
1362
+ - CLJR encoder
1363
+ - new option: -report
1364
+ - Dxtory capture format decoder
1365
+ - cellauto source
1366
+ - Simple segmenting muxer
1367
+ - Indeo 4 decoder
1368
+ - SMJPEG demuxer
1369
+
1370
+
1371
+ version 0.8:
1372
+
1373
+ - many many things we forgot because we rather write code than changelogs
1374
+ - WebM support in Matroska de/muxer
1375
+ - low overhead Ogg muxing
1376
+ - MMS-TCP support
1377
+ - VP8 de/encoding via libvpx
1378
+ - Demuxer for On2's IVF format
1379
+ - Pictor/PC Paint decoder
1380
+ - HE-AAC v2 decoder
1381
+ - HE-AAC v2 encoding with libaacplus
1382
+ - libfaad2 wrapper removed
1383
+ - DTS-ES extension (XCh) decoding support
1384
+ - native VP8 decoder
1385
+ - RTSP tunneling over HTTP
1386
+ - RTP depacketization of SVQ3
1387
+ - -strict inofficial replaced by -strict unofficial
1388
+ - ffplay -exitonkeydown and -exitonmousedown options added
1389
+ - native GSM / GSM MS decoder
1390
+ - RTP depacketization of QDM2
1391
+ - ANSI/ASCII art playback system
1392
+ - Lego Mindstorms RSO de/muxer
1393
+ - libavcore added (and subsequently removed)
1394
+ - SubRip subtitle file muxer and demuxer
1395
+ - Chinese AVS encoding via libxavs
1396
+ - ffprobe -show_packets option added
1397
+ - RTP packetization of Theora and Vorbis
1398
+ - RTP depacketization of MP4A-LATM
1399
+ - RTP packetization and depacketization of VP8
1400
+ - hflip filter
1401
+ - Apple HTTP Live Streaming demuxer
1402
+ - a64 codec
1403
+ - MMS-HTTP support
1404
+ - G.722 ADPCM audio encoder/decoder
1405
+ - R10k video decoder
1406
+ - ocv_smooth filter
1407
+ - frei0r wrapper filter
1408
+ - change crop filter syntax to width:height:x:y
1409
+ - make the crop filter accept parametric expressions
1410
+ - make ffprobe accept AVFormatContext options
1411
+ - yadif filter
1412
+ - blackframe filter
1413
+ - Demuxer for Leitch/Harris' VR native stream format (LXF)
1414
+ - RTP depacketization of the X-QT QuickTime format
1415
+ - SAP (Session Announcement Protocol, RFC 2974) muxer and demuxer
1416
+ - cropdetect filter
1417
+ - ffmpeg -crop* options removed
1418
+ - transpose filter added
1419
+ - ffmpeg -force_key_frames option added
1420
+ - demuxer for receiving raw rtp:// URLs without an SDP description
1421
+ - single stream LATM/LOAS decoder
1422
+ - setpts filter added
1423
+ - Win64 support for optimized x86 assembly functions
1424
+ - MJPEG/AVI1 to JPEG/JFIF bitstream filter
1425
+ - ASS subtitle encoder and decoder
1426
+ - IEC 61937 encapsulation for E-AC-3, TrueHD, DTS-HD (for HDMI passthrough)
1427
+ - overlay filter added
1428
+ - rename aspect filter to setdar, and pixelaspect to setsar
1429
+ - IEC 61937 demuxer
1430
+ - Mobotix .mxg demuxer
1431
+ - frei0r source added
1432
+ - hqdn3d filter added
1433
+ - RTP depacketization of QCELP
1434
+ - FLAC parser added
1435
+ - gradfun filter added
1436
+ - AMR-WB decoder
1437
+ - replace the ocv_smooth filter with a more generic ocv filter
1438
+ - Windows Televison (WTV) demuxer
1439
+ - FFmpeg metadata format muxer and demuxer
1440
+ - SubRip (srt) subtitle encoder and decoder
1441
+ - floating-point AC-3 encoder added
1442
+ - Lagarith decoder
1443
+ - ffmpeg -copytb option added
1444
+ - IVF muxer added
1445
+ - Wing Commander IV movies decoder added
1446
+ - movie source added
1447
+ - Bink version 'b' audio and video decoder
1448
+ - Bitmap Brothers JV playback system
1449
+ - Apple HTTP Live Streaming protocol handler
1450
+ - sndio support for playback and record
1451
+ - Linux framebuffer input device added
1452
+ - Chronomaster DFA decoder
1453
+ - DPX image encoder
1454
+ - MicroDVD subtitle file muxer and demuxer
1455
+ - Playstation Portable PMP format demuxer
1456
+ - fieldorder video filter added
1457
+ - AAC encoding via libvo-aacenc
1458
+ - AMR-WB encoding via libvo-amrwbenc
1459
+ - xWMA demuxer
1460
+ - Mobotix MxPEG decoder
1461
+ - VP8 frame-multithreading
1462
+ - NEON optimizations for VP8
1463
+ - Lots of deprecated API cruft removed
1464
+ - fft and imdct optimizations for AVX (Sandy Bridge) processors
1465
+ - showinfo filter added
1466
+ - SMPTE 302M AES3 audio decoder
1467
+ - Apple Core Audio Format muxer
1468
+ - 9 bits and 10 bits per sample support in the H.264 decoder
1469
+ - 9 bits and 10 bits FFV1 encoding / decoding
1470
+ - split filter added
1471
+ - select filter added
1472
+ - sdl output device added
1473
+ - libmpcodecs video filter support (3 times as many filters than before)
1474
+ - mpeg2 aspect ratio dection fixed
1475
+ - libxvid aspect pickiness fixed
1476
+ - Frame multithreaded decoding
1477
+ - E-AC-3 audio encoder
1478
+ - ac3enc: add channel coupling support
1479
+ - floating-point sample format support to the ac3, eac3, dca, aac, and vorbis decoders.
1480
+ - H264/MPEG frame-level multi-threading
1481
+ - All av_metadata_* functions renamed to av_dict_* and moved to libavutil
1482
+ - 4:4:4 H.264 decoding support
1483
+ - 10-bit H.264 optimizations for x86
1484
+ - lut, lutrgb, and lutyuv filters added
1485
+ - buffersink libavfilter sink added
1486
+ - Bump libswscale for recently reported ABI break
1487
+ - New J2K encoder (via OpenJPEG)
1488
+
1489
+
1490
+ version 0.7:
1491
+
1492
+ - all the changes for 0.8, but keeping API/ABI compatibility with the 0.6 release
1493
+
1494
+
1495
+ version 0.6:
1496
+
1497
+ - PB-frame decoding for H.263
1498
+ - deprecated vhook subsystem removed
1499
+ - deprecated old scaler removed
1500
+ - VQF demuxer
1501
+ - Alpha channel scaler
1502
+ - PCX encoder
1503
+ - RTP packetization of H.263
1504
+ - RTP packetization of AMR
1505
+ - RTP depacketization of Vorbis
1506
+ - CorePNG decoding support
1507
+ - Cook multichannel decoding support
1508
+ - introduced avlanguage helpers in libavformat
1509
+ - 8088flex TMV demuxer and decoder
1510
+ - per-stream language-tags extraction in asfdec
1511
+ - V210 decoder and encoder
1512
+ - remaining GPL parts in AC-3 decoder converted to LGPL
1513
+ - QCP demuxer
1514
+ - SoX native format muxer and demuxer
1515
+ - AMR-NB decoding/encoding, AMR-WB decoding via OpenCORE libraries
1516
+ - DPX image decoder
1517
+ - Electronic Arts Madcow decoder
1518
+ - DivX (XSUB) subtitle encoder
1519
+ - nonfree libamr support for AMR-NB/WB decoding/encoding removed
1520
+ - experimental AAC encoder
1521
+ - RTP depacketization of ASF and RTSP from WMS servers
1522
+ - RTMP support in libavformat
1523
+ - noX handling for OPT_BOOL X options
1524
+ - Wave64 demuxer
1525
+ - IEC-61937 compatible Muxer
1526
+ - TwinVQ decoder
1527
+ - Bluray (PGS) subtitle decoder
1528
+ - LPCM support in MPEG-TS (HDMV RID as found on Blu-ray disks)
1529
+ - WMA Pro decoder
1530
+ - Core Audio Format demuxer
1531
+ - ATRAC1 decoder
1532
+ - MD STUDIO audio demuxer
1533
+ - RF64 support in WAV demuxer
1534
+ - MPEG-4 Audio Lossless Coding (ALS) decoder
1535
+ - -formats option split into -formats, -codecs, -bsfs, and -protocols
1536
+ - IV8 demuxer
1537
+ - CDG demuxer and decoder
1538
+ - R210 decoder
1539
+ - Auravision Aura 1 and 2 decoders
1540
+ - Deluxe Paint Animation playback system
1541
+ - SIPR decoder
1542
+ - Adobe Filmstrip muxer and demuxer
1543
+ - RTP depacketization of H.263
1544
+ - Bink demuxer and audio/video decoders
1545
+ - enable symbol versioning by default for linkers that support it
1546
+ - IFF PBM/ILBM bitmap decoder
1547
+ - concat protocol
1548
+ - Indeo 5 decoder
1549
+ - RTP depacketization of AMR
1550
+ - WMA Voice decoder
1551
+ - ffprobe tool
1552
+ - AMR-NB decoder
1553
+ - RTSP muxer
1554
+ - HE-AAC v1 decoder
1555
+ - Kega Game Video (KGV1) decoder
1556
+ - VorbisComment writing for FLAC, Ogg FLAC and Ogg Speex files
1557
+ - RTP depacketization of Theora
1558
+ - HTTP Digest authentication
1559
+ - RTMP/RTMPT/RTMPS/RTMPE/RTMPTE protocol support via librtmp
1560
+ - Psygnosis YOP demuxer and video decoder
1561
+ - spectral extension support in the E-AC-3 decoder
1562
+ - unsharp video filter
1563
+ - RTP hinting in the mov/3gp/mp4 muxer
1564
+ - Dirac in Ogg demuxing
1565
+ - seek to keyframes in Ogg
1566
+ - 4:2:2 and 4:4:4 Theora decoding
1567
+ - 35% faster VP3/Theora decoding
1568
+ - faster AAC decoding
1569
+ - faster H.264 decoding
1570
+ - RealAudio 1.0 (14.4K) encoder
1571
+
1572
+
1573
+ version 0.5:
1574
+
1575
+ - DV50 AKA DVCPRO50 encoder, decoder, muxer and demuxer
1576
+ - TechSmith Camtasia (TSCC) video decoder
1577
+ - IBM Ultimotion (ULTI) video decoder
1578
+ - Sierra Online audio file demuxer and decoder
1579
+ - Apple QuickDraw (qdrw) video decoder
1580
+ - Creative ADPCM audio decoder (16 bits as well as 8 bits schemes)
1581
+ - Electronic Arts Multimedia (WVE/UV2/etc.) file demuxer
1582
+ - Miro VideoXL (VIXL) video decoder
1583
+ - H.261 video encoder
1584
+ - QPEG video decoder
1585
+ - Nullsoft Video (NSV) file demuxer
1586
+ - Shorten audio decoder
1587
+ - LOCO video decoder
1588
+ - Apple Lossless Audio Codec (ALAC) decoder
1589
+ - Winnov WNV1 video decoder
1590
+ - Autodesk Animator Studio Codec (AASC) decoder
1591
+ - Indeo 2 video decoder
1592
+ - Fraps FPS1 video decoder
1593
+ - Snow video encoder/decoder
1594
+ - Sonic audio encoder/decoder
1595
+ - Vorbis audio decoder
1596
+ - Macromedia ADPCM decoder
1597
+ - Duck TrueMotion 2 video decoder
1598
+ - support for decoding FLX and DTA extensions in FLIC files
1599
+ - H.264 custom quantization matrices support
1600
+ - ffserver fixed, it should now be usable again
1601
+ - QDM2 audio decoder
1602
+ - Real Cooker audio decoder
1603
+ - TrueSpeech audio decoder
1604
+ - WMA2 audio decoder fixed, now all files should play correctly
1605
+ - RealAudio 14.4 and 28.8 decoders fixed
1606
+ - JPEG-LS decoder
1607
+ - build system improvements
1608
+ - tabs and trailing whitespace removed from the codebase
1609
+ - CamStudio video decoder
1610
+ - AIFF/AIFF-C audio format, encoding and decoding
1611
+ - ADTS AAC file reading and writing
1612
+ - Creative VOC file reading and writing
1613
+ - American Laser Games multimedia (*.mm) playback system
1614
+ - Zip Motion Blocks Video decoder
1615
+ - improved Theora/VP3 decoder
1616
+ - True Audio (TTA) decoder
1617
+ - AVS demuxer and video decoder
1618
+ - JPEG-LS encoder
1619
+ - Smacker demuxer and decoder
1620
+ - NuppelVideo/MythTV demuxer and RTjpeg decoder
1621
+ - KMVC decoder
1622
+ - MPEG-2 intra VLC support
1623
+ - MPEG-2 4:2:2 encoder
1624
+ - Flash Screen Video decoder
1625
+ - GXF demuxer
1626
+ - Chinese AVS decoder
1627
+ - GXF muxer
1628
+ - MXF demuxer
1629
+ - VC-1/WMV3/WMV9 video decoder
1630
+ - MacIntel support
1631
+ - AviSynth support
1632
+ - VMware video decoder
1633
+ - VP5 video decoder
1634
+ - VP6 video decoder
1635
+ - WavPack lossless audio decoder
1636
+ - Targa (.TGA) picture decoder
1637
+ - Vorbis audio encoder
1638
+ - Delphine Software .cin demuxer/audio and video decoder
1639
+ - Tiertex .seq demuxer/video decoder
1640
+ - MTV demuxer
1641
+ - TIFF picture encoder and decoder
1642
+ - GIF picture decoder
1643
+ - Intel Music Coder decoder
1644
+ - Zip Motion Blocks Video encoder
1645
+ - Musepack decoder
1646
+ - Flash Screen Video encoder
1647
+ - Theora encoding via libtheora
1648
+ - BMP encoder
1649
+ - WMA encoder
1650
+ - GSM-MS encoder and decoder
1651
+ - DCA decoder
1652
+ - DXA demuxer and decoder
1653
+ - DNxHD decoder
1654
+ - Gamecube movie (.THP) playback system
1655
+ - Blackfin optimizations
1656
+ - Interplay C93 demuxer and video decoder
1657
+ - Bethsoft VID demuxer and video decoder
1658
+ - CRYO APC demuxer
1659
+ - ATRAC3 decoder
1660
+ - V.Flash PTX decoder
1661
+ - RoQ muxer, RoQ audio encoder
1662
+ - Renderware TXD demuxer and decoder
1663
+ - extern C declarations for C++ removed from headers
1664
+ - sws_flags command line option
1665
+ - codebook generator
1666
+ - RoQ video encoder
1667
+ - QTRLE encoder
1668
+ - OS/2 support removed and restored again
1669
+ - AC-3 decoder
1670
+ - NUT muxer
1671
+ - additional SPARC (VIS) optimizations
1672
+ - Matroska muxer
1673
+ - slice-based parallel H.264 decoding
1674
+ - Monkey's Audio demuxer and decoder
1675
+ - AMV audio and video decoder
1676
+ - DNxHD encoder
1677
+ - H.264 PAFF decoding
1678
+ - Nellymoser ASAO decoder
1679
+ - Beam Software SIFF demuxer and decoder
1680
+ - libvorbis Vorbis decoding removed in favor of native decoder
1681
+ - IntraX8 (J-Frame) subdecoder for WMV2 and VC-1
1682
+ - Ogg (Theora, Vorbis and FLAC) muxer
1683
+ - The "device" muxers and demuxers are now in a new libavdevice library
1684
+ - PC Paintbrush PCX decoder
1685
+ - Sun Rasterfile decoder
1686
+ - TechnoTrend PVA demuxer
1687
+ - Linux Media Labs MPEG-4 (LMLM4) demuxer
1688
+ - AVM2 (Flash 9) SWF muxer
1689
+ - QT variant of IMA ADPCM encoder
1690
+ - VFW grabber
1691
+ - iPod/iPhone compatible mp4 muxer
1692
+ - Mimic decoder
1693
+ - MSN TCP Webcam stream demuxer
1694
+ - RL2 demuxer / decoder
1695
+ - IFF demuxer
1696
+ - 8SVX audio decoder
1697
+ - non-recursive Makefiles
1698
+ - BFI demuxer
1699
+ - MAXIS EA XA (.xa) demuxer / decoder
1700
+ - BFI video decoder
1701
+ - OMA demuxer
1702
+ - MLP/TrueHD decoder
1703
+ - Electronic Arts CMV decoder
1704
+ - Motion Pixels Video decoder
1705
+ - Motion Pixels MVI demuxer
1706
+ - removed animated GIF decoder/demuxer
1707
+ - D-Cinema audio muxer
1708
+ - Electronic Arts TGV decoder
1709
+ - Apple Lossless Audio Codec (ALAC) encoder
1710
+ - AAC decoder
1711
+ - floating point PCM encoder/decoder
1712
+ - MXF muxer
1713
+ - DV100 AKA DVCPRO HD decoder and demuxer
1714
+ - E-AC-3 support added to AC-3 decoder
1715
+ - Nellymoser ASAO encoder
1716
+ - ASS and SSA demuxer and muxer
1717
+ - liba52 wrapper removed
1718
+ - SVQ3 watermark decoding support
1719
+ - Speex decoding via libspeex
1720
+ - Electronic Arts TGQ decoder
1721
+ - RV40 decoder
1722
+ - QCELP / PureVoice decoder
1723
+ - RV30 decoder
1724
+ - hybrid WavPack support
1725
+ - R3D REDCODE demuxer
1726
+ - ALSA support for playback and record
1727
+ - Electronic Arts TQI decoder
1728
+ - OpenJPEG based JPEG 2000 decoder
1729
+ - NC (NC4600) camera file demuxer
1730
+ - Gopher client support
1731
+ - MXF D-10 muxer
1732
+ - generic metadata API
1733
+ - flash ScreenVideo2 encoder
1734
+
1735
+
1736
+ version 0.4.9-pre1:
1737
+
1738
+ - DV encoder, DV muxer
1739
+ - Microsoft RLE video decoder
1740
+ - Microsoft Video-1 decoder
1741
+ - Apple Animation (RLE) decoder
1742
+ - Apple Graphics (SMC) decoder
1743
+ - Apple Video (RPZA) decoder
1744
+ - Cinepak decoder
1745
+ - Sega FILM (CPK) file demuxer
1746
+ - Westwood multimedia support (VQA & AUD files)
1747
+ - Id Quake II CIN playback support
1748
+ - 8BPS video decoder
1749
+ - FLIC playback support
1750
+ - RealVideo 2.0 (RV20) decoder
1751
+ - Duck TrueMotion v1 (DUCK) video decoder
1752
+ - Sierra VMD demuxer and video decoder
1753
+ - MSZH and ZLIB decoder support
1754
+ - SVQ1 video encoder
1755
+ - AMR-WB support
1756
+ - PPC optimizations
1757
+ - rate distortion optimal cbp support
1758
+ - rate distorted optimal ac prediction for MPEG-4
1759
+ - rate distorted optimal lambda->qp support
1760
+ - AAC encoding with libfaac
1761
+ - Sunplus JPEG codec (SP5X) support
1762
+ - use Lagrange multiplier instead of QP for ratecontrol
1763
+ - Theora/VP3 decoding support
1764
+ - XA and ADX ADPCM codecs
1765
+ - export MPEG-2 active display area / pan scan
1766
+ - Add support for configuring with IBM XLC
1767
+ - floating point AAN DCT
1768
+ - initial support for zygo video (not complete)
1769
+ - RGB ffv1 support
1770
+ - new audio/video parser API
1771
+ - av_log() system
1772
+ - av_read_frame() and av_seek_frame() support
1773
+ - missing last frame fixes
1774
+ - seek by mouse in ffplay
1775
+ - noise reduction of DCT coefficients
1776
+ - H.263 OBMC & 4MV support
1777
+ - H.263 alternative inter vlc support
1778
+ - H.263 loop filter
1779
+ - H.263 slice structured mode
1780
+ - interlaced DCT support for MPEG-2 encoding
1781
+ - stuffing to stay above min_bitrate
1782
+ - MB type & QP visualization
1783
+ - frame stepping for ffplay
1784
+ - interlaced motion estimation
1785
+ - alternate scantable support
1786
+ - SVCD scan offset support
1787
+ - closed GOP support
1788
+ - SSE2 FDCT
1789
+ - quantizer noise shaping
1790
+ - G.726 ADPCM audio codec
1791
+ - MS ADPCM encoding
1792
+ - multithreaded/SMP motion estimation
1793
+ - multithreaded/SMP encoding for MPEG-1/MPEG-2/MPEG-4/H.263
1794
+ - multithreaded/SMP decoding for MPEG-2
1795
+ - FLAC decoder
1796
+ - Metrowerks CodeWarrior suppport
1797
+ - H.263+ custom pcf support
1798
+ - nicer output for 'ffmpeg -formats'
1799
+ - Matroska demuxer
1800
+ - SGI image format, encoding and decoding
1801
+ - H.264 loop filter support
1802
+ - H.264 CABAC support
1803
+ - nicer looking arrows for the motion vector visualization
1804
+ - improved VCD support
1805
+ - audio timestamp drift compensation
1806
+ - MPEG-2 YUV 422/444 support
1807
+ - polyphase kaiser windowed sinc and blackman nuttall windowed sinc audio resample
1808
+ - better image scaling
1809
+ - H.261 support
1810
+ - correctly interleave packets during encoding
1811
+ - VIS optimized motion compensation
1812
+ - intra_dc_precision>0 encoding support
1813
+ - support reuse of motion vectors/MB types/field select values of the source video
1814
+ - more accurate deblock filter
1815
+ - padding support
1816
+ - many optimizations and bugfixes
1817
+ - FunCom ISS audio file demuxer and according ADPCM decoding
1818
+
1819
+
1820
+ version 0.4.8:
1821
+
1822
+ - MPEG-2 video encoding (Michael)
1823
+ - Id RoQ playback subsystem (Mike Melanson and Tim Ferguson)
1824
+ - Wing Commander III Movie (.mve) file playback subsystem (Mike Melanson
1825
+ and Mario Brito)
1826
+ - Xan DPCM audio decoder (Mario Brito)
1827
+ - Interplay MVE playback subsystem (Mike Melanson)
1828
+ - Duck DK3 and DK4 ADPCM audio decoders (Mike Melanson)
1829
+
1830
+
1831
+ version 0.4.7:
1832
+
1833
+ - RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from mplayerhq
1834
+ (originally from public domain player for Amiga at http://www.honeypot.net/audio)
1835
+ - current version now also compiles with older GCC (Fabrice)
1836
+ - 4X multimedia playback system including 4xm file demuxer (Mike
1837
+ Melanson), and 4X video and audio codecs (Michael)
1838
+ - Creative YUV (CYUV) decoder (Mike Melanson)
1839
+ - FFV1 codec (our very simple lossless intra only codec, compresses much better
1840
+ than HuffYUV) (Michael)
1841
+ - ASV1 (Asus), H.264, Intel indeo3 codecs have been added (various)
1842
+ - tiny PNG encoder and decoder, tiny GIF decoder, PAM decoder (PPM with
1843
+ alpha support), JPEG YUV colorspace support. (Fabrice Bellard)
1844
+ - ffplay has been replaced with a newer version which uses SDL (optionally)
1845
+ for multiplatform support (Fabrice)
1846
+ - Sorenson Version 3 codec (SVQ3) support has been added (decoding only) - donated
1847
+ by anonymous
1848
+ - AMR format has been added (Johannes Carlsson)
1849
+ - 3GP support has been added (Johannes Carlsson)
1850
+ - VP3 codec has been added (Mike Melanson)
1851
+ - more MPEG-1/2 fixes
1852
+ - better multiplatform support, MS Visual Studio fixes (various)
1853
+ - AltiVec optimizations (Magnus Damn and others)
1854
+ - SH4 processor support has been added (BERO)
1855
+ - new public interfaces (avcodec_get_pix_fmt) (Roman Shaposhnick)
1856
+ - VOB streaming support (Brian Foley)
1857
+ - better MP3 autodetection (Andriy Rysin)
1858
+ - qpel encoding (Michael)
1859
+ - 4mv+b frames encoding finally fixed (Michael)
1860
+ - chroma ME (Michael)
1861
+ - 5 comparison functions for ME (Michael)
1862
+ - B-frame encoding speedup (Michael)
1863
+ - WMV2 codec (unfinished - Michael)
1864
+ - user specified diamond size for EPZS (Michael)
1865
+ - Playstation STR playback subsystem, still experimental (Mike and Michael)
1866
+ - ASV2 codec (Michael)
1867
+ - CLJR decoder (Alex)
1868
+
1869
+ .. And lots more new enhancements and fixes.
1870
+
1871
+
1872
+ version 0.4.6:
1873
+
1874
+ - completely new integer only MPEG audio layer 1/2/3 decoder rewritten
1875
+ from scratch
1876
+ - Recoded DCT and motion vector search with gcc (no longer depends on nasm)
1877
+ - fix quantization bug in AC3 encoder
1878
+ - added PCM codecs and format. Corrected WAV/AVI/ASF PCM issues
1879
+ - added prototype ffplay program
1880
+ - added GOB header parsing on H.263/H.263+ decoder (Juanjo)
1881
+ - bug fix on MCBPC tables of H.263 (Juanjo)
1882
+ - bug fix on DC coefficients of H.263 (Juanjo)
1883
+ - added Advanced Prediction Mode on H.263/H.263+ decoder (Juanjo)
1884
+ - now we can decode H.263 streams found in QuickTime files (Juanjo)
1885
+ - now we can decode H.263 streams found in VIVO v1 files(Juanjo)
1886
+ - preliminary RTP "friendly" mode for H.263/H.263+ coding. (Juanjo)
1887
+ - added GOB header for H.263/H.263+ coding on RTP mode (Juanjo)
1888
+ - now H.263 picture size is returned on the first decoded frame (Juanjo)
1889
+ - added first regression tests
1890
+ - added MPEG-2 TS demuxer
1891
+ - new demux API for libav
1892
+ - more accurate and faster IDCT (Michael)
1893
+ - faster and entropy-controlled motion search (Michael)
1894
+ - two pass video encoding (Michael)
1895
+ - new video rate control (Michael)
1896
+ - added MSMPEG4V1, MSMPEGV2 and WMV1 support (Michael)
1897
+ - great performance improvement of video encoders and decoders (Michael)
1898
+ - new and faster bit readers and vlc parsers (Michael)
1899
+ - high quality encoding mode: tries all macroblock/VLC types (Michael)
1900
+ - added DV video decoder
1901
+ - preliminary RTP/RTSP support in ffserver and libavformat
1902
+ - H.263+ AIC decoding/encoding support (Juanjo)
1903
+ - VCD MPEG-PS mode (Juanjo)
1904
+ - PSNR stuff (Juanjo)
1905
+ - simple stats output (Juanjo)
1906
+ - 16-bit and 15-bit RGB/BGR/GBR support (Bisqwit)
1907
+
1908
+
1909
+ version 0.4.5:
1910
+
1911
+ - some header fixes (Zdenek Kabelac <kabi at informatics.muni.cz>)
1912
+ - many MMX optimizations (Nick Kurshev <nickols_k at mail.ru>)
1913
+ - added configure system (actually a small shell script)
1914
+ - added MPEG audio layer 1/2/3 decoding using LGPL'ed mpglib by
1915
+ Michael Hipp (temporary solution - waiting for integer only
1916
+ decoder)
1917
+ - fixed VIDIOCSYNC interrupt
1918
+ - added Intel H.263 decoding support ('I263' AVI fourCC)
1919
+ - added Real Video 1.0 decoding (needs further testing)
1920
+ - simplified image formats again. Added PGM format (=grey
1921
+ pgm). Renamed old PGM to PGMYUV.
1922
+ - fixed msmpeg4 slice issues (tell me if you still find problems)
1923
+ - fixed OpenDivX bugs with newer versions (added VOL header decoding)
1924
+ - added support for MPlayer interface
1925
+ - added macroblock skip optimization
1926
+ - added MJPEG decoder
1927
+ - added mmx/mmxext IDCT from libmpeg2
1928
+ - added pgmyuvpipe, ppm, and ppm_pipe formats (original patch by Celer
1929
+ <celer at shell.scrypt.net>)
1930
+ - added pixel format conversion layer (e.g. for MJPEG or PPM)
1931
+ - added deinterlacing option
1932
+ - MPEG-1/2 fixes
1933
+ - MPEG-4 vol header fixes (Jonathan Marsden <snmjbm at pacbell.net>)
1934
+ - ARM optimizations (Lionel Ulmer <lionel.ulmer at free.fr>).
1935
+ - Windows porting of file converter
1936
+ - added MJPEG raw format (input/output)
1937
+ - added JPEG image format support (input/output)
1938
+
1939
+
1940
+ version 0.4.4:
1941
+
1942
+ - fixed some std header definitions (Bjorn Lindgren
1943
+ <bjorn.e.lindgren at telia.com>).
1944
+ - added MPEG demuxer (MPEG-1 and 2 compatible).
1945
+ - added ASF demuxer
1946
+ - added prototype RM demuxer
1947
+ - added AC3 decoding (done with libac3 by Aaron Holtzman)
1948
+ - added decoding codec parameter guessing (.e.g. for MPEG, because the
1949
+ header does not include them)
1950
+ - fixed header generation in MPEG-1, AVI and ASF muxer: wmplayer can now
1951
+ play them (only tested video)
1952
+ - fixed H.263 white bug
1953
+ - fixed phase rounding in img resample filter
1954
+ - add MMX code for polyphase img resample filter
1955
+ - added CPU autodetection
1956
+ - added generic title/author/copyright/comment string handling (ASF and RM
1957
+ use them)
1958
+ - added SWF demux to extract MP3 track (not usable yet because no MP3
1959
+ decoder)
1960
+ - added fractional frame rate support
1961
+ - codecs are no longer searched by read_header() (should fix ffserver
1962
+ segfault)
1963
+
1964
+
1965
+ version 0.4.3:
1966
+
1967
+ - BGR24 patch (initial patch by Jeroen Vreeken <pe1rxq at amsat.org>)
1968
+ - fixed raw yuv output
1969
+ - added motion rounding support in MPEG-4
1970
+ - fixed motion bug rounding in MSMPEG4
1971
+ - added B-frame handling in video core
1972
+ - added full MPEG-1 decoding support
1973
+ - added partial (frame only) MPEG-2 support
1974
+ - changed the FOURCC code for H.263 to "U263" to be able to see the
1975
+ +AVI/H.263 file with the UB Video H.263+ decoder. MPlayer works with
1976
+ this +codec ;) (JuanJo).
1977
+ - Halfpel motion estimation after MB type selection (JuanJo)
1978
+ - added pgm and .Y.U.V output format
1979
+ - suppressed 'img:' protocol. Simply use: /tmp/test%d.[pgm|Y] as input or
1980
+ output.
1981
+ - added pgmpipe I/O format (original patch from Martin Aumueller
1982
+ <lists at reserv.at>, but changed completely since we use a format
1983
+ instead of a protocol)
1984
+
1985
+
1986
+ version 0.4.2:
1987
+
1988
+ - added H.263/MPEG-4/MSMPEG4 decoding support. MPEG-4 decoding support
1989
+ (for OpenDivX) is almost complete: 8x8 MVs and rounding are
1990
+ missing. MSMPEG4 support is complete.
1991
+ - added prototype MPEG-1 decoder. Only I- and P-frames handled yet (it
1992
+ can decode ffmpeg MPEGs :-)).
1993
+ - added libavcodec API documentation (see apiexample.c).
1994
+ - fixed image polyphase bug (the bottom of some images could be
1995
+ greenish)
1996
+ - added support for non clipped motion vectors (decoding only)
1997
+ and image sizes non-multiple of 16
1998
+ - added support for AC prediction (decoding only)
1999
+ - added file overwrite confirmation (can be disabled with -y)
2000
+ - added custom size picture to H.263 using H.263+ (Juanjo)
2001
+
2002
+
2003
+ version 0.4.1:
2004
+
2005
+ - added MSMPEG4 (aka DivX) compatible encoder. Changed default codec
2006
+ of AVI and ASF to DIV3.
2007
+ - added -me option to set motion estimation method
2008
+ (default=log). suppressed redundant -hq option.
2009
+ - added options -acodec and -vcodec to force a given codec (useful for
2010
+ AVI for example)
2011
+ - fixed -an option
2012
+ - improved dct_quantize speed
2013
+ - factorized some motion estimation code
2014
+
2015
+
2016
+ version 0.4.0:
2017
+
2018
+ - removing grab code from ffserver and moved it to ffmpeg. Added
2019
+ multistream support to ffmpeg.
2020
+ - added timeshifting support for live feeds (option ?date=xxx in the
2021
+ URL)
2022
+ - added high quality image resize code with polyphase filter (need
2023
+ mmx/see optimization). Enable multiple image size support in ffserver.
2024
+ - added multi live feed support in ffserver
2025
+ - suppressed master feature from ffserver (it should be done with an
2026
+ external program which opens the .ffm url and writes it to another
2027
+ ffserver)
2028
+ - added preliminary support for video stream parsing (WAV and AVI half
2029
+ done). Added proper support for audio/video file conversion in
2030
+ ffmpeg.
2031
+ - added preliminary support for video file sending from ffserver
2032
+ - redesigning I/O subsystem: now using URL based input and output
2033
+ (see avio.h)
2034
+ - added WAV format support
2035
+ - added "tty user interface" to ffmpeg to stop grabbing gracefully
2036
+ - added MMX/SSE optimizations to SAD (Sums of Absolutes Differences)
2037
+ (Juan J. Sierralta P. a.k.a. "Juanjo" <juanjo at atmlab.utfsm.cl>)
2038
+ - added MMX DCT from mpeg2_movie 1.5 (Juanjo)
2039
+ - added new motion estimation algorithms, log and phods (Juanjo)
2040
+ - changed directories: libav for format handling, libavcodec for
2041
+ codecs
2042
+
2043
+
2044
+ version 0.3.4:
2045
+
2046
+ - added stereo in MPEG audio encoder
2047
+
2048
+
2049
+ version 0.3.3:
2050
+
2051
+ - added 'high quality' mode which use motion vectors. It can be used in
2052
+ real time at low resolution.
2053
+ - fixed rounding problems which caused quality problems at high
2054
+ bitrates and large GOP size
2055
+
2056
+
2057
+ version 0.3.2: small fixes
2058
+
2059
+ - ASF fixes
2060
+ - put_seek bug fix
2061
+
2062
+
2063
+ version 0.3.1: added avi/divx support
2064
+
2065
+ - added AVI support
2066
+ - added MPEG-4 codec compatible with OpenDivX. It is based on the H.263 codec
2067
+ - added sound for flash format (not tested)
2068
+
2069
+
2070
+ version 0.3: initial public release
bin/ffmpeg/INSTALL.md ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## Installing FFmpeg
2
+
3
+ 1. Type `./configure` to create the configuration. A list of configure
4
+ options is printed by running `configure --help`.
5
+
6
+ `configure` can be launched from a directory different from the FFmpeg
7
+ sources to build the objects out of tree. To do this, use an absolute
8
+ path when launching `configure`, e.g. `/ffmpegdir/ffmpeg/configure`.
9
+
10
+ 2. Then type `make` to build FFmpeg. GNU Make 3.81 or later is required.
11
+
12
+ 3. Type `make install` to install all binaries and libraries you built.
13
+
14
+ NOTICE
15
+ ------
16
+
17
+ - Non system dependencies (e.g. libx264, libvpx) are disabled by default.
bin/ffmpeg/LICENSE.md ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # License
2
+
3
+ Most files in FFmpeg are under the GNU Lesser General Public License version 2.1
4
+ or later (LGPL v2.1+). Read the file `COPYING.LGPLv2.1` for details. Some other
5
+ files have MIT/X11/BSD-style licenses. In combination the LGPL v2.1+ applies to
6
+ FFmpeg.
7
+
8
+ Some optional parts of FFmpeg are licensed under the GNU General Public License
9
+ version 2 or later (GPL v2+). See the file `COPYING.GPLv2` for details. None of
10
+ these parts are used by default, you have to explicitly pass `--enable-gpl` to
11
+ configure to activate them. In this case, FFmpeg's license changes to GPL v2+.
12
+
13
+ Specifically, the GPL parts of FFmpeg are:
14
+
15
+ - libpostproc
16
+ - optional x86 optimization in the files
17
+ - `libavcodec/x86/flac_dsp_gpl.asm`
18
+ - `libavcodec/x86/idct_mmx.c`
19
+ - `libavfilter/x86/vf_removegrain.asm`
20
+ - the following building and testing tools
21
+ - `compat/solaris/make_sunver.pl`
22
+ - `doc/t2h.pm`
23
+ - `doc/texi2pod.pl`
24
+ - `libswresample/tests/swresample.c`
25
+ - `tests/checkasm/*`
26
+ - `tests/tiny_ssim.c`
27
+ - the following filters in libavfilter:
28
+ - `signature_lookup.c`
29
+ - `vf_blackframe.c`
30
+ - `vf_boxblur.c`
31
+ - `vf_colormatrix.c`
32
+ - `vf_cover_rect.c`
33
+ - `vf_cropdetect.c`
34
+ - `vf_delogo.c`
35
+ - `vf_eq.c`
36
+ - `vf_find_rect.c`
37
+ - `vf_fspp.c`
38
+ - `vf_histeq.c`
39
+ - `vf_hqdn3d.c`
40
+ - `vf_kerndeint.c`
41
+ - `vf_lensfun.c` (GPL version 3 or later)
42
+ - `vf_mcdeint.c`
43
+ - `vf_mpdecimate.c`
44
+ - `vf_nnedi.c`
45
+ - `vf_owdenoise.c`
46
+ - `vf_perspective.c`
47
+ - `vf_phase.c`
48
+ - `vf_pp.c`
49
+ - `vf_pp7.c`
50
+ - `vf_pullup.c`
51
+ - `vf_repeatfields.c`
52
+ - `vf_sab.c`
53
+ - `vf_signature.c`
54
+ - `vf_smartblur.c`
55
+ - `vf_spp.c`
56
+ - `vf_stereo3d.c`
57
+ - `vf_super2xsai.c`
58
+ - `vf_tinterlace.c`
59
+ - `vf_uspp.c`
60
+ - `vf_vaguedenoiser.c`
61
+ - `vsrc_mptestsrc.c`
62
+
63
+ Should you, for whatever reason, prefer to use version 3 of the (L)GPL, then
64
+ the configure parameter `--enable-version3` will activate this licensing option
65
+ for you. Read the file `COPYING.LGPLv3` or, if you have enabled GPL parts,
66
+ `COPYING.GPLv3` to learn the exact legal terms that apply in this case.
67
+
68
+ There are a handful of files under other licensing terms, namely:
69
+
70
+ * The files `libavcodec/jfdctfst.c`, `libavcodec/jfdctint_template.c` and
71
+ `libavcodec/jrevdct.c` are taken from libjpeg, see the top of the files for
72
+ licensing details. Specifically note that you must credit the IJG in the
73
+ documentation accompanying your program if you only distribute executables.
74
+ You must also indicate any changes including additions and deletions to
75
+ those three files in the documentation.
76
+ * `tests/reference.pnm` is under the expat license.
77
+
78
+
79
+ ## External libraries
80
+
81
+ FFmpeg can be combined with a number of external libraries, which sometimes
82
+ affect the licensing of binaries resulting from the combination.
83
+
84
+ ### Compatible libraries
85
+
86
+ The following libraries are under GPL version 2:
87
+ - avisynth
88
+ - frei0r
89
+ - libcdio
90
+ - libdavs2
91
+ - librubberband
92
+ - libvidstab
93
+ - libx264
94
+ - libx265
95
+ - libxavs
96
+ - libxavs2
97
+ - libxvid
98
+
99
+ When combining them with FFmpeg, FFmpeg needs to be licensed as GPL as well by
100
+ passing `--enable-gpl` to configure.
101
+
102
+ The following libraries are under LGPL version 3:
103
+ - gmp
104
+ - libaribb24
105
+ - liblensfun
106
+
107
+ When combining them with FFmpeg, use the configure option `--enable-version3` to
108
+ upgrade FFmpeg to the LGPL v3.
109
+
110
+ The VMAF, mbedTLS, RK MPI, OpenCORE and VisualOn libraries are under the Apache License
111
+ 2.0. That license is incompatible with the LGPL v2.1 and the GPL v2, but not with
112
+ version 3 of those licenses. So to combine these libraries with FFmpeg, the
113
+ license version needs to be upgraded by passing `--enable-version3` to configure.
114
+
115
+ The smbclient library is under the GPL v3, to combine it with FFmpeg,
116
+ the options `--enable-gpl` and `--enable-version3` have to be passed to
117
+ configure to upgrade FFmpeg to the GPL v3.
118
+
119
+ ### Incompatible libraries
120
+
121
+ There are certain libraries you can combine with FFmpeg whose licenses are not
122
+ compatible with the GPL and/or the LGPL. If you wish to enable these
123
+ libraries, even in circumstances that their license may be incompatible, pass
124
+ `--enable-nonfree` to configure. This will cause the resulting binary to be
125
+ unredistributable.
126
+
127
+ The Fraunhofer FDK AAC and OpenSSL libraries are under licenses which are
128
+ incompatible with the GPLv2 and v3. To the best of our knowledge, they are
129
+ compatible with the LGPL.
bin/ffmpeg/MAINTAINERS ADDED
@@ -0,0 +1,643 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FFmpeg maintainers
2
+ ==================
3
+
4
+ Below is a list of the people maintaining different parts of the
5
+ FFmpeg code.
6
+
7
+ Please try to keep entries where you are the maintainer up to date!
8
+
9
+ Names in () mean that the maintainer currently has no time to maintain the code.
10
+ A (CC <address>) after the name means that the maintainer prefers to be CC-ed on
11
+ patches and related discussions.
12
+
13
+
14
+ Applications
15
+ ============
16
+
17
+ ffmpeg:
18
+ ffmpeg.c Michael Niedermayer, Anton Khirnov
19
+
20
+ ffplay:
21
+ ffplay.c Marton Balint
22
+
23
+ ffprobe:
24
+ ffprobe.c Stefano Sabatini
25
+
26
+ Commandline utility code:
27
+ cmdutils.c, cmdutils.h Michael Niedermayer
28
+
29
+ QuickTime faststart:
30
+ tools/qt-faststart.c Baptiste Coudurier
31
+
32
+
33
+ Miscellaneous Areas
34
+ ===================
35
+
36
+ documentation Stefano Sabatini, Mike Melanson, Timothy Gu, Gyan Doshi
37
+ project server day to day operations Árpád Gereöffy, Michael Niedermayer, Reimar Doeffinger, Alexander Strasser, Nikolay Aleksandrov
38
+ project server emergencies Árpád Gereöffy, Reimar Doeffinger, Alexander Strasser, Nikolay Aleksandrov
39
+ presets Robert Swain
40
+ metadata subsystem Aurelien Jacobs
41
+ release management Michael Niedermayer
42
+ API tests Ludmila Glinskih
43
+
44
+
45
+ Communication
46
+ =============
47
+
48
+ website Deby Barbara Lepage
49
+ fate.ffmpeg.org Timothy Gu
50
+ Trac bug tracker Alexander Strasser, Michael Niedermayer, Carl Eugen Hoyos
51
+ Patchwork Andriy Gelman
52
+ mailing lists Baptiste Coudurier
53
+ Twitter Reynaldo H. Verdejo Pinochet
54
+ Launchpad Timothy Gu
55
+ ffmpeg-security Andreas Cadhalpun, Carl Eugen Hoyos, Clément Bœsch, Michael Niedermayer, Reimar Doeffinger, rcombs, wm4
56
+
57
+
58
+ libavutil
59
+ =========
60
+
61
+ External Interfaces:
62
+ libavutil/avutil.h Michael Niedermayer
63
+ Internal Interfaces:
64
+ libavutil/common.h Michael Niedermayer
65
+
66
+ Other:
67
+ aes_ctr.c, aes_ctr.h Eran Kornblau
68
+ bprint Nicolas George
69
+ bswap.h
70
+ des Reimar Doeffinger
71
+ dynarray.h Nicolas George
72
+ eval.c, eval.h Michael Niedermayer
73
+ float_dsp Loren Merritt
74
+ hash Reimar Doeffinger
75
+ hwcontext_cuda* Timo Rothenpieler
76
+ hwcontext_vulkan* Lynne
77
+ intfloat* Michael Niedermayer
78
+ integer.c, integer.h Michael Niedermayer
79
+ lzo Reimar Doeffinger
80
+ mathematics.c, mathematics.h Michael Niedermayer
81
+ mem.c, mem.h Michael Niedermayer
82
+ opencl.c, opencl.h Wei Gao
83
+ opt.c, opt.h Michael Niedermayer
84
+ rational.c, rational.h Michael Niedermayer
85
+ rc4 Reimar Doeffinger
86
+ ripemd.c, ripemd.h James Almer
87
+ tx* Lynne
88
+
89
+
90
+ libavcodec
91
+ ==========
92
+
93
+ Generic Parts:
94
+ External Interfaces:
95
+ avcodec.h Michael Niedermayer
96
+ utility code:
97
+ utils.c Michael Niedermayer
98
+ audio and video frame extraction:
99
+ parser.c Michael Niedermayer
100
+ bitstream reading:
101
+ bitstream.c, bitstream.h Michael Niedermayer
102
+ CABAC:
103
+ cabac.h, cabac.c Michael Niedermayer
104
+ codec names:
105
+ codec_names.sh Nicolas George
106
+ DSP utilities:
107
+ dsputils.c, dsputils.h Michael Niedermayer
108
+ entropy coding:
109
+ rangecoder.c, rangecoder.h Michael Niedermayer
110
+ lzw.* Michael Niedermayer
111
+ floating point AAN DCT:
112
+ faandct.c, faandct.h Michael Niedermayer
113
+ Golomb coding:
114
+ golomb.c, golomb.h Michael Niedermayer
115
+ motion estimation:
116
+ motion* Michael Niedermayer
117
+ rate control:
118
+ ratecontrol.c Michael Niedermayer
119
+ simple IDCT:
120
+ simple_idct.c, simple_idct.h Michael Niedermayer
121
+ postprocessing:
122
+ libpostproc/* Michael Niedermayer
123
+ table generation:
124
+ tableprint.c, tableprint.h Reimar Doeffinger
125
+ fixed point FFT:
126
+ fft* Zeljko Lukac
127
+ Text Subtitles Clément Bœsch
128
+
129
+ Codecs:
130
+ 4xm.c Michael Niedermayer
131
+ 8bps.c Roberto Togni
132
+ 8svx.c Jaikrishnan Menon
133
+ aacenc*, aaccoder.c Rostislav Pehlivanov
134
+ adpcm.c Zane van Iperen
135
+ alacenc.c Jaikrishnan Menon
136
+ alsdec.c Thilo Borgmann, Umair Khan
137
+ amfenc* Dmitrii Ovchinnikov
138
+ aptx.c Aurelien Jacobs
139
+ ass* Aurelien Jacobs
140
+ asv* Michael Niedermayer
141
+ atrac3plus* Maxim Poliakovski
142
+ audiotoolbox* rcombs
143
+ avs2* Huiwen Ren
144
+ bgmc.c, bgmc.h Thilo Borgmann
145
+ binkaudio.c Peter Ross
146
+ cavs* Stefan Gehrer
147
+ cdxl.c Paul B Mahol
148
+ celp_filters.* Vitor Sessak
149
+ cinepak.c Roberto Togni
150
+ cinepakenc.c Rl / Aetey G.T. AB
151
+ ccaption_dec.c Anshul Maheshwari, Aman Gupta
152
+ cljr Alex Beregszaszi
153
+ cpia.c Stephan Hilb
154
+ cscd.c Reimar Doeffinger
155
+ cuviddec.c Timo Rothenpieler
156
+ dca* foo86
157
+ dfpwm* Jack Bruienne
158
+ dirac* Rostislav Pehlivanov
159
+ dnxhd* Baptiste Coudurier
160
+ dolby_e* foo86
161
+ dpcm.c Mike Melanson
162
+ dss_sp.c Oleksij Rempel
163
+ dv.c Roman Shaposhnik
164
+ dvbsubdec.c Anshul Maheshwari
165
+ eacmv*, eaidct*, eat* Peter Ross
166
+ evrc* Paul B Mahol
167
+ exif.c, exif.h Thilo Borgmann
168
+ ffv1* Michael Niedermayer
169
+ ffwavesynth.c Nicolas George
170
+ fifo.c Jan Sebechlebsky
171
+ flicvideo.c Mike Melanson
172
+ g722.c Martin Storsjo
173
+ g726.c Roman Shaposhnik
174
+ gifdec.c Baptiste Coudurier
175
+ h261* Michael Niedermayer
176
+ h263* Michael Niedermayer
177
+ h264* Loren Merritt, Michael Niedermayer
178
+ hap* Tom Butterworth
179
+ huffyuv* Michael Niedermayer
180
+ idcinvideo.c Mike Melanson
181
+ interplayvideo.c Mike Melanson
182
+ jni*, ffjni* Matthieu Bouron
183
+ jpeg2000* Nicolas Bertrand
184
+ jvdec.c Peter Ross
185
+ lcl*.c Roberto Togni, Reimar Doeffinger
186
+ libcelt_dec.c Nicolas George
187
+ libcodec2.c Tomas Härdin
188
+ libdirac* David Conrad
189
+ libdavs2.c Huiwen Ren
190
+ libjxl*.c, libjxl.h Leo Izen
191
+ libgsm.c Michel Bardiaux
192
+ libkvazaar.c Arttu Ylä-Outinen
193
+ libopenh264enc.c Martin Storsjo, Linjie Fu
194
+ libopenjpeg.c Jaikrishnan Menon
195
+ libopenjpegenc.c Michael Bradshaw
196
+ libtheoraenc.c David Conrad
197
+ libvorbis.c David Conrad
198
+ libvpx* James Zern
199
+ libxavs.c Stefan Gehrer
200
+ libxavs2.c Huiwen Ren
201
+ libzvbi-teletextdec.c Marton Balint
202
+ lzo.h, lzo.c Reimar Doeffinger
203
+ mdec.c Michael Niedermayer
204
+ mimic.c Ramiro Polla
205
+ mjpeg*.c Michael Niedermayer
206
+ mlp* Ramiro Polla, Jai Luthra
207
+ mmvideo.c Peter Ross
208
+ mpeg12.c, mpeg12data.h Michael Niedermayer
209
+ mpegvideo.c, mpegvideo.h Michael Niedermayer
210
+ mqc* Nicolas Bertrand
211
+ msmpeg4.c, msmpeg4data.h Michael Niedermayer
212
+ msrle.c Mike Melanson
213
+ msvideo1.c Mike Melanson
214
+ nuv.c Reimar Doeffinger
215
+ nvdec*, nvenc* Timo Rothenpieler
216
+ omx.c Martin Storsjo, Aman Gupta
217
+ opus* Rostislav Pehlivanov
218
+ paf.* Paul B Mahol
219
+ pcx.c Ivo van Poorten
220
+ pgssubdec.c Reimar Doeffinger
221
+ ptx.c Ivo van Poorten
222
+ qcelp* Reynaldo H. Verdejo Pinochet
223
+ qdm2.c, qdm2data.h Roberto Togni
224
+ qsv* Mark Thompson, Zhong Li, Haihao Xiang
225
+ qtrle.c Mike Melanson
226
+ ra144.c, ra144.h, ra288.c, ra288.h Roberto Togni
227
+ resample2.c Michael Niedermayer
228
+ rl2.c Sascha Sommer
229
+ rpza.c Roberto Togni
230
+ rtjpeg.c, rtjpeg.h Reimar Doeffinger
231
+ rv10.c Michael Niedermayer
232
+ s3tc* Ivo van Poorten
233
+ smc.c Mike Melanson
234
+ snow* Michael Niedermayer, Loren Merritt
235
+ sonic.c Alex Beregszaszi
236
+ speedhq.c Steinar H. Gunderson
237
+ srt* Aurelien Jacobs
238
+ sunrast.c Ivo van Poorten
239
+ svq3.c Michael Niedermayer
240
+ tak* Paul B Mahol
241
+ truemotion1* Mike Melanson
242
+ tta.c Alex Beregszaszi, Jaikrishnan Menon
243
+ ttaenc.c Paul B Mahol
244
+ txd.c Ivo van Poorten
245
+ v4l2_* Jorge Ramirez-Ortiz
246
+ vc2* Rostislav Pehlivanov
247
+ vcr1.c Michael Niedermayer
248
+ videotoolboxenc.c Rick Kern, Aman Gupta
249
+ vima.c Paul B Mahol
250
+ vorbisdec.c Denes Balatoni, David Conrad
251
+ vorbisenc.c Oded Shimon
252
+ vp3* Mike Melanson
253
+ vp5 Aurelien Jacobs
254
+ vp6 Aurelien Jacobs
255
+ vp8 David Conrad, Ronald Bultje
256
+ vp9 Ronald Bultje
257
+ vqavideo.c Mike Melanson
258
+ wmaprodec.c Sascha Sommer
259
+ wmavoice.c Ronald S. Bultje
260
+ wmv2.c Michael Niedermayer
261
+ xan.c Mike Melanson
262
+ xbm* Paul B Mahol
263
+ xface Stefano Sabatini
264
+ xwd* Paul B Mahol
265
+
266
+ Hardware acceleration:
267
+ dxva2* Hendrik Leppkes, Laurent Aimar, Steve Lhomme
268
+ d3d11va* Steve Lhomme
269
+ mediacodec* Matthieu Bouron, Aman Gupta
270
+ vaapi* Haihao Xiang
271
+ vaapi_encode* Mark Thompson, Haihao Xiang
272
+ vdpau* Philip Langdale, Carl Eugen Hoyos
273
+ videotoolbox* Rick Kern, Aman Gupta
274
+
275
+
276
+ libavdevice
277
+ ===========
278
+ External Interface:
279
+ libavdevice/avdevice.h
280
+
281
+
282
+ avfoundation.m Thilo Borgmann
283
+ android_camera.c Felix Matouschek
284
+ decklink* Marton Balint
285
+ dshow.c Roger Pack (CC [email protected])
286
+ fbdev_enc.c Lukasz Marek
287
+ gdigrab.c Roger Pack (CC [email protected])
288
+ iec61883.c Georg Lippitsch
289
+ lavfi Stefano Sabatini
290
+ libdc1394.c Roman Shaposhnik
291
+ opengl_enc.c Lukasz Marek
292
+ pulse_audio_enc.c Lukasz Marek
293
+ sdl Stefano Sabatini
294
+ sdl2.c Josh de Kock
295
+ v4l2.c Giorgio Vazzana
296
+ vfwcap.c Ramiro Polla
297
+ xv.c Lukasz Marek
298
+
299
+ libavfilter
300
+ ===========
301
+
302
+ Generic parts:
303
+ graphdump.c Nicolas George
304
+
305
+ motion_estimation.c Davinder Singh
306
+
307
+ Filters:
308
+ f_drawgraph.c Paul B Mahol
309
+ af_adelay.c Paul B Mahol
310
+ af_aecho.c Paul B Mahol
311
+ af_afade.c Paul B Mahol
312
+ af_amerge.c Nicolas George
313
+ af_aphaser.c Paul B Mahol
314
+ af_aresample.c Michael Niedermayer
315
+ af_astats.c Paul B Mahol
316
+ af_atempo.c Pavel Koshevoy
317
+ af_biquads.c Paul B Mahol
318
+ af_chorus.c Paul B Mahol
319
+ af_compand.c Paul B Mahol
320
+ af_firequalizer.c Muhammad Faiz
321
+ af_hdcd.c Burt P.
322
+ af_ladspa.c Paul B Mahol
323
+ af_loudnorm.c Kyle Swanson
324
+ af_pan.c Nicolas George
325
+ af_sidechaincompress.c Paul B Mahol
326
+ af_silenceremove.c Paul B Mahol
327
+ avf_aphasemeter.c Paul B Mahol
328
+ avf_avectorscope.c Paul B Mahol
329
+ avf_showcqt.c Muhammad Faiz
330
+ vf_blend.c Paul B Mahol
331
+ vf_bwdif Thomas Mundt (CC <[email protected]>)
332
+ vf_chromakey.c Timo Rothenpieler
333
+ vf_colorchannelmixer.c Paul B Mahol
334
+ vf_colorconstancy.c Mina Sami (CC <[email protected]>)
335
+ vf_colorbalance.c Paul B Mahol
336
+ vf_colorkey.c Timo Rothenpieler
337
+ vf_colorlevels.c Paul B Mahol
338
+ vf_coreimage.m Thilo Borgmann
339
+ vf_deband.c Paul B Mahol
340
+ vf_dejudder.c Nicholas Robbins
341
+ vf_delogo.c Jean Delvare (CC <[email protected]>)
342
+ vf_drawbox.c/drawgrid Andrey Utkin
343
+ vf_extractplanes.c Paul B Mahol
344
+ vf_histogram.c Paul B Mahol
345
+ vf_hqx.c Clément Bœsch
346
+ vf_idet.c Pascal Massimino
347
+ vf_il.c Paul B Mahol
348
+ vf_(t)interlace Thomas Mundt (CC <[email protected]>)
349
+ vf_lenscorrection.c Daniel Oberhoff
350
+ vf_libplacebo.c Niklas Haas
351
+ vf_mergeplanes.c Paul B Mahol
352
+ vf_mestimate.c Davinder Singh
353
+ vf_minterpolate.c Davinder Singh
354
+ vf_neighbor.c Paul B Mahol
355
+ vf_psnr.c Paul B Mahol
356
+ vf_random.c Paul B Mahol
357
+ vf_readvitc.c Tobias Rapp (CC t.rapp at noa-archive dot com)
358
+ vf_scale.c Michael Niedermayer
359
+ vf_separatefields.c Paul B Mahol
360
+ vf_ssim.c Paul B Mahol
361
+ vf_stereo3d.c Paul B Mahol
362
+ vf_telecine.c Paul B Mahol
363
+ vf_tonemap_opencl.c Ruiling Song
364
+ vf_yadif.c Michael Niedermayer
365
+ vf_zoompan.c Paul B Mahol
366
+
367
+ Sources:
368
+ vsrc_mandelbrot.c Michael Niedermayer
369
+
370
+ dnn Yejun Guo
371
+
372
+ libavformat
373
+ ===========
374
+
375
+ Generic parts:
376
+ External Interface:
377
+ libavformat/avformat.h Michael Niedermayer
378
+ Utility Code:
379
+ libavformat/utils.c Michael Niedermayer
380
+ Text Subtitles Clément Bœsch
381
+
382
+
383
+ Muxers/Demuxers:
384
+ 4xm.c Mike Melanson
385
+ aadec.c Vesselin Bontchev (vesselin.bontchev at yandex dot com)
386
+ adtsenc.c Robert Swain
387
+ afc.c Paul B Mahol
388
+ aiffdec.c Baptiste Coudurier, Matthieu Bouron
389
+ aiffenc.c Baptiste Coudurier, Matthieu Bouron
390
+ alp.c Zane van Iperen
391
+ amvenc.c Zane van Iperen
392
+ apm.c Zane van Iperen
393
+ apngdec.c Benoit Fouet
394
+ argo_asf.c Zane van Iperen
395
+ argo_brp.c Zane van Iperen
396
+ argo_cvg.c Zane van Iperen
397
+ ass* Aurelien Jacobs
398
+ astdec.c Paul B Mahol
399
+ astenc.c James Almer
400
+ avi* Michael Niedermayer
401
+ avisynth.c Stephen Hutchinson
402
+ avr.c Paul B Mahol
403
+ bink.c Peter Ross
404
+ boadec.c Michael Niedermayer
405
+ brstm.c Paul B Mahol
406
+ caf* Peter Ross
407
+ cdxl.c Paul B Mahol
408
+ codec2.c Tomas Härdin
409
+ crc.c Michael Niedermayer
410
+ dashdec.c Steven Liu
411
+ dashenc.c Karthick Jeyapal
412
+ daud.c Reimar Doeffinger
413
+ dfpwmdec.c Jack Bruienne
414
+ dss.c Oleksij Rempel
415
+ dtsdec.c foo86
416
+ dtshddec.c Paul B Mahol
417
+ dv.c Roman Shaposhnik
418
+ electronicarts.c Peter Ross
419
+ epafdec.c Paul B Mahol
420
+ ffm* Baptiste Coudurier
421
+ flic.c Mike Melanson
422
+ flvdec.c Michael Niedermayer
423
+ flvenc.c Michael Niedermayer, Steven Liu
424
+ gxf.c Reimar Doeffinger
425
+ gxfenc.c Baptiste Coudurier
426
+ hlsenc.c Christian Suloway, Steven Liu
427
+ idcin.c Mike Melanson
428
+ idroqdec.c Mike Melanson
429
+ iff.c Jaikrishnan Menon
430
+ imf* Pierre-Anthony Lemieux
431
+ img2*.c Michael Niedermayer
432
+ ipmovie.c Mike Melanson
433
+ ircam* Paul B Mahol
434
+ iss.c Stefan Gehrer
435
+ jpegxl_probe.* Leo Izen
436
+ jvdec.c Peter Ross
437
+ kvag.c Zane van Iperen
438
+ libmodplug.c Clément Bœsch
439
+ libopenmpt.c Josh de Kock
440
+ lmlm4.c Ivo van Poorten
441
+ lvfdec.c Paul B Mahol
442
+ lxfdec.c Tomas Härdin
443
+ matroska.c Aurelien Jacobs, Andreas Rheinhardt
444
+ matroskadec.c Aurelien Jacobs, Andreas Rheinhardt
445
+ matroskaenc.c David Conrad, Andreas Rheinhardt
446
+ matroska subtitles (matroskaenc.c) John Peebles
447
+ metadata* Aurelien Jacobs
448
+ mgsts.c Paul B Mahol
449
+ microdvd* Aurelien Jacobs
450
+ mm.c Peter Ross
451
+ mov.c Baptiste Coudurier
452
+ movenc.c Baptiste Coudurier, Matthieu Bouron
453
+ movenccenc.c Eran Kornblau
454
+ mpeg.c Michael Niedermayer
455
+ mpegenc.c Michael Niedermayer
456
+ mpegts.c Marton Balint
457
+ mpegtsenc.c Baptiste Coudurier
458
+ msnwc_tcp.c Ramiro Polla
459
+ mtv.c Reynaldo H. Verdejo Pinochet
460
+ mxf* Baptiste Coudurier, Tomas Härdin
461
+ nistspheredec.c Paul B Mahol
462
+ nsvdec.c Francois Revol
463
+ nut* Michael Niedermayer
464
+ nuv.c Reimar Doeffinger
465
+ oggdec.c, oggdec.h David Conrad
466
+ oggenc.c Baptiste Coudurier
467
+ oggparse*.c David Conrad
468
+ oma.c Maxim Poliakovski
469
+ paf.c Paul B Mahol
470
+ pp_bnk.c Zane van Iperen
471
+ psxstr.c Mike Melanson
472
+ pva.c Ivo van Poorten
473
+ pvfdec.c Paul B Mahol
474
+ r3d.c Baptiste Coudurier
475
+ raw.c Michael Niedermayer
476
+ rdt.c Ronald S. Bultje
477
+ rl2.c Sascha Sommer
478
+ rmdec.c, rmenc.c Ronald S. Bultje
479
+ rtp.c, rtpenc.c Martin Storsjo
480
+ rtpdec_ac3.* Gilles Chanteperdrix
481
+ rtpdec_dv.* Thomas Volkert
482
+ rtpdec_h261.*, rtpenc_h261.* Thomas Volkert
483
+ rtpdec_hevc.*, rtpenc_hevc.* Thomas Volkert
484
+ rtpdec_mpa_robust.* Gilles Chanteperdrix
485
+ rtpdec_asf.* Ronald S. Bultje
486
+ rtpdec_vc2hq.*, rtpenc_vc2hq.* Thomas Volkert
487
+ rtpdec_vp9.c Thomas Volkert
488
+ rtpenc_mpv.*, rtpenc_aac.* Martin Storsjo
489
+ s337m.c foo86
490
+ sbgdec.c Nicolas George
491
+ sdp.c Martin Storsjo
492
+ segafilm.c Mike Melanson
493
+ segment.c Stefano Sabatini
494
+ smjpeg* Paul B Mahol
495
+ spdif* Anssi Hannula
496
+ srtdec.c Aurelien Jacobs
497
+ swf.c Baptiste Coudurier
498
+ takdec.c Paul B Mahol
499
+ tta.c Alex Beregszaszi
500
+ txd.c Ivo van Poorten
501
+ voc.c Aurelien Jacobs
502
+ wav.c Michael Niedermayer
503
+ wc3movie.c Mike Melanson
504
+ webm dash (matroskaenc.c) Vignesh Venkatasubramanian
505
+ webvtt* Matthew J Heaney
506
+ westwood.c Mike Melanson
507
+ wtv.c Peter Ross
508
+ wvenc.c Paul B Mahol
509
+
510
+ Protocols:
511
+ async.c Zhang Rui
512
+ bluray.c Petri Hintukainen
513
+ ftp.c Lukasz Marek
514
+ http.c Ronald S. Bultje
515
+ libsrt.c Zhao Zhili
516
+ libssh.c Lukasz Marek
517
+ libzmq.c Andriy Gelman
518
+ mms*.c Ronald S. Bultje
519
+ udp.c Luca Abeni
520
+ icecast.c Marvin Scholz
521
+
522
+
523
+ libswresample
524
+ =============
525
+
526
+ Generic parts:
527
+ audioconvert.c Michael Niedermayer
528
+ dither.c Michael Niedermayer
529
+ rematrix*.c Michael Niedermayer
530
+ swresample*.c Michael Niedermayer
531
+
532
+ Resamplers:
533
+ resample*.c Michael Niedermayer
534
+ soxr_resample.c Rob Sykes
535
+
536
+
537
+ Operating systems / CPU architectures
538
+ =====================================
539
+
540
+ Alpha Falk Hueffner
541
+ MIPS Manojkumar Bhosale, Shiyou Yin
542
+ LoongArch Shiyou Yin
543
+ Mac OS X / PowerPC Romain Dolbeau, Guillaume Poirier
544
+ Amiga / PowerPC Colin Ward
545
+ Linux / PowerPC Lauri Kasanen
546
+ Windows MinGW Alex Beregszaszi, Ramiro Polla
547
+ Windows Cygwin Victor Paesa
548
+ Windows MSVC Matthew Oliver, Hendrik Leppkes
549
+ Windows ICL Matthew Oliver
550
+ ADI/Blackfin DSP Marc Hoffman
551
+ Sparc Roman Shaposhnik
552
+ OS/2 KO Myung-Hun
553
+
554
+
555
+ Developers with git write access who are currently not maintaining any specific part
556
+ ====================================================================================
557
+ Alex Converse
558
+ Andreas Cadhalpun
559
+ Anuradha Suraparaju
560
+ Ben Littler
561
+ Benjamin Larsson
562
+ Bobby Bingham
563
+ Daniel Verkamp
564
+ Derek Buitenhuis
565
+ Ganesh Ajjanagadde
566
+ Henrik Gramner
567
+ Ivan Uskov
568
+ James Darnley
569
+ Jan Ekström
570
+ Joakim Plate
571
+ Jun Zhao
572
+ Kieran Kunhya
573
+ Kirill Gavrilov
574
+ Limin Wang
575
+ Martin Storsjö
576
+ Panagiotis Issaris
577
+ Pedro Arthur
578
+ Sebastien Zwickert
579
+ Vittorio Giovara
580
+ wm4
581
+ (this list is incomplete)
582
+
583
+
584
+ Releases
585
+ ========
586
+
587
+ 2.8 Michael Niedermayer
588
+ 2.7 Michael Niedermayer
589
+ 2.6 Michael Niedermayer
590
+ 2.5 Michael Niedermayer
591
+
592
+ If you want to maintain an older release, please contact us
593
+
594
+
595
+ GnuPG Fingerprints and IRC nicknames of maintainers and contributors
596
+ ====================================================================
597
+
598
+ IRC nicknames are in parentheses. These apply
599
+ to the IRC channels listed on the website.
600
+
601
+ Alexander Strasser 1C96 78B7 83CB 8AA7 9AF5 D1EB A7D8 A57B A876 E58F
602
+ Anssi Hannula 1A92 FF42 2DD9 8D2E 8AF7 65A9 4278 C520 513D F3CB
603
+ Ash Hughes 694D 43D2 D180 C7C7 6421 ABD3 A641 D0B7 623D 6029
604
+ Attila Kinali 11F0 F9A6 A1D2 11F6 C745 D10C 6520 BCDD F2DF E765
605
+ Baptiste Coudurier 8D77 134D 20CC 9220 201F C5DB 0AC9 325C 5C1A BAAA
606
+ Ben Littler 3EE3 3723 E560 3214 A8CD 4DEB 2CDB FCE7 768C 8D2C
607
+ Benoit Fouet B22A 4F4F 43EF 636B BB66 FCDC 0023 AE1E 2985 49C8
608
+ Clément Bœsch 52D0 3A82 D445 F194 DB8B 2B16 87EE 2CB8 F4B8 FCF9
609
+ Daniel Verkamp 78A6 07ED 782C 653E C628 B8B9 F0EB 8DD8 2F0E 21C7
610
+ FFmpeg release signing key FCF9 86EA 15E6 E293 A564 4F10 B432 2F04 D676 58D8
611
+ Ganesh Ajjanagadde C96A 848E 97C3 CEA2 AB72 5CE4 45F9 6A2D 3C36 FB1B
612
+ Gwenole Beauchesne 2E63 B3A6 3E44 37E2 017D 2704 53C7 6266 B153 99C4
613
+ Haihao Xiang (haihao) 1F0C 31E8 B4FE F7A4 4DC1 DC99 E0F5 76D4 76FC 437F
614
+ Jaikrishnan Menon 61A1 F09F 01C9 2D45 78E1 C862 25DC 8831 AF70 D368
615
+ James Almer 7751 2E8C FD94 A169 57E6 9A7A 1463 01AD 7376 59E0
616
+ Jean Delvare 7CA6 9F44 60F1 BDC4 1FD2 C858 A552 6B9B B3CD 4E6A
617
+ Leo Izen (thebombzen) B6FD 3CFC 7ACF 83FC 9137 6945 5A71 C331 FD2F A19A
618
+ Loren Merritt ABD9 08F4 C920 3F65 D8BE 35D7 1540 DAA7 060F 56DE
619
+ Lynne FE50 139C 6805 72CA FD52 1F8D A2FE A5F0 3F03 4464
620
+ Michael Niedermayer 9FF2 128B 147E F673 0BAD F133 611E C787 040B 0FAB
621
+ DD1E C9E8 DE08 5C62 9B3E 1846 B18E 8928 B394 8D64
622
+ Nicolas George 24CE 01CE 9ACC 5CEB 74D8 8D9D B063 D997 36E5 4C93
623
+ Niklas Haas (haasn) 1DDB 8076 B14D 5B48 32FC 99D9 EB52 DA9C 02BA 6FB4
624
+ Nikolay Aleksandrov 8978 1D8C FB71 588E 4B27 EAA8 C4F0 B5FC E011 13B1
625
+ Panagiotis Issaris 6571 13A3 33D9 3726 F728 AA98 F643 B12E ECF3 E029
626
+ Peter Ross A907 E02F A6E5 0CD2 34CD 20D2 6760 79C5 AC40 DD6B
627
+ Philip Langdale 5DC5 8D66 5FBA 3A43 18EC 045E F8D6 B194 6A75 682E
628
+ Pierre-Anthony Lemieux (pal) F4B3 9492 E6F2 E4AF AEC8 46CB 698F A1F0 F8D4 EED4
629
+ Ramiro Polla 7859 C65B 751B 1179 792E DAE8 8E95 8B2F 9B6C 5700
630
+ Reimar Doeffinger C61D 16E5 9E2C D10C 8958 38A4 0899 A2B9 06D4 D9C7
631
+ Reinhard Tartler 9300 5DC2 7E87 6C37 ED7B CA9A 9808 3544 9453 48A4
632
+ Reynaldo H. Verdejo Pinochet 6E27 CD34 170C C78E 4D4F 5F40 C18E 077F 3114 452A
633
+ Robert Swain EE7A 56EA 4A81 A7B5 2001 A521 67FA 362D A2FC 3E71
634
+ Sascha Sommer 38A0 F88B 868E 9D3A 97D4 D6A0 E823 706F 1E07 0D3C
635
+ Stefano Sabatini 0D0B AD6B 5330 BBAD D3D6 6A0C 719C 2839 FC43 2D5F
636
+ Steinar H. Gunderson C2E9 004F F028 C18E 4EAD DB83 7F61 7561 7797 8F76
637
+ Stephan Hilb 4F38 0B3A 5F39 B99B F505 E562 8D5C 5554 4E17 8863
638
+ Thilo Borgmann (thilo) CE1D B7F4 4D20 FC3A DD9F FE5A 257C 5B8F 1D20 B92F
639
+ Tiancheng "Timothy" Gu 9456 AFC0 814A 8139 E994 8351 7FE6 B095 B582 B0D4
640
+ Tim Nicholson 38CF DB09 3ED0 F607 8B67 6CED 0C0B FC44 8B0B FC83
641
+ Tomas Härdin (thardin) A79D 4E3D F38F 763F 91F5 8B33 A01E 8AE0 41BB 2551
642
+ Wei Gao 4269 7741 857A 0E60 9EC5 08D2 4744 4EFA 62C1 87B9
643
+ Zane van Iperen (zane) 61AE D40F 368B 6F26 9DAE 3892 6861 6B2D 8AC4 DCC5
bin/ffmpeg/Makefile ADDED
@@ -0,0 +1,198 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MAIN_MAKEFILE=1
2
+ include ffbuild/config.mak
3
+
4
+ vpath %.c $(SRC_PATH)
5
+ vpath %.cpp $(SRC_PATH)
6
+ vpath %.h $(SRC_PATH)
7
+ vpath %.inc $(SRC_PATH)
8
+ vpath %.m $(SRC_PATH)
9
+ vpath %.S $(SRC_PATH)
10
+ vpath %.asm $(SRC_PATH)
11
+ vpath %.rc $(SRC_PATH)
12
+ vpath %.v $(SRC_PATH)
13
+ vpath %.texi $(SRC_PATH)
14
+ vpath %.cu $(SRC_PATH)
15
+ vpath %.ptx $(SRC_PATH)
16
+ vpath %.metal $(SRC_PATH)
17
+ vpath %/fate_config.sh.template $(SRC_PATH)
18
+
19
+ TESTTOOLS = audiogen videogen rotozoom tiny_psnr tiny_ssim base64 audiomatch
20
+ HOSTPROGS := $(TESTTOOLS:%=tests/%) doc/print_options
21
+
22
+ ALLFFLIBS = avcodec avdevice avfilter avformat avutil postproc swscale swresample
23
+
24
+ # $(FFLIBS-yes) needs to be in linking order
25
+ FFLIBS-$(CONFIG_AVDEVICE) += avdevice
26
+ FFLIBS-$(CONFIG_AVFILTER) += avfilter
27
+ FFLIBS-$(CONFIG_AVFORMAT) += avformat
28
+ FFLIBS-$(CONFIG_AVCODEC) += avcodec
29
+ FFLIBS-$(CONFIG_POSTPROC) += postproc
30
+ FFLIBS-$(CONFIG_SWRESAMPLE) += swresample
31
+ FFLIBS-$(CONFIG_SWSCALE) += swscale
32
+
33
+ FFLIBS := avutil
34
+
35
+ DATA_FILES := $(wildcard $(SRC_PATH)/presets/*.ffpreset) $(SRC_PATH)/doc/ffprobe.xsd
36
+
37
+ SKIPHEADERS = compat/w32pthreads.h
38
+
39
+ # first so "all" becomes default target
40
+ all: all-yes
41
+
42
+ include $(SRC_PATH)/tools/Makefile
43
+ include $(SRC_PATH)/ffbuild/common.mak
44
+
45
+ FF_EXTRALIBS := $(FFEXTRALIBS)
46
+ FF_DEP_LIBS := $(DEP_LIBS)
47
+ FF_STATIC_DEP_LIBS := $(STATIC_DEP_LIBS)
48
+
49
+ $(TOOLS): %$(EXESUF): %.o
50
+ $(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(EXTRALIBS-$(*F)) $(EXTRALIBS) $(ELIBS)
51
+
52
+ target_dec_%_fuzzer$(EXESUF): target_dec_%_fuzzer.o $(FF_DEP_LIBS)
53
+ $(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) $(FF_EXTRALIBS) $(LIBFUZZER_PATH)
54
+
55
+ tools/target_bsf_%_fuzzer$(EXESUF): tools/target_bsf_%_fuzzer.o $(FF_DEP_LIBS)
56
+ $(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) $(FF_EXTRALIBS) $(LIBFUZZER_PATH)
57
+
58
+ target_dem_%_fuzzer$(EXESUF): target_dem_%_fuzzer.o $(FF_DEP_LIBS)
59
+ $(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) $(FF_EXTRALIBS) $(LIBFUZZER_PATH)
60
+
61
+ tools/target_dem_fuzzer$(EXESUF): tools/target_dem_fuzzer.o $(FF_DEP_LIBS)
62
+ $(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) $(FF_EXTRALIBS) $(LIBFUZZER_PATH)
63
+
64
+ tools/target_io_dem_fuzzer$(EXESUF): tools/target_io_dem_fuzzer.o $(FF_DEP_LIBS)
65
+ $(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) $(FF_EXTRALIBS) $(LIBFUZZER_PATH)
66
+
67
+
68
+ tools/enum_options$(EXESUF): ELIBS = $(FF_EXTRALIBS)
69
+ tools/enum_options$(EXESUF): $(FF_DEP_LIBS)
70
+ tools/scale_slice_test$(EXESUF): $(FF_DEP_LIBS)
71
+ tools/scale_slice_test$(EXESUF): ELIBS = $(FF_EXTRALIBS)
72
+ tools/sofa2wavs$(EXESUF): ELIBS = $(FF_EXTRALIBS)
73
+ tools/uncoded_frame$(EXESUF): $(FF_DEP_LIBS)
74
+ tools/uncoded_frame$(EXESUF): ELIBS = $(FF_EXTRALIBS)
75
+ tools/target_dec_%_fuzzer$(EXESUF): $(FF_DEP_LIBS)
76
+ tools/target_dem_%_fuzzer$(EXESUF): $(FF_DEP_LIBS)
77
+
78
+ CONFIGURABLE_COMPONENTS = \
79
+ $(wildcard $(FFLIBS:%=$(SRC_PATH)/lib%/all*.c)) \
80
+ $(SRC_PATH)/libavcodec/bitstream_filters.c \
81
+ $(SRC_PATH)/libavcodec/hwaccels.h \
82
+ $(SRC_PATH)/libavcodec/parsers.c \
83
+ $(SRC_PATH)/libavformat/protocols.c \
84
+
85
+ config_components.h: ffbuild/.config
86
+ ffbuild/.config: $(CONFIGURABLE_COMPONENTS)
87
+ @-tput bold 2>/dev/null
88
+ @-printf '\nWARNING: $(?) newer than config_components.h, rerun configure\n\n'
89
+ @-tput sgr0 2>/dev/null
90
+
91
+ SUBDIR_VARS := CLEANFILES FFLIBS HOSTPROGS TESTPROGS TOOLS \
92
+ HEADERS ARCH_HEADERS BUILT_HEADERS SKIPHEADERS \
93
+ ARMV5TE-OBJS ARMV6-OBJS ARMV8-OBJS VFP-OBJS NEON-OBJS \
94
+ ALTIVEC-OBJS VSX-OBJS RVV-OBJS MMX-OBJS X86ASM-OBJS \
95
+ MIPSFPU-OBJS MIPSDSPR2-OBJS MIPSDSP-OBJS MSA-OBJS \
96
+ MMI-OBJS LSX-OBJS LASX-OBJS OBJS SLIBOBJS SHLIBOBJS \
97
+ STLIBOBJS HOSTOBJS TESTOBJS
98
+
99
+ define RESET
100
+ $(1) :=
101
+ $(1)-yes :=
102
+ endef
103
+
104
+ define DOSUBDIR
105
+ $(foreach V,$(SUBDIR_VARS),$(eval $(call RESET,$(V))))
106
+ SUBDIR := $(1)/
107
+ include $(SRC_PATH)/$(1)/Makefile
108
+ -include $(SRC_PATH)/$(1)/$(ARCH)/Makefile
109
+ -include $(SRC_PATH)/$(1)/$(INTRINSICS)/Makefile
110
+ include $(SRC_PATH)/ffbuild/library.mak
111
+ endef
112
+
113
+ $(foreach D,$(FFLIBS),$(eval $(call DOSUBDIR,lib$(D))))
114
+
115
+ include $(SRC_PATH)/fftools/Makefile
116
+ include $(SRC_PATH)/doc/Makefile
117
+ include $(SRC_PATH)/doc/examples/Makefile
118
+
119
+ $(ALLFFLIBS:%=lib%/version.o): libavutil/ffversion.h
120
+
121
+ $(PROGS): %$(PROGSSUF)$(EXESUF): %$(PROGSSUF)_g$(EXESUF)
122
+ ifeq ($(STRIPTYPE),direct)
123
+ $(STRIP) -o $@ $<
124
+ else
125
+ $(RM) $@
126
+ $(CP) $< $@
127
+ $(STRIP) $@
128
+ endif
129
+
130
+ %$(PROGSSUF)_g$(EXESUF): $(FF_DEP_LIBS)
131
+ $(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $(OBJS-$*) $(FF_EXTRALIBS)
132
+
133
+ VERSION_SH = $(SRC_PATH)/ffbuild/version.sh
134
+ GIT_LOG = $(SRC_PATH)/.git/logs/HEAD
135
+
136
+ .version: $(wildcard $(GIT_LOG)) $(VERSION_SH) ffbuild/config.mak
137
+ .version: M=@
138
+
139
+ libavutil/ffversion.h .version:
140
+ $(M)$(VERSION_SH) $(SRC_PATH) libavutil/ffversion.h $(EXTRA_VERSION)
141
+ $(Q)touch .version
142
+
143
+ # force version.sh to run whenever version might have changed
144
+ -include .version
145
+
146
+ install: install-libs install-headers
147
+
148
+ install-libs: install-libs-yes
149
+
150
+ install-data: $(DATA_FILES)
151
+ $(Q)mkdir -p "$(DATADIR)"
152
+ $(INSTALL) -m 644 $(DATA_FILES) "$(DATADIR)"
153
+
154
+ uninstall: uninstall-data uninstall-headers uninstall-libs uninstall-pkgconfig
155
+
156
+ uninstall-data:
157
+ $(RM) -r "$(DATADIR)"
158
+
159
+ clean::
160
+ $(RM) $(CLEANSUFFIXES)
161
+ $(RM) $(addprefix compat/,$(CLEANSUFFIXES)) $(addprefix compat/*/,$(CLEANSUFFIXES)) $(addprefix compat/*/*/,$(CLEANSUFFIXES))
162
+ $(RM) -r coverage-html
163
+ $(RM) -rf coverage.info coverage.info.in lcov
164
+
165
+ distclean:: clean
166
+ $(RM) .version config.asm config.h config_components.h mapfile \
167
+ ffbuild/.config ffbuild/config.* libavutil/avconfig.h \
168
+ version.h libavutil/ffversion.h libavcodec/codec_names.h \
169
+ libavcodec/bsf_list.c libavformat/protocol_list.c \
170
+ libavcodec/codec_list.c libavcodec/parser_list.c \
171
+ libavfilter/filter_list.c libavdevice/indev_list.c libavdevice/outdev_list.c \
172
+ libavformat/muxer_list.c libavformat/demuxer_list.c
173
+ ifeq ($(SRC_LINK),src)
174
+ $(RM) src
175
+ endif
176
+ $(RM) -rf doc/examples/pc-uninstalled
177
+
178
+ config:
179
+ $(SRC_PATH)/configure $(value FFMPEG_CONFIGURATION)
180
+
181
+ build: all alltools examples testprogs
182
+ check: all alltools examples testprogs fate
183
+
184
+ include $(SRC_PATH)/tests/Makefile
185
+
186
+ $(sort $(OUTDIRS)):
187
+ $(Q)mkdir -p $@
188
+
189
+ # Dummy rule to stop make trying to rebuild removed or renamed headers
190
+ %.h:
191
+ @:
192
+
193
+ # Disable suffix rules. Most of the builtin rules are suffix rules,
194
+ # so this saves some time on slow systems.
195
+ .SUFFIXES:
196
+
197
+ .PHONY: all all-yes alltools build check config testprogs
198
+ .PHONY: *clean install* uninstall*
bin/ffmpeg/README.md ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FFmpeg README
2
+ =============
3
+
4
+ FFmpeg is a collection of libraries and tools to process multimedia content
5
+ such as audio, video, subtitles and related metadata.
6
+
7
+ ## Libraries
8
+
9
+ * `libavcodec` provides implementation of a wider range of codecs.
10
+ * `libavformat` implements streaming protocols, container formats and basic I/O access.
11
+ * `libavutil` includes hashers, decompressors and miscellaneous utility functions.
12
+ * `libavfilter` provides means to alter decoded audio and video through a directed graph of connected filters.
13
+ * `libavdevice` provides an abstraction to access capture and playback devices.
14
+ * `libswresample` implements audio mixing and resampling routines.
15
+ * `libswscale` implements color conversion and scaling routines.
16
+
17
+ ## Tools
18
+
19
+ * [ffmpeg](https://ffmpeg.org/ffmpeg.html) is a command line toolbox to
20
+ manipulate, convert and stream multimedia content.
21
+ * [ffplay](https://ffmpeg.org/ffplay.html) is a minimalistic multimedia player.
22
+ * [ffprobe](https://ffmpeg.org/ffprobe.html) is a simple analysis tool to inspect
23
+ multimedia content.
24
+ * Additional small tools such as `aviocat`, `ismindex` and `qt-faststart`.
25
+
26
+ ## Documentation
27
+
28
+ The offline documentation is available in the **doc/** directory.
29
+
30
+ The online documentation is available in the main [website](https://ffmpeg.org)
31
+ and in the [wiki](https://trac.ffmpeg.org).
32
+
33
+ ### Examples
34
+
35
+ Coding examples are available in the **doc/examples** directory.
36
+
37
+ ## License
38
+
39
+ FFmpeg codebase is mainly LGPL-licensed with optional components licensed under
40
+ GPL. Please refer to the LICENSE file for detailed information.
41
+
42
+ ## Contributing
43
+
44
+ Patches should be submitted to the ffmpeg-devel mailing list using
45
+ `git format-patch` or `git send-email`. Github pull requests should be
46
+ avoided because they are not part of our review process and will be ignored.
bin/ffmpeg/RELEASE ADDED
@@ -0,0 +1 @@
 
 
1
+ 6.0
bin/ffmpeg/RELEASE_NOTES ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ ┌────────────────────────────────────────────┐
3
+ │ RELEASE NOTES for FFmpeg 6.0 "Von Neumann" │
4
+ └────────────────────────────────────────────┘
5
+
6
+ The FFmpeg Project proudly presents FFmpeg 6.0 "Von Neumann", about 6
7
+ months after the release of FFmpeg 5.1.
8
+
9
+ A complete Changelog is available at the root of the project, and the
10
+ complete Git history on https://git.ffmpeg.org/gitweb/ffmpeg.git
11
+
12
+ We hope you will like this release as much as we enjoyed working on it, and
13
+ as usual, if you have any questions about it, or any FFmpeg related topic,
14
+ feel free to join us on the #ffmpeg IRC channel (on irc.libera.chat) or ask
15
+ on the mailing-lists.
bin/ffmpeg/VERSION ADDED
@@ -0,0 +1 @@
 
 
1
+ 6.0
bin/ffmpeg/compat/aix/math.h ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Work around the class() function in AIX math.h clashing with
3
+ * identifiers named "class".
4
+ *
5
+ * This file is part of FFmpeg.
6
+ *
7
+ * FFmpeg is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU Lesser General Public
9
+ * License as published by the Free Software Foundation; either
10
+ * version 2.1 of the License, or (at your option) any later version.
11
+ *
12
+ * FFmpeg is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ * Lesser General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public
18
+ * License along with FFmpeg; if not, write to the Free Software
19
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
+ */
21
+
22
+ #ifndef COMPAT_AIX_MATH_H
23
+ #define COMPAT_AIX_MATH_H
24
+
25
+ #define class class_in_math_h_causes_problems
26
+
27
+ #include_next <math.h>
28
+
29
+ #undef class
30
+
31
+ #endif /* COMPAT_AIX_MATH_H */
bin/ffmpeg/compat/atomics/dummy/stdatomic.h ADDED
@@ -0,0 +1,176 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * This file is part of FFmpeg.
3
+ *
4
+ * FFmpeg is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * FFmpeg is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public
15
+ * License along with FFmpeg; if not, write to the Free Software
16
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
19
+ /*
20
+ * based on vlc_atomic.h from VLC
21
+ * Copyright (C) 2010 Rémi Denis-Courmont
22
+ */
23
+
24
+ #ifndef COMPAT_ATOMICS_DUMMY_STDATOMIC_H
25
+ #define COMPAT_ATOMICS_DUMMY_STDATOMIC_H
26
+
27
+ #include <stdint.h>
28
+
29
+ #define ATOMIC_FLAG_INIT 0
30
+
31
+ #define ATOMIC_VAR_INIT(value) (value)
32
+
33
+ #define atomic_init(obj, value) \
34
+ do { \
35
+ *(obj) = (value); \
36
+ } while(0)
37
+
38
+ #define kill_dependency(y) ((void)0)
39
+
40
+ #define atomic_thread_fence(order) \
41
+ ((void)0)
42
+
43
+ #define atomic_signal_fence(order) \
44
+ ((void)0)
45
+
46
+ #define atomic_is_lock_free(obj) 0
47
+
48
+ typedef intptr_t atomic_flag;
49
+ typedef intptr_t atomic_bool;
50
+ typedef intptr_t atomic_char;
51
+ typedef intptr_t atomic_schar;
52
+ typedef intptr_t atomic_uchar;
53
+ typedef intptr_t atomic_short;
54
+ typedef intptr_t atomic_ushort;
55
+ typedef intptr_t atomic_int;
56
+ typedef intptr_t atomic_uint;
57
+ typedef intptr_t atomic_long;
58
+ typedef intptr_t atomic_ulong;
59
+ typedef intptr_t atomic_llong;
60
+ typedef intptr_t atomic_ullong;
61
+ typedef intptr_t atomic_wchar_t;
62
+ typedef intptr_t atomic_int_least8_t;
63
+ typedef intptr_t atomic_uint_least8_t;
64
+ typedef intptr_t atomic_int_least16_t;
65
+ typedef intptr_t atomic_uint_least16_t;
66
+ typedef intptr_t atomic_int_least32_t;
67
+ typedef intptr_t atomic_uint_least32_t;
68
+ typedef intptr_t atomic_int_least64_t;
69
+ typedef intptr_t atomic_uint_least64_t;
70
+ typedef intptr_t atomic_int_fast8_t;
71
+ typedef intptr_t atomic_uint_fast8_t;
72
+ typedef intptr_t atomic_int_fast16_t;
73
+ typedef intptr_t atomic_uint_fast16_t;
74
+ typedef intptr_t atomic_int_fast32_t;
75
+ typedef intptr_t atomic_uint_fast32_t;
76
+ typedef intptr_t atomic_int_fast64_t;
77
+ typedef intptr_t atomic_uint_fast64_t;
78
+ typedef intptr_t atomic_intptr_t;
79
+ typedef intptr_t atomic_uintptr_t;
80
+ typedef intptr_t atomic_size_t;
81
+ typedef intptr_t atomic_ptrdiff_t;
82
+ typedef intptr_t atomic_intmax_t;
83
+ typedef intptr_t atomic_uintmax_t;
84
+
85
+ #define atomic_store(object, desired) \
86
+ do { \
87
+ *(object) = (desired); \
88
+ } while (0)
89
+
90
+ #define atomic_store_explicit(object, desired, order) \
91
+ atomic_store(object, desired)
92
+
93
+ #define atomic_load(object) \
94
+ (*(object))
95
+
96
+ #define atomic_load_explicit(object, order) \
97
+ atomic_load(object)
98
+
99
+ static inline intptr_t atomic_exchange(intptr_t *object, intptr_t desired)
100
+ {
101
+ intptr_t ret = *object;
102
+ *object = desired;
103
+ return ret;
104
+ }
105
+
106
+ #define atomic_exchange_explicit(object, desired, order) \
107
+ atomic_exchange(object, desired)
108
+
109
+ static inline int atomic_compare_exchange_strong(intptr_t *object, intptr_t *expected,
110
+ intptr_t desired)
111
+ {
112
+ int ret;
113
+ if (*object == *expected) {
114
+ *object = desired;
115
+ ret = 1;
116
+ } else {
117
+ *expected = *object;
118
+ ret = 0;
119
+ }
120
+ return ret;
121
+ }
122
+
123
+ #define atomic_compare_exchange_strong_explicit(object, expected, desired, success, failure) \
124
+ atomic_compare_exchange_strong(object, expected, desired)
125
+
126
+ #define atomic_compare_exchange_weak(object, expected, desired) \
127
+ atomic_compare_exchange_strong(object, expected, desired)
128
+
129
+ #define atomic_compare_exchange_weak_explicit(object, expected, desired, success, failure) \
130
+ atomic_compare_exchange_weak(object, expected, desired)
131
+
132
+ #define FETCH_MODIFY(opname, op) \
133
+ static inline intptr_t atomic_fetch_ ## opname(intptr_t *object, intptr_t operand) \
134
+ { \
135
+ intptr_t ret; \
136
+ ret = *object; \
137
+ *object = *object op operand; \
138
+ return ret; \
139
+ }
140
+
141
+ FETCH_MODIFY(add, +)
142
+ FETCH_MODIFY(sub, -)
143
+ FETCH_MODIFY(or, |)
144
+ FETCH_MODIFY(xor, ^)
145
+ FETCH_MODIFY(and, &)
146
+
147
+ #undef FETCH_MODIFY
148
+
149
+ #define atomic_fetch_add_explicit(object, operand, order) \
150
+ atomic_fetch_add(object, operand)
151
+
152
+ #define atomic_fetch_sub_explicit(object, operand, order) \
153
+ atomic_fetch_sub(object, operand)
154
+
155
+ #define atomic_fetch_or_explicit(object, operand, order) \
156
+ atomic_fetch_or(object, operand)
157
+
158
+ #define atomic_fetch_xor_explicit(object, operand, order) \
159
+ atomic_fetch_xor(object, operand)
160
+
161
+ #define atomic_fetch_and_explicit(object, operand, order) \
162
+ atomic_fetch_and(object, operand)
163
+
164
+ #define atomic_flag_test_and_set(object) \
165
+ atomic_exchange(object, 1)
166
+
167
+ #define atomic_flag_test_and_set_explicit(object, order) \
168
+ atomic_flag_test_and_set(object)
169
+
170
+ #define atomic_flag_clear(object) \
171
+ atomic_store(object, 0)
172
+
173
+ #define atomic_flag_clear_explicit(object, order) \
174
+ atomic_flag_clear(object)
175
+
176
+ #endif /* COMPAT_ATOMICS_DUMMY_STDATOMIC_H */
bin/ffmpeg/compat/atomics/gcc/stdatomic.h ADDED
@@ -0,0 +1,173 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * This file is part of FFmpeg.
3
+ *
4
+ * FFmpeg is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * FFmpeg is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public
15
+ * License along with FFmpeg; if not, write to the Free Software
16
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
19
+ /*
20
+ * based on vlc_atomic.h from VLC
21
+ * Copyright (C) 2010 Rémi Denis-Courmont
22
+ */
23
+
24
+ #ifndef COMPAT_ATOMICS_GCC_STDATOMIC_H
25
+ #define COMPAT_ATOMICS_GCC_STDATOMIC_H
26
+
27
+ #include <stddef.h>
28
+ #include <stdint.h>
29
+
30
+ #define ATOMIC_FLAG_INIT 0
31
+
32
+ #define ATOMIC_VAR_INIT(value) (value)
33
+
34
+ #define atomic_init(obj, value) \
35
+ do { \
36
+ *(obj) = (value); \
37
+ } while(0)
38
+
39
+ #define kill_dependency(y) ((void)0)
40
+
41
+ #define atomic_thread_fence(order) \
42
+ __sync_synchronize()
43
+
44
+ #define atomic_signal_fence(order) \
45
+ ((void)0)
46
+
47
+ #define atomic_is_lock_free(obj) 0
48
+
49
+ typedef _Bool atomic_flag;
50
+ typedef _Bool atomic_bool;
51
+ typedef char atomic_char;
52
+ typedef signed char atomic_schar;
53
+ typedef unsigned char atomic_uchar;
54
+ typedef short atomic_short;
55
+ typedef unsigned short atomic_ushort;
56
+ typedef int atomic_int;
57
+ typedef unsigned int atomic_uint;
58
+ typedef long atomic_long;
59
+ typedef unsigned long atomic_ulong;
60
+ typedef long long atomic_llong;
61
+ typedef unsigned long long atomic_ullong;
62
+ typedef wchar_t atomic_wchar_t;
63
+ typedef int_least8_t atomic_int_least8_t;
64
+ typedef uint_least8_t atomic_uint_least8_t;
65
+ typedef int_least16_t atomic_int_least16_t;
66
+ typedef uint_least16_t atomic_uint_least16_t;
67
+ typedef int_least32_t atomic_int_least32_t;
68
+ typedef uint_least32_t atomic_uint_least32_t;
69
+ typedef int_least64_t atomic_int_least64_t;
70
+ typedef uint_least64_t atomic_uint_least64_t;
71
+ typedef int_fast8_t atomic_int_fast8_t;
72
+ typedef uint_fast8_t atomic_uint_fast8_t;
73
+ typedef int_fast16_t atomic_int_fast16_t;
74
+ typedef uint_fast16_t atomic_uint_fast16_t;
75
+ typedef int_fast32_t atomic_int_fast32_t;
76
+ typedef uint_fast32_t atomic_uint_fast32_t;
77
+ typedef int_fast64_t atomic_int_fast64_t;
78
+ typedef uint_fast64_t atomic_uint_fast64_t;
79
+ typedef intptr_t atomic_intptr_t;
80
+ typedef uintptr_t atomic_uintptr_t;
81
+ typedef size_t atomic_size_t;
82
+ typedef ptrdiff_t atomic_ptrdiff_t;
83
+ typedef intmax_t atomic_intmax_t;
84
+ typedef uintmax_t atomic_uintmax_t;
85
+
86
+ #define atomic_store(object, desired) \
87
+ do { \
88
+ *(object) = (desired); \
89
+ __sync_synchronize(); \
90
+ } while (0)
91
+
92
+ #define atomic_store_explicit(object, desired, order) \
93
+ atomic_store(object, desired)
94
+
95
+ #define atomic_load(object) \
96
+ (__sync_synchronize(), *(object))
97
+
98
+ #define atomic_load_explicit(object, order) \
99
+ atomic_load(object)
100
+
101
+ #define atomic_exchange(object, desired) \
102
+ ({ \
103
+ __typeof__(object) _obj = (object); \
104
+ __typeof__(*object) _old; \
105
+ do \
106
+ _old = atomic_load(_obj); \
107
+ while (!__sync_bool_compare_and_swap(_obj, _old, (desired))); \
108
+ _old; \
109
+ })
110
+
111
+ #define atomic_exchange_explicit(object, desired, order) \
112
+ atomic_exchange(object, desired)
113
+
114
+ #define atomic_compare_exchange_strong(object, expected, desired) \
115
+ ({ \
116
+ __typeof__(object) _exp = (expected); \
117
+ __typeof__(*object) _old = *_exp; \
118
+ *_exp = __sync_val_compare_and_swap((object), _old, (desired)); \
119
+ *_exp == _old; \
120
+ })
121
+
122
+ #define atomic_compare_exchange_strong_explicit(object, expected, desired, success, failure) \
123
+ atomic_compare_exchange_strong(object, expected, desired)
124
+
125
+ #define atomic_compare_exchange_weak(object, expected, desired) \
126
+ atomic_compare_exchange_strong(object, expected, desired)
127
+
128
+ #define atomic_compare_exchange_weak_explicit(object, expected, desired, success, failure) \
129
+ atomic_compare_exchange_weak(object, expected, desired)
130
+
131
+ #define atomic_fetch_add(object, operand) \
132
+ __sync_fetch_and_add(object, operand)
133
+
134
+ #define atomic_fetch_add_explicit(object, operand, order) \
135
+ atomic_fetch_add(object, operand)
136
+
137
+ #define atomic_fetch_sub(object, operand) \
138
+ __sync_fetch_and_sub(object, operand)
139
+
140
+ #define atomic_fetch_sub_explicit(object, operand, order) \
141
+ atomic_fetch_sub(object, operand)
142
+
143
+ #define atomic_fetch_or(object, operand) \
144
+ __sync_fetch_and_or(object, operand)
145
+
146
+ #define atomic_fetch_or_explicit(object, operand, order) \
147
+ atomic_fetch_or(object, operand)
148
+
149
+ #define atomic_fetch_xor(object, operand) \
150
+ __sync_fetch_and_xor(object, operand)
151
+
152
+ #define atomic_fetch_xor_explicit(object, operand, order) \
153
+ atomic_fetch_xor(object, operand)
154
+
155
+ #define atomic_fetch_and(object, operand) \
156
+ __sync_fetch_and_and(object, operand)
157
+
158
+ #define atomic_fetch_and_explicit(object, operand, order) \
159
+ atomic_fetch_and(object, operand)
160
+
161
+ #define atomic_flag_test_and_set(object) \
162
+ atomic_exchange(object, 1)
163
+
164
+ #define atomic_flag_test_and_set_explicit(object, order) \
165
+ atomic_flag_test_and_set(object)
166
+
167
+ #define atomic_flag_clear(object) \
168
+ atomic_store(object, 0)
169
+
170
+ #define atomic_flag_clear_explicit(object, order) \
171
+ atomic_flag_clear(object)
172
+
173
+ #endif /* COMPAT_ATOMICS_GCC_STDATOMIC_H */
bin/ffmpeg/compat/atomics/pthread/stdatomic.c ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * This file is part of FFmpeg.
3
+ *
4
+ * FFmpeg is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * FFmpeg is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public
15
+ * License along with FFmpeg; if not, write to the Free Software
16
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
19
+ /*
20
+ * based on vlc_atomic.h from VLC
21
+ * Copyright (C) 2010 Rémi Denis-Courmont
22
+ */
23
+
24
+ #include <pthread.h>
25
+ #include <stdint.h>
26
+
27
+ #include "stdatomic.h"
28
+
29
+ static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER;
30
+
31
+ void avpriv_atomic_lock(void)
32
+ {
33
+ pthread_mutex_lock(&atomic_lock);
34
+ }
35
+
36
+ void avpriv_atomic_unlock(void)
37
+ {
38
+ pthread_mutex_unlock(&atomic_lock);
39
+ }
bin/ffmpeg/compat/atomics/pthread/stdatomic.h ADDED
@@ -0,0 +1,197 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * This file is part of FFmpeg.
3
+ *
4
+ * FFmpeg is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * FFmpeg is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public
15
+ * License along with FFmpeg; if not, write to the Free Software
16
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
19
+ /*
20
+ * based on vlc_atomic.h from VLC
21
+ * Copyright (C) 2010 Rémi Denis-Courmont
22
+ */
23
+
24
+ #ifndef COMPAT_ATOMICS_PTHREAD_STDATOMIC_H
25
+ #define COMPAT_ATOMICS_PTHREAD_STDATOMIC_H
26
+
27
+ #include <stdint.h>
28
+
29
+ #define ATOMIC_FLAG_INIT 0
30
+
31
+ #define ATOMIC_VAR_INIT(value) (value)
32
+
33
+ #define atomic_init(obj, value) \
34
+ do { \
35
+ *(obj) = (value); \
36
+ } while(0)
37
+
38
+ #define kill_dependency(y) ((void)0)
39
+
40
+ #define atomic_signal_fence(order) \
41
+ ((void)0)
42
+
43
+ #define atomic_is_lock_free(obj) 0
44
+
45
+ typedef intptr_t atomic_flag;
46
+ typedef intptr_t atomic_bool;
47
+ typedef intptr_t atomic_char;
48
+ typedef intptr_t atomic_schar;
49
+ typedef intptr_t atomic_uchar;
50
+ typedef intptr_t atomic_short;
51
+ typedef intptr_t atomic_ushort;
52
+ typedef intptr_t atomic_int;
53
+ typedef intptr_t atomic_uint;
54
+ typedef intptr_t atomic_long;
55
+ typedef intptr_t atomic_ulong;
56
+ typedef intptr_t atomic_llong;
57
+ typedef intptr_t atomic_ullong;
58
+ typedef intptr_t atomic_wchar_t;
59
+ typedef intptr_t atomic_int_least8_t;
60
+ typedef intptr_t atomic_uint_least8_t;
61
+ typedef intptr_t atomic_int_least16_t;
62
+ typedef intptr_t atomic_uint_least16_t;
63
+ typedef intptr_t atomic_int_least32_t;
64
+ typedef intptr_t atomic_uint_least32_t;
65
+ typedef intptr_t atomic_int_least64_t;
66
+ typedef intptr_t atomic_uint_least64_t;
67
+ typedef intptr_t atomic_int_fast8_t;
68
+ typedef intptr_t atomic_uint_fast8_t;
69
+ typedef intptr_t atomic_int_fast16_t;
70
+ typedef intptr_t atomic_uint_fast16_t;
71
+ typedef intptr_t atomic_int_fast32_t;
72
+ typedef intptr_t atomic_uint_fast32_t;
73
+ typedef intptr_t atomic_int_fast64_t;
74
+ typedef intptr_t atomic_uint_fast64_t;
75
+ typedef intptr_t atomic_intptr_t;
76
+ typedef intptr_t atomic_uintptr_t;
77
+ typedef intptr_t atomic_size_t;
78
+ typedef intptr_t atomic_ptrdiff_t;
79
+ typedef intptr_t atomic_intmax_t;
80
+ typedef intptr_t atomic_uintmax_t;
81
+
82
+ void avpriv_atomic_lock(void);
83
+ void avpriv_atomic_unlock(void);
84
+
85
+ static inline void atomic_thread_fence(int order)
86
+ {
87
+ avpriv_atomic_lock();
88
+ avpriv_atomic_unlock();
89
+ }
90
+
91
+ static inline void atomic_store(intptr_t *object, intptr_t desired)
92
+ {
93
+ avpriv_atomic_lock();
94
+ *object = desired;
95
+ avpriv_atomic_unlock();
96
+ }
97
+
98
+ #define atomic_store_explicit(object, desired, order) \
99
+ atomic_store(object, desired)
100
+
101
+ static inline intptr_t atomic_load(intptr_t *object)
102
+ {
103
+ intptr_t ret;
104
+ avpriv_atomic_lock();
105
+ ret = *object;
106
+ avpriv_atomic_unlock();
107
+ return ret;
108
+ }
109
+
110
+ #define atomic_load_explicit(object, order) \
111
+ atomic_load(object)
112
+
113
+ static inline intptr_t atomic_exchange(intptr_t *object, intptr_t desired)
114
+ {
115
+ intptr_t ret;
116
+ avpriv_atomic_lock();
117
+ ret = *object;
118
+ *object = desired;
119
+ avpriv_atomic_unlock();
120
+ return ret;
121
+ }
122
+
123
+ #define atomic_exchange_explicit(object, desired, order) \
124
+ atomic_exchange(object, desired)
125
+
126
+ static inline int atomic_compare_exchange_strong(intptr_t *object, intptr_t *expected,
127
+ intptr_t desired)
128
+ {
129
+ int ret;
130
+ avpriv_atomic_lock();
131
+ if (*object == *expected) {
132
+ ret = 1;
133
+ *object = desired;
134
+ } else {
135
+ ret = 0;
136
+ *expected = *object;
137
+ }
138
+ avpriv_atomic_unlock();
139
+ return ret;
140
+ }
141
+
142
+ #define atomic_compare_exchange_strong_explicit(object, expected, desired, success, failure) \
143
+ atomic_compare_exchange_strong(object, expected, desired)
144
+
145
+ #define atomic_compare_exchange_weak(object, expected, desired) \
146
+ atomic_compare_exchange_strong(object, expected, desired)
147
+
148
+ #define atomic_compare_exchange_weak_explicit(object, expected, desired, success, failure) \
149
+ atomic_compare_exchange_weak(object, expected, desired)
150
+
151
+ #define FETCH_MODIFY(opname, op) \
152
+ static inline intptr_t atomic_fetch_ ## opname(intptr_t *object, intptr_t operand) \
153
+ { \
154
+ intptr_t ret; \
155
+ avpriv_atomic_lock(); \
156
+ ret = *object; \
157
+ *object = *object op operand; \
158
+ avpriv_atomic_unlock(); \
159
+ return ret; \
160
+ }
161
+
162
+ FETCH_MODIFY(add, +)
163
+ FETCH_MODIFY(sub, -)
164
+ FETCH_MODIFY(or, |)
165
+ FETCH_MODIFY(xor, ^)
166
+ FETCH_MODIFY(and, &)
167
+
168
+ #undef FETCH_MODIFY
169
+
170
+ #define atomic_fetch_add_explicit(object, operand, order) \
171
+ atomic_fetch_add(object, operand)
172
+
173
+ #define atomic_fetch_sub_explicit(object, operand, order) \
174
+ atomic_fetch_sub(object, operand)
175
+
176
+ #define atomic_fetch_or_explicit(object, operand, order) \
177
+ atomic_fetch_or(object, operand)
178
+
179
+ #define atomic_fetch_xor_explicit(object, operand, order) \
180
+ atomic_fetch_xor(object, operand)
181
+
182
+ #define atomic_fetch_and_explicit(object, operand, order) \
183
+ atomic_fetch_and(object, operand)
184
+
185
+ #define atomic_flag_test_and_set(object) \
186
+ atomic_exchange(object, 1)
187
+
188
+ #define atomic_flag_test_and_set_explicit(object, order) \
189
+ atomic_flag_test_and_set(object)
190
+
191
+ #define atomic_flag_clear(object) \
192
+ atomic_store(object, 0)
193
+
194
+ #define atomic_flag_clear_explicit(object, order) \
195
+ atomic_flag_clear(object)
196
+
197
+ #endif /* COMPAT_ATOMICS_PTHREAD_STDATOMIC_H */
bin/ffmpeg/compat/atomics/suncc/stdatomic.h ADDED
@@ -0,0 +1,186 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * This file is part of FFmpeg.
3
+ *
4
+ * FFmpeg is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * FFmpeg is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public
15
+ * License along with FFmpeg; if not, write to the Free Software
16
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
19
+ #ifndef COMPAT_ATOMICS_SUNCC_STDATOMIC_H
20
+ #define COMPAT_ATOMICS_SUNCC_STDATOMIC_H
21
+
22
+ #include <atomic.h>
23
+ #include <mbarrier.h>
24
+ #include <stddef.h>
25
+ #include <stdint.h>
26
+
27
+ #define ATOMIC_FLAG_INIT 0
28
+
29
+ #define ATOMIC_VAR_INIT(value) (value)
30
+
31
+ #define atomic_init(obj, value) \
32
+ do { \
33
+ *(obj) = (value); \
34
+ } while(0)
35
+
36
+ #define kill_dependency(y) ((void)0)
37
+
38
+ #define atomic_thread_fence(order) \
39
+ __machine_rw_barrier();
40
+
41
+ #define atomic_signal_fence(order) \
42
+ ((void)0)
43
+
44
+ #define atomic_is_lock_free(obj) 0
45
+
46
+ typedef intptr_t atomic_flag;
47
+ typedef intptr_t atomic_bool;
48
+ typedef intptr_t atomic_char;
49
+ typedef intptr_t atomic_schar;
50
+ typedef intptr_t atomic_uchar;
51
+ typedef intptr_t atomic_short;
52
+ typedef intptr_t atomic_ushort;
53
+ typedef intptr_t atomic_int;
54
+ typedef intptr_t atomic_uint;
55
+ typedef intptr_t atomic_long;
56
+ typedef intptr_t atomic_ulong;
57
+ typedef intptr_t atomic_llong;
58
+ typedef intptr_t atomic_ullong;
59
+ typedef intptr_t atomic_wchar_t;
60
+ typedef intptr_t atomic_int_least8_t;
61
+ typedef intptr_t atomic_uint_least8_t;
62
+ typedef intptr_t atomic_int_least16_t;
63
+ typedef intptr_t atomic_uint_least16_t;
64
+ typedef intptr_t atomic_int_least32_t;
65
+ typedef intptr_t atomic_uint_least32_t;
66
+ typedef intptr_t atomic_int_least64_t;
67
+ typedef intptr_t atomic_uint_least64_t;
68
+ typedef intptr_t atomic_int_fast8_t;
69
+ typedef intptr_t atomic_uint_fast8_t;
70
+ typedef intptr_t atomic_int_fast16_t;
71
+ typedef intptr_t atomic_uint_fast16_t;
72
+ typedef intptr_t atomic_int_fast32_t;
73
+ typedef intptr_t atomic_uint_fast32_t;
74
+ typedef intptr_t atomic_int_fast64_t;
75
+ typedef intptr_t atomic_uint_fast64_t;
76
+ typedef intptr_t atomic_intptr_t;
77
+ typedef intptr_t atomic_uintptr_t;
78
+ typedef intptr_t atomic_size_t;
79
+ typedef intptr_t atomic_ptrdiff_t;
80
+ typedef intptr_t atomic_intmax_t;
81
+ typedef intptr_t atomic_uintmax_t;
82
+
83
+ static inline void atomic_store(intptr_t *object, intptr_t desired)
84
+ {
85
+ *object = desired;
86
+ __machine_rw_barrier();
87
+ }
88
+
89
+ #define atomic_store_explicit(object, desired, order) \
90
+ atomic_store(object, desired)
91
+
92
+ static inline intptr_t atomic_load(intptr_t *object)
93
+ {
94
+ __machine_rw_barrier();
95
+ return *object;
96
+ }
97
+
98
+ #define atomic_load_explicit(object, order) \
99
+ atomic_load(object)
100
+
101
+ #define atomic_exchange(object, desired) \
102
+ atomic_swap_ptr(object, desired)
103
+
104
+ #define atomic_exchange_explicit(object, desired, order) \
105
+ atomic_exchange(object, desired)
106
+
107
+ static inline int atomic_compare_exchange_strong(intptr_t *object, intptr_t *expected,
108
+ intptr_t desired)
109
+ {
110
+ intptr_t old = *expected;
111
+ *expected = (intptr_t)atomic_cas_ptr(object, (void *)old, (void *)desired);
112
+ return *expected == old;
113
+ }
114
+
115
+ #define atomic_compare_exchange_strong_explicit(object, expected, desired, success, failure) \
116
+ atomic_compare_exchange_strong(object, expected, desired)
117
+
118
+ #define atomic_compare_exchange_weak(object, expected, desired) \
119
+ atomic_compare_exchange_strong(object, expected, desired)
120
+
121
+ #define atomic_compare_exchange_weak_explicit(object, expected, desired, success, failure) \
122
+ atomic_compare_exchange_weak(object, expected, desired)
123
+
124
+ static inline intptr_t atomic_fetch_add(intptr_t *object, intptr_t operand)
125
+ {
126
+ return atomic_add_ptr_nv(object, operand) - operand;
127
+ }
128
+
129
+ #define atomic_fetch_sub(object, operand) \
130
+ atomic_fetch_add(object, -(operand))
131
+
132
+ static inline intptr_t atomic_fetch_or(intptr_t *object, intptr_t operand)
133
+ {
134
+ intptr_t old;
135
+ do {
136
+ old = atomic_load(object);
137
+ } while (!atomic_compare_exchange_strong(object, old, old | operand));
138
+ return old;
139
+ }
140
+
141
+ static inline intptr_t atomic_fetch_xor(intptr_t *object, intptr_t operand)
142
+ {
143
+ intptr_t old;
144
+ do {
145
+ old = atomic_load(object);
146
+ } while (!atomic_compare_exchange_strong(object, old, old ^ operand));
147
+ return old;
148
+ }
149
+
150
+ static inline intptr_t atomic_fetch_and(intptr_t *object, intptr_t operand)
151
+ {
152
+ intptr_t old;
153
+ do {
154
+ old = atomic_load(object);
155
+ } while (!atomic_compare_exchange_strong(object, old, old & operand));
156
+ return old;
157
+ }
158
+
159
+ #define atomic_fetch_add_explicit(object, operand, order) \
160
+ atomic_fetch_add(object, operand)
161
+
162
+ #define atomic_fetch_sub_explicit(object, operand, order) \
163
+ atomic_fetch_sub(object, operand)
164
+
165
+ #define atomic_fetch_or_explicit(object, operand, order) \
166
+ atomic_fetch_or(object, operand)
167
+
168
+ #define atomic_fetch_xor_explicit(object, operand, order) \
169
+ atomic_fetch_xor(object, operand)
170
+
171
+ #define atomic_fetch_and_explicit(object, operand, order) \
172
+ atomic_fetch_and(object, operand)
173
+
174
+ #define atomic_flag_test_and_set(object) \
175
+ atomic_exchange(object, 1)
176
+
177
+ #define atomic_flag_test_and_set_explicit(object, order) \
178
+ atomic_flag_test_and_set(object)
179
+
180
+ #define atomic_flag_clear(object) \
181
+ atomic_store(object, 0)
182
+
183
+ #define atomic_flag_clear_explicit(object, order) \
184
+ atomic_flag_clear(object)
185
+
186
+ #endif /* COMPAT_ATOMICS_SUNCC_STDATOMIC_H */
bin/ffmpeg/compat/atomics/win32/stdatomic.h ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * This file is part of FFmpeg.
3
+ *
4
+ * FFmpeg is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * FFmpeg is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public
15
+ * License along with FFmpeg; if not, write to the Free Software
16
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
19
+ #ifndef COMPAT_ATOMICS_WIN32_STDATOMIC_H
20
+ #define COMPAT_ATOMICS_WIN32_STDATOMIC_H
21
+
22
+ #define WIN32_LEAN_AND_MEAN
23
+ #include <stddef.h>
24
+ #include <stdint.h>
25
+ #include <windows.h>
26
+
27
+ #define ATOMIC_FLAG_INIT 0
28
+
29
+ #define ATOMIC_VAR_INIT(value) (value)
30
+
31
+ #define atomic_init(obj, value) \
32
+ do { \
33
+ *(obj) = (value); \
34
+ } while(0)
35
+
36
+ #define kill_dependency(y) ((void)0)
37
+
38
+ #define atomic_thread_fence(order) \
39
+ MemoryBarrier();
40
+
41
+ #define atomic_signal_fence(order) \
42
+ ((void)0)
43
+
44
+ #define atomic_is_lock_free(obj) 0
45
+
46
+ typedef intptr_t atomic_flag;
47
+ typedef intptr_t atomic_bool;
48
+ typedef intptr_t atomic_char;
49
+ typedef intptr_t atomic_schar;
50
+ typedef intptr_t atomic_uchar;
51
+ typedef intptr_t atomic_short;
52
+ typedef intptr_t atomic_ushort;
53
+ typedef intptr_t atomic_int;
54
+ typedef intptr_t atomic_uint;
55
+ typedef intptr_t atomic_long;
56
+ typedef intptr_t atomic_ulong;
57
+ typedef intptr_t atomic_llong;
58
+ typedef intptr_t atomic_ullong;
59
+ typedef intptr_t atomic_wchar_t;
60
+ typedef intptr_t atomic_int_least8_t;
61
+ typedef intptr_t atomic_uint_least8_t;
62
+ typedef intptr_t atomic_int_least16_t;
63
+ typedef intptr_t atomic_uint_least16_t;
64
+ typedef intptr_t atomic_int_least32_t;
65
+ typedef intptr_t atomic_uint_least32_t;
66
+ typedef intptr_t atomic_int_least64_t;
67
+ typedef intptr_t atomic_uint_least64_t;
68
+ typedef intptr_t atomic_int_fast8_t;
69
+ typedef intptr_t atomic_uint_fast8_t;
70
+ typedef intptr_t atomic_int_fast16_t;
71
+ typedef intptr_t atomic_uint_fast16_t;
72
+ typedef intptr_t atomic_int_fast32_t;
73
+ typedef intptr_t atomic_uint_fast32_t;
74
+ typedef intptr_t atomic_int_fast64_t;
75
+ typedef intptr_t atomic_uint_fast64_t;
76
+ typedef intptr_t atomic_intptr_t;
77
+ typedef intptr_t atomic_uintptr_t;
78
+ typedef intptr_t atomic_size_t;
79
+ typedef intptr_t atomic_ptrdiff_t;
80
+ typedef intptr_t atomic_intmax_t;
81
+ typedef intptr_t atomic_uintmax_t;
82
+
83
+ #define atomic_store(object, desired) \
84
+ do { \
85
+ *(object) = (desired); \
86
+ MemoryBarrier(); \
87
+ } while (0)
88
+
89
+ #define atomic_store_explicit(object, desired, order) \
90
+ atomic_store(object, desired)
91
+
92
+ #define atomic_load(object) \
93
+ (MemoryBarrier(), *(object))
94
+
95
+ #define atomic_load_explicit(object, order) \
96
+ atomic_load(object)
97
+
98
+ #define atomic_exchange(object, desired) \
99
+ InterlockedExchangePointer((PVOID volatile *)object, (PVOID)desired)
100
+
101
+ #define atomic_exchange_explicit(object, desired, order) \
102
+ atomic_exchange(object, desired)
103
+
104
+ static inline int atomic_compare_exchange_strong(intptr_t *object, intptr_t *expected,
105
+ intptr_t desired)
106
+ {
107
+ intptr_t old = *expected;
108
+ *expected = (intptr_t)InterlockedCompareExchangePointer(
109
+ (PVOID *)object, (PVOID)desired, (PVOID)old);
110
+ return *expected == old;
111
+ }
112
+
113
+ #define atomic_compare_exchange_strong_explicit(object, expected, desired, success, failure) \
114
+ atomic_compare_exchange_strong(object, expected, desired)
115
+
116
+ #define atomic_compare_exchange_weak(object, expected, desired) \
117
+ atomic_compare_exchange_strong(object, expected, desired)
118
+
119
+ #define atomic_compare_exchange_weak_explicit(object, expected, desired, success, failure) \
120
+ atomic_compare_exchange_weak(object, expected, desired)
121
+
122
+ #ifdef _WIN64
123
+ #define atomic_fetch_add(object, operand) \
124
+ InterlockedExchangeAdd64(object, operand)
125
+
126
+ #define atomic_fetch_sub(object, operand) \
127
+ InterlockedExchangeAdd64(object, -(operand))
128
+
129
+ #define atomic_fetch_or(object, operand) \
130
+ InterlockedOr64(object, operand)
131
+
132
+ #define atomic_fetch_xor(object, operand) \
133
+ InterlockedXor64(object, operand)
134
+
135
+ #define atomic_fetch_and(object, operand) \
136
+ InterlockedAnd64(object, operand)
137
+ #else
138
+ #define atomic_fetch_add(object, operand) \
139
+ InterlockedExchangeAdd(object, operand)
140
+
141
+ #define atomic_fetch_sub(object, operand) \
142
+ InterlockedExchangeAdd(object, -(operand))
143
+
144
+ #define atomic_fetch_or(object, operand) \
145
+ InterlockedOr(object, operand)
146
+
147
+ #define atomic_fetch_xor(object, operand) \
148
+ InterlockedXor(object, operand)
149
+
150
+ #define atomic_fetch_and(object, operand) \
151
+ InterlockedAnd(object, operand)
152
+ #endif /* _WIN64 */
153
+
154
+ #define atomic_fetch_add_explicit(object, operand, order) \
155
+ atomic_fetch_add(object, operand)
156
+
157
+ #define atomic_fetch_sub_explicit(object, operand, order) \
158
+ atomic_fetch_sub(object, operand)
159
+
160
+ #define atomic_fetch_or_explicit(object, operand, order) \
161
+ atomic_fetch_or(object, operand)
162
+
163
+ #define atomic_fetch_xor_explicit(object, operand, order) \
164
+ atomic_fetch_xor(object, operand)
165
+
166
+ #define atomic_fetch_and_explicit(object, operand, order) \
167
+ atomic_fetch_and(object, operand)
168
+
169
+ #define atomic_flag_test_and_set(object) \
170
+ atomic_exchange(object, 1)
171
+
172
+ #define atomic_flag_test_and_set_explicit(object, order) \
173
+ atomic_flag_test_and_set(object)
174
+
175
+ #define atomic_flag_clear(object) \
176
+ atomic_store(object, 0)
177
+
178
+ #define atomic_flag_clear_explicit(object, order) \
179
+ atomic_flag_clear(object)
180
+
181
+ #endif /* COMPAT_ATOMICS_WIN32_STDATOMIC_H */
bin/ffmpeg/compat/cuda/cuda_runtime.h ADDED
@@ -0,0 +1,192 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Minimum CUDA compatibility definitions header
3
+ *
4
+ * Copyright (c) 2019 rcombs
5
+ *
6
+ * This file is part of FFmpeg.
7
+ *
8
+ * FFmpeg is free software; you can redistribute it and/or
9
+ * modify it under the terms of the GNU Lesser General Public
10
+ * License as published by the Free Software Foundation; either
11
+ * version 2.1 of the License, or (at your option) any later version.
12
+ *
13
+ * FFmpeg is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
+ * Lesser General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU Lesser General Public
19
+ * License along with FFmpeg; if not, write to the Free Software
20
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
+ */
22
+
23
+ #ifndef COMPAT_CUDA_CUDA_RUNTIME_H
24
+ #define COMPAT_CUDA_CUDA_RUNTIME_H
25
+
26
+ // Common macros
27
+ #define __global__ __attribute__((global))
28
+ #define __device__ __attribute__((device))
29
+ #define __device_builtin__ __attribute__((device_builtin))
30
+ #define __align__(N) __attribute__((aligned(N)))
31
+ #define __inline__ __inline__ __attribute__((always_inline))
32
+
33
+ #define max(a, b) ((a) > (b) ? (a) : (b))
34
+ #define min(a, b) ((a) < (b) ? (a) : (b))
35
+ #define abs(x) ((x) < 0 ? -(x) : (x))
36
+
37
+ #define atomicAdd(a, b) (__atomic_fetch_add(a, b, __ATOMIC_SEQ_CST))
38
+
39
+ // Basic typedefs
40
+ typedef __device_builtin__ unsigned long long cudaTextureObject_t;
41
+
42
+ typedef struct __device_builtin__ __align__(2) uchar2
43
+ {
44
+ unsigned char x, y;
45
+ } uchar2;
46
+
47
+ typedef struct __device_builtin__ __align__(4) ushort2
48
+ {
49
+ unsigned short x, y;
50
+ } ushort2;
51
+
52
+ typedef struct __device_builtin__ __align__(8) float2
53
+ {
54
+ float x, y;
55
+ } float2;
56
+
57
+ typedef struct __device_builtin__ __align__(8) int2
58
+ {
59
+ int x, y;
60
+ } int2;
61
+
62
+ typedef struct __device_builtin__ uint3
63
+ {
64
+ unsigned int x, y, z;
65
+ } uint3;
66
+
67
+ typedef struct uint3 dim3;
68
+
69
+ typedef struct __device_builtin__ __align__(4) uchar4
70
+ {
71
+ unsigned char x, y, z, w;
72
+ } uchar4;
73
+
74
+ typedef struct __device_builtin__ __align__(8) ushort4
75
+ {
76
+ unsigned short x, y, z, w;
77
+ } ushort4;
78
+
79
+ typedef struct __device_builtin__ __align__(16) int4
80
+ {
81
+ int x, y, z, w;
82
+ } int4;
83
+
84
+ typedef struct __device_builtin__ __align__(16) float4
85
+ {
86
+ float x, y, z, w;
87
+ } float4;
88
+
89
+ // Accessors for special registers
90
+ #define GETCOMP(reg, comp) \
91
+ asm("mov.u32 %0, %%" #reg "." #comp ";" : "=r"(tmp)); \
92
+ ret.comp = tmp;
93
+
94
+ #define GET(name, reg) static inline __device__ uint3 name() {\
95
+ uint3 ret; \
96
+ unsigned tmp; \
97
+ GETCOMP(reg, x) \
98
+ GETCOMP(reg, y) \
99
+ GETCOMP(reg, z) \
100
+ return ret; \
101
+ }
102
+
103
+ GET(getBlockIdx, ctaid)
104
+ GET(getBlockDim, ntid)
105
+ GET(getThreadIdx, tid)
106
+
107
+ // Instead of externs for these registers, we turn access to them into calls into trivial ASM
108
+ #define blockIdx (getBlockIdx())
109
+ #define blockDim (getBlockDim())
110
+ #define threadIdx (getThreadIdx())
111
+
112
+ // Basic initializers (simple macros rather than inline functions)
113
+ #define make_int2(a, b) ((int2){.x = a, .y = b})
114
+ #define make_uchar2(a, b) ((uchar2){.x = a, .y = b})
115
+ #define make_ushort2(a, b) ((ushort2){.x = a, .y = b})
116
+ #define make_float2(a, b) ((float2){.x = a, .y = b})
117
+ #define make_int4(a, b, c, d) ((int4){.x = a, .y = b, .z = c, .w = d})
118
+ #define make_uchar4(a, b, c, d) ((uchar4){.x = a, .y = b, .z = c, .w = d})
119
+ #define make_ushort4(a, b, c, d) ((ushort4){.x = a, .y = b, .z = c, .w = d})
120
+ #define make_float4(a, b, c, d) ((float4){.x = a, .y = b, .z = c, .w = d})
121
+
122
+ // Conversions from the tex instruction's 4-register output to various types
123
+ #define TEX2D(type, ret) static inline __device__ void conv(type* out, unsigned a, unsigned b, unsigned c, unsigned d) {*out = (ret);}
124
+
125
+ TEX2D(unsigned char, a & 0xFF)
126
+ TEX2D(unsigned short, a & 0xFFFF)
127
+ TEX2D(float, a)
128
+ TEX2D(uchar2, make_uchar2(a & 0xFF, b & 0xFF))
129
+ TEX2D(ushort2, make_ushort2(a & 0xFFFF, b & 0xFFFF))
130
+ TEX2D(float2, make_float2(a, b))
131
+ TEX2D(uchar4, make_uchar4(a & 0xFF, b & 0xFF, c & 0xFF, d & 0xFF))
132
+ TEX2D(ushort4, make_ushort4(a & 0xFFFF, b & 0xFFFF, c & 0xFFFF, d & 0xFFFF))
133
+ TEX2D(float4, make_float4(a, b, c, d))
134
+
135
+ // Template calling tex instruction and converting the output to the selected type
136
+ template<typename T>
137
+ inline __device__ T tex2D(cudaTextureObject_t texObject, float x, float y)
138
+ {
139
+ T ret;
140
+ unsigned ret1, ret2, ret3, ret4;
141
+ asm("tex.2d.v4.u32.f32 {%0, %1, %2, %3}, [%4, {%5, %6}];" :
142
+ "=r"(ret1), "=r"(ret2), "=r"(ret3), "=r"(ret4) :
143
+ "l"(texObject), "f"(x), "f"(y));
144
+ conv(&ret, ret1, ret2, ret3, ret4);
145
+ return ret;
146
+ }
147
+
148
+ template<>
149
+ inline __device__ float4 tex2D<float4>(cudaTextureObject_t texObject, float x, float y)
150
+ {
151
+ float4 ret;
152
+ asm("tex.2d.v4.f32.f32 {%0, %1, %2, %3}, [%4, {%5, %6}];" :
153
+ "=r"(ret.x), "=r"(ret.y), "=r"(ret.z), "=r"(ret.w) :
154
+ "l"(texObject), "f"(x), "f"(y));
155
+ return ret;
156
+ }
157
+
158
+ template<>
159
+ inline __device__ float tex2D<float>(cudaTextureObject_t texObject, float x, float y)
160
+ {
161
+ return tex2D<float4>(texObject, x, y).x;
162
+ }
163
+
164
+ template<>
165
+ inline __device__ float2 tex2D<float2>(cudaTextureObject_t texObject, float x, float y)
166
+ {
167
+ float4 ret = tex2D<float4>(texObject, x, y);
168
+ return make_float2(ret.x, ret.y);
169
+ }
170
+
171
+ // Math helper functions
172
+ static inline __device__ float floorf(float a) { return __builtin_floorf(a); }
173
+ static inline __device__ float floor(float a) { return __builtin_floorf(a); }
174
+ static inline __device__ double floor(double a) { return __builtin_floor(a); }
175
+ static inline __device__ float ceilf(float a) { return __builtin_ceilf(a); }
176
+ static inline __device__ float ceil(float a) { return __builtin_ceilf(a); }
177
+ static inline __device__ double ceil(double a) { return __builtin_ceil(a); }
178
+ static inline __device__ float truncf(float a) { return __builtin_truncf(a); }
179
+ static inline __device__ float trunc(float a) { return __builtin_truncf(a); }
180
+ static inline __device__ double trunc(double a) { return __builtin_trunc(a); }
181
+ static inline __device__ float fabsf(float a) { return __builtin_fabsf(a); }
182
+ static inline __device__ float fabs(float a) { return __builtin_fabsf(a); }
183
+ static inline __device__ double fabs(double a) { return __builtin_fabs(a); }
184
+ static inline __device__ float sqrtf(float a) { return __builtin_sqrtf(a); }
185
+
186
+ static inline __device__ float __saturatef(float a) { return __nvvm_saturate_f(a); }
187
+ static inline __device__ float __sinf(float a) { return __nvvm_sin_approx_f(a); }
188
+ static inline __device__ float __cosf(float a) { return __nvvm_cos_approx_f(a); }
189
+ static inline __device__ float __expf(float a) { return __nvvm_ex2_approx_f(a * (float)__builtin_log2(__builtin_exp(1))); }
190
+ static inline __device__ float __powf(float a, float b) { return __nvvm_ex2_approx_f(__nvvm_lg2_approx_f(a) * b); }
191
+
192
+ #endif /* COMPAT_CUDA_CUDA_RUNTIME_H */
bin/ffmpeg/compat/cuda/dynlink_loader.h ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * This file is part of FFmpeg.
3
+ *
4
+ * FFmpeg is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * FFmpeg is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public
15
+ * License along with FFmpeg; if not, write to the Free Software
16
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
19
+ #ifndef COMPAT_CUDA_DYNLINK_LOADER_H
20
+ #define COMPAT_CUDA_DYNLINK_LOADER_H
21
+
22
+ #include "libavutil/log.h"
23
+ #include "compat/w32dlfcn.h"
24
+
25
+ #define FFNV_LOAD_FUNC(path) dlopen((path), RTLD_LAZY)
26
+ #define FFNV_SYM_FUNC(lib, sym) dlsym((lib), (sym))
27
+ #define FFNV_FREE_FUNC(lib) dlclose(lib)
28
+ #define FFNV_LOG_FUNC(logctx, msg, ...) av_log(logctx, AV_LOG_ERROR, msg, __VA_ARGS__)
29
+ #define FFNV_DEBUG_LOG_FUNC(logctx, msg, ...) av_log(logctx, AV_LOG_DEBUG, msg, __VA_ARGS__)
30
+
31
+ #include <ffnvcodec/dynlink_loader.h>
32
+
33
+ #endif /* COMPAT_CUDA_DYNLINK_LOADER_H */
bin/ffmpeg/compat/dispatch_semaphore/semaphore.h ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * This file is part of FFmpeg.
3
+ *
4
+ * FFmpeg is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * FFmpeg is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public
15
+ * License along with FFmpeg; if not, write to the Free Software
16
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
19
+ #ifndef COMPAT_DISPATCH_SEMAPHORE_SEMAPHORE_H
20
+ #define COMPAT_DISPATCH_SEMAPHORE_SEMAPHORE_H
21
+
22
+ #include <dispatch/dispatch.h>
23
+ #include <errno.h>
24
+
25
+ #define sem_t dispatch_semaphore_t
26
+ #define sem_post(psem) dispatch_semaphore_signal(*psem)
27
+ #define sem_wait(psem) dispatch_semaphore_wait(*psem, DISPATCH_TIME_FOREVER)
28
+ #define sem_timedwait(psem, val) dispatch_semaphore_wait(*psem, dispatch_walltime(val, 0))
29
+ #define sem_destroy(psem) dispatch_release(*psem)
30
+
31
+ static inline int compat_sem_init(dispatch_semaphore_t *psem,
32
+ int unused, int val)
33
+ {
34
+ int ret = !!(*psem = dispatch_semaphore_create(val)) - 1;
35
+ if (ret < 0)
36
+ errno = ENOMEM;
37
+ return ret;
38
+ }
39
+
40
+ #define sem_init compat_sem_init
41
+
42
+ #endif /* COMPAT_DISPATCH_SEMAPHORE_SEMAPHORE_H */
bin/ffmpeg/compat/djgpp/math.c ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * This file is part of FFmpeg.
3
+ *
4
+ * FFmpeg is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * FFmpeg is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public
15
+ * License along with FFmpeg; if not, write to the Free Software
16
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
19
+ #include <math.h>
20
+
21
+ #define FUN(name, type, op) \
22
+ type name(type x, type y) \
23
+ { \
24
+ if (fpclassify(x) == FP_NAN) return y; \
25
+ if (fpclassify(y) == FP_NAN) return x; \
26
+ return x op y ? x : y; \
27
+ }
28
+
29
+ FUN(fmin, double, <)
30
+ FUN(fmax, double, >)
31
+ FUN(fminf, float, <)
32
+ FUN(fmaxf, float, >)
33
+
34
+ long double fmodl(long double x, long double y)
35
+ {
36
+ return fmod(x, y);
37
+ }
38
+
39
+ long double scalbnl(long double x, int exp)
40
+ {
41
+ return scalbn(x, exp);
42
+ }
43
+
44
+ long double copysignl(long double x, long double y)
45
+ {
46
+ return copysign(x, y);
47
+ }
bin/ffmpeg/compat/djgpp/math.h ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * This file is part of FFmpeg.
3
+ *
4
+ * FFmpeg is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * FFmpeg is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public
15
+ * License along with FFmpeg; if not, write to the Free Software
16
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
19
+ double fmin(double, double);
20
+ double fmax(double, double);
21
+ float fminf(float, float);
22
+ float fmaxf(float, float);
23
+ long double fmodl(long double, long double);
24
+ long double scalbnl(long double, int);
25
+ long double copysignl(long double, long double);
bin/ffmpeg/compat/float/float.h ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Work around broken floating point limits on some systems.
3
+ *
4
+ * This file is part of FFmpeg.
5
+ *
6
+ * FFmpeg is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU Lesser General Public
8
+ * License as published by the Free Software Foundation; either
9
+ * version 2.1 of the License, or (at your option) any later version.
10
+ *
11
+ * FFmpeg is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ * Lesser General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU Lesser General Public
17
+ * License along with FFmpeg; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
+ */
20
+
21
+ #include_next <float.h>
22
+
23
+ #ifdef FLT_MAX
24
+ #undef FLT_MAX
25
+ #define FLT_MAX 3.40282346638528859812e+38F
26
+
27
+ #undef FLT_MIN
28
+ #define FLT_MIN 1.17549435082228750797e-38F
29
+
30
+ #undef DBL_MAX
31
+ #define DBL_MAX ((double)1.79769313486231570815e+308L)
32
+
33
+ #undef DBL_MIN
34
+ #define DBL_MIN ((double)2.22507385850720138309e-308L)
35
+ #endif
bin/ffmpeg/compat/float/limits.h ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Work around broken floating point limits on some systems.
3
+ *
4
+ * This file is part of FFmpeg.
5
+ *
6
+ * FFmpeg is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU Lesser General Public
8
+ * License as published by the Free Software Foundation; either
9
+ * version 2.1 of the License, or (at your option) any later version.
10
+ *
11
+ * FFmpeg is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ * Lesser General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU Lesser General Public
17
+ * License along with FFmpeg; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
+ */
20
+
21
+ #include_next <limits.h>
22
+ #include <float.h>
bin/ffmpeg/compat/getopt.c ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * This file is part of FFmpeg.
3
+ *
4
+ * FFmpeg is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * FFmpeg is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public
15
+ * License along with FFmpeg; if not, write to the Free Software
16
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
19
+ /*
20
+ * This file was copied from the following newsgroup posting:
21
+ *
22
+ * Newsgroups: mod.std.unix
23
+ * Subject: public domain AT&T getopt source
24
+ * Date: 3 Nov 85 19:34:15 GMT
25
+ *
26
+ * Here's something you've all been waiting for: the AT&T public domain
27
+ * source for getopt(3). It is the code which was given out at the 1985
28
+ * UNIFORUM conference in Dallas. I obtained it by electronic mail
29
+ * directly from AT&T. The people there assure me that it is indeed
30
+ * in the public domain.
31
+ */
32
+
33
+ #include <stdio.h>
34
+ #include <string.h>
35
+
36
+ static int opterr = 1;
37
+ static int optind = 1;
38
+ static int optopt;
39
+ static char *optarg;
40
+
41
+ static int getopt(int argc, char *argv[], char *opts)
42
+ {
43
+ static int sp = 1;
44
+ int c;
45
+ char *cp;
46
+
47
+ if (sp == 1) {
48
+ if (optind >= argc ||
49
+ argv[optind][0] != '-' || argv[optind][1] == '\0')
50
+ return EOF;
51
+ else if (!strcmp(argv[optind], "--")) {
52
+ optind++;
53
+ return EOF;
54
+ }
55
+ }
56
+ optopt = c = argv[optind][sp];
57
+ if (c == ':' || !(cp = strchr(opts, c))) {
58
+ fprintf(stderr, ": illegal option -- %c\n", c);
59
+ if (argv[optind][++sp] == '\0') {
60
+ optind++;
61
+ sp = 1;
62
+ }
63
+ return '?';
64
+ }
65
+ if (*++cp == ':') {
66
+ if (argv[optind][sp+1] != '\0')
67
+ optarg = &argv[optind++][sp+1];
68
+ else if(++optind >= argc) {
69
+ fprintf(stderr, ": option requires an argument -- %c\n", c);
70
+ sp = 1;
71
+ return '?';
72
+ } else
73
+ optarg = argv[optind++];
74
+ sp = 1;
75
+ } else {
76
+ if (argv[optind][++sp] == '\0') {
77
+ sp = 1;
78
+ optind++;
79
+ }
80
+ optarg = NULL;
81
+ }
82
+
83
+ return c;
84
+ }
bin/ffmpeg/compat/msvcrt/snprintf.c ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * C99-compatible snprintf() and vsnprintf() implementations
3
+ * Copyright (c) 2012 Ronald S. Bultje <[email protected]>
4
+ *
5
+ * This file is part of FFmpeg.
6
+ *
7
+ * FFmpeg is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU Lesser General Public
9
+ * License as published by the Free Software Foundation; either
10
+ * version 2.1 of the License, or (at your option) any later version.
11
+ *
12
+ * FFmpeg is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ * Lesser General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public
18
+ * License along with FFmpeg; if not, write to the Free Software
19
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
+ */
21
+
22
+ #include <stdio.h>
23
+ #include <stdarg.h>
24
+ #include <limits.h>
25
+ #include <string.h>
26
+
27
+ #include "compat/va_copy.h"
28
+ #include "libavutil/error.h"
29
+
30
+ #if defined(__MINGW32__)
31
+ #define EOVERFLOW EFBIG
32
+ #endif
33
+
34
+ int avpriv_snprintf(char *s, size_t n, const char *fmt, ...)
35
+ {
36
+ va_list ap;
37
+ int ret;
38
+
39
+ va_start(ap, fmt);
40
+ ret = avpriv_vsnprintf(s, n, fmt, ap);
41
+ va_end(ap);
42
+
43
+ return ret;
44
+ }
45
+
46
+ int avpriv_vsnprintf(char *s, size_t n, const char *fmt,
47
+ va_list ap)
48
+ {
49
+ int ret;
50
+ va_list ap_copy;
51
+
52
+ if (n == 0)
53
+ return _vscprintf(fmt, ap);
54
+ else if (n > INT_MAX)
55
+ return AVERROR(EOVERFLOW);
56
+
57
+ /* we use n - 1 here because if the buffer is not big enough, the MS
58
+ * runtime libraries don't add a terminating zero at the end. MSDN
59
+ * recommends to provide _snprintf/_vsnprintf() a buffer size that
60
+ * is one less than the actual buffer, and zero it before calling
61
+ * _snprintf/_vsnprintf() to workaround this problem.
62
+ * See https://web.archive.org/web/20151214111935/http://msdn.microsoft.com/en-us/library/1kt27hek(v=vs.80).aspx */
63
+ memset(s, 0, n);
64
+ va_copy(ap_copy, ap);
65
+ ret = _vsnprintf(s, n - 1, fmt, ap_copy);
66
+ va_end(ap_copy);
67
+ if (ret == -1)
68
+ ret = _vscprintf(fmt, ap);
69
+
70
+ return ret;
71
+ }
bin/ffmpeg/compat/msvcrt/snprintf.h ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * C99-compatible snprintf() and vsnprintf() implementations
3
+ * Copyright (c) 2012 Ronald S. Bultje <[email protected]>
4
+ *
5
+ * This file is part of FFmpeg.
6
+ *
7
+ * FFmpeg is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU Lesser General Public
9
+ * License as published by the Free Software Foundation; either
10
+ * version 2.1 of the License, or (at your option) any later version.
11
+ *
12
+ * FFmpeg is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ * Lesser General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public
18
+ * License along with FFmpeg; if not, write to the Free Software
19
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
+ */
21
+
22
+ #ifndef COMPAT_MSVCRT_SNPRINTF_H
23
+ #define COMPAT_MSVCRT_SNPRINTF_H
24
+
25
+ #include <stdarg.h>
26
+ #include <stdio.h>
27
+
28
+ int avpriv_snprintf(char *s, size_t n, const char *fmt, ...);
29
+ int avpriv_vsnprintf(char *s, size_t n, const char *fmt, va_list ap);
30
+
31
+ #undef snprintf
32
+ #undef _snprintf
33
+ #undef vsnprintf
34
+ #define snprintf avpriv_snprintf
35
+ #define _snprintf avpriv_snprintf
36
+ #define vsnprintf avpriv_vsnprintf
37
+
38
+ #endif /* COMPAT_MSVCRT_SNPRINTF_H */
bin/ffmpeg/compat/os2threads.h ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Copyright (c) 2011-2017 KO Myung-Hun <[email protected]>
3
+ *
4
+ * This file is part of FFmpeg.
5
+ *
6
+ * FFmpeg is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU Lesser General Public
8
+ * License as published by the Free Software Foundation; either
9
+ * version 2.1 of the License, or (at your option) any later version.
10
+ *
11
+ * FFmpeg is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ * Lesser General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU Lesser General Public
17
+ * License along with FFmpeg; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
+ */
20
+
21
+ /**
22
+ * @file
23
+ * os2threads to pthreads wrapper
24
+ */
25
+
26
+ #ifndef COMPAT_OS2THREADS_H
27
+ #define COMPAT_OS2THREADS_H
28
+
29
+ #define INCL_DOS
30
+ #define INCL_DOSERRORS
31
+ #include <os2.h>
32
+
33
+ #undef __STRICT_ANSI__ /* for _beginthread() */
34
+ #include <stdlib.h>
35
+ #include <time.h>
36
+
37
+ #include <sys/builtin.h>
38
+ #include <sys/fmutex.h>
39
+
40
+ #include "libavutil/attributes.h"
41
+ #include "libavutil/common.h"
42
+ #include "libavutil/time.h"
43
+
44
+ typedef struct {
45
+ TID tid;
46
+ void *(*start_routine)(void *);
47
+ void *arg;
48
+ void *result;
49
+ } pthread_t;
50
+
51
+ typedef void pthread_attr_t;
52
+
53
+ typedef _fmutex pthread_mutex_t;
54
+ typedef void pthread_mutexattr_t;
55
+
56
+ #define PTHREAD_MUTEX_INITIALIZER _FMUTEX_INITIALIZER
57
+
58
+ typedef struct {
59
+ HEV event_sem;
60
+ HEV ack_sem;
61
+ volatile unsigned wait_count;
62
+ } pthread_cond_t;
63
+
64
+ typedef void pthread_condattr_t;
65
+
66
+ typedef struct {
67
+ volatile int done;
68
+ _fmutex mtx;
69
+ } pthread_once_t;
70
+
71
+ #define PTHREAD_ONCE_INIT {0, _FMUTEX_INITIALIZER}
72
+
73
+ static void thread_entry(void *arg)
74
+ {
75
+ pthread_t *thread = arg;
76
+
77
+ thread->result = thread->start_routine(thread->arg);
78
+ }
79
+
80
+ static av_always_inline int pthread_create(pthread_t *thread,
81
+ const pthread_attr_t *attr,
82
+ void *(*start_routine)(void*),
83
+ void *arg)
84
+ {
85
+ thread->start_routine = start_routine;
86
+ thread->arg = arg;
87
+ thread->result = NULL;
88
+
89
+ thread->tid = _beginthread(thread_entry, NULL, 1024 * 1024, thread);
90
+
91
+ return 0;
92
+ }
93
+
94
+ static av_always_inline int pthread_join(pthread_t thread, void **value_ptr)
95
+ {
96
+ DosWaitThread(&thread.tid, DCWW_WAIT);
97
+
98
+ if (value_ptr)
99
+ *value_ptr = thread.result;
100
+
101
+ return 0;
102
+ }
103
+
104
+ static av_always_inline int pthread_mutex_init(pthread_mutex_t *mutex,
105
+ const pthread_mutexattr_t *attr)
106
+ {
107
+ _fmutex_create(mutex, 0);
108
+
109
+ return 0;
110
+ }
111
+
112
+ static av_always_inline int pthread_mutex_destroy(pthread_mutex_t *mutex)
113
+ {
114
+ _fmutex_close(mutex);
115
+
116
+ return 0;
117
+ }
118
+
119
+ static av_always_inline int pthread_mutex_lock(pthread_mutex_t *mutex)
120
+ {
121
+ _fmutex_request(mutex, 0);
122
+
123
+ return 0;
124
+ }
125
+
126
+ static av_always_inline int pthread_mutex_unlock(pthread_mutex_t *mutex)
127
+ {
128
+ _fmutex_release(mutex);
129
+
130
+ return 0;
131
+ }
132
+
133
+ static av_always_inline int pthread_cond_init(pthread_cond_t *cond,
134
+ const pthread_condattr_t *attr)
135
+ {
136
+ DosCreateEventSem(NULL, &cond->event_sem, DCE_POSTONE, FALSE);
137
+ DosCreateEventSem(NULL, &cond->ack_sem, DCE_POSTONE, FALSE);
138
+
139
+ cond->wait_count = 0;
140
+
141
+ return 0;
142
+ }
143
+
144
+ static av_always_inline int pthread_cond_destroy(pthread_cond_t *cond)
145
+ {
146
+ DosCloseEventSem(cond->event_sem);
147
+ DosCloseEventSem(cond->ack_sem);
148
+
149
+ return 0;
150
+ }
151
+
152
+ static av_always_inline int pthread_cond_signal(pthread_cond_t *cond)
153
+ {
154
+ if (!__atomic_cmpxchg32(&cond->wait_count, 0, 0)) {
155
+ DosPostEventSem(cond->event_sem);
156
+ DosWaitEventSem(cond->ack_sem, SEM_INDEFINITE_WAIT);
157
+ }
158
+
159
+ return 0;
160
+ }
161
+
162
+ static av_always_inline int pthread_cond_broadcast(pthread_cond_t *cond)
163
+ {
164
+ while (!__atomic_cmpxchg32(&cond->wait_count, 0, 0))
165
+ pthread_cond_signal(cond);
166
+
167
+ return 0;
168
+ }
169
+
170
+ static av_always_inline int pthread_cond_timedwait(pthread_cond_t *cond,
171
+ pthread_mutex_t *mutex,
172
+ const struct timespec *abstime)
173
+ {
174
+ int64_t abs_milli = abstime->tv_sec * 1000LL + abstime->tv_nsec / 1000000;
175
+ ULONG t = av_clip64(abs_milli - av_gettime() / 1000, 0, ULONG_MAX);
176
+
177
+ __atomic_increment(&cond->wait_count);
178
+
179
+ pthread_mutex_unlock(mutex);
180
+
181
+ APIRET ret = DosWaitEventSem(cond->event_sem, t);
182
+
183
+ __atomic_decrement(&cond->wait_count);
184
+
185
+ DosPostEventSem(cond->ack_sem);
186
+
187
+ pthread_mutex_lock(mutex);
188
+
189
+ return (ret == ERROR_TIMEOUT) ? ETIMEDOUT : 0;
190
+ }
191
+
192
+ static av_always_inline int pthread_cond_wait(pthread_cond_t *cond,
193
+ pthread_mutex_t *mutex)
194
+ {
195
+ __atomic_increment(&cond->wait_count);
196
+
197
+ pthread_mutex_unlock(mutex);
198
+
199
+ DosWaitEventSem(cond->event_sem, SEM_INDEFINITE_WAIT);
200
+
201
+ __atomic_decrement(&cond->wait_count);
202
+
203
+ DosPostEventSem(cond->ack_sem);
204
+
205
+ pthread_mutex_lock(mutex);
206
+
207
+ return 0;
208
+ }
209
+
210
+ static av_always_inline int pthread_once(pthread_once_t *once_control,
211
+ void (*init_routine)(void))
212
+ {
213
+ if (!once_control->done)
214
+ {
215
+ _fmutex_request(&once_control->mtx, 0);
216
+
217
+ if (!once_control->done)
218
+ {
219
+ init_routine();
220
+
221
+ once_control->done = 1;
222
+ }
223
+
224
+ _fmutex_release(&once_control->mtx);
225
+ }
226
+
227
+ return 0;
228
+ }
229
+ #endif /* COMPAT_OS2THREADS_H */
bin/ffmpeg/compat/solaris/make_sunver.pl ADDED
@@ -0,0 +1,352 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env perl
2
+
3
+ # make_sunver.pl
4
+ #
5
+ # Copyright (C) 2010, 2011, 2012, 2013
6
+ # Free Software Foundation, Inc.
7
+ #
8
+ # This file is free software; you can redistribute it and/or modify it
9
+ # under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful, but
14
+ # WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
+ # General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; see the file COPYING.GPLv3. If not see
20
+ # <http://www.gnu.org/licenses/>.
21
+
22
+ # This script takes at least two arguments, a GNU style version script and
23
+ # a list of object and archive files, and generates a corresponding Sun
24
+ # style version script as follows:
25
+ #
26
+ # Each glob pattern, C++ mangled pattern or literal in the input script is
27
+ # matched against all global symbols in the input objects, emitting those
28
+ # that matched (or nothing if no match was found).
29
+ # A comment with the original pattern and its type is left in the output
30
+ # file to make it easy to understand the matches.
31
+ #
32
+ # It uses elfdump when present (native), GNU readelf otherwise.
33
+ # It depends on the GNU version of c++filt, since it must understand the
34
+ # GNU mangling style.
35
+
36
+ use FileHandle;
37
+ use IPC::Open2;
38
+
39
+ # Enforce C locale.
40
+ $ENV{'LC_ALL'} = "C";
41
+ $ENV{'LANG'} = "C";
42
+
43
+ # Input version script, GNU style.
44
+ my $symvers = shift;
45
+
46
+ ##########
47
+ # Get all the symbols from the library, match them, and add them to a hash.
48
+
49
+ my %sym_hash = ();
50
+
51
+ # List of objects and archives to process.
52
+ my @OBJECTS = ();
53
+
54
+ # List of shared objects to omit from processing.
55
+ my @SHAREDOBJS = ();
56
+
57
+ # Filter out those input archives that have corresponding shared objects to
58
+ # avoid adding all symbols matched in the archive to the output map.
59
+ foreach $file (@ARGV) {
60
+ if (($so = $file) =~ s/\.a$/.so/ && -e $so) {
61
+ printf STDERR "omitted $file -> $so\n";
62
+ push (@SHAREDOBJS, $so);
63
+ } else {
64
+ push (@OBJECTS, $file);
65
+ }
66
+ }
67
+
68
+ # We need to detect and ignore hidden symbols. Solaris nm can only detect
69
+ # this in the harder to parse default output format, and GNU nm not at all,
70
+ # so use elfdump -s in the native case and GNU readelf -s otherwise.
71
+ # GNU objdump -t cannot be used since it produces a variable number of
72
+ # columns.
73
+
74
+ # The path to elfdump.
75
+ my $elfdump = "/usr/ccs/bin/elfdump";
76
+
77
+ if (-f $elfdump) {
78
+ open ELFDUMP,$elfdump.' -s '.(join ' ',@OBJECTS).'|' or die $!;
79
+ my $skip_arsym = 0;
80
+
81
+ while (<ELFDUMP>) {
82
+ chomp;
83
+
84
+ # Ignore empty lines.
85
+ if (/^$/) {
86
+ # End of archive symbol table, stop skipping.
87
+ $skip_arsym = 0 if $skip_arsym;
88
+ next;
89
+ }
90
+
91
+ # Keep skipping until end of archive symbol table.
92
+ next if ($skip_arsym);
93
+
94
+ # Ignore object name header for individual objects and archives.
95
+ next if (/:$/);
96
+
97
+ # Ignore table header lines.
98
+ next if (/^Symbol Table Section:/);
99
+ next if (/index.*value.*size/);
100
+
101
+ # Start of archive symbol table: start skipping.
102
+ if (/^Symbol Table: \(archive/) {
103
+ $skip_arsym = 1;
104
+ next;
105
+ }
106
+
107
+ # Split table.
108
+ (undef, undef, undef, undef, $bind, $oth, undef, $shndx, $name) = split;
109
+
110
+ # Error out for unknown input.
111
+ die "unknown input line:\n$_" unless defined($bind);
112
+
113
+ # Ignore local symbols.
114
+ next if ($bind eq "LOCL");
115
+ # Ignore hidden symbols.
116
+ next if ($oth eq "H");
117
+ # Ignore undefined symbols.
118
+ next if ($shndx eq "UNDEF");
119
+ # Error out for unhandled cases.
120
+ if ($bind !~ /^(GLOB|WEAK)/ or $oth ne "D") {
121
+ die "unhandled symbol:\n$_";
122
+ }
123
+
124
+ # Remember symbol.
125
+ $sym_hash{$name}++;
126
+ }
127
+ close ELFDUMP or die "$elfdump error";
128
+ } else {
129
+ open READELF, 'readelf -s -W '.(join ' ',@OBJECTS).'|' or die $!;
130
+ # Process each symbol.
131
+ while (<READELF>) {
132
+ chomp;
133
+
134
+ # Ignore empty lines.
135
+ next if (/^$/);
136
+
137
+ # Ignore object name header.
138
+ next if (/^File: .*$/);
139
+
140
+ # Ignore table header lines.
141
+ next if (/^Symbol table.*contains.*:/);
142
+ next if (/Num:.*Value.*Size/);
143
+
144
+ # Split table.
145
+ (undef, undef, undef, undef, $bind, $vis, $ndx, $name) = split;
146
+
147
+ # Error out for unknown input.
148
+ die "unknown input line:\n$_" unless defined($bind);
149
+
150
+ # Ignore local symbols.
151
+ next if ($bind eq "LOCAL");
152
+ # Ignore hidden symbols.
153
+ next if ($vis eq "HIDDEN");
154
+ # Ignore undefined symbols.
155
+ next if ($ndx eq "UND");
156
+ # Error out for unhandled cases.
157
+ if ($bind !~ /^(GLOBAL|WEAK)/ or $vis ne "DEFAULT") {
158
+ die "unhandled symbol:\n$_";
159
+ }
160
+
161
+ # Remember symbol.
162
+ $sym_hash{$name}++;
163
+ }
164
+ close READELF or die "readelf error";
165
+ }
166
+
167
+ ##########
168
+ # The various types of glob patterns.
169
+ #
170
+ # A glob pattern that is to be applied to the demangled name: 'cxx'.
171
+ # A glob patterns that applies directly to the name in the .o files: 'glob'.
172
+ # This pattern is ignored; used for local variables (usually just '*'): 'ign'.
173
+
174
+ # The type of the current pattern.
175
+ my $glob = 'glob';
176
+
177
+ # We're currently inside `extern "C++"', which Sun ld doesn't understand.
178
+ my $in_extern = 0;
179
+
180
+ # The c++filt command to use. This *must* be GNU c++filt; the Sun Studio
181
+ # c++filt doesn't handle the GNU mangling style.
182
+ my $cxxfilt = $ENV{'CXXFILT'} || "c++filt";
183
+
184
+ # The current version name.
185
+ my $current_version = "";
186
+
187
+ # Was there any attempt to match a symbol to this version?
188
+ my $matches_attempted;
189
+
190
+ # The number of versions which matched this symbol.
191
+ my $matched_symbols;
192
+
193
+ open F,$symvers or die $!;
194
+
195
+ # Print information about generating this file
196
+ print "# This file was generated by make_sunver.pl. DO NOT EDIT!\n";
197
+ print "# It was generated by:\n";
198
+ printf "# %s %s %s\n", $0, $symvers, (join ' ',@ARGV);
199
+ printf "# Omitted archives with corresponding shared libraries: %s\n",
200
+ (join ' ', @SHAREDOBJS) if $#SHAREDOBJS >= 0;
201
+ print "#\n\n";
202
+
203
+ print "\$mapfile_version 2\n";
204
+
205
+ while (<F>) {
206
+ # Lines of the form '};'
207
+ if (/^([ \t]*)(\}[ \t]*;[ \t]*)$/) {
208
+ $glob = 'glob';
209
+ if ($in_extern) {
210
+ $in_extern--;
211
+ print "$1##$2\n";
212
+ } else {
213
+ print;
214
+ }
215
+ next;
216
+ }
217
+
218
+ # Lines of the form '} SOME_VERSION_NAME_1.0;'
219
+ if (/^[ \t]*\}[ \tA-Z0-9_.a-z]+;[ \t]*$/) {
220
+ $glob = 'glob';
221
+ # We tried to match symbols agains this version, but none matched.
222
+ # Emit dummy hidden symbol to avoid marking this version WEAK.
223
+ if ($matches_attempted && $matched_symbols == 0) {
224
+ print " hidden:\n";
225
+ print " .force_WEAK_off_$current_version = DATA S0x0 V0x0;\n";
226
+ }
227
+ print; next;
228
+ }
229
+
230
+ # Comment and blank lines
231
+ if (/^[ \t]*\#/) { print; next; }
232
+ if (/^[ \t]*$/) { print; next; }
233
+
234
+ # Lines of the form '{'
235
+ if (/^([ \t]*){$/) {
236
+ if ($in_extern) {
237
+ print "$1##{\n";
238
+ } else {
239
+ print;
240
+ }
241
+ next;
242
+ }
243
+
244
+ # Lines of the form 'SOME_VERSION_NAME_1.1 {'
245
+ if (/^([A-Z0-9_.]+)[ \t]+{$/) {
246
+ # Record version name.
247
+ $current_version = $1;
248
+ # Reset match attempts, #matched symbols for this version.
249
+ $matches_attempted = 0;
250
+ $matched_symbols = 0;
251
+ print "SYMBOL_VERSION $1 {\n";
252
+ next;
253
+ }
254
+
255
+ # Ignore 'global:'
256
+ if (/^[ \t]*global:$/) { print; next; }
257
+
258
+ # After 'local:', globs should be ignored, they won't be exported.
259
+ if (/^[ \t]*local:$/) {
260
+ $glob = 'ign';
261
+ print;
262
+ next;
263
+ }
264
+
265
+ # After 'extern "C++"', globs are C++ patterns
266
+ if (/^([ \t]*)(extern \"C\+\+\"[ \t]*)$/) {
267
+ $in_extern++;
268
+ $glob = 'cxx';
269
+ # Need to comment, Sun ld cannot handle this.
270
+ print "$1##$2\n"; next;
271
+ }
272
+
273
+ # Chomp newline now we're done with passing through the input file.
274
+ chomp;
275
+
276
+ # Catch globs. Note that '{}' is not allowed in globs by this script,
277
+ # so only '*' and '[]' are available.
278
+ if (/^([ \t]*)([^ \t;{}#]+);?[ \t]*$/) {
279
+ my $ws = $1;
280
+ my $ptn = $2;
281
+ # Turn the glob into a regex by replacing '*' with '.*', '?' with '.'.
282
+ # Keep $ptn so we can still print the original form.
283
+ ($pattern = $ptn) =~ s/\*/\.\*/g;
284
+ $pattern =~ s/\?/\./g;
285
+
286
+ if ($glob eq 'ign') {
287
+ # We're in a local: * section; just continue.
288
+ print "$_\n";
289
+ next;
290
+ }
291
+
292
+ # Print the glob commented for human readers.
293
+ print "$ws##$ptn ($glob)\n";
294
+ # We tried to match a symbol to this version.
295
+ $matches_attempted++;
296
+
297
+ if ($glob eq 'glob') {
298
+ my %ptn_syms = ();
299
+
300
+ # Match ptn against symbols in %sym_hash.
301
+ foreach my $sym (keys %sym_hash) {
302
+ # Maybe it matches one of the patterns based on the symbol in
303
+ # the .o file.
304
+ $ptn_syms{$sym}++ if ($sym =~ /^$pattern$/);
305
+ }
306
+
307
+ foreach my $sym (sort keys(%ptn_syms)) {
308
+ $matched_symbols++;
309
+ print "$ws$sym;\n";
310
+ }
311
+ } elsif ($glob eq 'cxx') {
312
+ my %dem_syms = ();
313
+
314
+ # Verify that we're actually using GNU c++filt. Other versions
315
+ # most likely cannot handle GNU style symbol mangling.
316
+ my $cxxout = `$cxxfilt --version 2>&1`;
317
+ $cxxout =~ m/GNU/ or die "$0 requires GNU c++filt to function";
318
+
319
+ # Talk to c++filt through a pair of file descriptors.
320
+ # Need to start a fresh instance per pattern, otherwise the
321
+ # process grows to 500+ MB.
322
+ my $pid = open2(*FILTIN, *FILTOUT, $cxxfilt) or die $!;
323
+
324
+ # Match ptn against symbols in %sym_hash.
325
+ foreach my $sym (keys %sym_hash) {
326
+ # No? Well, maybe its demangled form matches one of those
327
+ # patterns.
328
+ printf FILTOUT "%s\n",$sym;
329
+ my $dem = <FILTIN>;
330
+ chomp $dem;
331
+ $dem_syms{$sym}++ if ($dem =~ /^$pattern$/);
332
+ }
333
+
334
+ close FILTOUT or die "c++filt error";
335
+ close FILTIN or die "c++filt error";
336
+ # Need to wait for the c++filt process to avoid lots of zombies.
337
+ waitpid $pid, 0;
338
+
339
+ foreach my $sym (sort keys(%dem_syms)) {
340
+ $matched_symbols++;
341
+ print "$ws$sym;\n";
342
+ }
343
+ } else {
344
+ # No? Well, then ignore it.
345
+ }
346
+ next;
347
+ }
348
+ # Important sanity check. This script can't handle lots of formats
349
+ # that GNU ld can, so be sure to error out if one is seen!
350
+ die "strange line `$_'";
351
+ }
352
+ close F;
bin/ffmpeg/compat/strtod.c ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * C99-compatible strtod() implementation
3
+ * Copyright (c) 2012 Ronald S. Bultje <[email protected]>
4
+ *
5
+ * This file is part of FFmpeg.
6
+ *
7
+ * FFmpeg is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU Lesser General Public
9
+ * License as published by the Free Software Foundation; either
10
+ * version 2.1 of the License, or (at your option) any later version.
11
+ *
12
+ * FFmpeg is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ * Lesser General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public
18
+ * License along with FFmpeg; if not, write to the Free Software
19
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
+ */
21
+
22
+ #include <limits.h>
23
+ #include <stdlib.h>
24
+
25
+ #include "libavutil/avstring.h"
26
+ #include "libavutil/mathematics.h"
27
+
28
+ static const char *check_nan_suffix(const char *s)
29
+ {
30
+ const char *start = s;
31
+
32
+ if (*s++ != '(')
33
+ return start;
34
+
35
+ while ((*s >= 'a' && *s <= 'z') || (*s >= 'A' && *s <= 'Z') ||
36
+ (*s >= '0' && *s <= '9') || *s == '_')
37
+ s++;
38
+
39
+ return *s == ')' ? s + 1 : start;
40
+ }
41
+
42
+ #undef strtod
43
+ double strtod(const char *, char **);
44
+
45
+ double avpriv_strtod(const char *nptr, char **endptr)
46
+ {
47
+ const char *end;
48
+ double res;
49
+
50
+ /* Skip leading spaces */
51
+ while (av_isspace(*nptr))
52
+ nptr++;
53
+
54
+ if (!av_strncasecmp(nptr, "infinity", 8)) {
55
+ end = nptr + 8;
56
+ res = INFINITY;
57
+ } else if (!av_strncasecmp(nptr, "inf", 3)) {
58
+ end = nptr + 3;
59
+ res = INFINITY;
60
+ } else if (!av_strncasecmp(nptr, "+infinity", 9)) {
61
+ end = nptr + 9;
62
+ res = INFINITY;
63
+ } else if (!av_strncasecmp(nptr, "+inf", 4)) {
64
+ end = nptr + 4;
65
+ res = INFINITY;
66
+ } else if (!av_strncasecmp(nptr, "-infinity", 9)) {
67
+ end = nptr + 9;
68
+ res = -INFINITY;
69
+ } else if (!av_strncasecmp(nptr, "-inf", 4)) {
70
+ end = nptr + 4;
71
+ res = -INFINITY;
72
+ } else if (!av_strncasecmp(nptr, "nan", 3)) {
73
+ end = check_nan_suffix(nptr + 3);
74
+ res = NAN;
75
+ } else if (!av_strncasecmp(nptr, "+nan", 4) ||
76
+ !av_strncasecmp(nptr, "-nan", 4)) {
77
+ end = check_nan_suffix(nptr + 4);
78
+ res = NAN;
79
+ } else if (!av_strncasecmp(nptr, "0x", 2) ||
80
+ !av_strncasecmp(nptr, "-0x", 3) ||
81
+ !av_strncasecmp(nptr, "+0x", 3)) {
82
+ /* FIXME this doesn't handle exponents, non-integers (float/double)
83
+ * and numbers too large for long long */
84
+ res = strtoll(nptr, (char **)&end, 16);
85
+ } else {
86
+ res = strtod(nptr, (char **)&end);
87
+ }
88
+
89
+ if (endptr)
90
+ *endptr = (char *)end;
91
+
92
+ return res;
93
+ }
bin/ffmpeg/compat/va_copy.h ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * MSVC Compatible va_copy macro
3
+ * Copyright (c) 2012 Derek Buitenhuis
4
+ *
5
+ * This file is part of FFmpeg.
6
+ *
7
+ * FFmpeg is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU Lesser General Public
9
+ * License as published by the Free Software Foundation; either
10
+ * version 2.1 of the License, or (at your option) any later version.
11
+ *
12
+ * FFmpeg is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ * Lesser General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public
18
+ * License along with FFmpeg; if not, write to the Free Software
19
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
+ */
21
+
22
+ #ifndef COMPAT_VA_COPY_H
23
+ #define COMPAT_VA_COPY_H
24
+
25
+ #include <stdarg.h>
26
+
27
+ #if !defined(va_copy) && defined(_MSC_VER)
28
+ #define va_copy(dst, src) ((dst) = (src))
29
+ #endif
30
+ #if !defined(va_copy) && defined(__GNUC__) && __GNUC__ < 3
31
+ #define va_copy(dst, src) __va_copy(dst, src)
32
+ #endif
33
+
34
+ #endif /* COMPAT_VA_COPY_H */
bin/ffmpeg/compat/w32dlfcn.h ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * This file is part of FFmpeg.
3
+ *
4
+ * FFmpeg is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * FFmpeg is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public
15
+ * License along with FFmpeg; if not, write to the Free Software
16
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
19
+ #ifndef COMPAT_W32DLFCN_H
20
+ #define COMPAT_W32DLFCN_H
21
+
22
+ #ifdef _WIN32
23
+ #include <stdint.h>
24
+
25
+ #include <windows.h>
26
+
27
+ #include "config.h"
28
+ #include "libavutil/macros.h"
29
+ #include "libavutil/wchar_filename.h"
30
+
31
+ static inline wchar_t *get_module_filename(HMODULE module)
32
+ {
33
+ wchar_t *path = NULL, *new_path;
34
+ DWORD path_size = 0, path_len;
35
+
36
+ do {
37
+ path_size = path_size ? FFMIN(2 * path_size, INT16_MAX + 1) : MAX_PATH;
38
+ new_path = av_realloc_array(path, path_size, sizeof *path);
39
+ if (!new_path) {
40
+ av_free(path);
41
+ return NULL;
42
+ }
43
+ path = new_path;
44
+ // Returns path_size in case of insufficient buffer.
45
+ // Whether the error is set or not and whether the output
46
+ // is null-terminated or not depends on the version of Windows.
47
+ path_len = GetModuleFileNameW(module, path, path_size);
48
+ } while (path_len && path_size <= INT16_MAX && path_size <= path_len);
49
+
50
+ if (!path_len) {
51
+ av_free(path);
52
+ return NULL;
53
+ }
54
+ return path;
55
+ }
56
+
57
+ /**
58
+ * Safe function used to open dynamic libs. This attempts to improve program security
59
+ * by removing the current directory from the dll search path. Only dll's found in the
60
+ * executable or system directory are allowed to be loaded.
61
+ * @param name The dynamic lib name.
62
+ * @return A handle to the opened lib.
63
+ */
64
+ static inline HMODULE win32_dlopen(const char *name)
65
+ {
66
+ wchar_t *name_w;
67
+ HMODULE module = NULL;
68
+ if (utf8towchar(name, &name_w))
69
+ name_w = NULL;
70
+ #if _WIN32_WINNT < 0x0602
71
+ // On Win7 and earlier we check if KB2533623 is available
72
+ if (!GetProcAddress(GetModuleHandleW(L"kernel32.dll"), "SetDefaultDllDirectories")) {
73
+ wchar_t *path = NULL, *new_path;
74
+ DWORD pathlen, pathsize, namelen;
75
+ if (!name_w)
76
+ goto exit;
77
+ namelen = wcslen(name_w);
78
+ // Try local directory first
79
+ path = get_module_filename(NULL);
80
+ if (!path)
81
+ goto exit;
82
+ new_path = wcsrchr(path, '\\');
83
+ if (!new_path)
84
+ goto exit;
85
+ pathlen = new_path - path;
86
+ pathsize = pathlen + namelen + 2;
87
+ new_path = av_realloc_array(path, pathsize, sizeof *path);
88
+ if (!new_path)
89
+ goto exit;
90
+ path = new_path;
91
+ wcscpy(path + pathlen + 1, name_w);
92
+ module = LoadLibraryExW(path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
93
+ if (module == NULL) {
94
+ // Next try System32 directory
95
+ pathlen = GetSystemDirectoryW(path, pathsize);
96
+ if (!pathlen)
97
+ goto exit;
98
+ // Buffer is not enough in two cases:
99
+ // 1. system directory + \ + module name
100
+ // 2. system directory even without the module name.
101
+ if (pathlen + namelen + 2 > pathsize) {
102
+ pathsize = pathlen + namelen + 2;
103
+ new_path = av_realloc_array(path, pathsize, sizeof *path);
104
+ if (!new_path)
105
+ goto exit;
106
+ path = new_path;
107
+ // Query again to handle the case #2.
108
+ pathlen = GetSystemDirectoryW(path, pathsize);
109
+ if (!pathlen)
110
+ goto exit;
111
+ }
112
+ path[pathlen] = L'\\';
113
+ wcscpy(path + pathlen + 1, name_w);
114
+ module = LoadLibraryExW(path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
115
+ }
116
+ exit:
117
+ av_free(path);
118
+ av_free(name_w);
119
+ return module;
120
+ }
121
+ #endif
122
+ #ifndef LOAD_LIBRARY_SEARCH_APPLICATION_DIR
123
+ # define LOAD_LIBRARY_SEARCH_APPLICATION_DIR 0x00000200
124
+ #endif
125
+ #ifndef LOAD_LIBRARY_SEARCH_SYSTEM32
126
+ # define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800
127
+ #endif
128
+ #if HAVE_WINRT
129
+ if (!name_w)
130
+ return NULL;
131
+ module = LoadPackagedLibrary(name_w, 0);
132
+ #else
133
+ #define LOAD_FLAGS (LOAD_LIBRARY_SEARCH_APPLICATION_DIR | LOAD_LIBRARY_SEARCH_SYSTEM32)
134
+ /* filename may be be in CP_ACP */
135
+ if (!name_w)
136
+ return LoadLibraryExA(name, NULL, LOAD_FLAGS);
137
+ module = LoadLibraryExW(name_w, NULL, LOAD_FLAGS);
138
+ #undef LOAD_FLAGS
139
+ #endif
140
+ av_free(name_w);
141
+ return module;
142
+ }
143
+ #define dlopen(name, flags) win32_dlopen(name)
144
+ #define dlclose FreeLibrary
145
+ #define dlsym GetProcAddress
146
+ #else
147
+ #include <dlfcn.h>
148
+ #endif
149
+
150
+ #endif /* COMPAT_W32DLFCN_H */
bin/ffmpeg/compat/w32pthreads.h ADDED
@@ -0,0 +1,191 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Copyright (C) 2010-2011 x264 project
3
+ *
4
+ * Authors: Steven Walters <[email protected]>
5
+ * Pegasys Inc. <http://www.pegasys-inc.com>
6
+ *
7
+ * This file is part of FFmpeg.
8
+ *
9
+ * FFmpeg is free software; you can redistribute it and/or
10
+ * modify it under the terms of the GNU Lesser General Public
11
+ * License as published by the Free Software Foundation; either
12
+ * version 2.1 of the License, or (at your option) any later version.
13
+ *
14
+ * FFmpeg is distributed in the hope that it will be useful,
15
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
+ * Lesser General Public License for more details.
18
+ *
19
+ * You should have received a copy of the GNU Lesser General Public
20
+ * License along with FFmpeg; if not, write to the Free Software
21
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22
+ */
23
+
24
+ /**
25
+ * @file
26
+ * w32threads to pthreads wrapper
27
+ */
28
+
29
+ #ifndef COMPAT_W32PTHREADS_H
30
+ #define COMPAT_W32PTHREADS_H
31
+
32
+ /* Build up a pthread-like API using underlying Windows API. Have only static
33
+ * methods so as to not conflict with a potentially linked in pthread-win32
34
+ * library.
35
+ * As most functions here are used without checking return values,
36
+ * only implement return values as necessary. */
37
+
38
+ #define WIN32_LEAN_AND_MEAN
39
+ #include <windows.h>
40
+ #include <process.h>
41
+ #include <time.h>
42
+
43
+ #include "libavutil/attributes.h"
44
+ #include "libavutil/common.h"
45
+ #include "libavutil/internal.h"
46
+ #include "libavutil/mem.h"
47
+ #include "libavutil/time.h"
48
+
49
+ typedef struct pthread_t {
50
+ void *handle;
51
+ void *(*func)(void* arg);
52
+ void *arg;
53
+ void *ret;
54
+ } pthread_t;
55
+
56
+ /* use light weight mutex/condition variable API for Windows Vista and later */
57
+ typedef SRWLOCK pthread_mutex_t;
58
+ typedef CONDITION_VARIABLE pthread_cond_t;
59
+
60
+ #define PTHREAD_MUTEX_INITIALIZER SRWLOCK_INIT
61
+ #define PTHREAD_COND_INITIALIZER CONDITION_VARIABLE_INIT
62
+
63
+ #define InitializeCriticalSection(x) InitializeCriticalSectionEx(x, 0, 0)
64
+ #define WaitForSingleObject(a, b) WaitForSingleObjectEx(a, b, FALSE)
65
+
66
+ #define PTHREAD_CANCEL_ENABLE 1
67
+ #define PTHREAD_CANCEL_DISABLE 0
68
+
69
+ static av_unused unsigned __stdcall attribute_align_arg win32thread_worker(void *arg)
70
+ {
71
+ pthread_t *h = (pthread_t*)arg;
72
+ h->ret = h->func(h->arg);
73
+ return 0;
74
+ }
75
+
76
+ static av_unused int pthread_create(pthread_t *thread, const void *unused_attr,
77
+ void *(*start_routine)(void*), void *arg)
78
+ {
79
+ thread->func = start_routine;
80
+ thread->arg = arg;
81
+ #if HAVE_WINRT
82
+ thread->handle = (void*)CreateThread(NULL, 0, win32thread_worker, thread,
83
+ 0, NULL);
84
+ #else
85
+ thread->handle = (void*)_beginthreadex(NULL, 0, win32thread_worker, thread,
86
+ 0, NULL);
87
+ #endif
88
+ return !thread->handle;
89
+ }
90
+
91
+ static av_unused int pthread_join(pthread_t thread, void **value_ptr)
92
+ {
93
+ DWORD ret = WaitForSingleObject(thread.handle, INFINITE);
94
+ if (ret != WAIT_OBJECT_0) {
95
+ if (ret == WAIT_ABANDONED)
96
+ return EINVAL;
97
+ else
98
+ return EDEADLK;
99
+ }
100
+ if (value_ptr)
101
+ *value_ptr = thread.ret;
102
+ CloseHandle(thread.handle);
103
+ return 0;
104
+ }
105
+
106
+ static inline int pthread_mutex_init(pthread_mutex_t *m, void* attr)
107
+ {
108
+ InitializeSRWLock(m);
109
+ return 0;
110
+ }
111
+ static inline int pthread_mutex_destroy(pthread_mutex_t *m)
112
+ {
113
+ /* Unlocked SWR locks use no resources */
114
+ return 0;
115
+ }
116
+ static inline int pthread_mutex_lock(pthread_mutex_t *m)
117
+ {
118
+ AcquireSRWLockExclusive(m);
119
+ return 0;
120
+ }
121
+ static inline int pthread_mutex_unlock(pthread_mutex_t *m)
122
+ {
123
+ ReleaseSRWLockExclusive(m);
124
+ return 0;
125
+ }
126
+
127
+ typedef INIT_ONCE pthread_once_t;
128
+ #define PTHREAD_ONCE_INIT INIT_ONCE_STATIC_INIT
129
+
130
+ static av_unused int pthread_once(pthread_once_t *once_control, void (*init_routine)(void))
131
+ {
132
+ BOOL pending = FALSE;
133
+ InitOnceBeginInitialize(once_control, 0, &pending, NULL);
134
+ if (pending)
135
+ init_routine();
136
+ InitOnceComplete(once_control, 0, NULL);
137
+ return 0;
138
+ }
139
+
140
+ static inline int pthread_cond_init(pthread_cond_t *cond, const void *unused_attr)
141
+ {
142
+ InitializeConditionVariable(cond);
143
+ return 0;
144
+ }
145
+
146
+ /* native condition variables do not destroy */
147
+ static inline int pthread_cond_destroy(pthread_cond_t *cond)
148
+ {
149
+ return 0;
150
+ }
151
+
152
+ static inline int pthread_cond_broadcast(pthread_cond_t *cond)
153
+ {
154
+ WakeAllConditionVariable(cond);
155
+ return 0;
156
+ }
157
+
158
+ static inline int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
159
+ {
160
+ SleepConditionVariableSRW(cond, mutex, INFINITE, 0);
161
+ return 0;
162
+ }
163
+
164
+ static inline int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
165
+ const struct timespec *abstime)
166
+ {
167
+ int64_t abs_milli = abstime->tv_sec * 1000LL + abstime->tv_nsec / 1000000;
168
+ DWORD t = av_clip64(abs_milli - av_gettime() / 1000, 0, UINT32_MAX);
169
+
170
+ if (!SleepConditionVariableSRW(cond, mutex, t, 0)) {
171
+ DWORD err = GetLastError();
172
+ if (err == ERROR_TIMEOUT)
173
+ return ETIMEDOUT;
174
+ else
175
+ return EINVAL;
176
+ }
177
+ return 0;
178
+ }
179
+
180
+ static inline int pthread_cond_signal(pthread_cond_t *cond)
181
+ {
182
+ WakeConditionVariable(cond);
183
+ return 0;
184
+ }
185
+
186
+ static inline int pthread_setcancelstate(int state, int *oldstate)
187
+ {
188
+ return 0;
189
+ }
190
+
191
+ #endif /* COMPAT_W32PTHREADS_H */
bin/ffmpeg/compat/windows/makedef ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/sh
2
+
3
+ # Copyright (c) 2013, Derek Buitenhuis
4
+ #
5
+ # Permission to use, copy, modify, and/or distribute this software for any
6
+ # purpose with or without fee is hereby granted, provided that the above
7
+ # copyright notice and this permission notice appear in all copies.
8
+ #
9
+ # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
+
17
+ # mktemp isn't POSIX, so supply an implementation
18
+ mktemp() {
19
+ echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
20
+ }
21
+
22
+ if [ $# -lt 2 ]; then
23
+ echo "Usage: makedef <version_script> <objects>" >&2
24
+ exit 0
25
+ fi
26
+
27
+ vscript=$1
28
+ shift
29
+
30
+ if [ ! -f "$vscript" ]; then
31
+ echo "Version script does not exist" >&2
32
+ exit 1
33
+ fi
34
+
35
+ for object in "$@"; do
36
+ if [ ! -f "$object" ]; then
37
+ echo "Object does not exist: ${object}" >&2
38
+ exit 1
39
+ fi
40
+ done
41
+
42
+ # Create a lib temporarily to dump symbols from.
43
+ # It's just much easier to do it this way
44
+ libname=$(mktemp -u "library").lib
45
+
46
+ trap 'rm -f -- $libname' EXIT
47
+
48
+ if [ -n "$AR" ]; then
49
+ $AR rcs ${libname} $@ >/dev/null
50
+ else
51
+ lib.exe -out:${libname} $@ >/dev/null
52
+ fi
53
+ if [ $? != 0 ]; then
54
+ echo "Could not create temporary library." >&2
55
+ exit 1
56
+ fi
57
+
58
+ IFS='
59
+ '
60
+
61
+ prefix="$EXTERN_PREFIX"
62
+
63
+ started=0
64
+ regex="none"
65
+
66
+ for line in $(cat ${vscript} | tr '\t' ' '); do
67
+ # We only care about global symbols
68
+ echo "${line}" | grep -q '^ \+global:'
69
+ if [ $? = 0 ]; then
70
+ started=1
71
+ line=$(echo "${line}" | sed -e 's/^ \{1,\}global: *//')
72
+ else
73
+ echo "${line}" | grep -q '^ \+local:'
74
+ if [ $? = 0 ]; then
75
+ started=0
76
+ fi
77
+ fi
78
+
79
+ if [ ${started} = 0 ]; then
80
+ continue
81
+ fi
82
+
83
+ # Handle multiple symbols on one line
84
+ IFS=';'
85
+
86
+ # Work around stupid expansion to filenames
87
+ line=$(echo "${line}" | sed -e 's/\*/.\\+/g')
88
+ for exp in ${line}; do
89
+ # Remove leading and trailing whitespace
90
+ exp=$(echo "${exp}" | sed -e 's/^ *//' -e 's/ *$//')
91
+
92
+ if [ "${regex}" = "none" ]; then
93
+ regex="${exp}"
94
+ else
95
+ regex="${regex};${exp}"
96
+ fi
97
+ done
98
+
99
+ IFS='
100
+ '
101
+ done
102
+
103
+ if [ -n "$NM" ]; then
104
+ # Use eval, since NM="nm -g"
105
+ dump=$(eval "$NM --defined-only -g ${libname}" |
106
+ grep -v : |
107
+ grep -v ^$ |
108
+ cut -d' ' -f3 |
109
+ sed -e "s/^${prefix}//")
110
+ else
111
+ dump=$(dumpbin.exe -linkermember:1 ${libname} |
112
+ sed -e '/public symbols/,$!d' -e '/^ \{1,\}Summary/,$d' -e "s/ \{1,\}${prefix}/ /" -e 's/ \{1,\}/ /g' |
113
+ tail -n +2 |
114
+ cut -d' ' -f3)
115
+ fi
116
+
117
+ rm ${libname}
118
+
119
+ IFS=';'
120
+ list=""
121
+ for exp in ${regex}; do
122
+ list="${list}"'
123
+ '$(echo "${dump}" |
124
+ grep "^${exp}" |
125
+ sed -e 's/^/ /')
126
+ done
127
+
128
+ echo "EXPORTS"
129
+ echo "${list}" | sort | uniq | tail -n +2
bin/ffmpeg/compat/windows/mslink ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/sh
2
+
3
+ LINK_EXE_PATH=$(dirname "$(command -v cl)")/link
4
+ if [ -x "$LINK_EXE_PATH" ]; then
5
+ "$LINK_EXE_PATH" $@
6
+ else
7
+ link.exe $@
8
+ fi
9
+ exit $?
bin/ffmpeg/compat/windows/mswindres ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/sh
2
+
3
+ if [ "$1" = "--version" ]; then
4
+ rc.exe -?
5
+ exit $?
6
+ fi
7
+
8
+ if [ $# -lt 2 ]; then
9
+ echo "Usage: mswindres [-I/include/path ...] [-DSOME_DEFINE ...] [-o output.o] input.rc [output.o]" >&2
10
+ exit 0
11
+ fi
12
+
13
+ EXTRA_OPTS="-nologo"
14
+
15
+ while [ $# -gt 2 ]; do
16
+ case $1 in
17
+ -D*) EXTRA_OPTS="$EXTRA_OPTS -d$(echo $1 | sed -e "s/^..//" -e "s/ /\\\\ /g")" ;;
18
+ -I*) EXTRA_OPTS="$EXTRA_OPTS -i$(echo $1 | sed -e "s/^..//" -e "s/ /\\\\ /g")" ;;
19
+ -o) OPT_OUT="$2"; shift ;;
20
+ esac
21
+ shift
22
+ done
23
+
24
+ IN="$1"
25
+ if [ -z "$OPT_OUT" ]; then
26
+ OUT="$2"
27
+ else
28
+ OUT="$OPT_OUT"
29
+ fi
30
+
31
+ eval set -- $EXTRA_OPTS
32
+ rc.exe "$@" -fo "$OUT" "$IN"
bin/ffmpeg/configure ADDED
The diff for this file is too large to render. See raw diff
 
bin/ffmpeg/doc/APIchanges ADDED
The diff for this file is too large to render. See raw diff
 
bin/ffmpeg/doc/Doxyfile ADDED
The diff for this file is too large to render. See raw diff
 
bin/ffmpeg/doc/Makefile ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ LIBRARIES-$(CONFIG_AVUTIL) += libavutil
2
+ LIBRARIES-$(CONFIG_SWSCALE) += libswscale
3
+ LIBRARIES-$(CONFIG_SWRESAMPLE) += libswresample
4
+ LIBRARIES-$(CONFIG_AVCODEC) += libavcodec
5
+ LIBRARIES-$(CONFIG_AVFORMAT) += libavformat
6
+ LIBRARIES-$(CONFIG_AVDEVICE) += libavdevice
7
+ LIBRARIES-$(CONFIG_AVFILTER) += libavfilter
8
+
9
+ COMPONENTS-$(CONFIG_AVUTIL) += ffmpeg-utils
10
+ COMPONENTS-$(CONFIG_SWSCALE) += ffmpeg-scaler
11
+ COMPONENTS-$(CONFIG_SWRESAMPLE) += ffmpeg-resampler
12
+ COMPONENTS-$(CONFIG_AVCODEC) += ffmpeg-codecs ffmpeg-bitstream-filters
13
+ COMPONENTS-$(CONFIG_AVFORMAT) += ffmpeg-formats ffmpeg-protocols
14
+ COMPONENTS-$(CONFIG_AVDEVICE) += ffmpeg-devices
15
+ COMPONENTS-$(CONFIG_AVFILTER) += ffmpeg-filters
16
+
17
+ MANPAGES1 = $(AVPROGS-yes:%=doc/%.1) $(AVPROGS-yes:%=doc/%-all.1) $(COMPONENTS-yes:%=doc/%.1)
18
+ MANPAGES3 = $(LIBRARIES-yes:%=doc/%.3)
19
+ MANPAGES = $(MANPAGES1) $(MANPAGES3)
20
+ PODPAGES = $(AVPROGS-yes:%=doc/%.pod) $(AVPROGS-yes:%=doc/%-all.pod) $(COMPONENTS-yes:%=doc/%.pod) $(LIBRARIES-yes:%=doc/%.pod)
21
+ HTMLPAGES = $(AVPROGS-yes:%=doc/%.html) $(AVPROGS-yes:%=doc/%-all.html) $(COMPONENTS-yes:%=doc/%.html) $(LIBRARIES-yes:%=doc/%.html) \
22
+ doc/developer.html \
23
+ doc/faq.html \
24
+ doc/fate.html \
25
+ doc/general.html \
26
+ doc/git-howto.html \
27
+ doc/mailing-list-faq.html \
28
+ doc/nut.html \
29
+ doc/platform.html \
30
+ $(SRC_PATH)/doc/bootstrap.min.css \
31
+ $(SRC_PATH)/doc/style.min.css \
32
+ $(SRC_PATH)/doc/default.css \
33
+
34
+ TXTPAGES = doc/fate.txt \
35
+
36
+
37
+ DOCS-$(CONFIG_HTMLPAGES) += $(HTMLPAGES)
38
+ DOCS-$(CONFIG_PODPAGES) += $(PODPAGES)
39
+ DOCS-$(CONFIG_MANPAGES) += $(MANPAGES)
40
+ DOCS-$(CONFIG_TXTPAGES) += $(TXTPAGES)
41
+ DOCS = $(DOCS-yes)
42
+
43
+ all-$(CONFIG_DOC): doc
44
+
45
+ doc: documentation
46
+
47
+ apidoc: doc/doxy/html
48
+ documentation: $(DOCS)
49
+
50
+ TEXIDEP = perl $(SRC_PATH)/doc/texidep.pl $(SRC_PATH) $< $@ >$(@:%=%.d)
51
+
52
+ doc/%.txt: TAG = TXT
53
+ doc/%.txt: doc/%.texi
54
+ $(Q)$(TEXIDEP)
55
+ $(M)makeinfo --force --no-headers -o $@ $< 2>/dev/null
56
+
57
+ GENTEXI = format codec
58
+ GENTEXI := $(GENTEXI:%=doc/avoptions_%.texi)
59
+
60
+ $(GENTEXI): TAG = GENTEXI
61
+ $(GENTEXI): doc/avoptions_%.texi: doc/print_options$(HOSTEXESUF)
62
+ $(M)doc/print_options $* > $@
63
+
64
+ doc/%.html: TAG = HTML
65
+ doc/%-all.html: TAG = HTML
66
+
67
+ ifdef HAVE_MAKEINFO_HTML
68
+ doc/%.html: doc/%.texi $(SRC_PATH)/doc/t2h.pm $(GENTEXI)
69
+ $(Q)$(TEXIDEP)
70
+ $(M)makeinfo --html -I doc --no-split -D config-not-all --init-file=$(SRC_PATH)/doc/t2h.pm --output $@ $<
71
+
72
+ doc/%-all.html: doc/%.texi $(SRC_PATH)/doc/t2h.pm $(GENTEXI)
73
+ $(Q)$(TEXIDEP)
74
+ $(M)makeinfo --html -I doc --no-split -D config-all --init-file=$(SRC_PATH)/doc/t2h.pm --output $@ $<
75
+ else
76
+ doc/%.html: doc/%.texi $(SRC_PATH)/doc/t2h.init $(GENTEXI)
77
+ $(Q)$(TEXIDEP)
78
+ $(M)texi2html -I doc -monolithic --D=config-not-all --init-file $(SRC_PATH)/doc/t2h.init --output $@ $<
79
+
80
+ doc/%-all.html: doc/%.texi $(SRC_PATH)/doc/t2h.init $(GENTEXI)
81
+ $(Q)$(TEXIDEP)
82
+ $(M)texi2html -I doc -monolithic --D=config-all --init-file $(SRC_PATH)/doc/t2h.init --output $@ $<
83
+ endif
84
+
85
+ doc/%.pod: TAG = POD
86
+ doc/%.pod: doc/%.texi $(SRC_PATH)/doc/texi2pod.pl $(GENTEXI)
87
+ $(Q)$(TEXIDEP)
88
+ $(M)perl $(SRC_PATH)/doc/texi2pod.pl -Dconfig-not-all=yes -Idoc $< $@
89
+
90
+ doc/%-all.pod: TAG = POD
91
+ doc/%-all.pod: doc/%.texi $(SRC_PATH)/doc/texi2pod.pl $(GENTEXI)
92
+ $(Q)$(TEXIDEP)
93
+ $(M)perl $(SRC_PATH)/doc/texi2pod.pl -Dconfig-all=yes -Idoc $< $@
94
+
95
+ doc/%.1 doc/%.3: TAG = MAN
96
+ doc/%.1: doc/%.pod $(GENTEXI)
97
+ $(M)pod2man --section=1 --center=" " --release=" " --date=" " $< > $@
98
+ doc/%.3: doc/%.pod $(GENTEXI)
99
+ $(M)pod2man --section=3 --center=" " --release=" " --date=" " $< > $@
100
+
101
+ $(DOCS) doc/doxy/html: | doc/
102
+
103
+ DOXY_INPUT = $(INSTHEADERS)
104
+ DOXY_INPUT_DEPS = $(addprefix $(SRC_PATH)/, $(DOXY_INPUT)) ffbuild/config.mak
105
+
106
+ doc/doxy/html: TAG = DOXY
107
+ doc/doxy/html: $(SRC_PATH)/doc/Doxyfile $(SRC_PATH)/doc/doxy-wrapper.sh $(DOXY_INPUT_DEPS)
108
+ $(M)$(SRC_PATH)/doc/doxy-wrapper.sh $$PWD/doc/doxy $(SRC_PATH) doc/Doxyfile $(DOXYGEN) $(DOXY_INPUT);
109
+
110
+ install-doc: install-html install-man
111
+
112
+ install-html:
113
+
114
+ install-man:
115
+
116
+ ifdef CONFIG_HTMLPAGES
117
+ install-progs-$(CONFIG_DOC): install-html
118
+
119
+ install-html: $(HTMLPAGES)
120
+ $(Q)mkdir -p "$(DOCDIR)"
121
+ $(INSTALL) -m 644 $(HTMLPAGES) "$(DOCDIR)"
122
+ endif
123
+
124
+ ifdef CONFIG_MANPAGES
125
+ install-progs-$(CONFIG_DOC): install-man
126
+
127
+ install-man: $(MANPAGES)
128
+ $(Q)mkdir -p "$(MANDIR)/man1"
129
+ $(INSTALL) -m 644 $(MANPAGES1) "$(MANDIR)/man1"
130
+ $(Q)mkdir -p "$(MANDIR)/man3"
131
+ $(INSTALL) -m 644 $(MANPAGES3) "$(MANDIR)/man3"
132
+ endif
133
+
134
+ uninstall: uninstall-doc
135
+
136
+ uninstall-doc: uninstall-html uninstall-man
137
+
138
+ uninstall-html:
139
+ $(RM) -r "$(DOCDIR)"
140
+
141
+ uninstall-man:
142
+ $(RM) $(addprefix "$(MANDIR)/man1/",$(AVPROGS-yes:%=%.1) $(AVPROGS-yes:%=%-all.1) $(COMPONENTS-yes:%=%.1))
143
+ $(RM) $(addprefix "$(MANDIR)/man3/",$(LIBRARIES-yes:%=%.3))
144
+
145
+ clean:: docclean
146
+
147
+ distclean:: docclean
148
+ $(RM) doc/config.texi
149
+
150
+ docclean::
151
+ $(RM) $(CLEANSUFFIXES:%=doc/%)
152
+ $(RM) $(TXTPAGES) doc/*.html doc/*.pod doc/*.1 doc/*.3 doc/avoptions_*.texi
153
+ $(RM) -r doc/doxy/html
154
+
155
+ -include $(wildcard $(DOCS:%=%.d))
156
+
157
+ .PHONY: apidoc doc documentation
bin/ffmpeg/doc/authors.texi ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @chapter Authors
2
+
3
+ The FFmpeg developers.
4
+
5
+ For details about the authorship, see the Git history of the project
6
+ (git://source.ffmpeg.org/ffmpeg), e.g. by typing the command
7
+ @command{git log} in the FFmpeg source directory, or browsing the
8
+ online repository at @url{http://source.ffmpeg.org}.
9
+
10
+ Maintainers for the specific components are listed in the file
11
+ @file{MAINTAINERS} in the source code tree.
bin/ffmpeg/doc/bitstream_filters.texi ADDED
@@ -0,0 +1,949 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @chapter Bitstream Filters
2
+ @c man begin BITSTREAM FILTERS
3
+
4
+ When you configure your FFmpeg build, all the supported bitstream
5
+ filters are enabled by default. You can list all available ones using
6
+ the configure option @code{--list-bsfs}.
7
+
8
+ You can disable all the bitstream filters using the configure option
9
+ @code{--disable-bsfs}, and selectively enable any bitstream filter using
10
+ the option @code{--enable-bsf=BSF}, or you can disable a particular
11
+ bitstream filter using the option @code{--disable-bsf=BSF}.
12
+
13
+ The option @code{-bsfs} of the ff* tools will display the list of
14
+ all the supported bitstream filters included in your build.
15
+
16
+ The ff* tools have a -bsf option applied per stream, taking a
17
+ comma-separated list of filters, whose parameters follow the filter
18
+ name after a '='.
19
+
20
+ @example
21
+ ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1:opt2=str2][,filter2] OUTPUT
22
+ @end example
23
+
24
+ Below is a description of the currently available bitstream filters,
25
+ with their parameters, if any.
26
+
27
+ @section aac_adtstoasc
28
+
29
+ Convert MPEG-2/4 AAC ADTS to an MPEG-4 Audio Specific Configuration
30
+ bitstream.
31
+
32
+ This filter creates an MPEG-4 AudioSpecificConfig from an MPEG-2/4
33
+ ADTS header and removes the ADTS header.
34
+
35
+ This filter is required for example when copying an AAC stream from a
36
+ raw ADTS AAC or an MPEG-TS container to MP4A-LATM, to an FLV file, or
37
+ to MOV/MP4 files and related formats such as 3GP or M4A. Please note
38
+ that it is auto-inserted for MP4A-LATM and MOV/MP4 and related formats.
39
+
40
+ @section av1_metadata
41
+
42
+ Modify metadata embedded in an AV1 stream.
43
+
44
+ @table @option
45
+ @item td
46
+ Insert or remove temporal delimiter OBUs in all temporal units of the
47
+ stream.
48
+
49
+ @table @samp
50
+ @item insert
51
+ Insert a TD at the beginning of every TU which does not already have one.
52
+ @item remove
53
+ Remove the TD from the beginning of every TU which has one.
54
+ @end table
55
+
56
+ @item color_primaries
57
+ @item transfer_characteristics
58
+ @item matrix_coefficients
59
+ Set the color description fields in the stream (see AV1 section 6.4.2).
60
+
61
+ @item color_range
62
+ Set the color range in the stream (see AV1 section 6.4.2; note that
63
+ this cannot be set for streams using BT.709 primaries, sRGB transfer
64
+ characteristic and identity (RGB) matrix coefficients).
65
+ @table @samp
66
+ @item tv
67
+ Limited range.
68
+ @item pc
69
+ Full range.
70
+ @end table
71
+
72
+ @item chroma_sample_position
73
+ Set the chroma sample location in the stream (see AV1 section 6.4.2).
74
+ This can only be set for 4:2:0 streams.
75
+
76
+ @table @samp
77
+ @item vertical
78
+ Left position (matching the default in MPEG-2 and H.264).
79
+ @item colocated
80
+ Top-left position.
81
+ @end table
82
+
83
+ @item tick_rate
84
+ Set the tick rate (@emph{time_scale / num_units_in_display_tick}) in
85
+ the timing info in the sequence header.
86
+ @item num_ticks_per_picture
87
+ Set the number of ticks in each picture, to indicate that the stream
88
+ has a fixed framerate. Ignored if @option{tick_rate} is not also set.
89
+
90
+ @item delete_padding
91
+ Deletes Padding OBUs.
92
+
93
+ @end table
94
+
95
+ @section chomp
96
+
97
+ Remove zero padding at the end of a packet.
98
+
99
+ @section dca_core
100
+
101
+ Extract the core from a DCA/DTS stream, dropping extensions such as
102
+ DTS-HD.
103
+
104
+ @section dump_extra
105
+
106
+ Add extradata to the beginning of the filtered packets except when
107
+ said packets already exactly begin with the extradata that is intended
108
+ to be added.
109
+
110
+ @table @option
111
+ @item freq
112
+ The additional argument specifies which packets should be filtered.
113
+ It accepts the values:
114
+ @table @samp
115
+ @item k
116
+ @item keyframe
117
+ add extradata to all key packets
118
+
119
+ @item e
120
+ @item all
121
+ add extradata to all packets
122
+ @end table
123
+ @end table
124
+
125
+ If not specified it is assumed @samp{k}.
126
+
127
+ For example the following @command{ffmpeg} command forces a global
128
+ header (thus disabling individual packet headers) in the H.264 packets
129
+ generated by the @code{libx264} encoder, but corrects them by adding
130
+ the header stored in extradata to the key packets:
131
+ @example
132
+ ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts
133
+ @end example
134
+
135
+ @section dv_error_marker
136
+
137
+ Blocks in DV which are marked as damaged are replaced by blocks of the specified color.
138
+
139
+ @table @option
140
+ @item color
141
+ The color to replace damaged blocks by
142
+ @item sta
143
+ A 16 bit mask which specifies which of the 16 possible error status values are
144
+ to be replaced by colored blocks. 0xFFFE is the default which replaces all non 0
145
+ error status values.
146
+ @table @samp
147
+ @item ok
148
+ No error, no concealment
149
+ @item err
150
+ Error, No concealment
151
+ @item res
152
+ Reserved
153
+ @item notok
154
+ Error or concealment
155
+ @item notres
156
+ Not reserved
157
+ @item Aa, Ba, Ca, Ab, Bb, Cb, A, B, C, a, b, erri, erru
158
+ The specific error status code
159
+ @end table
160
+ see page 44-46 or section 5.5 of
161
+ @url{http://web.archive.org/web/20060927044735/http://www.smpte.org/smpte_store/standards/pdf/s314m.pdf}
162
+
163
+ @end table
164
+
165
+ @section eac3_core
166
+
167
+ Extract the core from a E-AC-3 stream, dropping extra channels.
168
+
169
+ @section extract_extradata
170
+
171
+ Extract the in-band extradata.
172
+
173
+ Certain codecs allow the long-term headers (e.g. MPEG-2 sequence headers,
174
+ or H.264/HEVC (VPS/)SPS/PPS) to be transmitted either "in-band" (i.e. as a part
175
+ of the bitstream containing the coded frames) or "out of band" (e.g. on the
176
+ container level). This latter form is called "extradata" in FFmpeg terminology.
177
+
178
+ This bitstream filter detects the in-band headers and makes them available as
179
+ extradata.
180
+
181
+ @table @option
182
+ @item remove
183
+ When this option is enabled, the long-term headers are removed from the
184
+ bitstream after extraction.
185
+ @end table
186
+
187
+ @section filter_units
188
+
189
+ Remove units with types in or not in a given set from the stream.
190
+
191
+ @table @option
192
+ @item pass_types
193
+ List of unit types or ranges of unit types to pass through while removing
194
+ all others. This is specified as a '|'-separated list of unit type values
195
+ or ranges of values with '-'.
196
+
197
+ @item remove_types
198
+ Identical to @option{pass_types}, except the units in the given set
199
+ removed and all others passed through.
200
+ @end table
201
+
202
+ Extradata is unchanged by this transformation, but note that if the stream
203
+ contains inline parameter sets then the output may be unusable if they are
204
+ removed.
205
+
206
+ For example, to remove all non-VCL NAL units from an H.264 stream:
207
+ @example
208
+ ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=pass_types=1-5' OUTPUT
209
+ @end example
210
+
211
+ To remove all AUDs, SEI and filler from an H.265 stream:
212
+ @example
213
+ ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=35|38-40' OUTPUT
214
+ @end example
215
+
216
+ @section hapqa_extract
217
+
218
+ Extract Rgb or Alpha part of an HAPQA file, without recompression, in order to create an HAPQ or an HAPAlphaOnly file.
219
+
220
+ @table @option
221
+ @item texture
222
+ Specifies the texture to keep.
223
+
224
+ @table @option
225
+ @item color
226
+ @item alpha
227
+ @end table
228
+
229
+ @end table
230
+
231
+ Convert HAPQA to HAPQ
232
+ @example
233
+ ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=color -tag:v HapY -metadata:s:v:0 encoder="HAPQ" hapq_file.mov
234
+ @end example
235
+
236
+ Convert HAPQA to HAPAlphaOnly
237
+ @example
238
+ ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=alpha -tag:v HapA -metadata:s:v:0 encoder="HAPAlpha Only" hapalphaonly_file.mov
239
+ @end example
240
+
241
+ @section h264_metadata
242
+
243
+ Modify metadata embedded in an H.264 stream.
244
+
245
+ @table @option
246
+ @item aud
247
+ Insert or remove AUD NAL units in all access units of the stream.
248
+
249
+ @table @samp
250
+ @item pass
251
+ @item insert
252
+ @item remove
253
+ @end table
254
+
255
+ Default is pass.
256
+
257
+ @item sample_aspect_ratio
258
+ Set the sample aspect ratio of the stream in the VUI parameters.
259
+ See H.264 table E-1.
260
+
261
+ @item overscan_appropriate_flag
262
+ Set whether the stream is suitable for display using overscan
263
+ or not (see H.264 section E.2.1).
264
+
265
+ @item video_format
266
+ @item video_full_range_flag
267
+ Set the video format in the stream (see H.264 section E.2.1 and
268
+ table E-2).
269
+
270
+ @item colour_primaries
271
+ @item transfer_characteristics
272
+ @item matrix_coefficients
273
+ Set the colour description in the stream (see H.264 section E.2.1
274
+ and tables E-3, E-4 and E-5).
275
+
276
+ @item chroma_sample_loc_type
277
+ Set the chroma sample location in the stream (see H.264 section
278
+ E.2.1 and figure E-1).
279
+
280
+ @item tick_rate
281
+ Set the tick rate (time_scale / num_units_in_tick) in the VUI
282
+ parameters. This is the smallest time unit representable in the
283
+ stream, and in many cases represents the field rate of the stream
284
+ (double the frame rate).
285
+ @item fixed_frame_rate_flag
286
+ Set whether the stream has fixed framerate - typically this indicates
287
+ that the framerate is exactly half the tick rate, but the exact
288
+ meaning is dependent on interlacing and the picture structure (see
289
+ H.264 section E.2.1 and table E-6).
290
+ @item zero_new_constraint_set_flags
291
+ Zero constraint_set4_flag and constraint_set5_flag in the SPS. These
292
+ bits were reserved in a previous version of the H.264 spec, and thus
293
+ some hardware decoders require these to be zero. The result of zeroing
294
+ this is still a valid bitstream.
295
+
296
+ @item crop_left
297
+ @item crop_right
298
+ @item crop_top
299
+ @item crop_bottom
300
+ Set the frame cropping offsets in the SPS. These values will replace
301
+ the current ones if the stream is already cropped.
302
+
303
+ These fields are set in pixels. Note that some sizes may not be
304
+ representable if the chroma is subsampled or the stream is interlaced
305
+ (see H.264 section 7.4.2.1.1).
306
+
307
+ @item sei_user_data
308
+ Insert a string as SEI unregistered user data. The argument must
309
+ be of the form @emph{UUID+string}, where the UUID is as hex digits
310
+ possibly separated by hyphens, and the string can be anything.
311
+
312
+ For example, @samp{086f3693-b7b3-4f2c-9653-21492feee5b8+hello} will
313
+ insert the string ``hello'' associated with the given UUID.
314
+
315
+ @item delete_filler
316
+ Deletes both filler NAL units and filler SEI messages.
317
+
318
+ @item display_orientation
319
+ Insert, extract or remove Display orientation SEI messages.
320
+ See H.264 section D.1.27 and D.2.27 for syntax and semantics.
321
+
322
+ @table @samp
323
+ @item pass
324
+ @item insert
325
+ @item remove
326
+ @item extract
327
+ @end table
328
+
329
+ Default is pass.
330
+
331
+ Insert mode works in conjunction with @code{rotate} and @code{flip} options.
332
+ Any pre-existing Display orientation messages will be removed in insert or remove mode.
333
+ Extract mode attaches the display matrix to the packet as side data.
334
+
335
+ @item rotate
336
+ Set rotation in display orientation SEI (anticlockwise angle in degrees).
337
+ Range is -360 to +360. Default is NaN.
338
+
339
+ @item flip
340
+ Set flip in display orientation SEI.
341
+
342
+ @table @samp
343
+ @item horizontal
344
+ @item vertical
345
+ @end table
346
+
347
+ Default is unset.
348
+
349
+ @item level
350
+ Set the level in the SPS. Refer to H.264 section A.3 and tables A-1
351
+ to A-5.
352
+
353
+ The argument must be the name of a level (for example, @samp{4.2}), a
354
+ level_idc value (for example, @samp{42}), or the special name @samp{auto}
355
+ indicating that the filter should attempt to guess the level from the
356
+ input stream properties.
357
+
358
+ @end table
359
+
360
+ @section h264_mp4toannexb
361
+
362
+ Convert an H.264 bitstream from length prefixed mode to start code
363
+ prefixed mode (as defined in the Annex B of the ITU-T H.264
364
+ specification).
365
+
366
+ This is required by some streaming formats, typically the MPEG-2
367
+ transport stream format (muxer @code{mpegts}).
368
+
369
+ For example to remux an MP4 file containing an H.264 stream to mpegts
370
+ format with @command{ffmpeg}, you can use the command:
371
+
372
+ @example
373
+ ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
374
+ @end example
375
+
376
+ Please note that this filter is auto-inserted for MPEG-TS (muxer
377
+ @code{mpegts}) and raw H.264 (muxer @code{h264}) output formats.
378
+
379
+ @section h264_redundant_pps
380
+
381
+ This applies a specific fixup to some Blu-ray streams which contain
382
+ redundant PPSs modifying irrelevant parameters of the stream which
383
+ confuse other transformations which require correct extradata.
384
+
385
+ @section hevc_metadata
386
+
387
+ Modify metadata embedded in an HEVC stream.
388
+
389
+ @table @option
390
+ @item aud
391
+ Insert or remove AUD NAL units in all access units of the stream.
392
+
393
+ @table @samp
394
+ @item insert
395
+ @item remove
396
+ @end table
397
+
398
+ @item sample_aspect_ratio
399
+ Set the sample aspect ratio in the stream in the VUI parameters.
400
+
401
+ @item video_format
402
+ @item video_full_range_flag
403
+ Set the video format in the stream (see H.265 section E.3.1 and
404
+ table E.2).
405
+
406
+ @item colour_primaries
407
+ @item transfer_characteristics
408
+ @item matrix_coefficients
409
+ Set the colour description in the stream (see H.265 section E.3.1
410
+ and tables E.3, E.4 and E.5).
411
+
412
+ @item chroma_sample_loc_type
413
+ Set the chroma sample location in the stream (see H.265 section
414
+ E.3.1 and figure E.1).
415
+
416
+ @item tick_rate
417
+ Set the tick rate in the VPS and VUI parameters (time_scale /
418
+ num_units_in_tick). Combined with @option{num_ticks_poc_diff_one}, this can
419
+ set a constant framerate in the stream. Note that it is likely to be
420
+ overridden by container parameters when the stream is in a container.
421
+
422
+ @item num_ticks_poc_diff_one
423
+ Set poc_proportional_to_timing_flag in VPS and VUI and use this value
424
+ to set num_ticks_poc_diff_one_minus1 (see H.265 sections 7.4.3.1 and
425
+ E.3.1). Ignored if @option{tick_rate} is not also set.
426
+
427
+ @item crop_left
428
+ @item crop_right
429
+ @item crop_top
430
+ @item crop_bottom
431
+ Set the conformance window cropping offsets in the SPS. These values
432
+ will replace the current ones if the stream is already cropped.
433
+
434
+ These fields are set in pixels. Note that some sizes may not be
435
+ representable if the chroma is subsampled (H.265 section 7.4.3.2.1).
436
+
437
+ @item level
438
+ Set the level in the VPS and SPS. See H.265 section A.4 and tables
439
+ A.6 and A.7.
440
+
441
+ The argument must be the name of a level (for example, @samp{5.1}), a
442
+ @emph{general_level_idc} value (for example, @samp{153} for level 5.1),
443
+ or the special name @samp{auto} indicating that the filter should
444
+ attempt to guess the level from the input stream properties.
445
+
446
+ @end table
447
+
448
+ @section hevc_mp4toannexb
449
+
450
+ Convert an HEVC/H.265 bitstream from length prefixed mode to start code
451
+ prefixed mode (as defined in the Annex B of the ITU-T H.265
452
+ specification).
453
+
454
+ This is required by some streaming formats, typically the MPEG-2
455
+ transport stream format (muxer @code{mpegts}).
456
+
457
+ For example to remux an MP4 file containing an HEVC stream to mpegts
458
+ format with @command{ffmpeg}, you can use the command:
459
+
460
+ @example
461
+ ffmpeg -i INPUT.mp4 -codec copy -bsf:v hevc_mp4toannexb OUTPUT.ts
462
+ @end example
463
+
464
+ Please note that this filter is auto-inserted for MPEG-TS (muxer
465
+ @code{mpegts}) and raw HEVC/H.265 (muxer @code{h265} or
466
+ @code{hevc}) output formats.
467
+
468
+ @section imxdump
469
+
470
+ Modifies the bitstream to fit in MOV and to be usable by the Final Cut
471
+ Pro decoder. This filter only applies to the mpeg2video codec, and is
472
+ likely not needed for Final Cut Pro 7 and newer with the appropriate
473
+ @option{-tag:v}.
474
+
475
+ For example, to remux 30 MB/sec NTSC IMX to MOV:
476
+
477
+ @example
478
+ ffmpeg -i input.mxf -c copy -bsf:v imxdump -tag:v mx3n output.mov
479
+ @end example
480
+
481
+ @section mjpeg2jpeg
482
+
483
+ Convert MJPEG/AVI1 packets to full JPEG/JFIF packets.
484
+
485
+ MJPEG is a video codec wherein each video frame is essentially a
486
+ JPEG image. The individual frames can be extracted without loss,
487
+ e.g. by
488
+
489
+ @example
490
+ ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
491
+ @end example
492
+
493
+ Unfortunately, these chunks are incomplete JPEG images, because
494
+ they lack the DHT segment required for decoding. Quoting from
495
+ @url{http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml}:
496
+
497
+ Avery Lee, writing in the rec.video.desktop newsgroup in 2001,
498
+ commented that "MJPEG, or at least the MJPEG in AVIs having the
499
+ MJPG fourcc, is restricted JPEG with a fixed -- and *omitted* --
500
+ Huffman table. The JPEG must be YCbCr colorspace, it must be 4:2:2,
501
+ and it must use basic Huffman encoding, not arithmetic or
502
+ progressive. . . . You can indeed extract the MJPEG frames and
503
+ decode them with a regular JPEG decoder, but you have to prepend
504
+ the DHT segment to them, or else the decoder won't have any idea
505
+ how to decompress the data. The exact table necessary is given in
506
+ the OpenDML spec."
507
+
508
+ This bitstream filter patches the header of frames extracted from an MJPEG
509
+ stream (carrying the AVI1 header ID and lacking a DHT segment) to
510
+ produce fully qualified JPEG images.
511
+
512
+ @example
513
+ ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
514
+ exiftran -i -9 frame*.jpg
515
+ ffmpeg -i frame_%d.jpg -c:v copy rotated.avi
516
+ @end example
517
+
518
+ @section mjpegadump
519
+
520
+ Add an MJPEG A header to the bitstream, to enable decoding by
521
+ Quicktime.
522
+
523
+ @anchor{mov2textsub}
524
+ @section mov2textsub
525
+
526
+ Extract a representable text file from MOV subtitles, stripping the
527
+ metadata header from each subtitle packet.
528
+
529
+ See also the @ref{text2movsub} filter.
530
+
531
+ @section mp3decomp
532
+
533
+ Decompress non-standard compressed MP3 audio headers.
534
+
535
+ @section mpeg2_metadata
536
+
537
+ Modify metadata embedded in an MPEG-2 stream.
538
+
539
+ @table @option
540
+ @item display_aspect_ratio
541
+ Set the display aspect ratio in the stream.
542
+
543
+ The following fixed values are supported:
544
+ @table @option
545
+ @item 4/3
546
+ @item 16/9
547
+ @item 221/100
548
+ @end table
549
+ Any other value will result in square pixels being signalled instead
550
+ (see H.262 section 6.3.3 and table 6-3).
551
+
552
+ @item frame_rate
553
+ Set the frame rate in the stream. This is constructed from a table
554
+ of known values combined with a small multiplier and divisor - if
555
+ the supplied value is not exactly representable, the nearest
556
+ representable value will be used instead (see H.262 section 6.3.3
557
+ and table 6-4).
558
+
559
+ @item video_format
560
+ Set the video format in the stream (see H.262 section 6.3.6 and
561
+ table 6-6).
562
+
563
+ @item colour_primaries
564
+ @item transfer_characteristics
565
+ @item matrix_coefficients
566
+ Set the colour description in the stream (see H.262 section 6.3.6
567
+ and tables 6-7, 6-8 and 6-9).
568
+
569
+ @end table
570
+
571
+ @section mpeg4_unpack_bframes
572
+
573
+ Unpack DivX-style packed B-frames.
574
+
575
+ DivX-style packed B-frames are not valid MPEG-4 and were only a
576
+ workaround for the broken Video for Windows subsystem.
577
+ They use more space, can cause minor AV sync issues, require more
578
+ CPU power to decode (unless the player has some decoded picture queue
579
+ to compensate the 2,0,2,0 frame per packet style) and cause
580
+ trouble if copied into a standard container like mp4 or mpeg-ps/ts,
581
+ because MPEG-4 decoders may not be able to decode them, since they are
582
+ not valid MPEG-4.
583
+
584
+ For example to fix an AVI file containing an MPEG-4 stream with
585
+ DivX-style packed B-frames using @command{ffmpeg}, you can use the command:
586
+
587
+ @example
588
+ ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi
589
+ @end example
590
+
591
+ @section noise
592
+
593
+ Damages the contents of packets or simply drops them without damaging the
594
+ container. Can be used for fuzzing or testing error resilience/concealment.
595
+
596
+ Parameters:
597
+ @table @option
598
+ @item amount
599
+ Accepts an expression whose evaluation per-packet determines how often bytes in that
600
+ packet will be modified. A value below 0 will result in a variable frequency.
601
+ Default is 0 which results in no modification. However, if neither amount nor drop is specified,
602
+ amount will be set to @var{-1}. See below for accepted variables.
603
+ @item drop
604
+ Accepts an expression evaluated per-packet whose value determines whether that packet is dropped.
605
+ Evaluation to a positive value results in the packet being dropped. Evaluation to a negative
606
+ value results in a variable chance of it being dropped, roughly inverse in proportion to the magnitude
607
+ of the value. Default is 0 which results in no drops. See below for accepted variables.
608
+ @item dropamount
609
+ Accepts a non-negative integer, which assigns a variable chance of it being dropped, roughly inverse
610
+ in proportion to the value. Default is 0 which results in no drops. This option is kept for backwards
611
+ compatibility and is equivalent to setting drop to a negative value with the same magnitude
612
+ i.e. @code{dropamount=4} is the same as @code{drop=-4}. Ignored if drop is also specified.
613
+ @end table
614
+
615
+ Both @code{amount} and @code{drop} accept expressions containing the following variables:
616
+
617
+ @table @samp
618
+ @item n
619
+ The index of the packet, starting from zero.
620
+ @item tb
621
+ The timebase for packet timestamps.
622
+ @item pts
623
+ Packet presentation timestamp.
624
+ @item dts
625
+ Packet decoding timestamp.
626
+ @item nopts
627
+ Constant representing AV_NOPTS_VALUE.
628
+ @item startpts
629
+ First non-AV_NOPTS_VALUE PTS seen in the stream.
630
+ @item startdts
631
+ First non-AV_NOPTS_VALUE DTS seen in the stream.
632
+ @item duration
633
+ @itemx d
634
+ Packet duration, in timebase units.
635
+ @item pos
636
+ Packet position in input; may be -1 when unknown or not set.
637
+ @item size
638
+ Packet size, in bytes.
639
+ @item key
640
+ Whether packet is marked as a keyframe.
641
+ @item state
642
+ A pseudo random integer, primarily derived from the content of packet payload.
643
+ @end table
644
+
645
+ @subsection Examples
646
+ Apply modification to every byte but don't drop any packets.
647
+ @example
648
+ ffmpeg -i INPUT -c copy -bsf noise=1 output.mkv
649
+ @end example
650
+
651
+ Drop every video packet not marked as a keyframe after timestamp 30s but do not
652
+ modify any of the remaining packets.
653
+ @example
654
+ ffmpeg -i INPUT -c copy -bsf:v noise=drop='gt(t\,30)*not(key)' output.mkv
655
+ @end example
656
+
657
+ Drop one second of audio every 10 seconds and add some random noise to the rest.
658
+ @example
659
+ ffmpeg -i INPUT -c copy -bsf:a noise=amount=-1:drop='between(mod(t\,10)\,9\,10)' output.mkv
660
+ @end example
661
+
662
+ @section null
663
+ This bitstream filter passes the packets through unchanged.
664
+
665
+ @section pcm_rechunk
666
+
667
+ Repacketize PCM audio to a fixed number of samples per packet or a fixed packet
668
+ rate per second. This is similar to the @ref{asetnsamples,,asetnsamples audio
669
+ filter,ffmpeg-filters} but works on audio packets instead of audio frames.
670
+
671
+ @table @option
672
+ @item nb_out_samples, n
673
+ Set the number of samples per each output audio packet. The number is intended
674
+ as the number of samples @emph{per each channel}. Default value is 1024.
675
+
676
+ @item pad, p
677
+ If set to 1, the filter will pad the last audio packet with silence, so that it
678
+ will contain the same number of samples (or roughly the same number of samples,
679
+ see @option{frame_rate}) as the previous ones. Default value is 1.
680
+
681
+ @item frame_rate, r
682
+ This option makes the filter output a fixed number of packets per second instead
683
+ of a fixed number of samples per packet. If the audio sample rate is not
684
+ divisible by the frame rate then the number of samples will not be constant but
685
+ will vary slightly so that each packet will start as close to the frame
686
+ boundary as possible. Using this option has precedence over @option{nb_out_samples}.
687
+ @end table
688
+
689
+ You can generate the well known 1602-1601-1602-1601-1602 pattern of 48kHz audio
690
+ for NTSC frame rate using the @option{frame_rate} option.
691
+ @example
692
+ ffmpeg -f lavfi -i sine=r=48000:d=1 -c pcm_s16le -bsf pcm_rechunk=r=30000/1001 -f framecrc -
693
+ @end example
694
+
695
+ @section pgs_frame_merge
696
+
697
+ Merge a sequence of PGS Subtitle segments ending with an "end of display set"
698
+ segment into a single packet.
699
+
700
+ This is required by some containers that support PGS subtitles
701
+ (muxer @code{matroska}).
702
+
703
+ @section prores_metadata
704
+
705
+ Modify color property metadata embedded in prores stream.
706
+
707
+ @table @option
708
+ @item color_primaries
709
+ Set the color primaries.
710
+ Available values are:
711
+
712
+ @table @samp
713
+ @item auto
714
+ Keep the same color primaries property (default).
715
+
716
+ @item unknown
717
+ @item bt709
718
+ @item bt470bg
719
+ BT601 625
720
+
721
+ @item smpte170m
722
+ BT601 525
723
+
724
+ @item bt2020
725
+ @item smpte431
726
+ DCI P3
727
+
728
+ @item smpte432
729
+ P3 D65
730
+
731
+ @end table
732
+
733
+ @item transfer_characteristics
734
+ Set the color transfer.
735
+ Available values are:
736
+
737
+ @table @samp
738
+ @item auto
739
+ Keep the same transfer characteristics property (default).
740
+
741
+ @item unknown
742
+ @item bt709
743
+ BT 601, BT 709, BT 2020
744
+ @item smpte2084
745
+ SMPTE ST 2084
746
+ @item arib-std-b67
747
+ ARIB STD-B67
748
+ @end table
749
+
750
+
751
+ @item matrix_coefficients
752
+ Set the matrix coefficient.
753
+ Available values are:
754
+
755
+ @table @samp
756
+ @item auto
757
+ Keep the same colorspace property (default).
758
+
759
+ @item unknown
760
+ @item bt709
761
+ @item smpte170m
762
+ BT 601
763
+
764
+ @item bt2020nc
765
+ @end table
766
+ @end table
767
+
768
+ Set Rec709 colorspace for each frame of the file
769
+ @example
770
+ ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt709:color_trc=bt709:colorspace=bt709 output.mov
771
+ @end example
772
+
773
+ Set Hybrid Log-Gamma parameters for each frame of the file
774
+ @example
775
+ ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt2020:color_trc=arib-std-b67:colorspace=bt2020nc output.mov
776
+ @end example
777
+
778
+ @section remove_extra
779
+
780
+ Remove extradata from packets.
781
+
782
+ It accepts the following parameter:
783
+ @table @option
784
+ @item freq
785
+ Set which frame types to remove extradata from.
786
+
787
+ @table @samp
788
+ @item k
789
+ Remove extradata from non-keyframes only.
790
+
791
+ @item keyframe
792
+ Remove extradata from keyframes only.
793
+
794
+ @item e, all
795
+ Remove extradata from all frames.
796
+
797
+ @end table
798
+ @end table
799
+
800
+ @section setts
801
+ Set PTS and DTS in packets.
802
+
803
+ It accepts the following parameters:
804
+ @table @option
805
+ @item ts
806
+ @item pts
807
+ @item dts
808
+ Set expressions for PTS, DTS or both.
809
+ @item duration
810
+ Set expression for duration.
811
+ @item time_base
812
+ Set output time base.
813
+ @end table
814
+
815
+ The expressions are evaluated through the eval API and can contain the following
816
+ constants:
817
+
818
+ @table @option
819
+ @item N
820
+ The count of the input packet. Starting from 0.
821
+
822
+ @item TS
823
+ The demux timestamp in input in case of @code{ts} or @code{dts} option or presentation
824
+ timestamp in case of @code{pts} option.
825
+
826
+ @item POS
827
+ The original position in the file of the packet, or undefined if undefined
828
+ for the current packet
829
+
830
+ @item DTS
831
+ The demux timestamp in input.
832
+
833
+ @item PTS
834
+ The presentation timestamp in input.
835
+
836
+ @item DURATION
837
+ The duration in input.
838
+
839
+ @item STARTDTS
840
+ The DTS of the first packet.
841
+
842
+ @item STARTPTS
843
+ The PTS of the first packet.
844
+
845
+ @item PREV_INDTS
846
+ The previous input DTS.
847
+
848
+ @item PREV_INPTS
849
+ The previous input PTS.
850
+
851
+ @item PREV_INDURATION
852
+ The previous input duration.
853
+
854
+ @item PREV_OUTDTS
855
+ The previous output DTS.
856
+
857
+ @item PREV_OUTPTS
858
+ The previous output PTS.
859
+
860
+ @item PREV_OUTDURATION
861
+ The previous output duration.
862
+
863
+ @item NEXT_DTS
864
+ The next input DTS.
865
+
866
+ @item NEXT_PTS
867
+ The next input PTS.
868
+
869
+ @item NEXT_DURATION
870
+ The next input duration.
871
+
872
+ @item TB
873
+ The timebase of stream packet belongs.
874
+
875
+ @item TB_OUT
876
+ The output timebase.
877
+
878
+ @item SR
879
+ The sample rate of stream packet belongs.
880
+
881
+ @item NOPTS
882
+ The AV_NOPTS_VALUE constant.
883
+ @end table
884
+
885
+ @anchor{text2movsub}
886
+ @section text2movsub
887
+
888
+ Convert text subtitles to MOV subtitles (as used by the @code{mov_text}
889
+ codec) with metadata headers.
890
+
891
+ See also the @ref{mov2textsub} filter.
892
+
893
+ @section trace_headers
894
+
895
+ Log trace output containing all syntax elements in the coded stream
896
+ headers (everything above the level of individual coded blocks).
897
+ This can be useful for debugging low-level stream issues.
898
+
899
+ Supports AV1, H.264, H.265, (M)JPEG, MPEG-2 and VP9, but depending
900
+ on the build only a subset of these may be available.
901
+
902
+ @section truehd_core
903
+
904
+ Extract the core from a TrueHD stream, dropping ATMOS data.
905
+
906
+ @section vp9_metadata
907
+
908
+ Modify metadata embedded in a VP9 stream.
909
+
910
+ @table @option
911
+ @item color_space
912
+ Set the color space value in the frame header. Note that any frame
913
+ set to RGB will be implicitly set to PC range and that RGB is
914
+ incompatible with profiles 0 and 2.
915
+ @table @samp
916
+ @item unknown
917
+ @item bt601
918
+ @item bt709
919
+ @item smpte170
920
+ @item smpte240
921
+ @item bt2020
922
+ @item rgb
923
+ @end table
924
+
925
+ @item color_range
926
+ Set the color range value in the frame header. Note that any value
927
+ imposed by the color space will take precedence over this value.
928
+ @table @samp
929
+ @item tv
930
+ @item pc
931
+ @end table
932
+ @end table
933
+
934
+ @section vp9_superframe
935
+
936
+ Merge VP9 invisible (alt-ref) frames back into VP9 superframes. This
937
+ fixes merging of split/segmented VP9 streams where the alt-ref frame
938
+ was split from its visible counterpart.
939
+
940
+ @section vp9_superframe_split
941
+
942
+ Split VP9 superframes into single frames.
943
+
944
+ @section vp9_raw_reorder
945
+
946
+ Given a VP9 stream with correct timestamps but possibly out of order,
947
+ insert additional show-existing-frame packets to correct the ordering.
948
+
949
+ @c man end BITSTREAM FILTERS
bin/ffmpeg/doc/bootstrap.min.css ADDED
The diff for this file is too large to render. See raw diff