diff --git a/.github/workflows/scripts/linux/build-dependencies-qt.sh b/.github/workflows/scripts/linux/build-dependencies-qt.sh index 015b316540ee0..0f20f80ce4461 100755 --- a/.github/workflows/scripts/linux/build-dependencies-qt.sh +++ b/.github/workflows/scripts/linux/build-dependencies-qt.sh @@ -21,7 +21,7 @@ fi QT=6.11.1 QTAPNG=1.3.0 -FFMPEG=8.1 +FFMPEG=9.0.1 LIBBACKTRACE=ad106d5fdd5d960bd33fae1c48a351af567fd075 LIBJPEGTURBO=3.2.0 LIBPNG=1.6.58 @@ -55,7 +55,7 @@ b2bf6c6845ac175ed7f819145483ba4676f617aaa6a5012c8efee63c8bbac413 qtimageformats 95788aa502f75441d4edf65932b235f76523084e13dbbb7b9ee2d207b32bd9b3 qtwayland-everywhere-src-$QT.tar.xz f1d3be3489f758efe1a8f12118a212febbe611aa670af32e0159fa3c1feab2a6 QtApng-$QTAPNG.tar.gz -b072aed6871998cce9b36e7774033105ca29e33632be5b6347f3206898e0756a ffmpeg-$FFMPEG.tar.xz +cf38e0e28c7e5605942c4a77755349b0145804a397af37eb1fb4c77cb237f635 ffmpeg-$FFMPEG.tar.xz 96e5c2d7f2c482a60d5804da48a2eb9a0db0719b2c65dcc169fbfdcf37f3a45d libbacktrace-$LIBBACKTRACE.tar.gz 6f30092cef9fb839779646608f4ee14ae3cbac989c47fa05e841b0841f09878e libjpeg-turbo-$LIBJPEGTURBO.tar.gz 28eb403f51f0f7405249132cecfe82ea5c0ef97f1b32c5a65828814ae0d34775 libpng-$LIBPNG.tar.xz diff --git a/.github/workflows/scripts/macos/build-dependencies-universal.sh b/.github/workflows/scripts/macos/build-dependencies-universal.sh index fd55eab7d50d8..9eb6200e82765 100755 --- a/.github/workflows/scripts/macos/build-dependencies-universal.sh +++ b/.github/workflows/scripts/macos/build-dependencies-universal.sh @@ -54,7 +54,7 @@ LZ4=1.10.0 LIBPNG=1.6.58 LIBJPEGTURBO=3.2.0 LIBWEBP=1.6.0 -FFMPEG=8.1 +FFMPEG=9.0.1 MOLTENVK=1.4.1 KDDOCKWIDGETS=2.4.1 PLUTOVG=1.3.2 @@ -101,7 +101,7 @@ eb33e51f49a15e023950cd7825ca74a4a2b43db8354825ac24fc1b7ee09e6fa3 zstd-$ZSTD.tar e4ab7009bf0629fd11982d4c2aa83964cf244cffba7347ecd39019a9e38c4564 libwebp-$LIBWEBP.tar.gz eee7dea22ed502868017971c86c63c4ed1e6085de0baebfdcc3d3322f00f3eb0 libpng-$LIBPNG-apng.patch.gz 6f30092cef9fb839779646608f4ee14ae3cbac989c47fa05e841b0841f09878e libjpeg-turbo-$LIBJPEGTURBO.tar.gz -b072aed6871998cce9b36e7774033105ca29e33632be5b6347f3206898e0756a ffmpeg-$FFMPEG.tar.xz +cf38e0e28c7e5605942c4a77755349b0145804a397af37eb1fb4c77cb237f635 ffmpeg-$FFMPEG.tar.xz 9985f141902a17de818e264d17c1ce334b748e499ee02fcb4703e4dc0038f89c MoltenVK-$MOLTENVK.tar.gz 5cd9495d9316cf6cc937bb328a7fd491c3248ef2469cfa42511f1039f6148aca KDDockWidgets-$KDDOCKWIDGETS.tar.gz 7bd4e79ce18b1d47517e7e91fbb7cf19d4f01942804a519bc7c0bf32b6325dd5 plutovg-$PLUTOVG.tar.gz diff --git a/.github/workflows/scripts/macos/build-dependencies.sh b/.github/workflows/scripts/macos/build-dependencies.sh index efe7f3ffbc56c..f9b50db00de35 100755 --- a/.github/workflows/scripts/macos/build-dependencies.sh +++ b/.github/workflows/scripts/macos/build-dependencies.sh @@ -31,7 +31,7 @@ LZ4=1.10.0 LIBPNG=1.6.58 LIBJPEGTURBO=3.2.0 LIBWEBP=1.6.0 -FFMPEG=8.1 +FFMPEG=9.0.1 MOLTENVK=1.4.1 KDDOCKWIDGETS=2.4.1 PLUTOVG=1.3.2 @@ -77,7 +77,7 @@ eb33e51f49a15e023950cd7825ca74a4a2b43db8354825ac24fc1b7ee09e6fa3 zstd-$ZSTD.tar e4ab7009bf0629fd11982d4c2aa83964cf244cffba7347ecd39019a9e38c4564 libwebp-$LIBWEBP.tar.gz eee7dea22ed502868017971c86c63c4ed1e6085de0baebfdcc3d3322f00f3eb0 libpng-$LIBPNG-apng.patch.gz 6f30092cef9fb839779646608f4ee14ae3cbac989c47fa05e841b0841f09878e libjpeg-turbo-$LIBJPEGTURBO.tar.gz -b072aed6871998cce9b36e7774033105ca29e33632be5b6347f3206898e0756a ffmpeg-$FFMPEG.tar.xz +cf38e0e28c7e5605942c4a77755349b0145804a397af37eb1fb4c77cb237f635 ffmpeg-$FFMPEG.tar.xz 9985f141902a17de818e264d17c1ce334b748e499ee02fcb4703e4dc0038f89c v$MOLTENVK.tar.gz 5cd9495d9316cf6cc937bb328a7fd491c3248ef2469cfa42511f1039f6148aca KDDockWidgets-$KDDOCKWIDGETS.tar.gz 7bd4e79ce18b1d47517e7e91fbb7cf19d4f01942804a519bc7c0bf32b6325dd5 plutovg-$PLUTOVG.tar.gz diff --git a/.github/workflows/scripts/windows/build-dependencies.bat b/.github/workflows/scripts/windows/build-dependencies.bat index 208692e0f5bcf..ccabcc9d1fe31 100755 --- a/.github/workflows/scripts/windows/build-dependencies.bat +++ b/.github/workflows/scripts/windows/build-dependencies.bat @@ -65,14 +65,14 @@ set QT=6.11.1 set QTMINOR=6.11 set QTAPNG=1.3.0 -set FFMPEG=8.1 +set FFMPEG=9.0.1 set MESON=1.10.2 set PKGCONF=2.5.1 -set AMF=1.5.0 -set LIBVPL=2.16.0 +set AMF=1.5.2 +set LIBVPL=2.17.0 set NVENC=13.0.19.0 set LIBOPUS=1.6.1 -set LIBSVTAV1=4.0.1 +set LIBSVTAV1=4.2.0 set LIBX264=b35605ace3ddf7c1a5d67a2eb553f034aef41d55 set FREETYPE=2.14.3 @@ -106,14 +106,14 @@ call :downloadfile "qttools-everywhere-src-%QT%.zip" "https://download.qt.io/off call :downloadfile "qttranslations-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qttranslations-everywhere-src-%QT%.zip" eef43700ffd079f5893e435aca1330c8bdbf2a94ae45013e3fc63870df53d3b0 || goto error call :downloadfile "QtApng-%QTAPNG%.zip" "https://github.com/jurplel/QtApng/archive/refs/tags/%QTAPNG%.zip" 5176082cdd468047a7eb1ec1f106b032f57df207aa318d559b29606b00d159ac || goto error -call :downloadfile "ffmpeg-%FFMPEG%.tar.xz" "https://ffmpeg.org/releases/ffmpeg-%FFMPEG%.tar.xz" b072aed6871998cce9b36e7774033105ca29e33632be5b6347f3206898e0756a || goto error +call :downloadfile "ffmpeg-%FFMPEG%.tar.xz" "https://ffmpeg.org/releases/ffmpeg-%FFMPEG%.tar.xz" cf38e0e28c7e5605942c4a77755349b0145804a397af37eb1fb4c77cb237f635 || goto error call :downloadfile "meson-%MESON%.tar.gz" "https://github.com/mesonbuild/meson/releases/download/%MESON%/meson-%MESON%.tar.gz" 7890287d911dd4ee1ebd0efb61ed0321bfcd87c725df923a837cf90c6508f96b || goto error call :downloadfile "pkgconf-pkgconf-%PKGCONF%.zip" "https://github.com/pkgconf/pkgconf/archive/refs/tags/pkgconf-%PKGCONF%.zip" c5b5f88a2ca2324dc5d857e35bb145e24290e326357ea94a86d47b8d7fa15477 || goto error -call :downloadfile "amf-headers-v%AMF%.tar.gz" "https://github.com/GPUOpen-LibrariesAndSDKs/AMF/releases/download/v%AMF%/AMF-headers-v%AMF%.tar.gz" d569647fa26f289affe81a206259fa92f819d06db1e80cc334559953e82a3f01 || goto error -call :downloadfile "libvpl-%LIBVPL%.zip" "https://github.com/intel/libvpl/archive/v%LIBVPL%.zip" 0b2ee8da8b9ef07ed4b52bf9ddee05008ec999b7c3c41944d7a9f804631c398e || goto error +call :downloadfile "amf-headers-v%AMF%.tar.gz" "https://github.com/GPUOpen-LibrariesAndSDKs/AMF/releases/download/v%AMF%/AMF-headers-v%AMF%.tar.gz" d3c12eb324edf05e214608b6a395a51dd95770ed9d45520185d6c3a206811c99 || goto error +call :downloadfile "libvpl-%LIBVPL%.zip" "https://github.com/intel/libvpl/archive/v%LIBVPL%.zip" 980d9f3f1dbecc7cbc28b0ff0c0647f925cbaf72844c85515b69b89e9603c35d || goto error call :downloadfile "nv-codec-headers-%NVENC%.tar.gz" "https://github.com/FFmpeg/nv-codec-headers/releases/download/n%NVENC%/nv-codec-headers-%NVENC%.tar.gz" 13da39edb3a40ed9713ae390ca89faa2f1202c9dda869ef306a8d4383e242bee || goto error call :downloadfile "opus-%LIBOPUS%.tar.gz" "https://downloads.xiph.org/releases/opus/opus-%LIBOPUS%.tar.gz" 6ffcb593207be92584df15b32466ed64bbec99109f007c82205f0194572411a1 || goto error -call :downloadfile "SVT-AV1-v%LIBSVTAV1%.zip" "https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v%LIBSVTAV1%/SVT-AV1-v%LIBSVTAV1%.zip" bfafad9af17f87fff75e44ca9b2c10cdd83c576047c3e96229285a8a64c81afc || goto error +call :downloadfile "SVT-AV1-v%LIBSVTAV1%.zip" "https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v%LIBSVTAV1%/SVT-AV1-v%LIBSVTAV1%.zip" 007d1bd64ae85eaeea51db7465c4b360d115dc2d33d2ad42491c7d2ae7a9124e || goto error call :downloadfile "x264-%LIBX264%.zip" "https://code.videolan.org/videolan/x264/-/archive/%LIBX264%.zip" d95d059eff81cc565165cd058b66e208f0cc9874106a8fe94a811a66cf8a85a2 || goto error call :downloadfile "freetype-%FREETYPE%.tar.gz" https://sourceforge.net/projects/freetype/files/freetype2/%FREETYPE%/freetype-%FREETYPE%.tar.gz/download e61b31ab26358b946e767ed7eb7f4bb2e507da1cfefeb7a8861ace7fd5c899a1 || goto error diff --git a/3rdparty/ffmpeg/COPYING.GPLv2 b/3rdparty/ffmpeg/COPYING.GPLv2 deleted file mode 100644 index d159169d10508..0000000000000 --- a/3rdparty/ffmpeg/COPYING.GPLv2 +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/3rdparty/ffmpeg/COPYING.GPLv3 b/3rdparty/ffmpeg/COPYING.GPLv3 deleted file mode 100644 index 94a9ed024d385..0000000000000 --- a/3rdparty/ffmpeg/COPYING.GPLv3 +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/3rdparty/ffmpeg/COPYING.LGPLv2.1 b/3rdparty/ffmpeg/COPYING.LGPLv2.1 deleted file mode 100644 index 40924c2a6da76..0000000000000 --- a/3rdparty/ffmpeg/COPYING.LGPLv2.1 +++ /dev/null @@ -1,502 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/3rdparty/ffmpeg/COPYING.LGPLv3 b/3rdparty/ffmpeg/COPYING.LGPLv3 deleted file mode 100644 index 65c5ca88a67c3..0000000000000 --- a/3rdparty/ffmpeg/COPYING.LGPLv3 +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/3rdparty/ffmpeg/Changelog b/3rdparty/ffmpeg/Changelog deleted file mode 100644 index 5411c268c5f36..0000000000000 --- a/3rdparty/ffmpeg/Changelog +++ /dev/null @@ -1,2235 +0,0 @@ -Entries are sorted chronologically from oldest to youngest within each release, -releases are sorted from youngest to oldest. - - -version 8.0: -- Whisper filter -- Drop support for OpenSSL < 1.1.0 -- Enable TLS peer certificate verification by default (on next major version bump) -- yasm support dropped, users need to use nasm -- VVC VAAPI decoder -- RealVideo 6.0 decoder -- OpenMAX encoders deprecated -- libx265 alpha layer encoding -- ADPCM IMA Xbox decoder -- Enhanced FLV v2: Multitrack audio/video, modern codec support -- Animated JPEG XL encoding (via libjxl) -- VVC in Matroska -- CENC AV1 support in MP4 muxer -- pngenc: set default prediction method to PAETH -- APV decoder and APV raw bitstream muxing and demuxing -- APV parser -- APV encoding support through a libopenapv wrapper -- VVC decoder supports all content of SCC (Screen Content Coding): - IBC (Inter Block Copy), Palette Mode and ACT (Adaptive Color Transform -- G.728 decoder -- pad_cuda filter -- Sanyo LD-ADPCM decoder -- APV in MP4/ISOBMFF muxing and demuxing -- OpenHarmony hardware decoder/encoder -- Colordetect filter -- Add vf_scale_d3d11 filter -- No longer disabling GCC autovectorization, on X86, ARM and AArch64 -- VP9 Vulkan hwaccel -- AV1 Vulkan encoder -- ProRes RAW decoder -- ProRes RAW Vulkan hwaccel - - -version 7.1: -- Raw Captions with Time (RCWT) closed caption demuxer -- LC3/LC3plus decoding/encoding using external library liblc3 -- ffmpeg CLI filtergraph chaining -- LC3/LC3plus demuxer and muxer -- pad_vaapi, drawbox_vaapi filters -- vf_scale supports secondary ref input and framesync options -- vf_scale2ref deprecated -- qsv_params option added for QSV encoders -- VVC decoder compatible with DVB test content -- xHE-AAC decoder -- removed DEC Alpha DSP and support code -- VVC encoding support via libvvenc -- perlin video source -- D3D12VA HEVC encoder -- Cropping metadata parsing and writing in Matroska and MP4/MOV de/muxers -- Intel QSV-accelerated VVC decoding -- MediaCodec AAC/AMR-NB/AMR-WB/MP3 decoding -- YUV colorspace negotiation for codecs and filters, obsoleting the - YUVJ pixel format -- Vulkan H.264 encoder -- Vulkan H.265 encoder -- stream specifiers in fftools can now match by stream disposition -- LCEVC enhancement data exporting in H.26x and MP4/ISOBMFF -- LCEVC filter -- MV-HEVC decoding -- minor stream specifier syntax changes: - - when matching by metadata (:m::), the colon character - in keys or values now has to be backslash-escaped - - in optional maps (-map ....?) with a metadata-matching stream specifier, - the value has to be separated from the question mark by a colon, i.e. - -map ....:m:::? (otherwise it would be ambiguous whether the - question mark is a part of or not) - - multiple stream types in a single specifier (e.g. :s:s:0) now cause an - error, as such a specifier makes no sense -- Mastering Display and Content Light Level metadata support in hevc_nvenc - and av1_nvenc encoders -- libswresample now accepts custom order channel layouts as input, with some - constrains -- FFV1 parser - - -version 7.0: -- DXV DXT1 encoder -- LEAD MCMP decoder -- EVC decoding using external library libxevd -- EVC encoding using external library libxeve -- QOA decoder and demuxer -- aap filter -- demuxing, decoding, filtering, encoding, and muxing in the - ffmpeg CLI now all run in parallel -- enable gdigrab device to grab a window using the hwnd=HANDLER syntax -- IAMF raw demuxer and muxer -- D3D12VA hardware accelerated H264, HEVC, VP9, AV1, MPEG-2 and VC1 decoding -- tiltandshift filter -- qrencode filter and qrencodesrc source -- quirc filter -- lavu/eval: introduce randomi() function in expressions -- VVC decoder (experimental) -- fsync filter -- Raw Captions with Time (RCWT) closed caption muxer -- ffmpeg CLI -bsf option may now be used for input as well as output -- ffmpeg CLI options may now be used as -/opt , which is equivalent - to -opt > -- showinfo bitstream filter -- a C11-compliant compiler is now required; note that this requirement - will be bumped to C17 in the near future, so consider updating your - build environment if it lacks C17 support -- Change the default bitrate control method from VBR to CQP for QSV encoders. -- removed deprecated ffmpeg CLI options -psnr and -map_channel -- DVD-Video demuxer, powered by libdvdnav and libdvdread -- ffprobe -show_stream_groups option -- ffprobe (with -export_side_data film_grain) now prints film grain metadata -- AEA muxer -- ffmpeg CLI loopback decoders -- Support PacketTypeMetadata of PacketType in enhanced flv format -- ffplay with hwaccel decoding support (depends on vulkan renderer via libplacebo) -- dnn filter libtorch backend -- Android content URIs protocol -- AOMedia Film Grain Synthesis 1 (AFGS1) -- RISC-V optimizations for AAC, FLAC, JPEG-2000, LPC, RV4.0, SVQ, VC1, VP8, and more -- Loongarch optimizations for HEVC decoding -- Important AArch64 optimizations for HEVC -- IAMF support inside MP4/ISOBMFF -- Support for HEIF/AVIF still images and tiled still images -- Dolby Vision profile 10 support in AV1 -- Support for Ambient Viewing Environment metadata in MP4/ISOBMFF -- HDR10 metadata passthrough when encoding with libx264, libx265, and libsvtav1 - - -version 6.1: -- libaribcaption decoder -- Playdate video decoder and demuxer -- Extend VAAPI support for libva-win32 on Windows -- afireqsrc audio source filter -- arls filter -- ffmpeg CLI new option: -readrate_initial_burst -- zoneplate video source filter -- command support in the setpts and asetpts filters -- Vulkan decode hwaccel, supporting H264, HEVC and AV1 -- color_vulkan filter -- bwdif_vulkan filter -- nlmeans_vulkan filter -- RivaTuner video decoder -- xfade_vulkan filter -- vMix video decoder -- Essential Video Coding parser, muxer and demuxer -- Essential Video Coding frame merge bsf -- bwdif_cuda filter -- Microsoft RLE video encoder -- Raw AC-4 muxer and demuxer -- Raw VVC bitstream parser, muxer and demuxer -- Bitstream filter for editing metadata in VVC streams -- Bitstream filter for converting VVC from MP4 to Annex B -- scale_vt filter for videotoolbox -- transpose_vt filter for videotoolbox -- support for the P_SKIP hinting to speed up libx264 encoding -- Support HEVC,VP9,AV1 codec in enhanced flv format -- apsnr and asisdr audio filters -- OSQ demuxer and decoder -- Support HEVC,VP9,AV1 codec fourcclist in enhanced rtmp protocol -- CRI USM demuxer -- ffmpeg CLI '-top' option deprecated in favor of the setfield filter -- VAAPI AV1 encoder -- ffprobe XML output schema changed to account for multiple - variable-fields elements within the same parent element -- ffprobe -output_format option added as an alias of -of - -# codespell:off - -version 6.0: -- Radiance HDR image support -- ddagrab (Desktop Duplication) video capture filter -- ffmpeg -shortest_buf_duration option -- ffmpeg now requires threading to be built -- ffmpeg now runs every muxer in a separate thread -- Add new mode to cropdetect filter to detect crop-area based on motion vectors and edges -- VAAPI decoding and encoding for 10/12bit 422, 10/12bit 444 HEVC and VP9 -- WBMP (Wireless Application Protocol Bitmap) image format -- a3dscope filter -- bonk decoder and demuxer -- Micronas SC-4 audio decoder -- LAF demuxer -- APAC decoder and demuxer -- Media 100i decoders -- DTS to PTS reorder bsf -- ViewQuest VQC decoder -- backgroundkey filter -- nvenc AV1 encoding support -- MediaCodec decoder via NDKMediaCodec -- MediaCodec encoder -- oneVPL support for QSV -- QSV AV1 encoder -- QSV decoding and encoding for 10/12bit 422, 10/12bit 444 HEVC and VP9 -- showcwt multimedia filter -- corr video filter -- adrc audio filter -- afdelaysrc audio filter -- WADY DPCM decoder and demuxer -- CBD2 DPCM decoder -- ssim360 video filter -- ffmpeg CLI new options: -stats_enc_pre[_fmt], -stats_enc_post[_fmt], - -stats_mux_pre[_fmt] -- hstack_vaapi, vstack_vaapi and xstack_vaapi filters -- XMD ADPCM decoder and demuxer -- media100 to mjpegb bsf -- ffmpeg CLI new option: -fix_sub_duration_heartbeat -- WavArc decoder and demuxer -- CrystalHD decoders deprecated -- SDNS demuxer -- RKA decoder and demuxer -- filtergraph syntax in ffmpeg CLI now supports passing file contents - as option values, by prefixing option name with '/' -- hstack_qsv, vstack_qsv and xstack_qsv filters - - -version 5.1: -- add ipfs/ipns gateway support -- dialogue enhance audio filter -- dropped obsolete XvMC hwaccel -- pcm-bluray encoder -- DFPWM audio encoder/decoder and raw muxer/demuxer -- SITI filter -- Vizrt Binary Image encoder/decoder -- avsynctest source filter -- feedback video filter -- pixelize video filter -- colormap video filter -- colorchart video source filter -- multiply video filter -- PGS subtitle frame merge bitstream filter -- blurdetect filter -- tiltshelf audio filter -- QOI image format support -- ffprobe -o option -- virtualbass audio filter -- VDPAU AV1 hwaccel -- PHM image format support -- remap_opencl filter -- added chromakey_cuda filter -- added bilateral_cuda filter - - -version 5.0: -- ADPCM IMA Westwood encoder -- Westwood AUD muxer -- ADPCM IMA Acorn Replay decoder -- Argonaut Games CVG demuxer -- Argonaut Games CVG muxer -- Concatf protocol -- afwtdn audio filter -- audio and video segment filters -- Apple Graphics (SMC) encoder -- hsvkey and hsvhold video filters -- adecorrelate audio filter -- atilt audio filter -- grayworld video filter -- AV1 Low overhead bitstream format muxer -- swscale slice threading -- MSN Siren decoder -- scharr video filter -- apsyclip audio filter -- morpho video filter -- amr parser -- (a)latency filters -- GEM Raster image decoder -- asdr audio filter -- speex decoder -- limitdiff video filter -- xcorrelate video filter -- varblur video filter -- huesaturation video filter -- colorspectrum source video filter -- RTP packetizer for uncompressed video (RFC 4175) -- bitpacked encoder -- VideoToolbox VP9 hwaccel -- VideoToolbox ProRes hwaccel -- support loongarch. -- aspectralstats audio filter -- adynamicsmooth audio filter -- libplacebo filter -- vflip_vulkan, hflip_vulkan and flip_vulkan filters -- adynamicequalizer audio filter -- yadif_videotoolbox filter -- VideoToolbox ProRes encoder -- anlmf audio filter -- IMF demuxer (experimental) - - -version 4.4: -- AudioToolbox output device -- MacCaption demuxer -- PGX decoder -- chromanr video filter -- VDPAU accelerated HEVC 10/12bit decoding -- ADPCM IMA Ubisoft APM encoder -- Rayman 2 APM muxer -- AV1 encoding support SVT-AV1 -- Cineform HD encoder -- ADPCM Argonaut Games encoder -- Argonaut Games ASF muxer -- AV1 Low overhead bitstream format demuxer -- RPZA video encoder -- ADPCM IMA MOFLEX decoder -- MobiClip FastAudio decoder -- MobiClip video decoder -- MOFLEX demuxer -- MODS demuxer -- PhotoCD decoder -- MCA demuxer -- AV1 decoder (Hardware acceleration used only) -- SVS demuxer -- Argonaut Games BRP demuxer -- DAT demuxer -- aax demuxer -- IPU decoder, parser and demuxer -- Intel QSV-accelerated AV1 decoding -- Argonaut Games Video decoder -- libwavpack encoder removed -- ACE demuxer -- AVS3 demuxer -- AVS3 video decoder via libuavs3d -- Cintel RAW decoder -- VDPAU accelerated VP9 10/12bit decoding -- afreqshift and aphaseshift filters -- High Voltage Software ADPCM encoder -- LEGO Racers ALP (.tun & .pcm) muxer -- AV1 VAAPI decoder -- adenorm filter -- ADPCM IMA AMV encoder -- AMV muxer -- NVDEC AV1 hwaccel -- DXVA2/D3D11VA hardware accelerated AV1 decoding -- speechnorm filter -- SpeedHQ encoder -- asupercut filter -- asubcut filter -- Microsoft Paint (MSP) version 2 decoder -- Microsoft Paint (MSP) demuxer -- AV1 monochrome encoding support via libaom >= 2.0.1 -- asuperpass and asuperstop filter -- shufflepixels filter -- tmidequalizer filter -- estdif filter -- epx filter -- Dolby E parser -- shear filter -- kirsch filter -- colortemperature filter -- colorcontrast filter -- PFM encoder -- colorcorrect filter -- binka demuxer -- XBM parser -- xbm_pipe demuxer -- colorize filter -- CRI parser -- aexciter audio filter -- exposure video filter -- monochrome video filter -- setts bitstream filter -- vif video filter -- OpenEXR image encoder -- Simbiosis IMX decoder -- Simbiosis IMX demuxer -- Digital Pictures SGA demuxer and decoders -- TTML subtitle encoder and muxer -- identity video filter -- msad video filter -- gophers protocol -- RIST protocol via librist - - -version 4.3: -- v360 filter -- Intel QSV-accelerated MJPEG decoding -- Intel QSV-accelerated VP9 decoding -- Support for TrueHD in mp4 -- Support AMD AMF encoder on Linux (via Vulkan) -- IMM5 video decoder -- ZeroMQ protocol -- support Sipro ACELP.KELVIN decoding -- streamhash muxer -- sierpinski video source -- scroll video filter -- photosensitivity filter -- anlms filter -- arnndn filter -- bilateral filter -- maskedmin and maskedmax filters -- VDPAU VP9 hwaccel -- median filter -- QSV-accelerated VP9 encoding -- AV1 encoding support via librav1e -- AV1 frame merge bitstream filter -- AV1 Annex B demuxer -- axcorrelate filter -- mvdv decoder -- mvha decoder -- MPEG-H 3D Audio support in mp4 -- thistogram filter -- freezeframes filter -- Argonaut Games ADPCM decoder -- Argonaut Games ASF demuxer -- xfade video filter -- xfade_opencl filter -- afirsrc audio filter source -- pad_opencl filter -- Simon & Schuster Interactive ADPCM decoder -- Real War KVAG demuxer -- CDToons video decoder -- siren audio decoder -- Rayman 2 ADPCM decoder -- Rayman 2 APM demuxer -- cas video filter -- High Voltage Software ADPCM decoder -- LEGO Racers ALP (.tun & .pcm) demuxer -- AMQP 0-9-1 protocol (RabbitMQ) -- Vulkan support -- avgblur_vulkan, overlay_vulkan, scale_vulkan and chromaber_vulkan filters -- ADPCM IMA MTF decoder -- FWSE demuxer -- DERF DPCM decoder -- DERF demuxer -- CRI HCA decoder -- CRI HCA demuxer -- overlay_cuda filter -- switch from AvxSynth to AviSynth+ on Linux -- mv30 decoder -- Expanded styling support for 3GPP Timed Text Subtitles (movtext) -- WebP parser -- tmedian filter -- maskedthreshold filter -- Support for muxing pcm and pgs in m2ts -- Cunning Developments ADPCM decoder -- asubboost filter -- Pro Pinball Series Soundbank demuxer -- pcm_rechunk bitstream filter -- scdet filter -- NotchLC decoder -- gradients source video filter -- MediaFoundation encoder wrapper -- untile filter -- Simon & Schuster Interactive ADPCM encoder -- PFM decoder -- dblur video filter -- Real War KVAG muxer - - -version 4.2: -- tpad filter -- AV1 decoding support through libdav1d -- dedot filter -- chromashift and rgbashift filters -- freezedetect filter -- truehd_core bitstream filter -- dhav demuxer -- PCM-DVD encoder -- GIF parser -- vividas demuxer -- hymt decoder -- anlmdn filter -- maskfun filter -- hcom demuxer and decoder -- ARBC decoder -- libaribb24 based ARIB STD-B24 caption support (profiles A and C) -- Support decoding of HEVC 4:4:4 content in nvdec and cuviddec -- removed libndi-newtek -- agm decoder -- KUX demuxer -- AV1 frame split bitstream filter -- lscr decoder -- lagfun filter -- asoftclip filter -- Support decoding of HEVC 4:4:4 content in vdpau -- colorhold filter -- xmedian filter -- asr filter -- showspatial multimedia filter -- VP4 video decoder -- IFV demuxer -- derain filter -- deesser filter -- mov muxer writes tracks with unspecified language instead of English by default -- add support for using clang to compile CUDA kernels - - -version 4.1: -- deblock filter -- tmix filter -- amplify filter -- fftdnoiz filter -- aderivative and aintegral audio filters -- pal75bars and pal100bars video filter sources -- support mbedTLS based TLS -- adeclick filter -- adeclip filter -- libtensorflow backend for DNN based filters like srcnn -- vc1 decoder is now bit-exact -- ATRAC9 decoder -- lensfun wrapper filter -- colorconstancy filter -- AVS2 video decoder via libdavs2 -- IMM4 video decoder -- Brooktree ProSumer video decoder -- MatchWare Screen Capture Codec decoder -- WinCam Motion Video decoder -- 1D LUT filter (lut1d) -- RemotelyAnywhere Screen Capture decoder -- cue and acue filters -- support for AV1 in MP4 -- transpose_npp filter -- AVS2 video encoder via libxavs2 -- amultiply filter -- Block-Matching 3d (bm3d) denoising filter -- acrossover filter -- ilbc decoder -- audio denoiser as afftdn filter -- AV1 parser -- SER demuxer -- sinc audio filter source -- chromahold filter -- setparams filter -- vibrance filter -- decoding S12M timecode in h264 -- xstack filter -- pcm vidc decoder and encoder -- (a)graphmonitor filter -- yadif_cuda filter - - -version 4.0: -- Bitstream filters for editing metadata in H.264, HEVC and MPEG-2 streams -- Dropped support for OpenJPEG versions 2.0 and below. Using OpenJPEG now - requires 2.1 (or later) and pkg-config. -- VDA dropped (use VideoToolbox instead) -- MagicYUV encoder -- Raw AMR-NB and AMR-WB demuxers -- TiVo ty/ty+ demuxer -- Intel QSV-accelerated MJPEG encoding -- PCE support for extended channel layouts in the AAC encoder -- native aptX and aptX HD encoder and decoder -- Raw aptX and aptX HD muxer and demuxer -- NVIDIA NVDEC-accelerated H.264, HEVC, MJPEG, MPEG-1/2/4, VC1, VP8/9 hwaccel decoding -- Intel QSV-accelerated overlay filter -- mcompand audio filter -- acontrast audio filter -- OpenCL overlay filter -- video mix filter -- video normalize filter -- audio lv2 wrapper filter -- VAAPI MJPEG and VP8 decoding -- AMD AMF H.264 and HEVC encoders -- video fillborders filter -- video setrange filter -- nsp demuxer -- support LibreSSL (via libtls) -- AVX-512/ZMM support added -- Dropped support for building for Windows XP. The minimum supported Windows - version is Windows Vista. -- deconvolve video filter -- entropy video filter -- hilbert audio filter source -- aiir audio filter -- aiff: add support for CD-ROM XA ADPCM -- Removed the ffserver program -- Removed the ffmenc and ffmdec muxer and demuxer -- VideoToolbox HEVC encoder and hwaccel -- VAAPI-accelerated ProcAmp (color balance), denoise and sharpness filters -- Add android_camera indev -- codec2 en/decoding via libcodec2 -- muxer/demuxer for raw codec2 files and .c2 files -- Moved nvidia codec headers into an external repository. - They can be found at http://git.videolan.org/?p=ffmpeg/nv-codec-headers.git -- native SBC encoder and decoder -- drmeter audio filter -- hapqa_extract bitstream filter -- filter_units bitstream filter -- AV1 Support through libaom -- E-AC-3 dependent frames support -- bitstream filter for extracting E-AC-3 core -- Haivision SRT protocol via libsrt -- segafilm muxer -- vfrdet filter -- SRCNN filter - - -version 3.4: -- deflicker video filter -- doubleweave video filter -- lumakey video filter -- pixscope video filter -- oscilloscope video filter -- config.log and other configuration files moved into ffbuild/ directory -- update cuvid/nvenc headers to Video Codec SDK 8.0.14 -- afir audio filter -- scale_cuda CUDA based video scale filter -- librsvg support for svg rasterization -- crossfeed audio filter -- spec compliant VP9 muxing support in MP4 -- remove the libnut muxer/demuxer wrappers -- remove the libschroedinger encoder/decoder wrappers -- surround audio filter -- sofalizer filter switched to libmysofa -- Gremlin Digital Video demuxer and decoder -- headphone audio filter -- superequalizer audio filter -- roberts video filter -- The x86 assembler default switched from yasm to nasm, pass - --x86asmexe=yasm to configure to restore the old behavior. -- additional frame format support for Interplay MVE movies -- support for decoding through D3D11VA in ffmpeg -- limiter video filter -- libvmaf video filter -- Dolby E decoder and SMPTE 337M demuxer -- unpremultiply video filter -- tlut2 video filter -- floodfill video filter -- pseudocolor video filter -- raw G.726 muxer and demuxer, left- and right-justified -- NewTek NDI input/output device -- Some video filters with several inputs now use a common set of options: - blend, libvmaf, lut3d, overlay, psnr, ssim. - They must always be used by name. -- FITS demuxer and decoder -- FITS muxer and encoder -- add --disable-autodetect build switch -- drop deprecated qtkit input device (use avfoundation instead) -- despill video filter -- haas audio filter -- SUP/PGS subtitle muxer -- convolve video filter -- VP9 tile threading support -- KMS screen grabber -- CUDA thumbnail filter -- V4L2 mem2mem HW assisted codecs -- Rockchip MPP hardware decoding -- vmafmotion video filter -- use MIME type "G726" for little-endian G.726, "AAL2-G726" for big-endian G.726 - - -version 3.3: -- CrystalHD decoder moved to new decode API -- add internal ebur128 library, remove external libebur128 dependency -- Pro-MPEG CoP #3-R2 FEC protocol -- premultiply video filter -- Support for spherical videos -- configure now fails if autodetect-libraries are requested but not found -- PSD Decoder -- 16.8 floating point pcm decoder -- 24.0 floating point pcm decoder -- Apple Pixlet decoder -- QDMC audio decoder -- NewTek SpeedHQ decoder -- MIDI Sample Dump Standard demuxer -- readeia608 filter -- Sample Dump eXchange demuxer -- abitscope multimedia filter -- Scenarist Closed Captions demuxer and muxer -- threshold filter -- midequalizer filter -- Optimal Huffman tables for (M)JPEG encoding -- VAAPI-accelerated MPEG-2 and VP8 encoding -- FM Screen Capture Codec decoder -- native Opus encoder -- ScreenPressor decoder -- incomplete ClearVideo decoder -- Intel QSV video scaling and deinterlacing filters -- Support MOV with multiple sample description tables -- XPM decoder -- Removed the legacy X11 screen grabber, use XCB instead -- MPEG-7 Video Signature filter -- Removed asyncts filter (use af_aresample instead) -- Intel QSV-accelerated VP8 video decoding -- VAAPI-accelerated deinterlacing - - -version 3.2: -- libopenmpt demuxer -- tee protocol -- Changed metadata print option to accept general urls -- Alias muxer for Ogg Video (.ogv) -- VP8 in Ogg muxing -- curves filter doesn't automatically insert points at x=0 and x=1 anymore -- 16-bit support in curves filter and selectivecolor filter -- OpenH264 decoder wrapper -- MediaCodec H.264/HEVC/MPEG-4/VP8/VP9 hwaccel -- True Audio (TTA) muxer -- crystalizer audio filter -- acrusher audio filter -- bitplanenoise video filter -- floating point support in als decoder -- fifo muxer -- maskedclamp filter -- hysteresis filter -- lut2 filter -- yuvtestsrc filter -- CUDA CUVID H.263/VP8/VP9/10 bit HEVC (Dithered) Decoding -- vaguedenoiser filter -- added threads option per filter instance -- weave filter -- gblur filter -- avgblur filter -- sobel and prewitt filter -- MediaCodec HEVC/MPEG-4/VP8/VP9 decoding -- Meridian Lossless Packing (MLP) / TrueHD encoder -- Non-Local Means (nlmeans) denoising filter -- sdl2 output device and ffplay support -- sdl1 output device and sdl1 support removed -- extended mov edit list support -- libfaac encoder removed -- Matroska muxer now writes CRC32 elements by default in all Level 1 elements -- sidedata video and asidedata audio filter -- Changed mapping of rtp MIME type G726 to codec g726le. -- spec compliant VAAPI/DXVA2 VC-1 decoding of slices in frame-coded images - - -version 3.1: -- DXVA2-accelerated HEVC Main10 decoding -- fieldhint filter -- loop video filter and aloop audio filter -- Bob Weaver deinterlacing filter -- firequalizer filter -- datascope filter -- bench and abench filters -- ciescope filter -- protocol blacklisting API -- MediaCodec H264 decoding -- VC-2 HQ RTP payload format (draft v1) depacketizer and packetizer -- VP9 RTP payload format (draft v2) packetizer -- AudioToolbox audio decoders -- AudioToolbox audio encoders -- coreimage filter (GPU based image filtering on OSX) -- libdcadec removed -- bitstream filter for extracting DTS core -- ADPCM IMA DAT4 decoder -- musx demuxer -- aix demuxer -- remap filter -- hash and framehash muxers -- colorspace filter -- hdcd filter -- readvitc filter -- VAAPI-accelerated format conversion and scaling -- libnpp/CUDA-accelerated format conversion and scaling -- Duck TrueMotion 2.0 Real Time decoder -- Wideband Single-bit Data (WSD) demuxer -- VAAPI-accelerated H.264/HEVC/MJPEG encoding -- DTS Express (LBR) decoder -- Generic OpenMAX IL encoder with support for Raspberry Pi -- IFF ANIM demuxer & decoder -- Direct Stream Transfer (DST) decoder -- loudnorm filter -- MTAF demuxer and decoder -- MagicYUV decoder -- OpenExr improvements (tile data and B44/B44A support) -- BitJazz SheerVideo decoder -- CUDA CUVID H264/HEVC decoder -- 10-bit depth support in native utvideo decoder -- libutvideo wrapper removed -- YUY2 Lossless Codec decoder -- VideoToolbox H.264 encoder - - -version 3.0: -- Common Encryption (CENC) MP4 encoding and decoding support -- DXV decoding -- extrastereo filter -- ocr filter -- alimiter filter -- stereowiden filter -- stereotools filter -- rubberband filter -- tremolo filter -- agate filter -- chromakey filter -- maskedmerge filter -- Screenpresso SPV1 decoding -- chromaprint fingerprinting muxer -- ffplay dynamic volume control -- displace filter -- selectivecolor filter -- extensive native AAC encoder improvements and removal of experimental flag -- ADPCM PSX decoder -- 3dostr, dcstr, fsb, genh, vag, xvag, ads, msf, svag & vpk demuxer -- zscale filter -- wve demuxer -- zero-copy Intel QSV transcoding in ffmpeg -- shuffleframes filter -- SDX2 DPCM decoder -- vibrato filter -- innoHeim/Rsupport Screen Capture Codec decoder -- ADPCM AICA decoder -- Interplay ACM demuxer and audio decoder -- XMA1 & XMA2 decoder -- realtime filter -- anoisesrc audio filter source -- IVR demuxer -- compensationdelay filter -- acompressor filter -- support encoding 16-bit RLE SGI images -- apulsator filter -- sidechaingate audio filter -- mipsdspr1 option has been renamed to mipsdsp -- aemphasis filter -- mips32r5 option has been removed -- mips64r6 option has been removed -- DXVA2-accelerated VP9 decoding -- SOFAlizer: virtual binaural acoustics filter -- VAAPI VP9 hwaccel -- audio high-order multiband parametric equalizer -- automatic bitstream filtering -- showspectrumpic filter -- libstagefright support removed -- spectrumsynth filter -- ahistogram filter -- only seek with the right mouse button in ffplay -- toggle full screen when double-clicking with the left mouse button in ffplay -- afftfilt filter -- convolution filter -- libquvi support removed -- support for dvaudio in wav and avi -- libaacplus and libvo-aacenc support removed -- Cineform HD decoder -- new DCA decoder with full support for DTS-HD extensions -- significant performance improvements in Windows Television (WTV) demuxer -- nnedi deinterlacer -- streamselect video and astreamselect audio filter -- swaprect filter -- metadata video and ametadata audio filter -- SMPTE VC-2 HQ profile support for the Dirac decoder -- SMPTE VC-2 native encoder supporting the HQ profile - - -version 2.8: -- colorkey video filter -- BFSTM/BCSTM demuxer -- little-endian ADPCM_THP decoder -- Hap decoder and encoder -- DirectDraw Surface image/texture decoder -- ssim filter -- optional new ASF demuxer -- showvolume filter -- Many improvements to the JPEG 2000 decoder -- Go2Meeting decoding support -- adrawgraph audio and drawgraph video filter -- removegrain video filter -- Intel QSV-accelerated MPEG-2 video and HEVC encoding -- Intel QSV-accelerated MPEG-2 video and HEVC decoding -- Intel QSV-accelerated VC-1 video decoding -- libkvazaar HEVC encoder -- erosion, dilation, deflate and inflate video filters -- Dynamic Audio Normalizer as dynaudnorm filter -- Reverse video and areverse audio filter -- Random filter -- deband filter -- AAC fixed-point decoding -- sidechaincompress audio filter -- bitstream filter for converting HEVC from MP4 to Annex B -- acrossfade audio filter -- allyuv and allrgb video sources -- atadenoise video filter -- OS X VideoToolbox support -- aphasemeter filter -- showfreqs filter -- vectorscope filter -- waveform filter -- hstack and vstack filter -- Support DNx100 (1440x1080@8) -- VAAPI hevc hwaccel -- VDPAU hevc hwaccel -- framerate filter -- Switched default encoders for webm to VP9 and Opus -- Removed experimental flag from the JPEG 2000 encoder - - -version 2.7: -- FFT video filter -- TDSC decoder -- DTS lossless extension (XLL) decoding (not lossless, disabled by default) -- showwavespic filter -- DTS decoding through libdcadec -- Drop support for nvenc API before 5.0 -- nvenc HEVC encoder -- Detelecine filter -- Intel QSV-accelerated H.264 encoding -- MMAL-accelerated H.264 decoding -- basic APNG encoder and muxer with default extension "apng" -- unpack DivX-style packed B-frames in MPEG-4 bitstream filter -- WebM Live Chunk Muxer -- nvenc level and tier options -- chorus filter -- Canopus HQ/HQA decoder -- Automatically rotate videos based on metadata in ffmpeg -- improved Quickdraw compatibility -- VP9 high bit-depth and extended colorspaces decoding support -- WebPAnimEncoder API when available for encoding and muxing WebP -- Direct3D11-accelerated decoding -- Support Secure Transport -- Multipart JPEG demuxer - - -version 2.6: -- nvenc encoder -- 10bit spp filter -- colorlevels filter -- RIFX format for *.wav files -- RTP/mpegts muxer -- non continuous cache protocol support -- tblend filter -- cropdetect support for non 8bpp, absolute (if limit >= 1) and relative (if limit < 1.0) threshold -- Camellia symmetric block cipher -- OpenH264 encoder wrapper -- VOC seeking support -- Closed caption Decoder -- fspp, uspp, pp7 MPlayer postprocessing filters ported to native filters -- showpalette filter -- Twofish symmetric block cipher -- Support DNx100 (960x720@8) -- eq2 filter ported from libmpcodecs as eq filter -- removed libmpcodecs -- Changed default DNxHD colour range in QuickTime .mov derivatives to mpeg range -- ported softpulldown filter from libmpcodecs as repeatfields filter -- dcshift filter -- RTP depacketizer for loss tolerant payload format for MP3 audio (RFC 5219) -- RTP depacketizer for AC3 payload format (RFC 4184) -- palettegen and paletteuse filters -- VP9 RTP payload format (draft 0) experimental depacketizer -- RTP depacketizer for DV (RFC 6469) -- DXVA2-accelerated HEVC decoding -- AAC ELD 480 decoding -- Intel QSV-accelerated H.264 decoding -- DSS SP decoder and DSS demuxer -- Fix stsd atom corruption in DNxHD QuickTimes -- Canopus HQX decoder -- RTP depacketization of T.140 text (RFC 4103) -- Port MIPS optimizations to 64-bit - - -version 2.5: -- HEVC/H.265 RTP payload format (draft v6) packetizer -- SUP/PGS subtitle demuxer -- ffprobe -show_pixel_formats option -- CAST128 symmetric block cipher, ECB mode -- STL subtitle demuxer and decoder -- libutvideo YUV 4:2:2 10bit support -- XCB-based screen-grabber -- UDP-Lite support (RFC 3828) -- xBR scaling filter -- AVFoundation screen capturing support -- ffserver supports codec private options -- creating DASH compatible fragmented MP4, MPEG-DASH segmenting muxer -- WebP muxer with animated WebP support -- zygoaudio decoding support -- APNG demuxer -- postproc visualization support - - -version 2.4: -- Icecast protocol -- ported lenscorrection filter from frei0r filter -- large optimizations in dctdnoiz to make it usable -- ICY metadata are now requested by default with the HTTP protocol -- support for using metadata in stream specifiers in fftools -- LZMA compression support in TIFF decoder -- H.261 RTP payload format (RFC 4587) depacketizer and experimental packetizer -- HEVC/H.265 RTP payload format (draft v6) depacketizer -- added codecview filter to visualize information exported by some codecs -- Matroska 3D support thorugh side data -- HTML generation using texi2html is deprecated in favor of makeinfo/texi2any -- silenceremove filter - - -version 2.3: -- AC3 fixed-point decoding -- shuffleplanes filter -- subfile protocol -- Phantom Cine demuxer -- replaygain data export -- VP7 video decoder -- Alias PIX image encoder and decoder -- Improvements to the BRender PIX image decoder -- Improvements to the XBM decoder -- QTKit input device -- improvements to OpenEXR image decoder -- support decoding 16-bit RLE SGI images -- GDI screen grabbing for Windows -- alternative rendition support for HTTP Live Streaming -- AVFoundation input device -- Direct Stream Digital (DSD) decoder -- Magic Lantern Video (MLV) demuxer -- On2 AVC (Audio for Video) decoder -- support for decoding through DXVA2 in ffmpeg -- libbs2b-based stereo-to-binaural audio filter -- libx264 reference frames count limiting depending on level -- native Opus decoder -- display matrix export and rotation API -- WebVTT encoder -- showcqt multimedia filter -- zoompan filter -- signalstats filter -- hqx filter (hq2x, hq3x, hq4x) -- flanger filter -- Image format auto-detection -- LRC demuxer and muxer -- Samba protocol (via libsmbclient) -- WebM DASH Manifest muxer -- libfribidi support in drawtext - - -version 2.2: - -- HNM version 4 demuxer and video decoder -- Live HDS muxer -- setsar/setdar filters now support variables in ratio expressions -- elbg filter -- string validation in ffprobe -- support for decoding through VDPAU in ffmpeg (the -hwaccel option) -- complete Voxware MetaSound decoder -- remove mp3_header_compress bitstream filter -- Windows resource files for shared libraries -- aeval filter -- stereoscopic 3d metadata handling -- WebP encoding via libwebp -- ATRAC3+ decoder -- VP8 in Ogg demuxing -- side & metadata support in NUT -- framepack filter -- XYZ12 rawvideo support in NUT -- Exif metadata support in WebP decoder -- OpenGL device -- Use metadata_header_padding to control padding in ID3 tags (currently used in - MP3, AIFF, and OMA files), FLAC header, and the AVI "junk" block. -- Mirillis FIC video decoder -- Support DNx444 -- libx265 encoder -- dejudder filter -- Autodetect VDA like all other hardware accelerations -- aliases and defaults for Ogg subtypes (opus, spx) - - -version 2.1: - -- aecho filter -- perspective filter ported from libmpcodecs -- ffprobe -show_programs option -- compand filter -- RTMP seek support -- when transcoding with ffmpeg (i.e. not streamcopying), -ss is now accurate - even when used as an input option. Previous behavior can be restored with - the -noaccurate_seek option. -- ffmpeg -t option can now be used for inputs, to limit the duration of - data read from an input file -- incomplete Voxware MetaSound decoder -- read EXIF metadata from JPEG -- DVB teletext decoder -- phase filter ported from libmpcodecs -- w3fdif filter -- Opus support in Matroska -- FFV1 version 1.3 is stable and no longer experimental -- FFV1: YUVA(444,422,420) 9, 10 and 16 bit support -- changed DTS stream id in lavf mpeg ps muxer from 0x8a to 0x88, to be - more consistent with other muxers. -- adelay filter -- pullup filter ported from libmpcodecs -- ffprobe -read_intervals option -- Lossless and alpha support for WebP decoder -- Error Resilient AAC syntax (ER AAC LC) decoding -- Low Delay AAC (ER AAC LD) decoding -- mux chapters in ASF files -- SFTP protocol (via libssh) -- libx264: add ability to encode in YUVJ422P and YUVJ444P -- Fraps: use BT.709 colorspace by default for yuv, as reference fraps decoder does -- make decoding alpha optional for prores, ffv1 and vp6 by setting - the skip_alpha flag. -- ladspa wrapper filter -- native VP9 decoder -- dpx parser -- max_error_rate parameter in ffmpeg -- PulseAudio output device -- ReplayGain scanner -- Enhanced Low Delay AAC (ER AAC ELD) decoding (no LD SBR support) -- Linux framebuffer output device -- HEVC decoder -- raw HEVC, HEVC in MOV/MP4, HEVC in Matroska, HEVC in MPEG-TS demuxing -- mergeplanes filter - - -version 2.0: - -- curves filter -- reference-counting for AVFrame and AVPacket data -- ffmpeg now fails when input options are used for output file - or vice versa -- support for Monkey's Audio versions from 3.93 -- perms and aperms filters -- audio filtering support in ffplay -- 10% faster aac encoding on x86 and MIPS -- sine audio filter source -- WebP demuxing and decoding support -- ffmpeg options -filter_script and -filter_complex_script, which allow a - filtergraph description to be read from a file -- OpenCL support -- audio phaser filter -- separatefields filter -- libquvi demuxer -- uniform options syntax across all filters -- telecine filter -- interlace filter -- smptehdbars source -- inverse telecine filters (fieldmatch and decimate) -- colorbalance filter -- colorchannelmixer filter -- The matroska demuxer can now output proper verbatim ASS packets. It will - become the default at the next libavformat major bump. -- decent native animated GIF encoding -- asetrate filter -- interleave filter -- timeline editing with filters -- vidstabdetect and vidstabtransform filters for video stabilization using - the vid.stab library -- astats filter -- trim and atrim filters -- ffmpeg -t and -ss (output-only) options are now sample-accurate when - transcoding audio -- Matroska muxer can now put the index at the beginning of the file. -- extractplanes filter -- avectorscope filter -- ADPCM DTK decoder -- ADP demuxer -- RSD demuxer -- RedSpark demuxer -- ADPCM IMA Radical decoder -- zmq filters -- DCT denoiser filter (dctdnoiz) -- Wavelet denoiser filter ported from libmpcodecs as owdenoise (formerly "ow") -- Apple Intermediate Codec decoder -- Escape 130 video decoder -- FTP protocol support -- V4L2 output device -- 3D LUT filter (lut3d) -- SMPTE 302M audio encoder -- support for slice multithreading in libavfilter -- Hald CLUT support (generation and filtering) -- VC-1 interlaced B-frame support -- support for WavPack muxing (raw and in Matroska) -- XVideo output device -- vignette filter -- True Audio (TTA) encoder -- Go2Webinar decoder -- mcdeint filter ported from libmpcodecs -- sab filter ported from libmpcodecs -- ffprobe -show_chapters option -- WavPack encoding through libwavpack -- rotate filter -- spp filter ported from libmpcodecs -- libgme support -- psnr filter - - -version 1.2: - -- VDPAU hardware acceleration through normal hwaccel -- SRTP support -- Error diffusion dither in Swscale -- Chained Ogg support -- Theora Midstream reconfiguration support -- EVRC decoder -- audio fade filter -- filtering audio with unknown channel layout -- allpass, bass, bandpass, bandreject, biquad, equalizer, highpass, lowpass - and treble audio filter -- improved showspectrum filter, with multichannel support and sox-like colors -- histogram filter -- tee muxer -- il filter ported from libmpcodecs -- support ID3v2 tags in ASF files -- encrypted TTA stream decoding support -- RF64 support in WAV muxer -- noise filter ported from libmpcodecs -- Subtitles character encoding conversion -- blend filter -- stereo3d filter ported from libmpcodecs - - -version 1.1: - -- stream disposition information printing in ffprobe -- filter for loudness analysis following EBU R128 -- Opus encoder using libopus -- ffprobe -select_streams option -- Pinnacle TARGA CineWave YUV16 decoder -- TAK demuxer, decoder and parser -- DTS-HD demuxer -- remove -same_quant, it hasn't worked for years -- FFM2 support -- X-Face image encoder and decoder -- 24-bit FLAC encoding -- multi-channel ALAC encoding up to 7.1 -- metadata (INFO tag) support in WAV muxer -- subtitles raw text decoder -- support for building DLLs using MSVC -- LVF demuxer -- ffescape tool -- metadata (info chunk) support in CAF muxer -- field filter ported from libmpcodecs -- AVR demuxer -- geq filter ported from libmpcodecs -- remove ffserver daemon mode -- AST muxer/demuxer -- new expansion syntax for drawtext -- BRender PIX image decoder -- ffprobe -show_entries option -- ffprobe -sections option -- ADPCM IMA Dialogic decoder -- BRSTM demuxer -- animated GIF decoder and demuxer -- PVF demuxer -- subtitles filter -- IRCAM muxer/demuxer -- Paris Audio File demuxer -- Virtual concatenation demuxer -- VobSub demuxer -- JSON captions for TED talks decoding support -- SOX Resampler support in libswresample -- aselect filter -- SGI RLE 8-bit / Silicon Graphics RLE 8-bit video decoder -- Silicon Graphics Motion Video Compressor 1 & 2 decoder -- Silicon Graphics Movie demuxer -- apad filter -- Resolution & pixel format change support with multithreading for H.264 -- documentation split into per-component manuals -- pp (postproc) filter ported from MPlayer -- NIST Sphere demuxer -- MPL2, VPlayer, MPlayer, AQTitle, PJS and SubViewer v1 subtitles demuxers and decoders -- Sony Wave64 muxer -- adobe and limelight publisher authentication in RTMP -- data: URI scheme -- support building on the Plan 9 operating system -- kerndeint filter ported from MPlayer -- histeq filter ported from VirtualDub -- Megalux Frame demuxer -- 012v decoder -- Improved AVC Intra decoding support - - -version 1.0: - -- INI and flat output in ffprobe -- Scene detection in libavfilter -- Indeo Audio decoder -- channelsplit audio filter -- setnsamples audio filter -- atempo filter -- ffprobe -show_data option -- RTMPT protocol support -- iLBC encoding/decoding via libilbc -- Microsoft Screen 1 decoder -- join audio filter -- audio channel mapping filter -- Microsoft ATC Screen decoder -- RTSP listen mode -- TechSmith Screen Codec 2 decoder -- AAC encoding via libfdk-aac -- Microsoft Expression Encoder Screen decoder -- RTMPS protocol support -- RTMPTS protocol support -- RTMPE protocol support -- RTMPTE protocol support -- showwaves and showspectrum filter -- LucasArts SMUSH SANM playback support -- LucasArts SMUSH VIMA audio decoder (ADPCM) -- LucasArts SMUSH demuxer -- SAMI, RealText and SubViewer demuxers and decoders -- Heart Of Darkness PAF playback support -- iec61883 device -- asettb filter -- new option: -progress -- 3GPP Timed Text encoder/decoder -- GeoTIFF decoder support -- ffmpeg -(no)stdin option -- Opus decoder using libopus -- caca output device using libcaca -- alphaextract and alphamerge filters -- concat filter -- flite filter -- Canopus Lossless Codec decoder -- bitmap subtitles in filters (experimental and temporary) -- MP2 encoding via TwoLAME -- bmp parser -- smptebars source -- asetpts filter -- hue filter -- ICO muxer -- SubRip encoder and decoder without embedded timing -- edge detection filter -- framestep filter -- ffmpeg -shortest option is now per-output file - -pass and -passlogfile are now per-output stream -- volume measurement filter -- Ut Video encoder -- Microsoft Screen 2 decoder -- smartblur filter ported from MPlayer -- CPiA decoder -- decimate filter ported from MPlayer -- RTP depacketization of JPEG -- Smooth Streaming live segmenter muxer -- F4V muxer -- sendcmd and asendcmd filters -- WebVTT demuxer and decoder (simple tags supported) -- RTP packetization of JPEG -- faststart option in the MOV/MP4 muxer -- support for building with MSVC - - -version 0.11: - -- Fixes: CVE-2012-2772, CVE-2012-2774, CVE-2012-2775, CVE-2012-2776, CVE-2012-2777, - CVE-2012-2779, CVE-2012-2782, CVE-2012-2783, CVE-2012-2784, CVE-2012-2785, - CVE-2012-2786, CVE-2012-2787, CVE-2012-2788, CVE-2012-2789, CVE-2012-2790, - CVE-2012-2791, CVE-2012-2792, CVE-2012-2793, CVE-2012-2794, CVE-2012-2795, - CVE-2012-2796, CVE-2012-2797, CVE-2012-2798, CVE-2012-2799, CVE-2012-2800, - CVE-2012-2801, CVE-2012-2802, CVE-2012-2803, CVE-2012-2804, -- v408 Quicktime and Microsoft AYUV Uncompressed 4:4:4:4 encoder and decoder -- setfield filter -- CDXL demuxer and decoder -- Apple ProRes encoder -- ffprobe -count_packets and -count_frames options -- Sun Rasterfile Encoder -- ID3v2 attached pictures reading and writing -- WMA Lossless decoder -- bluray protocol -- blackdetect filter -- libutvideo encoder wrapper (--enable-libutvideo) -- swapuv filter -- bbox filter -- XBM encoder and decoder -- RealAudio Lossless decoder -- ZeroCodec decoder -- tile video filter -- Metal Gear Solid: The Twin Snakes demuxer -- OpenEXR image decoder -- removelogo filter -- drop support for ffmpeg without libavfilter -- drawtext video filter: fontconfig support -- ffmpeg -benchmark_all option -- super2xsai filter ported from libmpcodecs -- add libavresample audio conversion library for compatibility -- MicroDVD decoder -- Avid Meridien (AVUI) encoder and decoder -- accept + prefix to -pix_fmt option to disable automatic conversions. -- complete audio filtering in libavfilter and ffmpeg -- add fps filter -- vorbis parser -- png parser -- audio mix filter -- ffv1: support (draft) version 1.3 - - -version 0.10: - -- Fixes: CVE-2011-3929, CVE-2011-3934, CVE-2011-3935, CVE-2011-3936, - CVE-2011-3937, CVE-2011-3940, CVE-2011-3941, CVE-2011-3944, - CVE-2011-3945, CVE-2011-3946, CVE-2011-3947, CVE-2011-3949, - CVE-2011-3950, CVE-2011-3951, CVE-2011-3952 -- v410 Quicktime Uncompressed 4:4:4 10-bit encoder and decoder -- SBaGen (SBG) binaural beats script demuxer -- OpenMG Audio muxer -- Timecode extraction in DV and MOV -- thumbnail video filter -- XML output in ffprobe -- asplit audio filter -- tinterlace video filter -- astreamsync audio filter -- amerge audio filter -- ISMV (Smooth Streaming) muxer -- GSM audio parser -- SMJPEG muxer -- XWD encoder and decoder -- Automatic thread count based on detection number of (available) CPU cores -- y41p Brooktree Uncompressed 4:1:1 12-bit encoder and decoder -- ffprobe -show_error option -- Avid 1:1 10-bit RGB Packer codec -- v308 Quicktime Uncompressed 4:4:4 encoder and decoder -- yuv4 libquicktime packed 4:2:0 encoder and decoder -- ffprobe -show_frames option -- silencedetect audio filter -- ffprobe -show_program_version, -show_library_versions, -show_versions options -- rv34: frame-level multi-threading -- optimized iMDCT transform on x86 using SSE for for mpegaudiodec -- Improved PGS subtitle decoder -- dumpgraph option to lavfi device -- r210 and r10k encoders -- ffwavesynth decoder -- aviocat tool -- ffeval tool -- support encoding and decoding 4-channel SGI images - - -version 0.9: - -- openal input device added -- boxblur filter added -- BWF muxer -- Flash Screen Video 2 decoder -- lavfi input device added -- added avconv, which is almost the same for now, except -for a few incompatible changes in the options, which will hopefully make them -easier to use. The changes are: - * The options placement is now strictly enforced! While in theory the - options for ffmpeg should be given in [input options] -i INPUT [output - options] OUTPUT order, in practice it was possible to give output options - before the -i and it mostly worked. Except when it didn't - the behavior was - a bit inconsistent. In avconv, it is not possible to mix input and output - options. All non-global options are reset after an input or output filename. - * All per-file options are now truly per-file - they apply only to the next - input or output file and specifying different values for different files - will now work properly (notably -ss and -t options). - * All per-stream options are now truly per-stream - it is possible to - specify which stream(s) should a given option apply to. See the Stream - specifiers section in the avconv manual for details. - * In ffmpeg some options (like -newvideo/-newaudio/...) are irregular in the - sense that they're specified after the output filename instead of before, - like all other options. In avconv this irregularity is removed, all options - apply to the next input or output file. - * -newvideo/-newaudio/-newsubtitle options were removed. Not only were they - irregular and highly confusing, they were also redundant. In avconv the -map - option will create new streams in the output file and map input streams to - them. E.g. avconv -i INPUT -map 0 OUTPUT will create an output stream for - each stream in the first input file. - * The -map option now has slightly different and more powerful syntax: - + Colons (':') are used to separate file index/stream type/stream index - instead of dots. Comma (',') is used to separate the sync stream instead - of colon.. This is done for consistency with other options. - + It's possible to specify stream type. E.g. -map 0:a:2 creates an - output stream from the third input audio stream. - + Omitting the stream index now maps all the streams of the given type, - not just the first. E.g. -map 0:s creates output streams for all the - subtitle streams in the first input file. - + Since -map can now match multiple streams, negative mappings were - introduced. Negative mappings disable some streams from an already - defined map. E.g. '-map 0 -map -0:a:1' means 'create output streams for - all the stream in the first input file, except for the second audio - stream'. - * There is a new option -c (or -codec) for choosing the decoder/encoder to - use, which makes it possible to precisely specify target stream(s) consistently with - other options. E.g. -c:v lib264 sets the codec for all video streams, -c:a:0 - libvorbis sets the codec for the first audio stream and -c copy copies all - the streams without reencoding. Old -vcodec/-acodec/-scodec options are now - aliases to -c:v/a/s - * It is now possible to precisely specify which stream should an AVOption - apply to. E.g. -b:v:0 2M sets the bitrate for the first video stream, while - -b:a 128k sets the bitrate for all audio streams. Note that the old -ab 128k - syntax is deprecated and will stop working soon. - * -map_chapters now takes only an input file index and applies to the next - output file. This is consistent with how all the other options work. - * -map_metadata now takes only an input metadata specifier and applies to - the next output file. Output metadata specifier is now part of the option - name, similarly to the AVOptions/map/codec feature above. - * -metadata can now be used to set metadata on streams and chapters, e.g. - -metadata:s:1 language=eng sets the language of the first stream to 'eng'. - This made -vlang/-alang/-slang options redundant, so they were removed. - * -qscale option now uses stream specifiers and applies to all streams, not - just video. I.e. plain -qscale number would now apply to all streams. To get - the old behavior, use -qscale:v. Also there is now a shortcut -q for -qscale - and -aq is now an alias for -q:a. - * -vbsf/-absf/-sbsf options were removed and replaced by a -bsf option which - uses stream specifiers. Use -bsf:v/a/s instead of the old options. - * -itsscale option now uses stream specifiers, so its argument is only the - scale parameter. - * -intra option was removed, use -g 0 for the same effect. - * -psnr option was removed, use -flags +psnr for the same effect. - * -vf option is now an alias to the new -filter option, which uses stream specifiers. - * -vframes/-aframes/-dframes options are now aliases to the new -frames option. - * -vtag/-atag/-stag options are now aliases to the new -tag option. -- XMV demuxer -- LOAS demuxer -- ashowinfo filter added -- Windows Media Image decoder -- amovie source added -- LATM muxer/demuxer -- Speex encoder via libspeex -- JSON output in ffprobe -- WTV muxer -- Optional C++ Support (needed for libstagefright) -- H.264 Decoding on Android via Stagefright -- Prores decoder -- BIN/XBIN/ADF/IDF text file decoder -- aconvert audio filter added -- audio support to lavfi input device added -- libcdio-paranoia input device for audio CD grabbing -- Apple ProRes decoder -- CELT in Ogg demuxing -- G.723.1 demuxer and decoder -- libmodplug support (--enable-libmodplug) -- VC-1 interlaced decoding -- libutvideo wrapper (--enable-libutvideo) -- aevalsrc audio source added -- Ut Video decoder -- Speex encoding via libspeex -- 4:2:2 H.264 decoding support -- 4:2:2 and 4:4:4 H.264 encoding with libx264 -- Pulseaudio input device -- Prores encoder -- Video Decoder Acceleration (VDA) HWAccel module. -- replacement Indeo 3 decoder -- new ffmpeg option: -map_channel -- volume audio filter added -- earwax audio filter added -- libv4l2 support (--enable-libv4l2) -- TLS/SSL and HTTPS protocol support -- AVOptions API rewritten and documented -- most of CODEC_FLAG2_*, some CODEC_FLAG_* and many codec-specific fields in - AVCodecContext deprecated. Codec private options should be used instead. -- Properly working defaults in libx264 wrapper, support for native presets. -- Encrypted OMA files support -- Discworld II BMV decoding support -- VBLE Decoder -- OS X Video Decoder Acceleration (VDA) support -- compact and csv output in ffprobe -- pan audio filter -- IFF Amiga Continuous Bitmap (ACBM) decoder -- ass filter -- CRI ADX audio format muxer and demuxer -- Playstation Portable PMP format demuxer -- Microsoft Windows ICO demuxer -- life source -- PCM format support in OMA demuxer -- CLJR encoder -- new option: -report -- Dxtory capture format decoder -- cellauto source -- Simple segmenting muxer -- Indeo 4 decoder -- SMJPEG demuxer - - -version 0.8: - -- many many things we forgot because we rather write code than changelogs -- WebM support in Matroska de/muxer -- low overhead Ogg muxing -- MMS-TCP support -- VP8 de/encoding via libvpx -- Demuxer for On2's IVF format -- Pictor/PC Paint decoder -- HE-AAC v2 decoder -- HE-AAC v2 encoding with libaacplus -- libfaad2 wrapper removed -- DTS-ES extension (XCh) decoding support -- native VP8 decoder -- RTSP tunneling over HTTP -- RTP depacketization of SVQ3 -- -strict inofficial replaced by -strict unofficial -- ffplay -exitonkeydown and -exitonmousedown options added -- native GSM / GSM MS decoder -- RTP depacketization of QDM2 -- ANSI/ASCII art playback system -- Lego Mindstorms RSO de/muxer -- libavcore added (and subsequently removed) -- SubRip subtitle file muxer and demuxer -- Chinese AVS encoding via libxavs -- ffprobe -show_packets option added -- RTP packetization of Theora and Vorbis -- RTP depacketization of MP4A-LATM -- RTP packetization and depacketization of VP8 -- hflip filter -- Apple HTTP Live Streaming demuxer -- a64 codec -- MMS-HTTP support -- G.722 ADPCM audio encoder/decoder -- R10k video decoder -- ocv_smooth filter -- frei0r wrapper filter -- change crop filter syntax to width:height:x:y -- make the crop filter accept parametric expressions -- make ffprobe accept AVFormatContext options -- yadif filter -- blackframe filter -- Demuxer for Leitch/Harris' VR native stream format (LXF) -- RTP depacketization of the X-QT QuickTime format -- SAP (Session Announcement Protocol, RFC 2974) muxer and demuxer -- cropdetect filter -- ffmpeg -crop* options removed -- transpose filter added -- ffmpeg -force_key_frames option added -- demuxer for receiving raw rtp:// URLs without an SDP description -- single stream LATM/LOAS decoder -- setpts filter added -- Win64 support for optimized x86 assembly functions -- MJPEG/AVI1 to JPEG/JFIF bitstream filter -- ASS subtitle encoder and decoder -- IEC 61937 encapsulation for E-AC-3, TrueHD, DTS-HD (for HDMI passthrough) -- overlay filter added -- rename aspect filter to setdar, and pixelaspect to setsar -- IEC 61937 demuxer -- Mobotix .mxg demuxer -- frei0r source added -- hqdn3d filter added -- RTP depacketization of QCELP -- FLAC parser added -- gradfun filter added -- AMR-WB decoder -- replace the ocv_smooth filter with a more generic ocv filter -- Windows Televison (WTV) demuxer -- FFmpeg metadata format muxer and demuxer -- SubRip (srt) subtitle encoder and decoder -- floating-point AC-3 encoder added -- Lagarith decoder -- ffmpeg -copytb option added -- IVF muxer added -- Wing Commander IV movies decoder added -- movie source added -- Bink version 'b' audio and video decoder -- Bitmap Brothers JV playback system -- Apple HTTP Live Streaming protocol handler -- sndio support for playback and record -- Linux framebuffer input device added -- Chronomaster DFA decoder -- DPX image encoder -- MicroDVD subtitle file muxer and demuxer -- Playstation Portable PMP format demuxer -- fieldorder video filter added -- AAC encoding via libvo-aacenc -- AMR-WB encoding via libvo-amrwbenc -- xWMA demuxer -- Mobotix MxPEG decoder -- VP8 frame-multithreading -- NEON optimizations for VP8 -- Lots of deprecated API cruft removed -- fft and imdct optimizations for AVX (Sandy Bridge) processors -- showinfo filter added -- SMPTE 302M AES3 audio decoder -- Apple Core Audio Format muxer -- 9 bits and 10 bits per sample support in the H.264 decoder -- 9 bits and 10 bits FFV1 encoding / decoding -- split filter added -- select filter added -- sdl output device added -- libmpcodecs video filter support (3 times as many filters than before) -- mpeg2 aspect ratio dection fixed -- libxvid aspect pickiness fixed -- Frame multithreaded decoding -- E-AC-3 audio encoder -- ac3enc: add channel coupling support -- floating-point sample format support to the ac3, eac3, dca, aac, and vorbis decoders. -- H264/MPEG frame-level multi-threading -- All av_metadata_* functions renamed to av_dict_* and moved to libavutil -- 4:4:4 H.264 decoding support -- 10-bit H.264 optimizations for x86 -- lut, lutrgb, and lutyuv filters added -- buffersink libavfilter sink added -- Bump libswscale for recently reported ABI break -- New J2K encoder (via OpenJPEG) - - -version 0.7: - -- all the changes for 0.8, but keeping API/ABI compatibility with the 0.6 release - - -version 0.6: - -- PB-frame decoding for H.263 -- deprecated vhook subsystem removed -- deprecated old scaler removed -- VQF demuxer -- Alpha channel scaler -- PCX encoder -- RTP packetization of H.263 -- RTP packetization of AMR -- RTP depacketization of Vorbis -- CorePNG decoding support -- Cook multichannel decoding support -- introduced avlanguage helpers in libavformat -- 8088flex TMV demuxer and decoder -- per-stream language-tags extraction in asfdec -- V210 decoder and encoder -- remaining GPL parts in AC-3 decoder converted to LGPL -- QCP demuxer -- SoX native format muxer and demuxer -- AMR-NB decoding/encoding, AMR-WB decoding via OpenCORE libraries -- DPX image decoder -- Electronic Arts Madcow decoder -- DivX (XSUB) subtitle encoder -- nonfree libamr support for AMR-NB/WB decoding/encoding removed -- experimental AAC encoder -- RTP depacketization of ASF and RTSP from WMS servers -- RTMP support in libavformat -- noX handling for OPT_BOOL X options -- Wave64 demuxer -- IEC-61937 compatible Muxer -- TwinVQ decoder -- Bluray (PGS) subtitle decoder -- LPCM support in MPEG-TS (HDMV RID as found on Blu-ray disks) -- WMA Pro decoder -- Core Audio Format demuxer -- ATRAC1 decoder -- MD STUDIO audio demuxer -- RF64 support in WAV demuxer -- MPEG-4 Audio Lossless Coding (ALS) decoder -- -formats option split into -formats, -codecs, -bsfs, and -protocols -- IV8 demuxer -- CDG demuxer and decoder -- R210 decoder -- Auravision Aura 1 and 2 decoders -- Deluxe Paint Animation playback system -- SIPR decoder -- Adobe Filmstrip muxer and demuxer -- RTP depacketization of H.263 -- Bink demuxer and audio/video decoders -- enable symbol versioning by default for linkers that support it -- IFF PBM/ILBM bitmap decoder -- concat protocol -- Indeo 5 decoder -- RTP depacketization of AMR -- WMA Voice decoder -- ffprobe tool -- AMR-NB decoder -- RTSP muxer -- HE-AAC v1 decoder -- Kega Game Video (KGV1) decoder -- VorbisComment writing for FLAC, Ogg FLAC and Ogg Speex files -- RTP depacketization of Theora -- HTTP Digest authentication -- RTMP/RTMPT/RTMPS/RTMPE/RTMPTE protocol support via librtmp -- Psygnosis YOP demuxer and video decoder -- spectral extension support in the E-AC-3 decoder -- unsharp video filter -- RTP hinting in the mov/3gp/mp4 muxer -- Dirac in Ogg demuxing -- seek to keyframes in Ogg -- 4:2:2 and 4:4:4 Theora decoding -- 35% faster VP3/Theora decoding -- faster AAC decoding -- faster H.264 decoding -- RealAudio 1.0 (14.4K) encoder - - -version 0.5: - -- DV50 AKA DVCPRO50 encoder, decoder, muxer and demuxer -- TechSmith Camtasia (TSCC) video decoder -- IBM Ultimotion (ULTI) video decoder -- Sierra Online audio file demuxer and decoder -- Apple QuickDraw (qdrw) video decoder -- Creative ADPCM audio decoder (16 bits as well as 8 bits schemes) -- Electronic Arts Multimedia (WVE/UV2/etc.) file demuxer -- Miro VideoXL (VIXL) video decoder -- H.261 video encoder -- QPEG video decoder -- Nullsoft Video (NSV) file demuxer -- Shorten audio decoder -- LOCO video decoder -- Apple Lossless Audio Codec (ALAC) decoder -- Winnov WNV1 video decoder -- Autodesk Animator Studio Codec (AASC) decoder -- Indeo 2 video decoder -- Fraps FPS1 video decoder -- Snow video encoder/decoder -- Sonic audio encoder/decoder -- Vorbis audio decoder -- Macromedia ADPCM decoder -- Duck TrueMotion 2 video decoder -- support for decoding FLX and DTA extensions in FLIC files -- H.264 custom quantization matrices support -- ffserver fixed, it should now be usable again -- QDM2 audio decoder -- Real Cooker audio decoder -- TrueSpeech audio decoder -- WMA2 audio decoder fixed, now all files should play correctly -- RealAudio 14.4 and 28.8 decoders fixed -- JPEG-LS decoder -- build system improvements -- tabs and trailing whitespace removed from the codebase -- CamStudio video decoder -- AIFF/AIFF-C audio format, encoding and decoding -- ADTS AAC file reading and writing -- Creative VOC file reading and writing -- American Laser Games multimedia (*.mm) playback system -- Zip Motion Blocks Video decoder -- improved Theora/VP3 decoder -- True Audio (TTA) decoder -- AVS demuxer and video decoder -- JPEG-LS encoder -- Smacker demuxer and decoder -- NuppelVideo/MythTV demuxer and RTjpeg decoder -- KMVC decoder -- MPEG-2 intra VLC support -- MPEG-2 4:2:2 encoder -- Flash Screen Video decoder -- GXF demuxer -- Chinese AVS decoder -- GXF muxer -- MXF demuxer -- VC-1/WMV3/WMV9 video decoder -- MacIntel support -- AviSynth support -- VMware video decoder -- VP5 video decoder -- VP6 video decoder -- WavPack lossless audio decoder -- Targa (.TGA) picture decoder -- Vorbis audio encoder -- Delphine Software .cin demuxer/audio and video decoder -- Tiertex .seq demuxer/video decoder -- MTV demuxer -- TIFF picture encoder and decoder -- GIF picture decoder -- Intel Music Coder decoder -- Zip Motion Blocks Video encoder -- Musepack decoder -- Flash Screen Video encoder -- Theora encoding via libtheora -- BMP encoder -- WMA encoder -- GSM-MS encoder and decoder -- DCA decoder -- DXA demuxer and decoder -- DNxHD decoder -- Gamecube movie (.THP) playback system -- Blackfin optimizations -- Interplay C93 demuxer and video decoder -- Bethsoft VID demuxer and video decoder -- CRYO APC demuxer -- ATRAC3 decoder -- V.Flash PTX decoder -- RoQ muxer, RoQ audio encoder -- Renderware TXD demuxer and decoder -- extern C declarations for C++ removed from headers -- sws_flags command line option -- codebook generator -- RoQ video encoder -- QTRLE encoder -- OS/2 support removed and restored again -- AC-3 decoder -- NUT muxer -- additional SPARC (VIS) optimizations -- Matroska muxer -- slice-based parallel H.264 decoding -- Monkey's Audio demuxer and decoder -- AMV audio and video decoder -- DNxHD encoder -- H.264 PAFF decoding -- Nellymoser ASAO decoder -- Beam Software SIFF demuxer and decoder -- libvorbis Vorbis decoding removed in favor of native decoder -- IntraX8 (J-Frame) subdecoder for WMV2 and VC-1 -- Ogg (Theora, Vorbis and FLAC) muxer -- The "device" muxers and demuxers are now in a new libavdevice library -- PC Paintbrush PCX decoder -- Sun Rasterfile decoder -- TechnoTrend PVA demuxer -- Linux Media Labs MPEG-4 (LMLM4) demuxer -- AVM2 (Flash 9) SWF muxer -- QT variant of IMA ADPCM encoder -- VFW grabber -- iPod/iPhone compatible mp4 muxer -- Mimic decoder -- MSN TCP Webcam stream demuxer -- RL2 demuxer / decoder -- IFF demuxer -- 8SVX audio decoder -- non-recursive Makefiles -- BFI demuxer -- MAXIS EA XA (.xa) demuxer / decoder -- BFI video decoder -- OMA demuxer -- MLP/TrueHD decoder -- Electronic Arts CMV decoder -- Motion Pixels Video decoder -- Motion Pixels MVI demuxer -- removed animated GIF decoder/demuxer -- D-Cinema audio muxer -- Electronic Arts TGV decoder -- Apple Lossless Audio Codec (ALAC) encoder -- AAC decoder -- floating point PCM encoder/decoder -- MXF muxer -- DV100 AKA DVCPRO HD decoder and demuxer -- E-AC-3 support added to AC-3 decoder -- Nellymoser ASAO encoder -- ASS and SSA demuxer and muxer -- liba52 wrapper removed -- SVQ3 watermark decoding support -- Speex decoding via libspeex -- Electronic Arts TGQ decoder -- RV40 decoder -- QCELP / PureVoice decoder -- RV30 decoder -- hybrid WavPack support -- R3D REDCODE demuxer -- ALSA support for playback and record -- Electronic Arts TQI decoder -- OpenJPEG based JPEG 2000 decoder -- NC (NC4600) camera file demuxer -- Gopher client support -- MXF D-10 muxer -- generic metadata API -- flash ScreenVideo2 encoder - - -version 0.4.9-pre1: - -- DV encoder, DV muxer -- Microsoft RLE video decoder -- Microsoft Video-1 decoder -- Apple Animation (RLE) decoder -- Apple Graphics (SMC) decoder -- Apple Video (RPZA) decoder -- Cinepak decoder -- Sega FILM (CPK) file demuxer -- Westwood multimedia support (VQA & AUD files) -- Id Quake II CIN playback support -- 8BPS video decoder -- FLIC playback support -- RealVideo 2.0 (RV20) decoder -- Duck TrueMotion v1 (DUCK) video decoder -- Sierra VMD demuxer and video decoder -- MSZH and ZLIB decoder support -- SVQ1 video encoder -- AMR-WB support -- PPC optimizations -- rate distortion optimal cbp support -- rate distorted optimal ac prediction for MPEG-4 -- rate distorted optimal lambda->qp support -- AAC encoding with libfaac -- Sunplus JPEG codec (SP5X) support -- use Lagrange multiplier instead of QP for ratecontrol -- Theora/VP3 decoding support -- XA and ADX ADPCM codecs -- export MPEG-2 active display area / pan scan -- Add support for configuring with IBM XLC -- floating point AAN DCT -- initial support for zygo video (not complete) -- RGB ffv1 support -- new audio/video parser API -- av_log() system -- av_read_frame() and av_seek_frame() support -- missing last frame fixes -- seek by mouse in ffplay -- noise reduction of DCT coefficients -- H.263 OBMC & 4MV support -- H.263 alternative inter vlc support -- H.263 loop filter -- H.263 slice structured mode -- interlaced DCT support for MPEG-2 encoding -- stuffing to stay above min_bitrate -- MB type & QP visualization -- frame stepping for ffplay -- interlaced motion estimation -- alternate scantable support -- SVCD scan offset support -- closed GOP support -- SSE2 FDCT -- quantizer noise shaping -- G.726 ADPCM audio codec -- MS ADPCM encoding -- multithreaded/SMP motion estimation -- multithreaded/SMP encoding for MPEG-1/MPEG-2/MPEG-4/H.263 -- multithreaded/SMP decoding for MPEG-2 -- FLAC decoder -- Metrowerks CodeWarrior suppport -- H.263+ custom pcf support -- nicer output for 'ffmpeg -formats' -- Matroska demuxer -- SGI image format, encoding and decoding -- H.264 loop filter support -- H.264 CABAC support -- nicer looking arrows for the motion vector visualization -- improved VCD support -- audio timestamp drift compensation -- MPEG-2 YUV 422/444 support -- polyphase kaiser windowed sinc and blackman nuttall windowed sinc audio resample -- better image scaling -- H.261 support -- correctly interleave packets during encoding -- VIS optimized motion compensation -- intra_dc_precision>0 encoding support -- support reuse of motion vectors/MB types/field select values of the source video -- more accurate deblock filter -- padding support -- many optimizations and bugfixes -- FunCom ISS audio file demuxer and according ADPCM decoding - - -version 0.4.8: - -- MPEG-2 video encoding (Michael) -- Id RoQ playback subsystem (Mike Melanson and Tim Ferguson) -- Wing Commander III Movie (.mve) file playback subsystem (Mike Melanson - and Mario Brito) -- Xan DPCM audio decoder (Mario Brito) -- Interplay MVE playback subsystem (Mike Melanson) -- Duck DK3 and DK4 ADPCM audio decoders (Mike Melanson) - - -version 0.4.7: - -- RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from mplayerhq - (originally from public domain player for Amiga at http://www.honeypot.net/audio) -- current version now also compiles with older GCC (Fabrice) -- 4X multimedia playback system including 4xm file demuxer (Mike - Melanson), and 4X video and audio codecs (Michael) -- Creative YUV (CYUV) decoder (Mike Melanson) -- FFV1 codec (our very simple lossless intra only codec, compresses much better - than HuffYUV) (Michael) -- ASV1 (Asus), H.264, Intel indeo3 codecs have been added (various) -- tiny PNG encoder and decoder, tiny GIF decoder, PAM decoder (PPM with - alpha support), JPEG YUV colorspace support. (Fabrice Bellard) -- ffplay has been replaced with a newer version which uses SDL (optionally) - for multiplatform support (Fabrice) -- Sorenson Version 3 codec (SVQ3) support has been added (decoding only) - donated - by anonymous -- AMR format has been added (Johannes Carlsson) -- 3GP support has been added (Johannes Carlsson) -- VP3 codec has been added (Mike Melanson) -- more MPEG-1/2 fixes -- better multiplatform support, MS Visual Studio fixes (various) -- AltiVec optimizations (Magnus Damn and others) -- SH4 processor support has been added (BERO) -- new public interfaces (avcodec_get_pix_fmt) (Roman Shaposhnick) -- VOB streaming support (Brian Foley) -- better MP3 autodetection (Andriy Rysin) -- qpel encoding (Michael) -- 4mv+b frames encoding finally fixed (Michael) -- chroma ME (Michael) -- 5 comparison functions for ME (Michael) -- B-frame encoding speedup (Michael) -- WMV2 codec (unfinished - Michael) -- user specified diamond size for EPZS (Michael) -- Playstation STR playback subsystem, still experimental (Mike and Michael) -- ASV2 codec (Michael) -- CLJR decoder (Alex) - -.. And lots more new enhancements and fixes. - - -version 0.4.6: - -- completely new integer only MPEG audio layer 1/2/3 decoder rewritten - from scratch -- Recoded DCT and motion vector search with gcc (no longer depends on nasm) -- fix quantization bug in AC3 encoder -- added PCM codecs and format. Corrected WAV/AVI/ASF PCM issues -- added prototype ffplay program -- added GOB header parsing on H.263/H.263+ decoder (Juanjo) -- bug fix on MCBPC tables of H.263 (Juanjo) -- bug fix on DC coefficients of H.263 (Juanjo) -- added Advanced Prediction Mode on H.263/H.263+ decoder (Juanjo) -- now we can decode H.263 streams found in QuickTime files (Juanjo) -- now we can decode H.263 streams found in VIVO v1 files(Juanjo) -- preliminary RTP "friendly" mode for H.263/H.263+ coding. (Juanjo) -- added GOB header for H.263/H.263+ coding on RTP mode (Juanjo) -- now H.263 picture size is returned on the first decoded frame (Juanjo) -- added first regression tests -- added MPEG-2 TS demuxer -- new demux API for libav -- more accurate and faster IDCT (Michael) -- faster and entropy-controlled motion search (Michael) -- two pass video encoding (Michael) -- new video rate control (Michael) -- added MSMPEG4V1, MSMPEGV2 and WMV1 support (Michael) -- great performance improvement of video encoders and decoders (Michael) -- new and faster bit readers and vlc parsers (Michael) -- high quality encoding mode: tries all macroblock/VLC types (Michael) -- added DV video decoder -- preliminary RTP/RTSP support in ffserver and libavformat -- H.263+ AIC decoding/encoding support (Juanjo) -- VCD MPEG-PS mode (Juanjo) -- PSNR stuff (Juanjo) -- simple stats output (Juanjo) -- 16-bit and 15-bit RGB/BGR/GBR support (Bisqwit) - - -version 0.4.5: - -- some header fixes (Zdenek Kabelac ) -- many MMX optimizations (Nick Kurshev ) -- added configure system (actually a small shell script) -- added MPEG audio layer 1/2/3 decoding using LGPL'ed mpglib by - Michael Hipp (temporary solution - waiting for integer only - decoder) -- fixed VIDIOCSYNC interrupt -- added Intel H.263 decoding support ('I263' AVI fourCC) -- added Real Video 1.0 decoding (needs further testing) -- simplified image formats again. Added PGM format (=grey - pgm). Renamed old PGM to PGMYUV. -- fixed msmpeg4 slice issues (tell me if you still find problems) -- fixed OpenDivX bugs with newer versions (added VOL header decoding) -- added support for MPlayer interface -- added macroblock skip optimization -- added MJPEG decoder -- added mmx/mmxext IDCT from libmpeg2 -- added pgmyuvpipe, ppm, and ppm_pipe formats (original patch by Celer - ) -- added pixel format conversion layer (e.g. for MJPEG or PPM) -- added deinterlacing option -- MPEG-1/2 fixes -- MPEG-4 vol header fixes (Jonathan Marsden ) -- ARM optimizations (Lionel Ulmer ). -- Windows porting of file converter -- added MJPEG raw format (input/output) -- added JPEG image format support (input/output) - - -version 0.4.4: - -- fixed some std header definitions (Bjorn Lindgren - ). -- added MPEG demuxer (MPEG-1 and 2 compatible). -- added ASF demuxer -- added prototype RM demuxer -- added AC3 decoding (done with libac3 by Aaron Holtzman) -- added decoding codec parameter guessing (.e.g. for MPEG, because the - header does not include them) -- fixed header generation in MPEG-1, AVI and ASF muxer: wmplayer can now - play them (only tested video) -- fixed H.263 white bug -- fixed phase rounding in img resample filter -- add MMX code for polyphase img resample filter -- added CPU autodetection -- added generic title/author/copyright/comment string handling (ASF and RM - use them) -- added SWF demux to extract MP3 track (not usable yet because no MP3 - decoder) -- added fractional frame rate support -- codecs are no longer searched by read_header() (should fix ffserver - segfault) - - -version 0.4.3: - -- BGR24 patch (initial patch by Jeroen Vreeken ) -- fixed raw yuv output -- added motion rounding support in MPEG-4 -- fixed motion bug rounding in MSMPEG4 -- added B-frame handling in video core -- added full MPEG-1 decoding support -- added partial (frame only) MPEG-2 support -- changed the FOURCC code for H.263 to "U263" to be able to see the - +AVI/H.263 file with the UB Video H.263+ decoder. MPlayer works with - this +codec ;) (JuanJo). -- Halfpel motion estimation after MB type selection (JuanJo) -- added pgm and .Y.U.V output format -- suppressed 'img:' protocol. Simply use: /tmp/test%d.[pgm|Y] as input or - output. -- added pgmpipe I/O format (original patch from Martin Aumueller - , but changed completely since we use a format - instead of a protocol) - - -version 0.4.2: - -- added H.263/MPEG-4/MSMPEG4 decoding support. MPEG-4 decoding support - (for OpenDivX) is almost complete: 8x8 MVs and rounding are - missing. MSMPEG4 support is complete. -- added prototype MPEG-1 decoder. Only I- and P-frames handled yet (it - can decode ffmpeg MPEGs :-)). -- added libavcodec API documentation (see apiexample.c). -- fixed image polyphase bug (the bottom of some images could be - greenish) -- added support for non clipped motion vectors (decoding only) - and image sizes non-multiple of 16 -- added support for AC prediction (decoding only) -- added file overwrite confirmation (can be disabled with -y) -- added custom size picture to H.263 using H.263+ (Juanjo) - - -version 0.4.1: - -- added MSMPEG4 (aka DivX) compatible encoder. Changed default codec - of AVI and ASF to DIV3. -- added -me option to set motion estimation method - (default=log). suppressed redundant -hq option. -- added options -acodec and -vcodec to force a given codec (useful for - AVI for example) -- fixed -an option -- improved dct_quantize speed -- factorized some motion estimation code - - -version 0.4.0: - -- removing grab code from ffserver and moved it to ffmpeg. Added - multistream support to ffmpeg. -- added timeshifting support for live feeds (option ?date=xxx in the - URL) -- added high quality image resize code with polyphase filter (need - mmx/see optimization). Enable multiple image size support in ffserver. -- added multi live feed support in ffserver -- suppressed master feature from ffserver (it should be done with an - external program which opens the .ffm url and writes it to another - ffserver) -- added preliminary support for video stream parsing (WAV and AVI half - done). Added proper support for audio/video file conversion in - ffmpeg. -- added preliminary support for video file sending from ffserver -- redesigning I/O subsystem: now using URL based input and output - (see avio.h) -- added WAV format support -- added "tty user interface" to ffmpeg to stop grabbing gracefully -- added MMX/SSE optimizations to SAD (Sums of Absolutes Differences) - (Juan J. Sierralta P. a.k.a. "Juanjo" ) -- added MMX DCT from mpeg2_movie 1.5 (Juanjo) -- added new motion estimation algorithms, log and phods (Juanjo) -- changed directories: libav for format handling, libavcodec for - codecs - - -version 0.3.4: - -- added stereo in MPEG audio encoder - - -version 0.3.3: - -- added 'high quality' mode which use motion vectors. It can be used in - real time at low resolution. -- fixed rounding problems which caused quality problems at high - bitrates and large GOP size - - -version 0.3.2: small fixes - -- ASF fixes -- put_seek bug fix - - -version 0.3.1: added avi/divx support - -- added AVI support -- added MPEG-4 codec compatible with OpenDivX. It is based on the H.263 codec -- added sound for flash format (not tested) - - -version 0.3: initial public release diff --git a/3rdparty/ffmpeg/LICENSE.md b/3rdparty/ffmpeg/LICENSE.md deleted file mode 100644 index 371b0913ce7c1..0000000000000 --- a/3rdparty/ffmpeg/LICENSE.md +++ /dev/null @@ -1,127 +0,0 @@ -# License - -Most files in FFmpeg are under the GNU Lesser General Public License version 2.1 -or later (LGPL v2.1+). Read the file `COPYING.LGPLv2.1` for details. Some other -files have MIT/X11/BSD-style licenses. In combination the LGPL v2.1+ applies to -FFmpeg. - -Some optional parts of FFmpeg are licensed under the GNU General Public License -version 2 or later (GPL v2+). See the file `COPYING.GPLv2` for details. None of -these parts are used by default, you have to explicitly pass `--enable-gpl` to -configure to activate them. In this case, FFmpeg's license changes to GPL v2+. - -Specifically, the GPL parts of FFmpeg are: - -- optional x86 optimization in the files - - `libavcodec/x86/flac_dsp_gpl.asm` - - `libavcodec/x86/idct_mmx.c` - - `libavfilter/x86/vf_removegrain.asm` -- the following building and testing tools - - `compat/solaris/make_sunver.pl` - - `doc/t2h.pm` - - `doc/texi2pod.pl` - - `libswresample/tests/swresample.c` - - `tests/checkasm/*` - - `tests/tiny_ssim.c` -- the following filters in libavfilter: - - `signature_lookup.c` - - `vf_blackframe.c` - - `vf_boxblur.c` - - `vf_colormatrix.c` - - `vf_cover_rect.c` - - `vf_cropdetect.c` - - `vf_delogo.c` - - `vf_eq.c` - - `vf_find_rect.c` - - `vf_fspp.c` - - `vf_histeq.c` - - `vf_hqdn3d.c` - - `vf_kerndeint.c` - - `vf_lensfun.c` (GPL version 3 or later) - - `vf_mcdeint.c` - - `vf_mpdecimate.c` - - `vf_nnedi.c` - - `vf_owdenoise.c` - - `vf_perspective.c` - - `vf_phase.c` - - `vf_pp7.c` - - `vf_pullup.c` - - `vf_repeatfields.c` - - `vf_sab.c` - - `vf_signature.c` - - `vf_smartblur.c` - - `vf_spp.c` - - `vf_stereo3d.c` - - `vf_super2xsai.c` - - `vf_tinterlace.c` - - `vf_uspp.c` - - `vf_vaguedenoiser.c` - - `vsrc_mptestsrc.c` - -Should you, for whatever reason, prefer to use version 3 of the (L)GPL, then -the configure parameter `--enable-version3` will activate this licensing option -for you. Read the file `COPYING.LGPLv3` or, if you have enabled GPL parts, -`COPYING.GPLv3` to learn the exact legal terms that apply in this case. - -There are a handful of files under other licensing terms, namely: - -* The files `libavcodec/jfdctfst.c`, `libavcodec/jfdctint_template.c` and - `libavcodec/jrevdct.c` are taken from libjpeg, see the top of the files for - licensing details. Specifically note that you must credit the IJG in the - documentation accompanying your program if you only distribute executables. - You must also indicate any changes including additions and deletions to - those three files in the documentation. -* `tests/reference.pnm` is under the expat license. - - -## External libraries - -FFmpeg can be combined with a number of external libraries, which sometimes -affect the licensing of binaries resulting from the combination. - -### Compatible libraries - -The following libraries are under GPL version 2: -- avisynth -- frei0r -- libcdio -- libdavs2 -- librubberband -- libvidstab -- libx264 -- libx265 -- libxavs -- libxavs2 -- libxvid - -When combining them with FFmpeg, FFmpeg needs to be licensed as GPL as well by -passing `--enable-gpl` to configure. - -The following libraries are under LGPL version 3: -- gmp -- libaribb24 -- liblensfun - -When combining them with FFmpeg, use the configure option `--enable-version3` to -upgrade FFmpeg to the LGPL v3. - -The VMAF, mbedTLS, RK MPI, OpenCORE and VisualOn libraries are under the Apache License -2.0. That license is incompatible with the LGPL v2.1 and the GPL v2, but not with -version 3 of those licenses. So to combine these libraries with FFmpeg, the -license version needs to be upgraded by passing `--enable-version3` to configure. - -The smbclient library is under the GPL v3, to combine it with FFmpeg, -the options `--enable-gpl` and `--enable-version3` have to be passed to -configure to upgrade FFmpeg to the GPL v3. - -### Incompatible libraries - -There are certain libraries you can combine with FFmpeg whose licenses are not -compatible with the GPL and/or the LGPL. If you wish to enable these -libraries, even in circumstances that their license may be incompatible, pass -`--enable-nonfree` to configure. This will cause the resulting binary to be -unredistributable. - -The Fraunhofer FDK AAC and OpenSSL libraries are under licenses which are -incompatible with the GPLv2 and v3. To the best of our knowledge, they are -compatible with the LGPL. diff --git a/3rdparty/ffmpeg/headers-version.txt b/3rdparty/ffmpeg/headers-version.txt deleted file mode 100644 index 07327f9f66bca..0000000000000 --- a/3rdparty/ffmpeg/headers-version.txt +++ /dev/null @@ -1 +0,0 @@ -ffmpeg-8.0 from https://ffmpeg.org/releases/ffmpeg-8.0.tar.xz \ No newline at end of file diff --git a/3rdparty/ffmpeg/include/libavcodec/ac3_parser.h b/3rdparty/ffmpeg/include/libavcodec/ac3_parser.h deleted file mode 100644 index ff8cc4cf09311..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/ac3_parser.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * AC-3 parser prototypes - * Copyright (c) 2003 Fabrice Bellard - * Copyright (c) 2003 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AC3_PARSER_H -#define AVCODEC_AC3_PARSER_H - -#include -#include - -/** - * Extract the bitstream ID and the frame size from AC-3 data. - */ -int av_ac3_parse_header(const uint8_t *buf, size_t size, - uint8_t *bitstream_id, uint16_t *frame_size); - - -#endif /* AVCODEC_AC3_PARSER_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/adts_parser.h b/3rdparty/ffmpeg/include/libavcodec/adts_parser.h deleted file mode 100644 index f85becd13138e..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/adts_parser.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_ADTS_PARSER_H -#define AVCODEC_ADTS_PARSER_H - -#include -#include - -#define AV_AAC_ADTS_HEADER_SIZE 7 - -/** - * Extract the number of samples and frames from AAC data. - * @param[in] buf pointer to AAC data buffer - * @param[out] samples Pointer to where number of samples is written - * @param[out] frames Pointer to where number of frames is written - * @return Returns 0 on success, error code on failure. - */ -int av_adts_header_parse(const uint8_t *buf, uint32_t *samples, - uint8_t *frames); - -#endif /* AVCODEC_ADTS_PARSER_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/avcodec.h b/3rdparty/ffmpeg/include/libavcodec/avcodec.h deleted file mode 100644 index 108df5a24e9d6..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/avcodec.h +++ /dev/null @@ -1,2947 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVCODEC_H -#define AVCODEC_AVCODEC_H - -/** - * @file - * @ingroup libavc - * Libavcodec external API header - */ - -#include "libavutil/samplefmt.h" -#include "libavutil/attributes.h" -#include "libavutil/avutil.h" -#include "libavutil/buffer.h" -#include "libavutil/channel_layout.h" -#include "libavutil/dict.h" -#include "libavutil/frame.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" - -#include "codec.h" -#include "codec_id.h" -#include "defs.h" -#include "packet.h" -#include "version_major.h" -#ifndef HAVE_AV_CONFIG_H -/* When included as part of the ffmpeg build, only include the major version - * to avoid unnecessary rebuilds. When included externally, keep including - * the full version information. */ -#include "version.h" - -#include "codec_desc.h" -#include "codec_par.h" -#endif - -struct AVCodecParameters; - -/** - * @defgroup libavc libavcodec - * Encoding/Decoding Library - * - * @{ - * - * @defgroup lavc_decoding Decoding - * @{ - * @} - * - * @defgroup lavc_encoding Encoding - * @{ - * @} - * - * @defgroup lavc_codec Codecs - * @{ - * @defgroup lavc_codec_native Native Codecs - * @{ - * @} - * @defgroup lavc_codec_wrappers External library wrappers - * @{ - * @} - * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge - * @{ - * @} - * @} - * @defgroup lavc_internal Internal - * @{ - * @} - * @} - */ - -/** - * @ingroup libavc - * @defgroup lavc_encdec send/receive encoding and decoding API overview - * @{ - * - * The avcodec_send_packet()/avcodec_receive_frame()/avcodec_send_frame()/ - * avcodec_receive_packet() functions provide an encode/decode API, which - * decouples input and output. - * - * The API is very similar for encoding/decoding and audio/video, and works as - * follows: - * - Set up and open the AVCodecContext as usual. - * - Send valid input: - * - For decoding, call avcodec_send_packet() to give the decoder raw - * compressed data in an AVPacket. - * - For encoding, call avcodec_send_frame() to give the encoder an AVFrame - * containing uncompressed audio or video. - * - * In both cases, it is recommended that AVPackets and AVFrames are - * refcounted, or libavcodec might have to copy the input data. (libavformat - * always returns refcounted AVPackets, and av_frame_get_buffer() allocates - * refcounted AVFrames.) - * - Receive output in a loop. Periodically call one of the avcodec_receive_*() - * functions and process their output: - * - For decoding, call avcodec_receive_frame(). On success, it will return - * an AVFrame containing uncompressed audio or video data. - * - For encoding, call avcodec_receive_packet(). On success, it will return - * an AVPacket with a compressed frame. - * - * Repeat this call until it returns AVERROR(EAGAIN) or an error. The - * AVERROR(EAGAIN) return value means that new input data is required to - * return new output. In this case, continue with sending input. For each - * input frame/packet, the codec will typically return 1 output frame/packet, - * but it can also be 0 or more than 1. - * - * At the beginning of decoding or encoding, the codec might accept multiple - * input frames/packets without returning a frame, until its internal buffers - * are filled. This situation is handled transparently if you follow the steps - * outlined above. - * - * In theory, sending input can result in EAGAIN - this should happen only if - * not all output was received. You can use this to structure alternative decode - * or encode loops other than the one suggested above. For example, you could - * try sending new input on each iteration, and try to receive output if that - * returns EAGAIN. - * - * End of stream situations. These require "flushing" (aka draining) the codec, - * as the codec might buffer multiple frames or packets internally for - * performance or out of necessity (consider B-frames). - * This is handled as follows: - * - Instead of valid input, send NULL to the avcodec_send_packet() (decoding) - * or avcodec_send_frame() (encoding) functions. This will enter draining - * mode. - * - Call avcodec_receive_frame() (decoding) or avcodec_receive_packet() - * (encoding) in a loop until AVERROR_EOF is returned. The functions will - * not return AVERROR(EAGAIN), unless you forgot to enter draining mode. - * - Before decoding can be resumed again, the codec has to be reset with - * avcodec_flush_buffers(). - * - * Using the API as outlined above is highly recommended. But it is also - * possible to call functions outside of this rigid schema. For example, you can - * call avcodec_send_packet() repeatedly without calling - * avcodec_receive_frame(). In this case, avcodec_send_packet() will succeed - * until the codec's internal buffer has been filled up (which is typically of - * size 1 per output frame, after initial input), and then reject input with - * AVERROR(EAGAIN). Once it starts rejecting input, you have no choice but to - * read at least some output. - * - * Not all codecs will follow a rigid and predictable dataflow; the only - * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on - * one end implies that a receive/send call on the other end will succeed, or - * at least will not fail with AVERROR(EAGAIN). In general, no codec will - * permit unlimited buffering of input or output. - * - * A codec is not allowed to return AVERROR(EAGAIN) for both sending and receiving. This - * would be an invalid state, which could put the codec user into an endless - * loop. The API has no concept of time either: it cannot happen that trying to - * do avcodec_send_packet() results in AVERROR(EAGAIN), but a repeated call 1 second - * later accepts the packet (with no other receive/flush API calls involved). - * The API is a strict state machine, and the passage of time is not supposed - * to influence it. Some timing-dependent behavior might still be deemed - * acceptable in certain cases. But it must never result in both send/receive - * returning EAGAIN at the same time at any point. It must also absolutely be - * avoided that the current state is "unstable" and can "flip-flop" between - * the send/receive APIs allowing progress. For example, it's not allowed that - * the codec randomly decides that it actually wants to consume a packet now - * instead of returning a frame, after it just returned AVERROR(EAGAIN) on an - * avcodec_send_packet() call. - * @} - */ - -/** - * @defgroup lavc_core Core functions/structures. - * @ingroup libavc - * - * Basic definitions, functions for querying libavcodec capabilities, - * allocating core structures, etc. - * @{ - */ - -/** - * @ingroup lavc_encoding - */ -typedef struct RcOverride{ - int start_frame; - int end_frame; - int qscale; // If this is 0 then quality_factor will be used instead. - float quality_factor; -} RcOverride; - -/* encoding support - These flags can be passed in AVCodecContext.flags before initialization. - Note: Not everything is supported yet. -*/ - -/** - * Allow decoders to produce frames with data planes that are not aligned - * to CPU requirements (e.g. due to cropping). - */ -#define AV_CODEC_FLAG_UNALIGNED (1 << 0) -/** - * Use fixed qscale. - */ -#define AV_CODEC_FLAG_QSCALE (1 << 1) -/** - * 4 MV per MB allowed / advanced prediction for H.263. - */ -#define AV_CODEC_FLAG_4MV (1 << 2) -/** - * Output even those frames that might be corrupted. - */ -#define AV_CODEC_FLAG_OUTPUT_CORRUPT (1 << 3) -/** - * Use qpel MC. - */ -#define AV_CODEC_FLAG_QPEL (1 << 4) -/** - * Request the encoder to output reconstructed frames, i.e.\ frames that would - * be produced by decoding the encoded bitstream. These frames may be retrieved - * by calling avcodec_receive_frame() immediately after a successful call to - * avcodec_receive_packet(). - * - * Should only be used with encoders flagged with the - * @ref AV_CODEC_CAP_ENCODER_RECON_FRAME capability. - * - * @note - * Each reconstructed frame returned by the encoder corresponds to the last - * encoded packet, i.e. the frames are returned in coded order rather than - * presentation order. - * - * @note - * Frame parameters (like pixel format or dimensions) do not have to match the - * AVCodecContext values. Make sure to use the values from the returned frame. - */ -#define AV_CODEC_FLAG_RECON_FRAME (1 << 6) -/** - * @par decoding - * Request the decoder to propagate each packet's AVPacket.opaque and - * AVPacket.opaque_ref to its corresponding output AVFrame. - * - * @par encoding: - * Request the encoder to propagate each frame's AVFrame.opaque and - * AVFrame.opaque_ref values to its corresponding output AVPacket. - * - * @par - * May only be set on encoders that have the - * @ref AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability flag. - * - * @note - * While in typical cases one input frame produces exactly one output packet - * (perhaps after a delay), in general the mapping of frames to packets is - * M-to-N, so - * - Any number of input frames may be associated with any given output packet. - * This includes zero - e.g. some encoders may output packets that carry only - * metadata about the whole stream. - * - A given input frame may be associated with any number of output packets. - * Again this includes zero - e.g. some encoders may drop frames under certain - * conditions. - * . - * This implies that when using this flag, the caller must NOT assume that - * - a given input frame's opaques will necessarily appear on some output packet; - * - every output packet will have some non-NULL opaque value. - * . - * When an output packet contains multiple frames, the opaque values will be - * taken from the first of those. - * - * @note - * The converse holds for decoders, with frames and packets switched. - */ -#define AV_CODEC_FLAG_COPY_OPAQUE (1 << 7) -/** - * Signal to the encoder that the values of AVFrame.duration are valid and - * should be used (typically for transferring them to output packets). - * - * If this flag is not set, frame durations are ignored. - */ -#define AV_CODEC_FLAG_FRAME_DURATION (1 << 8) -/** - * Use internal 2pass ratecontrol in first pass mode. - */ -#define AV_CODEC_FLAG_PASS1 (1 << 9) -/** - * Use internal 2pass ratecontrol in second pass mode. - */ -#define AV_CODEC_FLAG_PASS2 (1 << 10) -/** - * loop filter. - */ -#define AV_CODEC_FLAG_LOOP_FILTER (1 << 11) -/** - * Only decode/encode grayscale. - */ -#define AV_CODEC_FLAG_GRAY (1 << 13) -/** - * error[?] variables will be set during encoding. - */ -#define AV_CODEC_FLAG_PSNR (1 << 15) -/** - * Use interlaced DCT. - */ -#define AV_CODEC_FLAG_INTERLACED_DCT (1 << 18) -/** - * Force low delay. - */ -#define AV_CODEC_FLAG_LOW_DELAY (1 << 19) -/** - * Place global headers in extradata instead of every keyframe. - */ -#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22) -/** - * Use only bitexact stuff (except (I)DCT). - */ -#define AV_CODEC_FLAG_BITEXACT (1 << 23) -/* Fx : Flag for H.263+ extra options */ -/** - * H.263 advanced intra coding / MPEG-4 AC prediction - */ -#define AV_CODEC_FLAG_AC_PRED (1 << 24) -/** - * interlaced motion estimation - */ -#define AV_CODEC_FLAG_INTERLACED_ME (1 << 29) -#define AV_CODEC_FLAG_CLOSED_GOP (1U << 31) - -/** - * Allow non spec compliant speedup tricks. - */ -#define AV_CODEC_FLAG2_FAST (1 << 0) -/** - * Skip bitstream encoding. - */ -#define AV_CODEC_FLAG2_NO_OUTPUT (1 << 2) -/** - * Place global headers at every keyframe instead of in extradata. - */ -#define AV_CODEC_FLAG2_LOCAL_HEADER (1 << 3) - -/** - * Input bitstream might be truncated at a packet boundaries - * instead of only at frame boundaries. - */ -#define AV_CODEC_FLAG2_CHUNKS (1 << 15) -/** - * Discard cropping information from SPS. - */ -#define AV_CODEC_FLAG2_IGNORE_CROP (1 << 16) - -/** - * Show all frames before the first keyframe - */ -#define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) -/** - * Export motion vectors through frame side data - */ -#define AV_CODEC_FLAG2_EXPORT_MVS (1 << 28) -/** - * Do not skip samples and export skip information as frame side data - */ -#define AV_CODEC_FLAG2_SKIP_MANUAL (1 << 29) -/** - * Do not reset ASS ReadOrder field on flush (subtitles decoding) - */ -#define AV_CODEC_FLAG2_RO_FLUSH_NOOP (1 << 30) -/** - * Generate/parse ICC profiles on encode/decode, as appropriate for the type of - * file. No effect on codecs which cannot contain embedded ICC profiles, or - * when compiled without support for lcms2. - */ -#define AV_CODEC_FLAG2_ICC_PROFILES (1U << 31) - -/* Exported side data. - These flags can be passed in AVCodecContext.export_side_data before initialization. -*/ -/** - * Export motion vectors through frame side data - */ -#define AV_CODEC_EXPORT_DATA_MVS (1 << 0) -/** - * Export encoder Producer Reference Time through packet side data - */ -#define AV_CODEC_EXPORT_DATA_PRFT (1 << 1) -/** - * Decoding only. - * Export the AVVideoEncParams structure through frame side data. - */ -#define AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS (1 << 2) -/** - * Decoding only. - * Do not apply film grain, export it instead. - */ -#define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3) - -/** - * Decoding only. - * Do not apply picture enhancement layers, export them instead. - */ -#define AV_CODEC_EXPORT_DATA_ENHANCEMENTS (1 << 4) - -/** - * The decoder will keep a reference to the frame and may reuse it later. - */ -#define AV_GET_BUFFER_FLAG_REF (1 << 0) - -/** - * The encoder will keep a reference to the packet and may reuse it later. - */ -#define AV_GET_ENCODE_BUFFER_FLAG_REF (1 << 0) - -/** - * main external API structure. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * You can use AVOptions (av_opt* / av_set/get*()) to access these fields from user - * applications. - * The name string for AVOptions options matches the associated command line - * parameter name and can be found in libavcodec/options_table.h - * The AVOption/command line parameter names differ in some cases from the C - * structure field names for historic reasons or brevity. - * sizeof(AVCodecContext) must not be used outside libav*. - */ -typedef struct AVCodecContext { - /** - * information on struct for av_log - * - set by avcodec_alloc_context3 - */ - const AVClass *av_class; - int log_level_offset; - - enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */ - const struct AVCodec *codec; - enum AVCodecID codec_id; /* see AV_CODEC_ID_xxx */ - - /** - * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). - * This is used to work around some encoder bugs. - * A demuxer should set this to what is stored in the field used to identify the codec. - * If there are multiple such fields in a container then the demuxer should choose the one - * which maximizes the information about the used codec. - * If the codec tag field in a container is larger than 32 bits then the demuxer should - * remap the longer ID to 32 bits with a table or other structure. Alternatively a new - * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated - * first. - * - encoding: Set by user, if not then the default based on codec_id will be used. - * - decoding: Set by user, will be converted to uppercase by libavcodec during init. - */ - unsigned int codec_tag; - - void *priv_data; - - /** - * Private context used for internal data. - * - * Unlike priv_data, this is not codec-specific. It is used in general - * libavcodec functions. - */ - struct AVCodecInternal *internal; - - /** - * Private data of the user, can be used to carry app specific stuff. - * - encoding: Set by user. - * - decoding: Set by user. - */ - void *opaque; - - /** - * the average bitrate - * - encoding: Set by user; unused for constant quantizer encoding. - * - decoding: Set by user, may be overwritten by libavcodec - * if this info is available in the stream - */ - int64_t bit_rate; - - /** - * AV_CODEC_FLAG_*. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int flags; - - /** - * AV_CODEC_FLAG2_* - * - encoding: Set by user. - * - decoding: Set by user. - */ - int flags2; - - /** - * Out-of-band global headers that may be used by some codecs. - * - * - decoding: Should be set by the caller when available (typically from a - * demuxer) before opening the decoder; some decoders require this to be - * set and will fail to initialize otherwise. - * - * The array must be allocated with the av_malloc() family of functions; - * allocated size must be at least AV_INPUT_BUFFER_PADDING_SIZE bytes - * larger than extradata_size. - * - * - encoding: May be set by the encoder in avcodec_open2() (possibly - * depending on whether the AV_CODEC_FLAG_GLOBAL_HEADER flag is set). - * - * After being set, the array is owned by the codec and freed in - * avcodec_free_context(). - */ - uint8_t *extradata; - int extradata_size; - - /** - * This is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. For fixed-fps content, - * timebase should be 1/framerate and timestamp increments should be - * identically 1. - * This often, but not always is the inverse of the frame rate or field rate - * for video. 1/time_base is not the average frame rate if the frame rate is not - * constant. - * - * Like containers, elementary streams also can store timestamps, 1/time_base - * is the unit in which these timestamps are specified. - * As example of such codec time base see ISO/IEC 14496-2:2001(E) - * vop_time_increment_resolution and fixed_vop_rate - * (fixed_vop_rate == 0 implies that it is different from the framerate) - * - * - encoding: MUST be set by user. - * - decoding: unused. - */ - AVRational time_base; - - /** - * Timebase in which pkt_dts/pts and AVPacket.dts/pts are expressed. - * - encoding: unused. - * - decoding: set by user. - */ - AVRational pkt_timebase; - - /** - * - decoding: For codecs that store a framerate value in the compressed - * bitstream, the decoder may export it here. { 0, 1} when - * unknown. - * - encoding: May be used to signal the framerate of CFR content to an - * encoder. - */ - AVRational framerate; - - /** - * Codec delay. - * - * Encoding: Number of frames delay there will be from the encoder input to - * the decoder output. (we assume the decoder matches the spec) - * Decoding: Number of frames delay in addition to what a standard decoder - * as specified in the spec would produce. - * - * Video: - * Number of frames the decoded output will be delayed relative to the - * encoded input. - * - * Audio: - * For encoding, this field is unused (see initial_padding). - * - * For decoding, this is the number of samples the decoder needs to - * output before the decoder's output is valid. When seeking, you should - * start decoding this many samples prior to your desired seek point. - * - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int delay; - - - /* video only */ - /** - * picture width / height. - * - * @note Those fields may not match the values of the last - * AVFrame output by avcodec_receive_frame() due frame - * reordering. - * - * - encoding: MUST be set by user. - * - decoding: May be set by the user before opening the decoder if known e.g. - * from the container. Some decoders will require the dimensions - * to be set by the caller. During decoding, the decoder may - * overwrite those values as required while parsing the data. - */ - int width, height; - - /** - * Bitstream width / height, may be different from width/height e.g. when - * the decoded frame is cropped before being output or lowres is enabled. - * - * @note Those field may not match the value of the last - * AVFrame output by avcodec_receive_frame() due frame - * reordering. - * - * - encoding: unused - * - decoding: May be set by the user before opening the decoder if known - * e.g. from the container. During decoding, the decoder may - * overwrite those values as required while parsing the data. - */ - int coded_width, coded_height; - - /** - * sample aspect ratio (0 if unknown) - * That is the width of a pixel divided by the height of the pixel. - * Numerator and denominator must be relatively prime and smaller than 256 for some video standards. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - AVRational sample_aspect_ratio; - - /** - * Pixel format, see AV_PIX_FMT_xxx. - * May be set by the demuxer if known from headers. - * May be overridden by the decoder if it knows better. - * - * @note This field may not match the value of the last - * AVFrame output by avcodec_receive_frame() due frame - * reordering. - * - * - encoding: Set by user. - * - decoding: Set by user if known, overridden by libavcodec while - * parsing the data. - */ - enum AVPixelFormat pix_fmt; - - /** - * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx. - * - encoding: unused. - * - decoding: Set by libavcodec before calling get_format() - */ - enum AVPixelFormat sw_pix_fmt; - - /** - * Chromaticity coordinates of the source primaries. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorPrimaries color_primaries; - - /** - * Color Transfer Characteristic. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorTransferCharacteristic color_trc; - - /** - * YUV colorspace type. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorSpace colorspace; - - /** - * MPEG vs JPEG YUV range. - * - encoding: Set by user to override the default output color range value, - * If not specified, libavcodec sets the color range depending on the - * output format. - * - decoding: Set by libavcodec, can be set by the user to propagate the - * color range to components reading from the decoder context. - */ - enum AVColorRange color_range; - - /** - * This defines the location of chroma samples. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVChromaLocation chroma_sample_location; - - /** Field order - * - encoding: set by libavcodec - * - decoding: Set by user. - */ - enum AVFieldOrder field_order; - - /** - * number of reference frames - * - encoding: Set by user. - * - decoding: Set by lavc. - */ - int refs; - - /** - * Size of the frame reordering buffer in the decoder. - * For MPEG-2 it is 1 IPB or 0 low delay IP. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int has_b_frames; - - /** - * slice flags - * - encoding: unused - * - decoding: Set by user. - */ - int slice_flags; -#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display -#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG-2 field pics) -#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1) - - /** - * If non NULL, 'draw_horiz_band' is called by the libavcodec - * decoder to draw a horizontal band. It improves cache usage. Not - * all codecs can do that. You must check the codec capabilities - * beforehand. - * When multithreading is used, it may be called from multiple threads - * at the same time; threads might draw different parts of the same AVFrame, - * or multiple AVFrames, and there is no guarantee that slices will be drawn - * in order. - * The function is also used by hardware acceleration APIs. - * It is called at least once during frame decoding to pass - * the data needed for hardware render. - * In that mode instead of pixel data, AVFrame points to - * a structure specific to the acceleration API. The application - * reads the structure and can change some fields to indicate progress - * or mark state. - * - encoding: unused - * - decoding: Set by user. - * @param height the height of the slice - * @param y the y position of the slice - * @param type 1->top field, 2->bottom field, 3->frame - * @param offset offset into the AVFrame.data from which the slice should be read - */ - void (*draw_horiz_band)(struct AVCodecContext *s, - const AVFrame *src, int offset[AV_NUM_DATA_POINTERS], - int y, int type, int height); - - /** - * Callback to negotiate the pixel format. Decoding only, may be set by the - * caller before avcodec_open2(). - * - * Called by some decoders to select the pixel format that will be used for - * the output frames. This is mainly used to set up hardware acceleration, - * then the provided format list contains the corresponding hwaccel pixel - * formats alongside the "software" one. The software pixel format may also - * be retrieved from \ref sw_pix_fmt. - * - * This callback will be called when the coded frame properties (such as - * resolution, pixel format, etc.) change and more than one output format is - * supported for those new properties. If a hardware pixel format is chosen - * and initialization for it fails, the callback may be called again - * immediately. - * - * This callback may be called from different threads if the decoder is - * multi-threaded, but not from more than one thread simultaneously. - * - * @param fmt list of formats which may be used in the current - * configuration, terminated by AV_PIX_FMT_NONE. - * @warning Behavior is undefined if the callback returns a value other - * than one of the formats in fmt or AV_PIX_FMT_NONE. - * @return the chosen format or AV_PIX_FMT_NONE - */ - enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt); - - /** - * maximum number of B-frames between non-B-frames - * Note: The output will be delayed by max_b_frames+1 relative to the input. - * - encoding: Set by user. - * - decoding: unused - */ - int max_b_frames; - - /** - * qscale factor between IP and B-frames - * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset). - * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). - * - encoding: Set by user. - * - decoding: unused - */ - float b_quant_factor; - - /** - * qscale offset between IP and B-frames - * - encoding: Set by user. - * - decoding: unused - */ - float b_quant_offset; - - /** - * qscale factor between P- and I-frames - * If > 0 then the last P-frame quantizer will be used (q = lastp_q * factor + offset). - * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). - * - encoding: Set by user. - * - decoding: unused - */ - float i_quant_factor; - - /** - * qscale offset between P and I-frames - * - encoding: Set by user. - * - decoding: unused - */ - float i_quant_offset; - - /** - * luminance masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float lumi_masking; - - /** - * temporary complexity masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float temporal_cplx_masking; - - /** - * spatial complexity masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float spatial_cplx_masking; - - /** - * p block masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float p_masking; - - /** - * darkness masking (0-> disabled) - * - encoding: Set by user. - * - decoding: unused - */ - float dark_masking; - - /** - * noise vs. sse weight for the nsse comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int nsse_weight; - - /** - * motion estimation comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_cmp; - /** - * subpixel motion estimation comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_sub_cmp; - /** - * macroblock comparison function (not supported yet) - * - encoding: Set by user. - * - decoding: unused - */ - int mb_cmp; - /** - * interlaced DCT comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int ildct_cmp; -#define FF_CMP_SAD 0 -#define FF_CMP_SSE 1 -#define FF_CMP_SATD 2 -#define FF_CMP_DCT 3 -#define FF_CMP_PSNR 4 -#define FF_CMP_BIT 5 -#define FF_CMP_RD 6 -#define FF_CMP_ZERO 7 -#define FF_CMP_VSAD 8 -#define FF_CMP_VSSE 9 -#define FF_CMP_NSSE 10 -#define FF_CMP_W53 11 -#define FF_CMP_W97 12 -#define FF_CMP_DCTMAX 13 -#define FF_CMP_DCT264 14 -#define FF_CMP_MEDIAN_SAD 15 -#define FF_CMP_CHROMA 256 - - /** - * ME diamond size & shape - * - encoding: Set by user. - * - decoding: unused - */ - int dia_size; - - /** - * amount of previous MV predictors (2a+1 x 2a+1 square) - * - encoding: Set by user. - * - decoding: unused - */ - int last_predictor_count; - - /** - * motion estimation prepass comparison function - * - encoding: Set by user. - * - decoding: unused - */ - int me_pre_cmp; - - /** - * ME prepass diamond size & shape - * - encoding: Set by user. - * - decoding: unused - */ - int pre_dia_size; - - /** - * subpel ME quality - * - encoding: Set by user. - * - decoding: unused - */ - int me_subpel_quality; - - /** - * maximum motion estimation search range in subpel units - * If 0 then no limit. - * - * - encoding: Set by user. - * - decoding: unused - */ - int me_range; - - /** - * macroblock decision mode - * - encoding: Set by user. - * - decoding: unused - */ - int mb_decision; -#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp -#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits -#define FF_MB_DECISION_RD 2 ///< rate distortion - - /** - * custom intra quantization matrix - * Must be allocated with the av_malloc() family of functions, and will be freed in - * avcodec_free_context(). - * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. - * - decoding: Set/allocated/freed by libavcodec. - */ - uint16_t *intra_matrix; - - /** - * custom inter quantization matrix - * Must be allocated with the av_malloc() family of functions, and will be freed in - * avcodec_free_context(). - * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. - * - decoding: Set/allocated/freed by libavcodec. - */ - uint16_t *inter_matrix; - - /** - * custom intra quantization matrix - * - encoding: Set by user, can be NULL. - * - decoding: unused. - */ - uint16_t *chroma_intra_matrix; - - /** - * precision of the intra DC coefficient - 8 - * - encoding: Set by user. - * - decoding: Set by libavcodec - */ - int intra_dc_precision; - - /** - * minimum MB Lagrange multiplier - * - encoding: Set by user. - * - decoding: unused - */ - int mb_lmin; - - /** - * maximum MB Lagrange multiplier - * - encoding: Set by user. - * - decoding: unused - */ - int mb_lmax; - - /** - * - encoding: Set by user. - * - decoding: unused - */ - int bidir_refine; - - /** - * minimum GOP size - * - encoding: Set by user. - * - decoding: unused - */ - int keyint_min; - - /** - * the number of pictures in a group of pictures, or 0 for intra_only - * - encoding: Set by user. - * - decoding: unused - */ - int gop_size; - - /** - * Note: Value depends upon the compare function used for fullpel ME. - * - encoding: Set by user. - * - decoding: unused - */ - int mv0_threshold; - - /** - * Number of slices. - * Indicates number of picture subdivisions. Used for parallelized - * decoding. - * - encoding: Set by user - * - decoding: unused - */ - int slices; - - /* audio only */ - int sample_rate; ///< samples per second - - /** - * audio sample format - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - enum AVSampleFormat sample_fmt; ///< sample format - - /** - * Audio channel layout. - * - encoding: must be set by the caller, to one of AVCodec.ch_layouts. - * - decoding: may be set by the caller if known e.g. from the container. - * The decoder can then override during decoding as needed. - */ - AVChannelLayout ch_layout; - - /* The following data should not be initialized. */ - /** - * Number of samples per channel in an audio frame. - * - * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame - * except the last must contain exactly frame_size samples per channel. - * May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then the - * frame size is not restricted. - * - decoding: may be set by some decoders to indicate constant frame size - */ - int frame_size; - - /** - * number of bytes per packet if constant and known or 0 - * Used by some WAV based audio codecs. - */ - int block_align; - - /** - * Audio cutoff bandwidth (0 means "automatic") - * - encoding: Set by user. - * - decoding: unused - */ - int cutoff; - - /** - * Type of service that the audio stream conveys. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - enum AVAudioServiceType audio_service_type; - - /** - * desired sample format - * - encoding: Not used. - * - decoding: Set by user. - * Decoder will decode to this format if it can. - */ - enum AVSampleFormat request_sample_fmt; - - /** - * Audio only. The number of "priming" samples (padding) inserted by the - * encoder at the beginning of the audio. I.e. this number of leading - * decoded samples must be discarded by the caller to get the original audio - * without leading padding. - * - * - decoding: unused - * - encoding: Set by libavcodec. The timestamps on the output packets are - * adjusted by the encoder so that they always refer to the - * first sample of the data actually contained in the packet, - * including any added padding. E.g. if the timebase is - * 1/samplerate and the timestamp of the first input sample is - * 0, the timestamp of the first output packet will be - * -initial_padding. - */ - int initial_padding; - - /** - * Audio only. The amount of padding (in samples) appended by the encoder to - * the end of the audio. I.e. this number of decoded samples must be - * discarded by the caller from the end of the stream to get the original - * audio without any trailing padding. - * - * - decoding: unused - * - encoding: unused - */ - int trailing_padding; - - /** - * Number of samples to skip after a discontinuity - * - decoding: unused - * - encoding: set by libavcodec - */ - int seek_preroll; - - /** - * This callback is called at the beginning of each frame to get data - * buffer(s) for it. There may be one contiguous buffer for all the data or - * there may be a buffer per each data plane or anything in between. What - * this means is, you may set however many entries in buf[] you feel necessary. - * Each buffer must be reference-counted using the AVBuffer API (see description - * of buf[] below). - * - * The following fields will be set in the frame before this callback is - * called: - * - format - * - width, height (video only) - * - sample_rate, channel_layout, nb_samples (audio only) - * Their values may differ from the corresponding values in - * AVCodecContext. This callback must use the frame values, not the codec - * context values, to calculate the required buffer size. - * - * This callback must fill the following fields in the frame: - * - data[] - * - linesize[] - * - extended_data: - * * if the data is planar audio with more than 8 channels, then this - * callback must allocate and fill extended_data to contain all pointers - * to all data planes. data[] must hold as many pointers as it can. - * extended_data must be allocated with av_malloc() and will be freed in - * av_frame_unref(). - * * otherwise extended_data must point to data - * - buf[] must contain one or more pointers to AVBufferRef structures. Each of - * the frame's data and extended_data pointers must be contained in these. That - * is, one AVBufferRef for each allocated chunk of memory, not necessarily one - * AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(), - * and av_buffer_ref(). - * - extended_buf and nb_extended_buf must be allocated with av_malloc() by - * this callback and filled with the extra buffers if there are more - * buffers than buf[] can hold. extended_buf will be freed in - * av_frame_unref(). - * Decoders will generally initialize the whole buffer before it is output - * but it can in rare error conditions happen that uninitialized data is passed - * through. \important The buffers returned by get_buffer* should thus not contain sensitive - * data. - * - * If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call - * avcodec_default_get_buffer2() instead of providing buffers allocated by - * some other means. - * - * Each data plane must be aligned to the maximum required by the target - * CPU. - * - * @see avcodec_default_get_buffer2() - * - * Video: - * - * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused - * (read and/or written to if it is writable) later by libavcodec. - * - * avcodec_align_dimensions2() should be used to find the required width and - * height, as they normally need to be rounded up to the next multiple of 16. - * - * Some decoders do not support linesizes changing between frames. - * - * If frame multithreading is used, this callback may be called from a - * different thread, but not from more than one at once. Does not need to be - * reentrant. - * - * @see avcodec_align_dimensions2() - * - * Audio: - * - * Decoders request a buffer of a particular size by setting - * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may, - * however, utilize only part of the buffer by setting AVFrame.nb_samples - * to a smaller value in the output frame. - * - * As a convenience, av_samples_get_buffer_size() and - * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2() - * functions to find the required data size and to fill data pointers and - * linesize. In AVFrame.linesize, only linesize[0] may be set for audio - * since all planes must be the same size. - * - * @see av_samples_get_buffer_size(), av_samples_fill_arrays() - * - * - encoding: unused - * - decoding: Set by libavcodec, user can override. - */ - int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags); - - /* - encoding parameters */ - /** - * number of bits the bitstream is allowed to diverge from the reference. - * the reference can be CBR (for CBR pass1) or VBR (for pass2) - * - encoding: Set by user; unused for constant quantizer encoding. - * - decoding: unused - */ - int bit_rate_tolerance; - - /** - * Global quality for codecs which cannot change it per frame. - * This should be proportional to MPEG-1/2/4 qscale. - * - encoding: Set by user. - * - decoding: unused - */ - int global_quality; - - /** - * - encoding: Set by user. - * - decoding: unused - */ - int compression_level; -#define FF_COMPRESSION_DEFAULT -1 - - float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) - float qblur; ///< amount of qscale smoothing over time (0.0-1.0) - - /** - * minimum quantizer - * - encoding: Set by user. - * - decoding: unused - */ - int qmin; - - /** - * maximum quantizer - * - encoding: Set by user. - * - decoding: unused - */ - int qmax; - - /** - * maximum quantizer difference between frames - * - encoding: Set by user. - * - decoding: unused - */ - int max_qdiff; - - /** - * decoder bitstream buffer size - * - encoding: Set by user. - * - decoding: May be set by libavcodec. - */ - int rc_buffer_size; - - /** - * ratecontrol override, see RcOverride - * - encoding: Allocated/set/freed by user. - * - decoding: unused - */ - int rc_override_count; - RcOverride *rc_override; - - /** - * maximum bitrate - * - encoding: Set by user. - * - decoding: Set by user, may be overwritten by libavcodec. - */ - int64_t rc_max_rate; - - /** - * minimum bitrate - * - encoding: Set by user. - * - decoding: unused - */ - int64_t rc_min_rate; - - /** - * Ratecontrol attempt to use, at maximum, of what can be used without an underflow. - * - encoding: Set by user. - * - decoding: unused. - */ - float rc_max_available_vbv_use; - - /** - * Ratecontrol attempt to use, at least, times the amount needed to prevent a vbv overflow. - * - encoding: Set by user. - * - decoding: unused. - */ - float rc_min_vbv_overflow_use; - - /** - * Number of bits which should be loaded into the rc buffer before decoding starts. - * - encoding: Set by user. - * - decoding: unused - */ - int rc_initial_buffer_occupancy; - - /** - * trellis RD quantization - * - encoding: Set by user. - * - decoding: unused - */ - int trellis; - - /** - * pass1 encoding statistics output buffer - * - encoding: Set by libavcodec. - * - decoding: unused - */ - char *stats_out; - - /** - * pass2 encoding statistics input buffer - * Concatenated stuff from stats_out of pass1 should be placed here. - * - encoding: Allocated/set/freed by user. - * - decoding: unused - */ - char *stats_in; - - /** - * Work around bugs in encoders which sometimes cannot be detected automatically. - * - encoding: Set by user - * - decoding: Set by user - */ - int workaround_bugs; -#define FF_BUG_AUTODETECT 1 ///< autodetection -#define FF_BUG_XVID_ILACE 4 -#define FF_BUG_UMP4 8 -#define FF_BUG_NO_PADDING 16 -#define FF_BUG_AMV 32 -#define FF_BUG_QPEL_CHROMA 64 -#define FF_BUG_STD_QPEL 128 -#define FF_BUG_QPEL_CHROMA2 256 -#define FF_BUG_DIRECT_BLOCKSIZE 512 -#define FF_BUG_EDGE 1024 -#define FF_BUG_HPEL_CHROMA 2048 -#define FF_BUG_DC_CLIP 4096 -#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders. -#define FF_BUG_TRUNCATED 16384 -#define FF_BUG_IEDGE 32768 - - /** - * strictly follow the standard (MPEG-4, ...). - * - encoding: Set by user. - * - decoding: Set by user. - * Setting this to STRICT or higher means the encoder and decoder will - * generally do stupid things, whereas setting it to unofficial or lower - * will mean the encoder might produce output that is not supported by all - * spec-compliant decoders. Decoders don't differentiate between normal, - * unofficial and experimental (that is, they always try to decode things - * when they can) unless they are explicitly asked to behave stupidly - * (=strictly conform to the specs) - * This may only be set to one of the FF_COMPLIANCE_* values in defs.h. - */ - int strict_std_compliance; - - /** - * error concealment flags - * - encoding: unused - * - decoding: Set by user. - */ - int error_concealment; -#define FF_EC_GUESS_MVS 1 -#define FF_EC_DEBLOCK 2 -#define FF_EC_FAVOR_INTER 256 - - /** - * debug - * - encoding: Set by user. - * - decoding: Set by user. - */ - int debug; -#define FF_DEBUG_PICT_INFO 1 -#define FF_DEBUG_RC 2 -#define FF_DEBUG_BITSTREAM 4 -#define FF_DEBUG_MB_TYPE 8 -#define FF_DEBUG_QP 16 -#define FF_DEBUG_DCT_COEFF 0x00000040 -#define FF_DEBUG_SKIP 0x00000080 -#define FF_DEBUG_STARTCODE 0x00000100 -#define FF_DEBUG_ER 0x00000400 -#define FF_DEBUG_MMCO 0x00000800 -#define FF_DEBUG_BUGS 0x00001000 -#define FF_DEBUG_BUFFERS 0x00008000 -#define FF_DEBUG_THREADS 0x00010000 -#define FF_DEBUG_GREEN_MD 0x00800000 -#define FF_DEBUG_NOMC 0x01000000 - - /** - * Error recognition; may misdetect some more or less valid parts as errors. - * This is a bitfield of the AV_EF_* values defined in defs.h. - * - * - encoding: Set by user. - * - decoding: Set by user. - */ - int err_recognition; - - /** - * Hardware accelerator in use - * - encoding: unused. - * - decoding: Set by libavcodec - */ - const struct AVHWAccel *hwaccel; - - /** - * Legacy hardware accelerator context. - * - * For some hardware acceleration methods, the caller may use this field to - * signal hwaccel-specific data to the codec. The struct pointed to by this - * pointer is hwaccel-dependent and defined in the respective header. Please - * refer to the FFmpeg HW accelerator documentation to know how to fill - * this. - * - * In most cases this field is optional - the necessary information may also - * be provided to libavcodec through @ref hw_frames_ctx or @ref - * hw_device_ctx (see avcodec_get_hw_config()). However, in some cases it - * may be the only method of signalling some (optional) information. - * - * The struct and its contents are owned by the caller. - * - * - encoding: May be set by the caller before avcodec_open2(). Must remain - * valid until avcodec_free_context(). - * - decoding: May be set by the caller in the get_format() callback. - * Must remain valid until the next get_format() call, - * or avcodec_free_context() (whichever comes first). - */ - void *hwaccel_context; - - /** - * A reference to the AVHWFramesContext describing the input (for encoding) - * or output (decoding) frames. The reference is set by the caller and - * afterwards owned (and freed) by libavcodec - it should never be read by - * the caller after being set. - * - * - decoding: This field should be set by the caller from the get_format() - * callback. The previous reference (if any) will always be - * unreffed by libavcodec before the get_format() call. - * - * If the default get_buffer2() is used with a hwaccel pixel - * format, then this AVHWFramesContext will be used for - * allocating the frame buffers. - * - * - encoding: For hardware encoders configured to use a hwaccel pixel - * format, this field should be set by the caller to a reference - * to the AVHWFramesContext describing input frames. - * AVHWFramesContext.format must be equal to - * AVCodecContext.pix_fmt. - * - * This field should be set before avcodec_open2() is called. - */ - AVBufferRef *hw_frames_ctx; - - /** - * A reference to the AVHWDeviceContext describing the device which will - * be used by a hardware encoder/decoder. The reference is set by the - * caller and afterwards owned (and freed) by libavcodec. - * - * This should be used if either the codec device does not require - * hardware frames or any that are used are to be allocated internally by - * libavcodec. If the user wishes to supply any of the frames used as - * encoder input or decoder output then hw_frames_ctx should be used - * instead. When hw_frames_ctx is set in get_format() for a decoder, this - * field will be ignored while decoding the associated stream segment, but - * may again be used on a following one after another get_format() call. - * - * For both encoders and decoders this field should be set before - * avcodec_open2() is called and must not be written to thereafter. - * - * Note that some decoders may require this field to be set initially in - * order to support hw_frames_ctx at all - in that case, all frames - * contexts used must be created on the same device. - */ - AVBufferRef *hw_device_ctx; - - /** - * Bit set of AV_HWACCEL_FLAG_* flags, which affect hardware accelerated - * decoding (if active). - * - encoding: unused - * - decoding: Set by user (either before avcodec_open2(), or in the - * AVCodecContext.get_format callback) - */ - int hwaccel_flags; - - /** - * Video decoding only. Sets the number of extra hardware frames which - * the decoder will allocate for use by the caller. This must be set - * before avcodec_open2() is called. - * - * Some hardware decoders require all frames that they will use for - * output to be defined in advance before decoding starts. For such - * decoders, the hardware frame pool must therefore be of a fixed size. - * The extra frames set here are on top of any number that the decoder - * needs internally in order to operate normally (for example, frames - * used as reference pictures). - */ - int extra_hw_frames; - - /** - * error - * - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR. - * - decoding: unused - */ - uint64_t error[AV_NUM_DATA_POINTERS]; - - /** - * DCT algorithm, see FF_DCT_* below - * - encoding: Set by user. - * - decoding: unused - */ - int dct_algo; -#define FF_DCT_AUTO 0 -#define FF_DCT_FASTINT 1 -#define FF_DCT_INT 2 -#define FF_DCT_MMX 3 -#define FF_DCT_ALTIVEC 5 -#define FF_DCT_FAAN 6 -#define FF_DCT_NEON 7 - - /** - * IDCT algorithm, see FF_IDCT_* below. - * - encoding: Set by user. - * - decoding: Set by user. - */ - int idct_algo; -#define FF_IDCT_AUTO 0 -#define FF_IDCT_INT 1 -#define FF_IDCT_SIMPLE 2 -#define FF_IDCT_SIMPLEMMX 3 -#define FF_IDCT_ARM 7 -#define FF_IDCT_ALTIVEC 8 -#define FF_IDCT_SIMPLEARM 10 -#define FF_IDCT_XVID 14 -#define FF_IDCT_SIMPLEARMV5TE 16 -#define FF_IDCT_SIMPLEARMV6 17 -#define FF_IDCT_FAAN 20 -#define FF_IDCT_SIMPLENEON 22 -#define FF_IDCT_SIMPLEAUTO 128 - - /** - * bits per sample/pixel from the demuxer (needed for huffyuv). - * - encoding: Set by libavcodec. - * - decoding: Set by user. - */ - int bits_per_coded_sample; - - /** - * Bits per sample/pixel of internal libavcodec pixel/sample format. - * - encoding: set by user. - * - decoding: set by libavcodec. - */ - int bits_per_raw_sample; - - /** - * thread count - * is used to decide how many independent tasks should be passed to execute() - * - encoding: Set by user. - * - decoding: Set by user. - */ - int thread_count; - - /** - * Which multithreading methods to use. - * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread, - * so clients which cannot provide future frames should not use it. - * - * - encoding: Set by user, otherwise the default is used. - * - decoding: Set by user, otherwise the default is used. - */ - int thread_type; -#define FF_THREAD_FRAME 1 ///< Decode more than one frame at once -#define FF_THREAD_SLICE 2 ///< Decode more than one part of a single frame at once - - /** - * Which multithreading methods are in use by the codec. - * - encoding: Set by libavcodec. - * - decoding: Set by libavcodec. - */ - int active_thread_type; - - /** - * The codec may call this to execute several independent things. - * It will return only after finishing all tasks. - * The user may replace this with some multithreaded implementation, - * the default implementation will execute the parts serially. - * @param count the number of things to execute - * - encoding: Set by libavcodec, user can override. - * - decoding: Set by libavcodec, user can override. - */ - int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size); - - /** - * The codec may call this to execute several independent things. - * It will return only after finishing all tasks. - * The user may replace this with some multithreaded implementation, - * the default implementation will execute the parts serially. - * @param c context passed also to func - * @param count the number of things to execute - * @param arg2 argument passed unchanged to func - * @param ret return values of executed functions, must have space for "count" values. May be NULL. - * @param func function that will be called count times, with jobnr from 0 to count-1. - * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no - * two instances of func executing at the same time will have the same threadnr. - * @return always 0 currently, but code should handle a future improvement where when any call to func - * returns < 0 no further calls to func may be done and < 0 is returned. - * - encoding: Set by libavcodec, user can override. - * - decoding: Set by libavcodec, user can override. - */ - int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count); - - /** - * profile - * - encoding: Set by user. - * - decoding: Set by libavcodec. - * See the AV_PROFILE_* defines in defs.h. - */ - int profile; - - /** - * Encoding level descriptor. - * - encoding: Set by user, corresponds to a specific level defined by the - * codec, usually corresponding to the profile level, if not specified it - * is set to AV_LEVEL_UNKNOWN. - * - decoding: Set by libavcodec. - * See AV_LEVEL_* in defs.h. - */ - int level; - -#if FF_API_CODEC_PROPS - /** - * Properties of the stream that gets decoded - * - encoding: unused - * - decoding: set by libavcodec - */ - attribute_deprecated - unsigned properties; -#define FF_CODEC_PROPERTY_LOSSLESS 0x00000001 -#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002 -#define FF_CODEC_PROPERTY_FILM_GRAIN 0x00000004 -#endif - - /** - * Skip loop filtering for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_loop_filter; - - /** - * Skip IDCT/dequantization for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_idct; - - /** - * Skip decoding for selected frames. - * - encoding: unused - * - decoding: Set by user. - */ - enum AVDiscard skip_frame; - - /** - * Skip processing alpha if supported by codec. - * Note that if the format uses pre-multiplied alpha (common with VP6, - * and recommended due to better video quality/compression) - * the image will look as if alpha-blended onto a black background. - * However for formats that do not use pre-multiplied alpha - * there might be serious artefacts (though e.g. libswscale currently - * assumes pre-multiplied alpha anyway). - * - * - decoding: set by user - * - encoding: unused - */ - int skip_alpha; - - /** - * Number of macroblock rows at the top which are skipped. - * - encoding: unused - * - decoding: Set by user. - */ - int skip_top; - - /** - * Number of macroblock rows at the bottom which are skipped. - * - encoding: unused - * - decoding: Set by user. - */ - int skip_bottom; - - /** - * low resolution decoding, 1-> 1/2 size, 2->1/4 size - * - encoding: unused - * - decoding: Set by user. - */ - int lowres; - - /** - * AVCodecDescriptor - * - encoding: unused. - * - decoding: set by libavcodec. - */ - const struct AVCodecDescriptor *codec_descriptor; - - /** - * Character encoding of the input subtitles file. - * - decoding: set by user - * - encoding: unused - */ - char *sub_charenc; - - /** - * Subtitles character encoding mode. Formats or codecs might be adjusting - * this setting (if they are doing the conversion themselves for instance). - * - decoding: set by libavcodec - * - encoding: unused - */ - int sub_charenc_mode; -#define FF_SUB_CHARENC_MODE_DO_NOTHING -1 ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance) -#define FF_SUB_CHARENC_MODE_AUTOMATIC 0 ///< libavcodec will select the mode itself -#define FF_SUB_CHARENC_MODE_PRE_DECODER 1 ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv -#define FF_SUB_CHARENC_MODE_IGNORE 2 ///< neither convert the subtitles, nor check them for valid UTF-8 - - /** - * Header containing style information for text subtitles. - * For SUBTITLE_ASS subtitle type, it should contain the whole ASS - * [Script Info] and [V4+ Styles] section, plus the [Events] line and - * the Format line following. It shouldn't include any Dialogue line. - * - * - encoding: May be set by the caller before avcodec_open2() to an array - * allocated with the av_malloc() family of functions. - * - decoding: May be set by libavcodec in avcodec_open2(). - * - * After being set, the array is owned by the codec and freed in - * avcodec_free_context(). - */ - int subtitle_header_size; - uint8_t *subtitle_header; - - /** - * dump format separator. - * can be ", " or "\n " or anything else - * - encoding: Set by user. - * - decoding: Set by user. - */ - uint8_t *dump_separator; - - /** - * ',' separated list of allowed decoders. - * If NULL then all are allowed - * - encoding: unused - * - decoding: set by user - */ - char *codec_whitelist; - - /** - * Additional data associated with the entire coded stream. - * - * - decoding: may be set by user before calling avcodec_open2(). - * - encoding: may be set by libavcodec after avcodec_open2(). - */ - AVPacketSideData *coded_side_data; - int nb_coded_side_data; - - /** - * Bit set of AV_CODEC_EXPORT_DATA_* flags, which affects the kind of - * metadata exported in frame, packet, or coded stream side data by - * decoders and encoders. - * - * - decoding: set by user - * - encoding: set by user - */ - int export_side_data; - - /** - * The number of pixels per image to maximally accept. - * - * - decoding: set by user - * - encoding: set by user - */ - int64_t max_pixels; - - /** - * Video decoding only. Certain video codecs support cropping, meaning that - * only a sub-rectangle of the decoded frame is intended for display. This - * option controls how cropping is handled by libavcodec. - * - * When set to 1 (the default), libavcodec will apply cropping internally. - * I.e. it will modify the output frame width/height fields and offset the - * data pointers (only by as much as possible while preserving alignment, or - * by the full amount if the AV_CODEC_FLAG_UNALIGNED flag is set) so that - * the frames output by the decoder refer only to the cropped area. The - * crop_* fields of the output frames will be zero. - * - * When set to 0, the width/height fields of the output frames will be set - * to the coded dimensions and the crop_* fields will describe the cropping - * rectangle. Applying the cropping is left to the caller. - * - * @warning When hardware acceleration with opaque output frames is used, - * libavcodec is unable to apply cropping from the top/left border. - * - * @note when this option is set to zero, the width/height fields of the - * AVCodecContext and output AVFrames have different meanings. The codec - * context fields store display dimensions (with the coded dimensions in - * coded_width/height), while the frame fields store the coded dimensions - * (with the display dimensions being determined by the crop_* fields). - */ - int apply_cropping; - - /** - * The percentage of damaged samples to discard a frame. - * - * - decoding: set by user - * - encoding: unused - */ - int discard_damaged_percentage; - - /** - * The number of samples per frame to maximally accept. - * - * - decoding: set by user - * - encoding: set by user - */ - int64_t max_samples; - - /** - * This callback is called at the beginning of each packet to get a data - * buffer for it. - * - * The following field will be set in the packet before this callback is - * called: - * - size - * This callback must use the above value to calculate the required buffer size, - * which must padded by at least AV_INPUT_BUFFER_PADDING_SIZE bytes. - * - * In some specific cases, the encoder may not use the entire buffer allocated by this - * callback. This will be reflected in the size value in the packet once returned by - * avcodec_receive_packet(). - * - * This callback must fill the following fields in the packet: - * - data: alignment requirements for AVPacket apply, if any. Some architectures and - * encoders may benefit from having aligned data. - * - buf: must contain a pointer to an AVBufferRef structure. The packet's - * data pointer must be contained in it. See: av_buffer_create(), av_buffer_alloc(), - * and av_buffer_ref(). - * - * If AV_CODEC_CAP_DR1 is not set then get_encode_buffer() must call - * avcodec_default_get_encode_buffer() instead of providing a buffer allocated by - * some other means. - * - * The flags field may contain a combination of AV_GET_ENCODE_BUFFER_FLAG_ flags. - * They may be used for example to hint what use the buffer may get after being - * created. - * Implementations of this callback may ignore flags they don't understand. - * If AV_GET_ENCODE_BUFFER_FLAG_REF is set in flags then the packet may be reused - * (read and/or written to if it is writable) later by libavcodec. - * - * This callback must be thread-safe, as when frame threading is used, it may - * be called from multiple threads simultaneously. - * - * @see avcodec_default_get_encode_buffer() - * - * - encoding: Set by libavcodec, user can override. - * - decoding: unused - */ - int (*get_encode_buffer)(struct AVCodecContext *s, AVPacket *pkt, int flags); - - /** - * Frame counter, set by libavcodec. - * - * - decoding: total number of frames returned from the decoder so far. - * - encoding: total number of frames passed to the encoder so far. - * - * @note the counter is not incremented if encoding/decoding resulted in - * an error. - */ - int64_t frame_num; - - /** - * Decoding only. May be set by the caller before avcodec_open2() to an - * av_malloc()'ed array (or via AVOptions). Owned and freed by the decoder - * afterwards. - * - * Side data attached to decoded frames may come from several sources: - * 1. coded_side_data, which the decoder will for certain types translate - * from packet-type to frame-type and attach to frames; - * 2. side data attached to an AVPacket sent for decoding (same - * considerations as above); - * 3. extracted from the coded bytestream. - * The first two cases are supplied by the caller and typically come from a - * container. - * - * This array configures decoder behaviour in cases when side data of the - * same type is present both in the coded bytestream and in the - * user-supplied side data (items 1. and 2. above). In all cases, at most - * one instance of each side data type will be attached to output frames. By - * default it will be the bytestream side data. Adding an - * AVPacketSideDataType value to this array will flip the preference for - * this type, thus making the decoder prefer user-supplied side data over - * bytestream. In case side data of the same type is present both in - * coded_data and attacked to a packet, the packet instance always has - * priority. - * - * The array may also contain a single -1, in which case the preference is - * switched for all side data types. - */ - int *side_data_prefer_packet; - /** - * Number of entries in side_data_prefer_packet. - */ - unsigned nb_side_data_prefer_packet; - - /** - * Array containing static side data, such as HDR10 CLL / MDCV structures. - * Side data entries should be allocated by usage of helpers defined in - * libavutil/frame.h. - * - * - encoding: may be set by user before calling avcodec_open2() for - * encoder configuration. Afterwards owned and freed by the - * encoder. - * - decoding: may be set by libavcodec in avcodec_open2(). - */ - AVFrameSideData **decoded_side_data; - int nb_decoded_side_data; -} AVCodecContext; - -/** - * @defgroup lavc_hwaccel AVHWAccel - * - * @note Nothing in this structure should be accessed by the user. At some - * point in future it will not be externally visible at all. - * - * @{ - */ -typedef struct AVHWAccel { - /** - * Name of the hardware accelerated codec. - * The name is globally unique among encoders and among decoders (but an - * encoder and a decoder can share the same name). - */ - const char *name; - - /** - * Type of codec implemented by the hardware accelerator. - * - * See AVMEDIA_TYPE_xxx - */ - enum AVMediaType type; - - /** - * Codec implemented by the hardware accelerator. - * - * See AV_CODEC_ID_xxx - */ - enum AVCodecID id; - - /** - * Supported pixel format. - * - * Only hardware accelerated formats are supported here. - */ - enum AVPixelFormat pix_fmt; - - /** - * Hardware accelerated codec capabilities. - * see AV_HWACCEL_CODEC_CAP_* - */ - int capabilities; -} AVHWAccel; - -/** - * HWAccel is experimental and is thus avoided in favor of non experimental - * codecs - */ -#define AV_HWACCEL_CODEC_CAP_EXPERIMENTAL 0x0200 - -/** - * Hardware acceleration should be used for decoding even if the codec level - * used is unknown or higher than the maximum supported level reported by the - * hardware driver. - * - * It's generally a good idea to pass this flag unless you have a specific - * reason not to, as hardware tends to under-report supported levels. - */ -#define AV_HWACCEL_FLAG_IGNORE_LEVEL (1 << 0) - -/** - * Hardware acceleration can output YUV pixel formats with a different chroma - * sampling than 4:2:0 and/or other than 8 bits per component. - */ -#define AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH (1 << 1) - -/** - * Hardware acceleration should still be attempted for decoding when the - * codec profile does not match the reported capabilities of the hardware. - * - * For example, this can be used to try to decode baseline profile H.264 - * streams in hardware - it will often succeed, because many streams marked - * as baseline profile actually conform to constrained baseline profile. - * - * @warning If the stream is actually not supported then the behaviour is - * undefined, and may include returning entirely incorrect output - * while indicating success. - */ -#define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2) - -/** - * Some hardware decoders (namely nvdec) can either output direct decoder - * surfaces, or make an on-device copy and return said copy. - * There is a hard limit on how many decoder surfaces there can be, and it - * cannot be accurately guessed ahead of time. - * For some processing chains, this can be okay, but others will run into the - * limit and in turn produce very confusing errors that require fine tuning of - * more or less obscure options by the user, or in extreme cases cannot be - * resolved at all without inserting an avfilter that forces a copy. - * - * Thus, the hwaccel will by default make a copy for safety and resilience. - * If a users really wants to minimize the amount of copies, they can set this - * flag and ensure their processing chain does not exhaust the surface pool. - */ -#define AV_HWACCEL_FLAG_UNSAFE_OUTPUT (1 << 3) - -/** - * @} - */ - -enum AVSubtitleType { - SUBTITLE_NONE, - - SUBTITLE_BITMAP, ///< A bitmap, pict will be set - - /** - * Plain text, the text field must be set by the decoder and is - * authoritative. ass and pict fields may contain approximations. - */ - SUBTITLE_TEXT, - - /** - * Formatted text, the ass field must be set by the decoder and is - * authoritative. pict and text fields may contain approximations. - */ - SUBTITLE_ASS, -}; - -#define AV_SUBTITLE_FLAG_FORCED 0x00000001 - -typedef struct AVSubtitleRect { - int x; ///< top left corner of pict, undefined when pict is not set - int y; ///< top left corner of pict, undefined when pict is not set - int w; ///< width of pict, undefined when pict is not set - int h; ///< height of pict, undefined when pict is not set - int nb_colors; ///< number of colors in pict, undefined when pict is not set - - /** - * data+linesize for the bitmap of this subtitle. - * Can be set for text/ass as well once they are rendered. - */ - uint8_t *data[4]; - int linesize[4]; - - int flags; - enum AVSubtitleType type; - - char *text; ///< 0 terminated plain UTF-8 text - - /** - * 0 terminated ASS/SSA compatible event line. - * The presentation of this is unaffected by the other values in this - * struct. - */ - char *ass; -} AVSubtitleRect; - -typedef struct AVSubtitle { - uint16_t format; /* 0 = graphics */ - uint32_t start_display_time; /* relative to packet pts, in ms */ - uint32_t end_display_time; /* relative to packet pts, in ms */ - unsigned num_rects; - AVSubtitleRect **rects; - int64_t pts; ///< Same as packet pts, in AV_TIME_BASE -} AVSubtitle; - -/** - * Return the LIBAVCODEC_VERSION_INT constant. - */ -unsigned avcodec_version(void); - -/** - * Return the libavcodec build-time configuration. - */ -const char *avcodec_configuration(void); - -/** - * Return the libavcodec license. - */ -const char *avcodec_license(void); - -/** - * Allocate an AVCodecContext and set its fields to default values. The - * resulting struct should be freed with avcodec_free_context(). - * - * @param codec if non-NULL, allocate private data and initialize defaults - * for the given codec. It is illegal to then call avcodec_open2() - * with a different codec. - * If NULL, then the codec-specific defaults won't be initialized, - * which may result in suboptimal default settings (this is - * important mainly for encoders, e.g. libx264). - * - * @return An AVCodecContext filled with default values or NULL on failure. - */ -AVCodecContext *avcodec_alloc_context3(const AVCodec *codec); - -/** - * Free the codec context and everything associated with it and write NULL to - * the provided pointer. - */ -void avcodec_free_context(AVCodecContext **avctx); - -/** - * Get the AVClass for AVCodecContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avcodec_get_class(void); - -/** - * Get the AVClass for AVSubtitleRect. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avcodec_get_subtitle_rect_class(void); - -/** - * Fill the parameters struct based on the values from the supplied codec - * context. Any allocated fields in par are freed and replaced with duplicates - * of the corresponding fields in codec. - * - * @return >= 0 on success, a negative AVERROR code on failure - */ -int avcodec_parameters_from_context(struct AVCodecParameters *par, - const AVCodecContext *codec); - -/** - * Fill the codec context based on the values from the supplied codec - * parameters. Any allocated fields in codec that have a corresponding field in - * par are freed and replaced with duplicates of the corresponding field in par. - * Fields in codec that do not have a counterpart in par are not touched. - * - * @return >= 0 on success, a negative AVERROR code on failure. - */ -int avcodec_parameters_to_context(AVCodecContext *codec, - const struct AVCodecParameters *par); - -/** - * Initialize the AVCodecContext to use the given AVCodec. Prior to using this - * function the context has to be allocated with avcodec_alloc_context3(). - * - * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), - * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for - * retrieving a codec. - * - * Depending on the codec, you might need to set options in the codec context - * also for decoding (e.g. width, height, or the pixel or audio sample format in - * the case the information is not available in the bitstream, as when decoding - * raw audio or video). - * - * Options in the codec context can be set either by setting them in the options - * AVDictionary, or by setting the values in the context itself, directly or by - * using the av_opt_set() API before calling this function. - * - * Example: - * @code - * av_dict_set(&opts, "b", "2.5M", 0); - * codec = avcodec_find_decoder(AV_CODEC_ID_H264); - * if (!codec) - * exit(1); - * - * context = avcodec_alloc_context3(codec); - * - * if (avcodec_open2(context, codec, opts) < 0) - * exit(1); - * @endcode - * - * In the case AVCodecParameters are available (e.g. when demuxing a stream - * using libavformat, and accessing the AVStream contained in the demuxer), the - * codec parameters can be copied to the codec context using - * avcodec_parameters_to_context(), as in the following example: - * - * @code - * AVStream *stream = ...; - * context = avcodec_alloc_context3(codec); - * if (avcodec_parameters_to_context(context, stream->codecpar) < 0) - * exit(1); - * if (avcodec_open2(context, codec, NULL) < 0) - * exit(1); - * @endcode - * - * @note Always call this function before using decoding routines (such as - * @ref avcodec_receive_frame()). - * - * @param avctx The context to initialize. - * @param codec The codec to open this context for. If a non-NULL codec has been - * previously passed to avcodec_alloc_context3() or - * for this context, then this parameter MUST be either NULL or - * equal to the previously passed codec. - * @param options A dictionary filled with AVCodecContext and codec-private - * options, which are set on top of the options already set in - * avctx, can be NULL. On return this object will be filled with - * options that were not found in the avctx codec context. - * - * @return zero on success, a negative value on error - * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(), - * av_dict_set(), av_opt_set(), av_opt_find(), avcodec_parameters_to_context() - */ -int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options); - -/** - * Free all allocated data in the given subtitle struct. - * - * @param sub AVSubtitle to free. - */ -void avsubtitle_free(AVSubtitle *sub); - -/** - * @} - */ - -/** - * @addtogroup lavc_decoding - * @{ - */ - -/** - * The default callback for AVCodecContext.get_buffer2(). It is made public so - * it can be called by custom get_buffer2() implementations for decoders without - * AV_CODEC_CAP_DR1 set. - */ -int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags); - -/** - * The default callback for AVCodecContext.get_encode_buffer(). It is made public so - * it can be called by custom get_encode_buffer() implementations for encoders without - * AV_CODEC_CAP_DR1 set. - */ -int avcodec_default_get_encode_buffer(AVCodecContext *s, AVPacket *pkt, int flags); - -/** - * Modify width and height values so that they will result in a memory - * buffer that is acceptable for the codec if you do not use any horizontal - * padding. - * - * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. - */ -void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height); - -/** - * Modify width and height values so that they will result in a memory - * buffer that is acceptable for the codec if you also ensure that all - * line sizes are a multiple of the respective linesize_align[i]. - * - * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. - */ -void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, - int linesize_align[AV_NUM_DATA_POINTERS]); - -/** - * Decode a subtitle message. - * Return a negative value on error, otherwise return the number of bytes used. - * If no subtitle could be decompressed, got_sub_ptr is zero. - * Otherwise, the subtitle is stored in *sub. - * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for - * simplicity, because the performance difference is expected to be negligible - * and reusing a get_buffer written for video codecs would probably perform badly - * due to a potentially very different allocation pattern. - * - * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input - * and output. This means that for some packets they will not immediately - * produce decoded output and need to be flushed at the end of decoding to get - * all the decoded data. Flushing is done by calling this function with packets - * with avpkt->data set to NULL and avpkt->size set to 0 until it stops - * returning subtitles. It is safe to flush even those decoders that are not - * marked with AV_CODEC_CAP_DELAY, then no subtitles will be returned. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx the codec context - * @param[out] sub The preallocated AVSubtitle in which the decoded subtitle will be stored, - * must be freed with avsubtitle_free if *got_sub_ptr is set. - * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero. - * @param[in] avpkt The input AVPacket containing the input buffer. - */ -int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, - int *got_sub_ptr, const AVPacket *avpkt); - -/** - * Supply raw packet data as input to a decoder. - * - * Internally, this call will copy relevant AVCodecContext fields, which can - * influence decoding per-packet, and apply them when the packet is actually - * decoded. (For example AVCodecContext.skip_frame, which might direct the - * decoder to drop the frame contained by the packet sent with this function.) - * - * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE - * larger than the actual read bytes because some optimized bitstream - * readers read 32 or 64 bits at once and could read over the end. - * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * - * @param avctx codec context - * @param[in] avpkt The input AVPacket. Usually, this will be a single video - * frame, or several complete audio frames. - * Ownership of the packet remains with the caller, and the - * decoder will not write to the packet. The decoder may create - * a reference to the packet data (or copy it if the packet is - * not reference-counted). - * Unlike with older APIs, the packet is always fully consumed, - * and if it contains multiple frames (e.g. some audio codecs), - * will require you to call avcodec_receive_frame() multiple - * times afterwards before you can send a new packet. - * It can be NULL (or an AVPacket with data set to NULL and - * size set to 0); in this case, it is considered a flush - * packet, which signals the end of the stream. Sending the - * first flush packet will return success. Subsequent ones are - * unnecessary and will return AVERROR_EOF. If the decoder - * still has frames buffered, it will return them after sending - * a flush packet. - * - * @retval 0 success - * @retval AVERROR(EAGAIN) input is not accepted in the current state - user - * must read output with avcodec_receive_frame() (once - * all output is read, the packet should be resent, - * and the call will not fail with EAGAIN). - * @retval AVERROR_EOF the decoder has been flushed, and no new packets can be - * sent to it (also returned if more than 1 flush - * packet is sent) - * @retval AVERROR(EINVAL) codec not opened, it is an encoder, or requires flush - * @retval AVERROR(ENOMEM) failed to add packet to internal queue, or similar - * @retval "another negative error code" legitimate decoding errors - */ -int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); - -/** - * Return decoded output data from a decoder or encoder (when the - * @ref AV_CODEC_FLAG_RECON_FRAME flag is used). - * - * @param avctx codec context - * @param frame This will be set to a reference-counted video or audio - * frame (depending on the decoder type) allocated by the - * codec. Note that the function will always call - * av_frame_unref(frame) before doing anything else. - * - * @retval 0 success, a frame was returned - * @retval AVERROR(EAGAIN) output is not available in this state - user must - * try to send new input - * @retval AVERROR_EOF the codec has been fully flushed, and there will be - * no more output frames - * @retval AVERROR(EINVAL) codec not opened, or it is an encoder without the - * @ref AV_CODEC_FLAG_RECON_FRAME flag enabled - * @retval "other negative error code" legitimate decoding errors - */ -int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame); - -/** - * Supply a raw video or audio frame to the encoder. Use avcodec_receive_packet() - * to retrieve buffered output packets. - * - * @param avctx codec context - * @param[in] frame AVFrame containing the raw audio or video frame to be encoded. - * Ownership of the frame remains with the caller, and the - * encoder will not write to the frame. The encoder may create - * a reference to the frame data (or copy it if the frame is - * not reference-counted). - * It can be NULL, in which case it is considered a flush - * packet. This signals the end of the stream. If the encoder - * still has packets buffered, it will return them after this - * call. Once flushing mode has been entered, additional flush - * packets are ignored, and sending frames will return - * AVERROR_EOF. - * - * For audio: - * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame - * can have any number of samples. - * If it is not set, frame->nb_samples must be equal to - * avctx->frame_size for all frames except the last. - * The final frame may be smaller than avctx->frame_size. - * @retval 0 success - * @retval AVERROR(EAGAIN) input is not accepted in the current state - user must - * read output with avcodec_receive_packet() (once all - * output is read, the packet should be resent, and the - * call will not fail with EAGAIN). - * @retval AVERROR_EOF the encoder has been flushed, and no new frames can - * be sent to it - * @retval AVERROR(EINVAL) codec not opened, it is a decoder, or requires flush - * @retval AVERROR(ENOMEM) failed to add packet to internal queue, or similar - * @retval "another negative error code" legitimate encoding errors - */ -int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame); - -/** - * Read encoded data from the encoder. - * - * @param avctx codec context - * @param avpkt This will be set to a reference-counted packet allocated by the - * encoder. Note that the function will always call - * av_packet_unref(avpkt) before doing anything else. - * @retval 0 success - * @retval AVERROR(EAGAIN) output is not available in the current state - user must - * try to send input - * @retval AVERROR_EOF the encoder has been fully flushed, and there will be no - * more output packets - * @retval AVERROR(EINVAL) codec not opened, or it is a decoder - * @retval "another negative error code" legitimate encoding errors - */ -int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt); - -/** - * Create and return a AVHWFramesContext with values adequate for hardware - * decoding. This is meant to get called from the get_format callback, and is - * a helper for preparing a AVHWFramesContext for AVCodecContext.hw_frames_ctx. - * This API is for decoding with certain hardware acceleration modes/APIs only. - * - * The returned AVHWFramesContext is not initialized. The caller must do this - * with av_hwframe_ctx_init(). - * - * Calling this function is not a requirement, but makes it simpler to avoid - * codec or hardware API specific details when manually allocating frames. - * - * Alternatively to this, an API user can set AVCodecContext.hw_device_ctx, - * which sets up AVCodecContext.hw_frames_ctx fully automatically, and makes - * it unnecessary to call this function or having to care about - * AVHWFramesContext initialization at all. - * - * There are a number of requirements for calling this function: - * - * - It must be called from get_format with the same avctx parameter that was - * passed to get_format. Calling it outside of get_format is not allowed, and - * can trigger undefined behavior. - * - The function is not always supported (see description of return values). - * Even if this function returns successfully, hwaccel initialization could - * fail later. (The degree to which implementations check whether the stream - * is actually supported varies. Some do this check only after the user's - * get_format callback returns.) - * - The hw_pix_fmt must be one of the choices suggested by get_format. If the - * user decides to use a AVHWFramesContext prepared with this API function, - * the user must return the same hw_pix_fmt from get_format. - * - The device_ref passed to this function must support the given hw_pix_fmt. - * - After calling this API function, it is the user's responsibility to - * initialize the AVHWFramesContext (returned by the out_frames_ref parameter), - * and to set AVCodecContext.hw_frames_ctx to it. If done, this must be done - * before returning from get_format (this is implied by the normal - * AVCodecContext.hw_frames_ctx API rules). - * - The AVHWFramesContext parameters may change every time time get_format is - * called. Also, AVCodecContext.hw_frames_ctx is reset before get_format. So - * you are inherently required to go through this process again on every - * get_format call. - * - It is perfectly possible to call this function without actually using - * the resulting AVHWFramesContext. One use-case might be trying to reuse a - * previously initialized AVHWFramesContext, and calling this API function - * only to test whether the required frame parameters have changed. - * - Fields that use dynamically allocated values of any kind must not be set - * by the user unless setting them is explicitly allowed by the documentation. - * If the user sets AVHWFramesContext.free and AVHWFramesContext.user_opaque, - * the new free callback must call the potentially set previous free callback. - * This API call may set any dynamically allocated fields, including the free - * callback. - * - * The function will set at least the following fields on AVHWFramesContext - * (potentially more, depending on hwaccel API): - * - * - All fields set by av_hwframe_ctx_alloc(). - * - Set the format field to hw_pix_fmt. - * - Set the sw_format field to the most suited and most versatile format. (An - * implication is that this will prefer generic formats over opaque formats - * with arbitrary restrictions, if possible.) - * - Set the width/height fields to the coded frame size, rounded up to the - * API-specific minimum alignment. - * - Only _if_ the hwaccel requires a pre-allocated pool: set the initial_pool_size - * field to the number of maximum reference surfaces possible with the codec, - * plus 1 surface for the user to work (meaning the user can safely reference - * at most 1 decoded surface at a time), plus additional buffering introduced - * by frame threading. If the hwaccel does not require pre-allocation, the - * field is left to 0, and the decoder will allocate new surfaces on demand - * during decoding. - * - Possibly AVHWFramesContext.hwctx fields, depending on the underlying - * hardware API. - * - * Essentially, out_frames_ref returns the same as av_hwframe_ctx_alloc(), but - * with basic frame parameters set. - * - * The function is stateless, and does not change the AVCodecContext or the - * device_ref AVHWDeviceContext. - * - * @param avctx The context which is currently calling get_format, and which - * implicitly contains all state needed for filling the returned - * AVHWFramesContext properly. - * @param device_ref A reference to the AVHWDeviceContext describing the device - * which will be used by the hardware decoder. - * @param hw_pix_fmt The hwaccel format you are going to return from get_format. - * @param out_frames_ref On success, set to a reference to an _uninitialized_ - * AVHWFramesContext, created from the given device_ref. - * Fields will be set to values required for decoding. - * Not changed if an error is returned. - * @return zero on success, a negative value on error. The following error codes - * have special semantics: - * AVERROR(ENOENT): the decoder does not support this functionality. Setup - * is always manual, or it is a decoder which does not - * support setting AVCodecContext.hw_frames_ctx at all, - * or it is a software format. - * AVERROR(EINVAL): it is known that hardware decoding is not supported for - * this configuration, or the device_ref is not supported - * for the hwaccel referenced by hw_pix_fmt. - */ -int avcodec_get_hw_frames_parameters(AVCodecContext *avctx, - AVBufferRef *device_ref, - enum AVPixelFormat hw_pix_fmt, - AVBufferRef **out_frames_ref); - -enum AVCodecConfig { - AV_CODEC_CONFIG_PIX_FORMAT, ///< AVPixelFormat, terminated by AV_PIX_FMT_NONE - AV_CODEC_CONFIG_FRAME_RATE, ///< AVRational, terminated by {0, 0} - AV_CODEC_CONFIG_SAMPLE_RATE, ///< int, terminated by 0 - AV_CODEC_CONFIG_SAMPLE_FORMAT, ///< AVSampleFormat, terminated by AV_SAMPLE_FMT_NONE - AV_CODEC_CONFIG_CHANNEL_LAYOUT, ///< AVChannelLayout, terminated by {0} - AV_CODEC_CONFIG_COLOR_RANGE, ///< AVColorRange, terminated by AVCOL_RANGE_UNSPECIFIED - AV_CODEC_CONFIG_COLOR_SPACE, ///< AVColorSpace, terminated by AVCOL_SPC_UNSPECIFIED -}; - -/** - * Retrieve a list of all supported values for a given configuration type. - * - * @param avctx An optional context to use. Values such as - * `strict_std_compliance` may affect the result. If NULL, - * default values are used. - * @param codec The codec to query, or NULL to use avctx->codec. - * @param config The configuration to query. - * @param flags Currently unused; should be set to zero. - * @param out_configs On success, set to a list of configurations, terminated - * by a config-specific terminator, or NULL if all - * possible values are supported. - * @param out_num_configs On success, set to the number of elements in - *out_configs, excluding the terminator. Optional. - */ -int avcodec_get_supported_config(const AVCodecContext *avctx, - const AVCodec *codec, enum AVCodecConfig config, - unsigned flags, const void **out_configs, - int *out_num_configs); - - - -/** - * @defgroup lavc_parsing Frame parsing - * @{ - */ - -enum AVPictureStructure { - AV_PICTURE_STRUCTURE_UNKNOWN, ///< unknown - AV_PICTURE_STRUCTURE_TOP_FIELD, ///< coded as top field - AV_PICTURE_STRUCTURE_BOTTOM_FIELD, ///< coded as bottom field - AV_PICTURE_STRUCTURE_FRAME, ///< coded as frame -}; - -typedef struct AVCodecParserContext { - void *priv_data; - const struct AVCodecParser *parser; - int64_t frame_offset; /* offset of the current frame */ - int64_t cur_offset; /* current offset - (incremented by each av_parser_parse()) */ - int64_t next_frame_offset; /* offset of the next frame */ - /* video info */ - int pict_type; /* XXX: Put it back in AVCodecContext. */ - /** - * This field is used for proper frame duration computation in lavf. - * It signals, how much longer the frame duration of the current frame - * is compared to normal frame duration. - * - * frame_duration = (1 + repeat_pict) * time_base - * - * It is used by codecs like H.264 to display telecined material. - */ - int repeat_pict; /* XXX: Put it back in AVCodecContext. */ - int64_t pts; /* pts of the current frame */ - int64_t dts; /* dts of the current frame */ - - /* private data */ - int64_t last_pts; - int64_t last_dts; - int fetch_timestamp; - -#define AV_PARSER_PTS_NB 4 - int cur_frame_start_index; - int64_t cur_frame_offset[AV_PARSER_PTS_NB]; - int64_t cur_frame_pts[AV_PARSER_PTS_NB]; - int64_t cur_frame_dts[AV_PARSER_PTS_NB]; - - int flags; -#define PARSER_FLAG_COMPLETE_FRAMES 0x0001 -#define PARSER_FLAG_ONCE 0x0002 -/// Set if the parser has a valid file offset -#define PARSER_FLAG_FETCHED_OFFSET 0x0004 -#define PARSER_FLAG_USE_CODEC_TS 0x1000 - - int64_t offset; ///< byte offset from starting packet start - int64_t cur_frame_end[AV_PARSER_PTS_NB]; - - /** - * Set by parser to 1 for key frames and 0 for non-key frames. - * It is initialized to -1, so if the parser doesn't set this flag, - * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames - * will be used. - */ - int key_frame; - - // Timestamp generation support: - /** - * Synchronization point for start of timestamp generation. - * - * Set to >0 for sync point, 0 for no sync point and <0 for undefined - * (default). - * - * For example, this corresponds to presence of H.264 buffering period - * SEI message. - */ - int dts_sync_point; - - /** - * Offset of the current timestamp against last timestamp sync point in - * units of AVCodecContext.time_base. - * - * Set to INT_MIN when dts_sync_point unused. Otherwise, it must - * contain a valid timestamp offset. - * - * Note that the timestamp of sync point has usually a nonzero - * dts_ref_dts_delta, which refers to the previous sync point. Offset of - * the next frame after timestamp sync point will be usually 1. - * - * For example, this corresponds to H.264 cpb_removal_delay. - */ - int dts_ref_dts_delta; - - /** - * Presentation delay of current frame in units of AVCodecContext.time_base. - * - * Set to INT_MIN when dts_sync_point unused. Otherwise, it must - * contain valid non-negative timestamp delta (presentation time of a frame - * must not lie in the past). - * - * This delay represents the difference between decoding and presentation - * time of the frame. - * - * For example, this corresponds to H.264 dpb_output_delay. - */ - int pts_dts_delta; - - /** - * Position of the packet in file. - * - * Analogous to cur_frame_pts/dts - */ - int64_t cur_frame_pos[AV_PARSER_PTS_NB]; - - /** - * Byte position of currently parsed frame in stream. - */ - int64_t pos; - - /** - * Previous frame byte position. - */ - int64_t last_pos; - - /** - * Duration of the current frame. - * For audio, this is in units of 1 / AVCodecContext.sample_rate. - * For all other types, this is in units of AVCodecContext.time_base. - */ - int duration; - - enum AVFieldOrder field_order; - - /** - * Indicate whether a picture is coded as a frame, top field or bottom field. - * - * For example, H.264 field_pic_flag equal to 0 corresponds to - * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag - * equal to 1 and bottom_field_flag equal to 0 corresponds to - * AV_PICTURE_STRUCTURE_TOP_FIELD. - */ - enum AVPictureStructure picture_structure; - - /** - * Picture number incremented in presentation or output order. - * This field may be reinitialized at the first picture of a new sequence. - * - * For example, this corresponds to H.264 PicOrderCnt. - */ - int output_picture_number; - - /** - * Dimensions of the decoded video intended for presentation. - */ - int width; - int height; - - /** - * Dimensions of the coded video. - */ - int coded_width; - int coded_height; - - /** - * The format of the coded data, corresponds to enum AVPixelFormat for video - * and for enum AVSampleFormat for audio. - * - * Note that a decoder can have considerable freedom in how exactly it - * decodes the data, so the format reported here might be different from the - * one returned by a decoder. - */ - int format; -} AVCodecParserContext; - -typedef struct AVCodecParser { - int codec_ids[7]; /* several codec IDs are permitted */ - int priv_data_size; - int (*parser_init)(AVCodecParserContext *s); - /* This callback never returns an error, a negative value means that - * the frame start was in a previous packet. */ - int (*parser_parse)(AVCodecParserContext *s, - AVCodecContext *avctx, - const uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size); - void (*parser_close)(AVCodecParserContext *s); - int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size); -} AVCodecParser; - -/** - * Iterate over all registered codec parsers. - * - * @param opaque a pointer where libavcodec will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered codec parser or NULL when the iteration is - * finished - */ -const AVCodecParser *av_parser_iterate(void **opaque); - -AVCodecParserContext *av_parser_init(int codec_id); - -/** - * Parse a packet. - * - * @param s parser context. - * @param avctx codec context. - * @param poutbuf set to pointer to parsed buffer or NULL if not yet finished. - * @param poutbuf_size set to size of parsed buffer or zero if not yet finished. - * @param buf input buffer. - * @param buf_size buffer size in bytes without the padding. I.e. the full buffer - size is assumed to be buf_size + AV_INPUT_BUFFER_PADDING_SIZE. - To signal EOF, this should be 0 (so that the last frame - can be output). - * @param pts input presentation timestamp. - * @param dts input decoding timestamp. - * @param pos input byte position in stream. - * @return the number of bytes of the input bitstream used. - * - * Example: - * @code - * while(in_len){ - * len = av_parser_parse2(myparser, AVCodecContext, &data, &size, - * in_data, in_len, - * pts, dts, pos); - * in_data += len; - * in_len -= len; - * - * if(size) - * decode_frame(data, size); - * } - * @endcode - */ -int av_parser_parse2(AVCodecParserContext *s, - AVCodecContext *avctx, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, - int64_t pts, int64_t dts, - int64_t pos); - -void av_parser_close(AVCodecParserContext *s); - -/** - * @} - * @} - */ - -/** - * @addtogroup lavc_encoding - * @{ - */ - -int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, - const AVSubtitle *sub); - - -/** - * @} - */ - -/** - * @defgroup lavc_misc Utility functions - * @ingroup libavc - * - * Miscellaneous utility functions related to both encoding and decoding - * (or neither). - * @{ - */ - -/** - * @defgroup lavc_misc_pixfmt Pixel formats - * - * Functions for working with pixel formats. - * @{ - */ - -/** - * Return a value representing the fourCC code associated to the - * pixel format pix_fmt, or 0 if no associated fourCC code can be - * found. - */ -unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt); - -/** - * Find the best pixel format to convert to given a certain source pixel - * format. When converting from one pixel format to another, information loss - * may occur. For example, when converting from RGB24 to GRAY, the color - * information will be lost. Similarly, other losses occur when converting from - * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of - * the given pixel formats should be used to suffer the least amount of loss. - * The pixel formats from which it chooses one, are determined by the - * pix_fmt_list parameter. - * - * - * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur. - * @return The best pixel format to convert to or -1 if none was found. - */ -enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list, - enum AVPixelFormat src_pix_fmt, - int has_alpha, int *loss_ptr); - -enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt); - -/** - * @} - */ - -void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); - -int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size); -int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count); -//FIXME func typedef - -/** - * Fill AVFrame audio data and linesize pointers. - * - * The buffer buf must be a preallocated buffer with a size big enough - * to contain the specified samples amount. The filled AVFrame data - * pointers will point to this buffer. - * - * AVFrame extended_data channel pointers are allocated if necessary for - * planar audio. - * - * @param frame the AVFrame - * frame->nb_samples must be set prior to calling the - * function. This function fills in frame->data, - * frame->extended_data, frame->linesize[0]. - * @param nb_channels channel count - * @param sample_fmt sample format - * @param buf buffer to use for frame data - * @param buf_size size of buffer - * @param align plane size sample alignment (0 = default) - * @return >=0 on success, negative error code on failure - * @todo return the size in bytes required to store the samples in - * case of success, at the next libavutil bump - */ -int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, - enum AVSampleFormat sample_fmt, const uint8_t *buf, - int buf_size, int align); - -/** - * Reset the internal codec state / flush internal buffers. Should be called - * e.g. when seeking or when switching to a different stream. - * - * @note for decoders, this function just releases any references the decoder - * might keep internally, but the caller's references remain valid. - * - * @note for encoders, this function will only do something if the encoder - * declares support for AV_CODEC_CAP_ENCODER_FLUSH. When called, the encoder - * will drain any remaining packets, and can then be reused for a different - * stream (as opposed to sending a null frame which will leave the encoder - * in a permanent EOF state after draining). This can be desirable if the - * cost of tearing down and replacing the encoder instance is high. - */ -void avcodec_flush_buffers(AVCodecContext *avctx); - -/** - * Return audio frame duration. - * - * @param avctx codec context - * @param frame_bytes size of the frame, or 0 if unknown - * @return frame duration, in samples, if known. 0 if not able to - * determine. - */ -int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes); - -/* memory */ - -/** - * Same behaviour av_fast_malloc but the buffer has additional - * AV_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0. - * - * In addition the whole buffer will initially and after resizes - * be 0-initialized so that no uninitialized data will ever appear. - */ -void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Same behaviour av_fast_padded_malloc except that buffer will always - * be 0-initialized after call. - */ -void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size); - -/** - * @return a positive value if s is open (i.e. avcodec_open2() was called on it), - * 0 otherwise. - */ -int avcodec_is_open(AVCodecContext *s); - -/** - * @} - */ - -#endif /* AVCODEC_AVCODEC_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/avdct.h b/3rdparty/ffmpeg/include/libavcodec/avdct.h deleted file mode 100644 index 6411fab6f637f..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/avdct.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVDCT_H -#define AVCODEC_AVDCT_H - -#include "libavutil/opt.h" - -/** - * AVDCT context. - * @note function pointers can be NULL if the specific features have been - * disabled at build time. - */ -typedef struct AVDCT { - const AVClass *av_class; - - void (*idct)(int16_t *block /* align 16 */); - - /** - * IDCT input permutation. - * Several optimized IDCTs need a permutated input (relative to the - * normal order of the reference IDCT). - * This permutation must be performed before the idct_put/add. - * Note, normally this can be merged with the zigzag/alternate scan
- * An example to avoid confusion: - * - (->decode coeffs -> zigzag reorder -> dequant -> reference IDCT -> ...) - * - (x -> reference DCT -> reference IDCT -> x) - * - (x -> reference DCT -> simple_mmx_perm = idct_permutation - * -> simple_idct_mmx -> x) - * - (-> decode coeffs -> zigzag reorder -> simple_mmx_perm -> dequant - * -> simple_idct_mmx -> ...) - */ - uint8_t idct_permutation[64]; - - void (*fdct)(int16_t *block /* align 16 */); - - - /** - * DCT algorithm. - * must use AVOptions to set this field. - */ - int dct_algo; - - /** - * IDCT algorithm. - * must use AVOptions to set this field. - */ - int idct_algo; - - void (*get_pixels)(int16_t *block /* align 16 */, - const uint8_t *pixels /* align 8 */, - ptrdiff_t line_size); - - int bits_per_sample; - - void (*get_pixels_unaligned)(int16_t *block /* align 16 */, - const uint8_t *pixels, - ptrdiff_t line_size); -} AVDCT; - -/** - * Allocates a AVDCT context. - * This needs to be initialized with avcodec_dct_init() after optionally - * configuring it with AVOptions. - * - * To free it use av_free() - */ -AVDCT *avcodec_dct_alloc(void); -int avcodec_dct_init(AVDCT *); - -const AVClass *avcodec_dct_get_class(void); - -#endif /* AVCODEC_AVDCT_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/avfft.h b/3rdparty/ffmpeg/include/libavcodec/avfft.h deleted file mode 100644 index e3a0da1eb9112..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/avfft.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_AVFFT_H -#define AVCODEC_AVFFT_H - -#include "libavutil/attributes.h" -#include "version_major.h" -#if FF_API_AVFFT - -/** - * @file - * @ingroup lavc_fft - * FFT functions - */ - -/** - * @defgroup lavc_fft FFT functions - * @ingroup lavc_misc - * - * @{ - */ - -typedef float FFTSample; - -typedef struct FFTComplex { - FFTSample re, im; -} FFTComplex; - -typedef struct FFTContext FFTContext; - -/** - * Set up a complex FFT. - * @param nbits log2 of the length of the input array - * @param inverse if 0 perform the forward transform, if 1 perform the inverse - * @deprecated use av_tx_init from libavutil/tx.h with a type of AV_TX_FLOAT_FFT - */ -attribute_deprecated -FFTContext *av_fft_init(int nbits, int inverse); - -/** - * Do the permutation needed BEFORE calling ff_fft_calc(). - * @deprecated without replacement - */ -attribute_deprecated -void av_fft_permute(FFTContext *s, FFTComplex *z); - -/** - * Do a complex FFT with the parameters defined in av_fft_init(). The - * input data must be permuted before. No 1.0/sqrt(n) normalization is done. - * @deprecated use the av_tx_fn value returned by av_tx_init, which also does permutation - */ -attribute_deprecated -void av_fft_calc(FFTContext *s, FFTComplex *z); - -attribute_deprecated -void av_fft_end(FFTContext *s); - -/** - * @deprecated use av_tx_init from libavutil/tx.h with a type of AV_TX_FLOAT_MDCT, - * with a flag of AV_TX_FULL_IMDCT for a replacement to av_imdct_calc. - */ -attribute_deprecated -FFTContext *av_mdct_init(int nbits, int inverse, double scale); -attribute_deprecated -void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); -attribute_deprecated -void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input); -attribute_deprecated -void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); -attribute_deprecated -void av_mdct_end(FFTContext *s); - -/* Real Discrete Fourier Transform */ - -enum RDFTransformType { - DFT_R2C, - IDFT_C2R, - IDFT_R2C, - DFT_C2R, -}; - -typedef struct RDFTContext RDFTContext; - -/** - * Set up a real FFT. - * @param nbits log2 of the length of the input array - * @param trans the type of transform - * - * @deprecated use av_tx_init from libavutil/tx.h with a type of AV_TX_FLOAT_RDFT - */ -attribute_deprecated -RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans); -attribute_deprecated -void av_rdft_calc(RDFTContext *s, FFTSample *data); -attribute_deprecated -void av_rdft_end(RDFTContext *s); - -/* Discrete Cosine Transform */ - -typedef struct DCTContext DCTContext; - -enum DCTTransformType { - DCT_II = 0, - DCT_III, - DCT_I, - DST_I, -}; - -/** - * Set up DCT. - * - * @param nbits size of the input array: - * (1 << nbits) for DCT-II, DCT-III and DST-I - * (1 << nbits) + 1 for DCT-I - * @param type the type of transform - * - * @note the first element of the input of DST-I is ignored - * - * @deprecated use av_tx_init from libavutil/tx.h with an appropriate type of AV_TX_FLOAT_DCT - */ -attribute_deprecated -DCTContext *av_dct_init(int nbits, enum DCTTransformType type); -attribute_deprecated -void av_dct_calc(DCTContext *s, FFTSample *data); -attribute_deprecated -void av_dct_end (DCTContext *s); - -/** - * @} - */ - -#endif /* FF_API_AVFFT */ -#endif /* AVCODEC_AVFFT_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/bsf.h b/3rdparty/ffmpeg/include/libavcodec/bsf.h deleted file mode 100644 index a09c69f24286d..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/bsf.h +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Bitstream filters public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_BSF_H -#define AVCODEC_BSF_H - -#include "libavutil/dict.h" -#include "libavutil/log.h" -#include "libavutil/rational.h" - -#include "codec_id.h" -#include "codec_par.h" -#include "packet.h" - -/** - * @defgroup lavc_bsf Bitstream filters - * @ingroup libavc - * - * Bitstream filters transform encoded media data without decoding it. This - * allows e.g. manipulating various header values. Bitstream filters operate on - * @ref AVPacket "AVPackets". - * - * The bitstream filtering API is centered around two structures: - * AVBitStreamFilter and AVBSFContext. The former represents a bitstream filter - * in abstract, the latter a specific filtering process. Obtain an - * AVBitStreamFilter using av_bsf_get_by_name() or av_bsf_iterate(), then pass - * it to av_bsf_alloc() to create an AVBSFContext. Fill in the user-settable - * AVBSFContext fields, as described in its documentation, then call - * av_bsf_init() to prepare the filter context for use. - * - * Submit packets for filtering using av_bsf_send_packet(), obtain filtered - * results with av_bsf_receive_packet(). When no more input packets will be - * sent, submit a NULL AVPacket to signal the end of the stream to the filter. - * av_bsf_receive_packet() will then return trailing packets, if any are - * produced by the filter. - * - * Finally, free the filter context with av_bsf_free(). - * @{ - */ - -/** - * The bitstream filter state. - * - * This struct must be allocated with av_bsf_alloc() and freed with - * av_bsf_free(). - * - * The fields in the struct will only be changed (by the caller or by the - * filter) as described in their documentation, and are to be considered - * immutable otherwise. - */ -typedef struct AVBSFContext { - /** - * A class for logging and AVOptions - */ - const AVClass *av_class; - - /** - * The bitstream filter this context is an instance of. - */ - const struct AVBitStreamFilter *filter; - - /** - * Opaque filter-specific private data. If filter->priv_class is non-NULL, - * this is an AVOptions-enabled struct. - */ - void *priv_data; - - /** - * Parameters of the input stream. This field is allocated in - * av_bsf_alloc(), it needs to be filled by the caller before - * av_bsf_init(). - */ - AVCodecParameters *par_in; - - /** - * Parameters of the output stream. This field is allocated in - * av_bsf_alloc(), it is set by the filter in av_bsf_init(). - */ - AVCodecParameters *par_out; - - /** - * The timebase used for the timestamps of the input packets. Set by the - * caller before av_bsf_init(). - */ - AVRational time_base_in; - - /** - * The timebase used for the timestamps of the output packets. Set by the - * filter in av_bsf_init(). - */ - AVRational time_base_out; -} AVBSFContext; - -typedef struct AVBitStreamFilter { - const char *name; - - /** - * A list of codec ids supported by the filter, terminated by - * AV_CODEC_ID_NONE. - * May be NULL, in that case the bitstream filter works with any codec id. - */ - const enum AVCodecID *codec_ids; - - /** - * A class for the private data, used to declare bitstream filter private - * AVOptions. This field is NULL for bitstream filters that do not declare - * any options. - * - * If this field is non-NULL, the first member of the filter private data - * must be a pointer to AVClass, which will be set by libavcodec generic - * code to this class. - */ - const AVClass *priv_class; -} AVBitStreamFilter; - -/** - * @return a bitstream filter with the specified name or NULL if no such - * bitstream filter exists. - */ -const AVBitStreamFilter *av_bsf_get_by_name(const char *name); - -/** - * Iterate over all registered bitstream filters. - * - * @param opaque a pointer where libavcodec will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered bitstream filter or NULL when the iteration is - * finished - */ -const AVBitStreamFilter *av_bsf_iterate(void **opaque); - -/** - * Allocate a context for a given bitstream filter. The caller must fill in the - * context parameters as described in the documentation and then call - * av_bsf_init() before sending any data to the filter. - * - * @param filter the filter for which to allocate an instance. - * @param[out] ctx a pointer into which the pointer to the newly-allocated context - * will be written. It must be freed with av_bsf_free() after the - * filtering is done. - * - * @return 0 on success, a negative AVERROR code on failure - */ -int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **ctx); - -/** - * Prepare the filter for use, after all the parameters and options have been - * set. - * - * @param ctx a AVBSFContext previously allocated with av_bsf_alloc() - */ -int av_bsf_init(AVBSFContext *ctx); - -/** - * Submit a packet for filtering. - * - * After sending each packet, the filter must be completely drained by calling - * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or - * AVERROR_EOF. - * - * @param ctx an initialized AVBSFContext - * @param pkt the packet to filter. The bitstream filter will take ownership of - * the packet and reset the contents of pkt. pkt is not touched if an error occurs. - * If pkt is empty (i.e. NULL, or pkt->data is NULL and pkt->side_data_elems zero), - * it signals the end of the stream (i.e. no more non-empty packets will be sent; - * sending more empty packets does nothing) and will cause the filter to output - * any packets it may have buffered internally. - * - * @return - * - 0 on success. - * - AVERROR(EAGAIN) if packets need to be retrieved from the filter (using - * av_bsf_receive_packet()) before new input can be consumed. - * - Another negative AVERROR value if an error occurs. - */ -int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt); - -/** - * Retrieve a filtered packet. - * - * @param ctx an initialized AVBSFContext - * @param[out] pkt this struct will be filled with the contents of the filtered - * packet. It is owned by the caller and must be freed using - * av_packet_unref() when it is no longer needed. - * This parameter should be "clean" (i.e. freshly allocated - * with av_packet_alloc() or unreffed with av_packet_unref()) - * when this function is called. If this function returns - * successfully, the contents of pkt will be completely - * overwritten by the returned data. On failure, pkt is not - * touched. - * - * @return - * - 0 on success. - * - AVERROR(EAGAIN) if more packets need to be sent to the filter (using - * av_bsf_send_packet()) to get more output. - * - AVERROR_EOF if there will be no further output from the filter. - * - Another negative AVERROR value if an error occurs. - * - * @note one input packet may result in several output packets, so after sending - * a packet with av_bsf_send_packet(), this function needs to be called - * repeatedly until it stops returning 0. It is also possible for a filter to - * output fewer packets than were sent to it, so this function may return - * AVERROR(EAGAIN) immediately after a successful av_bsf_send_packet() call. - */ -int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt); - -/** - * Reset the internal bitstream filter state. Should be called e.g. when seeking. - */ -void av_bsf_flush(AVBSFContext *ctx); - -/** - * Free a bitstream filter context and everything associated with it; write NULL - * into the supplied pointer. - */ -void av_bsf_free(AVBSFContext **ctx); - -/** - * Get the AVClass for AVBSFContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *av_bsf_get_class(void); - -/** - * Structure for chain/list of bitstream filters. - * Empty list can be allocated by av_bsf_list_alloc(). - */ -typedef struct AVBSFList AVBSFList; - -/** - * Allocate empty list of bitstream filters. - * The list must be later freed by av_bsf_list_free() - * or finalized by av_bsf_list_finalize(). - * - * @return Pointer to @ref AVBSFList on success, NULL in case of failure - */ -AVBSFList *av_bsf_list_alloc(void); - -/** - * Free list of bitstream filters. - * - * @param lst Pointer to pointer returned by av_bsf_list_alloc() - */ -void av_bsf_list_free(AVBSFList **lst); - -/** - * Append bitstream filter to the list of bitstream filters. - * - * @param lst List to append to - * @param bsf Filter context to be appended - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_append(AVBSFList *lst, AVBSFContext *bsf); - -/** - * Construct new bitstream filter context given it's name and options - * and append it to the list of bitstream filters. - * - * @param lst List to append to - * @param bsf_name Name of the bitstream filter - * @param options Options for the bitstream filter, can be set to NULL - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_append2(AVBSFList *lst, const char * bsf_name, AVDictionary **options); -/** - * Finalize list of bitstream filters. - * - * This function will transform @ref AVBSFList to single @ref AVBSFContext, - * so the whole chain of bitstream filters can be treated as single filter - * freshly allocated by av_bsf_alloc(). - * If the call is successful, @ref AVBSFList structure is freed and lst - * will be set to NULL. In case of failure, caller is responsible for - * freeing the structure by av_bsf_list_free() - * - * @param lst Filter list structure to be transformed - * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure - * representing the chain of bitstream filters - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_finalize(AVBSFList **lst, AVBSFContext **bsf); - -/** - * Parse string describing list of bitstream filters and create single - * @ref AVBSFContext describing the whole chain of bitstream filters. - * Resulting @ref AVBSFContext can be treated as any other @ref AVBSFContext freshly - * allocated by av_bsf_alloc(). - * - * @param str String describing chain of bitstream filters in format - * `bsf1[=opt1=val1:opt2=val2][,bsf2]` - * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure - * representing the chain of bitstream filters - * - * @return >=0 on success, negative AVERROR in case of failure - */ -int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf); - -/** - * Get null/pass-through bitstream filter. - * - * @param[out] bsf Pointer to be set to new instance of pass-through bitstream filter - * - * @return - */ -int av_bsf_get_null_filter(AVBSFContext **bsf); - -/** - * @} - */ - -#endif // AVCODEC_BSF_H diff --git a/3rdparty/ffmpeg/include/libavcodec/codec.h b/3rdparty/ffmpeg/include/libavcodec/codec.h deleted file mode 100644 index f509e5d94e1b6..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/codec.h +++ /dev/null @@ -1,367 +0,0 @@ -/* - * AVCodec public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_H -#define AVCODEC_CODEC_H - -#include - -#include "libavutil/avutil.h" -#include "libavutil/hwcontext.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" -#include "libavutil/samplefmt.h" - -#include "libavcodec/codec_id.h" -#include "libavcodec/version_major.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -/** - * Decoder can use draw_horiz_band callback. - */ -#define AV_CODEC_CAP_DRAW_HORIZ_BAND (1 << 0) -/** - * Codec uses get_buffer() or get_encode_buffer() for allocating buffers and - * supports custom allocators. - * If not set, it might not use get_buffer() or get_encode_buffer() at all, or - * use operations that assume the buffer was allocated by - * avcodec_default_get_buffer2 or avcodec_default_get_encode_buffer. - */ -#define AV_CODEC_CAP_DR1 (1 << 1) -/** - * Encoder or decoder requires flushing with NULL input at the end in order to - * give the complete and correct output. - * - * NOTE: If this flag is not set, the codec is guaranteed to never be fed with - * with NULL data. The user can still send NULL data to the public encode - * or decode function, but libavcodec will not pass it along to the codec - * unless this flag is set. - * - * Decoders: - * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL, - * avpkt->size=0 at the end to get the delayed data until the decoder no longer - * returns frames. - * - * Encoders: - * The encoder needs to be fed with NULL data at the end of encoding until the - * encoder no longer returns data. - * - * NOTE: For encoders implementing the AVCodec.encode2() function, setting this - * flag also means that the encoder must set the pts and duration for - * each output packet. If this flag is not set, the pts and duration will - * be determined by libavcodec from the input frame. - */ -#define AV_CODEC_CAP_DELAY (1 << 5) -/** - * Codec can be fed a final frame with a smaller size. - * This can be used to prevent truncation of the last audio samples. - */ -#define AV_CODEC_CAP_SMALL_LAST_FRAME (1 << 6) - -/** - * Codec is experimental and is thus avoided in favor of non experimental - * encoders - */ -#define AV_CODEC_CAP_EXPERIMENTAL (1 << 9) -/** - * Codec should fill in channel configuration and samplerate instead of container - */ -#define AV_CODEC_CAP_CHANNEL_CONF (1 << 10) -/** - * Codec supports frame-level multithreading. - */ -#define AV_CODEC_CAP_FRAME_THREADS (1 << 12) -/** - * Codec supports slice-based (or partition-based) multithreading. - */ -#define AV_CODEC_CAP_SLICE_THREADS (1 << 13) -/** - * Codec supports changed parameters at any point. - */ -#define AV_CODEC_CAP_PARAM_CHANGE (1 << 14) -/** - * Codec supports multithreading through a method other than slice- or - * frame-level multithreading. Typically this marks wrappers around - * multithreading-capable external libraries. - */ -#define AV_CODEC_CAP_OTHER_THREADS (1 << 15) -/** - * Audio encoder supports receiving a different number of samples in each call. - */ -#define AV_CODEC_CAP_VARIABLE_FRAME_SIZE (1 << 16) -/** - * Decoder is not a preferred choice for probing. - * This indicates that the decoder is not a good choice for probing. - * It could for example be an expensive to spin up hardware decoder, - * or it could simply not provide a lot of useful information about - * the stream. - * A decoder marked with this flag should only be used as last resort - * choice for probing. - */ -#define AV_CODEC_CAP_AVOID_PROBING (1 << 17) - -/** - * Codec is backed by a hardware implementation. Typically used to - * identify a non-hwaccel hardware decoder. For information about hwaccels, use - * avcodec_get_hw_config() instead. - */ -#define AV_CODEC_CAP_HARDWARE (1 << 18) - -/** - * Codec is potentially backed by a hardware implementation, but not - * necessarily. This is used instead of AV_CODEC_CAP_HARDWARE, if the - * implementation provides some sort of internal fallback. - */ -#define AV_CODEC_CAP_HYBRID (1 << 19) - -/** - * This encoder can reorder user opaque values from input AVFrames and return - * them with corresponding output packets. - * @see AV_CODEC_FLAG_COPY_OPAQUE - */ -#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE (1 << 20) - -/** - * This encoder can be flushed using avcodec_flush_buffers(). If this flag is - * not set, the encoder must be closed and reopened to ensure that no frames - * remain pending. - */ -#define AV_CODEC_CAP_ENCODER_FLUSH (1 << 21) - -/** - * The encoder is able to output reconstructed frame data, i.e. raw frames that - * would be produced by decoding the encoded bitstream. - * - * Reconstructed frame output is enabled by the AV_CODEC_FLAG_RECON_FRAME flag. - */ -#define AV_CODEC_CAP_ENCODER_RECON_FRAME (1 << 22) - -/** - * AVProfile. - */ -typedef struct AVProfile { - int profile; - const char *name; ///< short name for the profile -} AVProfile; - -/** - * AVCodec. - */ -typedef struct AVCodec { - /** - * Name of the codec implementation. - * The name is globally unique among encoders and among decoders (but an - * encoder and a decoder can share the same name). - * This is the primary way to find a codec from the user perspective. - */ - const char *name; - /** - * Descriptive name for the codec, meant to be more human readable than name. - * You should use the NULL_IF_CONFIG_SMALL() macro to define it. - */ - const char *long_name; - enum AVMediaType type; - enum AVCodecID id; - /** - * Codec capabilities. - * see AV_CODEC_CAP_* - */ - int capabilities; - uint8_t max_lowres; ///< maximum value for lowres supported by the decoder - - /** - * Deprecated codec capabilities. - */ - attribute_deprecated - const AVRational *supported_framerates; ///< @deprecated use avcodec_get_supported_config() - attribute_deprecated - const enum AVPixelFormat *pix_fmts; ///< @deprecated use avcodec_get_supported_config() - attribute_deprecated - const int *supported_samplerates; ///< @deprecated use avcodec_get_supported_config() - attribute_deprecated - const enum AVSampleFormat *sample_fmts; ///< @deprecated use avcodec_get_supported_config() - - const AVClass *priv_class; ///< AVClass for the private context - const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {AV_PROFILE_UNKNOWN} - - /** - * Group name of the codec implementation. - * This is a short symbolic name of the wrapper backing this codec. A - * wrapper uses some kind of external implementation for the codec, such - * as an external library, or a codec implementation provided by the OS or - * the hardware. - * If this field is NULL, this is a builtin, libavcodec native codec. - * If non-NULL, this will be the suffix in AVCodec.name in most cases - * (usually AVCodec.name will be of the form "_"). - */ - const char *wrapper_name; - - /** - * Array of supported channel layouts, terminated with a zeroed layout. - * @deprecated use avcodec_get_supported_config() - */ - attribute_deprecated - const AVChannelLayout *ch_layouts; -} AVCodec; - -/** - * Iterate over all registered codecs. - * - * @param opaque a pointer where libavcodec will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered codec or NULL when the iteration is - * finished - */ -const AVCodec *av_codec_iterate(void **opaque); - -/** - * Find a registered decoder with a matching codec ID. - * - * @param id AVCodecID of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ -const AVCodec *avcodec_find_decoder(enum AVCodecID id); - -/** - * Find a registered decoder with the specified name. - * - * @param name name of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ -const AVCodec *avcodec_find_decoder_by_name(const char *name); - -/** - * Find a registered encoder with a matching codec ID. - * - * @param id AVCodecID of the requested encoder - * @return An encoder if one was found, NULL otherwise. - */ -const AVCodec *avcodec_find_encoder(enum AVCodecID id); - -/** - * Find a registered encoder with the specified name. - * - * @param name name of the requested encoder - * @return An encoder if one was found, NULL otherwise. - */ -const AVCodec *avcodec_find_encoder_by_name(const char *name); -/** - * @return a non-zero number if codec is an encoder, zero otherwise - */ -int av_codec_is_encoder(const AVCodec *codec); - -/** - * @return a non-zero number if codec is a decoder, zero otherwise - */ -int av_codec_is_decoder(const AVCodec *codec); - -/** - * Return a name for the specified profile, if available. - * - * @param codec the codec that is searched for the given profile - * @param profile the profile value for which a name is requested - * @return A name for the profile if found, NULL otherwise. - */ -const char *av_get_profile_name(const AVCodec *codec, int profile); - -enum { - /** - * The codec supports this format via the hw_device_ctx interface. - * - * When selecting this format, AVCodecContext.hw_device_ctx should - * have been set to a device of the specified type before calling - * avcodec_open2(). - */ - AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX = 0x01, - /** - * The codec supports this format via the hw_frames_ctx interface. - * - * When selecting this format for a decoder, - * AVCodecContext.hw_frames_ctx should be set to a suitable frames - * context inside the get_format() callback. The frames context - * must have been created on a device of the specified type. - * - * When selecting this format for an encoder, - * AVCodecContext.hw_frames_ctx should be set to the context which - * will be used for the input frames before calling avcodec_open2(). - */ - AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX = 0x02, - /** - * The codec supports this format by some internal method. - * - * This format can be selected without any additional configuration - - * no device or frames context is required. - */ - AV_CODEC_HW_CONFIG_METHOD_INTERNAL = 0x04, - /** - * The codec supports this format by some ad-hoc method. - * - * Additional settings and/or function calls are required. See the - * codec-specific documentation for details. (Methods requiring - * this sort of configuration are deprecated and others should be - * used in preference.) - */ - AV_CODEC_HW_CONFIG_METHOD_AD_HOC = 0x08, -}; - -typedef struct AVCodecHWConfig { - /** - * For decoders, a hardware pixel format which that decoder may be - * able to decode to if suitable hardware is available. - * - * For encoders, a pixel format which the encoder may be able to - * accept. If set to AV_PIX_FMT_NONE, this applies to all pixel - * formats supported by the codec. - */ - enum AVPixelFormat pix_fmt; - /** - * Bit set of AV_CODEC_HW_CONFIG_METHOD_* flags, describing the possible - * setup methods which can be used with this configuration. - */ - int methods; - /** - * The device type associated with the configuration. - * - * Must be set for AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX and - * AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, otherwise unused. - */ - enum AVHWDeviceType device_type; -} AVCodecHWConfig; - -/** - * Retrieve supported hardware configurations for a codec. - * - * Values of index from zero to some maximum return the indexed configuration - * descriptor; all other values return NULL. If the codec does not support - * any hardware configurations then it will always return NULL. - */ -const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *codec, int index); - -/** - * @} - */ - -#endif /* AVCODEC_CODEC_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/codec_desc.h b/3rdparty/ffmpeg/include/libavcodec/codec_desc.h deleted file mode 100644 index 96afd20208b3d..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/codec_desc.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Codec descriptors public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_DESC_H -#define AVCODEC_CODEC_DESC_H - -#include "libavutil/avutil.h" - -#include "codec_id.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -/** - * This struct describes the properties of a single codec described by an - * AVCodecID. - * @see avcodec_descriptor_get() - */ -typedef struct AVCodecDescriptor { - enum AVCodecID id; - enum AVMediaType type; - /** - * Name of the codec described by this descriptor. It is non-empty and - * unique for each codec descriptor. It should contain alphanumeric - * characters and '_' only. - */ - const char *name; - /** - * A more descriptive name for this codec. May be NULL. - */ - const char *long_name; - /** - * Codec properties, a combination of AV_CODEC_PROP_* flags. - */ - int props; - /** - * MIME type(s) associated with the codec. - * May be NULL; if not, a NULL-terminated array of MIME types. - * The first item is always non-NULL and is the preferred MIME type. - */ - const char *const *mime_types; - /** - * If non-NULL, an array of profiles recognized for this codec. - * Terminated with AV_PROFILE_UNKNOWN. - */ - const struct AVProfile *profiles; -} AVCodecDescriptor; - -/** - * Codec uses only intra compression. - * Video and audio codecs only. - */ -#define AV_CODEC_PROP_INTRA_ONLY (1 << 0) -/** - * Codec supports lossy compression. Audio and video codecs only. - * @note a codec may support both lossy and lossless - * compression modes - */ -#define AV_CODEC_PROP_LOSSY (1 << 1) -/** - * Codec supports lossless compression. Audio and video codecs only. - */ -#define AV_CODEC_PROP_LOSSLESS (1 << 2) -/** - * Codec supports frame reordering. That is, the coded order (the order in which - * the encoded packets are output by the encoders / stored / input to the - * decoders) may be different from the presentation order of the corresponding - * frames. - * - * For codecs that do not have this property set, PTS and DTS should always be - * equal. - */ -#define AV_CODEC_PROP_REORDER (1 << 3) - -/** - * Video codec supports separate coding of fields in interlaced frames. - */ -#define AV_CODEC_PROP_FIELDS (1 << 4) - -/** - * Subtitle codec is bitmap based - * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field. - */ -#define AV_CODEC_PROP_BITMAP_SUB (1 << 16) -/** - * Subtitle codec is text based. - * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field. - */ -#define AV_CODEC_PROP_TEXT_SUB (1 << 17) - -/** - * @return descriptor for given codec ID or NULL if no descriptor exists. - */ -const AVCodecDescriptor *avcodec_descriptor_get(enum AVCodecID id); - -/** - * Iterate over all codec descriptors known to libavcodec. - * - * @param prev previous descriptor. NULL to get the first descriptor. - * - * @return next descriptor or NULL after the last descriptor - */ -const AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev); - -/** - * @return codec descriptor with the given name or NULL if no such descriptor - * exists. - */ -const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name); - -/** - * @} - */ - -#endif // AVCODEC_CODEC_DESC_H diff --git a/3rdparty/ffmpeg/include/libavcodec/codec_id.h b/3rdparty/ffmpeg/include/libavcodec/codec_id.h deleted file mode 100644 index c4842e61ff031..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/codec_id.h +++ /dev/null @@ -1,683 +0,0 @@ -/* - * Codec IDs - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_ID_H -#define AVCODEC_CODEC_ID_H - -#include "libavutil/avutil.h" -#include "libavutil/samplefmt.h" - -#include "version_major.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -/** - * Identify the syntax and semantics of the bitstream. - * The principle is roughly: - * Two decoders with the same ID can decode the same streams. - * Two encoders with the same ID can encode compatible streams. - * There may be slight deviations from the principle due to implementation - * details. - * - * If you add a codec ID to this list, add it so that - * 1. no value of an existing codec ID changes (that would break ABI), - * 2. it is as close as possible to similar codecs - * - * After adding new codec IDs, do not forget to add an entry to the codec - * descriptor list and bump libavcodec minor version. - */ -enum AVCodecID { - AV_CODEC_ID_NONE, - - /* video codecs */ - AV_CODEC_ID_MPEG1VIDEO, - AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding - AV_CODEC_ID_H261, - AV_CODEC_ID_H263, - AV_CODEC_ID_RV10, - AV_CODEC_ID_RV20, - AV_CODEC_ID_MJPEG, - AV_CODEC_ID_MJPEGB, - AV_CODEC_ID_LJPEG, - AV_CODEC_ID_SP5X, - AV_CODEC_ID_JPEGLS, - AV_CODEC_ID_MPEG4, - AV_CODEC_ID_RAWVIDEO, - AV_CODEC_ID_MSMPEG4V1, - AV_CODEC_ID_MSMPEG4V2, - AV_CODEC_ID_MSMPEG4V3, - AV_CODEC_ID_WMV1, - AV_CODEC_ID_WMV2, - AV_CODEC_ID_H263P, - AV_CODEC_ID_H263I, - AV_CODEC_ID_FLV1, - AV_CODEC_ID_SVQ1, - AV_CODEC_ID_SVQ3, - AV_CODEC_ID_DVVIDEO, - AV_CODEC_ID_HUFFYUV, - AV_CODEC_ID_CYUV, - AV_CODEC_ID_H264, - AV_CODEC_ID_INDEO3, - AV_CODEC_ID_VP3, - AV_CODEC_ID_THEORA, - AV_CODEC_ID_ASV1, - AV_CODEC_ID_ASV2, - AV_CODEC_ID_FFV1, - AV_CODEC_ID_4XM, - AV_CODEC_ID_VCR1, - AV_CODEC_ID_CLJR, - AV_CODEC_ID_MDEC, - AV_CODEC_ID_ROQ, - AV_CODEC_ID_INTERPLAY_VIDEO, - AV_CODEC_ID_XAN_WC3, - AV_CODEC_ID_XAN_WC4, - AV_CODEC_ID_RPZA, - AV_CODEC_ID_CINEPAK, - AV_CODEC_ID_WS_VQA, - AV_CODEC_ID_MSRLE, - AV_CODEC_ID_MSVIDEO1, - AV_CODEC_ID_IDCIN, - AV_CODEC_ID_8BPS, - AV_CODEC_ID_SMC, - AV_CODEC_ID_FLIC, - AV_CODEC_ID_TRUEMOTION1, - AV_CODEC_ID_VMDVIDEO, - AV_CODEC_ID_MSZH, - AV_CODEC_ID_ZLIB, - AV_CODEC_ID_QTRLE, - AV_CODEC_ID_TSCC, - AV_CODEC_ID_ULTI, - AV_CODEC_ID_QDRAW, - AV_CODEC_ID_VIXL, - AV_CODEC_ID_QPEG, - AV_CODEC_ID_PNG, - AV_CODEC_ID_PPM, - AV_CODEC_ID_PBM, - AV_CODEC_ID_PGM, - AV_CODEC_ID_PGMYUV, - AV_CODEC_ID_PAM, - AV_CODEC_ID_FFVHUFF, - AV_CODEC_ID_RV30, - AV_CODEC_ID_RV40, - AV_CODEC_ID_VC1, - AV_CODEC_ID_WMV3, - AV_CODEC_ID_LOCO, - AV_CODEC_ID_WNV1, - AV_CODEC_ID_AASC, - AV_CODEC_ID_INDEO2, - AV_CODEC_ID_FRAPS, - AV_CODEC_ID_TRUEMOTION2, - AV_CODEC_ID_BMP, - AV_CODEC_ID_CSCD, - AV_CODEC_ID_MMVIDEO, - AV_CODEC_ID_ZMBV, - AV_CODEC_ID_AVS, - AV_CODEC_ID_SMACKVIDEO, - AV_CODEC_ID_NUV, - AV_CODEC_ID_KMVC, - AV_CODEC_ID_FLASHSV, - AV_CODEC_ID_CAVS, - AV_CODEC_ID_JPEG2000, - AV_CODEC_ID_VMNC, - AV_CODEC_ID_VP5, - AV_CODEC_ID_VP6, - AV_CODEC_ID_VP6F, - AV_CODEC_ID_TARGA, - AV_CODEC_ID_DSICINVIDEO, - AV_CODEC_ID_TIERTEXSEQVIDEO, - AV_CODEC_ID_TIFF, - AV_CODEC_ID_GIF, - AV_CODEC_ID_DXA, - AV_CODEC_ID_DNXHD, - AV_CODEC_ID_THP, - AV_CODEC_ID_SGI, - AV_CODEC_ID_C93, - AV_CODEC_ID_BETHSOFTVID, - AV_CODEC_ID_PTX, - AV_CODEC_ID_TXD, - AV_CODEC_ID_VP6A, - AV_CODEC_ID_AMV, - AV_CODEC_ID_VB, - AV_CODEC_ID_PCX, - AV_CODEC_ID_SUNRAST, - AV_CODEC_ID_INDEO4, - AV_CODEC_ID_INDEO5, - AV_CODEC_ID_MIMIC, - AV_CODEC_ID_RL2, - AV_CODEC_ID_ESCAPE124, - AV_CODEC_ID_DIRAC, - AV_CODEC_ID_BFI, - AV_CODEC_ID_CMV, - AV_CODEC_ID_MOTIONPIXELS, - AV_CODEC_ID_TGV, - AV_CODEC_ID_TGQ, - AV_CODEC_ID_TQI, - AV_CODEC_ID_AURA, - AV_CODEC_ID_AURA2, - AV_CODEC_ID_V210X, - AV_CODEC_ID_TMV, - AV_CODEC_ID_V210, - AV_CODEC_ID_DPX, - AV_CODEC_ID_MAD, - AV_CODEC_ID_FRWU, - AV_CODEC_ID_FLASHSV2, - AV_CODEC_ID_CDGRAPHICS, - AV_CODEC_ID_R210, - AV_CODEC_ID_ANM, - AV_CODEC_ID_BINKVIDEO, - AV_CODEC_ID_IFF_ILBM, -#define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM - AV_CODEC_ID_KGV1, - AV_CODEC_ID_YOP, - AV_CODEC_ID_VP8, - AV_CODEC_ID_PICTOR, - AV_CODEC_ID_ANSI, - AV_CODEC_ID_A64_MULTI, - AV_CODEC_ID_A64_MULTI5, - AV_CODEC_ID_R10K, - AV_CODEC_ID_MXPEG, - AV_CODEC_ID_LAGARITH, - AV_CODEC_ID_PRORES, - AV_CODEC_ID_JV, - AV_CODEC_ID_DFA, - AV_CODEC_ID_WMV3IMAGE, - AV_CODEC_ID_VC1IMAGE, - AV_CODEC_ID_UTVIDEO, - AV_CODEC_ID_BMV_VIDEO, - AV_CODEC_ID_VBLE, - AV_CODEC_ID_DXTORY, -#if FF_API_V408_CODECID - AV_CODEC_ID_V410, -#endif - AV_CODEC_ID_XWD, - AV_CODEC_ID_CDXL, - AV_CODEC_ID_XBM, - AV_CODEC_ID_ZEROCODEC, - AV_CODEC_ID_MSS1, - AV_CODEC_ID_MSA1, - AV_CODEC_ID_TSCC2, - AV_CODEC_ID_MTS2, - AV_CODEC_ID_CLLC, - AV_CODEC_ID_MSS2, - AV_CODEC_ID_VP9, - AV_CODEC_ID_AIC, - AV_CODEC_ID_ESCAPE130, - AV_CODEC_ID_G2M, - AV_CODEC_ID_WEBP, - AV_CODEC_ID_HNM4_VIDEO, - AV_CODEC_ID_HEVC, -#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC - AV_CODEC_ID_FIC, - AV_CODEC_ID_ALIAS_PIX, - AV_CODEC_ID_BRENDER_PIX, - AV_CODEC_ID_PAF_VIDEO, - AV_CODEC_ID_EXR, - AV_CODEC_ID_VP7, - AV_CODEC_ID_SANM, - AV_CODEC_ID_SGIRLE, - AV_CODEC_ID_MVC1, - AV_CODEC_ID_MVC2, - AV_CODEC_ID_HQX, - AV_CODEC_ID_TDSC, - AV_CODEC_ID_HQ_HQA, - AV_CODEC_ID_HAP, - AV_CODEC_ID_DDS, - AV_CODEC_ID_DXV, - AV_CODEC_ID_SCREENPRESSO, - AV_CODEC_ID_RSCC, - AV_CODEC_ID_AVS2, - AV_CODEC_ID_PGX, - AV_CODEC_ID_AVS3, - AV_CODEC_ID_MSP2, - AV_CODEC_ID_VVC, -#define AV_CODEC_ID_H266 AV_CODEC_ID_VVC - AV_CODEC_ID_Y41P, - AV_CODEC_ID_AVRP, - AV_CODEC_ID_012V, - AV_CODEC_ID_AVUI, - AV_CODEC_ID_TARGA_Y216, -#if FF_API_V408_CODECID - AV_CODEC_ID_V308, - AV_CODEC_ID_V408, -#endif - AV_CODEC_ID_YUV4, - AV_CODEC_ID_AVRN, - AV_CODEC_ID_CPIA, - AV_CODEC_ID_XFACE, - AV_CODEC_ID_SNOW, - AV_CODEC_ID_SMVJPEG, - AV_CODEC_ID_APNG, - AV_CODEC_ID_DAALA, - AV_CODEC_ID_CFHD, - AV_CODEC_ID_TRUEMOTION2RT, - AV_CODEC_ID_M101, - AV_CODEC_ID_MAGICYUV, - AV_CODEC_ID_SHEERVIDEO, - AV_CODEC_ID_YLC, - AV_CODEC_ID_PSD, - AV_CODEC_ID_PIXLET, - AV_CODEC_ID_SPEEDHQ, - AV_CODEC_ID_FMVC, - AV_CODEC_ID_SCPR, - AV_CODEC_ID_CLEARVIDEO, - AV_CODEC_ID_XPM, - AV_CODEC_ID_AV1, - AV_CODEC_ID_BITPACKED, - AV_CODEC_ID_MSCC, - AV_CODEC_ID_SRGC, - AV_CODEC_ID_SVG, - AV_CODEC_ID_GDV, - AV_CODEC_ID_FITS, - AV_CODEC_ID_IMM4, - AV_CODEC_ID_PROSUMER, - AV_CODEC_ID_MWSC, - AV_CODEC_ID_WCMV, - AV_CODEC_ID_RASC, - AV_CODEC_ID_HYMT, - AV_CODEC_ID_ARBC, - AV_CODEC_ID_AGM, - AV_CODEC_ID_LSCR, - AV_CODEC_ID_VP4, - AV_CODEC_ID_IMM5, - AV_CODEC_ID_MVDV, - AV_CODEC_ID_MVHA, - AV_CODEC_ID_CDTOONS, - AV_CODEC_ID_MV30, - AV_CODEC_ID_NOTCHLC, - AV_CODEC_ID_PFM, - AV_CODEC_ID_MOBICLIP, - AV_CODEC_ID_PHOTOCD, - AV_CODEC_ID_IPU, - AV_CODEC_ID_ARGO, - AV_CODEC_ID_CRI, - AV_CODEC_ID_SIMBIOSIS_IMX, - AV_CODEC_ID_SGA_VIDEO, - AV_CODEC_ID_GEM, - AV_CODEC_ID_VBN, - AV_CODEC_ID_JPEGXL, - AV_CODEC_ID_QOI, - AV_CODEC_ID_PHM, - AV_CODEC_ID_RADIANCE_HDR, - AV_CODEC_ID_WBMP, - AV_CODEC_ID_MEDIA100, - AV_CODEC_ID_VQC, - AV_CODEC_ID_PDV, - AV_CODEC_ID_EVC, - AV_CODEC_ID_RTV1, - AV_CODEC_ID_VMIX, - AV_CODEC_ID_LEAD, - AV_CODEC_ID_DNXUC, - AV_CODEC_ID_RV60, - AV_CODEC_ID_JPEGXL_ANIM, - AV_CODEC_ID_APV, - AV_CODEC_ID_PRORES_RAW, - - /* various PCM "codecs" */ - AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs - AV_CODEC_ID_PCM_S16LE = 0x10000, - AV_CODEC_ID_PCM_S16BE, - AV_CODEC_ID_PCM_U16LE, - AV_CODEC_ID_PCM_U16BE, - AV_CODEC_ID_PCM_S8, - AV_CODEC_ID_PCM_U8, - AV_CODEC_ID_PCM_MULAW, - AV_CODEC_ID_PCM_ALAW, - AV_CODEC_ID_PCM_S32LE, - AV_CODEC_ID_PCM_S32BE, - AV_CODEC_ID_PCM_U32LE, - AV_CODEC_ID_PCM_U32BE, - AV_CODEC_ID_PCM_S24LE, - AV_CODEC_ID_PCM_S24BE, - AV_CODEC_ID_PCM_U24LE, - AV_CODEC_ID_PCM_U24BE, - AV_CODEC_ID_PCM_S24DAUD, - AV_CODEC_ID_PCM_ZORK, - AV_CODEC_ID_PCM_S16LE_PLANAR, - AV_CODEC_ID_PCM_DVD, - AV_CODEC_ID_PCM_F32BE, - AV_CODEC_ID_PCM_F32LE, - AV_CODEC_ID_PCM_F64BE, - AV_CODEC_ID_PCM_F64LE, - AV_CODEC_ID_PCM_BLURAY, - AV_CODEC_ID_PCM_LXF, - AV_CODEC_ID_S302M, - AV_CODEC_ID_PCM_S8_PLANAR, - AV_CODEC_ID_PCM_S24LE_PLANAR, - AV_CODEC_ID_PCM_S32LE_PLANAR, - AV_CODEC_ID_PCM_S16BE_PLANAR, - AV_CODEC_ID_PCM_S64LE, - AV_CODEC_ID_PCM_S64BE, - AV_CODEC_ID_PCM_F16LE, - AV_CODEC_ID_PCM_F24LE, - AV_CODEC_ID_PCM_VIDC, - AV_CODEC_ID_PCM_SGA, - - /* various ADPCM codecs */ - AV_CODEC_ID_ADPCM_IMA_QT = 0x11000, - AV_CODEC_ID_ADPCM_IMA_WAV, - AV_CODEC_ID_ADPCM_IMA_DK3, - AV_CODEC_ID_ADPCM_IMA_DK4, - AV_CODEC_ID_ADPCM_IMA_WS, - AV_CODEC_ID_ADPCM_IMA_SMJPEG, - AV_CODEC_ID_ADPCM_MS, - AV_CODEC_ID_ADPCM_4XM, - AV_CODEC_ID_ADPCM_XA, - AV_CODEC_ID_ADPCM_ADX, - AV_CODEC_ID_ADPCM_EA, - AV_CODEC_ID_ADPCM_G726, - AV_CODEC_ID_ADPCM_CT, - AV_CODEC_ID_ADPCM_SWF, - AV_CODEC_ID_ADPCM_YAMAHA, - AV_CODEC_ID_ADPCM_SBPRO_4, - AV_CODEC_ID_ADPCM_SBPRO_3, - AV_CODEC_ID_ADPCM_SBPRO_2, - AV_CODEC_ID_ADPCM_THP, - AV_CODEC_ID_ADPCM_IMA_AMV, - AV_CODEC_ID_ADPCM_EA_R1, - AV_CODEC_ID_ADPCM_EA_R3, - AV_CODEC_ID_ADPCM_EA_R2, - AV_CODEC_ID_ADPCM_IMA_EA_SEAD, - AV_CODEC_ID_ADPCM_IMA_EA_EACS, - AV_CODEC_ID_ADPCM_EA_XAS, - AV_CODEC_ID_ADPCM_EA_MAXIS_XA, - AV_CODEC_ID_ADPCM_IMA_ISS, - AV_CODEC_ID_ADPCM_G722, - AV_CODEC_ID_ADPCM_IMA_APC, - AV_CODEC_ID_ADPCM_VIMA, - AV_CODEC_ID_ADPCM_AFC, - AV_CODEC_ID_ADPCM_IMA_OKI, - AV_CODEC_ID_ADPCM_DTK, - AV_CODEC_ID_ADPCM_IMA_RAD, - AV_CODEC_ID_ADPCM_G726LE, - AV_CODEC_ID_ADPCM_THP_LE, - AV_CODEC_ID_ADPCM_PSX, - AV_CODEC_ID_ADPCM_AICA, - AV_CODEC_ID_ADPCM_IMA_DAT4, - AV_CODEC_ID_ADPCM_MTAF, - AV_CODEC_ID_ADPCM_AGM, - AV_CODEC_ID_ADPCM_ARGO, - AV_CODEC_ID_ADPCM_IMA_SSI, - AV_CODEC_ID_ADPCM_ZORK, - AV_CODEC_ID_ADPCM_IMA_APM, - AV_CODEC_ID_ADPCM_IMA_ALP, - AV_CODEC_ID_ADPCM_IMA_MTF, - AV_CODEC_ID_ADPCM_IMA_CUNNING, - AV_CODEC_ID_ADPCM_IMA_MOFLEX, - AV_CODEC_ID_ADPCM_IMA_ACORN, - AV_CODEC_ID_ADPCM_XMD, - AV_CODEC_ID_ADPCM_IMA_XBOX, - AV_CODEC_ID_ADPCM_SANYO, - - /* AMR */ - AV_CODEC_ID_AMR_NB = 0x12000, - AV_CODEC_ID_AMR_WB, - - /* RealAudio codecs*/ - AV_CODEC_ID_RA_144 = 0x13000, - AV_CODEC_ID_RA_288, - - /* various DPCM codecs */ - AV_CODEC_ID_ROQ_DPCM = 0x14000, - AV_CODEC_ID_INTERPLAY_DPCM, - AV_CODEC_ID_XAN_DPCM, - AV_CODEC_ID_SOL_DPCM, - AV_CODEC_ID_SDX2_DPCM, - AV_CODEC_ID_GREMLIN_DPCM, - AV_CODEC_ID_DERF_DPCM, - AV_CODEC_ID_WADY_DPCM, - AV_CODEC_ID_CBD2_DPCM, - - /* audio codecs */ - AV_CODEC_ID_MP2 = 0x15000, - AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 - AV_CODEC_ID_AAC, - AV_CODEC_ID_AC3, - AV_CODEC_ID_DTS, - AV_CODEC_ID_VORBIS, - AV_CODEC_ID_DVAUDIO, - AV_CODEC_ID_WMAV1, - AV_CODEC_ID_WMAV2, - AV_CODEC_ID_MACE3, - AV_CODEC_ID_MACE6, - AV_CODEC_ID_VMDAUDIO, - AV_CODEC_ID_FLAC, - AV_CODEC_ID_MP3ADU, - AV_CODEC_ID_MP3ON4, - AV_CODEC_ID_SHORTEN, - AV_CODEC_ID_ALAC, - AV_CODEC_ID_WESTWOOD_SND1, - AV_CODEC_ID_GSM, ///< as in Berlin toast format - AV_CODEC_ID_QDM2, - AV_CODEC_ID_COOK, - AV_CODEC_ID_TRUESPEECH, - AV_CODEC_ID_TTA, - AV_CODEC_ID_SMACKAUDIO, - AV_CODEC_ID_QCELP, - AV_CODEC_ID_WAVPACK, - AV_CODEC_ID_DSICINAUDIO, - AV_CODEC_ID_IMC, - AV_CODEC_ID_MUSEPACK7, - AV_CODEC_ID_MLP, - AV_CODEC_ID_GSM_MS, /* as found in WAV */ - AV_CODEC_ID_ATRAC3, - AV_CODEC_ID_APE, - AV_CODEC_ID_NELLYMOSER, - AV_CODEC_ID_MUSEPACK8, - AV_CODEC_ID_SPEEX, - AV_CODEC_ID_WMAVOICE, - AV_CODEC_ID_WMAPRO, - AV_CODEC_ID_WMALOSSLESS, - AV_CODEC_ID_ATRAC3P, - AV_CODEC_ID_EAC3, - AV_CODEC_ID_SIPR, - AV_CODEC_ID_MP1, - AV_CODEC_ID_TWINVQ, - AV_CODEC_ID_TRUEHD, - AV_CODEC_ID_MP4ALS, - AV_CODEC_ID_ATRAC1, - AV_CODEC_ID_BINKAUDIO_RDFT, - AV_CODEC_ID_BINKAUDIO_DCT, - AV_CODEC_ID_AAC_LATM, - AV_CODEC_ID_QDMC, - AV_CODEC_ID_CELT, - AV_CODEC_ID_G723_1, - AV_CODEC_ID_G729, - AV_CODEC_ID_8SVX_EXP, - AV_CODEC_ID_8SVX_FIB, - AV_CODEC_ID_BMV_AUDIO, - AV_CODEC_ID_RALF, - AV_CODEC_ID_IAC, - AV_CODEC_ID_ILBC, - AV_CODEC_ID_OPUS, - AV_CODEC_ID_COMFORT_NOISE, - AV_CODEC_ID_TAK, - AV_CODEC_ID_METASOUND, - AV_CODEC_ID_PAF_AUDIO, - AV_CODEC_ID_ON2AVC, - AV_CODEC_ID_DSS_SP, - AV_CODEC_ID_CODEC2, - AV_CODEC_ID_FFWAVESYNTH, - AV_CODEC_ID_SONIC, - AV_CODEC_ID_SONIC_LS, - AV_CODEC_ID_EVRC, - AV_CODEC_ID_SMV, - AV_CODEC_ID_DSD_LSBF, - AV_CODEC_ID_DSD_MSBF, - AV_CODEC_ID_DSD_LSBF_PLANAR, - AV_CODEC_ID_DSD_MSBF_PLANAR, - AV_CODEC_ID_4GV, - AV_CODEC_ID_INTERPLAY_ACM, - AV_CODEC_ID_XMA1, - AV_CODEC_ID_XMA2, - AV_CODEC_ID_DST, - AV_CODEC_ID_ATRAC3AL, - AV_CODEC_ID_ATRAC3PAL, - AV_CODEC_ID_DOLBY_E, - AV_CODEC_ID_APTX, - AV_CODEC_ID_APTX_HD, - AV_CODEC_ID_SBC, - AV_CODEC_ID_ATRAC9, - AV_CODEC_ID_HCOM, - AV_CODEC_ID_ACELP_KELVIN, - AV_CODEC_ID_MPEGH_3D_AUDIO, - AV_CODEC_ID_SIREN, - AV_CODEC_ID_HCA, - AV_CODEC_ID_FASTAUDIO, - AV_CODEC_ID_MSNSIREN, - AV_CODEC_ID_DFPWM, - AV_CODEC_ID_BONK, - AV_CODEC_ID_MISC4, - AV_CODEC_ID_APAC, - AV_CODEC_ID_FTR, - AV_CODEC_ID_WAVARC, - AV_CODEC_ID_RKA, - AV_CODEC_ID_AC4, - AV_CODEC_ID_OSQ, - AV_CODEC_ID_QOA, - AV_CODEC_ID_LC3, - AV_CODEC_ID_G728, - - /* subtitle codecs */ - AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. - AV_CODEC_ID_DVD_SUBTITLE = 0x17000, - AV_CODEC_ID_DVB_SUBTITLE, - AV_CODEC_ID_TEXT, ///< raw UTF-8 text - AV_CODEC_ID_XSUB, - AV_CODEC_ID_SSA, - AV_CODEC_ID_MOV_TEXT, - AV_CODEC_ID_HDMV_PGS_SUBTITLE, - AV_CODEC_ID_DVB_TELETEXT, - AV_CODEC_ID_SRT, - AV_CODEC_ID_MICRODVD, - AV_CODEC_ID_EIA_608, - AV_CODEC_ID_JACOSUB, - AV_CODEC_ID_SAMI, - AV_CODEC_ID_REALTEXT, - AV_CODEC_ID_STL, - AV_CODEC_ID_SUBVIEWER1, - AV_CODEC_ID_SUBVIEWER, - AV_CODEC_ID_SUBRIP, - AV_CODEC_ID_WEBVTT, - AV_CODEC_ID_MPL2, - AV_CODEC_ID_VPLAYER, - AV_CODEC_ID_PJS, - AV_CODEC_ID_ASS, - AV_CODEC_ID_HDMV_TEXT_SUBTITLE, - AV_CODEC_ID_TTML, - AV_CODEC_ID_ARIB_CAPTION, - AV_CODEC_ID_IVTV_VBI, - - /* other specific kind of codecs (generally used for attachments) */ - AV_CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs. - AV_CODEC_ID_TTF = 0x18000, - - AV_CODEC_ID_SCTE_35, ///< Contain timestamp estimated through PCR of program stream. - AV_CODEC_ID_EPG, - AV_CODEC_ID_BINTEXT, - AV_CODEC_ID_XBIN, - AV_CODEC_ID_IDF, - AV_CODEC_ID_OTF, - AV_CODEC_ID_SMPTE_KLV, - AV_CODEC_ID_DVD_NAV, - AV_CODEC_ID_TIMED_ID3, - AV_CODEC_ID_BIN_DATA, - AV_CODEC_ID_SMPTE_2038, - AV_CODEC_ID_LCEVC, - AV_CODEC_ID_SMPTE_436M_ANC, - - - AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it - - AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS - * stream (only used by libavformat) */ - AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems - * stream (only used by libavformat) */ - AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information. - AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket - /** - * Dummy null video codec, useful mainly for development and debugging. - * Null encoder/decoder discard all input and never return any output. - */ - AV_CODEC_ID_VNULL, - /** - * Dummy null audio codec, useful mainly for development and debugging. - * Null encoder/decoder discard all input and never return any output. - */ - AV_CODEC_ID_ANULL, -}; - -/** - * Get the type of the given codec. - */ -enum AVMediaType avcodec_get_type(enum AVCodecID codec_id); - -/** - * Get the name of a codec. - * @return a static string identifying the codec; never NULL - */ -const char *avcodec_get_name(enum AVCodecID id); - -/** - * Return codec bits per sample. - * - * @param[in] codec_id the codec - * @return Number of bits per sample or zero if unknown for the given codec. - */ -int av_get_bits_per_sample(enum AVCodecID codec_id); - -/** - * Return codec bits per sample. - * Only return non-zero if the bits per sample is exactly correct, not an - * approximation. - * - * @param[in] codec_id the codec - * @return Number of bits per sample or zero if unknown for the given codec. - */ -int av_get_exact_bits_per_sample(enum AVCodecID codec_id); - -/** - * Return a name for the specified profile, if available. - * - * @param codec_id the ID of the codec to which the requested profile belongs - * @param profile the profile value for which a name is requested - * @return A name for the profile if found, NULL otherwise. - * - * @note unlike av_get_profile_name(), which searches a list of profiles - * supported by a specific decoder or encoder implementation, this - * function searches the list of profiles from the AVCodecDescriptor - */ -const char *avcodec_profile_name(enum AVCodecID codec_id, int profile); - -/** - * Return the PCM codec associated with a sample format. - * @param be endianness, 0 for little, 1 for big, - * -1 (or anything else) for native - * @return AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE - */ -enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be); - -/** - * @} - */ - -#endif // AVCODEC_CODEC_ID_H diff --git a/3rdparty/ffmpeg/include/libavcodec/codec_par.h b/3rdparty/ffmpeg/include/libavcodec/codec_par.h deleted file mode 100644 index 64b01f7e028b5..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/codec_par.h +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Codec parameters public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_CODEC_PAR_H -#define AVCODEC_CODEC_PAR_H - -#include - -#include "libavutil/avutil.h" -#include "libavutil/channel_layout.h" -#include "libavutil/rational.h" -#include "libavutil/pixfmt.h" - -#include "codec_id.h" -#include "defs.h" -#include "packet.h" - -/** - * @addtogroup lavc_core - * @{ - */ - -/** - * This struct describes the properties of an encoded stream. - * - * sizeof(AVCodecParameters) is not a part of the public ABI, this struct must - * be allocated with avcodec_parameters_alloc() and freed with - * avcodec_parameters_free(). - */ -typedef struct AVCodecParameters { - /** - * General type of the encoded data. - */ - enum AVMediaType codec_type; - /** - * Specific type of the encoded data (the codec used). - */ - enum AVCodecID codec_id; - /** - * Additional information about the codec (corresponds to the AVI FOURCC). - */ - uint32_t codec_tag; - - /** - * Extra binary data needed for initializing the decoder, codec-dependent. - * - * Must be allocated with av_malloc() and will be freed by - * avcodec_parameters_free(). The allocated size of extradata must be at - * least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding - * bytes zeroed. - */ - uint8_t *extradata; - /** - * Size of the extradata content in bytes. - */ - int extradata_size; - - /** - * Additional data associated with the entire stream. - * - * Should be allocated with av_packet_side_data_new() or - * av_packet_side_data_add(), and will be freed by avcodec_parameters_free(). - */ - AVPacketSideData *coded_side_data; - - /** - * Amount of entries in @ref coded_side_data. - */ - int nb_coded_side_data; - - /** - * - video: the pixel format, the value corresponds to enum AVPixelFormat. - * - audio: the sample format, the value corresponds to enum AVSampleFormat. - */ - int format; - - /** - * The average bitrate of the encoded data (in bits per second). - */ - int64_t bit_rate; - - /** - * The number of bits per sample in the codedwords. - * - * This is basically the bitrate per sample. It is mandatory for a bunch of - * formats to actually decode them. It's the number of bits for one sample in - * the actual coded bitstream. - * - * This could be for example 4 for ADPCM - * For PCM formats this matches bits_per_raw_sample - * Can be 0 - */ - int bits_per_coded_sample; - - /** - * This is the number of valid bits in each output sample. If the - * sample format has more bits, the least significant bits are additional - * padding bits, which are always 0. Use right shifts to reduce the sample - * to its actual size. For example, audio formats with 24 bit samples will - * have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32. - * To get the original sample use "(int32_t)sample >> 8"." - * - * For ADPCM this might be 12 or 16 or similar - * Can be 0 - */ - int bits_per_raw_sample; - - /** - * Codec-specific bitstream restrictions that the stream conforms to. - */ - int profile; - int level; - - /** - * Video only. The dimensions of the video frame in pixels. - */ - int width; - int height; - - /** - * Video only. The aspect ratio (width / height) which a single pixel - * should have when displayed. - * - * When the aspect ratio is unknown / undefined, the numerator should be - * set to 0 (the denominator may have any value). - */ - AVRational sample_aspect_ratio; - - /** - * Video only. Number of frames per second, for streams with constant frame - * durations. Should be set to { 0, 1 } when some frames have differing - * durations or if the value is not known. - * - * @note This field corresponds to values that are stored in codec-level - * headers and is typically overridden by container/transport-layer - * timestamps, when available. It should thus be used only as a last resort, - * when no higher-level timing information is available. - */ - AVRational framerate; - - /** - * Video only. The order of the fields in interlaced video. - */ - enum AVFieldOrder field_order; - - /** - * Video only. Additional colorspace characteristics. - */ - enum AVColorRange color_range; - enum AVColorPrimaries color_primaries; - enum AVColorTransferCharacteristic color_trc; - enum AVColorSpace color_space; - enum AVChromaLocation chroma_location; - - /** - * Video only. Number of delayed frames. - */ - int video_delay; - - /** - * Audio only. The channel layout and number of channels. - */ - AVChannelLayout ch_layout; - /** - * Audio only. The number of audio samples per second. - */ - int sample_rate; - /** - * Audio only. The number of bytes per coded audio frame, required by some - * formats. - * - * Corresponds to nBlockAlign in WAVEFORMATEX. - */ - int block_align; - /** - * Audio only. Audio frame size, if known. Required by some formats to be static. - */ - int frame_size; - - /** - * Audio only. The amount of padding (in samples) inserted by the encoder at - * the beginning of the audio. I.e. this number of leading decoded samples - * must be discarded by the caller to get the original audio without leading - * padding. - */ - int initial_padding; - /** - * Audio only. The amount of padding (in samples) appended by the encoder to - * the end of the audio. I.e. this number of decoded samples must be - * discarded by the caller from the end of the stream to get the original - * audio without any trailing padding. - */ - int trailing_padding; - /** - * Audio only. Number of samples to skip after a discontinuity. - */ - int seek_preroll; -} AVCodecParameters; - -/** - * Allocate a new AVCodecParameters and set its fields to default values - * (unknown/invalid/0). The returned struct must be freed with - * avcodec_parameters_free(). - */ -AVCodecParameters *avcodec_parameters_alloc(void); - -/** - * Free an AVCodecParameters instance and everything associated with it and - * write NULL to the supplied pointer. - */ -void avcodec_parameters_free(AVCodecParameters **par); - -/** - * Copy the contents of src to dst. Any allocated fields in dst are freed and - * replaced with newly allocated duplicates of the corresponding fields in src. - * - * @return >= 0 on success, a negative AVERROR code on failure. - */ -int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src); - -/** - * This function is the same as av_get_audio_frame_duration(), except it works - * with AVCodecParameters instead of an AVCodecContext. - */ -int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes); - -/** - * @} - */ - -#endif // AVCODEC_CODEC_PAR_H diff --git a/3rdparty/ffmpeg/include/libavcodec/d3d11va.h b/3rdparty/ffmpeg/include/libavcodec/d3d11va.h deleted file mode 100644 index 27f40e5519bab..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/d3d11va.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Direct3D11 HW acceleration - * - * copyright (c) 2009 Laurent Aimar - * copyright (c) 2015 Steve Lhomme - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_D3D11VA_H -#define AVCODEC_D3D11VA_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_d3d11va - * Public libavcodec D3D11VA header. - */ - -#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602 -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0602 -#endif - -#include -#include - -/** - * @defgroup lavc_codec_hwaccel_d3d11va Direct3D11 - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -/** - * This structure is used to provides the necessary configurations and data - * to the Direct3D11 FFmpeg HWAccel implementation. - * - * The application must make it available as AVCodecContext.hwaccel_context. - * - * Use av_d3d11va_alloc_context() exclusively to allocate an AVD3D11VAContext. - */ -typedef struct AVD3D11VAContext { - /** - * D3D11 decoder object - */ - ID3D11VideoDecoder *decoder; - - /** - * D3D11 VideoContext - */ - ID3D11VideoContext *video_context; - - /** - * D3D11 configuration used to create the decoder - */ - D3D11_VIDEO_DECODER_CONFIG *cfg; - - /** - * The number of surface in the surface array - */ - unsigned surface_count; - - /** - * The array of Direct3D surfaces used to create the decoder - */ - ID3D11VideoDecoderOutputView **surface; - - /** - * A bit field configuring the workarounds needed for using the decoder - */ - uint64_t workaround; - - /** - * Private to the FFmpeg AVHWAccel implementation - */ - unsigned report_id; - - /** - * Mutex to access video_context - */ - HANDLE context_mutex; -} AVD3D11VAContext; - -/** - * Allocate an AVD3D11VAContext. - * - * @return Newly-allocated AVD3D11VAContext or NULL on failure. - */ -AVD3D11VAContext *av_d3d11va_alloc_context(void); - -/** - * @} - */ - -#endif /* AVCODEC_D3D11VA_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/defs.h b/3rdparty/ffmpeg/include/libavcodec/defs.h deleted file mode 100644 index b13e983b13a93..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/defs.h +++ /dev/null @@ -1,362 +0,0 @@ -/* - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DEFS_H -#define AVCODEC_DEFS_H - -/** - * @file - * @ingroup libavc - * Misc types and constants that do not belong anywhere else. - */ - -#include -#include - -/** - * @ingroup lavc_decoding - * Required number of additionally allocated bytes at the end of the input bitstream for decoding. - * This is mainly needed because some optimized bitstream readers read - * 32 or 64 bit at once and could read over the end.
- * Note: If the first 23 bits of the additional bytes are not 0, then damaged - * MPEG bitstreams could cause overread and segfault. - */ -#define AV_INPUT_BUFFER_PADDING_SIZE 64 - -/** - * Verify checksums embedded in the bitstream (could be of either encoded or - * decoded data, depending on the format) and print an error message on mismatch. - * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the - * decoder/demuxer returning an error. - */ -#define AV_EF_CRCCHECK (1<<0) -#define AV_EF_BITSTREAM (1<<1) ///< detect bitstream specification deviations -#define AV_EF_BUFFER (1<<2) ///< detect improper bitstream length -#define AV_EF_EXPLODE (1<<3) ///< abort decoding on minor error detection - -#define AV_EF_IGNORE_ERR (1<<15) ///< ignore errors and continue -#define AV_EF_CAREFUL (1<<16) ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors -#define AV_EF_COMPLIANT (1<<17) ///< consider all spec non compliances as errors -#define AV_EF_AGGRESSIVE (1<<18) ///< consider things that a sane encoder/muxer should not do as an error - -#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software. -#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences. -#define FF_COMPLIANCE_NORMAL 0 -#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions -#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things. - - -#define AV_PROFILE_UNKNOWN -99 -#define AV_PROFILE_RESERVED -100 - -#define AV_PROFILE_AAC_MAIN 0 -#define AV_PROFILE_AAC_LOW 1 -#define AV_PROFILE_AAC_SSR 2 -#define AV_PROFILE_AAC_LTP 3 -#define AV_PROFILE_AAC_HE 4 -#define AV_PROFILE_AAC_HE_V2 28 -#define AV_PROFILE_AAC_LD 22 -#define AV_PROFILE_AAC_ELD 38 -#define AV_PROFILE_AAC_USAC 41 -#define AV_PROFILE_MPEG2_AAC_LOW 128 -#define AV_PROFILE_MPEG2_AAC_HE 131 - -#define AV_PROFILE_DNXHD 0 -#define AV_PROFILE_DNXHR_LB 1 -#define AV_PROFILE_DNXHR_SQ 2 -#define AV_PROFILE_DNXHR_HQ 3 -#define AV_PROFILE_DNXHR_HQX 4 -#define AV_PROFILE_DNXHR_444 5 - -#define AV_PROFILE_DTS 20 -#define AV_PROFILE_DTS_ES 30 -#define AV_PROFILE_DTS_96_24 40 -#define AV_PROFILE_DTS_HD_HRA 50 -#define AV_PROFILE_DTS_HD_MA 60 -#define AV_PROFILE_DTS_EXPRESS 70 -#define AV_PROFILE_DTS_HD_MA_X 61 -#define AV_PROFILE_DTS_HD_MA_X_IMAX 62 - -#define AV_PROFILE_EAC3_DDP_ATMOS 30 - -#define AV_PROFILE_TRUEHD_ATMOS 30 - -#define AV_PROFILE_MPEG2_422 0 -#define AV_PROFILE_MPEG2_HIGH 1 -#define AV_PROFILE_MPEG2_SS 2 -#define AV_PROFILE_MPEG2_SNR_SCALABLE 3 -#define AV_PROFILE_MPEG2_MAIN 4 -#define AV_PROFILE_MPEG2_SIMPLE 5 - -#define AV_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag -#define AV_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag - -#define AV_PROFILE_H264_BASELINE 66 -#define AV_PROFILE_H264_CONSTRAINED_BASELINE (66|AV_PROFILE_H264_CONSTRAINED) -#define AV_PROFILE_H264_MAIN 77 -#define AV_PROFILE_H264_EXTENDED 88 -#define AV_PROFILE_H264_HIGH 100 -#define AV_PROFILE_H264_HIGH_10 110 -#define AV_PROFILE_H264_HIGH_10_INTRA (110|AV_PROFILE_H264_INTRA) -#define AV_PROFILE_H264_MULTIVIEW_HIGH 118 -#define AV_PROFILE_H264_HIGH_422 122 -#define AV_PROFILE_H264_HIGH_422_INTRA (122|AV_PROFILE_H264_INTRA) -#define AV_PROFILE_H264_STEREO_HIGH 128 -#define AV_PROFILE_H264_HIGH_444 144 -#define AV_PROFILE_H264_HIGH_444_PREDICTIVE 244 -#define AV_PROFILE_H264_HIGH_444_INTRA (244|AV_PROFILE_H264_INTRA) -#define AV_PROFILE_H264_CAVLC_444 44 - -#define AV_PROFILE_VC1_SIMPLE 0 -#define AV_PROFILE_VC1_MAIN 1 -#define AV_PROFILE_VC1_COMPLEX 2 -#define AV_PROFILE_VC1_ADVANCED 3 - -#define AV_PROFILE_MPEG4_SIMPLE 0 -#define AV_PROFILE_MPEG4_SIMPLE_SCALABLE 1 -#define AV_PROFILE_MPEG4_CORE 2 -#define AV_PROFILE_MPEG4_MAIN 3 -#define AV_PROFILE_MPEG4_N_BIT 4 -#define AV_PROFILE_MPEG4_SCALABLE_TEXTURE 5 -#define AV_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6 -#define AV_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7 -#define AV_PROFILE_MPEG4_HYBRID 8 -#define AV_PROFILE_MPEG4_ADVANCED_REAL_TIME 9 -#define AV_PROFILE_MPEG4_CORE_SCALABLE 10 -#define AV_PROFILE_MPEG4_ADVANCED_CODING 11 -#define AV_PROFILE_MPEG4_ADVANCED_CORE 12 -#define AV_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13 -#define AV_PROFILE_MPEG4_SIMPLE_STUDIO 14 -#define AV_PROFILE_MPEG4_ADVANCED_SIMPLE 15 - -#define AV_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 1 -#define AV_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 2 -#define AV_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION 32768 -#define AV_PROFILE_JPEG2000_DCINEMA_2K 3 -#define AV_PROFILE_JPEG2000_DCINEMA_4K 4 - -#define AV_PROFILE_VP9_0 0 -#define AV_PROFILE_VP9_1 1 -#define AV_PROFILE_VP9_2 2 -#define AV_PROFILE_VP9_3 3 - -#define AV_PROFILE_HEVC_MAIN 1 -#define AV_PROFILE_HEVC_MAIN_10 2 -#define AV_PROFILE_HEVC_MAIN_STILL_PICTURE 3 -#define AV_PROFILE_HEVC_REXT 4 -#define AV_PROFILE_HEVC_MULTIVIEW_MAIN 6 -#define AV_PROFILE_HEVC_SCC 9 - -#define AV_PROFILE_VVC_MAIN_10 1 -#define AV_PROFILE_VVC_MAIN_10_444 33 - -#define AV_PROFILE_AV1_MAIN 0 -#define AV_PROFILE_AV1_HIGH 1 -#define AV_PROFILE_AV1_PROFESSIONAL 2 - -#define AV_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT 0xc0 -#define AV_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT 0xc1 -#define AV_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT 0xc2 -#define AV_PROFILE_MJPEG_HUFFMAN_LOSSLESS 0xc3 -#define AV_PROFILE_MJPEG_JPEG_LS 0xf7 - -#define AV_PROFILE_SBC_MSBC 1 - -#define AV_PROFILE_PRORES_PROXY 0 -#define AV_PROFILE_PRORES_LT 1 -#define AV_PROFILE_PRORES_STANDARD 2 -#define AV_PROFILE_PRORES_HQ 3 -#define AV_PROFILE_PRORES_4444 4 -#define AV_PROFILE_PRORES_XQ 5 - -#define AV_PROFILE_PRORES_RAW 0 -#define AV_PROFILE_PRORES_RAW_HQ 1 - -#define AV_PROFILE_ARIB_PROFILE_A 0 -#define AV_PROFILE_ARIB_PROFILE_C 1 - -#define AV_PROFILE_KLVA_SYNC 0 -#define AV_PROFILE_KLVA_ASYNC 1 - -#define AV_PROFILE_EVC_BASELINE 0 -#define AV_PROFILE_EVC_MAIN 1 - -#define AV_PROFILE_APV_422_10 33 -#define AV_PROFILE_APV_422_12 44 -#define AV_PROFILE_APV_444_10 55 -#define AV_PROFILE_APV_444_12 66 -#define AV_PROFILE_APV_4444_10 77 -#define AV_PROFILE_APV_4444_12 88 -#define AV_PROFILE_APV_400_10 99 - - -#define AV_LEVEL_UNKNOWN -99 - -enum AVFieldOrder { - AV_FIELD_UNKNOWN, - AV_FIELD_PROGRESSIVE, - AV_FIELD_TT, ///< Top coded_first, top displayed first - AV_FIELD_BB, ///< Bottom coded first, bottom displayed first - AV_FIELD_TB, ///< Top coded first, bottom displayed first - AV_FIELD_BT, ///< Bottom coded first, top displayed first -}; - -/** - * @ingroup lavc_decoding - */ -enum AVDiscard{ - /* We leave some space between them for extensions (drop some - * keyframes for intra-only or drop just some bidir frames). */ - AVDISCARD_NONE =-16, ///< discard nothing - AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi - AVDISCARD_NONREF = 8, ///< discard all non reference - AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames - AVDISCARD_NONINTRA= 24, ///< discard all non intra frames - AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes - AVDISCARD_ALL = 48, ///< discard all -}; - -enum AVAudioServiceType { - AV_AUDIO_SERVICE_TYPE_MAIN = 0, - AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, - AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2, - AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3, - AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4, - AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5, - AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, - AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, - AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, - AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI -}; - -/** - * Pan Scan area. - * This specifies the area which should be displayed. - * Note there may be multiple such areas for one frame. - */ -typedef struct AVPanScan { - /** - * id - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int id; - - /** - * width and height in 1/16 pel - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int width; - int height; - - /** - * position of the top left corner in 1/16 pel for up to 3 fields/frames - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - int16_t position[3][2]; -} AVPanScan; - -/** - * This structure describes the bitrate properties of an encoded bitstream. It - * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD - * parameters for H.264/HEVC. - */ -typedef struct AVCPBProperties { - /** - * Maximum bitrate of the stream, in bits per second. - * Zero if unknown or unspecified. - */ - int64_t max_bitrate; - /** - * Minimum bitrate of the stream, in bits per second. - * Zero if unknown or unspecified. - */ - int64_t min_bitrate; - /** - * Average bitrate of the stream, in bits per second. - * Zero if unknown or unspecified. - */ - int64_t avg_bitrate; - - /** - * The size of the buffer to which the ratecontrol is applied, in bits. - * Zero if unknown or unspecified. - */ - int64_t buffer_size; - - /** - * The delay between the time the packet this structure is associated with - * is received and the time when it should be decoded, in periods of a 27MHz - * clock. - * - * UINT64_MAX when unknown or unspecified. - */ - uint64_t vbv_delay; -} AVCPBProperties; - -/** - * Allocate a CPB properties structure and initialize its fields to default - * values. - * - * @param size if non-NULL, the size of the allocated struct will be written - * here. This is useful for embedding it in side data. - * - * @return the newly allocated struct or NULL on failure - */ -AVCPBProperties *av_cpb_properties_alloc(size_t *size); - -/** - * This structure supplies correlation between a packet timestamp and a wall clock - * production time. The definition follows the Producer Reference Time ('prft') - * as defined in ISO/IEC 14496-12 - */ -typedef struct AVProducerReferenceTime { - /** - * A UTC timestamp, in microseconds, since Unix epoch (e.g, av_gettime()). - */ - int64_t wallclock; - int flags; -} AVProducerReferenceTime; - -/** - * RTCP SR (Sender Report) information - * - * The received sender report information for an RTSP - * stream, exposed as AV_PKT_DATA_RTCP_SR side data. - */ -typedef struct AVRTCPSenderReport { - uint32_t ssrc; ///< Synchronization source identifier - uint64_t ntp_timestamp; ///< NTP time when the report was sent - uint32_t rtp_timestamp; ///< RTP time when the report was sent - uint32_t sender_nb_packets; ///< Total number of packets sent - uint32_t sender_nb_bytes; ///< Total number of bytes sent (excluding headers or padding) -} AVRTCPSenderReport; - -/** - * Encode extradata length to a buffer. Used by xiph codecs. - * - * @param s buffer to write to; must be at least (v/255+1) bytes long - * @param v size of extradata in bytes - * @return number of bytes written to the buffer. - */ -unsigned int av_xiphlacing(unsigned char *s, unsigned int v); - -#endif // AVCODEC_DEFS_H diff --git a/3rdparty/ffmpeg/include/libavcodec/dirac.h b/3rdparty/ffmpeg/include/libavcodec/dirac.h deleted file mode 100644 index 8c348cdc02758..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/dirac.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (C) 2007 Marco Gerards - * Copyright (C) 2009 David Conrad - * Copyright (C) 2011 Jordi Ortiz - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DIRAC_H -#define AVCODEC_DIRAC_H - -/** - * @file - * Interface to Dirac Decoder/Encoder - * @author Marco Gerards - * @author David Conrad - * @author Jordi Ortiz - */ - -#include -#include - -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" - -/** - * The spec limits the number of wavelet decompositions to 4 for both - * level 1 (VC-2) and 128 (long-gop default). - * 5 decompositions is the maximum before >16-bit buffers are needed. - * Schroedinger allows this for DD 9,7 and 13,7 wavelets only, limiting - * the others to 4 decompositions (or 3 for the fidelity filter). - * - * We use this instead of MAX_DECOMPOSITIONS to save some memory. - */ -#define MAX_DWT_LEVELS 5 - -/** - * Parse code values: - * - * Dirac Specification -> - * 9.6.1 Table 9.1 - * - * VC-2 Specification -> - * 10.4.1 Table 10.1 - */ - -enum DiracParseCodes { - DIRAC_PCODE_SEQ_HEADER = 0x00, - DIRAC_PCODE_END_SEQ = 0x10, - DIRAC_PCODE_AUX = 0x20, - DIRAC_PCODE_PAD = 0x30, - DIRAC_PCODE_PICTURE_CODED = 0x08, - DIRAC_PCODE_PICTURE_RAW = 0x48, - DIRAC_PCODE_PICTURE_LOW_DEL = 0xC8, - DIRAC_PCODE_PICTURE_HQ = 0xE8, - DIRAC_PCODE_INTER_NOREF_CO1 = 0x0A, - DIRAC_PCODE_INTER_NOREF_CO2 = 0x09, - DIRAC_PCODE_INTER_REF_CO1 = 0x0D, - DIRAC_PCODE_INTER_REF_CO2 = 0x0E, - DIRAC_PCODE_INTRA_REF_CO = 0x0C, - DIRAC_PCODE_INTRA_REF_RAW = 0x4C, - DIRAC_PCODE_INTRA_REF_PICT = 0xCC, - DIRAC_PCODE_MAGIC = 0x42424344, -}; - -typedef struct DiracVersionInfo { - int major; - int minor; -} DiracVersionInfo; - -typedef struct AVDiracSeqHeader { - unsigned width; - unsigned height; - uint8_t chroma_format; ///< 0: 444 1: 422 2: 420 - - uint8_t interlaced; - uint8_t top_field_first; - - uint8_t frame_rate_index; ///< index into dirac_frame_rate[] - uint8_t aspect_ratio_index; ///< index into dirac_aspect_ratio[] - - uint16_t clean_width; - uint16_t clean_height; - uint16_t clean_left_offset; - uint16_t clean_right_offset; - - uint8_t pixel_range_index; ///< index into dirac_pixel_range_presets[] - uint8_t color_spec_index; ///< index into dirac_color_spec_presets[] - - int profile; - int level; - - AVRational framerate; - AVRational sample_aspect_ratio; - - enum AVPixelFormat pix_fmt; - enum AVColorRange color_range; - enum AVColorPrimaries color_primaries; - enum AVColorTransferCharacteristic color_trc; - enum AVColorSpace colorspace; - - DiracVersionInfo version; - int bit_depth; -} AVDiracSeqHeader; - -/** - * Parse a Dirac sequence header. - * - * @param dsh this function will allocate and fill an AVDiracSeqHeader struct - * and write it into this pointer. The caller must free it with - * av_free(). - * @param buf the data buffer - * @param buf_size the size of the data buffer in bytes - * @param log_ctx if non-NULL, this function will log errors here - * @return 0 on success, a negative AVERROR code on failure - */ -int av_dirac_parse_sequence_header(AVDiracSeqHeader **dsh, - const uint8_t *buf, size_t buf_size, - void *log_ctx); - -#endif /* AVCODEC_DIRAC_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/dv_profile.h b/3rdparty/ffmpeg/include/libavcodec/dv_profile.h deleted file mode 100644 index 4365f1b4b1492..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/dv_profile.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DV_PROFILE_H -#define AVCODEC_DV_PROFILE_H - -#include - -#include "libavutil/pixfmt.h" -#include "libavutil/rational.h" - -/* minimum number of bytes to read from a DV stream in order to - * determine the profile */ -#define DV_PROFILE_BYTES (6 * 80) /* 6 DIF blocks */ - - -/* - * AVDVProfile is used to express the differences between various - * DV flavors. For now it's primarily used for differentiating - * 525/60 and 625/50, but the plans are to use it for various - * DV specs as well (e.g. SMPTE314M vs. IEC 61834). - */ -typedef struct AVDVProfile { - int dsf; /* value of the dsf in the DV header */ - int video_stype; /* stype for VAUX source pack */ - int frame_size; /* total size of one frame in bytes */ - int difseg_size; /* number of DIF segments per DIF channel */ - int n_difchan; /* number of DIF channels per frame */ - AVRational time_base; /* 1/framerate */ - int ltc_divisor; /* FPS from the LTS standpoint */ - int height; /* picture height in pixels */ - int width; /* picture width in pixels */ - AVRational sar[2]; /* sample aspect ratios for 4:3 and 16:9 */ - enum AVPixelFormat pix_fmt; /* picture pixel format */ - int bpm; /* blocks per macroblock */ - const uint8_t *block_sizes; /* AC block sizes, in bits */ - int audio_stride; /* size of audio_shuffle table */ - int audio_min_samples[3]; /* min amount of audio samples */ - /* for 48kHz, 44.1kHz and 32kHz */ - int audio_samples_dist[5]; /* how many samples are supposed to be */ - /* in each frame in a 5 frames window */ - const uint8_t (*audio_shuffle)[9]; /* PCM shuffling table */ -} AVDVProfile; - -/** - * Get a DV profile for the provided compressed frame. - * - * @param sys the profile used for the previous frame, may be NULL - * @param frame the compressed data buffer - * @param buf_size size of the buffer in bytes - * @return the DV profile for the supplied data or NULL on failure - */ -const AVDVProfile *av_dv_frame_profile(const AVDVProfile *sys, - const uint8_t *frame, unsigned buf_size); - -/** - * Get a DV profile for the provided stream parameters. - */ -const AVDVProfile *av_dv_codec_profile(int width, int height, enum AVPixelFormat pix_fmt); - -/** - * Get a DV profile for the provided stream parameters. - * The frame rate is used as a best-effort parameter. - */ -const AVDVProfile *av_dv_codec_profile2(int width, int height, enum AVPixelFormat pix_fmt, AVRational frame_rate); - -#endif /* AVCODEC_DV_PROFILE_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/dxva2.h b/3rdparty/ffmpeg/include/libavcodec/dxva2.h deleted file mode 100644 index bdec6112e9da0..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/dxva2.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * DXVA2 HW acceleration - * - * copyright (c) 2009 Laurent Aimar - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_DXVA2_H -#define AVCODEC_DXVA2_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_dxva2 - * Public libavcodec DXVA2 header. - */ - -#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602 -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x0602 -#endif - -#include -#include -#include - -/** - * @defgroup lavc_codec_hwaccel_dxva2 DXVA2 - * @ingroup lavc_codec_hwaccel - * - * @{ - */ - -/** - * This structure is used to provides the necessary configurations and data - * to the DXVA2 FFmpeg HWAccel implementation. - * - * The application must make it available as AVCodecContext.hwaccel_context. - */ -struct dxva_context { - /** - * DXVA2 decoder object - */ - IDirectXVideoDecoder *decoder; - - /** - * DXVA2 configuration used to create the decoder - */ - const DXVA2_ConfigPictureDecode *cfg; - - /** - * The number of surface in the surface array - */ - unsigned surface_count; - - /** - * The array of Direct3D surfaces used to create the decoder - */ - LPDIRECT3DSURFACE9 *surface; - - /** - * A bit field configuring the workarounds needed for using the decoder - */ - uint64_t workaround; - - /** - * Private to the FFmpeg AVHWAccel implementation - */ - unsigned report_id; -}; - -/** - * @} - */ - -#endif /* AVCODEC_DXVA2_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/jni.h b/3rdparty/ffmpeg/include/libavcodec/jni.h deleted file mode 100644 index 955cd28096b7e..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/jni.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * JNI public API functions - * - * Copyright (c) 2015-2016 Matthieu Bouron - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_JNI_H -#define AVCODEC_JNI_H - -/* - * Manually set a Java virtual machine which will be used to retrieve the JNI - * environment. Once a Java VM is set it cannot be changed afterwards, meaning - * you can call multiple times av_jni_set_java_vm with the same Java VM pointer - * however it will error out if you try to set a different Java VM. - * - * @param vm Java virtual machine - * @param log_ctx context used for logging, can be NULL - * @return 0 on success, < 0 otherwise - */ -int av_jni_set_java_vm(void *vm, void *log_ctx); - -/* - * Get the Java virtual machine which has been set with av_jni_set_java_vm. - * - * @param vm Java virtual machine - * @return a pointer to the Java virtual machine - */ -void *av_jni_get_java_vm(void *log_ctx); - -/* - * Set the Android application context which will be used to retrieve the Android - * content resolver to handle content uris. - * - * This function is only available on Android. - * - * @param app_ctx global JNI reference to the Android application context - * @return 0 on success, < 0 otherwise - */ -int av_jni_set_android_app_ctx(void *app_ctx, void *log_ctx); - -/* - * Get the Android application context that has been set with - * av_jni_set_android_app_ctx. - * - * This function is only available on Android. - * - * @return a pointer the the Android application context - */ -void *av_jni_get_android_app_ctx(void); - -#endif /* AVCODEC_JNI_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/mediacodec.h b/3rdparty/ffmpeg/include/libavcodec/mediacodec.h deleted file mode 100644 index 4e9b56a618454..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/mediacodec.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Android MediaCodec public API - * - * Copyright (c) 2016 Matthieu Bouron - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_MEDIACODEC_H -#define AVCODEC_MEDIACODEC_H - -#include "libavcodec/avcodec.h" - -/** - * This structure holds a reference to a android/view/Surface object that will - * be used as output by the decoder. - * - */ -typedef struct AVMediaCodecContext { - - /** - * android/view/Surface object reference. - */ - void *surface; - -} AVMediaCodecContext; - -/** - * Allocate and initialize a MediaCodec context. - * - * When decoding with MediaCodec is finished, the caller must free the - * MediaCodec context with av_mediacodec_default_free. - * - * @return a pointer to a newly allocated AVMediaCodecContext on success, NULL otherwise - */ -AVMediaCodecContext *av_mediacodec_alloc_context(void); - -/** - * Convenience function that sets up the MediaCodec context. - * - * @param avctx codec context - * @param ctx MediaCodec context to initialize - * @param surface reference to an android/view/Surface - * @return 0 on success, < 0 otherwise - */ -int av_mediacodec_default_init(AVCodecContext *avctx, AVMediaCodecContext *ctx, void *surface); - -/** - * This function must be called to free the MediaCodec context initialized with - * av_mediacodec_default_init(). - * - * @param avctx codec context - */ -void av_mediacodec_default_free(AVCodecContext *avctx); - -/** - * Opaque structure representing a MediaCodec buffer to render. - */ -typedef struct MediaCodecBuffer AVMediaCodecBuffer; - -/** - * Release a MediaCodec buffer and render it to the surface that is associated - * with the decoder. This function should only be called once on a given - * buffer, once released the underlying buffer returns to the codec, thus - * subsequent calls to this function will have no effect. - * - * @param buffer the buffer to render - * @param render 1 to release and render the buffer to the surface or 0 to - * discard the buffer - * @return 0 on success, < 0 otherwise - */ -int av_mediacodec_release_buffer(AVMediaCodecBuffer *buffer, int render); - -/** - * Release a MediaCodec buffer and render it at the given time to the surface - * that is associated with the decoder. The timestamp must be within one second - * of the current `java/lang/System#nanoTime()` (which is implemented using - * `CLOCK_MONOTONIC` on Android). See the Android MediaCodec documentation - * of [`android/media/MediaCodec#releaseOutputBuffer(int,long)`][0] for more details. - * - * @param buffer the buffer to render - * @param time timestamp in nanoseconds of when to render the buffer - * @return 0 on success, < 0 otherwise - * - * [0]: https://developer.android.com/reference/android/media/MediaCodec#releaseOutputBuffer(int,%20long) - */ -int av_mediacodec_render_buffer_at_time(AVMediaCodecBuffer *buffer, int64_t time); - -#endif /* AVCODEC_MEDIACODEC_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/packet.h b/3rdparty/ffmpeg/include/libavcodec/packet.h deleted file mode 100644 index 55389a957d808..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/packet.h +++ /dev/null @@ -1,907 +0,0 @@ -/* - * AVPacket public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_PACKET_H -#define AVCODEC_PACKET_H - -#include -#include - -#include "libavutil/attributes.h" -#include "libavutil/buffer.h" -#include "libavutil/dict.h" -#include "libavutil/rational.h" -#include "libavutil/version.h" - -#include "libavcodec/version_major.h" - -/** - * @defgroup lavc_packet_side_data AVPacketSideData - * - * Types and functions for working with AVPacketSideData. - * @{ - */ -enum AVPacketSideDataType { - /** - * An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE - * bytes worth of palette. This side data signals that a new palette is - * present. - */ - AV_PKT_DATA_PALETTE, - - /** - * The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format - * that the extradata buffer was changed and the receiving side should - * act upon it appropriately. The new extradata is embedded in the side - * data buffer and should be immediately used for processing the current - * frame or packet. - */ - AV_PKT_DATA_NEW_EXTRADATA, - - /** - * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: - * @code - * u32le param_flags - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) - * s32le sample_rate - * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) - * s32le width - * s32le height - * @endcode - */ - AV_PKT_DATA_PARAM_CHANGE, - - /** - * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of - * structures with info about macroblocks relevant to splitting the - * packet into smaller packets on macroblock edges (e.g. as for RFC 2190). - * That is, it does not necessarily contain info about all macroblocks, - * as long as the distance between macroblocks in the info is smaller - * than the target payload size. - * Each MB info structure is 12 bytes, and is laid out as follows: - * @code - * u32le bit offset from the start of the packet - * u8 current quantizer at the start of the macroblock - * u8 GOB number - * u16le macroblock address within the GOB - * u8 horizontal MV predictor - * u8 vertical MV predictor - * u8 horizontal MV predictor for block number 3 - * u8 vertical MV predictor for block number 3 - * @endcode - */ - AV_PKT_DATA_H263_MB_INFO, - - /** - * This side data should be associated with an audio stream and contains - * ReplayGain information in form of the AVReplayGain struct. - */ - AV_PKT_DATA_REPLAYGAIN, - - /** - * This side data contains a 3x3 transformation matrix describing an affine - * transformation that needs to be applied to the decoded video frames for - * correct presentation. - * - * See libavutil/display.h for a detailed description of the data. - */ - AV_PKT_DATA_DISPLAYMATRIX, - - /** - * This side data should be associated with a video stream and contains - * Stereoscopic 3D information in form of the AVStereo3D struct. - */ - AV_PKT_DATA_STEREO3D, - - /** - * This side data should be associated with an audio stream and corresponds - * to enum AVAudioServiceType. - */ - AV_PKT_DATA_AUDIO_SERVICE_TYPE, - - /** - * This side data contains quality related information from the encoder. - * @code - * u32le quality factor of the compressed frame. Allowed range is between 1 (good) and FF_LAMBDA_MAX (bad). - * u8 picture type - * u8 error count - * u16 reserved - * u64le[error count] sum of squared differences between encoder in and output - * @endcode - */ - AV_PKT_DATA_QUALITY_STATS, - - /** - * This side data contains an integer value representing the stream index - * of a "fallback" track. A fallback track indicates an alternate - * track to use when the current track can not be decoded for some reason. - * e.g. no decoder available for codec. - */ - AV_PKT_DATA_FALLBACK_TRACK, - - /** - * This side data corresponds to the AVCPBProperties struct. - */ - AV_PKT_DATA_CPB_PROPERTIES, - - /** - * Recommends skipping the specified number of samples - * @code - * u32le number of samples to skip from start of this packet - * u32le number of samples to skip from end of this packet - * u8 reason for start skip - * u8 reason for end skip (0=padding silence, 1=convergence) - * @endcode - */ - AV_PKT_DATA_SKIP_SAMPLES, - - /** - * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that - * the packet may contain "dual mono" audio specific to Japanese DTV - * and if it is true, recommends only the selected channel to be used. - * @code - * u8 selected channels (0=main/left, 1=sub/right, 2=both) - * @endcode - */ - AV_PKT_DATA_JP_DUALMONO, - - /** - * A list of zero terminated key/value strings. There is no end marker for - * the list, so it is required to rely on the side data size to stop. - */ - AV_PKT_DATA_STRINGS_METADATA, - - /** - * Subtitle event position - * @code - * u32le x1 - * u32le y1 - * u32le x2 - * u32le y2 - * @endcode - */ - AV_PKT_DATA_SUBTITLE_POSITION, - - /** - * Data found in BlockAdditional element of matroska container. There is - * no end marker for the data, so it is required to rely on the side data - * size to recognize the end. 8 byte id (as found in BlockAddId) followed - * by data. - */ - AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, - - /** - * The optional first identifier line of a WebVTT cue. - */ - AV_PKT_DATA_WEBVTT_IDENTIFIER, - - /** - * The optional settings (rendering instructions) that immediately - * follow the timestamp specifier of a WebVTT cue. - */ - AV_PKT_DATA_WEBVTT_SETTINGS, - - /** - * A list of zero terminated key/value strings. There is no end marker for - * the list, so it is required to rely on the side data size to stop. This - * side data includes updated metadata which appeared in the stream. - */ - AV_PKT_DATA_METADATA_UPDATE, - - /** - * MPEGTS stream ID as uint8_t, this is required to pass the stream ID - * information from the demuxer to the corresponding muxer. - */ - AV_PKT_DATA_MPEGTS_STREAM_ID, - - /** - * Mastering display metadata (based on SMPTE-2086:2014). This metadata - * should be associated with a video stream and contains data in the form - * of the AVMasteringDisplayMetadata struct. - */ - AV_PKT_DATA_MASTERING_DISPLAY_METADATA, - - /** - * This side data should be associated with a video stream and corresponds - * to the AVSphericalMapping structure. - */ - AV_PKT_DATA_SPHERICAL, - - /** - * Content light level (based on CTA-861.3). This metadata should be - * associated with a video stream and contains data in the form of the - * AVContentLightMetadata struct. - */ - AV_PKT_DATA_CONTENT_LIGHT_LEVEL, - - /** - * ATSC A53 Part 4 Closed Captions. This metadata should be associated with - * a video stream. A53 CC bitstream is stored as uint8_t in AVPacketSideData.data. - * The number of bytes of CC data is AVPacketSideData.size. - */ - AV_PKT_DATA_A53_CC, - - /** - * This side data is encryption initialization data. - * The format is not part of ABI, use av_encryption_init_info_* methods to - * access. - */ - AV_PKT_DATA_ENCRYPTION_INIT_INFO, - - /** - * This side data contains encryption info for how to decrypt the packet. - * The format is not part of ABI, use av_encryption_info_* methods to access. - */ - AV_PKT_DATA_ENCRYPTION_INFO, - - /** - * Active Format Description data consisting of a single byte as specified - * in ETSI TS 101 154 using AVActiveFormatDescription enum. - */ - AV_PKT_DATA_AFD, - - /** - * Producer Reference Time data corresponding to the AVProducerReferenceTime struct, - * usually exported by some encoders (on demand through the prft flag set in the - * AVCodecContext export_side_data field). - */ - AV_PKT_DATA_PRFT, - - /** - * ICC profile data consisting of an opaque octet buffer following the - * format described by ISO 15076-1. - */ - AV_PKT_DATA_ICC_PROFILE, - - /** - * DOVI configuration - * ref: - * dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2, section 2.2 - * dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2, section 3.3 - * Tags are stored in struct AVDOVIDecoderConfigurationRecord. - */ - AV_PKT_DATA_DOVI_CONF, - - /** - * Timecode which conforms to SMPTE ST 12-1:2014. The data is an array of 4 uint32_t - * where the first uint32_t describes how many (1-3) of the other timecodes are used. - * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum() - * function in libavutil/timecode.h. - */ - AV_PKT_DATA_S12M_TIMECODE, - - /** - * HDR10+ dynamic metadata associated with a video frame. The metadata is in - * the form of the AVDynamicHDRPlus struct and contains - * information for color volume transform - application 4 of - * SMPTE 2094-40:2016 standard. - */ - AV_PKT_DATA_DYNAMIC_HDR10_PLUS, - - /** - * IAMF Mix Gain Parameter Data associated with the audio frame. This metadata - * is in the form of the AVIAMFParamDefinition struct and contains information - * defined in sections 3.6.1 and 3.8.1 of the Immersive Audio Model and - * Formats standard. - */ - AV_PKT_DATA_IAMF_MIX_GAIN_PARAM, - - /** - * IAMF Demixing Info Parameter Data associated with the audio frame. This - * metadata is in the form of the AVIAMFParamDefinition struct and contains - * information defined in sections 3.6.1 and 3.8.2 of the Immersive Audio Model - * and Formats standard. - */ - AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM, - - /** - * IAMF Recon Gain Info Parameter Data associated with the audio frame. This - * metadata is in the form of the AVIAMFParamDefinition struct and contains - * information defined in sections 3.6.1 and 3.8.3 of the Immersive Audio Model - * and Formats standard. - */ - AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM, - - /** - * Ambient viewing environment metadata, as defined by H.274. This metadata - * should be associated with a video stream and contains data in the form - * of the AVAmbientViewingEnvironment struct. - */ - AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT, - - /** - * The number of pixels to discard from the top/bottom/left/right border of the - * decoded frame to obtain the sub-rectangle intended for presentation. - * - * @code - * u32le crop_top - * u32le crop_bottom - * u32le crop_left - * u32le crop_right - * @endcode - */ - AV_PKT_DATA_FRAME_CROPPING, - - /** - * Raw LCEVC payload data, as a uint8_t array, with NAL emulation - * bytes intact. - */ - AV_PKT_DATA_LCEVC, - - /** - * This side data contains information about the reference display width(s) - * and reference viewing distance(s) as well as information about the - * corresponding reference stereo pair(s), i.e., the pair(s) of views to be - * displayed for the viewer's left and right eyes on the reference display - * at the reference viewing distance. - * The payload is the AV3DReferenceDisplaysInfo struct defined in - * libavutil/tdrdi.h. - */ - AV_PKT_DATA_3D_REFERENCE_DISPLAYS, - - /** - * Contains the last received RTCP SR (Sender Report) information - * in the form of the AVRTCPSenderReport struct. - */ - AV_PKT_DATA_RTCP_SR, - - /** - * The number of side data types. - * This is not part of the public API/ABI in the sense that it may - * change when new side data types are added. - * This must stay the last enum value. - * If its value becomes huge, some code using it - * needs to be updated as it assumes it to be smaller than other limits. - */ - AV_PKT_DATA_NB -}; - -/** - * This structure stores auxiliary information for decoding, presenting, or - * otherwise processing the coded stream. It is typically exported by demuxers - * and encoders and can be fed to decoders and muxers either in a per packet - * basis, or as global side data (applying to the entire coded stream). - * - * Global side data is handled as follows: - * - During demuxing, it may be exported through - * @ref AVCodecParameters.coded_side_data "AVStream's codec parameters", which can - * then be passed as input to decoders through the - * @ref AVCodecContext.coded_side_data "decoder context's side data", for - * initialization. - * - For muxing, it can be fed through @ref AVCodecParameters.coded_side_data - * "AVStream's codec parameters", typically the output of encoders through - * the @ref AVCodecContext.coded_side_data "encoder context's side data", for - * initialization. - * - * Packet specific side data is handled as follows: - * - During demuxing, it may be exported through @ref AVPacket.side_data - * "AVPacket's side data", which can then be passed as input to decoders. - * - For muxing, it can be fed through @ref AVPacket.side_data "AVPacket's - * side data", typically the output of encoders. - * - * Different modules may accept or export different types of side data - * depending on media type and codec. Refer to @ref AVPacketSideDataType for a - * list of defined types and where they may be found or used. - */ -typedef struct AVPacketSideData { - uint8_t *data; - size_t size; - enum AVPacketSideDataType type; -} AVPacketSideData; - -/** - * Allocate a new packet side data. - * - * @param sd pointer to an array of side data to which the side data should - * be added. *sd may be NULL, in which case the array will be - * initialized. - * @param nb_sd pointer to an integer containing the number of entries in - * the array. The integer value will be increased by 1 on success. - * @param type side data type - * @param size desired side data size - * @param flags currently unused. Must be zero - * - * @return pointer to freshly allocated side data on success, or NULL otherwise. - */ -AVPacketSideData *av_packet_side_data_new(AVPacketSideData **psd, int *pnb_sd, - enum AVPacketSideDataType type, - size_t size, int flags); - -/** - * Wrap existing data as packet side data. - * - * @param sd pointer to an array of side data to which the side data should - * be added. *sd may be NULL, in which case the array will be - * initialized - * @param nb_sd pointer to an integer containing the number of entries in - * the array. The integer value will be increased by 1 on success. - * @param type side data type - * @param data a data array. It must be allocated with the av_malloc() family - * of functions. The ownership of the data is transferred to the - * side data array on success - * @param size size of the data array - * @param flags currently unused. Must be zero - * - * @return pointer to freshly allocated side data on success, or NULL otherwise - * On failure, the side data array is unchanged and the data remains - * owned by the caller. - */ -AVPacketSideData *av_packet_side_data_add(AVPacketSideData **sd, int *nb_sd, - enum AVPacketSideDataType type, - void *data, size_t size, int flags); - -/** - * Get side information from a side data array. - * - * @param sd the array from which the side data should be fetched - * @param nb_sd value containing the number of entries in the array. - * @param type desired side information type - * - * @return pointer to side data if present or NULL otherwise - */ -const AVPacketSideData *av_packet_side_data_get(const AVPacketSideData *sd, - int nb_sd, - enum AVPacketSideDataType type); - -/** - * Remove side data of the given type from a side data array. - * - * @param sd the array from which the side data should be removed - * @param nb_sd pointer to an integer containing the number of entries in - * the array. Will be reduced by the amount of entries removed - * upon return - * @param type side information type - */ -void av_packet_side_data_remove(AVPacketSideData *sd, int *nb_sd, - enum AVPacketSideDataType type); - -/** - * Convenience function to free all the side data stored in an array, and - * the array itself. - * - * @param sd pointer to array of side data to free. Will be set to NULL - * upon return. - * @param nb_sd pointer to an integer containing the number of entries in - * the array. Will be set to 0 upon return. - */ -void av_packet_side_data_free(AVPacketSideData **sd, int *nb_sd); - -const char *av_packet_side_data_name(enum AVPacketSideDataType type); - -/** - * @} - */ - -/** - * @defgroup lavc_packet AVPacket - * - * Types and functions for working with AVPacket. - * @{ - */ - -/** - * This structure stores compressed data. It is typically exported by demuxers - * and then passed as input to decoders, or received as output from encoders and - * then passed to muxers. - * - * For video, it should typically contain one compressed frame. For audio it may - * contain several compressed frames. Encoders are allowed to output empty - * packets, with no compressed data, containing only side data - * (e.g. to update some stream parameters at the end of encoding). - * - * The semantics of data ownership depends on the buf field. - * If it is set, the packet data is dynamically allocated and is - * valid indefinitely until a call to av_packet_unref() reduces the - * reference count to 0. - * - * If the buf field is not set av_packet_ref() would make a copy instead - * of increasing the reference count. - * - * The side data is always allocated with av_malloc(), copied by - * av_packet_ref() and freed by av_packet_unref(). - * - * sizeof(AVPacket) being a part of the public ABI is deprecated. once - * av_init_packet() is removed, new packets will only be able to be allocated - * with av_packet_alloc(), and new fields may be added to the end of the struct - * with a minor bump. - * - * @see av_packet_alloc - * @see av_packet_ref - * @see av_packet_unref - */ -typedef struct AVPacket { - /** - * A reference to the reference-counted buffer where the packet data is - * stored. - * May be NULL, then the packet data is not reference-counted. - */ - AVBufferRef *buf; - /** - * Presentation timestamp in AVStream->time_base units; the time at which - * the decompressed packet will be presented to the user. - * Can be AV_NOPTS_VALUE if it is not stored in the file. - * pts MUST be larger or equal to dts as presentation cannot happen before - * decompression, unless one wants to view hex dumps. Some formats misuse - * the terms dts and pts/cts to mean something different. Such timestamps - * must be converted to true pts/dts before they are stored in AVPacket. - */ - int64_t pts; - /** - * Decompression timestamp in AVStream->time_base units; the time at which - * the packet is decompressed. - * Can be AV_NOPTS_VALUE if it is not stored in the file. - */ - int64_t dts; - uint8_t *data; - int size; - int stream_index; - /** - * A combination of AV_PKT_FLAG values - */ - int flags; - /** - * Additional packet data that can be provided by the container. - * Packet can contain several types of side information. - */ - AVPacketSideData *side_data; - int side_data_elems; - - /** - * Duration of this packet in AVStream->time_base units, 0 if unknown. - * Equals next_pts - this_pts in presentation order. - */ - int64_t duration; - - int64_t pos; ///< byte position in stream, -1 if unknown - - /** - * for some private data of the user - */ - void *opaque; - - /** - * AVBufferRef for free use by the API user. FFmpeg will never check the - * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when - * the packet is unreferenced. av_packet_copy_props() calls create a new - * reference with av_buffer_ref() for the target packet's opaque_ref field. - * - * This is unrelated to the opaque field, although it serves a similar - * purpose. - */ - AVBufferRef *opaque_ref; - - /** - * Time base of the packet's timestamps. - * In the future, this field may be set on packets output by encoders or - * demuxers, but its value will be by default ignored on input to decoders - * or muxers. - */ - AVRational time_base; -} AVPacket; - -#if FF_API_INIT_PACKET -attribute_deprecated -typedef struct AVPacketList { - AVPacket pkt; - struct AVPacketList *next; -} AVPacketList; -#endif - -#define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe -#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted -/** - * Flag is used to discard packets which are required to maintain valid - * decoder state but are not required for output and should be dropped - * after decoding. - **/ -#define AV_PKT_FLAG_DISCARD 0x0004 -/** - * The packet comes from a trusted source. - * - * Otherwise-unsafe constructs such as arbitrary pointers to data - * outside the packet may be followed. - */ -#define AV_PKT_FLAG_TRUSTED 0x0008 -/** - * Flag is used to indicate packets that contain frames that can - * be discarded by the decoder. I.e. Non-reference frames. - */ -#define AV_PKT_FLAG_DISPOSABLE 0x0010 - -enum AVSideDataParamChangeFlags { - AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004, - AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008, -}; - -/** - * Allocate an AVPacket and set its fields to default values. The resulting - * struct must be freed using av_packet_free(). - * - * @return An AVPacket filled with default values or NULL on failure. - * - * @note this only allocates the AVPacket itself, not the data buffers. Those - * must be allocated through other means such as av_new_packet. - * - * @see av_new_packet - */ -AVPacket *av_packet_alloc(void); - -/** - * Create a new packet that references the same data as src. - * - * This is a shortcut for av_packet_alloc()+av_packet_ref(). - * - * @return newly created AVPacket on success, NULL on error. - * - * @see av_packet_alloc - * @see av_packet_ref - */ -AVPacket *av_packet_clone(const AVPacket *src); - -/** - * Free the packet, if the packet is reference counted, it will be - * unreferenced first. - * - * @param pkt packet to be freed. The pointer will be set to NULL. - * @note passing NULL is a no-op. - */ -void av_packet_free(AVPacket **pkt); - -#if FF_API_INIT_PACKET -/** - * Initialize optional fields of a packet with default values. - * - * Note, this does not touch the data and size members, which have to be - * initialized separately. - * - * @param pkt packet - * - * @see av_packet_alloc - * @see av_packet_unref - * - * @deprecated This function is deprecated. Once it's removed, - sizeof(AVPacket) will not be a part of the ABI anymore. - */ -attribute_deprecated -void av_init_packet(AVPacket *pkt); -#endif - -/** - * Allocate the payload of a packet and initialize its fields with - * default values. - * - * @param pkt packet - * @param size wanted payload size - * @return 0 if OK, AVERROR_xxx otherwise - */ -int av_new_packet(AVPacket *pkt, int size); - -/** - * Reduce packet size, correctly zeroing padding - * - * @param pkt packet - * @param size new size - */ -void av_shrink_packet(AVPacket *pkt, int size); - -/** - * Increase packet size, correctly zeroing padding - * - * @param pkt packet - * @param grow_by number of bytes by which to increase the size of the packet - */ -int av_grow_packet(AVPacket *pkt, int grow_by); - -/** - * Initialize a reference-counted packet from av_malloc()ed data. - * - * @param pkt packet to be initialized. This function will set the data, size, - * and buf fields, all others are left untouched. - * @param data Data allocated by av_malloc() to be used as packet data. If this - * function returns successfully, the data is owned by the underlying AVBuffer. - * The caller may not access the data through other means. - * @param size size of data in bytes, without the padding. I.e. the full buffer - * size is assumed to be size + AV_INPUT_BUFFER_PADDING_SIZE. - * - * @return 0 on success, a negative AVERROR on error - */ -int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size); - -/** - * Allocate new information of a packet. - * - * @param pkt packet - * @param type side information type - * @param size side information size - * @return pointer to fresh allocated data or NULL otherwise - */ -uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, - size_t size); - -/** - * Wrap an existing array as a packet side data. - * - * @param pkt packet - * @param type side information type - * @param data the side data array. It must be allocated with the av_malloc() - * family of functions. The ownership of the data is transferred to - * pkt. - * @param size side information size - * @return a non-negative number on success, a negative AVERROR code on - * failure. On failure, the packet is unchanged and the data remains - * owned by the caller. - */ -int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, - uint8_t *data, size_t size); - -/** - * Shrink the already allocated side data buffer - * - * @param pkt packet - * @param type side information type - * @param size new side information size - * @return 0 on success, < 0 on failure - */ -int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, - size_t size); - -/** - * Get side information from packet. - * - * @param pkt packet - * @param type desired side information type - * @param size If supplied, *size will be set to the size of the side data - * or to zero if the desired side data is not present. - * @return pointer to data if present or NULL otherwise - */ -uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, - size_t *size); - -/** - * Pack a dictionary for use in side_data. - * - * @param dict The dictionary to pack. - * @param size pointer to store the size of the returned data - * @return pointer to data if successful, NULL otherwise - */ -uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *size); -/** - * Unpack a dictionary from side_data. - * - * @param data data from side_data - * @param size size of the data - * @param dict the metadata storage dictionary - * @return 0 on success, < 0 on failure - */ -int av_packet_unpack_dictionary(const uint8_t *data, size_t size, - AVDictionary **dict); - -/** - * Convenience function to free all the side data stored. - * All the other fields stay untouched. - * - * @param pkt packet - */ -void av_packet_free_side_data(AVPacket *pkt); - -/** - * Setup a new reference to the data described by a given packet - * - * If src is reference-counted, setup dst as a new reference to the - * buffer in src. Otherwise allocate a new buffer in dst and copy the - * data from src into it. - * - * All the other fields are copied from src. - * - * @see av_packet_unref - * - * @param dst Destination packet. Will be completely overwritten. - * @param src Source packet - * - * @return 0 on success, a negative AVERROR on error. On error, dst - * will be blank (as if returned by av_packet_alloc()). - */ -int av_packet_ref(AVPacket *dst, const AVPacket *src); - -/** - * Wipe the packet. - * - * Unreference the buffer referenced by the packet and reset the - * remaining packet fields to their default values. - * - * @param pkt The packet to be unreferenced. - */ -void av_packet_unref(AVPacket *pkt); - -/** - * Move every field in src to dst and reset src. - * - * @see av_packet_unref - * - * @param src Source packet, will be reset - * @param dst Destination packet - */ -void av_packet_move_ref(AVPacket *dst, AVPacket *src); - -/** - * Copy only "properties" fields from src to dst. - * - * Properties for the purpose of this function are all the fields - * beside those related to the packet data (buf, data, size) - * - * @param dst Destination packet - * @param src Source packet - * - * @return 0 on success AVERROR on failure. - */ -int av_packet_copy_props(AVPacket *dst, const AVPacket *src); - -/** - * Ensure the data described by a given packet is reference counted. - * - * @note This function does not ensure that the reference will be writable. - * Use av_packet_make_writable instead for that purpose. - * - * @see av_packet_ref - * @see av_packet_make_writable - * - * @param pkt packet whose data should be made reference counted. - * - * @return 0 on success, a negative AVERROR on error. On failure, the - * packet is unchanged. - */ -int av_packet_make_refcounted(AVPacket *pkt); - -/** - * Create a writable reference for the data described by a given packet, - * avoiding data copy if possible. - * - * @param pkt Packet whose data should be made writable. - * - * @return 0 on success, a negative AVERROR on failure. On failure, the - * packet is unchanged. - */ -int av_packet_make_writable(AVPacket *pkt); - -/** - * Convert valid timing fields (timestamps / durations) in a packet from one - * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be - * ignored. - * - * @param pkt packet on which the conversion will be performed - * @param tb_src source timebase, in which the timing fields in pkt are - * expressed - * @param tb_dst destination timebase, to which the timing fields will be - * converted - */ -void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst); - -/** - * Allocate an AVContainerFifo instance for AVPacket. - * - * @param flags currently unused - */ -struct AVContainerFifo *av_container_fifo_alloc_avpacket(unsigned flags); - -/** - * @} - */ - -#endif // AVCODEC_PACKET_H diff --git a/3rdparty/ffmpeg/include/libavcodec/qsv.h b/3rdparty/ffmpeg/include/libavcodec/qsv.h deleted file mode 100644 index c156b08d0737d..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/qsv.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Intel MediaSDK QSV public API - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_QSV_H -#define AVCODEC_QSV_H - -#include - -#include "libavutil/buffer.h" - -/** - * This struct is used for communicating QSV parameters between libavcodec and - * the caller. It is managed by the caller and must be assigned to - * AVCodecContext.hwaccel_context. - * - decoding: hwaccel_context must be set on return from the get_format() - * callback - * - encoding: hwaccel_context must be set before avcodec_open2() - */ -typedef struct AVQSVContext { - /** - * If non-NULL, the session to use for encoding or decoding. - * Otherwise, libavcodec will try to create an internal session. - */ - mfxSession session; - - /** - * The IO pattern to use. - */ - int iopattern; - - /** - * Extra buffers to pass to encoder or decoder initialization. - */ - mfxExtBuffer **ext_buffers; - int nb_ext_buffers; - - /** - * Encoding only. If this field is set to non-zero by the caller, libavcodec - * will create an mfxExtOpaqueSurfaceAlloc extended buffer and pass it to - * the encoder initialization. This only makes sense if iopattern is also - * set to MFX_IOPATTERN_IN_OPAQUE_MEMORY. - * - * The number of allocated opaque surfaces will be the sum of the number - * required by the encoder and the user-provided value nb_opaque_surfaces. - * The array of the opaque surfaces will be exported to the caller through - * the opaque_surfaces field. - * - * The caller must set this field to zero for oneVPL (MFX_VERSION >= 2.0) - */ - int opaque_alloc; - - /** - * Encoding only, and only if opaque_alloc is set to non-zero. Before - * calling avcodec_open2(), the caller should set this field to the number - * of extra opaque surfaces to allocate beyond what is required by the - * encoder. - * - * On return from avcodec_open2(), this field will be set by libavcodec to - * the total number of allocated opaque surfaces. - */ - int nb_opaque_surfaces; - - /** - * Encoding only, and only if opaque_alloc is set to non-zero. On return - * from avcodec_open2(), this field will be used by libavcodec to export the - * array of the allocated opaque surfaces to the caller, so they can be - * passed to other parts of the pipeline. - * - * The buffer reference exported here is owned and managed by libavcodec, - * the callers should make their own reference with av_buffer_ref() and free - * it with av_buffer_unref() when it is no longer needed. - * - * The buffer data is an nb_opaque_surfaces-sized array of mfxFrameSurface1. - */ - AVBufferRef *opaque_surfaces; - - /** - * Encoding only, and only if opaque_alloc is set to non-zero. On return - * from avcodec_open2(), this field will be set to the surface type used in - * the opaque allocation request. - */ - int opaque_alloc_type; -} AVQSVContext; - -/** - * Allocate a new context. - * - * It must be freed by the caller with av_free(). - */ -AVQSVContext *av_qsv_alloc_context(void); - -#endif /* AVCODEC_QSV_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/vdpau.h b/3rdparty/ffmpeg/include/libavcodec/vdpau.h deleted file mode 100644 index da77c5daedae2..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/vdpau.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * The Video Decode and Presentation API for UNIX (VDPAU) is used for - * hardware-accelerated decoding of MPEG-1/2, H.264 and VC-1. - * - * Copyright (C) 2008 NVIDIA - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VDPAU_H -#define AVCODEC_VDPAU_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_vdpau - * Public libavcodec VDPAU header. - */ - - -/** - * @defgroup lavc_codec_hwaccel_vdpau VDPAU Decoder and Renderer - * @ingroup lavc_codec_hwaccel - * - * VDPAU hardware acceleration has two modules - * - VDPAU decoding - * - VDPAU presentation - * - * The VDPAU decoding module parses all headers using FFmpeg - * parsing mechanisms and uses VDPAU for the actual decoding. - * - * As per the current implementation, the actual decoding - * and rendering (API calls) are done as part of the VDPAU - * presentation (vo_vdpau.c) module. - * - * @{ - */ - -#include - -#include "libavutil/avconfig.h" -#include "libavutil/attributes.h" - -#include "avcodec.h" - -struct AVCodecContext; -struct AVFrame; - -typedef int (*AVVDPAU_Render2)(struct AVCodecContext *, struct AVFrame *, - const VdpPictureInfo *, uint32_t, - const VdpBitstreamBuffer *); - -/** - * This structure is used to share data between the libavcodec library and - * the client video application. - * This structure will be allocated and stored in AVCodecContext.hwaccel_context - * by av_vdpau_bind_context(). Members can be set by the user once - * during initialization or through each AVCodecContext.get_buffer() - * function call. In any case, they must be valid prior to calling - * decoding functions. - * - * The size of this structure is not a part of the public ABI and must not - * be used outside of libavcodec. - */ -typedef struct AVVDPAUContext { - /** - * VDPAU decoder handle - * - * Set by user. - */ - VdpDecoder decoder; - - /** - * VDPAU decoder render callback - * - * Set by the user. - */ - VdpDecoderRender *render; - - AVVDPAU_Render2 render2; -} AVVDPAUContext; - -/** - * Associate a VDPAU device with a codec context for hardware acceleration. - * This function is meant to be called from the get_format() codec callback, - * or earlier. It can also be called after avcodec_flush_buffers() to change - * the underlying VDPAU device mid-stream (e.g. to recover from non-transparent - * display preemption). - * - * @note get_format() must return AV_PIX_FMT_VDPAU if this function completes - * successfully. - * - * @param avctx decoding context whose get_format() callback is invoked - * @param device VDPAU device handle to use for hardware acceleration - * @param get_proc_address VDPAU device driver - * @param flags zero of more OR'd AV_HWACCEL_FLAG_* flags - * - * @return 0 on success, an AVERROR code on failure. - */ -int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device, - VdpGetProcAddress *get_proc_address, unsigned flags); - -/** - * Gets the parameters to create an adequate VDPAU video surface for the codec - * context using VDPAU hardware decoding acceleration. - * - * @note Behavior is undefined if the context was not successfully bound to a - * VDPAU device using av_vdpau_bind_context(). - * - * @param avctx the codec context being used for decoding the stream - * @param type storage space for the VDPAU video surface chroma type - * (or NULL to ignore) - * @param width storage space for the VDPAU video surface pixel width - * (or NULL to ignore) - * @param height storage space for the VDPAU video surface pixel height - * (or NULL to ignore) - * - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_vdpau_get_surface_parameters(AVCodecContext *avctx, VdpChromaType *type, - uint32_t *width, uint32_t *height); - -/** @} */ - -#endif /* AVCODEC_VDPAU_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/version.h b/3rdparty/ffmpeg/include/libavcodec/version.h deleted file mode 100644 index 8b53586be1d4e..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/version.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VERSION_H -#define AVCODEC_VERSION_H - -/** - * @file - * @ingroup libavc - * Libavcodec version macros. - */ - -#include "libavutil/version.h" - -#include "version_major.h" - -#define LIBAVCODEC_VERSION_MINOR 11 -#define LIBAVCODEC_VERSION_MICRO 100 - -#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ - LIBAVCODEC_VERSION_MINOR, \ - LIBAVCODEC_VERSION_MICRO) -#define LIBAVCODEC_VERSION AV_VERSION(LIBAVCODEC_VERSION_MAJOR, \ - LIBAVCODEC_VERSION_MINOR, \ - LIBAVCODEC_VERSION_MICRO) -#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT - -#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) - -#endif /* AVCODEC_VERSION_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/version_major.h b/3rdparty/ffmpeg/include/libavcodec/version_major.h deleted file mode 100644 index 97e4e12065c45..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/version_major.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VERSION_MAJOR_H -#define AVCODEC_VERSION_MAJOR_H - -/** - * @file - * @ingroup libavc - * Libavcodec version macros. - */ - -#define LIBAVCODEC_VERSION_MAJOR 62 - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - * - * @note, when bumping the major version it is recommended to manually - * disable each FF_API_* in its own commit instead of disabling them all - * at once through the bump. This improves the git bisect-ability of the change. - */ - -#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 63) - -#define FF_API_V408_CODECID (LIBAVCODEC_VERSION_MAJOR < 63) -#define FF_API_CODEC_PROPS (LIBAVCODEC_VERSION_MAJOR < 63) -#define FF_API_EXR_GAMMA (LIBAVCODEC_VERSION_MAJOR < 63) - -#define FF_API_NVDEC_OLD_PIX_FMTS (LIBAVCODEC_VERSION_MAJOR < 63) - -// reminder to remove the OMX encoder on next major bump -#define FF_CODEC_OMX (LIBAVCODEC_VERSION_MAJOR < 63) -// reminder to remove Sonic Lossy/Lossless encoders on next major bump -#define FF_CODEC_SONIC_ENC (LIBAVCODEC_VERSION_MAJOR < 63) -// reminder to remove Sonic decoder on next-next major bump -#define FF_CODEC_SONIC_DEC (LIBAVCODEC_VERSION_MAJOR < 63) - -#endif /* AVCODEC_VERSION_MAJOR_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/videotoolbox.h b/3rdparty/ffmpeg/include/libavcodec/videotoolbox.h deleted file mode 100644 index d68d76e4006ae..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/videotoolbox.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Videotoolbox hardware acceleration - * - * copyright (c) 2012 Sebastien Zwickert - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_VIDEOTOOLBOX_H -#define AVCODEC_VIDEOTOOLBOX_H - -/** - * @file - * @ingroup lavc_codec_hwaccel_videotoolbox - * Public libavcodec Videotoolbox header. - */ - -/** - * @defgroup lavc_codec_hwaccel_videotoolbox VideoToolbox Decoder - * @ingroup lavc_codec_hwaccel - * - * Hardware accelerated decoding using VideoToolbox on Apple Platforms - * - * @{ - */ - -#include - -#define Picture QuickdrawPicture -#include -#undef Picture - -#include "libavcodec/avcodec.h" - -#include "libavutil/attributes.h" - -/** - * This struct holds all the information that needs to be passed - * between the caller and libavcodec for initializing Videotoolbox decoding. - * Its size is not a part of the public ABI, it must be allocated with - * av_videotoolbox_alloc_context() and freed with av_free(). - */ -typedef struct AVVideotoolboxContext { - /** - * Videotoolbox decompression session object. - */ - VTDecompressionSessionRef session; - - /** - * CVPixelBuffer Format Type that Videotoolbox will use for decoded frames. - * set by the caller. If this is set to 0, then no specific format is - * requested from the decoder, and its native format is output. - */ - OSType cv_pix_fmt_type; - - /** - * CoreMedia Format Description that Videotoolbox will use to create the decompression session. - */ - CMVideoFormatDescriptionRef cm_fmt_desc; - - /** - * CoreMedia codec type that Videotoolbox will use to create the decompression session. - */ - int cm_codec_type; -} AVVideotoolboxContext; - -/** - * @} - */ - -#endif /* AVCODEC_VIDEOTOOLBOX_H */ diff --git a/3rdparty/ffmpeg/include/libavcodec/vorbis_parser.h b/3rdparty/ffmpeg/include/libavcodec/vorbis_parser.h deleted file mode 100644 index 789932ac4922d..0000000000000 --- a/3rdparty/ffmpeg/include/libavcodec/vorbis_parser.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * A public API for Vorbis parsing - * - * Determines the duration for each packet. - */ - -#ifndef AVCODEC_VORBIS_PARSER_H -#define AVCODEC_VORBIS_PARSER_H - -#include - -typedef struct AVVorbisParseContext AVVorbisParseContext; - -/** - * Allocate and initialize the Vorbis parser using headers in the extradata. - */ -AVVorbisParseContext *av_vorbis_parse_init(const uint8_t *extradata, - int extradata_size); - -/** - * Free the parser and everything associated with it. - */ -void av_vorbis_parse_free(AVVorbisParseContext **s); - -#define VORBIS_FLAG_HEADER 0x00000001 -#define VORBIS_FLAG_COMMENT 0x00000002 -#define VORBIS_FLAG_SETUP 0x00000004 - -/** - * Get the duration for a Vorbis packet. - * - * If @p flags is @c NULL, - * special frames are considered invalid. - * - * @param s Vorbis parser context - * @param buf buffer containing a Vorbis frame - * @param buf_size size of the buffer - * @param flags flags for special frames - */ -int av_vorbis_parse_frame_flags(AVVorbisParseContext *s, const uint8_t *buf, - int buf_size, int *flags); - -/** - * Get the duration for a Vorbis packet. - * - * @param s Vorbis parser context - * @param buf buffer containing a Vorbis frame - * @param buf_size size of the buffer - */ -int av_vorbis_parse_frame(AVVorbisParseContext *s, const uint8_t *buf, - int buf_size); - -void av_vorbis_parse_reset(AVVorbisParseContext *s); - -#endif /* AVCODEC_VORBIS_PARSER_H */ diff --git a/3rdparty/ffmpeg/include/libavformat/avformat.h b/3rdparty/ffmpeg/include/libavformat/avformat.h deleted file mode 100644 index be6e532387a43..0000000000000 --- a/3rdparty/ffmpeg/include/libavformat/avformat.h +++ /dev/null @@ -1,3004 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFORMAT_AVFORMAT_H -#define AVFORMAT_AVFORMAT_H - -/** - * @file - * @ingroup libavf - * Main libavformat public API header - */ - -/** - * @defgroup libavf libavformat - * I/O and Muxing/Demuxing Library - * - * Libavformat (lavf) is a library for dealing with various media container - * formats. Its main two purposes are demuxing - i.e. splitting a media file - * into component streams, and the reverse process of muxing - writing supplied - * data in a specified container format. It also has an @ref lavf_io - * "I/O module" which supports a number of protocols for accessing the data (e.g. - * file, tcp, http and others). - * Unless you are absolutely sure you won't use libavformat's network - * capabilities, you should also call avformat_network_init(). - * - * A supported input format is described by an AVInputFormat struct, conversely - * an output format is described by AVOutputFormat. You can iterate over all - * input/output formats using the av_demuxer_iterate / av_muxer_iterate() functions. - * The protocols layer is not part of the public API, so you can only get the names - * of supported protocols with the avio_enum_protocols() function. - * - * Main lavf structure used for both muxing and demuxing is AVFormatContext, - * which exports all information about the file being read or written. As with - * most Libavformat structures, its size is not part of public ABI, so it cannot be - * allocated on stack or directly with av_malloc(). To create an - * AVFormatContext, use avformat_alloc_context() (some functions, like - * avformat_open_input() might do that for you). - * - * Most importantly an AVFormatContext contains: - * @li the @ref AVFormatContext.iformat "input" or @ref AVFormatContext.oformat - * "output" format. It is either autodetected or set by user for input; - * always set by user for output. - * @li an @ref AVFormatContext.streams "array" of AVStreams, which describe all - * elementary streams stored in the file. AVStreams are typically referred to - * using their index in this array. - * @li an @ref AVFormatContext.pb "I/O context". It is either opened by lavf or - * set by user for input, always set by user for output (unless you are dealing - * with an AVFMT_NOFILE format). - * - * @section lavf_options Passing options to (de)muxers - * It is possible to configure lavf muxers and demuxers using the @ref avoptions - * mechanism. Generic (format-independent) libavformat options are provided by - * AVFormatContext, they can be examined from a user program by calling - * av_opt_next() / av_opt_find() on an allocated AVFormatContext (or its AVClass - * from avformat_get_class()). Private (format-specific) options are provided by - * AVFormatContext.priv_data if and only if AVInputFormat.priv_class / - * AVOutputFormat.priv_class of the corresponding format struct is non-NULL. - * Further options may be provided by the @ref AVFormatContext.pb "I/O context", - * if its AVClass is non-NULL, and the protocols layer. See the discussion on - * nesting in @ref avoptions documentation to learn how to access those. - * - * @section urls - * URL strings in libavformat are made of a scheme/protocol, a ':', and a - * scheme specific string. URLs without a scheme and ':' used for local files - * are supported but deprecated. "file:" should be used for local files. - * - * It is important that the scheme string is not taken from untrusted - * sources without checks. - * - * Note that some schemes/protocols are quite powerful, allowing access to - * both local and remote files, parts of them, concatenations of them, local - * audio and video devices and so on. - * - * @{ - * - * @defgroup lavf_decoding Demuxing - * @{ - * Demuxers read a media file and split it into chunks of data (@em packets). A - * @ref AVPacket "packet" contains one or more encoded frames which belongs to a - * single elementary stream. In the lavf API this process is represented by the - * avformat_open_input() function for opening a file, av_read_frame() for - * reading a single packet and finally avformat_close_input(), which does the - * cleanup. - * - * @section lavf_decoding_open Opening a media file - * The minimum information required to open a file is its URL, which - * is passed to avformat_open_input(), as in the following code: - * @code - * const char *url = "file:in.mp3"; - * AVFormatContext *s = NULL; - * int ret = avformat_open_input(&s, url, NULL, NULL); - * if (ret < 0) - * abort(); - * @endcode - * The above code attempts to allocate an AVFormatContext, open the - * specified file (autodetecting the format) and read the header, exporting the - * information stored there into s. Some formats do not have a header or do not - * store enough information there, so it is recommended that you call the - * avformat_find_stream_info() function which tries to read and decode a few - * frames to find missing information. - * - * In some cases you might want to preallocate an AVFormatContext yourself with - * avformat_alloc_context() and do some tweaking on it before passing it to - * avformat_open_input(). One such case is when you want to use custom functions - * for reading input data instead of lavf internal I/O layer. - * To do that, create your own AVIOContext with avio_alloc_context(), passing - * your reading callbacks to it. Then set the @em pb field of your - * AVFormatContext to newly created AVIOContext. - * - * Since the format of the opened file is in general not known until after - * avformat_open_input() has returned, it is not possible to set demuxer private - * options on a preallocated context. Instead, the options should be passed to - * avformat_open_input() wrapped in an AVDictionary: - * @code - * AVDictionary *options = NULL; - * av_dict_set(&options, "video_size", "640x480", 0); - * av_dict_set(&options, "pixel_format", "rgb24", 0); - * - * if (avformat_open_input(&s, url, NULL, &options) < 0) - * abort(); - * av_dict_free(&options); - * @endcode - * This code passes the private options 'video_size' and 'pixel_format' to the - * demuxer. They would be necessary for e.g. the rawvideo demuxer, since it - * cannot know how to interpret raw video data otherwise. If the format turns - * out to be something different than raw video, those options will not be - * recognized by the demuxer and therefore will not be applied. Such unrecognized - * options are then returned in the options dictionary (recognized options are - * consumed). The calling program can handle such unrecognized options as it - * wishes, e.g. - * @code - * const AVDictionaryEntry *e; - * if ((e = av_dict_iterate(options, NULL))) { - * fprintf(stderr, "Option %s not recognized by the demuxer.\n", e->key); - * abort(); - * } - * @endcode - * - * After you have finished reading the file, you must close it with - * avformat_close_input(). It will free everything associated with the file. - * - * @section lavf_decoding_read Reading from an opened file - * Reading data from an opened AVFormatContext is done by repeatedly calling - * av_read_frame() on it. Each call, if successful, will return an AVPacket - * containing encoded data for one AVStream, identified by - * AVPacket.stream_index. This packet may be passed straight into the libavcodec - * decoding functions avcodec_send_packet() or avcodec_decode_subtitle2() if the - * caller wishes to decode the data. - * - * AVPacket.pts, AVPacket.dts and AVPacket.duration timing information will be - * set if known. They may also be unset (i.e. AV_NOPTS_VALUE for - * pts/dts, 0 for duration) if the stream does not provide them. The timing - * information will be in AVStream.time_base units, i.e. it has to be - * multiplied by the timebase to convert them to seconds. - * - * A packet returned by av_read_frame() is always reference-counted, - * i.e. AVPacket.buf is set and the user may keep it indefinitely. - * The packet must be freed with av_packet_unref() when it is no - * longer needed. - * - * @section lavf_decoding_seek Seeking - * @} - * - * @defgroup lavf_encoding Muxing - * @{ - * Muxers take encoded data in the form of @ref AVPacket "AVPackets" and write - * it into files or other output bytestreams in the specified container format. - * - * The main API functions for muxing are avformat_write_header() for writing the - * file header, av_write_frame() / av_interleaved_write_frame() for writing the - * packets and av_write_trailer() for finalizing the file. - * - * At the beginning of the muxing process, the caller must first call - * avformat_alloc_context() to create a muxing context. The caller then sets up - * the muxer by filling the various fields in this context: - * - * - The @ref AVFormatContext.oformat "oformat" field must be set to select the - * muxer that will be used. - * - Unless the format is of the AVFMT_NOFILE type, the @ref AVFormatContext.pb - * "pb" field must be set to an opened IO context, either returned from - * avio_open2() or a custom one. - * - Unless the format is of the AVFMT_NOSTREAMS type, at least one stream must - * be created with the avformat_new_stream() function. The caller should fill - * the @ref AVStream.codecpar "stream codec parameters" information, such as the - * codec @ref AVCodecParameters.codec_type "type", @ref AVCodecParameters.codec_id - * "id" and other parameters (e.g. width / height, the pixel or sample format, - * etc.) as known. The @ref AVStream.time_base "stream timebase" should - * be set to the timebase that the caller desires to use for this stream (note - * that the timebase actually used by the muxer can be different, as will be - * described later). - * - It is advised to manually initialize only the relevant fields in - * AVCodecParameters, rather than using @ref avcodec_parameters_copy() during - * remuxing: there is no guarantee that the codec context values remain valid - * for both input and output format contexts. - * - The caller may fill in additional information, such as @ref - * AVFormatContext.metadata "global" or @ref AVStream.metadata "per-stream" - * metadata, @ref AVFormatContext.chapters "chapters", @ref - * AVFormatContext.programs "programs", etc. as described in the - * AVFormatContext documentation. Whether such information will actually be - * stored in the output depends on what the container format and the muxer - * support. - * - * When the muxing context is fully set up, the caller must call - * avformat_write_header() to initialize the muxer internals and write the file - * header. Whether anything actually is written to the IO context at this step - * depends on the muxer, but this function must always be called. Any muxer - * private options must be passed in the options parameter to this function. - * - * The data is then sent to the muxer by repeatedly calling av_write_frame() or - * av_interleaved_write_frame() (consult those functions' documentation for - * discussion on the difference between them; only one of them may be used with - * a single muxing context, they should not be mixed). Do note that the timing - * information on the packets sent to the muxer must be in the corresponding - * AVStream's timebase. That timebase is set by the muxer (in the - * avformat_write_header() step) and may be different from the timebase - * requested by the caller. - * - * Once all the data has been written, the caller must call av_write_trailer() - * to flush any buffered packets and finalize the output file, then close the IO - * context (if any) and finally free the muxing context with - * avformat_free_context(). - * @} - * - * @defgroup lavf_io I/O Read/Write - * @{ - * @section lavf_io_dirlist Directory listing - * The directory listing API makes it possible to list files on remote servers. - * - * Some of possible use cases: - * - an "open file" dialog to choose files from a remote location, - * - a recursive media finder providing a player with an ability to play all - * files from a given directory. - * - * @subsection lavf_io_dirlist_open Opening a directory - * At first, a directory needs to be opened by calling avio_open_dir() - * supplied with a URL and, optionally, ::AVDictionary containing - * protocol-specific parameters. The function returns zero or positive - * integer and allocates AVIODirContext on success. - * - * @code - * AVIODirContext *ctx = NULL; - * if (avio_open_dir(&ctx, "smb://example.com/some_dir", NULL) < 0) { - * fprintf(stderr, "Cannot open directory.\n"); - * abort(); - * } - * @endcode - * - * This code tries to open a sample directory using smb protocol without - * any additional parameters. - * - * @subsection lavf_io_dirlist_read Reading entries - * Each directory's entry (i.e. file, another directory, anything else - * within ::AVIODirEntryType) is represented by AVIODirEntry. - * Reading consecutive entries from an opened AVIODirContext is done by - * repeatedly calling avio_read_dir() on it. Each call returns zero or - * positive integer if successful. Reading can be stopped right after the - * NULL entry has been read -- it means there are no entries left to be - * read. The following code reads all entries from a directory associated - * with ctx and prints their names to standard output. - * @code - * AVIODirEntry *entry = NULL; - * for (;;) { - * if (avio_read_dir(ctx, &entry) < 0) { - * fprintf(stderr, "Cannot list directory.\n"); - * abort(); - * } - * if (!entry) - * break; - * printf("%s\n", entry->name); - * avio_free_directory_entry(&entry); - * } - * @endcode - * @} - * - * @defgroup lavf_codec Demuxers - * @{ - * @defgroup lavf_codec_native Native Demuxers - * @{ - * @} - * @defgroup lavf_codec_wrappers External library wrappers - * @{ - * @} - * @} - * @defgroup lavf_protos I/O Protocols - * @{ - * @} - * @defgroup lavf_internal Internal - * @{ - * @} - * @} - */ - -#include /* FILE */ - -#include "libavcodec/codec_par.h" -#include "libavcodec/defs.h" -#include "libavcodec/packet.h" - -#include "libavutil/dict.h" -#include "libavutil/log.h" - -#include "avio.h" -#include "libavformat/version_major.h" -#ifndef HAVE_AV_CONFIG_H -/* When included as part of the ffmpeg build, only include the major version - * to avoid unnecessary rebuilds. When included externally, keep including - * the full version information. */ -#include "libavformat/version.h" - -#include "libavutil/frame.h" -#include "libavcodec/codec.h" -#endif - -struct AVFormatContext; -struct AVFrame; - -/** - * @defgroup metadata_api Public Metadata API - * @{ - * @ingroup libavf - * The metadata API allows libavformat to export metadata tags to a client - * application when demuxing. Conversely it allows a client application to - * set metadata when muxing. - * - * Metadata is exported or set as pairs of key/value strings in the 'metadata' - * fields of the AVFormatContext, AVStream, AVChapter and AVProgram structs - * using the @ref lavu_dict "AVDictionary" API. Like all strings in FFmpeg, - * metadata is assumed to be UTF-8 encoded Unicode. Note that metadata - * exported by demuxers isn't checked to be valid UTF-8 in most cases. - * - * Important concepts to keep in mind: - * - Keys are unique; there can never be 2 tags with the same key. This is - * also meant semantically, i.e., a demuxer should not knowingly produce - * several keys that are literally different but semantically identical. - * E.g., key=Author5, key=Author6. In this example, all authors must be - * placed in the same tag. - * - Metadata is flat, not hierarchical; there are no subtags. If you - * want to store, e.g., the email address of the child of producer Alice - * and actor Bob, that could have key=alice_and_bobs_childs_email_address. - * - Several modifiers can be applied to the tag name. This is done by - * appending a dash character ('-') and the modifier name in the order - * they appear in the list below -- e.g. foo-eng-sort, not foo-sort-eng. - * - language -- a tag whose value is localized for a particular language - * is appended with the ISO 639-2/B 3-letter language code. - * For example: Author-ger=Michael, Author-eng=Mike - * The original/default language is in the unqualified "Author" tag. - * A demuxer should set a default if it sets any translated tag. - * - sorting -- a modified version of a tag that should be used for - * sorting will have '-sort' appended. E.g. artist="The Beatles", - * artist-sort="Beatles, The". - * - Some protocols and demuxers support metadata updates. After a successful - * call to av_read_frame(), AVFormatContext.event_flags or AVStream.event_flags - * will be updated to indicate if metadata changed. In order to detect metadata - * changes on a stream, you need to loop through all streams in the AVFormatContext - * and check their individual event_flags. - * - * - Demuxers attempt to export metadata in a generic format, however tags - * with no generic equivalents are left as they are stored in the container. - * Follows a list of generic tag names: - * - @verbatim - album -- name of the set this work belongs to - album_artist -- main creator of the set/album, if different from artist. - e.g. "Various Artists" for compilation albums. - artist -- main creator of the work - comment -- any additional description of the file. - composer -- who composed the work, if different from artist. - copyright -- name of copyright holder. - creation_time-- date when the file was created, preferably in ISO 8601. - date -- date when the work was created, preferably in ISO 8601. - disc -- number of a subset, e.g. disc in a multi-disc collection. - encoder -- name/settings of the software/hardware that produced the file. - encoded_by -- person/group who created the file. - filename -- original name of the file. - genre -- . - language -- main language in which the work is performed, preferably - in ISO 639-2 format. Multiple languages can be specified by - separating them with commas. - performer -- artist who performed the work, if different from artist. - E.g for "Also sprach Zarathustra", artist would be "Richard - Strauss" and performer "London Philharmonic Orchestra". - publisher -- name of the label/publisher. - service_name -- name of the service in broadcasting (channel name). - service_provider -- name of the service provider in broadcasting. - title -- name of the work. - track -- number of this work in the set, can be in form current/total. - variant_bitrate -- the total bitrate of the bitrate variant that the current stream is part of - @endverbatim - * - * Look in the examples section for an application example how to use the Metadata API. - * - * @} - */ - -/* packet functions */ - - -/** - * Allocate and read the payload of a packet and initialize its - * fields with default values. - * - * @param s associated IO context - * @param pkt packet - * @param size desired payload size - * @return >0 (read size) if OK, AVERROR_xxx otherwise - */ -int av_get_packet(AVIOContext *s, AVPacket *pkt, int size); - - -/** - * Read data and append it to the current content of the AVPacket. - * If pkt->size is 0 this is identical to av_get_packet. - * Note that this uses av_grow_packet and thus involves a realloc - * which is inefficient. Thus this function should only be used - * when there is no reasonable way to know (an upper bound of) - * the final size. - * - * @param s associated IO context - * @param pkt packet - * @param size amount of data to read - * @return >0 (read size) if OK, AVERROR_xxx otherwise, previous data - * will not be lost even if an error occurs. - */ -int av_append_packet(AVIOContext *s, AVPacket *pkt, int size); - -/*************************************************/ -/* input/output formats */ - -struct AVCodecTag; - -/** - * This structure contains the data a format has to probe a file. - */ -typedef struct AVProbeData { - const char *filename; - unsigned char *buf; /**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. */ - int buf_size; /**< Size of buf except extra allocated bytes */ - const char *mime_type; /**< mime_type, when known. */ -} AVProbeData; - -#define AVPROBE_SCORE_RETRY (AVPROBE_SCORE_MAX/4) -#define AVPROBE_SCORE_STREAM_RETRY (AVPROBE_SCORE_MAX/4-1) - -#define AVPROBE_SCORE_EXTENSION 50 ///< score for file extension -#define AVPROBE_SCORE_MIME_BONUS 30 ///< score added for matching mime type -#define AVPROBE_SCORE_MAX 100 ///< maximum score - -#define AVPROBE_PADDING_SIZE 32 ///< extra allocated bytes at the end of the probe buffer - -/// Demuxer will use avio_open, no opened file should be provided by the caller. -#define AVFMT_NOFILE 0x0001 -#define AVFMT_NEEDNUMBER 0x0002 /**< Needs '%d' in filename. */ -/** - * The muxer/demuxer is experimental and should be used with caution. - * - * It will not be selected automatically, and must be specified explicitly. - */ -#define AVFMT_EXPERIMENTAL 0x0004 -#define AVFMT_SHOW_IDS 0x0008 /**< Show format stream IDs numbers. */ -#define AVFMT_GLOBALHEADER 0x0040 /**< Format wants global header. */ -#define AVFMT_NOTIMESTAMPS 0x0080 /**< Format does not need / have any timestamps. */ -#define AVFMT_GENERIC_INDEX 0x0100 /**< Use generic index building code. */ -#define AVFMT_TS_DISCONT 0x0200 /**< Format allows timestamp discontinuities. Note, muxers always require valid (monotone) timestamps */ -#define AVFMT_VARIABLE_FPS 0x0400 /**< Format allows variable fps. */ -#define AVFMT_NODIMENSIONS 0x0800 /**< Format does not need width/height */ -#define AVFMT_NOSTREAMS 0x1000 /**< Format does not require any streams */ -#define AVFMT_NOBINSEARCH 0x2000 /**< Format does not allow to fall back on binary search via read_timestamp */ -#define AVFMT_NOGENSEARCH 0x4000 /**< Format does not allow to fall back on generic search */ -#define AVFMT_NO_BYTE_SEEK 0x8000 /**< Format does not allow seeking by bytes */ -#define AVFMT_TS_NONSTRICT 0x20000 /**< Format does not require strictly - increasing timestamps, but they must - still be monotonic */ -#define AVFMT_TS_NEGATIVE 0x40000 /**< Format allows muxing negative - timestamps. If not set the timestamp - will be shifted in av_write_frame and - av_interleaved_write_frame so they - start from 0. - The user or muxer can override this through - AVFormatContext.avoid_negative_ts - */ - -#define AVFMT_SEEK_TO_PTS 0x4000000 /**< Seeking is based on PTS */ - -/** - * @addtogroup lavf_encoding - * @{ - */ -typedef struct AVOutputFormat { - const char *name; - /** - * Descriptive name for the format, meant to be more human-readable - * than name. You should use the NULL_IF_CONFIG_SMALL() macro - * to define it. - */ - const char *long_name; - const char *mime_type; - const char *extensions; /**< comma-separated filename extensions */ - /* output support */ - enum AVCodecID audio_codec; /**< default audio codec */ - enum AVCodecID video_codec; /**< default video codec */ - enum AVCodecID subtitle_codec; /**< default subtitle codec */ - /** - * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, - * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, - * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, - * AVFMT_TS_NONSTRICT, AVFMT_TS_NEGATIVE - */ - int flags; - - /** - * List of supported codec_id-codec_tag pairs, ordered by "better - * choice first". The arrays are all terminated by AV_CODEC_ID_NONE. - */ - const struct AVCodecTag * const *codec_tag; - - - const AVClass *priv_class; ///< AVClass for the private context -} AVOutputFormat; -/** - * @} - */ - -/** - * @addtogroup lavf_decoding - * @{ - */ -typedef struct AVInputFormat { - /** - * A comma separated list of short names for the format. New names - * may be appended with a minor bump. - */ - const char *name; - - /** - * Descriptive name for the format, meant to be more human-readable - * than name. You should use the NULL_IF_CONFIG_SMALL() macro - * to define it. - */ - const char *long_name; - - /** - * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, - * AVFMT_NOTIMESTAMPS, AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, - * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS. - */ - int flags; - - /** - * If extensions are defined, then no probe is done. You should - * usually not use extension format guessing because it is not - * reliable enough - */ - const char *extensions; - - const struct AVCodecTag * const *codec_tag; - - const AVClass *priv_class; ///< AVClass for the private context - - /** - * Comma-separated list of mime types. - * It is used check for matching mime types while probing. - * @see av_probe_input_format2 - */ - const char *mime_type; -} AVInputFormat; -/** - * @} - */ - -enum AVStreamParseType { - AVSTREAM_PARSE_NONE, - AVSTREAM_PARSE_FULL, /**< full parsing and repack */ - AVSTREAM_PARSE_HEADERS, /**< Only parse headers, do not repack. */ - AVSTREAM_PARSE_TIMESTAMPS, /**< full parsing and interpolation of timestamps for frames not starting on a packet boundary */ - AVSTREAM_PARSE_FULL_ONCE, /**< full parsing and repack of the first frame only, only implemented for H.264 currently */ - AVSTREAM_PARSE_FULL_RAW, /**< full parsing and repack with timestamp and position generation by parser for raw - this assumes that each packet in the file contains no demuxer level headers and - just codec level data, otherwise position generation would fail */ -}; - -typedef struct AVIndexEntry { - int64_t pos; - int64_t timestamp; /**< - * Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are available - * when seeking to this entry. That means preferable PTS on keyframe based formats. - * But demuxers can choose to store a different timestamp, if it is more convenient for the implementation or nothing better - * is known - */ -#define AVINDEX_KEYFRAME 0x0001 -#define AVINDEX_DISCARD_FRAME 0x0002 /** - * Flag is used to indicate which frame should be discarded after decoding. - */ - int flags:2; - int size:30; //Yeah, trying to keep the size of this small to reduce memory requirements (it is 24 vs. 32 bytes due to possible 8-byte alignment). - int min_distance; /**< Minimum distance between this and the previous keyframe, used to avoid unneeded searching. */ -} AVIndexEntry; - -/** - * The stream should be chosen by default among other streams of the same type, - * unless the user has explicitly specified otherwise. - */ -#define AV_DISPOSITION_DEFAULT (1 << 0) -/** - * The stream is not in original language. - * - * @note AV_DISPOSITION_ORIGINAL is the inverse of this disposition. At most - * one of them should be set in properly tagged streams. - * @note This disposition may apply to any stream type, not just audio. - */ -#define AV_DISPOSITION_DUB (1 << 1) -/** - * The stream is in original language. - * - * @see the notes for AV_DISPOSITION_DUB - */ -#define AV_DISPOSITION_ORIGINAL (1 << 2) -/** - * The stream is a commentary track. - */ -#define AV_DISPOSITION_COMMENT (1 << 3) -/** - * The stream contains song lyrics. - */ -#define AV_DISPOSITION_LYRICS (1 << 4) -/** - * The stream contains karaoke audio. - */ -#define AV_DISPOSITION_KARAOKE (1 << 5) - -/** - * Track should be used during playback by default. - * Useful for subtitle track that should be displayed - * even when user did not explicitly ask for subtitles. - */ -#define AV_DISPOSITION_FORCED (1 << 6) -/** - * The stream is intended for hearing impaired audiences. - */ -#define AV_DISPOSITION_HEARING_IMPAIRED (1 << 7) -/** - * The stream is intended for visually impaired audiences. - */ -#define AV_DISPOSITION_VISUAL_IMPAIRED (1 << 8) -/** - * The audio stream contains music and sound effects without voice. - */ -#define AV_DISPOSITION_CLEAN_EFFECTS (1 << 9) -/** - * The stream is stored in the file as an attached picture/"cover art" (e.g. - * APIC frame in ID3v2). The first (usually only) packet associated with it - * will be returned among the first few packets read from the file unless - * seeking takes place. It can also be accessed at any time in - * AVStream.attached_pic. - */ -#define AV_DISPOSITION_ATTACHED_PIC (1 << 10) -/** - * The stream is sparse, and contains thumbnail images, often corresponding - * to chapter markers. Only ever used with AV_DISPOSITION_ATTACHED_PIC. - */ -#define AV_DISPOSITION_TIMED_THUMBNAILS (1 << 11) - -/** - * The stream is intended to be mixed with a spatial audio track. For example, - * it could be used for narration or stereo music, and may remain unchanged by - * listener head rotation. - */ -#define AV_DISPOSITION_NON_DIEGETIC (1 << 12) - -/** - * The subtitle stream contains captions, providing a transcription and possibly - * a translation of audio. Typically intended for hearing-impaired audiences. - */ -#define AV_DISPOSITION_CAPTIONS (1 << 16) -/** - * The subtitle stream contains a textual description of the video content. - * Typically intended for visually-impaired audiences or for the cases where the - * video cannot be seen. - */ -#define AV_DISPOSITION_DESCRIPTIONS (1 << 17) -/** - * The subtitle stream contains time-aligned metadata that is not intended to be - * directly presented to the user. - */ -#define AV_DISPOSITION_METADATA (1 << 18) -/** - * The stream is intended to be mixed with another stream before presentation. - * Used for example to signal the stream contains an image part of a HEIF grid, - * or for mix_type=0 in mpegts. - */ -#define AV_DISPOSITION_DEPENDENT (1 << 19) -/** - * The video stream contains still images. - */ -#define AV_DISPOSITION_STILL_IMAGE (1 << 20) -/** - * The video stream contains multiple layers, e.g. stereoscopic views (cf. H.264 - * Annex G/H, or HEVC Annex F). - */ -#define AV_DISPOSITION_MULTILAYER (1 << 21) - -/** - * @return The AV_DISPOSITION_* flag corresponding to disp or a negative error - * code if disp does not correspond to a known stream disposition. - */ -int av_disposition_from_string(const char *disp); - -/** - * @param disposition a combination of AV_DISPOSITION_* values - * @return The string description corresponding to the lowest set bit in - * disposition. NULL when the lowest set bit does not correspond - * to a known disposition or when disposition is 0. - */ -const char *av_disposition_to_string(int disposition); - -/** - * Options for behavior on timestamp wrap detection. - */ -#define AV_PTS_WRAP_IGNORE 0 ///< ignore the wrap -#define AV_PTS_WRAP_ADD_OFFSET 1 ///< add the format specific offset on wrap detection -#define AV_PTS_WRAP_SUB_OFFSET -1 ///< subtract the format specific offset on wrap detection - -/** - * Stream structure. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVStream) must not be used outside libav*. - */ -typedef struct AVStream { - /** - * A class for @ref avoptions. Set on stream creation. - */ - const AVClass *av_class; - - int index; /**< stream index in AVFormatContext */ - /** - * Format-specific stream ID. - * decoding: set by libavformat - * encoding: set by the user, replaced by libavformat if left unset - */ - int id; - - /** - * Codec parameters associated with this stream. Allocated and freed by - * libavformat in avformat_new_stream() and avformat_free_context() - * respectively. - * - * - demuxing: filled by libavformat on stream creation or in - * avformat_find_stream_info() - * - muxing: filled by the caller before avformat_write_header() - */ - AVCodecParameters *codecpar; - - void *priv_data; - - /** - * This is the fundamental unit of time (in seconds) in terms - * of which frame timestamps are represented. - * - * decoding: set by libavformat - * encoding: May be set by the caller before avformat_write_header() to - * provide a hint to the muxer about the desired timebase. In - * avformat_write_header(), the muxer will overwrite this field - * with the timebase that will actually be used for the timestamps - * written into the file (which may or may not be related to the - * user-provided one, depending on the format). - */ - AVRational time_base; - - /** - * Decoding: pts of the first frame of the stream in presentation order, in stream time base. - * Only set this if you are absolutely 100% sure that the value you set - * it to really is the pts of the first frame. - * This may be undefined (AV_NOPTS_VALUE). - * @note The ASF header does NOT contain a correct start_time the ASF - * demuxer must NOT set this. - */ - int64_t start_time; - - /** - * Decoding: duration of the stream, in stream time base. - * If a source file does not specify a duration, but does specify - * a bitrate, this value will be estimated from bitrate and file size. - * - * Encoding: May be set by the caller before avformat_write_header() to - * provide a hint to the muxer about the estimated duration. - */ - int64_t duration; - - int64_t nb_frames; ///< number of frames in this stream if known or 0 - - /** - * Stream disposition - a combination of AV_DISPOSITION_* flags. - * - demuxing: set by libavformat when creating the stream or in - * avformat_find_stream_info(). - * - muxing: may be set by the caller before avformat_write_header(). - */ - int disposition; - - enum AVDiscard discard; ///< Selects which packets can be discarded at will and do not need to be demuxed. - - /** - * sample aspect ratio (0 if unknown) - * - encoding: Set by user. - * - decoding: Set by libavformat. - */ - AVRational sample_aspect_ratio; - - AVDictionary *metadata; - - /** - * Average framerate - * - * - demuxing: May be set by libavformat when creating the stream or in - * avformat_find_stream_info(). - * - muxing: May be set by the caller before avformat_write_header(). - */ - AVRational avg_frame_rate; - - /** - * For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet - * will contain the attached picture. - * - * decoding: set by libavformat, must not be modified by the caller. - * encoding: unused - */ - AVPacket attached_pic; - - /** - * Flags indicating events happening on the stream, a combination of - * AVSTREAM_EVENT_FLAG_*. - * - * - demuxing: may be set by the demuxer in avformat_open_input(), - * avformat_find_stream_info() and av_read_frame(). Flags must be cleared - * by the user once the event has been handled. - * - muxing: may be set by the user after avformat_write_header(). to - * indicate a user-triggered event. The muxer will clear the flags for - * events it has handled in av_[interleaved]_write_frame(). - */ - int event_flags; -/** - * - demuxing: the demuxer read new metadata from the file and updated - * AVStream.metadata accordingly - * - muxing: the user updated AVStream.metadata and wishes the muxer to write - * it into the file - */ -#define AVSTREAM_EVENT_FLAG_METADATA_UPDATED 0x0001 -/** - * - demuxing: new packets for this stream were read from the file. This - * event is informational only and does not guarantee that new packets - * for this stream will necessarily be returned from av_read_frame(). - */ -#define AVSTREAM_EVENT_FLAG_NEW_PACKETS (1 << 1) - - /** - * Real base framerate of the stream. - * This is the lowest framerate with which all timestamps can be - * represented accurately (it is the least common multiple of all - * framerates in the stream). Note, this value is just a guess! - * For example, if the time base is 1/90000 and all frames have either - * approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1. - */ - AVRational r_frame_rate; - - /** - * Number of bits in timestamps. Used for wrapping control. - * - * - demuxing: set by libavformat - * - muxing: set by libavformat - * - */ - int pts_wrap_bits; -} AVStream; - -/** - * AVStreamGroupTileGrid holds information on how to combine several - * independent images on a single canvas for presentation. - * - * The output should be a @ref AVStreamGroupTileGrid.background "background" - * colored @ref AVStreamGroupTileGrid.coded_width "coded_width" x - * @ref AVStreamGroupTileGrid.coded_height "coded_height" canvas where a - * @ref AVStreamGroupTileGrid.nb_tiles "nb_tiles" amount of tiles are placed in - * the order they appear in the @ref AVStreamGroupTileGrid.offsets "offsets" - * array, at the exact offset described for them. In particular, if two or more - * tiles overlap, the image with higher index in the - * @ref AVStreamGroupTileGrid.offsets "offsets" array takes priority. - * Note that a single image may be used multiple times, i.e. multiple entries - * in @ref AVStreamGroupTileGrid.offsets "offsets" may have the same value of - * idx. - * - * The following is an example of a simple grid with 3 rows and 4 columns: - * - * +---+---+---+---+ - * | 0 | 1 | 2 | 3 | - * +---+---+---+---+ - * | 4 | 5 | 6 | 7 | - * +---+---+---+---+ - * | 8 | 9 |10 |11 | - * +---+---+---+---+ - * - * Assuming all tiles have a dimension of 512x512, the - * @ref AVStreamGroupTileGrid.offsets "offset" of the topleft pixel of - * the first @ref AVStreamGroup.streams "stream" in the group is "0,0", the - * @ref AVStreamGroupTileGrid.offsets "offset" of the topleft pixel of - * the second @ref AVStreamGroup.streams "stream" in the group is "512,0", the - * @ref AVStreamGroupTileGrid.offsets "offset" of the topleft pixel of - * the fifth @ref AVStreamGroup.streams "stream" in the group is "0,512", the - * @ref AVStreamGroupTileGrid.offsets "offset", of the topleft pixel of - * the sixth @ref AVStreamGroup.streams "stream" in the group is "512,512", - * etc. - * - * The following is an example of a canvas with overlapping tiles: - * - * +-----------+ - * | %%%%% | - * |***%%3%%@@@| - * |**0%%%%%2@@| - * |***##1@@@@@| - * | ##### | - * +-----------+ - * - * Assuming a canvas with size 1024x1024 and all tiles with a dimension of - * 512x512, a possible @ref AVStreamGroupTileGrid.offsets "offset" for the - * topleft pixel of the first @ref AVStreamGroup.streams "stream" in the group - * would be 0x256, the @ref AVStreamGroupTileGrid.offsets "offset" for the - * topleft pixel of the second @ref AVStreamGroup.streams "stream" in the group - * would be 256x512, the @ref AVStreamGroupTileGrid.offsets "offset" for the - * topleft pixel of the third @ref AVStreamGroup.streams "stream" in the group - * would be 512x256, and the @ref AVStreamGroupTileGrid.offsets "offset" for - * the topleft pixel of the fourth @ref AVStreamGroup.streams "stream" in the - * group would be 256x0. - * - * sizeof(AVStreamGroupTileGrid) is not a part of the ABI and may only be - * allocated by avformat_stream_group_create(). - */ -typedef struct AVStreamGroupTileGrid { - const AVClass *av_class; - - /** - * Amount of tiles in the grid. - * - * Must be > 0. - */ - unsigned int nb_tiles; - - /** - * Width of the canvas. - * - * Must be > 0. - */ - int coded_width; - /** - * Width of the canvas. - * - * Must be > 0. - */ - int coded_height; - - /** - * An @ref nb_tiles sized array of offsets in pixels from the topleft edge - * of the canvas, indicating where each stream should be placed. - * It must be allocated with the av_malloc() family of functions. - * - * - demuxing: set by libavformat, must not be modified by the caller. - * - muxing: set by the caller before avformat_write_header(). - * - * Freed by libavformat in avformat_free_context(). - */ - struct { - /** - * Index of the stream in the group this tile references. - * - * Must be < @ref AVStreamGroup.nb_streams "nb_streams". - */ - unsigned int idx; - /** - * Offset in pixels from the left edge of the canvas where the tile - * should be placed. - */ - int horizontal; - /** - * Offset in pixels from the top edge of the canvas where the tile - * should be placed. - */ - int vertical; - } *offsets; - - /** - * The pixel value per channel in RGBA format used if no pixel of any tile - * is located at a particular pixel location. - * - * @see av_image_fill_color(). - * @see av_parse_color(). - */ - uint8_t background[4]; - - /** - * Offset in pixels from the left edge of the canvas where the actual image - * meant for presentation starts. - * - * This field must be >= 0 and < @ref coded_width. - */ - int horizontal_offset; - /** - * Offset in pixels from the top edge of the canvas where the actual image - * meant for presentation starts. - * - * This field must be >= 0 and < @ref coded_height. - */ - int vertical_offset; - - /** - * Width of the final image for presentation. - * - * Must be > 0 and <= (@ref coded_width - @ref horizontal_offset). - * When it's not equal to (@ref coded_width - @ref horizontal_offset), the - * result of (@ref coded_width - width - @ref horizontal_offset) is the - * amount amount of pixels to be cropped from the right edge of the - * final image before presentation. - */ - int width; - /** - * Height of the final image for presentation. - * - * Must be > 0 and <= (@ref coded_height - @ref vertical_offset). - * When it's not equal to (@ref coded_height - @ref vertical_offset), the - * result of (@ref coded_height - height - @ref vertical_offset) is the - * amount amount of pixels to be cropped from the bottom edge of the - * final image before presentation. - */ - int height; - - /** - * Additional data associated with the grid. - * - * Should be allocated with av_packet_side_data_new() or - * av_packet_side_data_add(), and will be freed by avformat_free_context(). - */ - AVPacketSideData *coded_side_data; - - /** - * Amount of entries in @ref coded_side_data. - */ - int nb_coded_side_data; -} AVStreamGroupTileGrid; - -/** - * AVStreamGroupLCEVC is meant to define the relation between video streams - * and a data stream containing LCEVC enhancement layer NALUs. - * - * No more than one stream of @ref AVCodecParameters.codec_type "codec_type" - * AVMEDIA_TYPE_DATA shall be present, and it must be of - * @ref AVCodecParameters.codec_id "codec_id" AV_CODEC_ID_LCEVC. - */ -typedef struct AVStreamGroupLCEVC { - const AVClass *av_class; - - /** - * Index of the LCEVC data stream in AVStreamGroup. - */ - unsigned int lcevc_index; - /** - * Width of the final stream for presentation. - */ - int width; - /** - * Height of the final image for presentation. - */ - int height; -} AVStreamGroupLCEVC; - -enum AVStreamGroupParamsType { - AV_STREAM_GROUP_PARAMS_NONE, - AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT, - AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION, - AV_STREAM_GROUP_PARAMS_TILE_GRID, - AV_STREAM_GROUP_PARAMS_LCEVC, -}; - -struct AVIAMFAudioElement; -struct AVIAMFMixPresentation; - -typedef struct AVStreamGroup { - /** - * A class for @ref avoptions. Set by avformat_stream_group_create(). - */ - const AVClass *av_class; - - void *priv_data; - - /** - * Group index in AVFormatContext. - */ - unsigned int index; - - /** - * Group type-specific group ID. - * - * decoding: set by libavformat - * encoding: may set by the user - */ - int64_t id; - - /** - * Group type - * - * decoding: set by libavformat on group creation - * encoding: set by avformat_stream_group_create() - */ - enum AVStreamGroupParamsType type; - - /** - * Group type-specific parameters - */ - union { - struct AVIAMFAudioElement *iamf_audio_element; - struct AVIAMFMixPresentation *iamf_mix_presentation; - struct AVStreamGroupTileGrid *tile_grid; - struct AVStreamGroupLCEVC *lcevc; - } params; - - /** - * Metadata that applies to the whole group. - * - * - demuxing: set by libavformat on group creation - * - muxing: may be set by the caller before avformat_write_header() - * - * Freed by libavformat in avformat_free_context(). - */ - AVDictionary *metadata; - - /** - * Number of elements in AVStreamGroup.streams. - * - * Set by avformat_stream_group_add_stream() must not be modified by any other code. - */ - unsigned int nb_streams; - - /** - * A list of streams in the group. New entries are created with - * avformat_stream_group_add_stream(). - * - * - demuxing: entries are created by libavformat on group creation. - * If AVFMTCTX_NOHEADER is set in ctx_flags, then new entries may also - * appear in av_read_frame(). - * - muxing: entries are created by the user before avformat_write_header(). - * - * Freed by libavformat in avformat_free_context(). - */ - AVStream **streams; - - /** - * Stream group disposition - a combination of AV_DISPOSITION_* flags. - * This field currently applies to all defined AVStreamGroupParamsType. - * - * - demuxing: set by libavformat when creating the group or in - * avformat_find_stream_info(). - * - muxing: may be set by the caller before avformat_write_header(). - */ - int disposition; -} AVStreamGroup; - -struct AVCodecParserContext *av_stream_get_parser(const AVStream *s); - -#define AV_PROGRAM_RUNNING 1 - -/** - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVProgram) must not be used outside libav*. - */ -typedef struct AVProgram { - int id; - int flags; - enum AVDiscard discard; ///< selects which program to discard and which to feed to the caller - unsigned int *stream_index; - unsigned int nb_stream_indexes; - AVDictionary *metadata; - - int program_num; - int pmt_pid; - int pcr_pid; - int pmt_version; - - /***************************************************************** - * All fields below this line are not part of the public API. They - * may not be used outside of libavformat and can be changed and - * removed at will. - * New public fields should be added right above. - ***************************************************************** - */ - int64_t start_time; - int64_t end_time; - - int64_t pts_wrap_reference; ///< reference dts for wrap detection - int pts_wrap_behavior; ///< behavior on wrap detection -} AVProgram; - -#define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present - (streams are added dynamically) */ -#define AVFMTCTX_UNSEEKABLE 0x0002 /**< signal that the stream is definitely - not seekable, and attempts to call the - seek function will fail. For some - network protocols (e.g. HLS), this can - change dynamically at runtime. */ - -typedef struct AVChapter { - int64_t id; ///< unique ID to identify the chapter - AVRational time_base; ///< time base in which the start/end timestamps are specified - int64_t start, end; ///< chapter start/end time in time_base units - AVDictionary *metadata; -} AVChapter; - - -/** - * Callback used by devices to communicate with application. - */ -typedef int (*av_format_control_message)(struct AVFormatContext *s, int type, - void *data, size_t data_size); - -typedef int (*AVOpenCallback)(struct AVFormatContext *s, AVIOContext **pb, const char *url, int flags, - const AVIOInterruptCB *int_cb, AVDictionary **options); - -/** - * The duration of a video can be estimated through various ways, and this enum can be used - * to know how the duration was estimated. - */ -enum AVDurationEstimationMethod { - AVFMT_DURATION_FROM_PTS, ///< Duration accurately estimated from PTSes - AVFMT_DURATION_FROM_STREAM, ///< Duration estimated from a stream with a known duration - AVFMT_DURATION_FROM_BITRATE ///< Duration estimated from bitrate (less accurate) -}; - -/** - * Format I/O context. - * New fields can be added to the end with minor version bumps. - * Removal, reordering and changes to existing fields require a major - * version bump. - * sizeof(AVFormatContext) must not be used outside libav*, use - * avformat_alloc_context() to create an AVFormatContext. - * - * Fields can be accessed through AVOptions (av_opt*), - * the name string used matches the associated command line parameter name and - * can be found in libavformat/options_table.h. - * The AVOption/command line parameter names differ in some cases from the C - * structure field names for historic reasons or brevity. - */ -typedef struct AVFormatContext { - /** - * A class for logging and @ref avoptions. Set by avformat_alloc_context(). - * Exports (de)muxer private options if they exist. - */ - const AVClass *av_class; - - /** - * The input container format. - * - * Demuxing only, set by avformat_open_input(). - */ - const struct AVInputFormat *iformat; - - /** - * The output container format. - * - * Muxing only, must be set by the caller before avformat_write_header(). - */ - const struct AVOutputFormat *oformat; - - /** - * Format private data. This is an AVOptions-enabled struct - * if and only if iformat/oformat.priv_class is not NULL. - * - * - muxing: set by avformat_write_header() - * - demuxing: set by avformat_open_input() - */ - void *priv_data; - - /** - * I/O context. - * - * - demuxing: either set by the user before avformat_open_input() (then - * the user must close it manually) or set by avformat_open_input(). - * - muxing: set by the user before avformat_write_header(). The caller must - * take care of closing / freeing the IO context. - * - * Do NOT set this field if AVFMT_NOFILE flag is set in - * iformat/oformat.flags. In such a case, the (de)muxer will handle - * I/O in some other way and this field will be NULL. - */ - AVIOContext *pb; - - /* stream info */ - /** - * Flags signalling stream properties. A combination of AVFMTCTX_*. - * Set by libavformat. - */ - int ctx_flags; - - /** - * Number of elements in AVFormatContext.streams. - * - * Set by avformat_new_stream(), must not be modified by any other code. - */ - unsigned int nb_streams; - /** - * A list of all streams in the file. New streams are created with - * avformat_new_stream(). - * - * - demuxing: streams are created by libavformat in avformat_open_input(). - * If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams may also - * appear in av_read_frame(). - * - muxing: streams are created by the user before avformat_write_header(). - * - * Freed by libavformat in avformat_free_context(). - */ - AVStream **streams; - - /** - * Number of elements in AVFormatContext.stream_groups. - * - * Set by avformat_stream_group_create(), must not be modified by any other code. - */ - unsigned int nb_stream_groups; - /** - * A list of all stream groups in the file. New groups are created with - * avformat_stream_group_create(), and filled with avformat_stream_group_add_stream(). - * - * - demuxing: groups may be created by libavformat in avformat_open_input(). - * If AVFMTCTX_NOHEADER is set in ctx_flags, then new groups may also - * appear in av_read_frame(). - * - muxing: groups may be created by the user before avformat_write_header(). - * - * Freed by libavformat in avformat_free_context(). - */ - AVStreamGroup **stream_groups; - - /** - * Number of chapters in AVChapter array. - * When muxing, chapters are normally written in the file header, - * so nb_chapters should normally be initialized before write_header - * is called. Some muxers (e.g. mov and mkv) can also write chapters - * in the trailer. To write chapters in the trailer, nb_chapters - * must be zero when write_header is called and non-zero when - * write_trailer is called. - * - muxing: set by user - * - demuxing: set by libavformat - */ - unsigned int nb_chapters; - AVChapter **chapters; - - /** - * input or output URL. Unlike the old filename field, this field has no - * length restriction. - * - * - demuxing: set by avformat_open_input(), initialized to an empty - * string if url parameter was NULL in avformat_open_input(). - * - muxing: may be set by the caller before calling avformat_write_header() - * (or avformat_init_output() if that is called first) to a string - * which is freeable by av_free(). Set to an empty string if it - * was NULL in avformat_init_output(). - * - * Freed by libavformat in avformat_free_context(). - */ - char *url; - - /** - * Position of the first frame of the component, in - * AV_TIME_BASE fractional seconds. NEVER set this value directly: - * It is deduced from the AVStream values. - * - * Demuxing only, set by libavformat. - */ - int64_t start_time; - - /** - * Duration of the stream, in AV_TIME_BASE fractional - * seconds. Only set this value if you know none of the individual stream - * durations and also do not set any of them. This is deduced from the - * AVStream values if not set. - * - * Demuxing only, set by libavformat. - */ - int64_t duration; - - /** - * Total stream bitrate in bit/s, 0 if not - * available. Never set it directly if the file_size and the - * duration are known as FFmpeg can compute it automatically. - */ - int64_t bit_rate; - - unsigned int packet_size; - int max_delay; - - /** - * Flags modifying the (de)muxer behaviour. A combination of AVFMT_FLAG_*. - * Set by the user before avformat_open_input() / avformat_write_header(). - */ - int flags; -#define AVFMT_FLAG_GENPTS 0x0001 ///< Generate missing pts even if it requires parsing future frames. -#define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index. -#define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input. -#define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS -#define AVFMT_FLAG_NOFILLIN 0x0010 ///< Do not infer any values from other values, just return what is stored in the container -#define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the filling code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled -#define AVFMT_FLAG_NOBUFFER 0x0040 ///< Do not buffer frames when possible -#define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it. -#define AVFMT_FLAG_DISCARD_CORRUPT 0x0100 ///< Discard frames marked corrupted -#define AVFMT_FLAG_FLUSH_PACKETS 0x0200 ///< Flush the AVIOContext every packet. -/** - * When muxing, try to avoid writing any random/volatile data to the output. - * This includes any random IDs, real-time timestamps/dates, muxer version, etc. - * - * This flag is mainly intended for testing. - */ -#define AVFMT_FLAG_BITEXACT 0x0400 -#define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down) -#define AVFMT_FLAG_FAST_SEEK 0x80000 ///< Enable fast, but inaccurate seeks for some formats -#define AVFMT_FLAG_AUTO_BSF 0x200000 ///< Add bitstream filters as requested by the muxer - - /** - * Maximum number of bytes read from input in order to determine stream - * properties. Used when reading the global header and in - * avformat_find_stream_info(). - * - * Demuxing only, set by the caller before avformat_open_input(). - * - * @note this is \e not used for determining the \ref AVInputFormat - * "input format" - * @see format_probesize - */ - int64_t probesize; - - /** - * Maximum duration (in AV_TIME_BASE units) of the data read - * from input in avformat_find_stream_info(). - * Demuxing only, set by the caller before avformat_find_stream_info(). - * Can be set to 0 to let avformat choose using a heuristic. - */ - int64_t max_analyze_duration; - - const uint8_t *key; - int keylen; - - unsigned int nb_programs; - AVProgram **programs; - - /** - * Forced video codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID video_codec_id; - - /** - * Forced audio codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID audio_codec_id; - - /** - * Forced subtitle codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID subtitle_codec_id; - - /** - * Forced Data codec_id. - * Demuxing: Set by user. - */ - enum AVCodecID data_codec_id; - - /** - * Metadata that applies to the whole file. - * - * - demuxing: set by libavformat in avformat_open_input() - * - muxing: may be set by the caller before avformat_write_header() - * - * Freed by libavformat in avformat_free_context(). - */ - AVDictionary *metadata; - - /** - * Start time of the stream in real world time, in microseconds - * since the Unix epoch (00:00 1st January 1970). That is, pts=0 in the - * stream was captured at this real world time. - * - muxing: Set by the caller before avformat_write_header(). If set to - * either 0 or AV_NOPTS_VALUE, then the current wall-time will - * be used. - * - demuxing: Set by libavformat. AV_NOPTS_VALUE if unknown. Note that - * the value may become known after some number of frames - * have been received. - */ - int64_t start_time_realtime; - - /** - * The number of frames used for determining the framerate in - * avformat_find_stream_info(). - * Demuxing only, set by the caller before avformat_find_stream_info(). - */ - int fps_probe_size; - - /** - * Error recognition; higher values will detect more errors but may - * misdetect some more or less valid parts as errors. - * Demuxing only, set by the caller before avformat_open_input(). - */ - int error_recognition; - - /** - * Custom interrupt callbacks for the I/O layer. - * - * demuxing: set by the user before avformat_open_input(). - * muxing: set by the user before avformat_write_header() - * (mainly useful for AVFMT_NOFILE formats). The callback - * should also be passed to avio_open2() if it's used to - * open the file. - */ - AVIOInterruptCB interrupt_callback; - - /** - * Flags to enable debugging. - */ - int debug; -#define FF_FDEBUG_TS 0x0001 - - /** - * The maximum number of streams. - * - encoding: unused - * - decoding: set by user - */ - int max_streams; - - /** - * Maximum amount of memory in bytes to use for the index of each stream. - * If the index exceeds this size, entries will be discarded as - * needed to maintain a smaller size. This can lead to slower or less - * accurate seeking (depends on demuxer). - * Demuxers for which a full in-memory index is mandatory will ignore - * this. - * - muxing: unused - * - demuxing: set by user - */ - unsigned int max_index_size; - - /** - * Maximum amount of memory in bytes to use for buffering frames - * obtained from realtime capture devices. - */ - unsigned int max_picture_buffer; - - /** - * Maximum buffering duration for interleaving. - * - * To ensure all the streams are interleaved correctly, - * av_interleaved_write_frame() will wait until it has at least one packet - * for each stream before actually writing any packets to the output file. - * When some streams are "sparse" (i.e. there are large gaps between - * successive packets), this can result in excessive buffering. - * - * This field specifies the maximum difference between the timestamps of the - * first and the last packet in the muxing queue, above which libavformat - * will output a packet regardless of whether it has queued a packet for all - * the streams. - * - * Muxing only, set by the caller before avformat_write_header(). - */ - int64_t max_interleave_delta; - - /** - * Maximum number of packets to read while waiting for the first timestamp. - * Decoding only. - */ - int max_ts_probe; - - /** - * Max chunk time in microseconds. - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user - * - decoding: unused - */ - int max_chunk_duration; - - /** - * Max chunk size in bytes - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user - * - decoding: unused - */ - int max_chunk_size; - - /** - * Maximum number of packets that can be probed - * - encoding: unused - * - decoding: set by user - */ - int max_probe_packets; - - /** - * Allow non-standard and experimental extension - * @see AVCodecContext.strict_std_compliance - */ - int strict_std_compliance; - - /** - * Flags indicating events happening on the file, a combination of - * AVFMT_EVENT_FLAG_*. - * - * - demuxing: may be set by the demuxer in avformat_open_input(), - * avformat_find_stream_info() and av_read_frame(). Flags must be cleared - * by the user once the event has been handled. - * - muxing: may be set by the user after avformat_write_header() to - * indicate a user-triggered event. The muxer will clear the flags for - * events it has handled in av_[interleaved]_write_frame(). - */ - int event_flags; -/** - * - demuxing: the demuxer read new metadata from the file and updated - * AVFormatContext.metadata accordingly - * - muxing: the user updated AVFormatContext.metadata and wishes the muxer to - * write it into the file - */ -#define AVFMT_EVENT_FLAG_METADATA_UPDATED 0x0001 - - - /** - * Avoid negative timestamps during muxing. - * Any value of the AVFMT_AVOID_NEG_TS_* constants. - * Note, this works better when using av_interleaved_write_frame(). - * - muxing: Set by user - * - demuxing: unused - */ - int avoid_negative_ts; -#define AVFMT_AVOID_NEG_TS_AUTO -1 ///< Enabled when required by target format -#define AVFMT_AVOID_NEG_TS_DISABLED 0 ///< Do not shift timestamps even when they are negative. -#define AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE 1 ///< Shift timestamps so they are non negative -#define AVFMT_AVOID_NEG_TS_MAKE_ZERO 2 ///< Shift timestamps so that they start at 0 - - /** - * Audio preload in microseconds. - * Note, not all formats support this and unpredictable things may happen if it is used when not supported. - * - encoding: Set by user - * - decoding: unused - */ - int audio_preload; - - /** - * forces the use of wallclock timestamps as pts/dts of packets - * This has undefined results in the presence of B frames. - * - encoding: unused - * - decoding: Set by user - */ - int use_wallclock_as_timestamps; - - /** - * Skip duration calculation in estimate_timings_from_pts. - * - encoding: unused - * - decoding: set by user - * - * @see duration_probesize - */ - int skip_estimate_duration_from_pts; - - /** - * avio flags, used to force AVIO_FLAG_DIRECT. - * - encoding: unused - * - decoding: Set by user - */ - int avio_flags; - - /** - * The duration field can be estimated through various ways, and this field can be used - * to know how the duration was estimated. - * - encoding: unused - * - decoding: Read by user - */ - enum AVDurationEstimationMethod duration_estimation_method; - - /** - * Skip initial bytes when opening stream - * - encoding: unused - * - decoding: Set by user - */ - int64_t skip_initial_bytes; - - /** - * Correct single timestamp overflows - * - encoding: unused - * - decoding: Set by user - */ - unsigned int correct_ts_overflow; - - /** - * Force seeking to any (also non key) frames. - * - encoding: unused - * - decoding: Set by user - */ - int seek2any; - - /** - * Flush the I/O context after each packet. - * - encoding: Set by user - * - decoding: unused - */ - int flush_packets; - - /** - * format probing score. - * The maximal score is AVPROBE_SCORE_MAX, its set when the demuxer probes - * the format. - * - encoding: unused - * - decoding: set by avformat, read by user - */ - int probe_score; - - /** - * Maximum number of bytes read from input in order to identify the - * \ref AVInputFormat "input format". Only used when the format is not set - * explicitly by the caller. - * - * Demuxing only, set by the caller before avformat_open_input(). - * - * @see probesize - */ - int format_probesize; - - /** - * ',' separated list of allowed decoders. - * If NULL then all are allowed - * - encoding: unused - * - decoding: set by user - */ - char *codec_whitelist; - - /** - * ',' separated list of allowed demuxers. - * If NULL then all are allowed - * - encoding: unused - * - decoding: set by user - */ - char *format_whitelist; - - /** - * ',' separated list of allowed protocols. - * - encoding: unused - * - decoding: set by user - */ - char *protocol_whitelist; - - /** - * ',' separated list of disallowed protocols. - * - encoding: unused - * - decoding: set by user - */ - char *protocol_blacklist; - - /** - * IO repositioned flag. - * This is set by avformat when the underlying IO context read pointer - * is repositioned, for example when doing byte based seeking. - * Demuxers can use the flag to detect such changes. - */ - int io_repositioned; - - /** - * Forced video codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - const struct AVCodec *video_codec; - - /** - * Forced audio codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - const struct AVCodec *audio_codec; - - /** - * Forced subtitle codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - const struct AVCodec *subtitle_codec; - - /** - * Forced data codec. - * This allows forcing a specific decoder, even when there are multiple with - * the same codec_id. - * Demuxing: Set by user - */ - const struct AVCodec *data_codec; - - /** - * Number of bytes to be written as padding in a metadata header. - * Demuxing: Unused. - * Muxing: Set by user. - */ - int metadata_header_padding; - - /** - * User data. - * This is a place for some private data of the user. - */ - void *opaque; - - /** - * Callback used by devices to communicate with application. - */ - av_format_control_message control_message_cb; - - /** - * Output timestamp offset, in microseconds. - * Muxing: set by user - */ - int64_t output_ts_offset; - - /** - * dump format separator. - * can be ", " or "\n " or anything else - * - muxing: Set by user. - * - demuxing: Set by user. - */ - uint8_t *dump_separator; - - /** - * A callback for opening new IO streams. - * - * Whenever a muxer or a demuxer needs to open an IO stream (typically from - * avformat_open_input() for demuxers, but for certain formats can happen at - * other times as well), it will call this callback to obtain an IO context. - * - * @param s the format context - * @param pb on success, the newly opened IO context should be returned here - * @param url the url to open - * @param flags a combination of AVIO_FLAG_* - * @param options a dictionary of additional options, with the same - * semantics as in avio_open2() - * @return 0 on success, a negative AVERROR code on failure - * - * @note Certain muxers and demuxers do nesting, i.e. they open one or more - * additional internal format contexts. Thus the AVFormatContext pointer - * passed to this callback may be different from the one facing the caller. - * It will, however, have the same 'opaque' field. - */ - int (*io_open)(struct AVFormatContext *s, AVIOContext **pb, const char *url, - int flags, AVDictionary **options); - - /** - * A callback for closing the streams opened with AVFormatContext.io_open(). - * - * @param s the format context - * @param pb IO context to be closed and freed - * @return 0 on success, a negative AVERROR code on failure - */ - int (*io_close2)(struct AVFormatContext *s, AVIOContext *pb); - - /** - * Maximum number of bytes read from input in order to determine stream durations - * when using estimate_timings_from_pts in avformat_find_stream_info(). - * Demuxing only, set by the caller before avformat_find_stream_info(). - * Can be set to 0 to let avformat choose using a heuristic. - * - * @see skip_estimate_duration_from_pts - */ - int64_t duration_probesize; -} AVFormatContext; - -/** - * @defgroup lavf_core Core functions - * @ingroup libavf - * - * Functions for querying libavformat capabilities, allocating core structures, - * etc. - * @{ - */ - -/** - * Return the LIBAVFORMAT_VERSION_INT constant. - */ -unsigned avformat_version(void); - -/** - * Return the libavformat build-time configuration. - */ -const char *avformat_configuration(void); - -/** - * Return the libavformat license. - */ -const char *avformat_license(void); - -/** - * Do global initialization of network libraries. This is optional, - * and not recommended anymore. - * - * This functions only exists to work around thread-safety issues - * with older GnuTLS or OpenSSL libraries. If libavformat is linked - * to newer versions of those libraries, or if you do not use them, - * calling this function is unnecessary. Otherwise, you need to call - * this function before any other threads using them are started. - * - * This function will be deprecated once support for older GnuTLS and - * OpenSSL libraries is removed, and this function has no purpose - * anymore. - */ -int avformat_network_init(void); - -/** - * Undo the initialization done by avformat_network_init. Call it only - * once for each time you called avformat_network_init. - */ -int avformat_network_deinit(void); - -/** - * Iterate over all registered muxers. - * - * @param opaque a pointer where libavformat will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the next registered muxer or NULL when the iteration is - * finished - */ -const AVOutputFormat *av_muxer_iterate(void **opaque); - -/** - * Iterate over all registered demuxers. - * - * @param opaque a pointer where libavformat will store the iteration state. - * Must point to NULL to start the iteration. - * - * @return the next registered demuxer or NULL when the iteration is - * finished - */ -const AVInputFormat *av_demuxer_iterate(void **opaque); - -/** - * Allocate an AVFormatContext. - * avformat_free_context() can be used to free the context and everything - * allocated by the framework within it. - */ -AVFormatContext *avformat_alloc_context(void); - -/** - * Free an AVFormatContext and all its streams. - * @param s context to free - */ -void avformat_free_context(AVFormatContext *s); - -/** - * Get the AVClass for AVFormatContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *avformat_get_class(void); - -/** - * Get the AVClass for AVStream. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *av_stream_get_class(void); - -/** - * Get the AVClass for AVStreamGroup. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *av_stream_group_get_class(void); - -/** - * @return a string identifying the stream group type, or NULL if unknown - */ -const char *avformat_stream_group_name(enum AVStreamGroupParamsType type); - -/** - * Add a new empty stream group to a media file. - * - * When demuxing, it may be called by the demuxer in read_header(). If the - * flag AVFMTCTX_NOHEADER is set in s.ctx_flags, then it may also - * be called in read_packet(). - * - * When muxing, may be called by the user before avformat_write_header(). - * - * User is required to call avformat_free_context() to clean up the allocation - * by avformat_stream_group_create(). - * - * New streams can be added to the group with avformat_stream_group_add_stream(). - * - * @param s media file handle - * - * @return newly created group or NULL on error. - * @see avformat_new_stream, avformat_stream_group_add_stream. - */ -AVStreamGroup *avformat_stream_group_create(AVFormatContext *s, - enum AVStreamGroupParamsType type, - AVDictionary **options); - -/** - * Add a new stream to a media file. - * - * When demuxing, it is called by the demuxer in read_header(). If the - * flag AVFMTCTX_NOHEADER is set in s.ctx_flags, then it may also - * be called in read_packet(). - * - * When muxing, should be called by the user before avformat_write_header(). - * - * User is required to call avformat_free_context() to clean up the allocation - * by avformat_new_stream(). - * - * @param s media file handle - * @param c unused, does nothing - * - * @return newly created stream or NULL on error. - */ -AVStream *avformat_new_stream(AVFormatContext *s, const struct AVCodec *c); - -/** - * Add an already allocated stream to a stream group. - * - * When demuxing, it may be called by the demuxer in read_header(). If the - * flag AVFMTCTX_NOHEADER is set in s.ctx_flags, then it may also - * be called in read_packet(). - * - * When muxing, may be called by the user before avformat_write_header() after - * having allocated a new group with avformat_stream_group_create() and stream with - * avformat_new_stream(). - * - * User is required to call avformat_free_context() to clean up the allocation - * by avformat_stream_group_add_stream(). - * - * @param stg stream group belonging to a media file. - * @param st stream in the media file to add to the group. - * - * @retval 0 success - * @retval AVERROR(EEXIST) the stream was already in the group - * @retval "another negative error code" legitimate errors - * - * @see avformat_new_stream, avformat_stream_group_create. - */ -int avformat_stream_group_add_stream(AVStreamGroup *stg, AVStream *st); - -AVProgram *av_new_program(AVFormatContext *s, int id); - -/** - * @} - */ - - -/** - * Allocate an AVFormatContext for an output format. - * avformat_free_context() can be used to free the context and - * everything allocated by the framework within it. - * - * @param ctx pointee is set to the created format context, - * or to NULL in case of failure - * @param oformat format to use for allocating the context, if NULL - * format_name and filename are used instead - * @param format_name the name of output format to use for allocating the - * context, if NULL filename is used instead - * @param filename the name of the filename to use for allocating the - * context, may be NULL - * - * @return >= 0 in case of success, a negative AVERROR code in case of - * failure - */ -int avformat_alloc_output_context2(AVFormatContext **ctx, const AVOutputFormat *oformat, - const char *format_name, const char *filename); - -/** - * @addtogroup lavf_decoding - * @{ - */ - -/** - * Find AVInputFormat based on the short name of the input format. - */ -const AVInputFormat *av_find_input_format(const char *short_name); - -/** - * Guess the file format. - * - * @param pd data to be probed - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - */ -const AVInputFormat *av_probe_input_format(const AVProbeData *pd, int is_opened); - -/** - * Guess the file format. - * - * @param pd data to be probed - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - * @param score_max A probe score larger that this is required to accept a - * detection, the variable is set to the actual detection - * score afterwards. - * If the score is <= AVPROBE_SCORE_MAX / 4 it is recommended - * to retry with a larger probe buffer. - */ -const AVInputFormat *av_probe_input_format2(const AVProbeData *pd, - int is_opened, int *score_max); - -/** - * Guess the file format. - * - * @param is_opened Whether the file is already opened; determines whether - * demuxers with or without AVFMT_NOFILE are probed. - * @param score_ret The score of the best detection. - */ -const AVInputFormat *av_probe_input_format3(const AVProbeData *pd, - int is_opened, int *score_ret); - -/** - * Probe a bytestream to determine the input format. Each time a probe returns - * with a score that is too low, the probe buffer size is increased and another - * attempt is made. When the maximum probe size is reached, the input format - * with the highest score is returned. - * - * @param pb the bytestream to probe - * @param fmt the input format is put here - * @param url the url of the stream - * @param logctx the log context - * @param offset the offset within the bytestream to probe from - * @param max_probe_size the maximum probe buffer size (zero for default) - * - * @return the score in case of success, a negative value corresponding to an - * the maximal score is AVPROBE_SCORE_MAX - * AVERROR code otherwise - */ -int av_probe_input_buffer2(AVIOContext *pb, const AVInputFormat **fmt, - const char *url, void *logctx, - unsigned int offset, unsigned int max_probe_size); - -/** - * Like av_probe_input_buffer2() but returns 0 on success - */ -int av_probe_input_buffer(AVIOContext *pb, const AVInputFormat **fmt, - const char *url, void *logctx, - unsigned int offset, unsigned int max_probe_size); - -/** - * Open an input stream and read the header. The codecs are not opened. - * The stream must be closed with avformat_close_input(). - * - * @param ps Pointer to user-supplied AVFormatContext (allocated by - * avformat_alloc_context). May be a pointer to NULL, in - * which case an AVFormatContext is allocated by this - * function and written into ps. - * Note that a user-supplied AVFormatContext will be freed - * on failure and its pointer set to NULL. - * @param url URL of the stream to open. - * @param fmt If non-NULL, this parameter forces a specific input format. - * Otherwise the format is autodetected. - * @param options A dictionary filled with AVFormatContext and demuxer-private - * options. - * On return this parameter will be destroyed and replaced with - * a dict containing options that were not found. May be NULL. - * - * @return 0 on success; on failure: frees ps, sets its pointer to NULL, - * and returns a negative AVERROR. - * - * @note If you want to use custom IO, preallocate the format context and set its pb field. - */ -int avformat_open_input(AVFormatContext **ps, const char *url, - const AVInputFormat *fmt, AVDictionary **options); - -/** - * Read packets of a media file to get stream information. This - * is useful for file formats with no headers such as MPEG. This - * function also computes the real framerate in case of MPEG-2 repeat - * frame mode. - * The logical file position is not changed by this function; - * examined packets may be buffered for later processing. - * - * @param ic media file handle - * @param options If non-NULL, an ic.nb_streams long array of pointers to - * dictionaries, where i-th member contains options for - * codec corresponding to i-th stream. - * On return each dictionary will be filled with options that were not found. - * @return >=0 if OK, AVERROR_xxx on error - * - * @note this function isn't guaranteed to open all the codecs, so - * options being non-empty at return is a perfectly normal behavior. - * - * @todo Let the user decide somehow what information is needed so that - * we do not waste time getting stuff the user does not need. - */ -int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options); - -/** - * Find the programs which belong to a given stream. - * - * @param ic media file handle - * @param last the last found program, the search will start after this - * program, or from the beginning if it is NULL - * @param s stream index - * - * @return the next program which belongs to s, NULL if no program is found or - * the last program is not among the programs of ic. - */ -AVProgram *av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s); - -void av_program_add_stream_index(AVFormatContext *ac, int progid, unsigned int idx); - -/** - * Find the "best" stream in the file. - * The best stream is determined according to various heuristics as the most - * likely to be what the user expects. - * If the decoder parameter is non-NULL, av_find_best_stream will find the - * default decoder for the stream's codec; streams for which no decoder can - * be found are ignored. - * - * @param ic media file handle - * @param type stream type: video, audio, subtitles, etc. - * @param wanted_stream_nb user-requested stream number, - * or -1 for automatic selection - * @param related_stream try to find a stream related (eg. in the same - * program) to this one, or -1 if none - * @param decoder_ret if non-NULL, returns the decoder for the - * selected stream - * @param flags flags; none are currently defined - * - * @return the non-negative stream number in case of success, - * AVERROR_STREAM_NOT_FOUND if no stream with the requested type - * could be found, - * AVERROR_DECODER_NOT_FOUND if streams were found but no decoder - * - * @note If av_find_best_stream returns successfully and decoder_ret is not - * NULL, then *decoder_ret is guaranteed to be set to a valid AVCodec. - */ -int av_find_best_stream(AVFormatContext *ic, - enum AVMediaType type, - int wanted_stream_nb, - int related_stream, - const struct AVCodec **decoder_ret, - int flags); - -/** - * Return the next frame of a stream. - * This function returns what is stored in the file, and does not validate - * that what is there are valid frames for the decoder. It will split what is - * stored in the file into frames and return one for each call. It will not - * omit invalid data between valid frames so as to give the decoder the maximum - * information possible for decoding. - * - * On success, the returned packet is reference-counted (pkt->buf is set) and - * valid indefinitely. The packet must be freed with av_packet_unref() when - * it is no longer needed. For video, the packet contains exactly one frame. - * For audio, it contains an integer number of frames if each frame has - * a known fixed size (e.g. PCM or ADPCM data). If the audio frames have - * a variable size (e.g. MPEG audio), then it contains one frame. - * - * pkt->pts, pkt->dts and pkt->duration are always set to correct - * values in AVStream.time_base units (and guessed if the format cannot - * provide them). pkt->pts can be AV_NOPTS_VALUE if the video format - * has B-frames, so it is better to rely on pkt->dts if you do not - * decompress the payload. - * - * @return 0 if OK, < 0 on error or end of file. On error, pkt will be blank - * (as if it came from av_packet_alloc()). - * - * @note pkt will be initialized, so it may be uninitialized, but it must not - * contain data that needs to be freed. - */ -int av_read_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Seek to the keyframe at timestamp. - * 'timestamp' in 'stream_index'. - * - * @param s media file handle - * @param stream_index If stream_index is (-1), a default stream is selected, - * and timestamp is automatically converted from - * AV_TIME_BASE units to the stream specific time_base. - * @param timestamp Timestamp in AVStream.time_base units or, if no stream - * is specified, in AV_TIME_BASE units. - * @param flags flags which select direction and seeking mode - * - * @return >= 0 on success - */ -int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, - int flags); - -/** - * Seek to timestamp ts. - * Seeking will be done so that the point from which all active streams - * can be presented successfully will be closest to ts and within min/max_ts. - * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. - * - * If flags contain AVSEEK_FLAG_BYTE, then all timestamps are in bytes and - * are the file position (this may not be supported by all demuxers). - * If flags contain AVSEEK_FLAG_FRAME, then all timestamps are in frames - * in the stream with stream_index (this may not be supported by all demuxers). - * Otherwise all timestamps are in units of the stream selected by stream_index - * or if stream_index is -1, in AV_TIME_BASE units. - * If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as - * keyframes (this may not be supported by all demuxers). - * If flags contain AVSEEK_FLAG_BACKWARD, it is ignored. - * - * @param s media file handle - * @param stream_index index of the stream which is used as time base reference - * @param min_ts smallest acceptable timestamp - * @param ts target timestamp - * @param max_ts largest acceptable timestamp - * @param flags flags - * @return >=0 on success, error code otherwise - * - * @note This is part of the new seek API which is still under construction. - */ -int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); - -/** - * Discard all internally buffered data. This can be useful when dealing with - * discontinuities in the byte stream. Generally works only with formats that - * can resync. This includes headerless formats like MPEG-TS/TS but should also - * work with NUT, Ogg and in a limited way AVI for example. - * - * The set of streams, the detected duration, stream parameters and codecs do - * not change when calling this function. If you want a complete reset, it's - * better to open a new AVFormatContext. - * - * This does not flush the AVIOContext (s->pb). If necessary, call - * avio_flush(s->pb) before calling this function. - * - * @param s media file handle - * @return >=0 on success, error code otherwise - */ -int avformat_flush(AVFormatContext *s); - -/** - * Start playing a network-based stream (e.g. RTSP stream) at the - * current position. - */ -int av_read_play(AVFormatContext *s); - -/** - * Pause a network-based stream (e.g. RTSP stream). - * - * Use av_read_play() to resume it. - */ -int av_read_pause(AVFormatContext *s); - -/** - * Close an opened input AVFormatContext. Free it and all its contents - * and set *s to NULL. - */ -void avformat_close_input(AVFormatContext **s); -/** - * @} - */ - -#define AVSEEK_FLAG_BACKWARD 1 ///< seek backward -#define AVSEEK_FLAG_BYTE 2 ///< seeking based on position in bytes -#define AVSEEK_FLAG_ANY 4 ///< seek to any frame, even non-keyframes -#define AVSEEK_FLAG_FRAME 8 ///< seeking based on frame number - -/** - * @addtogroup lavf_encoding - * @{ - */ - -#define AVSTREAM_INIT_IN_WRITE_HEADER 0 ///< stream parameters initialized in avformat_write_header -#define AVSTREAM_INIT_IN_INIT_OUTPUT 1 ///< stream parameters initialized in avformat_init_output - -/** - * Allocate the stream private data and write the stream header to - * an output media file. - * - * @param s Media file handle, must be allocated with - * avformat_alloc_context(). - * Its \ref AVFormatContext.oformat "oformat" field must be set - * to the desired output format; - * Its \ref AVFormatContext.pb "pb" field must be set to an - * already opened ::AVIOContext. - * @param options An ::AVDictionary filled with AVFormatContext and - * muxer-private options. - * On return this parameter will be destroyed and replaced with - * a dict containing options that were not found. May be NULL. - * - * @retval AVSTREAM_INIT_IN_WRITE_HEADER On success, if the codec had not already been - * fully initialized in avformat_init_output(). - * @retval AVSTREAM_INIT_IN_INIT_OUTPUT On success, if the codec had already been fully - * initialized in avformat_init_output(). - * @retval AVERROR A negative AVERROR on failure. - * - * @see av_opt_find, av_dict_set, avio_open, av_oformat_next, avformat_init_output. - */ -av_warn_unused_result -int avformat_write_header(AVFormatContext *s, AVDictionary **options); - -/** - * Allocate the stream private data and initialize the codec, but do not write the header. - * May optionally be used before avformat_write_header() to initialize stream parameters - * before actually writing the header. - * If using this function, do not pass the same options to avformat_write_header(). - * - * @param s Media file handle, must be allocated with - * avformat_alloc_context(). - * Its \ref AVFormatContext.oformat "oformat" field must be set - * to the desired output format; - * Its \ref AVFormatContext.pb "pb" field must be set to an - * already opened ::AVIOContext. - * @param options An ::AVDictionary filled with AVFormatContext and - * muxer-private options. - * On return this parameter will be destroyed and replaced with - * a dict containing options that were not found. May be NULL. - * - * @retval AVSTREAM_INIT_IN_WRITE_HEADER On success, if the codec requires - * avformat_write_header to fully initialize. - * @retval AVSTREAM_INIT_IN_INIT_OUTPUT On success, if the codec has been fully - * initialized. - * @retval AVERROR Anegative AVERROR on failure. - * - * @see av_opt_find, av_dict_set, avio_open, av_oformat_next, avformat_write_header. - */ -av_warn_unused_result -int avformat_init_output(AVFormatContext *s, AVDictionary **options); - -/** - * Write a packet to an output media file. - * - * This function passes the packet directly to the muxer, without any buffering - * or reordering. The caller is responsible for correctly interleaving the - * packets if the format requires it. Callers that want libavformat to handle - * the interleaving should call av_interleaved_write_frame() instead of this - * function. - * - * @param s media file handle - * @param pkt The packet containing the data to be written. Note that unlike - * av_interleaved_write_frame(), this function does not take - * ownership of the packet passed to it (though some muxers may make - * an internal reference to the input packet). - *
- * This parameter can be NULL (at any time, not just at the end), in - * order to immediately flush data buffered within the muxer, for - * muxers that buffer up data internally before writing it to the - * output. - *
- * Packet's @ref AVPacket.stream_index "stream_index" field must be - * set to the index of the corresponding stream in @ref - * AVFormatContext.streams "s->streams". - *
- * The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") - * must be set to correct values in the stream's timebase (unless the - * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then - * they can be set to AV_NOPTS_VALUE). - * The dts for subsequent packets passed to this function must be strictly - * increasing when compared in their respective timebases (unless the - * output format is flagged with the AVFMT_TS_NONSTRICT, then they - * merely have to be nondecreasing). @ref AVPacket.duration - * "duration") should also be set if known. - * @return < 0 on error, = 0 if OK, 1 if flushed and there is no more data to flush - * - * @see av_interleaved_write_frame() - */ -int av_write_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Write a packet to an output media file ensuring correct interleaving. - * - * This function will buffer the packets internally as needed to make sure the - * packets in the output file are properly interleaved, usually ordered by - * increasing dts. Callers doing their own interleaving should call - * av_write_frame() instead of this function. - * - * Using this function instead of av_write_frame() can give muxers advance - * knowledge of future packets, improving e.g. the behaviour of the mp4 - * muxer for VFR content in fragmenting mode. - * - * @param s media file handle - * @param pkt The packet containing the data to be written. - *
- * If the packet is reference-counted, this function will take - * ownership of this reference and unreference it later when it sees - * fit. If the packet is not reference-counted, libavformat will - * make a copy. - * The returned packet will be blank (as if returned from - * av_packet_alloc()), even on error. - *
- * This parameter can be NULL (at any time, not just at the end), to - * flush the interleaving queues. - *
- * Packet's @ref AVPacket.stream_index "stream_index" field must be - * set to the index of the corresponding stream in @ref - * AVFormatContext.streams "s->streams". - *
- * The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") - * must be set to correct values in the stream's timebase (unless the - * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then - * they can be set to AV_NOPTS_VALUE). - * The dts for subsequent packets in one stream must be strictly - * increasing (unless the output format is flagged with the - * AVFMT_TS_NONSTRICT, then they merely have to be nondecreasing). - * @ref AVPacket.duration "duration" should also be set if known. - * - * @return 0 on success, a negative AVERROR on error. - * - * @see av_write_frame(), AVFormatContext.max_interleave_delta - */ -int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt); - -/** - * Write an uncoded frame to an output media file. - * - * The frame must be correctly interleaved according to the container - * specification; if not, av_interleaved_write_uncoded_frame() must be used. - * - * See av_interleaved_write_uncoded_frame() for details. - */ -int av_write_uncoded_frame(AVFormatContext *s, int stream_index, - struct AVFrame *frame); - -/** - * Write an uncoded frame to an output media file. - * - * If the muxer supports it, this function makes it possible to write an AVFrame - * structure directly, without encoding it into a packet. - * It is mostly useful for devices and similar special muxers that use raw - * video or PCM data and will not serialize it into a byte stream. - * - * To test whether it is possible to use it with a given muxer and stream, - * use av_write_uncoded_frame_query(). - * - * The caller gives up ownership of the frame and must not access it - * afterwards. - * - * @return >=0 for success, a negative code on error - */ -int av_interleaved_write_uncoded_frame(AVFormatContext *s, int stream_index, - struct AVFrame *frame); - -/** - * Test whether a muxer supports uncoded frame. - * - * @return >=0 if an uncoded frame can be written to that muxer and stream, - * <0 if not - */ -int av_write_uncoded_frame_query(AVFormatContext *s, int stream_index); - -/** - * Write the stream trailer to an output media file and free the - * file private data. - * - * May only be called after a successful call to avformat_write_header. - * - * @param s media file handle - * @return 0 if OK, AVERROR_xxx on error - */ -int av_write_trailer(AVFormatContext *s); - -/** - * Return the output format in the list of registered output formats - * which best matches the provided parameters, or return NULL if - * there is no match. - * - * @param short_name if non-NULL checks if short_name matches with the - * names of the registered formats - * @param filename if non-NULL checks if filename terminates with the - * extensions of the registered formats - * @param mime_type if non-NULL checks if mime_type matches with the - * MIME type of the registered formats - */ -const AVOutputFormat *av_guess_format(const char *short_name, - const char *filename, - const char *mime_type); - -/** - * Guess the codec ID based upon muxer and filename. - */ -enum AVCodecID av_guess_codec(const AVOutputFormat *fmt, const char *short_name, - const char *filename, const char *mime_type, - enum AVMediaType type); - -/** - * Get timing information for the data currently output. - * The exact meaning of "currently output" depends on the format. - * It is mostly relevant for devices that have an internal buffer and/or - * work in real time. - * @param s media file handle - * @param stream stream in the media file - * @param[out] dts DTS of the last packet output for the stream, in stream - * time_base units - * @param[out] wall absolute time when that packet whas output, - * in microsecond - * @retval 0 Success - * @retval AVERROR(ENOSYS) The format does not support it - * - * @note Some formats or devices may not allow to measure dts and wall - * atomically. - */ -int av_get_output_timestamp(struct AVFormatContext *s, int stream, - int64_t *dts, int64_t *wall); - - -/** - * @} - */ - - -/** - * @defgroup lavf_misc Utility functions - * @ingroup libavf - * @{ - * - * Miscellaneous utility functions related to both muxing and demuxing - * (or neither). - */ - -/** - * Send a nice hexadecimal dump of a buffer to the specified file stream. - * - * @param f The file stream pointer where the dump should be sent to. - * @param buf buffer - * @param size buffer size - * - * @see av_hex_dump_log, av_pkt_dump2, av_pkt_dump_log2 - */ -void av_hex_dump(FILE *f, const uint8_t *buf, int size); - -/** - * Send a nice hexadecimal dump of a buffer to the log. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message, lower values signifying - * higher importance. - * @param buf buffer - * @param size buffer size - * - * @see av_hex_dump, av_pkt_dump2, av_pkt_dump_log2 - */ -void av_hex_dump_log(void *avcl, int level, const uint8_t *buf, int size); - -/** - * Send a nice dump of a packet to the specified file stream. - * - * @param f The file stream pointer where the dump should be sent to. - * @param pkt packet to dump - * @param dump_payload True if the payload must be displayed, too. - * @param st AVStream that the packet belongs to - */ -void av_pkt_dump2(FILE *f, const AVPacket *pkt, int dump_payload, const AVStream *st); - - -/** - * Send a nice dump of a packet to the log. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message, lower values signifying - * higher importance. - * @param pkt packet to dump - * @param dump_payload True if the payload must be displayed, too. - * @param st AVStream that the packet belongs to - */ -void av_pkt_dump_log2(void *avcl, int level, const AVPacket *pkt, int dump_payload, - const AVStream *st); - -/** - * Get the AVCodecID for the given codec tag tag. - * If no codec id is found returns AV_CODEC_ID_NONE. - * - * @param tags list of supported codec_id-codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - * @param tag codec tag to match to a codec ID - */ -enum AVCodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag); - -/** - * Get the codec tag for the given codec id id. - * If no codec tag is found returns 0. - * - * @param tags list of supported codec_id-codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - * @param id codec ID to match to a codec tag - */ -unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum AVCodecID id); - -/** - * Get the codec tag for the given codec id. - * - * @param tags list of supported codec_id - codec_tag pairs, as stored - * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag - * @param id codec id that should be searched for in the list - * @param tag A pointer to the found tag - * @return 0 if id was not found in tags, > 0 if it was found - */ -int av_codec_get_tag2(const struct AVCodecTag * const *tags, enum AVCodecID id, - unsigned int *tag); - -int av_find_default_stream_index(AVFormatContext *s); - -/** - * Get the index for a specific timestamp. - * - * @param st stream that the timestamp belongs to - * @param timestamp timestamp to retrieve the index for - * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond - * to the timestamp which is <= the requested one, if backward - * is 0, then it will be >= - * if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise - * @return < 0 if no such timestamp could be found - */ -int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags); - -/** - * Get the index entry count for the given AVStream. - * - * @param st stream - * @return the number of index entries in the stream - */ -int avformat_index_get_entries_count(const AVStream *st); - -/** - * Get the AVIndexEntry corresponding to the given index. - * - * @param st Stream containing the requested AVIndexEntry. - * @param idx The desired index. - * @return A pointer to the requested AVIndexEntry if it exists, NULL otherwise. - * - * @note The pointer returned by this function is only guaranteed to be valid - * until any function that takes the stream or the parent AVFormatContext - * as input argument is called. - */ -const AVIndexEntry *avformat_index_get_entry(AVStream *st, int idx); - -/** - * Get the AVIndexEntry corresponding to the given timestamp. - * - * @param st Stream containing the requested AVIndexEntry. - * @param wanted_timestamp Timestamp to retrieve the index entry for. - * @param flags If AVSEEK_FLAG_BACKWARD then the returned entry will correspond - * to the timestamp which is <= the requested one, if backward - * is 0, then it will be >= - * if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise. - * @return A pointer to the requested AVIndexEntry if it exists, NULL otherwise. - * - * @note The pointer returned by this function is only guaranteed to be valid - * until any function that takes the stream or the parent AVFormatContext - * as input argument is called. - */ -const AVIndexEntry *avformat_index_get_entry_from_timestamp(AVStream *st, - int64_t wanted_timestamp, - int flags); -/** - * Add an index entry into a sorted list. Update the entry if the list - * already contains it. - * - * @param timestamp timestamp in the time base of the given stream - */ -int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, - int size, int distance, int flags); - - -/** - * Split a URL string into components. - * - * The pointers to buffers for storing individual components may be null, - * in order to ignore that component. Buffers for components not found are - * set to empty strings. If the port is not found, it is set to a negative - * value. - * - * @param proto the buffer for the protocol - * @param proto_size the size of the proto buffer - * @param authorization the buffer for the authorization - * @param authorization_size the size of the authorization buffer - * @param hostname the buffer for the host name - * @param hostname_size the size of the hostname buffer - * @param port_ptr a pointer to store the port number in - * @param path the buffer for the path - * @param path_size the size of the path buffer - * @param url the URL to split - */ -void av_url_split(char *proto, int proto_size, - char *authorization, int authorization_size, - char *hostname, int hostname_size, - int *port_ptr, - char *path, int path_size, - const char *url); - - -/** - * Print detailed information about the input or output format, such as - * duration, bitrate, streams, container, programs, metadata, side data, - * codec and time base. - * - * @param ic the context to analyze - * @param index index of the stream to dump information about - * @param url the URL to print, such as source or destination file - * @param is_output Select whether the specified context is an input(0) or output(1) - */ -void av_dump_format(AVFormatContext *ic, - int index, - const char *url, - int is_output); - - -#define AV_FRAME_FILENAME_FLAGS_MULTIPLE 1 ///< Allow multiple %d - -/** - * Return in 'buf' the path with '%d' replaced by a number. - * - * Also handles the '%0nd' format where 'n' is the total number - * of digits and '%%'. - * - * @param buf destination buffer - * @param buf_size destination buffer size - * @param path numbered sequence string - * @param number frame number - * @param flags AV_FRAME_FILENAME_FLAGS_* - * @return 0 if OK, -1 on format error - */ -int av_get_frame_filename2(char *buf, int buf_size, - const char *path, int number, int flags); - -int av_get_frame_filename(char *buf, int buf_size, - const char *path, int number); - -/** - * Check whether filename actually is a numbered sequence generator. - * - * @param filename possible numbered sequence string - * @return 1 if a valid numbered sequence string, 0 otherwise - */ -int av_filename_number_test(const char *filename); - -/** - * Generate an SDP for an RTP session. - * - * Note, this overwrites the id values of AVStreams in the muxer contexts - * for getting unique dynamic payload types. - * - * @param ac array of AVFormatContexts describing the RTP streams. If the - * array is composed by only one context, such context can contain - * multiple AVStreams (one AVStream per RTP stream). Otherwise, - * all the contexts in the array (an AVCodecContext per RTP stream) - * must contain only one AVStream. - * @param n_files number of AVCodecContexts contained in ac - * @param buf buffer where the SDP will be stored (must be allocated by - * the caller) - * @param size the size of the buffer - * @return 0 if OK, AVERROR_xxx on error - */ -int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size); - -/** - * Return a positive value if the given filename has one of the given - * extensions, 0 otherwise. - * - * @param filename file name to check against the given extensions - * @param extensions a comma-separated list of filename extensions - */ -int av_match_ext(const char *filename, const char *extensions); - -/** - * Test if the given container can store a codec. - * - * @param ofmt container to check for compatibility - * @param codec_id codec to potentially store in container - * @param std_compliance standards compliance level, one of FF_COMPLIANCE_* - * - * @return 1 if codec with ID codec_id can be stored in ofmt, 0 if it cannot. - * A negative number if this information is not available. - */ -int avformat_query_codec(const AVOutputFormat *ofmt, enum AVCodecID codec_id, - int std_compliance); - -/** - * @defgroup riff_fourcc RIFF FourCCs - * @{ - * Get the tables mapping RIFF FourCCs to libavcodec AVCodecIDs. The tables are - * meant to be passed to av_codec_get_id()/av_codec_get_tag() as in the - * following code: - * @code - * uint32_t tag = MKTAG('H', '2', '6', '4'); - * const struct AVCodecTag *table[] = { avformat_get_riff_video_tags(), 0 }; - * enum AVCodecID id = av_codec_get_id(table, tag); - * @endcode - */ -/** - * @return the table mapping RIFF FourCCs for video to libavcodec AVCodecID. - */ -const struct AVCodecTag *avformat_get_riff_video_tags(void); -/** - * @return the table mapping RIFF FourCCs for audio to AVCodecID. - */ -const struct AVCodecTag *avformat_get_riff_audio_tags(void); -/** - * @return the table mapping MOV FourCCs for video to libavcodec AVCodecID. - */ -const struct AVCodecTag *avformat_get_mov_video_tags(void); -/** - * @return the table mapping MOV FourCCs for audio to AVCodecID. - */ -const struct AVCodecTag *avformat_get_mov_audio_tags(void); - -/** - * @} - */ - -/** - * Guess the sample aspect ratio of a frame, based on both the stream and the - * frame aspect ratio. - * - * Since the frame aspect ratio is set by the codec but the stream aspect ratio - * is set by the demuxer, these two may not be equal. This function tries to - * return the value that you should use if you would like to display the frame. - * - * Basic logic is to use the stream aspect ratio if it is set to something sane - * otherwise use the frame aspect ratio. This way a container setting, which is - * usually easy to modify can override the coded value in the frames. - * - * @param format the format context which the stream is part of - * @param stream the stream which the frame is part of - * @param frame the frame with the aspect ratio to be determined - * @return the guessed (valid) sample_aspect_ratio, 0/1 if no idea - */ -AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, - struct AVFrame *frame); - -/** - * Guess the frame rate, based on both the container and codec information. - * - * @param ctx the format context which the stream is part of - * @param stream the stream which the frame is part of - * @param frame the frame for which the frame rate should be determined, may be NULL - * @return the guessed (valid) frame rate, 0/1 if no idea - */ -AVRational av_guess_frame_rate(AVFormatContext *ctx, AVStream *stream, - struct AVFrame *frame); - -/** - * Check if the stream st contained in s is matched by the stream specifier - * spec. - * - * See the "stream specifiers" chapter in the documentation for the syntax - * of spec. - * - * @return >0 if st is matched by spec; - * 0 if st is not matched by spec; - * AVERROR code if spec is invalid - * - * @note A stream specifier can match several streams in the format. - */ -int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st, - const char *spec); - -int avformat_queue_attached_pictures(AVFormatContext *s); - -#if FF_API_INTERNAL_TIMING -enum AVTimebaseSource { - AVFMT_TBCF_AUTO = -1, - AVFMT_TBCF_DECODER, - AVFMT_TBCF_DEMUXER, -#if FF_API_R_FRAME_RATE - AVFMT_TBCF_R_FRAMERATE, -#endif -}; - -/** - * @deprecated do not call this function - */ -attribute_deprecated -int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt, - AVStream *ost, const AVStream *ist, - enum AVTimebaseSource copy_tb); - -/** - * @deprecated do not call this function - */ -attribute_deprecated -AVRational av_stream_get_codec_timebase(const AVStream *st); -#endif - - -/** - * @} - */ - -#endif /* AVFORMAT_AVFORMAT_H */ diff --git a/3rdparty/ffmpeg/include/libavformat/avio.h b/3rdparty/ffmpeg/include/libavformat/avio.h deleted file mode 100644 index ebf611187dcf4..0000000000000 --- a/3rdparty/ffmpeg/include/libavformat/avio.h +++ /dev/null @@ -1,831 +0,0 @@ -/* - * copyright (c) 2001 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ -#ifndef AVFORMAT_AVIO_H -#define AVFORMAT_AVIO_H - -/** - * @file - * @ingroup lavf_io - * Buffered I/O operations - */ - -#include -#include - -#include "libavutil/attributes.h" -#include "libavutil/dict.h" -#include "libavutil/log.h" - -#include "libavformat/version_major.h" - -/** - * Seeking works like for a local file. - */ -#define AVIO_SEEKABLE_NORMAL (1 << 0) - -/** - * Seeking by timestamp with avio_seek_time() is possible. - */ -#define AVIO_SEEKABLE_TIME (1 << 1) - -/** - * Callback for checking whether to abort blocking functions. - * AVERROR_EXIT is returned in this case by the interrupted - * function. During blocking operations, callback is called with - * opaque as parameter. If the callback returns 1, the - * blocking operation will be aborted. - * - * No members can be added to this struct without a major bump, if - * new elements have been added after this struct in AVFormatContext - * or AVIOContext. - */ -typedef struct AVIOInterruptCB { - int (*callback)(void*); - void *opaque; -} AVIOInterruptCB; - -/** - * Directory entry types. - */ -enum AVIODirEntryType { - AVIO_ENTRY_UNKNOWN, - AVIO_ENTRY_BLOCK_DEVICE, - AVIO_ENTRY_CHARACTER_DEVICE, - AVIO_ENTRY_DIRECTORY, - AVIO_ENTRY_NAMED_PIPE, - AVIO_ENTRY_SYMBOLIC_LINK, - AVIO_ENTRY_SOCKET, - AVIO_ENTRY_FILE, - AVIO_ENTRY_SERVER, - AVIO_ENTRY_SHARE, - AVIO_ENTRY_WORKGROUP, -}; - -/** - * Describes single entry of the directory. - * - * Only name and type fields are guaranteed be set. - * Rest of fields are protocol or/and platform dependent and might be unknown. - */ -typedef struct AVIODirEntry { - char *name; /**< Filename */ - int type; /**< Type of the entry */ - int utf8; /**< Set to 1 when name is encoded with UTF-8, 0 otherwise. - Name can be encoded with UTF-8 even though 0 is set. */ - int64_t size; /**< File size in bytes, -1 if unknown. */ - int64_t modification_timestamp; /**< Time of last modification in microseconds since unix - epoch, -1 if unknown. */ - int64_t access_timestamp; /**< Time of last access in microseconds since unix epoch, - -1 if unknown. */ - int64_t status_change_timestamp; /**< Time of last status change in microseconds since unix - epoch, -1 if unknown. */ - int64_t user_id; /**< User ID of owner, -1 if unknown. */ - int64_t group_id; /**< Group ID of owner, -1 if unknown. */ - int64_t filemode; /**< Unix file mode, -1 if unknown. */ -} AVIODirEntry; - -typedef struct AVIODirContext AVIODirContext; - -/** - * Different data types that can be returned via the AVIO - * write_data_type callback. - */ -enum AVIODataMarkerType { - /** - * Header data; this needs to be present for the stream to be decodeable. - */ - AVIO_DATA_MARKER_HEADER, - /** - * A point in the output bytestream where a decoder can start decoding - * (i.e. a keyframe). A demuxer/decoder given the data flagged with - * AVIO_DATA_MARKER_HEADER, followed by any AVIO_DATA_MARKER_SYNC_POINT, - * should give decodeable results. - */ - AVIO_DATA_MARKER_SYNC_POINT, - /** - * A point in the output bytestream where a demuxer can start parsing - * (for non self synchronizing bytestream formats). That is, any - * non-keyframe packet start point. - */ - AVIO_DATA_MARKER_BOUNDARY_POINT, - /** - * This is any, unlabelled data. It can either be a muxer not marking - * any positions at all, it can be an actual boundary/sync point - * that the muxer chooses not to mark, or a later part of a packet/fragment - * that is cut into multiple write callbacks due to limited IO buffer size. - */ - AVIO_DATA_MARKER_UNKNOWN, - /** - * Trailer data, which doesn't contain actual content, but only for - * finalizing the output file. - */ - AVIO_DATA_MARKER_TRAILER, - /** - * A point in the output bytestream where the underlying AVIOContext might - * flush the buffer depending on latency or buffering requirements. Typically - * means the end of a packet. - */ - AVIO_DATA_MARKER_FLUSH_POINT, -}; - -/** - * Bytestream IO Context. - * New public fields can be added with minor version bumps. - * Removal, reordering and changes to existing public fields require - * a major version bump. - * sizeof(AVIOContext) must not be used outside libav*. - * - * @note None of the function pointers in AVIOContext should be called - * directly, they should only be set by the client application - * when implementing custom I/O. Normally these are set to the - * function pointers specified in avio_alloc_context() - */ -typedef struct AVIOContext { - /** - * A class for private options. - * - * If this AVIOContext is created by avio_open2(), av_class is set and - * passes the options down to protocols. - * - * If this AVIOContext is manually allocated, then av_class may be set by - * the caller. - * - * warning -- this field can be NULL, be sure to not pass this AVIOContext - * to any av_opt_* functions in that case. - */ - const AVClass *av_class; - - /* - * The following shows the relationship between buffer, buf_ptr, - * buf_ptr_max, buf_end, buf_size, and pos, when reading and when writing - * (since AVIOContext is used for both): - * - ********************************************************************************** - * READING - ********************************************************************************** - * - * | buffer_size | - * |---------------------------------------| - * | | - * - * buffer buf_ptr buf_end - * +---------------+-----------------------+ - * |/ / / / / / / /|/ / / / / / /| | - * read buffer: |/ / consumed / | to be read /| | - * |/ / / / / / / /|/ / / / / / /| | - * +---------------+-----------------------+ - * - * pos - * +-------------------------------------------+-----------------+ - * input file: | | | - * +-------------------------------------------+-----------------+ - * - * - ********************************************************************************** - * WRITING - ********************************************************************************** - * - * | buffer_size | - * |--------------------------------------| - * | | - * - * buf_ptr_max - * buffer (buf_ptr) buf_end - * +-----------------------+--------------+ - * |/ / / / / / / / / / / /| | - * write buffer: | / / to be flushed / / | | - * |/ / / / / / / / / / / /| | - * +-----------------------+--------------+ - * buf_ptr can be in this - * due to a backward seek - * - * pos - * +-------------+----------------------------------------------+ - * output file: | | | - * +-------------+----------------------------------------------+ - * - */ - unsigned char *buffer; /**< Start of the buffer. */ - int buffer_size; /**< Maximum buffer size */ - unsigned char *buf_ptr; /**< Current position in the buffer */ - unsigned char *buf_end; /**< End of the data, may be less than - buffer+buffer_size if the read function returned - less data than requested, e.g. for streams where - no more data has been received yet. */ - void *opaque; /**< A private pointer, passed to the read/write/seek/... - functions. */ - int (*read_packet)(void *opaque, uint8_t *buf, int buf_size); - int (*write_packet)(void *opaque, const uint8_t *buf, int buf_size); - int64_t (*seek)(void *opaque, int64_t offset, int whence); - int64_t pos; /**< position in the file of the current buffer */ - int eof_reached; /**< true if was unable to read due to error or eof */ - int error; /**< contains the error code or 0 if no error happened */ - int write_flag; /**< true if open for writing */ - int max_packet_size; - int min_packet_size; /**< Try to buffer at least this amount of data - before flushing it. */ - unsigned long checksum; - unsigned char *checksum_ptr; - unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size); - /** - * Pause or resume playback for network streaming protocols - e.g. MMS. - */ - int (*read_pause)(void *opaque, int pause); - /** - * Seek to a given timestamp in stream with the specified stream_index. - * Needed for some network streaming protocols which don't support seeking - * to byte position. - */ - int64_t (*read_seek)(void *opaque, int stream_index, - int64_t timestamp, int flags); - /** - * A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable. - */ - int seekable; - - /** - * avio_read and avio_write should if possible be satisfied directly - * instead of going through a buffer, and avio_seek will always - * call the underlying seek function directly. - */ - int direct; - - /** - * ',' separated list of allowed protocols. - */ - const char *protocol_whitelist; - - /** - * ',' separated list of disallowed protocols. - */ - const char *protocol_blacklist; - - /** - * A callback that is used instead of write_packet. - */ - int (*write_data_type)(void *opaque, const uint8_t *buf, int buf_size, - enum AVIODataMarkerType type, int64_t time); - /** - * If set, don't call write_data_type separately for AVIO_DATA_MARKER_BOUNDARY_POINT, - * but ignore them and treat them as AVIO_DATA_MARKER_UNKNOWN (to avoid needlessly - * small chunks of data returned from the callback). - */ - int ignore_boundary_point; - - /** - * Maximum reached position before a backward seek in the write buffer, - * used keeping track of already written data for a later flush. - */ - unsigned char *buf_ptr_max; - - /** - * Read-only statistic of bytes read for this AVIOContext. - */ - int64_t bytes_read; - - /** - * Read-only statistic of bytes written for this AVIOContext. - */ - int64_t bytes_written; -} AVIOContext; - -/** - * Return the name of the protocol that will handle the passed URL. - * - * NULL is returned if no protocol could be found for the given URL. - * - * @return Name of the protocol or NULL. - */ -const char *avio_find_protocol_name(const char *url); - -/** - * Return AVIO_FLAG_* access flags corresponding to the access permissions - * of the resource in url, or a negative value corresponding to an - * AVERROR code in case of failure. The returned access flags are - * masked by the value in flags. - * - * @note This function is intrinsically unsafe, in the sense that the - * checked resource may change its existence or permission status from - * one call to another. Thus you should not trust the returned value, - * unless you are sure that no other processes are accessing the - * checked resource. - */ -int avio_check(const char *url, int flags); - -/** - * Open directory for reading. - * - * @param s directory read context. Pointer to a NULL pointer must be passed. - * @param url directory to be listed. - * @param options A dictionary filled with protocol-private options. On return - * this parameter will be destroyed and replaced with a dictionary - * containing options that were not found. May be NULL. - * @return >=0 on success or negative on error. - */ -int avio_open_dir(AVIODirContext **s, const char *url, AVDictionary **options); - -/** - * Get next directory entry. - * - * Returned entry must be freed with avio_free_directory_entry(). In particular - * it may outlive AVIODirContext. - * - * @param s directory read context. - * @param[out] next next entry or NULL when no more entries. - * @return >=0 on success or negative on error. End of list is not considered an - * error. - */ -int avio_read_dir(AVIODirContext *s, AVIODirEntry **next); - -/** - * Close directory. - * - * @note Entries created using avio_read_dir() are not deleted and must be - * freeded with avio_free_directory_entry(). - * - * @param s directory read context. - * @return >=0 on success or negative on error. - */ -int avio_close_dir(AVIODirContext **s); - -/** - * Free entry allocated by avio_read_dir(). - * - * @param entry entry to be freed. - */ -void avio_free_directory_entry(AVIODirEntry **entry); - -/** - * Allocate and initialize an AVIOContext for buffered I/O. It must be later - * freed with avio_context_free(). - * - * @param buffer Memory block for input/output operations via AVIOContext. - * The buffer must be allocated with av_malloc() and friends. - * It may be freed and replaced with a new buffer by libavformat. - * AVIOContext.buffer holds the buffer currently in use, - * which must be later freed with av_free(). - * @param buffer_size The buffer size is very important for performance. - * For protocols with fixed blocksize it should be set to this blocksize. - * For others a typical size is a cache page, e.g. 4kb. - * @param write_flag Set to 1 if the buffer should be writable, 0 otherwise. - * @param opaque An opaque pointer to user-specific data. - * @param read_packet A function for refilling the buffer, may be NULL. - * For stream protocols, must never return 0 but rather - * a proper AVERROR code. - * @param write_packet A function for writing the buffer contents, may be NULL. - * The function may not change the input buffers content. - * @param seek A function for seeking to specified byte position, may be NULL. - * - * @return Allocated AVIOContext or NULL on failure. - */ -AVIOContext *avio_alloc_context( - unsigned char *buffer, - int buffer_size, - int write_flag, - void *opaque, - int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), - int (*write_packet)(void *opaque, const uint8_t *buf, int buf_size), - int64_t (*seek)(void *opaque, int64_t offset, int whence)); - -/** - * Free the supplied IO context and everything associated with it. - * - * @param s Double pointer to the IO context. This function will write NULL - * into s. - */ -void avio_context_free(AVIOContext **s); - -void avio_w8(AVIOContext *s, int b); -void avio_write(AVIOContext *s, const unsigned char *buf, int size); -void avio_wl64(AVIOContext *s, uint64_t val); -void avio_wb64(AVIOContext *s, uint64_t val); -void avio_wl32(AVIOContext *s, unsigned int val); -void avio_wb32(AVIOContext *s, unsigned int val); -void avio_wl24(AVIOContext *s, unsigned int val); -void avio_wb24(AVIOContext *s, unsigned int val); -void avio_wl16(AVIOContext *s, unsigned int val); -void avio_wb16(AVIOContext *s, unsigned int val); - -/** - * Write a NULL-terminated string. - * @return number of bytes written. - */ -int avio_put_str(AVIOContext *s, const char *str); - -/** - * Convert an UTF-8 string to UTF-16LE and write it. - * @param s the AVIOContext - * @param str NULL-terminated UTF-8 string - * - * @return number of bytes written. - */ -int avio_put_str16le(AVIOContext *s, const char *str); - -/** - * Convert an UTF-8 string to UTF-16BE and write it. - * @param s the AVIOContext - * @param str NULL-terminated UTF-8 string - * - * @return number of bytes written. - */ -int avio_put_str16be(AVIOContext *s, const char *str); - -/** - * Mark the written bytestream as a specific type. - * - * Zero-length ranges are omitted from the output. - * - * @param s the AVIOContext - * @param time the stream time the current bytestream pos corresponds to - * (in AV_TIME_BASE units), or AV_NOPTS_VALUE if unknown or not - * applicable - * @param type the kind of data written starting at the current pos - */ -void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType type); - -/** - * ORing this as the "whence" parameter to a seek function causes it to - * return the filesize without seeking anywhere. Supporting this is optional. - * If it is not supported then the seek function will return <0. - */ -#define AVSEEK_SIZE 0x10000 - -/** - * Passing this flag as the "whence" parameter to a seek function causes it to - * seek by any means (like reopening and linear reading) or other normally unreasonable - * means that can be extremely slow. - * This may be ignored by the seek code. - */ -#define AVSEEK_FORCE 0x20000 - -/** - * fseek() equivalent for AVIOContext. - * @return new position or AVERROR. - */ -int64_t avio_seek(AVIOContext *s, int64_t offset, int whence); - -/** - * Skip given number of bytes forward - * @return new position or AVERROR. - */ -int64_t avio_skip(AVIOContext *s, int64_t offset); - -/** - * ftell() equivalent for AVIOContext. - * @return position or AVERROR. - */ -static av_always_inline int64_t avio_tell(AVIOContext *s) -{ - return avio_seek(s, 0, SEEK_CUR); -} - -/** - * Get the filesize. - * @return filesize or AVERROR - */ -int64_t avio_size(AVIOContext *s); - -/** - * Similar to feof() but also returns nonzero on read errors. - * @return non zero if and only if at end of file or a read error happened when reading. - */ -int avio_feof(AVIOContext *s); - -/** - * Writes a formatted string to the context taking a va_list. - * @return number of bytes written, < 0 on error. - */ -int avio_vprintf(AVIOContext *s, const char *fmt, va_list ap); - -/** - * Writes a formatted string to the context. - * @return number of bytes written, < 0 on error. - */ -int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3); - -/** - * Write a NULL terminated array of strings to the context. - * Usually you don't need to use this function directly but its macro wrapper, - * avio_print. - */ -void avio_print_string_array(AVIOContext *s, const char * const strings[]); - -/** - * Write strings (const char *) to the context. - * This is a convenience macro around avio_print_string_array and it - * automatically creates the string array from the variable argument list. - * For simple string concatenations this function is more performant than using - * avio_printf since it does not need a temporary buffer. - */ -#define avio_print(s, ...) \ - avio_print_string_array(s, (const char*[]){__VA_ARGS__, NULL}) - -/** - * Force flushing of buffered data. - * - * For write streams, force the buffered data to be immediately written to the output, - * without to wait to fill the internal buffer. - * - * For read streams, discard all currently buffered data, and advance the - * reported file position to that of the underlying stream. This does not - * read new data, and does not perform any seeks. - */ -void avio_flush(AVIOContext *s); - -/** - * Read size bytes from AVIOContext into buf. - * @return number of bytes read or AVERROR - */ -int avio_read(AVIOContext *s, unsigned char *buf, int size); - -/** - * Read size bytes from AVIOContext into buf. Unlike avio_read(), this is allowed - * to read fewer bytes than requested. The missing bytes can be read in the next - * call. This always tries to read at least 1 byte. - * Useful to reduce latency in certain cases. - * @return number of bytes read or AVERROR - */ -int avio_read_partial(AVIOContext *s, unsigned char *buf, int size); - -/** - * @name Functions for reading from AVIOContext - * @{ - * - * @note return 0 if EOF, so you cannot use it if EOF handling is - * necessary - */ -int avio_r8 (AVIOContext *s); -unsigned int avio_rl16(AVIOContext *s); -unsigned int avio_rl24(AVIOContext *s); -unsigned int avio_rl32(AVIOContext *s); -uint64_t avio_rl64(AVIOContext *s); -unsigned int avio_rb16(AVIOContext *s); -unsigned int avio_rb24(AVIOContext *s); -unsigned int avio_rb32(AVIOContext *s); -uint64_t avio_rb64(AVIOContext *s); -/** - * @} - */ - -/** - * Read a string from pb into buf. The reading will terminate when either - * a NULL character was encountered, maxlen bytes have been read, or nothing - * more can be read from pb. The result is guaranteed to be NULL-terminated, it - * will be truncated if buf is too small. - * Note that the string is not interpreted or validated in any way, it - * might get truncated in the middle of a sequence for multi-byte encodings. - * - * @return number of bytes read (is always <= maxlen). - * If reading ends on EOF or error, the return value will be one more than - * bytes actually read. - */ -int avio_get_str(AVIOContext *pb, int maxlen, char *buf, int buflen); - -/** - * Read a UTF-16 string from pb and convert it to UTF-8. - * The reading will terminate when either a null or invalid character was - * encountered or maxlen bytes have been read. - * @return number of bytes read (is always <= maxlen) - */ -int avio_get_str16le(AVIOContext *pb, int maxlen, char *buf, int buflen); -int avio_get_str16be(AVIOContext *pb, int maxlen, char *buf, int buflen); - - -/** - * @name URL open modes - * The flags argument to avio_open must be one of the following - * constants, optionally ORed with other flags. - * @{ - */ -#define AVIO_FLAG_READ 1 /**< read-only */ -#define AVIO_FLAG_WRITE 2 /**< write-only */ -#define AVIO_FLAG_READ_WRITE (AVIO_FLAG_READ|AVIO_FLAG_WRITE) /**< read-write pseudo flag */ -/** - * @} - */ - -/** - * Use non-blocking mode. - * If this flag is set, operations on the context will return - * AVERROR(EAGAIN) if they can not be performed immediately. - * If this flag is not set, operations on the context will never return - * AVERROR(EAGAIN). - * Note that this flag does not affect the opening/connecting of the - * context. Connecting a protocol will always block if necessary (e.g. on - * network protocols) but never hang (e.g. on busy devices). - * Warning: non-blocking protocols is work-in-progress; this flag may be - * silently ignored. - */ -#define AVIO_FLAG_NONBLOCK 8 - -/** - * Use direct mode. - * avio_read and avio_write should if possible be satisfied directly - * instead of going through a buffer, and avio_seek will always - * call the underlying seek function directly. - */ -#define AVIO_FLAG_DIRECT 0x8000 - -/** - * Create and initialize a AVIOContext for accessing the - * resource indicated by url. - * @note When the resource indicated by url has been opened in - * read+write mode, the AVIOContext can be used only for writing. - * - * @param s Used to return the pointer to the created AVIOContext. - * In case of failure the pointed to value is set to NULL. - * @param url resource to access - * @param flags flags which control how the resource indicated by url - * is to be opened - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code in case of failure - */ -int avio_open(AVIOContext **s, const char *url, int flags); - -/** - * Create and initialize a AVIOContext for accessing the - * resource indicated by url. - * @note When the resource indicated by url has been opened in - * read+write mode, the AVIOContext can be used only for writing. - * - * @param s Used to return the pointer to the created AVIOContext. - * In case of failure the pointed to value is set to NULL. - * @param url resource to access - * @param flags flags which control how the resource indicated by url - * is to be opened - * @param int_cb an interrupt callback to be used at the protocols level - * @param options A dictionary filled with protocol-private options. On return - * this parameter will be destroyed and replaced with a dict containing options - * that were not found. May be NULL. - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code in case of failure - */ -int avio_open2(AVIOContext **s, const char *url, int flags, - const AVIOInterruptCB *int_cb, AVDictionary **options); - -/** - * Close the resource accessed by the AVIOContext s and free it. - * This function can only be used if s was opened by avio_open(). - * - * The internal buffer is automatically flushed before closing the - * resource. - * - * @return 0 on success, an AVERROR < 0 on error. - * @see avio_closep - */ -int avio_close(AVIOContext *s); - -/** - * Close the resource accessed by the AVIOContext *s, free it - * and set the pointer pointing to it to NULL. - * This function can only be used if s was opened by avio_open(). - * - * The internal buffer is automatically flushed before closing the - * resource. - * - * @return 0 on success, an AVERROR < 0 on error. - * @see avio_close - */ -int avio_closep(AVIOContext **s); - - -/** - * Open a write only memory stream. - * - * @param s new IO context - * @return zero if no error. - */ -int avio_open_dyn_buf(AVIOContext **s); - -/** - * Return the written size and a pointer to the buffer. - * The AVIOContext stream is left intact. - * The buffer must NOT be freed. - * No padding is added to the buffer. - * - * @param s IO context - * @param pbuffer pointer to a byte buffer - * @return the length of the byte buffer - */ -int avio_get_dyn_buf(AVIOContext *s, uint8_t **pbuffer); - -/** - * Return the written size and a pointer to the buffer. The buffer - * must be freed with av_free(). - * Padding of AV_INPUT_BUFFER_PADDING_SIZE is added to the buffer. - * - * @param s IO context - * @param pbuffer pointer to a byte buffer - * @return the length of the byte buffer - */ -int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer); - -/** - * Iterate through names of available protocols. - * - * @param opaque A private pointer representing current protocol. - * It must be a pointer to NULL on first iteration and will - * be updated by successive calls to avio_enum_protocols. - * @param output If set to 1, iterate over output protocols, - * otherwise over input protocols. - * - * @return A static string containing the name of current protocol or NULL - */ -const char *avio_enum_protocols(void **opaque, int output); - -/** - * Get AVClass by names of available protocols. - * - * @return A AVClass of input protocol name or NULL - */ -const AVClass *avio_protocol_get_class(const char *name); - -/** - * Pause and resume playing - only meaningful if using a network streaming - * protocol (e.g. MMS). - * - * @param h IO context from which to call the read_pause function pointer - * @param pause 1 for pause, 0 for resume - */ -int avio_pause(AVIOContext *h, int pause); - -/** - * Seek to a given timestamp relative to some component stream. - * Only meaningful if using a network streaming protocol (e.g. MMS.). - * - * @param h IO context from which to call the seek function pointers - * @param stream_index The stream index that the timestamp is relative to. - * If stream_index is (-1) the timestamp should be in AV_TIME_BASE - * units from the beginning of the presentation. - * If a stream_index >= 0 is used and the protocol does not support - * seeking based on component streams, the call will fail. - * @param timestamp timestamp in AVStream.time_base units - * or if there is no stream specified then in AV_TIME_BASE units. - * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE - * and AVSEEK_FLAG_ANY. The protocol may silently ignore - * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will - * fail if used and not supported. - * @return >= 0 on success - * @see AVInputFormat::read_seek - */ -int64_t avio_seek_time(AVIOContext *h, int stream_index, - int64_t timestamp, int flags); - -/* Avoid a warning. The header can not be included because it breaks c++. */ -struct AVBPrint; - -/** - * Read contents of h into print buffer, up to max_size bytes, or up to EOF. - * - * @return 0 for success (max_size bytes read or EOF reached), negative error - * code otherwise - */ -int avio_read_to_bprint(AVIOContext *h, struct AVBPrint *pb, size_t max_size); - -/** - * Accept and allocate a client context on a server context. - * @param s the server context - * @param c the client context, must be unallocated - * @return >= 0 on success or a negative value corresponding - * to an AVERROR on failure - */ -int avio_accept(AVIOContext *s, AVIOContext **c); - -/** - * Perform one step of the protocol handshake to accept a new client. - * This function must be called on a client returned by avio_accept() before - * using it as a read/write context. - * It is separate from avio_accept() because it may block. - * A step of the handshake is defined by places where the application may - * decide to change the proceedings. - * For example, on a protocol with a request header and a reply header, each - * one can constitute a step because the application may use the parameters - * from the request to change parameters in the reply; or each individual - * chunk of the request can constitute a step. - * If the handshake is already finished, avio_handshake() does nothing and - * returns 0 immediately. - * - * @param c the client context to perform the handshake on - * @return 0 on a complete and successful handshake - * > 0 if the handshake progressed, but is not complete - * < 0 for an AVERROR code - */ -int avio_handshake(AVIOContext *c); -#endif /* AVFORMAT_AVIO_H */ diff --git a/3rdparty/ffmpeg/include/libavformat/version.h b/3rdparty/ffmpeg/include/libavformat/version.h deleted file mode 100644 index 7ff14839125f8..0000000000000 --- a/3rdparty/ffmpeg/include/libavformat/version.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Version macros. - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFORMAT_VERSION_H -#define AVFORMAT_VERSION_H - -/** - * @file - * @ingroup libavf - * Libavformat version macros - */ - -#include "libavutil/version.h" - -#include "version_major.h" - -#define LIBAVFORMAT_VERSION_MINOR 3 -#define LIBAVFORMAT_VERSION_MICRO 100 - -#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ - LIBAVFORMAT_VERSION_MINOR, \ - LIBAVFORMAT_VERSION_MICRO) -#define LIBAVFORMAT_VERSION AV_VERSION(LIBAVFORMAT_VERSION_MAJOR, \ - LIBAVFORMAT_VERSION_MINOR, \ - LIBAVFORMAT_VERSION_MICRO) -#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT - -#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) - -#endif /* AVFORMAT_VERSION_H */ diff --git a/3rdparty/ffmpeg/include/libavformat/version_major.h b/3rdparty/ffmpeg/include/libavformat/version_major.h deleted file mode 100644 index c2f6e1616b793..0000000000000 --- a/3rdparty/ffmpeg/include/libavformat/version_major.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Version macros. - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVFORMAT_VERSION_MAJOR_H -#define AVFORMAT_VERSION_MAJOR_H - -/** - * @file - * @ingroup libavf - * Libavformat version macros - */ - -// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) -// Also please add any ticket numbers that you believe might be affected here -#define LIBAVFORMAT_VERSION_MAJOR 62 - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - * - * @note, when bumping the major version it is recommended to manually - * disable each FF_API_* in its own commit instead of disabling them all - * at once through the bump. This improves the git bisect-ability of the change. - * - */ -#define FF_API_COMPUTE_PKT_FIELDS2 (LIBAVFORMAT_VERSION_MAJOR < 63) - -#define FF_API_INTERNAL_TIMING (LIBAVFORMAT_VERSION_MAJOR < 63) - -#define FF_API_NO_DEFAULT_TLS_VERIFY (LIBAVFORMAT_VERSION_MAJOR < 63) - -#define FF_API_R_FRAME_RATE 1 - -#endif /* AVFORMAT_VERSION_MAJOR_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/adler32.h b/3rdparty/ffmpeg/include/libavutil/adler32.h deleted file mode 100644 index 232d07f5fe822..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/adler32.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * copyright (c) 2006 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_adler32 - * Public header for Adler-32 hash function implementation. - */ - -#ifndef AVUTIL_ADLER32_H -#define AVUTIL_ADLER32_H - -#include -#include -#include "attributes.h" - -/** - * @defgroup lavu_adler32 Adler-32 - * @ingroup lavu_hash - * Adler-32 hash function implementation. - * - * @{ - */ - -typedef uint32_t AVAdler; - -/** - * Calculate the Adler32 checksum of a buffer. - * - * Passing the return value to a subsequent av_adler32_update() call - * allows the checksum of multiple buffers to be calculated as though - * they were concatenated. - * - * @param adler initial checksum value - * @param buf pointer to input buffer - * @param len size of input buffer - * @return updated checksum - */ -AVAdler av_adler32_update(AVAdler adler, const uint8_t *buf, - size_t len) av_pure; - -/** - * @} - */ - -#endif /* AVUTIL_ADLER32_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/aes.h b/3rdparty/ffmpeg/include/libavutil/aes.h deleted file mode 100644 index 4e73473688fdb..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/aes.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * copyright (c) 2007 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AES_H -#define AVUTIL_AES_H - -#include - -#include "attributes.h" - -/** - * @defgroup lavu_aes AES - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_aes_size; - -struct AVAES; - -/** - * Allocate an AVAES context. - */ -struct AVAES *av_aes_alloc(void); - -/** - * Initialize an AVAES context. - * - * @param a The AVAES context - * @param key Pointer to the key - * @param key_bits 128, 192 or 256 - * @param decrypt 0 for encryption, 1 for decryption - */ -int av_aes_init(struct AVAES *a, const uint8_t *key, int key_bits, int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param a The AVAES context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 16 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_aes_crypt(struct AVAES *a, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_AES_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/aes_ctr.h b/3rdparty/ffmpeg/include/libavutil/aes_ctr.h deleted file mode 100644 index d98c071227694..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/aes_ctr.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * AES-CTR cipher - * Copyright (c) 2015 Eran Kornblau - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AES_CTR_H -#define AVUTIL_AES_CTR_H - -/** - * @defgroup lavu_aes_ctr AES-CTR - * @ingroup lavu_crypto - * @{ - */ - -#include - -#include "attributes.h" - -#define AES_CTR_KEY_SIZE (16) -#define AES_CTR_IV_SIZE (8) - -struct AVAESCTR; - -/** - * Allocate an AVAESCTR context. - */ -struct AVAESCTR *av_aes_ctr_alloc(void); - -/** - * Initialize an AVAESCTR context. - * - * @param a The AVAESCTR context to initialize - * @param key encryption key, must have a length of AES_CTR_KEY_SIZE - */ -int av_aes_ctr_init(struct AVAESCTR *a, const uint8_t *key); - -/** - * Release an AVAESCTR context. - * - * @param a The AVAESCTR context - */ -void av_aes_ctr_free(struct AVAESCTR *a); - -/** - * Process a buffer using a previously initialized context. - * - * @param a The AVAESCTR context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param size the size of src and dst - */ -void av_aes_ctr_crypt(struct AVAESCTR *a, uint8_t *dst, const uint8_t *src, int size); - -/** - * Get the current iv - */ -const uint8_t* av_aes_ctr_get_iv(struct AVAESCTR *a); - -/** - * Generate a random iv - */ -void av_aes_ctr_set_random_iv(struct AVAESCTR *a); - -/** - * Forcefully change the 8-byte iv - */ -void av_aes_ctr_set_iv(struct AVAESCTR *a, const uint8_t* iv); - -/** - * Forcefully change the "full" 16-byte iv, including the counter - */ -void av_aes_ctr_set_full_iv(struct AVAESCTR *a, const uint8_t* iv); - -/** - * Increment the top 64 bit of the iv (performed after each frame) - */ -void av_aes_ctr_increment_iv(struct AVAESCTR *a); - -/** - * @} - */ - -#endif /* AVUTIL_AES_CTR_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/ambient_viewing_environment.h b/3rdparty/ffmpeg/include/libavutil/ambient_viewing_environment.h deleted file mode 100644 index e5e4ac2173282..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/ambient_viewing_environment.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2023 Jan Ekström - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AMBIENT_VIEWING_ENVIRONMENT_H -#define AVUTIL_AMBIENT_VIEWING_ENVIRONMENT_H - -#include -#include "frame.h" -#include "rational.h" - -/** - * Ambient viewing environment metadata as defined by H.274. The values are - * saved in AVRationals so that they keep their exactness, while allowing for - * easy access to a double value with f.ex. av_q2d. - * - * @note sizeof(AVAmbientViewingEnvironment) is not part of the public ABI, and - * it must be allocated using av_ambient_viewing_environment_alloc. - */ -typedef struct AVAmbientViewingEnvironment { - /** - * Environmental illuminance of the ambient viewing environment in lux. - */ - AVRational ambient_illuminance; - - /** - * Normalized x chromaticity coordinate of the environmental ambient light - * in the nominal viewing environment according to the CIE 1931 definition - * of x and y as specified in ISO/CIE 11664-1. - */ - AVRational ambient_light_x; - - /** - * Normalized y chromaticity coordinate of the environmental ambient light - * in the nominal viewing environment according to the CIE 1931 definition - * of x and y as specified in ISO/CIE 11664-1. - */ - AVRational ambient_light_y; -} AVAmbientViewingEnvironment; - -/** - * Allocate an AVAmbientViewingEnvironment structure. - * - * @return the newly allocated struct or NULL on failure - */ -AVAmbientViewingEnvironment *av_ambient_viewing_environment_alloc(size_t *size); - -/** - * Allocate and add an AVAmbientViewingEnvironment structure to an existing - * AVFrame as side data. - * - * @return the newly allocated struct, or NULL on failure - */ -AVAmbientViewingEnvironment *av_ambient_viewing_environment_create_side_data(AVFrame *frame); - -#endif /* AVUTIL_AMBIENT_VIEWING_ENVIRONMENT_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/attributes.h b/3rdparty/ffmpeg/include/libavutil/attributes.h deleted file mode 100644 index d15ede12862cb..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/attributes.h +++ /dev/null @@ -1,175 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Macro definitions for various function/variable attributes - */ - -#ifndef AVUTIL_ATTRIBUTES_H -#define AVUTIL_ATTRIBUTES_H - -#ifdef __GNUC__ -# define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > (x) || __GNUC__ == (x) && __GNUC_MINOR__ >= (y)) -# define AV_GCC_VERSION_AT_MOST(x,y) (__GNUC__ < (x) || __GNUC__ == (x) && __GNUC_MINOR__ <= (y)) -#else -# define AV_GCC_VERSION_AT_LEAST(x,y) 0 -# define AV_GCC_VERSION_AT_MOST(x,y) 0 -#endif - -#ifdef __has_builtin -# define AV_HAS_BUILTIN(x) __has_builtin(x) -#else -# define AV_HAS_BUILTIN(x) 0 -#endif - -#ifndef av_always_inline -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define av_always_inline __attribute__((always_inline)) inline -#elif defined(_MSC_VER) -# define av_always_inline __forceinline -#else -# define av_always_inline inline -#endif -#endif - -#ifndef av_extern_inline -#if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__) -# define av_extern_inline extern inline -#else -# define av_extern_inline inline -#endif -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,4) -# define av_warn_unused_result __attribute__((warn_unused_result)) -#else -# define av_warn_unused_result -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define av_noinline __attribute__((noinline)) -#elif defined(_MSC_VER) -# define av_noinline __declspec(noinline) -#else -# define av_noinline -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) -# define av_pure __attribute__((pure)) -#else -# define av_pure -#endif - -#if AV_GCC_VERSION_AT_LEAST(2,6) || defined(__clang__) -# define av_const __attribute__((const)) -#else -# define av_const -#endif - -#if AV_GCC_VERSION_AT_LEAST(4,3) || defined(__clang__) -# define av_cold __attribute__((cold)) -#else -# define av_cold -#endif - -#if AV_GCC_VERSION_AT_LEAST(4,1) && !defined(__llvm__) -# define av_flatten __attribute__((flatten)) -#else -# define av_flatten -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,1) -# define attribute_deprecated __attribute__((deprecated)) -#elif defined(_MSC_VER) -# define attribute_deprecated __declspec(deprecated) -#else -# define attribute_deprecated -#endif - -/** - * Disable warnings about deprecated features - * This is useful for sections of code kept for backward compatibility and - * scheduled for removal. - */ -#ifndef AV_NOWARN_DEPRECATED -#if AV_GCC_VERSION_AT_LEAST(4,6) || defined(__clang__) -# define AV_NOWARN_DEPRECATED(code) \ - _Pragma("GCC diagnostic push") \ - _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ - code \ - _Pragma("GCC diagnostic pop") -#elif defined(_MSC_VER) -# define AV_NOWARN_DEPRECATED(code) \ - __pragma(warning(push)) \ - __pragma(warning(disable : 4996)) \ - code; \ - __pragma(warning(pop)) -#else -# define AV_NOWARN_DEPRECATED(code) code -#endif -#endif - -#if defined(__GNUC__) || defined(__clang__) -# define av_unused __attribute__((unused)) -#else -# define av_unused -#endif - -/** - * Mark a variable as used and prevent the compiler from optimizing it - * away. This is useful for variables accessed only from inline - * assembler without the compiler being aware. - */ -#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) -# define av_used __attribute__((used)) -#else -# define av_used -#endif - -#if AV_GCC_VERSION_AT_LEAST(3,3) || defined(__clang__) -# define av_alias __attribute__((may_alias)) -#else -# define av_alias -#endif - -#if (defined(__GNUC__) || defined(__clang__)) && !defined(__INTEL_COMPILER) -# define av_uninit(x) x=x -#else -# define av_uninit(x) x -#endif - -#if defined(__GNUC__) || defined(__clang__) -# define av_builtin_constant_p __builtin_constant_p -# define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos))) -# define av_scanf_format(fmtpos, attrpos) __attribute__((__format__(__scanf__, fmtpos, attrpos))) -#else -# define av_builtin_constant_p(x) 0 -# define av_printf_format(fmtpos, attrpos) -# define av_scanf_format(fmtpos, attrpos) -#endif - -#if AV_GCC_VERSION_AT_LEAST(2,5) || defined(__clang__) -# define av_noreturn __attribute__((noreturn)) -#else -# define av_noreturn -#endif - -#endif /* AVUTIL_ATTRIBUTES_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/audio_fifo.h b/3rdparty/ffmpeg/include/libavutil/audio_fifo.h deleted file mode 100644 index fa5f59a2bef2b..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/audio_fifo.h +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Audio FIFO - * Copyright (c) 2012 Justin Ruggles - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Audio FIFO Buffer - */ - -#ifndef AVUTIL_AUDIO_FIFO_H -#define AVUTIL_AUDIO_FIFO_H - -#include "attributes.h" -#include "samplefmt.h" - -/** - * @addtogroup lavu_audio - * @{ - * - * @defgroup lavu_audiofifo Audio FIFO Buffer - * @{ - */ - -/** - * Context for an Audio FIFO Buffer. - * - * - Operates at the sample level rather than the byte level. - * - Supports multiple channels with either planar or packed sample format. - * - Automatic reallocation when writing to a full buffer. - */ -typedef struct AVAudioFifo AVAudioFifo; - -/** - * Free an AVAudioFifo. - * - * @param af AVAudioFifo to free - */ -void av_audio_fifo_free(AVAudioFifo *af); - -/** - * Allocate an AVAudioFifo. - * - * @param sample_fmt sample format - * @param channels number of channels - * @param nb_samples initial allocation size, in samples - * @return newly allocated AVAudioFifo, or NULL on error - */ -AVAudioFifo *av_audio_fifo_alloc(enum AVSampleFormat sample_fmt, int channels, - int nb_samples); - -/** - * Reallocate an AVAudioFifo. - * - * @param af AVAudioFifo to reallocate - * @param nb_samples new allocation size, in samples - * @return 0 if OK, or negative AVERROR code on failure - */ -av_warn_unused_result -int av_audio_fifo_realloc(AVAudioFifo *af, int nb_samples); - -/** - * Write data to an AVAudioFifo. - * - * The AVAudioFifo will be reallocated automatically if the available space - * is less than nb_samples. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to write to - * @param data audio data plane pointers - * @param nb_samples number of samples to write - * @return number of samples actually written, or negative AVERROR - * code on failure. If successful, the number of samples - * actually written will always be nb_samples. - */ -int av_audio_fifo_write(AVAudioFifo *af, void * const *data, int nb_samples); - -/** - * Peek data from an AVAudioFifo. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to read from - * @param data audio data plane pointers - * @param nb_samples number of samples to peek - * @return number of samples actually peek, or negative AVERROR code - * on failure. The number of samples actually peek will not - * be greater than nb_samples, and will only be less than - * nb_samples if av_audio_fifo_size is less than nb_samples. - */ -int av_audio_fifo_peek(const AVAudioFifo *af, void * const *data, int nb_samples); - -/** - * Peek data from an AVAudioFifo. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to read from - * @param data audio data plane pointers - * @param nb_samples number of samples to peek - * @param offset offset from current read position - * @return number of samples actually peek, or negative AVERROR code - * on failure. The number of samples actually peek will not - * be greater than nb_samples, and will only be less than - * nb_samples if av_audio_fifo_size is less than nb_samples. - */ -int av_audio_fifo_peek_at(const AVAudioFifo *af, void * const *data, - int nb_samples, int offset); - -/** - * Read data from an AVAudioFifo. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param af AVAudioFifo to read from - * @param data audio data plane pointers - * @param nb_samples number of samples to read - * @return number of samples actually read, or negative AVERROR code - * on failure. The number of samples actually read will not - * be greater than nb_samples, and will only be less than - * nb_samples if av_audio_fifo_size is less than nb_samples. - */ -int av_audio_fifo_read(AVAudioFifo *af, void * const *data, int nb_samples); - -/** - * Drain data from an AVAudioFifo. - * - * Removes the data without reading it. - * - * @param af AVAudioFifo to drain - * @param nb_samples number of samples to drain - * @return 0 if OK, or negative AVERROR code on failure - */ -int av_audio_fifo_drain(AVAudioFifo *af, int nb_samples); - -/** - * Reset the AVAudioFifo buffer. - * - * This empties all data in the buffer. - * - * @param af AVAudioFifo to reset - */ -void av_audio_fifo_reset(AVAudioFifo *af); - -/** - * Get the current number of samples in the AVAudioFifo available for reading. - * - * @param af the AVAudioFifo to query - * @return number of samples available for reading - */ -int av_audio_fifo_size(AVAudioFifo *af); - -/** - * Get the current number of samples in the AVAudioFifo available for writing. - * - * @param af the AVAudioFifo to query - * @return number of samples available for writing - */ -int av_audio_fifo_space(AVAudioFifo *af); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_AUDIO_FIFO_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/avassert.h b/3rdparty/ffmpeg/include/libavutil/avassert.h deleted file mode 100644 index f4f039dfb0289..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/avassert.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * copyright (c) 2010 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * simple assert() macros that are a bit more flexible than ISO C assert(). - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_AVASSERT_H -#define AVUTIL_AVASSERT_H - -#include -#ifdef HAVE_AV_CONFIG_H -# include "config.h" -#endif -#include "attributes.h" -#include "log.h" -#include "macros.h" - -/** - * assert() equivalent, that is always enabled. - */ -#define av_assert0(cond) do { \ - if (!(cond)) { \ - av_log(NULL, AV_LOG_PANIC, "Assertion %s failed at %s:%d\n", \ - AV_STRINGIFY(cond), __FILE__, __LINE__); \ - abort(); \ - } \ -} while (0) - - -/** - * assert() equivalent, that does not lie in speed critical code. - * These asserts() thus can be enabled without fearing speed loss. - */ -#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 0 -#define av_assert1(cond) av_assert0(cond) -#else -#define av_assert1(cond) ((void)0) -#endif - - -/** - * assert() equivalent, that does lie in speed critical code. - */ -#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1 -#define av_assert2(cond) av_assert0(cond) -#define av_assert2_fpu() av_assert0_fpu() -#else -#define av_assert2(cond) ((void)0) -#define av_assert2_fpu() ((void)0) -#endif - -/** - * Assert that floating point operations can be executed. - * - * This will av_assert0() that the cpu is not in MMX state on X86 - */ -void av_assert0_fpu(void); - -/** - * Asserts that are used as compiler optimization hints depending - * upon ASSERT_LEVEL and NBDEBUG. - * - * Undefined behaviour occurs if execution reaches a point marked - * with av_unreachable() or if a condition used with av_assume() - * is false. - * - * The condition used with av_assume() should not have side-effects - * and should be visible to the compiler. - */ -#if defined(ASSERT_LEVEL) ? ASSERT_LEVEL > 0 : !defined(HAVE_AV_CONFIG_H) && !defined(NDEBUG) -#define av_unreachable(msg) \ -do { \ - av_log(NULL, AV_LOG_PANIC, \ - "Reached supposedly unreachable code at %s:%d: %s\n", \ - __FILE__, __LINE__, msg); \ - abort(); \ -} while (0) -#define av_assume(cond) av_assert0(cond) -#else -#if AV_GCC_VERSION_AT_LEAST(4, 5) || AV_HAS_BUILTIN(__builtin_unreachable) -#define av_unreachable(msg) __builtin_unreachable() -#elif defined(_MSC_VER) -#define av_unreachable(msg) __assume(0) -#elif __STDC_VERSION__ >= 202311L -#include -#define av_unreachable(msg) unreachable() -#else -#define av_unreachable(msg) ((void)0) -#endif - -#if AV_HAS_BUILTIN(__builtin_assume) -#define av_assume(cond) __builtin_assume(cond) -#elif defined(_MSC_VER) -#define av_assume(cond) __assume(cond) -#else -#define av_assume(cond) do { \ - if (!(cond)) \ - av_unreachable(); \ -} while (0) -#endif -#endif - -#endif /* AVUTIL_AVASSERT_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/avconfig.h b/3rdparty/ffmpeg/include/libavutil/avconfig.h deleted file mode 100644 index c289fbb551c1f..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/avconfig.h +++ /dev/null @@ -1,6 +0,0 @@ -/* Generated by ffmpeg configure */ -#ifndef AVUTIL_AVCONFIG_H -#define AVUTIL_AVCONFIG_H -#define AV_HAVE_BIGENDIAN 0 -#define AV_HAVE_FAST_UNALIGNED 1 -#endif /* AVUTIL_AVCONFIG_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/avstring.h b/3rdparty/ffmpeg/include/libavutil/avstring.h deleted file mode 100644 index 17f7b03db5282..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/avstring.h +++ /dev/null @@ -1,428 +0,0 @@ -/* - * Copyright (c) 2007 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AVSTRING_H -#define AVUTIL_AVSTRING_H - -#include -#include -#include "attributes.h" - -/** - * @addtogroup lavu_string - * @{ - */ - -/** - * Return non-zero if pfx is a prefix of str. If it is, *ptr is set to - * the address of the first character in str after the prefix. - * - * @param str input string - * @param pfx prefix to test - * @param ptr updated if the prefix is matched inside str - * @return non-zero if the prefix matches, zero otherwise - */ -int av_strstart(const char *str, const char *pfx, const char **ptr); - -/** - * Return non-zero if pfx is a prefix of str independent of case. If - * it is, *ptr is set to the address of the first character in str - * after the prefix. - * - * @param str input string - * @param pfx prefix to test - * @param ptr updated if the prefix is matched inside str - * @return non-zero if the prefix matches, zero otherwise - */ -int av_stristart(const char *str, const char *pfx, const char **ptr); - -/** - * Locate the first case-independent occurrence in the string haystack - * of the string needle. A zero-length string needle is considered to - * match at the start of haystack. - * - * This function is a case-insensitive version of the standard strstr(). - * - * @param haystack string to search in - * @param needle string to search for - * @return pointer to the located match within haystack - * or a null pointer if no match - */ -char *av_stristr(const char *haystack, const char *needle); - -/** - * Locate the first occurrence of the string needle in the string haystack - * where not more than hay_length characters are searched. A zero-length - * string needle is considered to match at the start of haystack. - * - * This function is a length-limited version of the standard strstr(). - * - * @param haystack string to search in - * @param needle string to search for - * @param hay_length length of string to search in - * @return pointer to the located match within haystack - * or a null pointer if no match - */ -char *av_strnstr(const char *haystack, const char *needle, size_t hay_length); - -/** - * Copy the string src to dst, but no more than size - 1 bytes, and - * null-terminate dst. - * - * This function is the same as BSD strlcpy(). - * - * @param dst destination buffer - * @param src source string - * @param size size of destination buffer - * @return the length of src - * - * @warning since the return value is the length of src, src absolutely - * _must_ be a properly 0-terminated string, otherwise this will read beyond - * the end of the buffer and possibly crash. - */ -size_t av_strlcpy(char *dst, const char *src, size_t size); - -/** - * Append the string src to the string dst, but to a total length of - * no more than size - 1 bytes, and null-terminate dst. - * - * This function is similar to BSD strlcat(), but differs when - * size <= strlen(dst). - * - * @param dst destination buffer - * @param src source string - * @param size size of destination buffer - * @return the total length of src and dst - * - * @warning since the return value use the length of src and dst, these - * absolutely _must_ be a properly 0-terminated strings, otherwise this - * will read beyond the end of the buffer and possibly crash. - */ -size_t av_strlcat(char *dst, const char *src, size_t size); - -/** - * Append output to a string, according to a format. Never write out of - * the destination buffer, and always put a terminating 0 within - * the buffer. - * @param dst destination buffer (string to which the output is - * appended) - * @param size total size of the destination buffer - * @param fmt printf-compatible format string, specifying how the - * following parameters are used - * @return the length of the string that would have been generated - * if enough space had been available - */ -size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) av_printf_format(3, 4); - -/** - * Get the count of continuous non zero chars starting from the beginning. - * - * @param s the string whose length to count - * @param len maximum number of characters to check in the string, that - * is the maximum value which is returned by the function - */ -static inline size_t av_strnlen(const char *s, size_t len) -{ - size_t i; - for (i = 0; i < len && s[i]; i++) - ; - return i; -} - -/** - * Print arguments following specified format into a large enough auto - * allocated buffer. It is similar to GNU asprintf(). - * @param fmt printf-compatible format string, specifying how the - * following parameters are used. - * @return the allocated string - * @note You have to free the string yourself with av_free(). - */ -char *av_asprintf(const char *fmt, ...) av_printf_format(1, 2); - -/** - * Unescape the given string until a non escaped terminating char, - * and return the token corresponding to the unescaped string. - * - * The normal \ and ' escaping is supported. Leading and trailing - * whitespaces are removed, unless they are escaped with '\' or are - * enclosed between ''. - * - * @param buf the buffer to parse, buf will be updated to point to the - * terminating char - * @param term a 0-terminated list of terminating chars - * @return the malloced unescaped string, which must be av_freed by - * the user, NULL in case of allocation failure - */ -char *av_get_token(const char **buf, const char *term); - -/** - * Split the string into several tokens which can be accessed by - * successive calls to av_strtok(). - * - * A token is defined as a sequence of characters not belonging to the - * set specified in delim. - * - * On the first call to av_strtok(), s should point to the string to - * parse, and the value of saveptr is ignored. In subsequent calls, s - * should be NULL, and saveptr should be unchanged since the previous - * call. - * - * This function is similar to strtok_r() defined in POSIX.1. - * - * @param s the string to parse, may be NULL - * @param delim 0-terminated list of token delimiters, must be non-NULL - * @param saveptr user-provided pointer which points to stored - * information necessary for av_strtok() to continue scanning the same - * string. saveptr is updated to point to the next character after the - * first delimiter found, or to NULL if the string was terminated - * @return the found token, or NULL when no token is found - */ -char *av_strtok(char *s, const char *delim, char **saveptr); - -/** - * Locale-independent conversion of ASCII isdigit. - */ -static inline av_const int av_isdigit(int c) -{ - return c >= '0' && c <= '9'; -} - -/** - * Locale-independent conversion of ASCII isgraph. - */ -static inline av_const int av_isgraph(int c) -{ - return c > 32 && c < 127; -} - -/** - * Locale-independent conversion of ASCII isspace. - */ -static inline av_const int av_isspace(int c) -{ - return c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || - c == '\v'; -} - -/** - * Locale-independent conversion of ASCII characters to uppercase. - */ -static inline av_const int av_toupper(int c) -{ - if (c >= 'a' && c <= 'z') - c ^= 0x20; - return c; -} - -/** - * Locale-independent conversion of ASCII characters to lowercase. - */ -static inline av_const int av_tolower(int c) -{ - if (c >= 'A' && c <= 'Z') - c ^= 0x20; - return c; -} - -/** - * Locale-independent conversion of ASCII isxdigit. - */ -static inline av_const int av_isxdigit(int c) -{ - c = av_tolower(c); - return av_isdigit(c) || (c >= 'a' && c <= 'f'); -} - -/** - * Locale-independent case-insensitive compare. - * @note This means only ASCII-range characters are case-insensitive - */ -int av_strcasecmp(const char *a, const char *b); - -/** - * Locale-independent case-insensitive compare. - * @note This means only ASCII-range characters are case-insensitive - */ -int av_strncasecmp(const char *a, const char *b, size_t n); - -/** - * Locale-independent strings replace. - * @note This means only ASCII-range characters are replaced. - */ -char *av_strireplace(const char *str, const char *from, const char *to); - -/** - * Thread safe basename. - * @param path the string to parse, on DOS both \ and / are considered separators. - * @return pointer to the basename substring. - * If path does not contain a slash, the function returns a copy of path. - * If path is a NULL pointer or points to an empty string, a pointer - * to a string "." is returned. - */ -const char *av_basename(const char *path); - -/** - * Thread safe dirname. - * @param path the string to parse, on DOS both \ and / are considered separators. - * @return A pointer to a string that's the parent directory of path. - * If path is a NULL pointer or points to an empty string, a pointer - * to a string "." is returned. - * @note the function may modify the contents of the path, so copies should be passed. - */ -const char *av_dirname(char *path); - -/** - * Match instances of a name in a comma-separated list of names. - * List entries are checked from the start to the end of the names list, - * the first match ends further processing. If an entry prefixed with '-' - * matches, then 0 is returned. The "ALL" list entry is considered to - * match all names. - * - * @param name Name to look for. - * @param names List of names. - * @return 1 on match, 0 otherwise. - */ -int av_match_name(const char *name, const char *names); - -/** - * Append path component to the existing path. - * Path separator '/' is placed between when needed. - * Resulting string have to be freed with av_free(). - * @param path base path - * @param component component to be appended - * @return new path or NULL on error. - */ -char *av_append_path_component(const char *path, const char *component); - -enum AVEscapeMode { - AV_ESCAPE_MODE_AUTO, ///< Use auto-selected escaping mode. - AV_ESCAPE_MODE_BACKSLASH, ///< Use backslash escaping. - AV_ESCAPE_MODE_QUOTE, ///< Use single-quote escaping. - AV_ESCAPE_MODE_XML, ///< Use XML non-markup character data escaping. -}; - -/** - * Consider spaces special and escape them even in the middle of the - * string. - * - * This is equivalent to adding the whitespace characters to the special - * characters lists, except it is guaranteed to use the exact same list - * of whitespace characters as the rest of libavutil. - */ -#define AV_ESCAPE_FLAG_WHITESPACE (1 << 0) - -/** - * Escape only specified special characters. - * Without this flag, escape also any characters that may be considered - * special by av_get_token(), such as the single quote. - */ -#define AV_ESCAPE_FLAG_STRICT (1 << 1) - -/** - * Within AV_ESCAPE_MODE_XML, additionally escape single quotes for single - * quoted attributes. - */ -#define AV_ESCAPE_FLAG_XML_SINGLE_QUOTES (1 << 2) - -/** - * Within AV_ESCAPE_MODE_XML, additionally escape double quotes for double - * quoted attributes. - */ -#define AV_ESCAPE_FLAG_XML_DOUBLE_QUOTES (1 << 3) - - -/** - * Escape string in src, and put the escaped string in an allocated - * string in *dst, which must be freed with av_free(). - * - * @param dst pointer where an allocated string is put - * @param src string to escape, must be non-NULL - * @param special_chars string containing the special characters which - * need to be escaped, can be NULL - * @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. - * Any unknown value for mode will be considered equivalent to - * AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without - * notice. - * @param flags flags which control how to escape, see AV_ESCAPE_FLAG_ macros - * @return the length of the allocated string, or a negative error code in case of error - * @see av_bprint_escape() - */ -av_warn_unused_result -int av_escape(char **dst, const char *src, const char *special_chars, - enum AVEscapeMode mode, int flags); - -#define AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES 1 ///< accept codepoints over 0x10FFFF -#define AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS 2 ///< accept non-characters - 0xFFFE and 0xFFFF -#define AV_UTF8_FLAG_ACCEPT_SURROGATES 4 ///< accept UTF-16 surrogates codes -#define AV_UTF8_FLAG_EXCLUDE_XML_INVALID_CONTROL_CODES 8 ///< exclude control codes not accepted by XML - -#define AV_UTF8_FLAG_ACCEPT_ALL \ - AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES|AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS|AV_UTF8_FLAG_ACCEPT_SURROGATES - -/** - * Read and decode a single UTF-8 code point (character) from the - * buffer in *buf, and update *buf to point to the next byte to - * decode. - * - * In case of an invalid byte sequence, the pointer will be updated to - * the next byte after the invalid sequence and the function will - * return an error code. - * - * Depending on the specified flags, the function will also fail in - * case the decoded code point does not belong to a valid range. - * - * @note For speed-relevant code a carefully implemented use of - * GET_UTF8() may be preferred. - * - * @param codep pointer used to return the parsed code in case of success. - * The value in *codep is set even in case the range check fails. - * @param bufp pointer to the address the first byte of the sequence - * to decode, updated by the function to point to the - * byte next after the decoded sequence - * @param buf_end pointer to the end of the buffer, points to the next - * byte past the last in the buffer. This is used to - * avoid buffer overreads (in case of an unfinished - * UTF-8 sequence towards the end of the buffer). - * @param flags a collection of AV_UTF8_FLAG_* flags - * @return >= 0 in case a sequence was successfully read, a negative - * value in case of invalid sequence - */ -av_warn_unused_result -int av_utf8_decode(int32_t *codep, const uint8_t **bufp, const uint8_t *buf_end, - unsigned int flags); - -/** - * Check if a name is in a list. - * @returns 0 if not found, or the 1 based index where it has been found in the - * list. - */ -int av_match_list(const char *name, const char *list, char separator); - -/** - * See libc sscanf manual for more information. - * Locale-independent sscanf implementation. - */ -int av_sscanf(const char *string, const char *format, ...) av_scanf_format(2, 3); - -/** - * @} - */ - -#endif /* AVUTIL_AVSTRING_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/avutil.h b/3rdparty/ffmpeg/include/libavutil/avutil.h deleted file mode 100644 index c8ae114ab6f37..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/avutil.h +++ /dev/null @@ -1,364 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_AVUTIL_H -#define AVUTIL_AVUTIL_H - -/** - * @file - * @ingroup lavu - * Convenience header that includes @ref lavu "libavutil"'s core. - */ - -/** - * @mainpage - * - * @section ffmpeg_intro Introduction - * - * This document describes the usage of the different libraries - * provided by FFmpeg. - * - * @li @ref libavc "libavcodec" encoding/decoding library - * @li @ref lavfi "libavfilter" graph-based frame editing library - * @li @ref libavf "libavformat" I/O and muxing/demuxing library - * @li @ref lavd "libavdevice" special devices muxing/demuxing library - * @li @ref lavu "libavutil" common utility library - * @li @ref lswr "libswresample" audio resampling, format conversion and mixing - * @li @ref libsws "libswscale" color conversion and scaling library - * - * @section ffmpeg_versioning Versioning and compatibility - * - * Each of the FFmpeg libraries contains a version.h header, which defines a - * major, minor and micro version number with the - * LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO} macros. The major version - * number is incremented with backward incompatible changes - e.g. removing - * parts of the public API, reordering public struct members, etc. The minor - * version number is incremented for backward compatible API changes or major - * new features - e.g. adding a new public function or a new decoder. The micro - * version number is incremented for smaller changes that a calling program - * might still want to check for - e.g. changing behavior in a previously - * unspecified situation. - * - * FFmpeg guarantees backward API and ABI compatibility for each library as long - * as its major version number is unchanged. This means that no public symbols - * will be removed or renamed. Types and names of the public struct members and - * values of public macros and enums will remain the same (unless they were - * explicitly declared as not part of the public API). Documented behavior will - * not change. - * - * In other words, any correct program that works with a given FFmpeg snapshot - * should work just as well without any changes with any later snapshot with the - * same major versions. This applies to both rebuilding the program against new - * FFmpeg versions or to replacing the dynamic FFmpeg libraries that a program - * links against. - * - * However, new public symbols may be added and new members may be appended to - * public structs whose size is not part of public ABI (most public structs in - * FFmpeg). New macros and enum values may be added. Behavior in undocumented - * situations may change slightly (and be documented). All those are accompanied - * by an entry in doc/APIchanges and incrementing either the minor or micro - * version number. - */ - -/** - * @defgroup lavu libavutil - * Common code shared across all FFmpeg libraries. - * - * @note - * libavutil is designed to be modular. In most cases, in order to use the - * functions provided by one component of libavutil you must explicitly include - * the specific header containing that feature. If you are only using - * media-related components, you could simply include libavutil/avutil.h, which - * brings in most of the "core" components. - * - * @{ - * - * @defgroup lavu_crypto Crypto and Hashing - * - * @{ - * @} - * - * @defgroup lavu_math Mathematics - * @{ - * - * @} - * - * @defgroup lavu_string String Manipulation - * - * @{ - * - * @} - * - * @defgroup lavu_mem Memory Management - * - * @{ - * - * @} - * - * @defgroup lavu_data Data Structures - * @{ - * - * @} - * - * @defgroup lavu_video Video related - * - * @{ - * - * @} - * - * @defgroup lavu_audio Audio related - * - * @{ - * - * @} - * - * @defgroup lavu_error Error Codes - * - * @{ - * - * @} - * - * @defgroup lavu_log Logging Facility - * - * @{ - * - * @} - * - * @defgroup lavu_misc Other - * - * @{ - * - * @defgroup preproc_misc Preprocessor String Macros - * - * @{ - * - * @} - * - * @defgroup version_utils Library Version Macros - * - * @{ - * - * @} - */ - - -/** - * @addtogroup lavu_ver - * @{ - */ - -/** - * Return the LIBAVUTIL_VERSION_INT constant. - */ -unsigned avutil_version(void); - -/** - * Return an informative version string. This usually is the actual release - * version number or a git commit description. This string has no fixed format - * and can change any time. It should never be parsed by code. - */ -const char *av_version_info(void); - -/** - * Return the libavutil build-time configuration. - */ -const char *avutil_configuration(void); - -/** - * Return the libavutil license. - */ -const char *avutil_license(void); - -/** - * @} - */ - -/** - * @addtogroup lavu_media Media Type - * @brief Media Type - */ - -enum AVMediaType { - AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA - AVMEDIA_TYPE_VIDEO, - AVMEDIA_TYPE_AUDIO, - AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous - AVMEDIA_TYPE_SUBTITLE, - AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse - AVMEDIA_TYPE_NB -}; - -/** - * Return a string describing the media_type enum, NULL if media_type - * is unknown. - */ -const char *av_get_media_type_string(enum AVMediaType media_type); - -/** - * @defgroup lavu_const Constants - * @{ - * - * @defgroup lavu_enc Encoding specific - * - * @note those definition should move to avcodec - * @{ - */ - -#define FF_LAMBDA_SHIFT 7 -#define FF_LAMBDA_SCALE (1< - -/** - * @defgroup lavu_base64 Base64 - * @ingroup lavu_crypto - * @{ - */ - -/** - * Decode a base64-encoded string. - * - * @param out buffer for decoded data - * @param in null-terminated input string - * @param out_size size in bytes of the out buffer, must be at - * least 3/4 of the length of in, that is AV_BASE64_DECODE_SIZE(strlen(in)) - * @return number of bytes written, or a negative value in case of - * invalid input - */ -int av_base64_decode(uint8_t *out, const char *in, int out_size); - -/** - * Calculate the output size in bytes needed to decode a base64 string - * with length x to a data buffer. - */ -#define AV_BASE64_DECODE_SIZE(x) ((x) * 3LL / 4) - -/** - * Encode data to base64 and null-terminate. - * - * @param out buffer for encoded data - * @param out_size size in bytes of the out buffer (including the - * null terminator), must be at least AV_BASE64_SIZE(in_size) - * @param in input buffer containing the data to encode - * @param in_size size in bytes of the in buffer - * @return out or NULL in case of error - */ -char *av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size); - -/** - * Calculate the output size needed to base64-encode x bytes to a - * null-terminated string. - */ -#define AV_BASE64_SIZE(x) (((x)+2) / 3 * 4 + 1) - - /** - * @} - */ - -#endif /* AVUTIL_BASE64_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/blowfish.h b/3rdparty/ffmpeg/include/libavutil/blowfish.h deleted file mode 100644 index 9e289a40dabe5..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/blowfish.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Blowfish algorithm - * Copyright (c) 2012 Samuel Pitoiset - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_BLOWFISH_H -#define AVUTIL_BLOWFISH_H - -#include - -/** - * @defgroup lavu_blowfish Blowfish - * @ingroup lavu_crypto - * @{ - */ - -#define AV_BF_ROUNDS 16 - -typedef struct AVBlowfish { - uint32_t p[AV_BF_ROUNDS + 2]; - uint32_t s[4][256]; -} AVBlowfish; - -/** - * Allocate an AVBlowfish context. - */ -AVBlowfish *av_blowfish_alloc(void); - -/** - * Initialize an AVBlowfish context. - * - * @param ctx an AVBlowfish context - * @param key a key - * @param key_len length of the key - */ -void av_blowfish_init(struct AVBlowfish *ctx, const uint8_t *key, int key_len); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVBlowfish context - * @param xl left four bytes halves of input to be encrypted - * @param xr right four bytes halves of input to be encrypted - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_blowfish_crypt_ecb(struct AVBlowfish *ctx, uint32_t *xl, uint32_t *xr, - int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVBlowfish context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_blowfish_crypt(struct AVBlowfish *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_BLOWFISH_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/bprint.h b/3rdparty/ffmpeg/include/libavutil/bprint.h deleted file mode 100644 index 4ac857056187a..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/bprint.h +++ /dev/null @@ -1,254 +0,0 @@ -/* - * Copyright (c) 2012 Nicolas George - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_avbprint - * AVBPrint public header - */ - -#ifndef AVUTIL_BPRINT_H -#define AVUTIL_BPRINT_H - -#include - -#include "attributes.h" -#include "avstring.h" - -/** - * @defgroup lavu_avbprint AVBPrint - * @ingroup lavu_data - * - * A buffer to print data progressively - * @{ - */ - -/** - * Define a structure with extra padding to a fixed size - * This helps ensuring binary compatibility with future versions. - */ - -#define FF_PAD_STRUCTURE(name, size, ...) \ -struct ff_pad_helper_##name { __VA_ARGS__ }; \ -typedef struct name { \ - __VA_ARGS__ \ - char reserved_padding[size - sizeof(struct ff_pad_helper_##name)]; \ -} name; - -/** - * Buffer to print data progressively - * - * The string buffer grows as necessary and is always 0-terminated. - * The content of the string is never accessed, and thus is - * encoding-agnostic and can even hold binary data. - * - * Small buffers are kept in the structure itself, and thus require no - * memory allocation at all (unless the contents of the buffer is needed - * after the structure goes out of scope). This is almost as lightweight as - * declaring a local `char buf[512]`. - * - * The length of the string can go beyond the allocated size: the buffer is - * then truncated, but the functions still keep account of the actual total - * length. - * - * In other words, AVBPrint.len can be greater than AVBPrint.size and records - * the total length of what would have been to the buffer if there had been - * enough memory. - * - * Append operations do not need to be tested for failure: if a memory - * allocation fails, data stop being appended to the buffer, but the length - * is still updated. This situation can be tested with - * av_bprint_is_complete(). - * - * The AVBPrint.size_max field determines several possible behaviours: - * - `size_max = -1` (= `UINT_MAX`) or any large value will let the buffer be - * reallocated as necessary, with an amortized linear cost. - * - `size_max = 0` prevents writing anything to the buffer: only the total - * length is computed. The write operations can then possibly be repeated in - * a buffer with exactly the necessary size - * (using `size_init = size_max = len + 1`). - * - `size_max = 1` is automatically replaced by the exact size available in the - * structure itself, thus ensuring no dynamic memory allocation. The - * internal buffer is large enough to hold a reasonable paragraph of text, - * such as the current paragraph. - */ - -FF_PAD_STRUCTURE(AVBPrint, 1024, - char *str; /**< string so far */ - unsigned len; /**< length so far */ - unsigned size; /**< allocated memory */ - unsigned size_max; /**< maximum allocated memory */ - char reserved_internal_buffer[1]; -) - -/** - * @name Max size special values - * Convenience macros for special values for av_bprint_init() size_max - * parameter. - * @{ - */ - -/** - * Buffer will be reallocated as necessary, with an amortized linear cost. - */ -#define AV_BPRINT_SIZE_UNLIMITED ((unsigned)-1) -/** - * Use the exact size available in the AVBPrint structure itself. - * - * Thus ensuring no dynamic memory allocation. The internal buffer is large - * enough to hold a reasonable paragraph of text, such as the current paragraph. - */ -#define AV_BPRINT_SIZE_AUTOMATIC 1 -/** - * Do not write anything to the buffer, only calculate the total length. - * - * The write operations can then possibly be repeated in a buffer with - * exactly the necessary size (using `size_init = size_max = AVBPrint.len + 1`). - */ -#define AV_BPRINT_SIZE_COUNT_ONLY 0 -/** @} */ - -/** - * Init a print buffer. - * - * @param buf buffer to init - * @param size_init initial size (including the final 0) - * @param size_max maximum size; - * - `0` means do not write anything, just count the length - * - `1` is replaced by the maximum value for automatic storage - * any large value means that the internal buffer will be - * reallocated as needed up to that limit - * - `-1` is converted to `UINT_MAX`, the largest limit possible. - * Check also `AV_BPRINT_SIZE_*` macros. - */ -void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max); - -/** - * Init a print buffer using a pre-existing buffer. - * - * The buffer will not be reallocated. - * In case size equals zero, the AVBPrint will be initialized to use - * the internal buffer as if using AV_BPRINT_SIZE_COUNT_ONLY with - * av_bprint_init(). - * - * @param buf buffer structure to init - * @param buffer byte buffer to use for the string data - * @param size size of buffer - */ -void av_bprint_init_for_buffer(AVBPrint *buf, char *buffer, unsigned size); - -/** - * Append a formatted string to a print buffer. - */ -void av_bprintf(AVBPrint *buf, const char *fmt, ...) av_printf_format(2, 3); - -/** - * Append a formatted string to a print buffer. - */ -void av_vbprintf(AVBPrint *buf, const char *fmt, va_list vl_arg); - -/** - * Append char c n times to a print buffer. - */ -void av_bprint_chars(AVBPrint *buf, char c, unsigned n); - -/** - * Append data to a print buffer. - * - * @param buf bprint buffer to use - * @param data pointer to data - * @param size size of data - */ -void av_bprint_append_data(AVBPrint *buf, const char *data, unsigned size); - -struct tm; -/** - * Append a formatted date and time to a print buffer. - * - * @param buf bprint buffer to use - * @param fmt date and time format string, see strftime() - * @param tm broken-down time structure to translate - * - * @note due to poor design of the standard strftime function, it may - * produce poor results if the format string expands to a very long text and - * the bprint buffer is near the limit stated by the size_max option. - */ -void av_bprint_strftime(AVBPrint *buf, const char *fmt, const struct tm *tm); - -/** - * Allocate bytes in the buffer for external use. - * - * @param[in] buf buffer structure - * @param[in] size required size - * @param[out] mem pointer to the memory area - * @param[out] actual_size size of the memory area after allocation; - * can be larger or smaller than size - */ -void av_bprint_get_buffer(AVBPrint *buf, unsigned size, - unsigned char **mem, unsigned *actual_size); - -/** - * Reset the string to "" but keep internal allocated data. - */ -void av_bprint_clear(AVBPrint *buf); - -/** - * Test if the print buffer is complete (not truncated). - * - * It may have been truncated due to a memory allocation failure - * or the size_max limit (compare size and size_max if necessary). - */ -static inline int av_bprint_is_complete(const AVBPrint *buf) -{ - return buf->len < buf->size; -} - -/** - * Finalize a print buffer. - * - * The print buffer can no longer be used afterwards, - * but the len and size fields are still valid. - * - * @arg[out] ret_str if not NULL, used to return a permanent copy of the - * buffer contents, or NULL if memory allocation fails; - * if NULL, the buffer is discarded and freed - * @return 0 for success or error code (probably AVERROR(ENOMEM)) - */ -int av_bprint_finalize(AVBPrint *buf, char **ret_str); - -/** - * Escape the content in src and append it to dstbuf. - * - * @param dstbuf already inited destination bprint buffer - * @param src string containing the text to escape - * @param special_chars string containing the special characters which - * need to be escaped, can be NULL - * @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. - * Any unknown value for mode will be considered equivalent to - * AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without - * notice. - * @param flags flags which control how to escape, see AV_ESCAPE_FLAG_* macros - */ -void av_bprint_escape(AVBPrint *dstbuf, const char *src, const char *special_chars, - enum AVEscapeMode mode, int flags); - -/** @} */ - -#endif /* AVUTIL_BPRINT_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/bswap.h b/3rdparty/ffmpeg/include/libavutil/bswap.h deleted file mode 100644 index f53e5768adf28..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/bswap.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * byte swapping routines - */ - -#ifndef AVUTIL_BSWAP_H -#define AVUTIL_BSWAP_H - -#include -#include "libavutil/avconfig.h" -#include "attributes.h" - -#ifdef HAVE_AV_CONFIG_H - -#include "config.h" - -#if ARCH_ARM -# include "arm/bswap.h" -#elif ARCH_RISCV -# include "riscv/bswap.h" -#elif ARCH_X86 -# include "x86/bswap.h" -#endif - -#endif /* HAVE_AV_CONFIG_H */ - -#define AV_BSWAP16C(x) (((x) << 8 & 0xff00) | ((x) >> 8 & 0x00ff)) -#define AV_BSWAP32C(x) (AV_BSWAP16C(x) << 16 | AV_BSWAP16C((x) >> 16)) -#define AV_BSWAP64C(x) (AV_BSWAP32C(x) << 32 | AV_BSWAP32C((x) >> 32)) - -#define AV_BSWAPC(s, x) AV_BSWAP##s##C(x) - -#ifndef av_bswap16 -static av_always_inline av_const uint16_t av_bswap16(uint16_t x) -{ - x= (x>>8) | (x<<8); - return x; -} -#endif - -#ifndef av_bswap32 -static av_always_inline av_const uint32_t av_bswap32(uint32_t x) -{ - return AV_BSWAP32C(x); -} -#endif - -#ifndef av_bswap64 -static inline uint64_t av_const av_bswap64(uint64_t x) -{ - return (uint64_t)av_bswap32(x) << 32 | av_bswap32(x >> 32); -} -#endif - -// be2ne ... big-endian to native-endian -// le2ne ... little-endian to native-endian - -#if AV_HAVE_BIGENDIAN -#define av_be2ne16(x) (x) -#define av_be2ne32(x) (x) -#define av_be2ne64(x) (x) -#define av_le2ne16(x) av_bswap16(x) -#define av_le2ne32(x) av_bswap32(x) -#define av_le2ne64(x) av_bswap64(x) -#define AV_BE2NEC(s, x) (x) -#define AV_LE2NEC(s, x) AV_BSWAPC(s, x) -#else -#define av_be2ne16(x) av_bswap16(x) -#define av_be2ne32(x) av_bswap32(x) -#define av_be2ne64(x) av_bswap64(x) -#define av_le2ne16(x) (x) -#define av_le2ne32(x) (x) -#define av_le2ne64(x) (x) -#define AV_BE2NEC(s, x) AV_BSWAPC(s, x) -#define AV_LE2NEC(s, x) (x) -#endif - -#define AV_BE2NE16C(x) AV_BE2NEC(16, x) -#define AV_BE2NE32C(x) AV_BE2NEC(32, x) -#define AV_BE2NE64C(x) AV_BE2NEC(64, x) -#define AV_LE2NE16C(x) AV_LE2NEC(16, x) -#define AV_LE2NE32C(x) AV_LE2NEC(32, x) -#define AV_LE2NE64C(x) AV_LE2NEC(64, x) - -#endif /* AVUTIL_BSWAP_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/buffer.h b/3rdparty/ffmpeg/include/libavutil/buffer.h deleted file mode 100644 index e1ef5b7f07fc5..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/buffer.h +++ /dev/null @@ -1,322 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_buffer - * refcounted data buffer API - */ - -#ifndef AVUTIL_BUFFER_H -#define AVUTIL_BUFFER_H - -#include -#include - -/** - * @defgroup lavu_buffer AVBuffer - * @ingroup lavu_data - * - * @{ - * AVBuffer is an API for reference-counted data buffers. - * - * There are two core objects in this API -- AVBuffer and AVBufferRef. AVBuffer - * represents the data buffer itself; it is opaque and not meant to be accessed - * by the caller directly, but only through AVBufferRef. However, the caller may - * e.g. compare two AVBuffer pointers to check whether two different references - * are describing the same data buffer. AVBufferRef represents a single - * reference to an AVBuffer and it is the object that may be manipulated by the - * caller directly. - * - * There are two functions provided for creating a new AVBuffer with a single - * reference -- av_buffer_alloc() to just allocate a new buffer, and - * av_buffer_create() to wrap an existing array in an AVBuffer. From an existing - * reference, additional references may be created with av_buffer_ref(). - * Use av_buffer_unref() to free a reference (this will automatically free the - * data once all the references are freed). - * - * The convention throughout this API and the rest of FFmpeg is such that the - * buffer is considered writable if there exists only one reference to it (and - * it has not been marked as read-only). The av_buffer_is_writable() function is - * provided to check whether this is true and av_buffer_make_writable() will - * automatically create a new writable buffer when necessary. - * Of course nothing prevents the calling code from violating this convention, - * however that is safe only when all the existing references are under its - * control. - * - * @note Referencing and unreferencing the buffers is thread-safe and thus - * may be done from multiple threads simultaneously without any need for - * additional locking. - * - * @note Two different references to the same buffer can point to different - * parts of the buffer (i.e. their AVBufferRef.data will not be equal). - */ - -/** - * A reference counted buffer type. It is opaque and is meant to be used through - * references (AVBufferRef). - */ -typedef struct AVBuffer AVBuffer; - -/** - * A reference to a data buffer. - * - * The size of this struct is not a part of the public ABI and it is not meant - * to be allocated directly. - */ -typedef struct AVBufferRef { - AVBuffer *buffer; - - /** - * The data buffer. It is considered writable if and only if - * this is the only reference to the buffer, in which case - * av_buffer_is_writable() returns 1. - */ - uint8_t *data; - /** - * Size of data in bytes. - */ - size_t size; -} AVBufferRef; - -/** - * Allocate an AVBuffer of the given size using av_malloc(). - * - * @return an AVBufferRef of given size or NULL when out of memory - */ -AVBufferRef *av_buffer_alloc(size_t size); - -/** - * Same as av_buffer_alloc(), except the returned buffer will be initialized - * to zero. - */ -AVBufferRef *av_buffer_allocz(size_t size); - -/** - * Always treat the buffer as read-only, even when it has only one - * reference. - */ -#define AV_BUFFER_FLAG_READONLY (1 << 0) - -/** - * Create an AVBuffer from an existing array. - * - * If this function is successful, data is owned by the AVBuffer. The caller may - * only access data through the returned AVBufferRef and references derived from - * it. - * If this function fails, data is left untouched. - * @param data data array - * @param size size of data in bytes - * @param free a callback for freeing this buffer's data - * @param opaque parameter to be got for processing or passed to free - * @param flags a combination of AV_BUFFER_FLAG_* - * - * @return an AVBufferRef referring to data on success, NULL on failure. - */ -AVBufferRef *av_buffer_create(uint8_t *data, size_t size, - void (*free)(void *opaque, uint8_t *data), - void *opaque, int flags); - -/** - * Default free callback, which calls av_free() on the buffer data. - * This function is meant to be passed to av_buffer_create(), not called - * directly. - */ -void av_buffer_default_free(void *opaque, uint8_t *data); - -/** - * Create a new reference to an AVBuffer. - * - * @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on - * failure. - */ -AVBufferRef *av_buffer_ref(const AVBufferRef *buf); - -/** - * Free a given reference and automatically free the buffer if there are no more - * references to it. - * - * @param buf the reference to be freed. The pointer is set to NULL on return. - */ -void av_buffer_unref(AVBufferRef **buf); - -/** - * @return 1 if the caller may write to the data referred to by buf (which is - * true if and only if buf is the only reference to the underlying AVBuffer). - * Return 0 otherwise. - * A positive answer is valid until av_buffer_ref() is called on buf. - */ -int av_buffer_is_writable(const AVBufferRef *buf); - -/** - * @return the opaque parameter set by av_buffer_create. - */ -void *av_buffer_get_opaque(const AVBufferRef *buf); - -int av_buffer_get_ref_count(const AVBufferRef *buf); - -/** - * Create a writable reference from a given buffer reference, avoiding data copy - * if possible. - * - * @param buf buffer reference to make writable. On success, buf is either left - * untouched, or it is unreferenced and a new writable AVBufferRef is - * written in its place. On failure, buf is left untouched. - * @return 0 on success, a negative AVERROR on failure. - */ -int av_buffer_make_writable(AVBufferRef **buf); - -/** - * Reallocate a given buffer. - * - * @param buf a buffer reference to reallocate. On success, buf will be - * unreferenced and a new reference with the required size will be - * written in its place. On failure buf will be left untouched. *buf - * may be NULL, then a new buffer is allocated. - * @param size required new buffer size. - * @return 0 on success, a negative AVERROR on failure. - * - * @note the buffer is actually reallocated with av_realloc() only if it was - * initially allocated through av_buffer_realloc(NULL) and there is only one - * reference to it (i.e. the one passed to this function). In all other cases - * a new buffer is allocated and the data is copied. - */ -int av_buffer_realloc(AVBufferRef **buf, size_t size); - -/** - * Ensure dst refers to the same data as src. - * - * When *dst is already equivalent to src, do nothing. Otherwise unreference dst - * and replace it with a new reference to src. - * - * @param dst Pointer to either a valid buffer reference or NULL. On success, - * this will point to a buffer reference equivalent to src. On - * failure, dst will be left untouched. - * @param src A buffer reference to replace dst with. May be NULL, then this - * function is equivalent to av_buffer_unref(dst). - * @return 0 on success - * AVERROR(ENOMEM) on memory allocation failure. - */ -int av_buffer_replace(AVBufferRef **dst, const AVBufferRef *src); - -/** - * @} - */ - -/** - * @defgroup lavu_bufferpool AVBufferPool - * @ingroup lavu_data - * - * @{ - * AVBufferPool is an API for a lock-free thread-safe pool of AVBuffers. - * - * Frequently allocating and freeing large buffers may be slow. AVBufferPool is - * meant to solve this in cases when the caller needs a set of buffers of the - * same size (the most obvious use case being buffers for raw video or audio - * frames). - * - * At the beginning, the user must call av_buffer_pool_init() to create the - * buffer pool. Then whenever a buffer is needed, call av_buffer_pool_get() to - * get a reference to a new buffer, similar to av_buffer_alloc(). This new - * reference works in all aspects the same way as the one created by - * av_buffer_alloc(). However, when the last reference to this buffer is - * unreferenced, it is returned to the pool instead of being freed and will be - * reused for subsequent av_buffer_pool_get() calls. - * - * When the caller is done with the pool and no longer needs to allocate any new - * buffers, av_buffer_pool_uninit() must be called to mark the pool as freeable. - * Once all the buffers are released, it will automatically be freed. - * - * Allocating and releasing buffers with this API is thread-safe as long as - * either the default alloc callback is used, or the user-supplied one is - * thread-safe. - */ - -/** - * The buffer pool. This structure is opaque and not meant to be accessed - * directly. It is allocated with av_buffer_pool_init() and freed with - * av_buffer_pool_uninit(). - */ -typedef struct AVBufferPool AVBufferPool; - -/** - * Allocate and initialize a buffer pool. - * - * @param size size of each buffer in this pool - * @param alloc a function that will be used to allocate new buffers when the - * pool is empty. May be NULL, then the default allocator will be used - * (av_buffer_alloc()). - * @return newly created buffer pool on success, NULL on error. - */ -AVBufferPool *av_buffer_pool_init(size_t size, AVBufferRef* (*alloc)(size_t size)); - -/** - * Allocate and initialize a buffer pool with a more complex allocator. - * - * @param size size of each buffer in this pool - * @param opaque arbitrary user data used by the allocator - * @param alloc a function that will be used to allocate new buffers when the - * pool is empty. May be NULL, then the default allocator will be - * used (av_buffer_alloc()). - * @param pool_free a function that will be called immediately before the pool - * is freed. I.e. after av_buffer_pool_uninit() is called - * by the caller and all the frames are returned to the pool - * and freed. It is intended to uninitialize the user opaque - * data. May be NULL. - * @return newly created buffer pool on success, NULL on error. - */ -AVBufferPool *av_buffer_pool_init2(size_t size, void *opaque, - AVBufferRef* (*alloc)(void *opaque, size_t size), - void (*pool_free)(void *opaque)); - -/** - * Mark the pool as being available for freeing. It will actually be freed only - * once all the allocated buffers associated with the pool are released. Thus it - * is safe to call this function while some of the allocated buffers are still - * in use. - * - * @param pool pointer to the pool to be freed. It will be set to NULL. - */ -void av_buffer_pool_uninit(AVBufferPool **pool); - -/** - * Allocate a new AVBuffer, reusing an old buffer from the pool when available. - * This function may be called simultaneously from multiple threads. - * - * @return a reference to the new buffer on success, NULL on error. - */ -AVBufferRef *av_buffer_pool_get(AVBufferPool *pool); - -/** - * Query the original opaque parameter of an allocated buffer in the pool. - * - * @param ref a buffer reference to a buffer returned by av_buffer_pool_get. - * @return the opaque parameter set by the buffer allocator function of the - * buffer pool. - * - * @note the opaque parameter of ref is used by the buffer pool implementation, - * therefore you have to use this function to access the original opaque - * parameter of an allocated buffer. - */ -void *av_buffer_pool_buffer_get_opaque(const AVBufferRef *ref); - -/** - * @} - */ - -#endif /* AVUTIL_BUFFER_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/camellia.h b/3rdparty/ffmpeg/include/libavutil/camellia.h deleted file mode 100644 index 96787102e2acf..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/camellia.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * An implementation of the CAMELLIA algorithm as mentioned in RFC3713 - * Copyright (c) 2014 Supraja Meedinti - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CAMELLIA_H -#define AVUTIL_CAMELLIA_H - -#include - - -/** - * @file - * @brief Public header for libavutil CAMELLIA algorithm - * @defgroup lavu_camellia CAMELLIA - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_camellia_size; - -struct AVCAMELLIA; - -/** - * Allocate an AVCAMELLIA context - * To free the struct: av_free(ptr) - */ -struct AVCAMELLIA *av_camellia_alloc(void); - -/** - * Initialize an AVCAMELLIA context. - * - * @param ctx an AVCAMELLIA context - * @param key a key of 16, 24, 32 bytes used for encryption/decryption - * @param key_bits number of keybits: possible are 128, 192, 256 - */ -int av_camellia_init(struct AVCAMELLIA *ctx, const uint8_t *key, int key_bits); - -/** - * Encrypt or decrypt a buffer using a previously initialized context - * - * @param ctx an AVCAMELLIA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 16 byte blocks - * @param iv initialization vector for CBC mode, NULL for ECB mode - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_camellia_crypt(struct AVCAMELLIA *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t* iv, int decrypt); - -/** - * @} - */ -#endif /* AVUTIL_CAMELLIA_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/cast5.h b/3rdparty/ffmpeg/include/libavutil/cast5.h deleted file mode 100644 index ad5b347e685ed..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/cast5.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * An implementation of the CAST128 algorithm as mentioned in RFC2144 - * Copyright (c) 2014 Supraja Meedinti - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CAST5_H -#define AVUTIL_CAST5_H - -#include - - -/** - * @file - * @brief Public header for libavutil CAST5 algorithm - * @defgroup lavu_cast5 CAST5 - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_cast5_size; - -struct AVCAST5; - -/** - * Allocate an AVCAST5 context - * To free the struct: av_free(ptr) - */ -struct AVCAST5 *av_cast5_alloc(void); -/** - * Initialize an AVCAST5 context. - * - * @param ctx an AVCAST5 context - * @param key a key of 5,6,...16 bytes used for encryption/decryption - * @param key_bits number of keybits: possible are 40,48,...,128 - * @return 0 on success, less than 0 on failure - */ -int av_cast5_init(struct AVCAST5 *ctx, const uint8_t *key, int key_bits); - -/** - * Encrypt or decrypt a buffer using a previously initialized context, ECB mode only - * - * @param ctx an AVCAST5 context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_cast5_crypt(struct AVCAST5 *ctx, uint8_t *dst, const uint8_t *src, int count, int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context - * - * @param ctx an AVCAST5 context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, NULL for ECB mode - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_cast5_crypt2(struct AVCAST5 *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); -/** - * @} - */ -#endif /* AVUTIL_CAST5_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/channel_layout.h b/3rdparty/ffmpeg/include/libavutil/channel_layout.h deleted file mode 100644 index 5ad2d5ed98f2c..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/channel_layout.h +++ /dev/null @@ -1,762 +0,0 @@ -/* - * Copyright (c) 2006 Michael Niedermayer - * Copyright (c) 2008 Peter Ross - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CHANNEL_LAYOUT_H -#define AVUTIL_CHANNEL_LAYOUT_H - -#include -#include - -#include "version.h" -#include "attributes.h" - -/** - * @file - * @ingroup lavu_audio_channels - * Public libavutil channel layout APIs header. - */ - - -/** - * @defgroup lavu_audio_channels Audio channels - * @ingroup lavu_audio - * - * Audio channel layout utility functions - * - * @{ - */ - -enum AVChannel { - /// Invalid channel index - AV_CHAN_NONE = -1, - AV_CHAN_FRONT_LEFT, - AV_CHAN_FRONT_RIGHT, - AV_CHAN_FRONT_CENTER, - AV_CHAN_LOW_FREQUENCY, - AV_CHAN_BACK_LEFT, - AV_CHAN_BACK_RIGHT, - AV_CHAN_FRONT_LEFT_OF_CENTER, - AV_CHAN_FRONT_RIGHT_OF_CENTER, - AV_CHAN_BACK_CENTER, - AV_CHAN_SIDE_LEFT, - AV_CHAN_SIDE_RIGHT, - AV_CHAN_TOP_CENTER, - AV_CHAN_TOP_FRONT_LEFT, - AV_CHAN_TOP_FRONT_CENTER, - AV_CHAN_TOP_FRONT_RIGHT, - AV_CHAN_TOP_BACK_LEFT, - AV_CHAN_TOP_BACK_CENTER, - AV_CHAN_TOP_BACK_RIGHT, - /** Stereo downmix. */ - AV_CHAN_STEREO_LEFT = 29, - /** See above. */ - AV_CHAN_STEREO_RIGHT, - AV_CHAN_WIDE_LEFT, - AV_CHAN_WIDE_RIGHT, - AV_CHAN_SURROUND_DIRECT_LEFT, - AV_CHAN_SURROUND_DIRECT_RIGHT, - AV_CHAN_LOW_FREQUENCY_2, - AV_CHAN_TOP_SIDE_LEFT, - AV_CHAN_TOP_SIDE_RIGHT, - AV_CHAN_BOTTOM_FRONT_CENTER, - AV_CHAN_BOTTOM_FRONT_LEFT, - AV_CHAN_BOTTOM_FRONT_RIGHT, - AV_CHAN_SIDE_SURROUND_LEFT, ///< +90 degrees, Lss, SiL - AV_CHAN_SIDE_SURROUND_RIGHT, ///< -90 degrees, Rss, SiR - AV_CHAN_TOP_SURROUND_LEFT, ///< +110 degrees, Lvs, TpLS - AV_CHAN_TOP_SURROUND_RIGHT, ///< -110 degrees, Rvs, TpRS - - AV_CHAN_BINAURAL_LEFT = 61, - AV_CHAN_BINAURAL_RIGHT, - - /** Channel is empty can be safely skipped. */ - AV_CHAN_UNUSED = 0x200, - - /** Channel contains data, but its position is unknown. */ - AV_CHAN_UNKNOWN = 0x300, - - /** - * Range of channels between AV_CHAN_AMBISONIC_BASE and - * AV_CHAN_AMBISONIC_END represent Ambisonic components using the ACN system. - * - * Given a channel id `` between AV_CHAN_AMBISONIC_BASE and - * AV_CHAN_AMBISONIC_END (inclusive), the ACN index of the channel `` is - * ` = - AV_CHAN_AMBISONIC_BASE`. - * - * @note these values are only used for AV_CHANNEL_ORDER_CUSTOM channel - * orderings, the AV_CHANNEL_ORDER_AMBISONIC ordering orders the channels - * implicitly by their position in the stream. - */ - AV_CHAN_AMBISONIC_BASE = 0x400, - // leave space for 1024 ids, which correspond to maximum order-32 harmonics, - // which should be enough for the foreseeable use cases - AV_CHAN_AMBISONIC_END = 0x7ff, -}; - -enum AVChannelOrder { - /** - * Only the channel count is specified, without any further information - * about the channel order. - */ - AV_CHANNEL_ORDER_UNSPEC, - /** - * The native channel order, i.e. the channels are in the same order in - * which they are defined in the AVChannel enum. This supports up to 63 - * different channels. - */ - AV_CHANNEL_ORDER_NATIVE, - /** - * The channel order does not correspond to any other predefined order and - * is stored as an explicit map. For example, this could be used to support - * layouts with 64 or more channels, or with empty/skipped (AV_CHAN_UNUSED) - * channels at arbitrary positions. - */ - AV_CHANNEL_ORDER_CUSTOM, - /** - * The audio is represented as the decomposition of the sound field into - * spherical harmonics. Each channel corresponds to a single expansion - * component. Channels are ordered according to ACN (Ambisonic Channel - * Number). - * - * The channel with the index n in the stream contains the spherical - * harmonic of degree l and order m given by - * @code{.unparsed} - * l = floor(sqrt(n)), - * m = n - l * (l + 1). - * @endcode - * - * Conversely given a spherical harmonic of degree l and order m, the - * corresponding channel index n is given by - * @code{.unparsed} - * n = l * (l + 1) + m. - * @endcode - * - * Normalization is assumed to be SN3D (Schmidt Semi-Normalization) - * as defined in AmbiX format $ 2.1. - */ - AV_CHANNEL_ORDER_AMBISONIC, - /** - * Number of channel orders, not part of ABI/API - */ - FF_CHANNEL_ORDER_NB -}; - - -/** - * @defgroup channel_masks Audio channel masks - * - * A channel layout is a 64-bits integer with a bit set for every channel. - * The number of bits set must be equal to the number of channels. - * The value 0 means that the channel layout is not known. - * @note this data structure is not powerful enough to handle channels - * combinations that have the same channel multiple times, such as - * dual-mono. - * - * @{ - */ -#define AV_CH_FRONT_LEFT (1ULL << AV_CHAN_FRONT_LEFT ) -#define AV_CH_FRONT_RIGHT (1ULL << AV_CHAN_FRONT_RIGHT ) -#define AV_CH_FRONT_CENTER (1ULL << AV_CHAN_FRONT_CENTER ) -#define AV_CH_LOW_FREQUENCY (1ULL << AV_CHAN_LOW_FREQUENCY ) -#define AV_CH_BACK_LEFT (1ULL << AV_CHAN_BACK_LEFT ) -#define AV_CH_BACK_RIGHT (1ULL << AV_CHAN_BACK_RIGHT ) -#define AV_CH_FRONT_LEFT_OF_CENTER (1ULL << AV_CHAN_FRONT_LEFT_OF_CENTER ) -#define AV_CH_FRONT_RIGHT_OF_CENTER (1ULL << AV_CHAN_FRONT_RIGHT_OF_CENTER) -#define AV_CH_BACK_CENTER (1ULL << AV_CHAN_BACK_CENTER ) -#define AV_CH_SIDE_LEFT (1ULL << AV_CHAN_SIDE_LEFT ) -#define AV_CH_SIDE_RIGHT (1ULL << AV_CHAN_SIDE_RIGHT ) -#define AV_CH_TOP_CENTER (1ULL << AV_CHAN_TOP_CENTER ) -#define AV_CH_TOP_FRONT_LEFT (1ULL << AV_CHAN_TOP_FRONT_LEFT ) -#define AV_CH_TOP_FRONT_CENTER (1ULL << AV_CHAN_TOP_FRONT_CENTER ) -#define AV_CH_TOP_FRONT_RIGHT (1ULL << AV_CHAN_TOP_FRONT_RIGHT ) -#define AV_CH_TOP_BACK_LEFT (1ULL << AV_CHAN_TOP_BACK_LEFT ) -#define AV_CH_TOP_BACK_CENTER (1ULL << AV_CHAN_TOP_BACK_CENTER ) -#define AV_CH_TOP_BACK_RIGHT (1ULL << AV_CHAN_TOP_BACK_RIGHT ) -#define AV_CH_STEREO_LEFT (1ULL << AV_CHAN_STEREO_LEFT ) -#define AV_CH_STEREO_RIGHT (1ULL << AV_CHAN_STEREO_RIGHT ) -#define AV_CH_WIDE_LEFT (1ULL << AV_CHAN_WIDE_LEFT ) -#define AV_CH_WIDE_RIGHT (1ULL << AV_CHAN_WIDE_RIGHT ) -#define AV_CH_SURROUND_DIRECT_LEFT (1ULL << AV_CHAN_SURROUND_DIRECT_LEFT ) -#define AV_CH_SURROUND_DIRECT_RIGHT (1ULL << AV_CHAN_SURROUND_DIRECT_RIGHT) -#define AV_CH_LOW_FREQUENCY_2 (1ULL << AV_CHAN_LOW_FREQUENCY_2 ) -#define AV_CH_TOP_SIDE_LEFT (1ULL << AV_CHAN_TOP_SIDE_LEFT ) -#define AV_CH_TOP_SIDE_RIGHT (1ULL << AV_CHAN_TOP_SIDE_RIGHT ) -#define AV_CH_BOTTOM_FRONT_CENTER (1ULL << AV_CHAN_BOTTOM_FRONT_CENTER ) -#define AV_CH_BOTTOM_FRONT_LEFT (1ULL << AV_CHAN_BOTTOM_FRONT_LEFT ) -#define AV_CH_BOTTOM_FRONT_RIGHT (1ULL << AV_CHAN_BOTTOM_FRONT_RIGHT ) -#define AV_CH_SIDE_SURROUND_LEFT (1ULL << AV_CHAN_SIDE_SURROUND_LEFT ) -#define AV_CH_SIDE_SURROUND_RIGHT (1ULL << AV_CHAN_SIDE_SURROUND_RIGHT ) -#define AV_CH_TOP_SURROUND_LEFT (1ULL << AV_CHAN_TOP_SURROUND_LEFT ) -#define AV_CH_TOP_SURROUND_RIGHT (1ULL << AV_CHAN_TOP_SURROUND_RIGHT ) -#define AV_CH_BINAURAL_LEFT (1ULL << AV_CHAN_BINAURAL_LEFT ) -#define AV_CH_BINAURAL_RIGHT (1ULL << AV_CHAN_BINAURAL_RIGHT ) - -/** - * @} - * @defgroup channel_mask_c Audio channel layouts - * @{ - * */ -#define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER) -#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT) -#define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER) -#define AV_CH_LAYOUT_3POINT1 (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_4POINT1 (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_2_2 (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) -#define AV_CH_LAYOUT_QUAD (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_5POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) -#define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_5POINT0_BACK (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_5POINT1_BACK (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_6POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT0_FRONT (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_HEXAGONAL (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_3POINT1POINT2 (AV_CH_LAYOUT_3POINT1|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT) -#define AV_CH_LAYOUT_6POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER) -#define AV_CH_LAYOUT_6POINT1_FRONT (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY) -#define AV_CH_LAYOUT_7POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_7POINT0_FRONT (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_5POINT1POINT2 (AV_CH_LAYOUT_5POINT1|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT) -#define AV_CH_LAYOUT_5POINT1POINT2_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT) -#define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT) -#define AV_CH_LAYOUT_CUBE (AV_CH_LAYOUT_QUAD|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT) -#define AV_CH_LAYOUT_5POINT1POINT4_BACK (AV_CH_LAYOUT_5POINT1POINT2|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT) -#define AV_CH_LAYOUT_7POINT1POINT2 (AV_CH_LAYOUT_7POINT1|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT) -#define AV_CH_LAYOUT_7POINT1POINT4_BACK (AV_CH_LAYOUT_7POINT1POINT2|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT) -#define AV_CH_LAYOUT_7POINT2POINT3 (AV_CH_LAYOUT_7POINT1POINT2|AV_CH_TOP_BACK_CENTER|AV_CH_LOW_FREQUENCY_2) -#define AV_CH_LAYOUT_9POINT1POINT4_BACK (AV_CH_LAYOUT_7POINT1POINT4_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -#define AV_CH_LAYOUT_9POINT1POINT6 (AV_CH_LAYOUT_9POINT1POINT4_BACK|AV_CH_TOP_SIDE_LEFT|AV_CH_TOP_SIDE_RIGHT) -#define AV_CH_LAYOUT_HEXADECAGONAL (AV_CH_LAYOUT_OCTAGONAL|AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT) -#define AV_CH_LAYOUT_BINAURAL (AV_CH_BINAURAL_LEFT|AV_CH_BINAURAL_RIGHT) -#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT) -#define AV_CH_LAYOUT_22POINT2 (AV_CH_LAYOUT_9POINT1POINT6|AV_CH_BACK_CENTER|AV_CH_LOW_FREQUENCY_2|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_CENTER|AV_CH_TOP_BACK_CENTER|AV_CH_BOTTOM_FRONT_CENTER|AV_CH_BOTTOM_FRONT_LEFT|AV_CH_BOTTOM_FRONT_RIGHT) - -#define AV_CH_LAYOUT_7POINT1_TOP_BACK AV_CH_LAYOUT_5POINT1POINT2_BACK - -enum AVMatrixEncoding { - AV_MATRIX_ENCODING_NONE, - AV_MATRIX_ENCODING_DOLBY, - AV_MATRIX_ENCODING_DPLII, - AV_MATRIX_ENCODING_DPLIIX, - AV_MATRIX_ENCODING_DPLIIZ, - AV_MATRIX_ENCODING_DOLBYEX, - AV_MATRIX_ENCODING_DOLBYHEADPHONE, - AV_MATRIX_ENCODING_NB -}; - -/** - * @} - */ - -/** - * An AVChannelCustom defines a single channel within a custom order layout - * - * Unlike most structures in FFmpeg, sizeof(AVChannelCustom) is a part of the - * public ABI. - * - * No new fields may be added to it without a major version bump. - */ -typedef struct AVChannelCustom { - enum AVChannel id; - char name[16]; - void *opaque; -} AVChannelCustom; - -/** - * An AVChannelLayout holds information about the channel layout of audio data. - * - * A channel layout here is defined as a set of channels ordered in a specific - * way (unless the channel order is AV_CHANNEL_ORDER_UNSPEC, in which case an - * AVChannelLayout carries only the channel count). - * All orders may be treated as if they were AV_CHANNEL_ORDER_UNSPEC by - * ignoring everything but the channel count, as long as av_channel_layout_check() - * considers they are valid. - * - * Unlike most structures in FFmpeg, sizeof(AVChannelLayout) is a part of the - * public ABI and may be used by the caller. E.g. it may be allocated on stack - * or embedded in caller-defined structs. - * - * AVChannelLayout can be initialized as follows: - * - default initialization with {0}, followed by setting all used fields - * correctly; - * - by assigning one of the predefined AV_CHANNEL_LAYOUT_* initializers; - * - with a constructor function, such as av_channel_layout_default(), - * av_channel_layout_from_mask() or av_channel_layout_from_string(). - * - * The channel layout must be uninitialized with av_channel_layout_uninit() - * - * Copying an AVChannelLayout via assigning is forbidden, - * av_channel_layout_copy() must be used instead (and its return value should - * be checked) - * - * No new fields may be added to it without a major version bump, except for - * new elements of the union fitting in sizeof(uint64_t). - */ -typedef struct AVChannelLayout { - /** - * Channel order used in this layout. - * This is a mandatory field. - */ - enum AVChannelOrder order; - - /** - * Number of channels in this layout. Mandatory field. - */ - int nb_channels; - - /** - * Details about which channels are present in this layout. - * For AV_CHANNEL_ORDER_UNSPEC, this field is undefined and must not be - * used. - */ - union { - /** - * This member must be used for AV_CHANNEL_ORDER_NATIVE, and may be used - * for AV_CHANNEL_ORDER_AMBISONIC to signal non-diegetic channels. - * It is a bitmask, where the position of each set bit means that the - * AVChannel with the corresponding value is present. - * - * I.e. when (mask & (1 << AV_CHAN_FOO)) is non-zero, then AV_CHAN_FOO - * is present in the layout. Otherwise it is not present. - * - * @note when a channel layout using a bitmask is constructed or - * modified manually (i.e. not using any of the av_channel_layout_* - * functions), the code doing it must ensure that the number of set bits - * is equal to nb_channels. - */ - uint64_t mask; - /** - * This member must be used when the channel order is - * AV_CHANNEL_ORDER_CUSTOM. It is a nb_channels-sized array, with each - * element signalling the presence of the AVChannel with the - * corresponding value in map[i].id. - * - * I.e. when map[i].id is equal to AV_CHAN_FOO, then AV_CH_FOO is the - * i-th channel in the audio data. - * - * When map[i].id is in the range between AV_CHAN_AMBISONIC_BASE and - * AV_CHAN_AMBISONIC_END (inclusive), the channel contains an ambisonic - * component with ACN index (as defined above) - * n = map[i].id - AV_CHAN_AMBISONIC_BASE. - * - * map[i].name may be filled with a 0-terminated string, in which case - * it will be used for the purpose of identifying the channel with the - * convenience functions below. Otherwise it must be zeroed. - */ - AVChannelCustom *map; - } u; - - /** - * For some private data of the user. - */ - void *opaque; -} AVChannelLayout; - -/** - * Macro to define native channel layouts - * - * @note This doesn't use designated initializers for compatibility with C++ 17 and older. - */ -#define AV_CHANNEL_LAYOUT_MASK(nb, m) \ - { /* .order */ AV_CHANNEL_ORDER_NATIVE, \ - /* .nb_channels */ (nb), \ - /* .u.mask */ { m }, \ - /* .opaque */ NULL } - -/** - * @name Common pre-defined channel layouts - * @{ - */ -#define AV_CHANNEL_LAYOUT_MONO AV_CHANNEL_LAYOUT_MASK(1, AV_CH_LAYOUT_MONO) -#define AV_CHANNEL_LAYOUT_STEREO AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO) -#define AV_CHANNEL_LAYOUT_2POINT1 AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2POINT1) -#define AV_CHANNEL_LAYOUT_2_1 AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2_1) -#define AV_CHANNEL_LAYOUT_SURROUND AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_SURROUND) -#define AV_CHANNEL_LAYOUT_3POINT1 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_3POINT1) -#define AV_CHANNEL_LAYOUT_4POINT0 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_4POINT0) -#define AV_CHANNEL_LAYOUT_4POINT1 AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_4POINT1) -#define AV_CHANNEL_LAYOUT_2_2 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_2_2) -#define AV_CHANNEL_LAYOUT_QUAD AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_QUAD) -#define AV_CHANNEL_LAYOUT_5POINT0 AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_5POINT0) -#define AV_CHANNEL_LAYOUT_5POINT1 AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_5POINT1) -#define AV_CHANNEL_LAYOUT_5POINT0_BACK AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_5POINT0_BACK) -#define AV_CHANNEL_LAYOUT_5POINT1_BACK AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_5POINT1_BACK) -#define AV_CHANNEL_LAYOUT_6POINT0 AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_6POINT0) -#define AV_CHANNEL_LAYOUT_6POINT0_FRONT AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_6POINT0_FRONT) -#define AV_CHANNEL_LAYOUT_3POINT1POINT2 AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_3POINT1POINT2) -#define AV_CHANNEL_LAYOUT_HEXAGONAL AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_HEXAGONAL) -#define AV_CHANNEL_LAYOUT_6POINT1 AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1) -#define AV_CHANNEL_LAYOUT_6POINT1_BACK AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1_BACK) -#define AV_CHANNEL_LAYOUT_6POINT1_FRONT AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1_FRONT) -#define AV_CHANNEL_LAYOUT_7POINT0 AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_7POINT0) -#define AV_CHANNEL_LAYOUT_7POINT0_FRONT AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_7POINT0_FRONT) -#define AV_CHANNEL_LAYOUT_7POINT1 AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1) -#define AV_CHANNEL_LAYOUT_7POINT1_WIDE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE) -#define AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE_BACK) -#define AV_CHANNEL_LAYOUT_5POINT1POINT2 AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_5POINT1POINT2) -#define AV_CHANNEL_LAYOUT_5POINT1POINT2_BACK AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_5POINT1POINT2_BACK) -#define AV_CHANNEL_LAYOUT_OCTAGONAL AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_OCTAGONAL) -#define AV_CHANNEL_LAYOUT_CUBE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_CUBE) -#define AV_CHANNEL_LAYOUT_5POINT1POINT4_BACK AV_CHANNEL_LAYOUT_MASK(10, AV_CH_LAYOUT_5POINT1POINT4_BACK) -#define AV_CHANNEL_LAYOUT_7POINT1POINT2 AV_CHANNEL_LAYOUT_MASK(10, AV_CH_LAYOUT_7POINT1POINT2) -#define AV_CHANNEL_LAYOUT_7POINT1POINT4_BACK AV_CHANNEL_LAYOUT_MASK(12, AV_CH_LAYOUT_7POINT1POINT4_BACK) -#define AV_CHANNEL_LAYOUT_7POINT2POINT3 AV_CHANNEL_LAYOUT_MASK(12, AV_CH_LAYOUT_7POINT2POINT3) -#define AV_CHANNEL_LAYOUT_9POINT1POINT4_BACK AV_CHANNEL_LAYOUT_MASK(14, AV_CH_LAYOUT_9POINT1POINT4_BACK) -#define AV_CHANNEL_LAYOUT_9POINT1POINT6 AV_CHANNEL_LAYOUT_MASK(16, AV_CH_LAYOUT_9POINT1POINT6) -#define AV_CHANNEL_LAYOUT_HEXADECAGONAL AV_CHANNEL_LAYOUT_MASK(16, AV_CH_LAYOUT_HEXADECAGONAL) -#define AV_CHANNEL_LAYOUT_BINAURAL AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_BINAURAL) -#define AV_CHANNEL_LAYOUT_STEREO_DOWNMIX AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO_DOWNMIX) -#define AV_CHANNEL_LAYOUT_22POINT2 AV_CHANNEL_LAYOUT_MASK(24, AV_CH_LAYOUT_22POINT2) - -#define AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK AV_CHANNEL_LAYOUT_5POINT1POINT2_BACK - -#define AV_CHANNEL_LAYOUT_AMBISONIC_FIRST_ORDER \ - { /* .order */ AV_CHANNEL_ORDER_AMBISONIC, \ - /* .nb_channels */ 4, \ - /* .u.mask */ { 0 }, \ - /* .opaque */ NULL } -/** @} */ - -struct AVBPrint; - -/** - * Get a human readable string in an abbreviated form describing a given channel. - * This is the inverse function of @ref av_channel_from_string(). - * - * @param buf pre-allocated buffer where to put the generated string - * @param buf_size size in bytes of the buffer. - * @param channel the AVChannel whose name to get - * @return amount of bytes needed to hold the output string, or a negative AVERROR - * on failure. If the returned value is bigger than buf_size, then the - * string was truncated. - */ -int av_channel_name(char *buf, size_t buf_size, enum AVChannel channel); - -/** - * bprint variant of av_channel_name(). - * - * @note the string will be appended to the bprint buffer. - */ -void av_channel_name_bprint(struct AVBPrint *bp, enum AVChannel channel_id); - -/** - * Get a human readable string describing a given channel. - * - * @param buf pre-allocated buffer where to put the generated string - * @param buf_size size in bytes of the buffer. - * @param channel the AVChannel whose description to get - * @return amount of bytes needed to hold the output string, or a negative AVERROR - * on failure. If the returned value is bigger than buf_size, then the - * string was truncated. - */ -int av_channel_description(char *buf, size_t buf_size, enum AVChannel channel); - -/** - * bprint variant of av_channel_description(). - * - * @note the string will be appended to the bprint buffer. - */ -void av_channel_description_bprint(struct AVBPrint *bp, enum AVChannel channel_id); - -/** - * This is the inverse function of @ref av_channel_name(). - * - * @return the channel with the given name - * AV_CHAN_NONE when name does not identify a known channel - */ -enum AVChannel av_channel_from_string(const char *name); - -/** - * Initialize a custom channel layout with the specified number of channels. - * The channel map will be allocated and the designation of all channels will - * be set to AV_CHAN_UNKNOWN. - * - * This is only a convenience helper function, a custom channel layout can also - * be constructed without using this. - * - * @param channel_layout the layout structure to be initialized - * @param nb_channels the number of channels - * - * @return 0 on success - * AVERROR(EINVAL) if the number of channels <= 0 - * AVERROR(ENOMEM) if the channel map could not be allocated - */ -int av_channel_layout_custom_init(AVChannelLayout *channel_layout, int nb_channels); - -/** - * Initialize a native channel layout from a bitmask indicating which channels - * are present. - * - * @param channel_layout the layout structure to be initialized - * @param mask bitmask describing the channel layout - * - * @return 0 on success - * AVERROR(EINVAL) for invalid mask values - */ -int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask); - -/** - * Initialize a channel layout from a given string description. - * The input string can be represented by: - * - the formal channel layout name (returned by av_channel_layout_describe()) - * - single or multiple channel names (returned by av_channel_name(), eg. "FL", - * or concatenated with "+", each optionally containing a custom name after - * a "@", eg. "FL@Left+FR@Right+LFE") - * - a decimal or hexadecimal value of a native channel layout (eg. "4" or "0x4") - * - the number of channels with default layout (eg. "4c") - * - the number of unordered channels (eg. "4C" or "4 channels") - * - the ambisonic order followed by optional non-diegetic channels (eg. - * "ambisonic 2+stereo") - * On error, the channel layout will remain uninitialized, but not necessarily - * untouched. - * - * @param channel_layout uninitialized channel layout for the result - * @param str string describing the channel layout - * @return 0 on success parsing the channel layout - * AVERROR(EINVAL) if an invalid channel layout string was provided - * AVERROR(ENOMEM) if there was not enough memory - */ -int av_channel_layout_from_string(AVChannelLayout *channel_layout, - const char *str); - -/** - * Get the default channel layout for a given number of channels. - * - * @param ch_layout the layout structure to be initialized - * @param nb_channels number of channels - */ -void av_channel_layout_default(AVChannelLayout *ch_layout, int nb_channels); - -/** - * Iterate over all standard channel layouts. - * - * @param opaque a pointer where libavutil will store the iteration state. Must - * point to NULL to start the iteration. - * - * @return the standard channel layout or NULL when the iteration is - * finished - */ -const AVChannelLayout *av_channel_layout_standard(void **opaque); - -/** - * Free any allocated data in the channel layout and reset the channel - * count to 0. - * - * @param channel_layout the layout structure to be uninitialized - */ -void av_channel_layout_uninit(AVChannelLayout *channel_layout); - -/** - * Make a copy of a channel layout. This differs from just assigning src to dst - * in that it allocates and copies the map for AV_CHANNEL_ORDER_CUSTOM. - * - * @note the destination channel_layout will be always uninitialized before copy. - * - * @param dst destination channel layout - * @param src source channel layout - * @return 0 on success, a negative AVERROR on error. - */ -int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src); - -/** - * Get a human-readable string describing the channel layout properties. - * The string will be in the same format that is accepted by - * @ref av_channel_layout_from_string(), allowing to rebuild the same - * channel layout, except for opaque pointers. - * - * @param channel_layout channel layout to be described - * @param buf pre-allocated buffer where to put the generated string - * @param buf_size size in bytes of the buffer. - * @return amount of bytes needed to hold the output string, or a negative AVERROR - * on failure. If the returned value is bigger than buf_size, then the - * string was truncated. - */ -int av_channel_layout_describe(const AVChannelLayout *channel_layout, - char *buf, size_t buf_size); - -/** - * bprint variant of av_channel_layout_describe(). - * - * @note the string will be appended to the bprint buffer. - * @return 0 on success, or a negative AVERROR value on failure. - */ -int av_channel_layout_describe_bprint(const AVChannelLayout *channel_layout, - struct AVBPrint *bp); - -/** - * Get the channel with the given index in a channel layout. - * - * @param channel_layout input channel layout - * @param idx index of the channel - * @return channel with the index idx in channel_layout on success or - * AV_CHAN_NONE on failure (if idx is not valid or the channel order is - * unspecified) - */ -enum AVChannel -av_channel_layout_channel_from_index(const AVChannelLayout *channel_layout, unsigned int idx); - -/** - * Get the index of a given channel in a channel layout. In case multiple - * channels are found, only the first match will be returned. - * - * @param channel_layout input channel layout - * @param channel the channel whose index to obtain - * @return index of channel in channel_layout on success or a negative number if - * channel is not present in channel_layout. - */ -int av_channel_layout_index_from_channel(const AVChannelLayout *channel_layout, - enum AVChannel channel); - -/** - * Get the index in a channel layout of a channel described by the given string. - * In case multiple channels are found, only the first match will be returned. - * - * This function accepts channel names in the same format as - * @ref av_channel_from_string(). - * - * @param channel_layout input channel layout - * @param name string describing the channel whose index to obtain - * @return a channel index described by the given string, or a negative AVERROR - * value. - */ -int av_channel_layout_index_from_string(const AVChannelLayout *channel_layout, - const char *name); - -/** - * Get a channel described by the given string. - * - * This function accepts channel names in the same format as - * @ref av_channel_from_string(). - * - * @param channel_layout input channel layout - * @param name string describing the channel to obtain - * @return a channel described by the given string in channel_layout on success - * or AV_CHAN_NONE on failure (if the string is not valid or the channel - * order is unspecified) - */ -enum AVChannel -av_channel_layout_channel_from_string(const AVChannelLayout *channel_layout, - const char *name); - -/** - * Find out what channels from a given set are present in a channel layout, - * without regard for their positions. - * - * @param channel_layout input channel layout - * @param mask a combination of AV_CH_* representing a set of channels - * @return a bitfield representing all the channels from mask that are present - * in channel_layout - */ -uint64_t av_channel_layout_subset(const AVChannelLayout *channel_layout, - uint64_t mask); - -/** - * Check whether a channel layout is valid, i.e. can possibly describe audio - * data. - * - * @param channel_layout input channel layout - * @return 1 if channel_layout is valid, 0 otherwise. - */ -int av_channel_layout_check(const AVChannelLayout *channel_layout); - -/** - * Check whether two channel layouts are semantically the same, i.e. the same - * channels are present on the same positions in both. - * - * If one of the channel layouts is AV_CHANNEL_ORDER_UNSPEC, while the other is - * not, they are considered to be unequal. If both are AV_CHANNEL_ORDER_UNSPEC, - * they are considered equal iff the channel counts are the same in both. - * - * @param chl input channel layout - * @param chl1 input channel layout - * @return 0 if chl and chl1 are equal, 1 if they are not equal. A negative - * AVERROR code if one or both are invalid. - */ -int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1); - -/** - * Return the order if the layout is n-th order standard-order ambisonic. - * The presence of optional extra non-diegetic channels at the end is not taken - * into account. - * - * @param channel_layout input channel layout - * @return the order of the layout, a negative error code otherwise. - */ -int av_channel_layout_ambisonic_order(const AVChannelLayout *channel_layout); - -/** - * The conversion must be lossless. - */ -#define AV_CHANNEL_LAYOUT_RETYPE_FLAG_LOSSLESS (1 << 0) - -/** - * The specified retype target order is ignored and the simplest possible - * (canonical) order is used for which the input layout can be losslessy - * represented. - */ -#define AV_CHANNEL_LAYOUT_RETYPE_FLAG_CANONICAL (1 << 1) - -/** - * Change the AVChannelOrder of a channel layout. - * - * Change of AVChannelOrder can be either lossless or lossy. In case of a - * lossless conversion all the channel designations and the associated channel - * names (if any) are kept. On a lossy conversion the channel names and channel - * designations might be lost depending on the capabilities of the desired - * AVChannelOrder. Note that some conversions are simply not possible in which - * case this function returns AVERROR(ENOSYS). - * - * The following conversions are supported: - * - * Any -> Custom : Always possible, always lossless. - * Any -> Unspecified: Always possible, lossless if channel designations - * are all unknown and channel names are not used, lossy otherwise. - * Custom -> Ambisonic : Possible if it contains ambisonic channels with - * optional non-diegetic channels in the end. Lossy if the channels have - * custom names, lossless otherwise. - * Custom -> Native : Possible if it contains native channels in native - * order. Lossy if the channels have custom names, lossless otherwise. - * - * On error this function keeps the original channel layout untouched. - * - * @param channel_layout channel layout which will be changed - * @param order the desired channel layout order - * @param flags a combination of AV_CHANNEL_LAYOUT_RETYPE_FLAG_* constants - * @return 0 if the conversion was successful and lossless or if the channel - * layout was already in the desired order - * >0 if the conversion was successful but lossy - * AVERROR(ENOSYS) if the conversion was not possible (or would be - * lossy and AV_CHANNEL_LAYOUT_RETYPE_FLAG_LOSSLESS was specified) - * AVERROR(EINVAL), AVERROR(ENOMEM) on error - */ -int av_channel_layout_retype(AVChannelLayout *channel_layout, enum AVChannelOrder order, int flags); - -/** - * @} - */ - -#endif /* AVUTIL_CHANNEL_LAYOUT_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/common.h b/3rdparty/ffmpeg/include/libavutil/common.h deleted file mode 100644 index 3b830daf30857..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/common.h +++ /dev/null @@ -1,589 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * common internal and external API header - */ - -#ifndef AVUTIL_COMMON_H -#define AVUTIL_COMMON_H - -#if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS) && !defined(UINT64_C) -#error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "attributes.h" -#include "error.h" -#include "macros.h" -#include "version.h" - -#ifdef HAVE_AV_CONFIG_H -# include "config.h" -# include "intmath.h" -# include "internal.h" -#else -# include "mem.h" -#endif /* HAVE_AV_CONFIG_H */ - -//rounded division & shift -#define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b)) -/* assume b>0 */ -#define ROUNDED_DIV(a,b) (((a)>=0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b)) -/* Fast a/(1<=0 and b>=0 */ -#define AV_CEIL_RSHIFT(a,b) (!av_builtin_constant_p(b) ? -((-(a)) >> (b)) \ - : ((a) + (1<<(b)) - 1) >> (b)) -/* Backwards compat. */ -#define FF_CEIL_RSHIFT AV_CEIL_RSHIFT - -#define FFUDIV(a,b) (((a)>0 ?(a):(a)-(b)+1) / (b)) -#define FFUMOD(a,b) ((a)-(b)*FFUDIV(a,b)) - -/** - * Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they - * are not representable as absolute values of their type. This is the same - * as with *abs() - * @see FFNABS() - */ -#define FFABS(a) ((a) >= 0 ? (a) : (-(a))) -#define FFSIGN(a) ((a) > 0 ? 1 : -1) - -/** - * Negative Absolute value. - * this works for all integers of all types. - * As with many macros, this evaluates its argument twice, it thus must not have - * a sideeffect, that is FFNABS(x++) has undefined behavior. - */ -#define FFNABS(a) ((a) <= 0 ? (a) : (-(a))) - -/** - * Unsigned Absolute value. - * This takes the absolute value of a signed int and returns it as a unsigned. - * This also works with INT_MIN which would otherwise not be representable - * As with many macros, this evaluates its argument twice. - */ -#define FFABSU(a) ((a) <= 0 ? -(unsigned)(a) : (unsigned)(a)) -#define FFABS64U(a) ((a) <= 0 ? -(uint64_t)(a) : (uint64_t)(a)) - -/* misc math functions */ - -#ifndef av_ceil_log2 -# define av_ceil_log2 av_ceil_log2_c -#endif -#ifndef av_clip -# define av_clip av_clip_c -#endif -#ifndef av_clip64 -# define av_clip64 av_clip64_c -#endif -#ifndef av_clip_uint8 -# define av_clip_uint8 av_clip_uint8_c -#endif -#ifndef av_clip_int8 -# define av_clip_int8 av_clip_int8_c -#endif -#ifndef av_clip_uint16 -# define av_clip_uint16 av_clip_uint16_c -#endif -#ifndef av_clip_int16 -# define av_clip_int16 av_clip_int16_c -#endif -#ifndef av_clipl_int32 -# define av_clipl_int32 av_clipl_int32_c -#endif -#ifndef av_clip_intp2 -# define av_clip_intp2 av_clip_intp2_c -#endif -#ifndef av_clip_uintp2 -# define av_clip_uintp2 av_clip_uintp2_c -#endif -#ifndef av_sat_add32 -# define av_sat_add32 av_sat_add32_c -#endif -#ifndef av_sat_dadd32 -# define av_sat_dadd32 av_sat_dadd32_c -#endif -#ifndef av_sat_sub32 -# define av_sat_sub32 av_sat_sub32_c -#endif -#ifndef av_sat_dsub32 -# define av_sat_dsub32 av_sat_dsub32_c -#endif -#ifndef av_sat_add64 -# define av_sat_add64 av_sat_add64_c -#endif -#ifndef av_sat_sub64 -# define av_sat_sub64 av_sat_sub64_c -#endif -#ifndef av_clipf -# define av_clipf av_clipf_c -#endif -#ifndef av_clipd -# define av_clipd av_clipd_c -#endif -#ifndef av_zero_extend -# define av_zero_extend av_zero_extend_c -#endif -#ifndef av_popcount -# define av_popcount av_popcount_c -#endif -#ifndef av_popcount64 -# define av_popcount64 av_popcount64_c -#endif -#ifndef av_parity -# define av_parity av_parity_c -#endif - -#ifndef av_log2 -av_const int av_log2(unsigned v); -#endif - -#ifndef av_log2_16bit -av_const int av_log2_16bit(unsigned v); -#endif - -/** - * Clip a signed integer value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const int av_clip_c(int a, int amin, int amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a signed 64bit integer value into the amin-amax range. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, int64_t amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - if (a < amin) return amin; - else if (a > amax) return amax; - else return a; -} - -/** - * Clip a signed integer value into the 0-255 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const uint8_t av_clip_uint8_c(int a) -{ - if (a&(~0xFF)) return (~a)>>31; - else return a; -} - -/** - * Clip a signed integer value into the -128,127 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int8_t av_clip_int8_c(int a) -{ - if ((a+0x80U) & ~0xFF) return (a>>31) ^ 0x7F; - else return a; -} - -/** - * Clip a signed integer value into the 0-65535 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const uint16_t av_clip_uint16_c(int a) -{ - if (a&(~0xFFFF)) return (~a)>>31; - else return a; -} - -/** - * Clip a signed integer value into the -32768,32767 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int16_t av_clip_int16_c(int a) -{ - if ((a+0x8000U) & ~0xFFFF) return (a>>31) ^ 0x7FFF; - else return a; -} - -/** - * Clip a signed 64-bit integer value into the -2147483648,2147483647 range. - * @param a value to clip - * @return clipped value - */ -static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a) -{ - if ((a+UINT64_C(0x80000000)) & ~UINT64_C(0xFFFFFFFF)) return (int32_t)((a>>63) ^ 0x7FFFFFFF); - else return (int32_t)a; -} - -/** - * Clip a signed integer into the -(2^p),(2^p-1) range. - * @param a value to clip - * @param p bit position to clip at - * @return clipped value - */ -static av_always_inline av_const int av_clip_intp2_c(int a, int p) -{ - if (((unsigned)a + (1U << p)) & ~((2U << p) - 1)) - return (a >> 31) ^ ((1 << p) - 1); - else - return a; -} - -/** - * Clip a signed integer to an unsigned power of two range. - * @param a value to clip - * @param p bit position to clip at - * @return clipped value - */ -static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p) -{ - if (a & ~((1U<> 31 & ((1U<= 2 - if (p > 31) abort(); -#endif - return a & ((1U << p) - 1); -} - -#if FF_API_MOD_UINTP2 -#ifndef av_mod_uintp2 -# define av_mod_uintp2 av_mod_uintp2_c -#endif -attribute_deprecated -static av_always_inline av_const unsigned av_mod_uintp2_c(unsigned a, unsigned p) -{ - return av_zero_extend_c(a, p); -} -#endif - -/** - * Add two signed 32-bit values with saturation. - * - * @param a one value - * @param b another value - * @return sum with signed saturation - */ -static av_always_inline int av_sat_add32_c(int a, int b) -{ - return av_clipl_int32((int64_t)a + b); -} - -/** - * Add a doubled value to another value with saturation at both stages. - * - * @param a first value - * @param b value doubled and added to a - * @return sum sat(a + sat(2*b)) with signed saturation - */ -static av_always_inline int av_sat_dadd32_c(int a, int b) -{ - return av_sat_add32(a, av_sat_add32(b, b)); -} - -/** - * Subtract two signed 32-bit values with saturation. - * - * @param a one value - * @param b another value - * @return difference with signed saturation - */ -static av_always_inline int av_sat_sub32_c(int a, int b) -{ - return av_clipl_int32((int64_t)a - b); -} - -/** - * Subtract a doubled value from another value with saturation at both stages. - * - * @param a first value - * @param b value doubled and subtracted from a - * @return difference sat(a - sat(2*b)) with signed saturation - */ -static av_always_inline int av_sat_dsub32_c(int a, int b) -{ - return av_sat_sub32(a, av_sat_add32(b, b)); -} - -/** - * Add two signed 64-bit values with saturation. - * - * @param a one value - * @param b another value - * @return sum with signed saturation - */ -static av_always_inline int64_t av_sat_add64_c(int64_t a, int64_t b) { -#if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5,1)) || AV_HAS_BUILTIN(__builtin_add_overflow) - int64_t tmp; - return !__builtin_add_overflow(a, b, &tmp) ? tmp : (tmp < 0 ? INT64_MAX : INT64_MIN); -#else - int64_t s = a+(uint64_t)b; - if ((int64_t)(a^b | ~s^b) >= 0) - return INT64_MAX ^ (b >> 63); - return s; -#endif -} - -/** - * Subtract two signed 64-bit values with saturation. - * - * @param a one value - * @param b another value - * @return difference with signed saturation - */ -static av_always_inline int64_t av_sat_sub64_c(int64_t a, int64_t b) { -#if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5,1)) || AV_HAS_BUILTIN(__builtin_sub_overflow) - int64_t tmp; - return !__builtin_sub_overflow(a, b, &tmp) ? tmp : (tmp < 0 ? INT64_MAX : INT64_MIN); -#else - if (b <= 0 && a >= INT64_MAX + b) - return INT64_MAX; - if (b >= 0 && a <= INT64_MIN + b) - return INT64_MIN; - return a - b; -#endif -} - -/** - * Clip a float value into the amin-amax range. - * If a is nan or -inf amin will be returned. - * If a is +inf amax will be returned. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const float av_clipf_c(float a, float amin, float amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - return FFMIN(FFMAX(a, amin), amax); -} - -/** - * Clip a double value into the amin-amax range. - * If a is nan or -inf amin will be returned. - * If a is +inf amax will be returned. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range - * @return clipped value - */ -static av_always_inline av_const double av_clipd_c(double a, double amin, double amax) -{ -#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); -#endif - return FFMIN(FFMAX(a, amin), amax); -} - -/** Compute ceil(log2(x)). - * @param x value used to compute ceil(log2(x)) - * @return computed ceiling of log2(x) - */ -static av_always_inline av_const int av_ceil_log2_c(int x) -{ - return av_log2((x - 1U) << 1); -} - -/** - * Count number of bits set to one in x - * @param x value to count bits of - * @return the number of bits set to one in x - */ -static av_always_inline av_const int av_popcount_c(uint32_t x) -{ - x -= (x >> 1) & 0x55555555; - x = (x & 0x33333333) + ((x >> 2) & 0x33333333); - x = (x + (x >> 4)) & 0x0F0F0F0F; - x += x >> 8; - return (x + (x >> 16)) & 0x3F; -} - -/** - * Count number of bits set to one in x - * @param x value to count bits of - * @return the number of bits set to one in x - */ -static av_always_inline av_const int av_popcount64_c(uint64_t x) -{ - return av_popcount((uint32_t)x) + av_popcount((uint32_t)(x >> 32)); -} - -static av_always_inline av_const int av_parity_c(uint32_t v) -{ - return av_popcount(v) & 1; -} - -/** - * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form. - * - * @param val Output value, must be an lvalue of type uint32_t. - * @param GET_BYTE Expression reading one byte from the input. - * Evaluated up to 7 times (4 for the currently - * assigned Unicode range). With a memory buffer - * input, this could be *ptr++, or if you want to make sure - * that *ptr stops at the end of a NULL terminated string then - * *ptr ? *ptr++ : 0 - * @param ERROR Expression to be evaluated on invalid input, - * typically a goto statement. - * - * @warning ERROR should not contain a loop control statement which - * could interact with the internal while loop, and should force an - * exit from the macro code (e.g. through a goto or a return) in order - * to prevent undefined results. - */ -#define GET_UTF8(val, GET_BYTE, ERROR)\ - val= (GET_BYTE);\ - {\ - uint32_t top = (val & 128) >> 1;\ - if ((val & 0xc0) == 0x80 || val >= 0xFE)\ - {ERROR}\ - while (val & top) {\ - unsigned int tmp = (GET_BYTE) - 128;\ - if(tmp>>6)\ - {ERROR}\ - val= (val<<6) + tmp;\ - top <<= 5;\ - }\ - val &= (top << 1) - 1;\ - } - -/** - * Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form. - * - * @param val Output value, must be an lvalue of type uint32_t. - * @param GET_16BIT Expression returning two bytes of UTF-16 data converted - * to native byte order. Evaluated one or two times. - * @param ERROR Expression to be evaluated on invalid input, - * typically a goto statement. - */ -#define GET_UTF16(val, GET_16BIT, ERROR)\ - val = (GET_16BIT);\ - {\ - unsigned int hi = val - 0xD800;\ - if (hi < 0x800) {\ - val = (GET_16BIT) - 0xDC00;\ - if (val > 0x3FFU || hi > 0x3FFU)\ - {ERROR}\ - val += (hi<<10) + 0x10000;\ - }\ - }\ - -/** - * @def PUT_UTF8(val, tmp, PUT_BYTE) - * Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long). - * @param val is an input-only argument and should be of type uint32_t. It holds - * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If - * val is given as a function it is executed only once. - * @param tmp is a temporary variable and should be of type uint8_t. It - * represents an intermediate value during conversion that is to be - * output by PUT_BYTE. - * @param PUT_BYTE writes the converted UTF-8 bytes to any proper destination. - * It could be a function or a statement, and uses tmp as the input byte. - * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be - * executed up to 4 times for values in the valid UTF-8 range and up to - * 7 times in the general case, depending on the length of the converted - * Unicode character. - */ -#define PUT_UTF8(val, tmp, PUT_BYTE)\ - {\ - int bytes, shift;\ - uint32_t in = val;\ - if (in < 0x80) {\ - tmp = in;\ - PUT_BYTE\ - } else {\ - bytes = (av_log2(in) + 4) / 5;\ - shift = (bytes - 1) * 6;\ - tmp = (256 - (256 >> bytes)) | (in >> shift);\ - PUT_BYTE\ - while (shift >= 6) {\ - shift -= 6;\ - tmp = 0x80 | ((in >> shift) & 0x3f);\ - PUT_BYTE\ - }\ - }\ - } - -/** - * @def PUT_UTF16(val, tmp, PUT_16BIT) - * Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes). - * @param val is an input-only argument and should be of type uint32_t. It holds - * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If - * val is given as a function it is executed only once. - * @param tmp is a temporary variable and should be of type uint16_t. It - * represents an intermediate value during conversion that is to be - * output by PUT_16BIT. - * @param PUT_16BIT writes the converted UTF-16 data to any proper destination - * in desired endianness. It could be a function or a statement, and uses tmp - * as the input byte. For example, PUT_BYTE could be "*output++ = tmp;" - * PUT_BYTE will be executed 1 or 2 times depending on input character. - */ -#define PUT_UTF16(val, tmp, PUT_16BIT)\ - {\ - uint32_t in = val;\ - if (in < 0x10000) {\ - tmp = in;\ - PUT_16BIT\ - } else {\ - tmp = 0xD800 | ((in - 0x10000) >> 10);\ - PUT_16BIT\ - tmp = 0xDC00 | ((in - 0x10000) & 0x3FF);\ - PUT_16BIT\ - }\ - }\ - -#endif /* AVUTIL_COMMON_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/cpu.h b/3rdparty/ffmpeg/include/libavutil/cpu.h deleted file mode 100644 index 5ef5da58eb350..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/cpu.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (c) 2000, 2001, 2002 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CPU_H -#define AVUTIL_CPU_H - -#include -#include "version.h" - -#define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */ - - /* lower 16 bits - CPU features */ -#define AV_CPU_FLAG_MMX 0x0001 ///< standard MMX -#define AV_CPU_FLAG_MMXEXT 0x0002 ///< SSE integer functions or AMD MMX ext -#define AV_CPU_FLAG_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext -#define AV_CPU_FLAG_3DNOW 0x0004 ///< AMD 3DNOW -#define AV_CPU_FLAG_SSE 0x0008 ///< SSE functions -#define AV_CPU_FLAG_SSE2 0x0010 ///< PIV SSE2 functions -#define AV_CPU_FLAG_SSE2SLOW 0x40000000 ///< SSE2 supported, but usually not faster - ///< than regular MMX/SSE (e.g. Core1) -#define AV_CPU_FLAG_3DNOWEXT 0x0020 ///< AMD 3DNowExt -#define AV_CPU_FLAG_SSE3 0x0040 ///< Prescott SSE3 functions -#define AV_CPU_FLAG_SSE3SLOW 0x20000000 ///< SSE3 supported, but usually not faster - ///< than regular MMX/SSE (e.g. Core1) -#define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions -#define AV_CPU_FLAG_SSSE3SLOW 0x4000000 ///< SSSE3 supported, but usually not faster -#define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower -#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions -#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions -#define AV_CPU_FLAG_AESNI 0x80000 ///< Advanced Encryption Standard functions -#define AV_CPU_FLAG_AVX 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used -#define AV_CPU_FLAG_AVXSLOW 0x8000000 ///< AVX supported, but slow when using YMM registers (e.g. Bulldozer) -#define AV_CPU_FLAG_XOP 0x0400 ///< Bulldozer XOP functions -#define AV_CPU_FLAG_FMA4 0x0800 ///< Bulldozer FMA4 functions -#define AV_CPU_FLAG_CMOV 0x1000 ///< supports cmov instruction -#define AV_CPU_FLAG_AVX2 0x8000 ///< AVX2 functions: requires OS support even if YMM registers aren't used -#define AV_CPU_FLAG_FMA3 0x10000 ///< Haswell FMA3 functions -#define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 1 -#define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 2 -#define AV_CPU_FLAG_AVX512 0x100000 ///< AVX-512 functions: requires OS support even if YMM/ZMM registers aren't used -#define AV_CPU_FLAG_AVX512ICL 0x200000 ///< F/CD/BW/DQ/VL/VNNI/IFMA/VBMI/VBMI2/VPOPCNTDQ/BITALG/GFNI/VAES/VPCLMULQDQ -#define AV_CPU_FLAG_SLOW_GATHER 0x2000000 ///< CPU has slow gathers. - -#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard -#define AV_CPU_FLAG_VSX 0x0002 ///< ISA 2.06 -#define AV_CPU_FLAG_POWER8 0x0004 ///< ISA 2.07 - -#define AV_CPU_FLAG_ARMV5TE (1 << 0) -#define AV_CPU_FLAG_ARMV6 (1 << 1) -#define AV_CPU_FLAG_ARMV6T2 (1 << 2) -#define AV_CPU_FLAG_VFP (1 << 3) -#define AV_CPU_FLAG_VFPV3 (1 << 4) -#define AV_CPU_FLAG_NEON (1 << 5) -#define AV_CPU_FLAG_ARMV8 (1 << 6) -#define AV_CPU_FLAG_VFP_VM (1 << 7) ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in various CPUs implementations -#define AV_CPU_FLAG_DOTPROD (1 << 8) -#define AV_CPU_FLAG_I8MM (1 << 9) -#define AV_CPU_FLAG_SVE (1 <<10) -#define AV_CPU_FLAG_SVE2 (1 <<11) -#define AV_CPU_FLAG_SETEND (1 <<16) - -#define AV_CPU_FLAG_MMI (1 << 0) -#define AV_CPU_FLAG_MSA (1 << 1) - -//Loongarch SIMD extension. -#define AV_CPU_FLAG_LSX (1 << 0) -#define AV_CPU_FLAG_LASX (1 << 1) - -// RISC-V extensions -#define AV_CPU_FLAG_RVI (1 << 0) ///< I (full GPR bank) -#if FF_API_RISCV_FD_ZBA -#define AV_CPU_FLAG_RVF (1 << 1) ///< F (single precision FP) -#define AV_CPU_FLAG_RVD (1 << 2) ///< D (double precision FP) -#endif -#define AV_CPU_FLAG_RVV_I32 (1 << 3) ///< Vectors of 8/16/32-bit int's */ -#define AV_CPU_FLAG_RVV_F32 (1 << 4) ///< Vectors of float's */ -#define AV_CPU_FLAG_RVV_I64 (1 << 5) ///< Vectors of 64-bit int's */ -#define AV_CPU_FLAG_RVV_F64 (1 << 6) ///< Vectors of double's -#define AV_CPU_FLAG_RVB_BASIC (1 << 7) ///< Basic bit-manipulations -#if FF_API_RISCV_FD_ZBA -#define AV_CPU_FLAG_RVB_ADDR (1 << 8) ///< Address bit-manipulations -#endif -#define AV_CPU_FLAG_RV_ZVBB (1 << 9) ///< Vector basic bit-manipulations -#define AV_CPU_FLAG_RV_MISALIGNED (1 <<10) ///< Fast misaligned accesses -#define AV_CPU_FLAG_RVB (1 <<11) ///< B (bit manipulations) - -// WASM extensions -#define AV_CPU_FLAG_SIMD128 (1 << 0) - -/** - * Return the flags which specify extensions supported by the CPU. - * The returned value is affected by av_force_cpu_flags() if that was used - * before. So av_get_cpu_flags() can easily be used in an application to - * detect the enabled cpu flags. - */ -int av_get_cpu_flags(void); - -/** - * Disables cpu detection and forces the specified flags. - * -1 is a special case that disables forcing of specific flags. - */ -void av_force_cpu_flags(int flags); - -/** - * Parse CPU caps from a string and update the given AV_CPU_* flags based on that. - * - * @return negative on error. - */ -int av_parse_cpu_caps(unsigned *flags, const char *s); - -/** - * @return the number of logical CPU cores present. - */ -int av_cpu_count(void); - -/** - * Overrides cpu count detection and forces the specified count. - * Count < 1 disables forcing of specific count. - */ -void av_cpu_force_count(int count); - -/** - * Get the maximum data alignment that may be required by FFmpeg. - * - * Note that this is affected by the build configuration and the CPU flags mask, - * so e.g. if the CPU supports AVX, but libavutil has been built with - * --disable-avx or the AV_CPU_FLAG_AVX flag has been disabled through - * av_set_cpu_flags_mask(), then this function will behave as if AVX is not - * present. - */ -size_t av_cpu_max_align(void); - -#endif /* AVUTIL_CPU_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/crc.h b/3rdparty/ffmpeg/include/libavutil/crc.h deleted file mode 100644 index 7f59812a18c9e..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/crc.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_crc32 - * Public header for CRC hash function implementation. - */ - -#ifndef AVUTIL_CRC_H -#define AVUTIL_CRC_H - -#include -#include -#include "attributes.h" - -/** - * @defgroup lavu_crc32 CRC - * @ingroup lavu_hash - * CRC (Cyclic Redundancy Check) hash function implementation. - * - * This module supports numerous CRC polynomials, in addition to the most - * widely used CRC-32-IEEE. See @ref AVCRCId for a list of available - * polynomials. - * - * @{ - */ - -typedef uint32_t AVCRC; - -typedef enum { - AV_CRC_8_ATM, - AV_CRC_16_ANSI, - AV_CRC_16_CCITT, - AV_CRC_32_IEEE, - AV_CRC_32_IEEE_LE, /*< reversed bitorder version of AV_CRC_32_IEEE */ - AV_CRC_16_ANSI_LE, /*< reversed bitorder version of AV_CRC_16_ANSI */ - AV_CRC_24_IEEE, - AV_CRC_8_EBU, - AV_CRC_MAX, /*< Not part of public API! Do not use outside libavutil. */ -}AVCRCId; - -/** - * Initialize a CRC table. - * @param ctx must be an array of size sizeof(AVCRC)*257 or sizeof(AVCRC)*1024 - * @param le If 1, the lowest bit represents the coefficient for the highest - * exponent of the corresponding polynomial (both for poly and - * actual CRC). - * If 0, you must swap the CRC parameter and the result of av_crc - * if you need the standard representation (can be simplified in - * most cases to e.g. bswap16): - * av_bswap32(crc << (32-bits)) - * @param bits number of bits for the CRC - * @param poly generator polynomial without the x**bits coefficient, in the - * representation as specified by le - * @param ctx_size size of ctx in bytes - * @return <0 on failure - */ -int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size); - -/** - * Get an initialized standard CRC table. - * @param crc_id ID of a standard CRC - * @return a pointer to the CRC table or NULL on failure - */ -const AVCRC *av_crc_get_table(AVCRCId crc_id); - -/** - * Calculate the CRC of a block. - * @param ctx initialized AVCRC array (see av_crc_init()) - * @param crc CRC of previous blocks if any or initial value for CRC - * @param buffer buffer whose CRC to calculate - * @param length length of the buffer - * @return CRC updated with the data from the given block - * - * @see av_crc_init() "le" parameter - */ -uint32_t av_crc(const AVCRC *ctx, uint32_t crc, - const uint8_t *buffer, size_t length) av_pure; - -/** - * @} - */ - -#endif /* AVUTIL_CRC_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/csp.h b/3rdparty/ffmpeg/include/libavutil/csp.h deleted file mode 100644 index 9871b1c9b2028..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/csp.h +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright (c) 2015 Kevin Wheatley - * Copyright (c) 2016 Ronald S. Bultje - * Copyright (c) 2023 Leo Izen - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_CSP_H -#define AVUTIL_CSP_H - -#include "pixfmt.h" -#include "rational.h" - -/** - * @file - * Colorspace value utility functions for libavutil. - * @ingroup lavu_math_csp - * @author Ronald S. Bultje - * @author Leo Izen - * @author Kevin Wheatley - */ - -/** - * @defgroup lavu_math_csp Colorspace Utility - * @ingroup lavu_math - * @{ - */ - -/** - * Struct containing luma coefficients to be used for RGB to YUV/YCoCg, or similar - * calculations. - */ -typedef struct AVLumaCoefficients { - AVRational cr, cg, cb; -} AVLumaCoefficients; - -/** - * Struct containing chromaticity x and y values for the standard CIE 1931 - * chromaticity definition. - */ -typedef struct AVCIExy { - AVRational x, y; -} AVCIExy; - -/** - * Struct defining the red, green, and blue primary locations in terms of CIE - * 1931 chromaticity x and y. - */ -typedef struct AVPrimaryCoefficients { - AVCIExy r, g, b; -} AVPrimaryCoefficients; - -/** - * Struct defining white point location in terms of CIE 1931 chromaticity x - * and y. - */ -typedef AVCIExy AVWhitepointCoefficients; - -/** - * Struct that contains both white point location and primaries location, providing - * the complete description of a color gamut. - */ -typedef struct AVColorPrimariesDesc { - AVWhitepointCoefficients wp; - AVPrimaryCoefficients prim; -} AVColorPrimariesDesc; - -/** - * Function pointer representing a double -> double transfer function that - * performs either an OETF transfer function, or alternatively an inverse EOTF - * function (in particular, for SMPTE ST 2084 / PQ). This function inputs - * linear light, and outputs gamma encoded light. - * - * See ITU-T H.273 for more information. - */ -typedef double (*av_csp_trc_function)(double); - -/** - * Retrieves the Luma coefficients necessary to construct a conversion matrix - * from an enum constant describing the colorspace. - * @param csp An enum constant indicating YUV or similar colorspace. - * @return The Luma coefficients associated with that colorspace, or NULL - * if the constant is unknown to libavutil. - */ -const AVLumaCoefficients *av_csp_luma_coeffs_from_avcsp(enum AVColorSpace csp); - -/** - * Retrieves a complete gamut description from an enum constant describing the - * color primaries. - * @param prm An enum constant indicating primaries - * @return A description of the colorspace gamut associated with that enum - * constant, or NULL if the constant is unknown to libavutil. - */ -const AVColorPrimariesDesc *av_csp_primaries_desc_from_id(enum AVColorPrimaries prm); - -/** - * Detects which enum AVColorPrimaries constant corresponds to the given complete - * gamut description. - * @see enum AVColorPrimaries - * @param prm A description of the colorspace gamut - * @return The enum constant associated with this gamut, or - * AVCOL_PRI_UNSPECIFIED if no clear match can be identified. - */ -enum AVColorPrimaries av_csp_primaries_id_from_desc(const AVColorPrimariesDesc *prm); - -/** - * Determine a suitable 'gamma' value to match the supplied - * AVColorTransferCharacteristic. - * - * See Apple Technical Note TN2257 (https://developer.apple.com/library/mac/technotes/tn2257/_index.html) - * - * This function returns the gamma exponent for the OETF. For example, sRGB is approximated - * by gamma 2.2, not by gamma 0.45455. - * - * @return Will return an approximation to the simple gamma function matching - * the supplied Transfer Characteristic, Will return 0.0 for any - * we cannot reasonably match against. - */ -double av_csp_approximate_trc_gamma(enum AVColorTransferCharacteristic trc); - -/** - * Determine the function needed to apply the given - * AVColorTransferCharacteristic to linear input. - * - * The function returned should expect a nominal domain and range of [0.0-1.0] - * values outside of this range maybe valid depending on the chosen - * characteristic function. - * - * @return Will return pointer to the function matching the - * supplied Transfer Characteristic. If unspecified will - * return NULL: - */ -av_csp_trc_function av_csp_trc_func_from_id(enum AVColorTransferCharacteristic trc); - -/** - * Returns the mathematical inverse of the corresponding TRC function. - */ -av_csp_trc_function av_csp_trc_func_inv_from_id(enum AVColorTransferCharacteristic trc); - -/** - * Function pointer representing an ITU EOTF transfer for a given reference - * display configuration. - * - * @param Lw The white point luminance of the display, in nits (cd/m^2). - * @param Lb The black point luminance of the display, in nits (cd/m^2). - */ -typedef void (*av_csp_eotf_function)(double Lw, double Lb, double c[3]); - -/** - * Returns the ITU EOTF corresponding to a given TRC. This converts from the - * signal level [0,1] to the raw output display luminance in nits (cd/m^2). - * This is done per channel in RGB space, except for AVCOL_TRC_SMPTE428, which - * assumes CIE XYZ in- and output. - * - * @return A pointer to the function implementing the given TRC, or NULL if no - * such function is defined. - * - * @note In general, the resulting function is defined (wherever possible) for - * out-of-range values, even though these values do not have a physical - * meaning on the given display. Users should clamp inputs (or outputs) - * if this behavior is not desired. - * - * This is also the case for functions like PQ, which are defined over an - * absolute signal range independent of the target display capabilities. - */ -av_csp_eotf_function av_csp_itu_eotf(enum AVColorTransferCharacteristic trc); - -/** - * Returns the mathematical inverse of the corresponding EOTF. - */ -av_csp_eotf_function av_csp_itu_eotf_inv(enum AVColorTransferCharacteristic trc); - -/** - * @} - */ - -#endif /* AVUTIL_CSP_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/des.h b/3rdparty/ffmpeg/include/libavutil/des.h deleted file mode 100644 index 3a3e6fa47cef6..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/des.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * DES encryption/decryption - * Copyright (c) 2007 Reimar Doeffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_DES_H -#define AVUTIL_DES_H - -#include - -/** - * @defgroup lavu_des DES - * @ingroup lavu_crypto - * @{ - */ - -typedef struct AVDES { - uint64_t round_keys[3][16]; - int triple_des; -} AVDES; - -/** - * Allocate an AVDES context. - */ -AVDES *av_des_alloc(void); - -/** - * @brief Initializes an AVDES context. - * - * @param d pointer to a AVDES structure to initialize - * @param key pointer to the key to use - * @param key_bits must be 64 or 192 - * @param decrypt 0 for encryption/CBC-MAC, 1 for decryption - * @return zero on success, negative value otherwise - */ -int av_des_init(struct AVDES *d, const uint8_t *key, int key_bits, int decrypt); - -/** - * @brief Encrypts / decrypts using the DES algorithm. - * - * @param d pointer to the AVDES structure - * @param dst destination array, can be equal to src, must be 8-byte aligned - * @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used, - * must be 8-byte aligned - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_des_crypt(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); - -/** - * @brief Calculates CBC-MAC using the DES algorithm. - * - * @param d pointer to the AVDES structure - * @param dst destination array, can be equal to src, must be 8-byte aligned - * @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL - * @param count number of 8 byte blocks - */ -void av_des_mac(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count); - -/** - * @} - */ - -#endif /* AVUTIL_DES_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/detection_bbox.h b/3rdparty/ffmpeg/include/libavutil/detection_bbox.h deleted file mode 100644 index 011988052c23f..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/detection_bbox.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_DETECTION_BBOX_H -#define AVUTIL_DETECTION_BBOX_H - -#include "rational.h" -#include "avassert.h" -#include "frame.h" - -typedef struct AVDetectionBBox { - /** - * Distance in pixels from the left/top edge of the frame, - * together with width and height, defining the bounding box. - */ - int x; - int y; - int w; - int h; - -#define AV_DETECTION_BBOX_LABEL_NAME_MAX_SIZE 64 - - /** - * Detect result with confidence - */ - char detect_label[AV_DETECTION_BBOX_LABEL_NAME_MAX_SIZE]; - AVRational detect_confidence; - - /** - * At most 4 classifications based on the detected bounding box. - * For example, we can get max 4 different attributes with 4 different - * DNN models on one bounding box. - * classify_count is zero if no classification. - */ -#define AV_NUM_DETECTION_BBOX_CLASSIFY 4 - uint32_t classify_count; - char classify_labels[AV_NUM_DETECTION_BBOX_CLASSIFY][AV_DETECTION_BBOX_LABEL_NAME_MAX_SIZE]; - AVRational classify_confidences[AV_NUM_DETECTION_BBOX_CLASSIFY]; -} AVDetectionBBox; - -typedef struct AVDetectionBBoxHeader { - /** - * Information about how the bounding box is generated. - * for example, the DNN model name. - */ - char source[256]; - - /** - * Number of bounding boxes in the array. - */ - uint32_t nb_bboxes; - - /** - * Offset in bytes from the beginning of this structure at which - * the array of bounding boxes starts. - */ - size_t bboxes_offset; - - /** - * Size of each bounding box in bytes. - */ - size_t bbox_size; -} AVDetectionBBoxHeader; - -/* - * Get the bounding box at the specified {@code idx}. Must be between 0 and nb_bboxes. - */ -static av_always_inline AVDetectionBBox * -av_get_detection_bbox(const AVDetectionBBoxHeader *header, unsigned int idx) -{ - av_assert0(idx < header->nb_bboxes); - return (AVDetectionBBox *)((uint8_t *)header + header->bboxes_offset + - idx * header->bbox_size); -} - -/** - * Allocates memory for AVDetectionBBoxHeader, plus an array of {@code nb_bboxes} - * AVDetectionBBox, and initializes the variables. - * Can be freed with a normal av_free() call. - * - * @param nb_bboxes number of AVDetectionBBox structures to allocate - * @param out_size if non-NULL, the size in bytes of the resulting data array is - * written here. - */ -AVDetectionBBoxHeader *av_detection_bbox_alloc(uint32_t nb_bboxes, size_t *out_size); - -/** - * Allocates memory for AVDetectionBBoxHeader, plus an array of {@code nb_bboxes} - * AVDetectionBBox, in the given AVFrame {@code frame} as AVFrameSideData of type - * AV_FRAME_DATA_DETECTION_BBOXES and initializes the variables. - */ -AVDetectionBBoxHeader *av_detection_bbox_create_side_data(AVFrame *frame, uint32_t nb_bboxes); -#endif diff --git a/3rdparty/ffmpeg/include/libavutil/dict.h b/3rdparty/ffmpeg/include/libavutil/dict.h deleted file mode 100644 index 93c7cbf1286c3..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/dict.h +++ /dev/null @@ -1,242 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Public dictionary API. - * @deprecated - * AVDictionary is provided for compatibility with libav. It is both in - * implementation as well as API inefficient. It does not scale and is - * extremely slow with large dictionaries. - * It is recommended that new code uses our tree container from tree.c/h - * where applicable, which uses AVL trees to achieve O(log n) performance. - */ - -#ifndef AVUTIL_DICT_H -#define AVUTIL_DICT_H - -#include - -/** - * @addtogroup lavu_dict AVDictionary - * @ingroup lavu_data - * - * @brief Simple key:value store - * - * @{ - * Dictionaries are used for storing key-value pairs. - * - * - To **create an AVDictionary**, simply pass an address of a NULL - * pointer to av_dict_set(). NULL can be used as an empty dictionary - * wherever a pointer to an AVDictionary is required. - * - To **insert an entry**, use av_dict_set(). - * - Use av_dict_get() to **retrieve an entry**. - * - To **iterate over all entries**, use av_dict_iterate(). - * - In order to **free the dictionary and all its contents**, use av_dict_free(). - * - @code - AVDictionary *d = NULL; // "create" an empty dictionary - AVDictionaryEntry *t = NULL; - - av_dict_set(&d, "foo", "bar", 0); // add an entry - - char *k = av_strdup("key"); // if your strings are already allocated, - char *v = av_strdup("value"); // you can avoid copying them like this - av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL); - - while ((t = av_dict_iterate(d, t))) { - <....> // iterate over all entries in d - } - av_dict_free(&d); - @endcode - */ - -/** - * @name AVDictionary Flags - * Flags that influence behavior of the matching of keys or insertion to the dictionary. - * @{ - */ -#define AV_DICT_MATCH_CASE 1 /**< Only get an entry with exact-case key match. Only relevant in av_dict_get(). */ -#define AV_DICT_IGNORE_SUFFIX 2 /**< Return first entry in a dictionary whose first part corresponds to the search key, - ignoring the suffix of the found key string. Only relevant in av_dict_get(). */ -#define AV_DICT_DONT_STRDUP_KEY 4 /**< Take ownership of a key that's been - allocated with av_malloc() or another memory allocation function. */ -#define AV_DICT_DONT_STRDUP_VAL 8 /**< Take ownership of a value that's been - allocated with av_malloc() or another memory allocation function. */ -#define AV_DICT_DONT_OVERWRITE 16 /**< Don't overwrite existing entries. */ -#define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no - delimiter is added, the strings are simply concatenated. */ -#define AV_DICT_MULTIKEY 64 /**< Allow to store several equal keys in the dictionary */ -#define AV_DICT_DEDUP 128 /**< If inserting a value that already exists for a key, do nothing. Only relevant with AV_DICT_MULTIKEY. */ -/** - * @} - */ - -typedef struct AVDictionaryEntry { - char *key; - char *value; -} AVDictionaryEntry; - -typedef struct AVDictionary AVDictionary; - -/** - * Get a dictionary entry with matching key. - * - * The returned entry key or value must not be changed, or it will - * cause undefined behavior. - * - * @param prev Set to the previous matching element to find the next. - * If set to NULL the first matching element is returned. - * @param key Matching key - * @param flags A collection of AV_DICT_* flags controlling how the - * entry is retrieved - * - * @return Found entry or NULL in case no matching entry was found in the dictionary - */ -AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key, - const AVDictionaryEntry *prev, int flags); - -/** - * Iterate over a dictionary - * - * Iterates through all entries in the dictionary. - * - * @warning The returned AVDictionaryEntry key/value must not be changed. - * - * @warning As av_dict_set() invalidates all previous entries returned - * by this function, it must not be called while iterating over the dict. - * - * Typical usage: - * @code - * const AVDictionaryEntry *e = NULL; - * while ((e = av_dict_iterate(m, e))) { - * // ... - * } - * @endcode - * - * @param m The dictionary to iterate over - * @param prev Pointer to the previous AVDictionaryEntry, NULL initially - * - * @retval AVDictionaryEntry* The next element in the dictionary - * @retval NULL No more elements in the dictionary - */ -const AVDictionaryEntry *av_dict_iterate(const AVDictionary *m, - const AVDictionaryEntry *prev); - -/** - * Get number of entries in dictionary. - * - * @param m dictionary - * @return number of entries in dictionary - */ -int av_dict_count(const AVDictionary *m); - -/** - * Set the given entry in *pm, overwriting an existing entry. - * - * Note: If AV_DICT_DONT_STRDUP_KEY or AV_DICT_DONT_STRDUP_VAL is set, - * these arguments will be freed on error. - * - * @warning Adding a new entry to a dictionary invalidates all existing entries - * previously returned with av_dict_get() or av_dict_iterate(). - * - * @param pm Pointer to a pointer to a dictionary struct. If *pm is NULL - * a dictionary struct is allocated and put in *pm. - * @param key Entry key to add to *pm (will either be av_strduped or added as a new key depending on flags) - * @param value Entry value to add to *pm (will be av_strduped or added as a new key depending on flags). - * Passing a NULL value will cause an existing entry to be deleted. - * - * @return >= 0 on success otherwise an error code <0 - */ -int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags); - -/** - * Convenience wrapper for av_dict_set() that converts the value to a string - * and stores it. - * - * Note: If ::AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error. - */ -int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags); - -/** - * Parse the key/value pairs list and add the parsed entries to a dictionary. - * - * In case of failure, all the successfully set entries are stored in - * *pm. You may need to manually free the created dictionary. - * - * @param key_val_sep A 0-terminated list of characters used to separate - * key from value - * @param pairs_sep A 0-terminated list of characters used to separate - * two pairs from each other - * @param flags Flags to use when adding to the dictionary. - * ::AV_DICT_DONT_STRDUP_KEY and ::AV_DICT_DONT_STRDUP_VAL - * are ignored since the key/value tokens will always - * be duplicated. - * - * @return 0 on success, negative AVERROR code on failure - */ -int av_dict_parse_string(AVDictionary **pm, const char *str, - const char *key_val_sep, const char *pairs_sep, - int flags); - -/** - * Copy entries from one AVDictionary struct into another. - * - * @note Metadata is read using the ::AV_DICT_IGNORE_SUFFIX flag - * - * @param dst Pointer to a pointer to a AVDictionary struct to copy into. If *dst is NULL, - * this function will allocate a struct for you and put it in *dst - * @param src Pointer to the source AVDictionary struct to copy items from. - * @param flags Flags to use when setting entries in *dst - * - * @return 0 on success, negative AVERROR code on failure. If dst was allocated - * by this function, callers should free the associated memory. - */ -int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags); - -/** - * Free all the memory allocated for an AVDictionary struct - * and all keys and values. - */ -void av_dict_free(AVDictionary **m); - -/** - * Get dictionary entries as a string. - * - * Create a string containing dictionary's entries. - * Such string may be passed back to av_dict_parse_string(). - * @note String is escaped with backslashes ('\'). - * - * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. - * - * @param[in] m The dictionary - * @param[out] buffer Pointer to buffer that will be allocated with string containing entries. - * Buffer must be freed by the caller when is no longer needed. - * @param[in] key_val_sep Character used to separate key from value - * @param[in] pairs_sep Character used to separate two pairs from each other - * - * @return >= 0 on success, negative on error - */ -int av_dict_get_string(const AVDictionary *m, char **buffer, - const char key_val_sep, const char pairs_sep); - -/** - * @} - */ - -#endif /* AVUTIL_DICT_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/display.h b/3rdparty/ffmpeg/include/libavutil/display.h deleted file mode 100644 index 50f2b44caf574..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/display.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2014 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_video_display - * Display matrix - */ - -#ifndef AVUTIL_DISPLAY_H -#define AVUTIL_DISPLAY_H - -#include - -/** - * @defgroup lavu_video_display Display transformation matrix functions - * @ingroup lavu_video - * - * The display transformation matrix specifies an affine transformation that - * should be applied to video frames for correct presentation. It is compatible - * with the matrices stored in the ISO/IEC 14496-12 container format. - * - * The data is a 3x3 matrix represented as a 9-element array: - * - * @code{.unparsed} - * | a b u | - * (a, b, u, c, d, v, x, y, w) -> | c d v | - * | x y w | - * @endcode - * - * All numbers are stored in native endianness, as 16.16 fixed-point values, - * except for u, v and w, which are stored as 2.30 fixed-point values. - * - * The transformation maps a point (p, q) in the source (pre-transformation) - * frame to the point (p', q') in the destination (post-transformation) frame as - * follows: - * - * @code{.unparsed} - * | a b u | - * (p, q, 1) . | c d v | = z * (p', q', 1) - * | x y w | - * @endcode - * - * The transformation can also be more explicitly written in components as - * follows: - * - * @code{.unparsed} - * p' = (a * p + c * q + x) / z; - * q' = (b * p + d * q + y) / z; - * z = u * p + v * q + w - * @endcode - * - * @{ - */ - -/** - * Extract the rotation component of the transformation matrix. - * - * @param matrix the transformation matrix - * @return the angle (in degrees) by which the transformation rotates the frame - * counterclockwise. The angle will be in range [-180.0, 180.0], - * or NaN if the matrix is singular. - * - * @note floating point numbers are inherently inexact, so callers are - * recommended to round the return value to nearest integer before use. - */ -double av_display_rotation_get(const int32_t matrix[9]); - -/** - * Initialize a transformation matrix describing a pure clockwise - * rotation by the specified angle (in degrees). - * - * @param[out] matrix a transformation matrix (will be fully overwritten - * by this function) - * @param angle rotation angle in degrees. - */ -void av_display_rotation_set(int32_t matrix[9], double angle); - -/** - * Flip the input matrix horizontally and/or vertically. - * - * @param[in,out] matrix a transformation matrix - * @param hflip whether the matrix should be flipped horizontally - * @param vflip whether the matrix should be flipped vertically - */ -void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip); - -/** - * @} - */ - -#endif /* AVUTIL_DISPLAY_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/dovi_meta.h b/3rdparty/ffmpeg/include/libavutil/dovi_meta.h deleted file mode 100644 index 5e8a1e43d7f2a..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/dovi_meta.h +++ /dev/null @@ -1,396 +0,0 @@ -/* - * Copyright (c) 2020 Vacing Fang - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * DOVI configuration - */ - - -#ifndef AVUTIL_DOVI_META_H -#define AVUTIL_DOVI_META_H - -#include -#include - -#include "rational.h" -#include "csp.h" - -/* - * DOVI configuration - * ref: dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2 - dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2 - * @code - * uint8_t dv_version_major, the major version number that the stream complies with - * uint8_t dv_version_minor, the minor version number that the stream complies with - * uint8_t dv_profile, the Dolby Vision profile - * uint8_t dv_level, the Dolby Vision level - * uint8_t rpu_present_flag - * uint8_t el_present_flag - * uint8_t bl_present_flag - * uint8_t dv_bl_signal_compatibility_id - * uint8_t dv_md_compression, the compression method in use - * @endcode - * - * @note The struct must be allocated with av_dovi_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVDOVIDecoderConfigurationRecord { - uint8_t dv_version_major; - uint8_t dv_version_minor; - uint8_t dv_profile; - uint8_t dv_level; - uint8_t rpu_present_flag; - uint8_t el_present_flag; - uint8_t bl_present_flag; - uint8_t dv_bl_signal_compatibility_id; - uint8_t dv_md_compression; -} AVDOVIDecoderConfigurationRecord; - -enum AVDOVICompression { - AV_DOVI_COMPRESSION_NONE = 0, - AV_DOVI_COMPRESSION_LIMITED = 1, - AV_DOVI_COMPRESSION_RESERVED = 2, - AV_DOVI_COMPRESSION_EXTENDED = 3, -}; - -/** - * Allocate a AVDOVIDecoderConfigurationRecord structure and initialize its - * fields to default values. - * - * @return the newly allocated struct or NULL on failure - */ -AVDOVIDecoderConfigurationRecord *av_dovi_alloc(size_t *size); - -/** - * Dolby Vision RPU data header. - * - * @note sizeof(AVDOVIRpuDataHeader) is not part of the public ABI. - */ -typedef struct AVDOVIRpuDataHeader { - uint8_t rpu_type; - uint16_t rpu_format; - uint8_t vdr_rpu_profile; - uint8_t vdr_rpu_level; - uint8_t chroma_resampling_explicit_filter_flag; - uint8_t coef_data_type; /* informative, lavc always converts to fixed */ - uint8_t coef_log2_denom; - uint8_t vdr_rpu_normalized_idc; - uint8_t bl_video_full_range_flag; - uint8_t bl_bit_depth; /* [8, 16] */ - uint8_t el_bit_depth; /* [8, 16] */ - uint8_t vdr_bit_depth; /* [8, 16] */ - uint8_t spatial_resampling_filter_flag; - uint8_t el_spatial_resampling_filter_flag; - uint8_t disable_residual_flag; - uint8_t ext_mapping_idc_0_4; /* extended base layer inverse mapping indicator */ - uint8_t ext_mapping_idc_5_7; /* reserved */ -} AVDOVIRpuDataHeader; - -enum AVDOVIMappingMethod { - AV_DOVI_MAPPING_POLYNOMIAL = 0, - AV_DOVI_MAPPING_MMR = 1, -}; - -/** - * Coefficients of a piece-wise function. The pieces of the function span the - * value ranges between two adjacent pivot values. - */ -#define AV_DOVI_MAX_PIECES 8 -typedef struct AVDOVIReshapingCurve { - uint8_t num_pivots; /* [2, 9] */ - uint16_t pivots[AV_DOVI_MAX_PIECES + 1]; /* sorted ascending */ - enum AVDOVIMappingMethod mapping_idc[AV_DOVI_MAX_PIECES]; - /* AV_DOVI_MAPPING_POLYNOMIAL */ - uint8_t poly_order[AV_DOVI_MAX_PIECES]; /* [1, 2] */ - int64_t poly_coef[AV_DOVI_MAX_PIECES][3]; /* x^0, x^1, x^2 */ - /* AV_DOVI_MAPPING_MMR */ - uint8_t mmr_order[AV_DOVI_MAX_PIECES]; /* [1, 3] */ - int64_t mmr_constant[AV_DOVI_MAX_PIECES]; - int64_t mmr_coef[AV_DOVI_MAX_PIECES][3/* order - 1 */][7]; -} AVDOVIReshapingCurve; - -enum AVDOVINLQMethod { - AV_DOVI_NLQ_NONE = -1, - AV_DOVI_NLQ_LINEAR_DZ = 0, -}; - -/** - * Coefficients of the non-linear inverse quantization. For the interpretation - * of these, see ETSI GS CCM 001. - */ -typedef struct AVDOVINLQParams { - uint16_t nlq_offset; - uint64_t vdr_in_max; - /* AV_DOVI_NLQ_LINEAR_DZ */ - uint64_t linear_deadzone_slope; - uint64_t linear_deadzone_threshold; -} AVDOVINLQParams; - -/** - * Dolby Vision RPU data mapping parameters. - * - * @note sizeof(AVDOVIDataMapping) is not part of the public ABI. - */ -typedef struct AVDOVIDataMapping { - uint8_t vdr_rpu_id; - uint8_t mapping_color_space; - uint8_t mapping_chroma_format_idc; - AVDOVIReshapingCurve curves[3]; /* per component */ - - /* Non-linear inverse quantization */ - enum AVDOVINLQMethod nlq_method_idc; - uint32_t num_x_partitions; - uint32_t num_y_partitions; - AVDOVINLQParams nlq[3]; /* per component */ - uint16_t nlq_pivots[2]; -} AVDOVIDataMapping; - -/** - * Dolby Vision RPU colorspace metadata parameters. - * - * @note sizeof(AVDOVIColorMetadata) is not part of the public ABI. - */ -typedef struct AVDOVIColorMetadata { - uint8_t dm_metadata_id; - uint8_t scene_refresh_flag; - - /** - * Coefficients of the custom Dolby Vision IPT-PQ matrices. These are to be - * used instead of the matrices indicated by the frame's colorspace tags. - * The output of rgb_to_lms_matrix is to be fed into a BT.2020 LMS->RGB - * matrix based on a Hunt-Pointer-Estevez transform, but without any - * crosstalk. (See the definition of the ICtCp colorspace for more - * information.) - */ - AVRational ycc_to_rgb_matrix[9]; /* before PQ linearization */ - AVRational ycc_to_rgb_offset[3]; /* input offset of neutral value */ - AVRational rgb_to_lms_matrix[9]; /* after PQ linearization */ - - /** - * Extra signal metadata (see Dolby patents for more info). - */ - uint16_t signal_eotf; - uint16_t signal_eotf_param0; - uint16_t signal_eotf_param1; - uint32_t signal_eotf_param2; - uint8_t signal_bit_depth; - uint8_t signal_color_space; - uint8_t signal_chroma_format; - uint8_t signal_full_range_flag; /* [0, 3] */ - uint16_t source_min_pq; - uint16_t source_max_pq; - uint16_t source_diagonal; -} AVDOVIColorMetadata; - -typedef struct AVDOVIDmLevel1 { - /* Per-frame brightness metadata */ - uint16_t min_pq; - uint16_t max_pq; - uint16_t avg_pq; -} AVDOVIDmLevel1; - -typedef struct AVDOVIDmLevel2 { - /* Usually derived from level 8 (at different levels) */ - uint16_t target_max_pq; - uint16_t trim_slope; - uint16_t trim_offset; - uint16_t trim_power; - uint16_t trim_chroma_weight; - uint16_t trim_saturation_gain; - int16_t ms_weight; -} AVDOVIDmLevel2; - -typedef struct AVDOVIDmLevel3 { - uint16_t min_pq_offset; - uint16_t max_pq_offset; - uint16_t avg_pq_offset; -} AVDOVIDmLevel3; - -typedef struct AVDOVIDmLevel4 { - uint16_t anchor_pq; - uint16_t anchor_power; -} AVDOVIDmLevel4; - -typedef struct AVDOVIDmLevel5 { - /* Active area definition */ - uint16_t left_offset; - uint16_t right_offset; - uint16_t top_offset; - uint16_t bottom_offset; -} AVDOVIDmLevel5; - -typedef struct AVDOVIDmLevel6 { - /* Static HDR10 metadata */ - uint16_t max_luminance; - uint16_t min_luminance; - uint16_t max_cll; - uint16_t max_fall; -} AVDOVIDmLevel6; - -typedef struct AVDOVIDmLevel8 { - /* Extended version of level 2 */ - uint8_t target_display_index; - uint16_t trim_slope; - uint16_t trim_offset; - uint16_t trim_power; - uint16_t trim_chroma_weight; - uint16_t trim_saturation_gain; - uint16_t ms_weight; - uint16_t target_mid_contrast; - uint16_t clip_trim; - uint8_t saturation_vector_field[6]; - uint8_t hue_vector_field[6]; -} AVDOVIDmLevel8; - -typedef struct AVDOVIDmLevel9 { - /* Source display characteristics */ - uint8_t source_primary_index; - AVColorPrimariesDesc source_display_primaries; -} AVDOVIDmLevel9; - -typedef struct AVDOVIDmLevel10 { - /* Target display characteristics */ - uint8_t target_display_index; - uint16_t target_max_pq; - uint16_t target_min_pq; - uint8_t target_primary_index; - AVColorPrimariesDesc target_display_primaries; -} AVDOVIDmLevel10; - -typedef struct AVDOVIDmLevel11 { - uint8_t content_type; - uint8_t whitepoint; - uint8_t reference_mode_flag; - uint8_t sharpness; - uint8_t noise_reduction; - uint8_t mpeg_noise_reduction; - uint8_t frame_rate_conversion; - uint8_t brightness; - uint8_t color; -} AVDOVIDmLevel11; - -typedef struct AVDOVIDmLevel254 { - /* DMv2 info block, always present in samples with DMv2 metadata */ - uint8_t dm_mode; - uint8_t dm_version_index; -} AVDOVIDmLevel254; - -typedef struct AVDOVIDmLevel255 { - /* Debug block, not really used in samples */ - uint8_t dm_run_mode; - uint8_t dm_run_version; - uint8_t dm_debug[4]; -} AVDOVIDmLevel255; - -/** - * Dolby Vision metadata extension block. Dynamic extension blocks may change - * from frame to frame, while static blocks are constant throughout the entire - * sequence. - * - * @note sizeof(AVDOVIDmData) is not part of the public API. - */ -typedef struct AVDOVIDmData { - uint8_t level; /* [1, 255] */ - union { - AVDOVIDmLevel1 l1; /* dynamic */ - AVDOVIDmLevel2 l2; /* dynamic, may appear multiple times */ - AVDOVIDmLevel3 l3; /* dynamic */ - AVDOVIDmLevel4 l4; /* dynamic */ - AVDOVIDmLevel5 l5; /* dynamic */ - AVDOVIDmLevel6 l6; /* static */ - /* level 7 is currently unused */ - AVDOVIDmLevel8 l8; /* dynamic, may appear multiple times */ - AVDOVIDmLevel9 l9; /* dynamic */ - AVDOVIDmLevel10 l10; /* static, may appear multiple times */ - AVDOVIDmLevel11 l11; /* dynamic */ - AVDOVIDmLevel254 l254; /* static */ - AVDOVIDmLevel255 l255; /* static */ - }; -} AVDOVIDmData; - -/** - * Combined struct representing a combination of header, mapping and color - * metadata, for attaching to frames as side data. - * - * @note The struct must be allocated with av_dovi_metadata_alloc() and - * its size is not a part of the public ABI. - */ - -typedef struct AVDOVIMetadata { - /** - * Offset in bytes from the beginning of this structure at which the - * respective structs start. - */ - size_t header_offset; /* AVDOVIRpuDataHeader */ - size_t mapping_offset; /* AVDOVIDataMapping */ - size_t color_offset; /* AVDOVIColorMetadata */ - - size_t ext_block_offset; /* offset to start of ext blocks array */ - size_t ext_block_size; /* size per element */ - int num_ext_blocks; /* number of extension blocks */ - - /* static limit on num_ext_blocks, derived from bitstream limitations */ -#define AV_DOVI_MAX_EXT_BLOCKS 32 -} AVDOVIMetadata; - -static av_always_inline AVDOVIRpuDataHeader * -av_dovi_get_header(const AVDOVIMetadata *data) -{ - return (AVDOVIRpuDataHeader *)((uint8_t *) data + data->header_offset); -} - -static av_always_inline AVDOVIDataMapping * -av_dovi_get_mapping(const AVDOVIMetadata *data) -{ - return (AVDOVIDataMapping *)((uint8_t *) data + data->mapping_offset); -} - -static av_always_inline AVDOVIColorMetadata * -av_dovi_get_color(const AVDOVIMetadata *data) -{ - return (AVDOVIColorMetadata *)((uint8_t *) data + data->color_offset); -} - -static av_always_inline AVDOVIDmData * -av_dovi_get_ext(const AVDOVIMetadata *data, int index) -{ - return (AVDOVIDmData *)((uint8_t *) data + data->ext_block_offset + - data->ext_block_size * index); -} - -/** - * Find an extension block with a given level, or NULL. In the case of - * multiple extension blocks, only the first is returned. - */ -AVDOVIDmData *av_dovi_find_level(const AVDOVIMetadata *data, uint8_t level); - -/** - * Allocate an AVDOVIMetadata structure and initialize its - * fields to default values. - * - * @param size If this parameter is non-NULL, the size in bytes of the - * allocated struct will be written here on success - * - * @return the newly allocated struct or NULL on failure - */ -AVDOVIMetadata *av_dovi_metadata_alloc(size_t *size); - -#endif /* AVUTIL_DOVI_META_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/downmix_info.h b/3rdparty/ffmpeg/include/libavutil/downmix_info.h deleted file mode 100644 index 221cf5bf9bafb..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/downmix_info.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (c) 2014 Tim Walker - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_DOWNMIX_INFO_H -#define AVUTIL_DOWNMIX_INFO_H - -#include "frame.h" - -/** - * @file - * audio downmix medatata - */ - -/** - * @addtogroup lavu_audio - * @{ - */ - -/** - * @defgroup downmix_info Audio downmix metadata - * @{ - */ - -/** - * Possible downmix types. - */ -enum AVDownmixType { - AV_DOWNMIX_TYPE_UNKNOWN, /**< Not indicated. */ - AV_DOWNMIX_TYPE_LORO, /**< Lo/Ro 2-channel downmix (Stereo). */ - AV_DOWNMIX_TYPE_LTRT, /**< Lt/Rt 2-channel downmix, Dolby Surround compatible. */ - AV_DOWNMIX_TYPE_DPLII, /**< Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible. */ - AV_DOWNMIX_TYPE_NB /**< Number of downmix types. Not part of ABI. */ -}; - -/** - * This structure describes optional metadata relevant to a downmix procedure. - * - * All fields are set by the decoder to the value indicated in the audio - * bitstream (if present), or to a "sane" default otherwise. - */ -typedef struct AVDownmixInfo { - /** - * Type of downmix preferred by the mastering engineer. - */ - enum AVDownmixType preferred_downmix_type; - - /** - * Absolute scale factor representing the nominal level of the center - * channel during a regular downmix. - */ - double center_mix_level; - - /** - * Absolute scale factor representing the nominal level of the center - * channel during an Lt/Rt compatible downmix. - */ - double center_mix_level_ltrt; - - /** - * Absolute scale factor representing the nominal level of the surround - * channels during a regular downmix. - */ - double surround_mix_level; - - /** - * Absolute scale factor representing the nominal level of the surround - * channels during an Lt/Rt compatible downmix. - */ - double surround_mix_level_ltrt; - - /** - * Absolute scale factor representing the level at which the LFE data is - * mixed into L/R channels during downmixing. - */ - double lfe_mix_level; -} AVDownmixInfo; - -/** - * Get a frame's AV_FRAME_DATA_DOWNMIX_INFO side data for editing. - * - * If the side data is absent, it is created and added to the frame. - * - * @param frame the frame for which the side data is to be obtained or created - * - * @return the AVDownmixInfo structure to be edited by the caller, or NULL if - * the structure cannot be allocated. - */ -AVDownmixInfo *av_downmix_info_update_side_data(AVFrame *frame); - -/** - * @} - */ - -/** - * @} - */ - -#endif /* AVUTIL_DOWNMIX_INFO_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/encryption_info.h b/3rdparty/ffmpeg/include/libavutil/encryption_info.h deleted file mode 100644 index 8fe7ebfe43203..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/encryption_info.h +++ /dev/null @@ -1,205 +0,0 @@ -/** - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_ENCRYPTION_INFO_H -#define AVUTIL_ENCRYPTION_INFO_H - -#include -#include - -typedef struct AVSubsampleEncryptionInfo { - /** The number of bytes that are clear. */ - unsigned int bytes_of_clear_data; - - /** - * The number of bytes that are protected. If using pattern encryption, - * the pattern applies to only the protected bytes; if not using pattern - * encryption, all these bytes are encrypted. - */ - unsigned int bytes_of_protected_data; -} AVSubsampleEncryptionInfo; - -/** - * This describes encryption info for a packet. This contains frame-specific - * info for how to decrypt the packet before passing it to the decoder. - * - * The size of this struct is not part of the public ABI. - */ -typedef struct AVEncryptionInfo { - /** The fourcc encryption scheme, in big-endian byte order. */ - uint32_t scheme; - - /** - * Only used for pattern encryption. This is the number of 16-byte blocks - * that are encrypted. - */ - uint32_t crypt_byte_block; - - /** - * Only used for pattern encryption. This is the number of 16-byte blocks - * that are clear. - */ - uint32_t skip_byte_block; - - /** - * The ID of the key used to encrypt the packet. This should always be - * 16 bytes long, but may be changed in the future. - */ - uint8_t *key_id; - uint32_t key_id_size; - - /** - * The initialization vector. This may have been zero-filled to be the - * correct block size. This should always be 16 bytes long, but may be - * changed in the future. - */ - uint8_t *iv; - uint32_t iv_size; - - /** - * An array of subsample encryption info specifying how parts of the sample - * are encrypted. If there are no subsamples, then the whole sample is - * encrypted. - */ - AVSubsampleEncryptionInfo *subsamples; - uint32_t subsample_count; -} AVEncryptionInfo; - -/** - * This describes info used to initialize an encryption key system. - * - * The size of this struct is not part of the public ABI. - */ -typedef struct AVEncryptionInitInfo { - /** - * A unique identifier for the key system this is for, can be NULL if it - * is not known. This should always be 16 bytes, but may change in the - * future. - */ - uint8_t* system_id; - uint32_t system_id_size; - - /** - * An array of key IDs this initialization data is for. All IDs are the - * same length. Can be NULL if there are no known key IDs. - */ - uint8_t** key_ids; - /** The number of key IDs. */ - uint32_t num_key_ids; - /** - * The number of bytes in each key ID. This should always be 16, but may - * change in the future. - */ - uint32_t key_id_size; - - /** - * Key-system specific initialization data. This data is copied directly - * from the file and the format depends on the specific key system. This - * can be NULL if there is no initialization data; in that case, there - * will be at least one key ID. - */ - uint8_t* data; - uint32_t data_size; - - /** - * An optional pointer to the next initialization info in the list. - */ - struct AVEncryptionInitInfo *next; -} AVEncryptionInitInfo; - -/** - * Allocates an AVEncryptionInfo structure and sub-pointers to hold the given - * number of subsamples. This will allocate pointers for the key ID, IV, - * and subsample entries, set the size members, and zero-initialize the rest. - * - * @param subsample_count The number of subsamples. - * @param key_id_size The number of bytes in the key ID, should be 16. - * @param iv_size The number of bytes in the IV, should be 16. - * - * @return The new AVEncryptionInfo structure, or NULL on error. - */ -AVEncryptionInfo *av_encryption_info_alloc(uint32_t subsample_count, uint32_t key_id_size, uint32_t iv_size); - -/** - * Allocates an AVEncryptionInfo structure with a copy of the given data. - * @return The new AVEncryptionInfo structure, or NULL on error. - */ -AVEncryptionInfo *av_encryption_info_clone(const AVEncryptionInfo *info); - -/** - * Frees the given encryption info object. This MUST NOT be used to free the - * side-data data pointer, that should use normal side-data methods. - */ -void av_encryption_info_free(AVEncryptionInfo *info); - -/** - * Creates a copy of the AVEncryptionInfo that is contained in the given side - * data. The resulting object should be passed to av_encryption_info_free() - * when done. - * - * @return The new AVEncryptionInfo structure, or NULL on error. - */ -AVEncryptionInfo *av_encryption_info_get_side_data(const uint8_t *side_data, size_t side_data_size); - -/** - * Allocates and initializes side data that holds a copy of the given encryption - * info. The resulting pointer should be either freed using av_free or given - * to av_packet_add_side_data(). - * - * @return The new side-data pointer, or NULL. - */ -uint8_t *av_encryption_info_add_side_data( - const AVEncryptionInfo *info, size_t *side_data_size); - - -/** - * Allocates an AVEncryptionInitInfo structure and sub-pointers to hold the - * given sizes. This will allocate pointers and set all the fields. - * - * @return The new AVEncryptionInitInfo structure, or NULL on error. - */ -AVEncryptionInitInfo *av_encryption_init_info_alloc( - uint32_t system_id_size, uint32_t num_key_ids, uint32_t key_id_size, uint32_t data_size); - -/** - * Frees the given encryption init info object. This MUST NOT be used to free - * the side-data data pointer, that should use normal side-data methods. - */ -void av_encryption_init_info_free(AVEncryptionInitInfo* info); - -/** - * Creates a copy of the AVEncryptionInitInfo that is contained in the given - * side data. The resulting object should be passed to - * av_encryption_init_info_free() when done. - * - * @return The new AVEncryptionInitInfo structure, or NULL on error. - */ -AVEncryptionInitInfo *av_encryption_init_info_get_side_data( - const uint8_t* side_data, size_t side_data_size); - -/** - * Allocates and initializes side data that holds a copy of the given encryption - * init info. The resulting pointer should be either freed using av_free or - * given to av_packet_add_side_data(). - * - * @return The new side-data pointer, or NULL. - */ -uint8_t *av_encryption_init_info_add_side_data( - const AVEncryptionInitInfo *info, size_t *side_data_size); - -#endif /* AVUTIL_ENCRYPTION_INFO_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/error.h b/3rdparty/ffmpeg/include/libavutil/error.h deleted file mode 100644 index 1efa86c4c106c..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/error.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * error code definitions - */ - -#ifndef AVUTIL_ERROR_H -#define AVUTIL_ERROR_H - -#include -#include - -#include "macros.h" - -/** - * @addtogroup lavu_error - * - * @{ - */ - - -/* error handling */ -#if EDOM > 0 -#define AVERROR(e) (-(e)) ///< Returns a negative error code from a POSIX error code, to return from library functions. -#define AVUNERROR(e) (-(e)) ///< Returns a POSIX error code from a library function error return value. -#else -/* Some platforms have E* and errno already negated. */ -#define AVERROR(e) (e) -#define AVUNERROR(e) (e) -#endif - -#define FFERRTAG(a, b, c, d) (-(int)MKTAG(a, b, c, d)) - -#define AVERROR_BSF_NOT_FOUND FFERRTAG(0xF8,'B','S','F') ///< Bitstream filter not found -#define AVERROR_BUG FFERRTAG( 'B','U','G','!') ///< Internal bug, also see AVERROR_BUG2 -#define AVERROR_BUFFER_TOO_SMALL FFERRTAG( 'B','U','F','S') ///< Buffer too small -#define AVERROR_DECODER_NOT_FOUND FFERRTAG(0xF8,'D','E','C') ///< Decoder not found -#define AVERROR_DEMUXER_NOT_FOUND FFERRTAG(0xF8,'D','E','M') ///< Demuxer not found -#define AVERROR_ENCODER_NOT_FOUND FFERRTAG(0xF8,'E','N','C') ///< Encoder not found -#define AVERROR_EOF FFERRTAG( 'E','O','F',' ') ///< End of file -#define AVERROR_EXIT FFERRTAG( 'E','X','I','T') ///< Immediate exit was requested; the called function should not be restarted -#define AVERROR_EXTERNAL FFERRTAG( 'E','X','T',' ') ///< Generic error in an external library -#define AVERROR_FILTER_NOT_FOUND FFERRTAG(0xF8,'F','I','L') ///< Filter not found -#define AVERROR_INVALIDDATA FFERRTAG( 'I','N','D','A') ///< Invalid data found when processing input -#define AVERROR_MUXER_NOT_FOUND FFERRTAG(0xF8,'M','U','X') ///< Muxer not found -#define AVERROR_OPTION_NOT_FOUND FFERRTAG(0xF8,'O','P','T') ///< Option not found -#define AVERROR_PATCHWELCOME FFERRTAG( 'P','A','W','E') ///< Not yet implemented in FFmpeg, patches welcome -#define AVERROR_PROTOCOL_NOT_FOUND FFERRTAG(0xF8,'P','R','O') ///< Protocol not found - -#define AVERROR_STREAM_NOT_FOUND FFERRTAG(0xF8,'S','T','R') ///< Stream not found -/** - * This is semantically identical to AVERROR_BUG - * it has been introduced in Libav after our AVERROR_BUG and with a modified value. - */ -#define AVERROR_BUG2 FFERRTAG( 'B','U','G',' ') -#define AVERROR_UNKNOWN FFERRTAG( 'U','N','K','N') ///< Unknown error, typically from an external library -#define AVERROR_EXPERIMENTAL (-0x2bb2afa8) ///< Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it. -#define AVERROR_INPUT_CHANGED (-0x636e6701) ///< Input changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_OUTPUT_CHANGED) -#define AVERROR_OUTPUT_CHANGED (-0x636e6702) ///< Output changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_INPUT_CHANGED) -/* HTTP & RTSP errors */ -#define AVERROR_HTTP_BAD_REQUEST FFERRTAG(0xF8,'4','0','0') -#define AVERROR_HTTP_UNAUTHORIZED FFERRTAG(0xF8,'4','0','1') -#define AVERROR_HTTP_FORBIDDEN FFERRTAG(0xF8,'4','0','3') -#define AVERROR_HTTP_NOT_FOUND FFERRTAG(0xF8,'4','0','4') -#define AVERROR_HTTP_TOO_MANY_REQUESTS FFERRTAG(0xF8,'4','2','9') -#define AVERROR_HTTP_OTHER_4XX FFERRTAG(0xF8,'4','X','X') -#define AVERROR_HTTP_SERVER_ERROR FFERRTAG(0xF8,'5','X','X') - -#define AV_ERROR_MAX_STRING_SIZE 64 - -/** - * Put a description of the AVERROR code errnum in errbuf. - * In case of failure the global variable errno is set to indicate the - * error. Even in case of failure av_strerror() will print a generic - * error message indicating the errnum provided to errbuf. - * - * @param errnum error code to describe - * @param errbuf buffer to which description is written - * @param errbuf_size the size in bytes of errbuf - * @return 0 on success, a negative value if a description for errnum - * cannot be found - */ -int av_strerror(int errnum, char *errbuf, size_t errbuf_size); - -/** - * Fill the provided buffer with a string containing an error string - * corresponding to the AVERROR code errnum. - * - * @param errbuf a buffer - * @param errbuf_size size in bytes of errbuf - * @param errnum error code to describe - * @return the buffer in input, filled with the error description - * @see av_strerror() - */ -static inline char *av_make_error_string(char *errbuf, size_t errbuf_size, int errnum) -{ - av_strerror(errnum, errbuf, errbuf_size); - return errbuf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_err2str(errnum) \ - av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum) - -/** - * @} - */ - -#endif /* AVUTIL_ERROR_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/eval.h b/3rdparty/ffmpeg/include/libavutil/eval.h deleted file mode 100644 index 0d3eaeb3fbc81..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/eval.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (c) 2002 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * simple arithmetic expression evaluator - */ - -#ifndef AVUTIL_EVAL_H -#define AVUTIL_EVAL_H - -typedef struct AVExpr AVExpr; - -/** - * Parse and evaluate an expression. - * Note, this is significantly slower than av_expr_eval(). - * - * @param res a pointer to a double where is put the result value of - * the expression, or NAN in case of error - * @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)" - * @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0} - * @param const_values a zero terminated array of values for the identifiers from const_names - * @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers - * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument - * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers - * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments - * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 - * @param log_offset log level offset, can be used to silence error messages - * @param log_ctx parent logging context - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_expr_parse_and_eval(double *res, const char *s, - const char * const *const_names, const double *const_values, - const char * const *func1_names, double (* const *funcs1)(void *, double), - const char * const *func2_names, double (* const *funcs2)(void *, double, double), - void *opaque, int log_offset, void *log_ctx); - -/** - * Parse an expression. - * - * @param expr a pointer where is put an AVExpr containing the parsed - * value in case of successful parsing, or NULL otherwise. - * The pointed to AVExpr must be freed with av_expr_free() by the user - * when it is not needed anymore. - * @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)" - * @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0} - * @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers - * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument - * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers - * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments - * @param log_offset log level offset, can be used to silence error messages - * @param log_ctx parent logging context - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_expr_parse(AVExpr **expr, const char *s, - const char * const *const_names, - const char * const *func1_names, double (* const *funcs1)(void *, double), - const char * const *func2_names, double (* const *funcs2)(void *, double, double), - int log_offset, void *log_ctx); - -/** - * Evaluate a previously parsed expression. - * - * @param e the AVExpr to evaluate - * @param const_values a zero terminated array of values for the identifiers from av_expr_parse() const_names - * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 - * @return the value of the expression - */ -double av_expr_eval(AVExpr *e, const double *const_values, void *opaque); - -/** - * Track the presence of variables and their number of occurrences in a parsed expression - * - * @param e the AVExpr to track variables in - * @param counter a zero-initialized array where the count of each variable will be stored - * @param size size of array - * @return 0 on success, a negative value indicates that no expression or array was passed - * or size was zero - */ -int av_expr_count_vars(AVExpr *e, unsigned *counter, int size); - -/** - * Track the presence of user provided functions and their number of occurrences - * in a parsed expression. - * - * @param e the AVExpr to track user provided functions in - * @param counter a zero-initialized array where the count of each function will be stored - * if you passed 5 functions with 2 arguments to av_expr_parse() - * then for arg=2 this will use up to 5 entries. - * @param size size of array - * @param arg number of arguments the counted functions have - * @return 0 on success, a negative value indicates that no expression or array was passed - * or size was zero - */ -int av_expr_count_func(AVExpr *e, unsigned *counter, int size, int arg); - -/** - * Free a parsed expression previously created with av_expr_parse(). - */ -void av_expr_free(AVExpr *e); - -/** - * Parse the string in numstr and return its value as a double. If - * the string is empty, contains only whitespaces, or does not contain - * an initial substring that has the expected syntax for a - * floating-point number, no conversion is performed. In this case, - * returns a value of zero and the value returned in tail is the value - * of numstr. - * - * @param numstr a string representing a number, may contain one of - * the International System number postfixes, for example 'K', 'M', - * 'G'. If 'i' is appended after the postfix, powers of 2 are used - * instead of powers of 10. The 'B' postfix multiplies the value by - * 8, and can be appended after another postfix or used alone. This - * allows using for example 'KB', 'MiB', 'G' and 'B' as postfix. - * @param tail if non-NULL puts here the pointer to the char next - * after the last parsed character - */ -double av_strtod(const char *numstr, char **tail); - -#endif /* AVUTIL_EVAL_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/fifo.h b/3rdparty/ffmpeg/include/libavutil/fifo.h deleted file mode 100644 index f2206c35f524c..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/fifo.h +++ /dev/null @@ -1,242 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_fifo - * A generic FIFO API - */ - -#ifndef AVUTIL_FIFO_H -#define AVUTIL_FIFO_H - -#include - -/** - * @defgroup lavu_fifo AVFifo - * @ingroup lavu_data - * - * @{ - * A generic FIFO API - */ - -typedef struct AVFifo AVFifo; - -/** - * Callback for writing or reading from a FIFO, passed to (and invoked from) the - * av_fifo_*_cb() functions. It may be invoked multiple times from a single - * av_fifo_*_cb() call and may process less data than the maximum size indicated - * by nb_elems. - * - * @param opaque the opaque pointer provided to the av_fifo_*_cb() function - * @param buf the buffer for reading or writing the data, depending on which - * av_fifo_*_cb function is called - * @param nb_elems On entry contains the maximum number of elements that can be - * read from / written into buf. On success, the callback should - * update it to contain the number of elements actually written. - * - * @return 0 on success, a negative error code on failure (will be returned from - * the invoking av_fifo_*_cb() function) - */ -typedef int AVFifoCB(void *opaque, void *buf, size_t *nb_elems); - -/** - * Automatically resize the FIFO on writes, so that the data fits. This - * automatic resizing happens up to a limit that can be modified with - * av_fifo_auto_grow_limit(). - */ -#define AV_FIFO_FLAG_AUTO_GROW (1 << 0) - -/** - * Allocate and initialize an AVFifo with a given element size. - * - * @param elems initial number of elements that can be stored in the FIFO - * @param elem_size Size in bytes of a single element. Further operations on - * the returned FIFO will implicitly use this element size. - * @param flags a combination of AV_FIFO_FLAG_* - * - * @return newly-allocated AVFifo on success, a negative error code on failure - */ -AVFifo *av_fifo_alloc2(size_t elems, size_t elem_size, - unsigned int flags); - -/** - * @return Element size for FIFO operations. This element size is set at - * FIFO allocation and remains constant during its lifetime - */ -size_t av_fifo_elem_size(const AVFifo *f); - -/** - * Set the maximum size (in elements) to which the FIFO can be resized - * automatically. Has no effect unless AV_FIFO_FLAG_AUTO_GROW is used. - */ -void av_fifo_auto_grow_limit(AVFifo *f, size_t max_elems); - -/** - * @return number of elements available for reading from the given FIFO. - */ -size_t av_fifo_can_read(const AVFifo *f); - -/** - * @return Number of elements that can be written into the given FIFO without - * growing it. - * - * In other words, this number of elements or less is guaranteed to fit - * into the FIFO. More data may be written when the - * AV_FIFO_FLAG_AUTO_GROW flag was specified at FIFO creation, but this - * may involve memory allocation, which can fail. - */ -size_t av_fifo_can_write(const AVFifo *f); - -/** - * Enlarge an AVFifo. - * - * On success, the FIFO will be large enough to hold exactly - * inc + av_fifo_can_read() + av_fifo_can_write() - * elements. In case of failure, the old FIFO is kept unchanged. - * - * @param f AVFifo to resize - * @param inc number of elements to allocate for, in addition to the current - * allocated size - * @return a non-negative number on success, a negative error code on failure - */ -int av_fifo_grow2(AVFifo *f, size_t inc); - -/** - * Write data into a FIFO. - * - * In case nb_elems > av_fifo_can_write(f) and the AV_FIFO_FLAG_AUTO_GROW flag - * was not specified at FIFO creation, nothing is written and an error - * is returned. - * - * Calling function is guaranteed to succeed if nb_elems <= av_fifo_can_write(f). - * - * @param f the FIFO buffer - * @param buf Data to be written. nb_elems * av_fifo_elem_size(f) bytes will be - * read from buf on success. - * @param nb_elems number of elements to write into FIFO - * - * @return a non-negative number on success, a negative error code on failure - */ -int av_fifo_write(AVFifo *f, const void *buf, size_t nb_elems); - -/** - * Write data from a user-provided callback into a FIFO. - * - * @param f the FIFO buffer - * @param read_cb Callback supplying the data to the FIFO. May be called - * multiple times. - * @param opaque opaque user data to be provided to read_cb - * @param nb_elems Should point to the maximum number of elements that can be - * written. Will be updated to contain the number of elements - * actually written. - * - * @return non-negative number on success, a negative error code on failure - */ -int av_fifo_write_from_cb(AVFifo *f, AVFifoCB read_cb, - void *opaque, size_t *nb_elems); - -/** - * Read data from a FIFO. - * - * In case nb_elems > av_fifo_can_read(f), nothing is read and an error - * is returned. - * - * @param f the FIFO buffer - * @param buf Buffer to store the data. nb_elems * av_fifo_elem_size(f) bytes - * will be written into buf on success. - * @param nb_elems number of elements to read from FIFO - * - * @return a non-negative number on success, a negative error code on failure - */ -int av_fifo_read(AVFifo *f, void *buf, size_t nb_elems); - -/** - * Feed data from a FIFO into a user-provided callback. - * - * @param f the FIFO buffer - * @param write_cb Callback the data will be supplied to. May be called - * multiple times. - * @param opaque opaque user data to be provided to write_cb - * @param nb_elems Should point to the maximum number of elements that can be - * read. Will be updated to contain the total number of elements - * actually sent to the callback. - * - * @return non-negative number on success, a negative error code on failure - */ -int av_fifo_read_to_cb(AVFifo *f, AVFifoCB write_cb, - void *opaque, size_t *nb_elems); - -/** - * Read data from a FIFO without modifying FIFO state. - * - * Returns an error if an attempt is made to peek to nonexistent elements - * (i.e. if offset + nb_elems is larger than av_fifo_can_read(f)). - * - * @param f the FIFO buffer - * @param buf Buffer to store the data. nb_elems * av_fifo_elem_size(f) bytes - * will be written into buf. - * @param nb_elems number of elements to read from FIFO - * @param offset number of initial elements to skip. - * - * @return a non-negative number on success, a negative error code on failure - */ -int av_fifo_peek(const AVFifo *f, void *buf, size_t nb_elems, size_t offset); - -/** - * Feed data from a FIFO into a user-provided callback. - * - * @param f the FIFO buffer - * @param write_cb Callback the data will be supplied to. May be called - * multiple times. - * @param opaque opaque user data to be provided to write_cb - * @param nb_elems Should point to the maximum number of elements that can be - * read. Will be updated to contain the total number of elements - * actually sent to the callback. - * @param offset number of initial elements to skip; offset + *nb_elems must not - * be larger than av_fifo_can_read(f). - * - * @return a non-negative number on success, a negative error code on failure - */ -int av_fifo_peek_to_cb(const AVFifo *f, AVFifoCB write_cb, void *opaque, - size_t *nb_elems, size_t offset); - -/** - * Discard the specified amount of data from an AVFifo. - * @param size number of elements to discard, MUST NOT be larger than - * av_fifo_can_read(f) - */ -void av_fifo_drain2(AVFifo *f, size_t size); - -/* - * Empty the AVFifo. - * @param f AVFifo to reset - */ -void av_fifo_reset2(AVFifo *f); - -/** - * Free an AVFifo and reset pointer to NULL. - * @param f Pointer to an AVFifo to free. *f == NULL is allowed. - */ -void av_fifo_freep2(AVFifo **f); - -/** - * @} - */ - -#endif /* AVUTIL_FIFO_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/file.h b/3rdparty/ffmpeg/include/libavutil/file.h deleted file mode 100644 index fced17010829b..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/file.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_FILE_H -#define AVUTIL_FILE_H - -#include -#include - -#include "attributes.h" - -/** - * @file - * Misc file utilities. - */ - -/** - * Read the file with name filename, and put its content in a newly - * allocated buffer or map it with mmap() when available. - * In case of success set *bufptr to the read or mmapped buffer, and - * *size to the size in bytes of the buffer in *bufptr. - * Unlike mmap this function succeeds with zero sized files, in this - * case *bufptr will be set to NULL and *size will be set to 0. - * The returned buffer must be released with av_file_unmap(). - * - * @param filename path to the file - * @param[out] bufptr pointee is set to the mapped or allocated buffer - * @param[out] size pointee is set to the size in bytes of the buffer - * @param log_offset loglevel offset used for logging - * @param log_ctx context used for logging - * @return a non negative number in case of success, a negative value - * corresponding to an AVERROR error code in case of failure - */ -av_warn_unused_result -int av_file_map(const char *filename, uint8_t **bufptr, size_t *size, - int log_offset, void *log_ctx); - -/** - * Unmap or free the buffer bufptr created by av_file_map(). - * - * @param bufptr the buffer previously created with av_file_map() - * @param size size in bytes of bufptr, must be the same as returned - * by av_file_map() - */ -void av_file_unmap(uint8_t *bufptr, size_t size); - -#endif /* AVUTIL_FILE_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/film_grain_params.h b/3rdparty/ffmpeg/include/libavutil/film_grain_params.h deleted file mode 100644 index 2915611c9c1e8..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/film_grain_params.h +++ /dev/null @@ -1,282 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_FILM_GRAIN_PARAMS_H -#define AVUTIL_FILM_GRAIN_PARAMS_H - -#include "frame.h" - -enum AVFilmGrainParamsType { - AV_FILM_GRAIN_PARAMS_NONE = 0, - - /** - * The union is valid when interpreted as AVFilmGrainAOMParams (codec.aom) - */ - AV_FILM_GRAIN_PARAMS_AV1, - - /** - * The union is valid when interpreted as AVFilmGrainH274Params (codec.h274) - */ - AV_FILM_GRAIN_PARAMS_H274, -}; - -/** - * This structure describes how to handle film grain synthesis for AOM codecs. - * - * @note The struct must be allocated as part of AVFilmGrainParams using - * av_film_grain_params_alloc(). Its size is not a part of the public ABI. - */ -typedef struct AVFilmGrainAOMParams { - /** - * Number of points, and the scale and value for each point of the - * piecewise linear scaling function for the uma plane. - */ - int num_y_points; - uint8_t y_points[14][2 /* value, scaling */]; - - /** - * Signals whether to derive the chroma scaling function from the luma. - * Not equivalent to copying the luma values and scales. - */ - int chroma_scaling_from_luma; - - /** - * If chroma_scaling_from_luma is set to 0, signals the chroma scaling - * function parameters. - */ - int num_uv_points[2 /* cb, cr */]; - uint8_t uv_points[2 /* cb, cr */][10][2 /* value, scaling */]; - - /** - * Specifies the shift applied to the chroma components. For AV1, its within - * [8; 11] and determines the range and quantization of the film grain. - */ - int scaling_shift; - - /** - * Specifies the auto-regression lag. - */ - int ar_coeff_lag; - - /** - * Luma auto-regression coefficients. The number of coefficients is given by - * 2 * ar_coeff_lag * (ar_coeff_lag + 1). - */ - int8_t ar_coeffs_y[24]; - - /** - * Chroma auto-regression coefficients. The number of coefficients is given by - * 2 * ar_coeff_lag * (ar_coeff_lag + 1) + !!num_y_points. - */ - int8_t ar_coeffs_uv[2 /* cb, cr */][25]; - - /** - * Specifies the range of the auto-regressive coefficients. Values of 6, - * 7, 8 and so on represent a range of [-2, 2), [-1, 1), [-0.5, 0.5) and - * so on. For AV1 must be between 6 and 9. - */ - int ar_coeff_shift; - - /** - * Signals the down shift applied to the generated gaussian numbers during - * synthesis. - */ - int grain_scale_shift; - - /** - * Specifies the luma/chroma multipliers for the index to the component - * scaling function. - */ - int uv_mult[2 /* cb, cr */]; - int uv_mult_luma[2 /* cb, cr */]; - - /** - * Offset used for component scaling function. For AV1 its a 9-bit value - * with a range [-256, 255] - */ - int uv_offset[2 /* cb, cr */]; - - /** - * Signals whether to overlap film grain blocks. - */ - int overlap_flag; - - /** - * Signals to clip to limited color levels after film grain application. - */ - int limit_output_range; -} AVFilmGrainAOMParams; - -/** - * This structure describes how to handle film grain synthesis for codecs using - * the ITU-T H.274 Versatile supplemental enhancement information message. - * - * @note The struct must be allocated as part of AVFilmGrainParams using - * av_film_grain_params_alloc(). Its size is not a part of the public ABI. - */ -typedef struct AVFilmGrainH274Params { - /** - * Specifies the film grain simulation mode. - * 0 = Frequency filtering, 1 = Auto-regression - */ - int model_id; - - /** - * Specifies the blending mode used to blend the simulated film grain - * with the decoded images. - * - * 0 = Additive, 1 = Multiplicative - */ - int blending_mode_id; - - /** - * Specifies a scale factor used in the film grain characterization equations. - */ - int log2_scale_factor; - - /** - * Indicates if the modelling of film grain for a given component is present. - */ - int component_model_present[3 /* y, cb, cr */]; - - /** - * Specifies the number of intensity intervals for which a specific set of - * model values has been estimated, with a range of [1, 256]. - */ - uint16_t num_intensity_intervals[3 /* y, cb, cr */]; - - /** - * Specifies the number of model values present for each intensity interval - * in which the film grain has been modelled, with a range of [1, 6]. - */ - uint8_t num_model_values[3 /* y, cb, cr */]; - - /** - * Specifies the lower ounds of each intensity interval for whichthe set of - * model values applies for the component. - */ - uint8_t intensity_interval_lower_bound[3 /* y, cb, cr */][256 /* intensity interval */]; - - /** - * Specifies the upper bound of each intensity interval for which the set of - * model values applies for the component. - */ - uint8_t intensity_interval_upper_bound[3 /* y, cb, cr */][256 /* intensity interval */]; - - /** - * Specifies the model values for the component for each intensity interval. - * - When model_id == 0, the following applies: - * For comp_model_value[y], the range of values is [0, 2^bit_depth_luma - 1] - * For comp_model_value[cb..cr], the range of values is [0, 2^bit_depth_chroma - 1] - * - Otherwise, the following applies: - * For comp_model_value[y], the range of values is [-2^(bit_depth_luma - 1), 2^(bit_depth_luma - 1) - 1] - * For comp_model_value[cb..cr], the range of values is [-2^(bit_depth_chroma - 1), 2^(bit_depth_chroma - 1) - 1] - */ - int16_t comp_model_value[3 /* y, cb, cr */][256 /* intensity interval */][6 /* model value */]; -} AVFilmGrainH274Params; - -/** - * This structure describes how to handle film grain synthesis in video - * for specific codecs. Must be present on every frame where film grain is - * meant to be synthesised for correct presentation. - * - * @note The struct must be allocated with av_film_grain_params_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVFilmGrainParams { - /** - * Specifies the codec for which this structure is valid. - */ - enum AVFilmGrainParamsType type; - - /** - * Seed to use for the synthesis process, if the codec allows for it. - * - * @note For H.264, this refers to `pic_offset` as defined in - * SMPTE RDD 5-2006. - */ - uint64_t seed; - - /** - * Intended display resolution. May be 0 if the codec does not specify - * any restrictions. - */ - - int width, height; - - /** - * Intended subsampling ratio, or 0 for luma-only streams. - */ - int subsampling_x, subsampling_y; - - /** - * Intended video signal characteristics. - */ - enum AVColorRange color_range; - enum AVColorPrimaries color_primaries; - enum AVColorTransferCharacteristic color_trc; - enum AVColorSpace color_space; - - /** - * Intended bit depth, or 0 for unknown/unspecified. - */ - int bit_depth_luma; - int bit_depth_chroma; - - /** - * Additional fields may be added both here and in any structure included. - * If a codec's film grain structure differs slightly over another - * codec's, fields within may change meaning depending on the type. - */ - union { - AVFilmGrainAOMParams aom; - AVFilmGrainH274Params h274; - } codec; -} AVFilmGrainParams; - -/** - * Allocate an AVFilmGrainParams structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * If size is not NULL it will be set to the number of bytes allocated. - * - * @return An AVFilmGrainParams filled with default values or NULL - * on failure. - */ -AVFilmGrainParams *av_film_grain_params_alloc(size_t *size); - -/** - * Allocate a complete AVFilmGrainParams and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVFilmGrainParams structure to be filled by caller. - */ -AVFilmGrainParams *av_film_grain_params_create_side_data(AVFrame *frame); - -/** - * Select the most appropriate film grain parameters set for the frame, - * taking into account the frame's format, resolution and video signal - * characteristics. - * - * @note, for H.274, this may select a film grain parameter set with - * greater chroma resolution than the frame. Users should take care to - * correctly adjust the chroma grain frequency to the frame. - */ -const AVFilmGrainParams *av_film_grain_params_select(const AVFrame *frame); - -#endif /* AVUTIL_FILM_GRAIN_PARAMS_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/frame.h b/3rdparty/ffmpeg/include/libavutil/frame.h deleted file mode 100644 index d440cfba2e366..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/frame.h +++ /dev/null @@ -1,1163 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_frame - * reference-counted frame API - */ - -#ifndef AVUTIL_FRAME_H -#define AVUTIL_FRAME_H - -#include -#include - -#include "avutil.h" -#include "buffer.h" -#include "channel_layout.h" -#include "dict.h" -#include "rational.h" -#include "samplefmt.h" -#include "pixfmt.h" -#include "version.h" - - -/** - * @defgroup lavu_frame AVFrame - * @ingroup lavu_data - * - * @{ - * AVFrame is an abstraction for reference-counted raw multimedia data. - */ - -enum AVFrameSideDataType { - /** - * The data is the AVPanScan struct defined in libavcodec. - */ - AV_FRAME_DATA_PANSCAN, - /** - * ATSC A53 Part 4 Closed Captions. - * A53 CC bitstream is stored as uint8_t in AVFrameSideData.data. - * The number of bytes of CC data is AVFrameSideData.size. - */ - AV_FRAME_DATA_A53_CC, - /** - * Stereoscopic 3d metadata. - * The data is the AVStereo3D struct defined in libavutil/stereo3d.h. - */ - AV_FRAME_DATA_STEREO3D, - /** - * The data is the AVMatrixEncoding enum defined in libavutil/channel_layout.h. - */ - AV_FRAME_DATA_MATRIXENCODING, - /** - * Metadata relevant to a downmix procedure. - * The data is the AVDownmixInfo struct defined in libavutil/downmix_info.h. - */ - AV_FRAME_DATA_DOWNMIX_INFO, - /** - * ReplayGain information in the form of the AVReplayGain struct. - */ - AV_FRAME_DATA_REPLAYGAIN, - /** - * This side data contains a 3x3 transformation matrix describing an affine - * transformation that needs to be applied to the frame for correct - * presentation. - * - * See libavutil/display.h for a detailed description of the data. - */ - AV_FRAME_DATA_DISPLAYMATRIX, - /** - * Active Format Description data consisting of a single byte as specified - * in ETSI TS 101 154 using AVActiveFormatDescription enum. - */ - AV_FRAME_DATA_AFD, - /** - * Motion vectors exported by some codecs (on demand through the export_mvs - * flag set in the libavcodec AVCodecContext flags2 option). - * The data is the AVMotionVector struct defined in - * libavutil/motion_vector.h. - */ - AV_FRAME_DATA_MOTION_VECTORS, - /** - * Recommends skipping the specified number of samples. This is exported - * only if the "skip_manual" AVOption is set in libavcodec. - * This has the same format as AV_PKT_DATA_SKIP_SAMPLES. - * @code - * u32le number of samples to skip from start of this packet - * u32le number of samples to skip from end of this packet - * u8 reason for start skip - * u8 reason for end skip (0=padding silence, 1=convergence) - * @endcode - */ - AV_FRAME_DATA_SKIP_SAMPLES, - /** - * This side data must be associated with an audio frame and corresponds to - * enum AVAudioServiceType defined in avcodec.h. - */ - AV_FRAME_DATA_AUDIO_SERVICE_TYPE, - /** - * Mastering display metadata associated with a video frame. The payload is - * an AVMasteringDisplayMetadata type and contains information about the - * mastering display color volume. - */ - AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, - /** - * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer. - * This is set on the first frame of a GOP that has a temporal reference of 0. - */ - AV_FRAME_DATA_GOP_TIMECODE, - - /** - * The data represents the AVSphericalMapping structure defined in - * libavutil/spherical.h. - */ - AV_FRAME_DATA_SPHERICAL, - - /** - * Content light level (based on CTA-861.3). This payload contains data in - * the form of the AVContentLightMetadata struct. - */ - AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, - - /** - * The data contains an ICC profile as an opaque octet buffer following the - * format described by ISO 15076-1 with an optional name defined in the - * metadata key entry "name". - */ - AV_FRAME_DATA_ICC_PROFILE, - - /** - * Timecode which conforms to SMPTE ST 12-1. The data is an array of 4 uint32_t - * where the first uint32_t describes how many (1-3) of the other timecodes are used. - * The timecode format is described in the documentation of av_timecode_get_smpte_from_framenum() - * function in libavutil/timecode.h. - */ - AV_FRAME_DATA_S12M_TIMECODE, - - /** - * HDR dynamic metadata associated with a video frame. The payload is - * an AVDynamicHDRPlus type and contains information for color - * volume transform - application 4 of SMPTE 2094-40:2016 standard. - */ - AV_FRAME_DATA_DYNAMIC_HDR_PLUS, - - /** - * Regions Of Interest, the data is an array of AVRegionOfInterest type, the number of - * array element is implied by AVFrameSideData.size / AVRegionOfInterest.self_size. - */ - AV_FRAME_DATA_REGIONS_OF_INTEREST, - - /** - * Encoding parameters for a video frame, as described by AVVideoEncParams. - */ - AV_FRAME_DATA_VIDEO_ENC_PARAMS, - - /** - * User data unregistered metadata associated with a video frame. - * This is the H.26[45] UDU SEI message, and shouldn't be used for any other purpose - * The data is stored as uint8_t in AVFrameSideData.data which is 16 bytes of - * uuid_iso_iec_11578 followed by AVFrameSideData.size - 16 bytes of user_data_payload_byte. - */ - AV_FRAME_DATA_SEI_UNREGISTERED, - - /** - * Film grain parameters for a frame, described by AVFilmGrainParams. - * Must be present for every frame which should have film grain applied. - * - * May be present multiple times, for example when there are multiple - * alternative parameter sets for different video signal characteristics. - * The user should select the most appropriate set for the application. - */ - AV_FRAME_DATA_FILM_GRAIN_PARAMS, - - /** - * Bounding boxes for object detection and classification, - * as described by AVDetectionBBoxHeader. - */ - AV_FRAME_DATA_DETECTION_BBOXES, - - /** - * Dolby Vision RPU raw data, suitable for passing to x265 - * or other libraries. Array of uint8_t, with NAL emulation - * bytes intact. - */ - AV_FRAME_DATA_DOVI_RPU_BUFFER, - - /** - * Parsed Dolby Vision metadata, suitable for passing to a software - * implementation. The payload is the AVDOVIMetadata struct defined in - * libavutil/dovi_meta.h. - */ - AV_FRAME_DATA_DOVI_METADATA, - - /** - * HDR Vivid dynamic metadata associated with a video frame. The payload is - * an AVDynamicHDRVivid type and contains information for color - * volume transform - CUVA 005.1-2021. - */ - AV_FRAME_DATA_DYNAMIC_HDR_VIVID, - - /** - * Ambient viewing environment metadata, as defined by H.274. - */ - AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT, - - /** - * Provide encoder-specific hinting information about changed/unchanged - * portions of a frame. It can be used to pass information about which - * macroblocks can be skipped because they didn't change from the - * corresponding ones in the previous frame. This could be useful for - * applications which know this information in advance to speed up - * encoding. - */ - AV_FRAME_DATA_VIDEO_HINT, - - /** - * Raw LCEVC payload data, as a uint8_t array, with NAL emulation - * bytes intact. - */ - AV_FRAME_DATA_LCEVC, - - /** - * This side data must be associated with a video frame. - * The presence of this side data indicates that the video stream is - * composed of multiple views (e.g. stereoscopic 3D content, - * cf. H.264 Annex H or H.265 Annex G). - * The data is an int storing the view ID. - */ - AV_FRAME_DATA_VIEW_ID, - - /** - * This side data contains information about the reference display width(s) - * and reference viewing distance(s) as well as information about the - * corresponding reference stereo pair(s), i.e., the pair(s) of views to be - * displayed for the viewer's left and right eyes on the reference display - * at the reference viewing distance. - * The payload is the AV3DReferenceDisplaysInfo struct defined in - * libavutil/tdrdi.h. - */ - AV_FRAME_DATA_3D_REFERENCE_DISPLAYS, -}; - -enum AVActiveFormatDescription { - AV_AFD_SAME = 8, - AV_AFD_4_3 = 9, - AV_AFD_16_9 = 10, - AV_AFD_14_9 = 11, - AV_AFD_4_3_SP_14_9 = 13, - AV_AFD_16_9_SP_14_9 = 14, - AV_AFD_SP_4_3 = 15, -}; - - -/** - * Structure to hold side data for an AVFrame. - * - * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be added - * to the end with a minor bump. - */ -typedef struct AVFrameSideData { - enum AVFrameSideDataType type; - uint8_t *data; - size_t size; - AVDictionary *metadata; - AVBufferRef *buf; -} AVFrameSideData; - -enum AVSideDataProps { - /** - * The side data type can be used in stream-global structures. - * Side data types without this property are only meaningful on per-frame - * basis. - */ - AV_SIDE_DATA_PROP_GLOBAL = (1 << 0), - - /** - * Multiple instances of this side data type can be meaningfully present in - * a single side data array. - */ - AV_SIDE_DATA_PROP_MULTI = (1 << 1), - - /** - * Side data depends on the video dimensions. Side data with this property - * loses its meaning when rescaling or cropping the image, unless - * either recomputed or adjusted to the new resolution. - */ - AV_SIDE_DATA_PROP_SIZE_DEPENDENT = (1 << 2), - - /** - * Side data depends on the video color space. Side data with this property - * loses its meaning when changing the video color encoding, e.g. by - * adapting to a different set of primaries or transfer characteristics. - */ - AV_SIDE_DATA_PROP_COLOR_DEPENDENT = (1 << 3), - - /** - * Side data depends on the channel layout. Side data with this property - * loses its meaning when downmixing or upmixing, unless either recomputed - * or adjusted to the new layout. - */ - AV_SIDE_DATA_PROP_CHANNEL_DEPENDENT = (1 << 4), -}; - -/** - * This struct describes the properties of a side data type. Its instance - * corresponding to a given type can be obtained from av_frame_side_data_desc(). - */ -typedef struct AVSideDataDescriptor { - /** - * Human-readable side data description. - */ - const char *name; - - /** - * Side data property flags, a combination of AVSideDataProps values. - */ - unsigned props; -} AVSideDataDescriptor; - -/** - * Structure describing a single Region Of Interest. - * - * When multiple regions are defined in a single side-data block, they - * should be ordered from most to least important - some encoders are only - * capable of supporting a limited number of distinct regions, so will have - * to truncate the list. - * - * When overlapping regions are defined, the first region containing a given - * area of the frame applies. - */ -typedef struct AVRegionOfInterest { - /** - * Must be set to the size of this data structure (that is, - * sizeof(AVRegionOfInterest)). - */ - uint32_t self_size; - /** - * Distance in pixels from the top edge of the frame to the top and - * bottom edges and from the left edge of the frame to the left and - * right edges of the rectangle defining this region of interest. - * - * The constraints on a region are encoder dependent, so the region - * actually affected may be slightly larger for alignment or other - * reasons. - */ - int top; - int bottom; - int left; - int right; - /** - * Quantisation offset. - * - * Must be in the range -1 to +1. A value of zero indicates no quality - * change. A negative value asks for better quality (less quantisation), - * while a positive value asks for worse quality (greater quantisation). - * - * The range is calibrated so that the extreme values indicate the - * largest possible offset - if the rest of the frame is encoded with the - * worst possible quality, an offset of -1 indicates that this region - * should be encoded with the best possible quality anyway. Intermediate - * values are then interpolated in some codec-dependent way. - * - * For example, in 10-bit H.264 the quantisation parameter varies between - * -12 and 51. A typical qoffset value of -1/10 therefore indicates that - * this region should be encoded with a QP around one-tenth of the full - * range better than the rest of the frame. So, if most of the frame - * were to be encoded with a QP of around 30, this region would get a QP - * of around 24 (an offset of approximately -1/10 * (51 - -12) = -6.3). - * An extreme value of -1 would indicate that this region should be - * encoded with the best possible quality regardless of the treatment of - * the rest of the frame - that is, should be encoded at a QP of -12. - */ - AVRational qoffset; -} AVRegionOfInterest; - -/** - * This structure describes decoded (raw) audio or video data. - * - * AVFrame must be allocated using av_frame_alloc(). Note that this only - * allocates the AVFrame itself, the buffers for the data must be managed - * through other means (see below). - * AVFrame must be freed with av_frame_free(). - * - * AVFrame is typically allocated once and then reused multiple times to hold - * different data (e.g. a single AVFrame to hold frames received from a - * decoder). In such a case, av_frame_unref() will free any references held by - * the frame and reset it to its original clean state before it - * is reused again. - * - * The data described by an AVFrame is usually reference counted through the - * AVBuffer API. The underlying buffer references are stored in AVFrame.buf / - * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at - * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case, - * every single data plane must be contained in one of the buffers in - * AVFrame.buf or AVFrame.extended_buf. - * There may be a single buffer for all the data, or one separate buffer for - * each plane, or anything in between. - * - * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added - * to the end with a minor bump. - * - * Fields can be accessed through AVOptions, the name string used, matches the - * C structure field name for fields accessible through AVOptions. - */ -typedef struct AVFrame { -#define AV_NUM_DATA_POINTERS 8 - /** - * pointer to the picture/channel planes. - * This might be different from the first allocated byte. For video, - * it could even point to the end of the image data. - * - * All pointers in data and extended_data must point into one of the - * AVBufferRef in buf or extended_buf. - * - * Some decoders access areas outside 0,0 - width,height, please - * see avcodec_align_dimensions2(). Some filters and swscale can read - * up to 16 bytes beyond the planes, if these filters are to be used, - * then 16 extra bytes must be allocated. - * - * NOTE: Pointers not needed by the format MUST be set to NULL. - * - * @attention In case of video, the data[] pointers can point to the - * end of image data in order to reverse line order, when used in - * combination with negative values in the linesize[] array. - */ - uint8_t *data[AV_NUM_DATA_POINTERS]; - - /** - * For video, a positive or negative value, which is typically indicating - * the size in bytes of each picture line, but it can also be: - * - the negative byte size of lines for vertical flipping - * (with data[n] pointing to the end of the data - * - a positive or negative multiple of the byte size as for accessing - * even and odd fields of a frame (possibly flipped) - * - * For audio, only linesize[0] may be set. For planar audio, each channel - * plane must be the same size. - * - * For video the linesizes should be multiples of the CPUs alignment - * preference, this is 16 or 32 for modern desktop CPUs. - * Some code requires such alignment other code can be slower without - * correct alignment, for yet other it makes no difference. - * - * @note The linesize may be larger than the size of usable data -- there - * may be extra padding present for performance reasons. - * - * @attention In case of video, line size values can be negative to achieve - * a vertically inverted iteration over image lines. - */ - int linesize[AV_NUM_DATA_POINTERS]; - - /** - * pointers to the data planes/channels. - * - * For video, this should simply point to data[]. - * - * For planar audio, each channel has a separate data pointer, and - * linesize[0] contains the size of each channel buffer. - * For packed audio, there is just one data pointer, and linesize[0] - * contains the total size of the buffer for all channels. - * - * Note: Both data and extended_data should always be set in a valid frame, - * but for planar audio with more channels that can fit in data, - * extended_data must be used in order to access all channels. - */ - uint8_t **extended_data; - - /** - * @name Video dimensions - * Video frames only. The coded dimensions (in pixels) of the video frame, - * i.e. the size of the rectangle that contains some well-defined values. - * - * @note The part of the frame intended for display/presentation is further - * restricted by the @ref cropping "Cropping rectangle". - * @{ - */ - int width, height; - /** - * @} - */ - - /** - * number of audio samples (per channel) described by this frame - */ - int nb_samples; - - /** - * format of the frame, -1 if unknown or unset - * Values correspond to enum AVPixelFormat for video frames, - * enum AVSampleFormat for audio) - */ - int format; - - /** - * Picture type of the frame. - */ - enum AVPictureType pict_type; - - /** - * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified. - */ - AVRational sample_aspect_ratio; - - /** - * Presentation timestamp in time_base units (time when frame should be shown to user). - */ - int64_t pts; - - /** - * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used) - * This is also the Presentation time of this AVFrame calculated from - * only AVPacket.dts values without pts values. - */ - int64_t pkt_dts; - - /** - * Time base for the timestamps in this frame. - * In the future, this field may be set on frames output by decoders or - * filters, but its value will be by default ignored on input to encoders - * or filters. - */ - AVRational time_base; - - /** - * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) - */ - int quality; - - /** - * Frame owner's private data. - * - * This field may be set by the code that allocates/owns the frame data. - * It is then not touched by any library functions, except: - * - it is copied to other references by av_frame_copy_props() (and hence by - * av_frame_ref()); - * - it is set to NULL when the frame is cleared by av_frame_unref() - * - on the caller's explicit request. E.g. libavcodec encoders/decoders - * will copy this field to/from @ref AVPacket "AVPackets" if the caller sets - * @ref AV_CODEC_FLAG_COPY_OPAQUE. - * - * @see opaque_ref the reference-counted analogue - */ - void *opaque; - - /** - * Number of fields in this frame which should be repeated, i.e. the total - * duration of this frame should be repeat_pict + 2 normal field durations. - * - * For interlaced frames this field may be set to 1, which signals that this - * frame should be presented as 3 fields: beginning with the first field (as - * determined by AV_FRAME_FLAG_TOP_FIELD_FIRST being set or not), followed - * by the second field, and then the first field again. - * - * For progressive frames this field may be set to a multiple of 2, which - * signals that this frame's duration should be (repeat_pict + 2) / 2 - * normal frame durations. - * - * @note This field is computed from MPEG2 repeat_first_field flag and its - * associated flags, H.264 pic_struct from picture timing SEI, and - * their analogues in other codecs. Typically it should only be used when - * higher-layer timing information is not available. - */ - int repeat_pict; - - /** - * Sample rate of the audio data. - */ - int sample_rate; - - /** - * AVBuffer references backing the data for this frame. All the pointers in - * data and extended_data must point inside one of the buffers in buf or - * extended_buf. This array must be filled contiguously -- if buf[i] is - * non-NULL then buf[j] must also be non-NULL for all j < i. - * - * There may be at most one AVBuffer per data plane, so for video this array - * always contains all the references. For planar audio with more than - * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in - * this array. Then the extra AVBufferRef pointers are stored in the - * extended_buf array. - */ - AVBufferRef *buf[AV_NUM_DATA_POINTERS]; - - /** - * For planar audio which requires more than AV_NUM_DATA_POINTERS - * AVBufferRef pointers, this array will hold all the references which - * cannot fit into AVFrame.buf. - * - * Note that this is different from AVFrame.extended_data, which always - * contains all the pointers. This array only contains the extra pointers, - * which cannot fit into AVFrame.buf. - * - * This array is always allocated using av_malloc() by whoever constructs - * the frame. It is freed in av_frame_unref(). - */ - AVBufferRef **extended_buf; - /** - * Number of elements in extended_buf. - */ - int nb_extended_buf; - - AVFrameSideData **side_data; - int nb_side_data; - -/** - * @defgroup lavu_frame_flags AV_FRAME_FLAGS - * @ingroup lavu_frame - * Flags describing additional frame properties. - * - * @{ - */ - -/** - * The frame data may be corrupted, e.g. due to decoding errors. - */ -#define AV_FRAME_FLAG_CORRUPT (1 << 0) -/** - * A flag to mark frames that are keyframes. - */ -#define AV_FRAME_FLAG_KEY (1 << 1) -/** - * A flag to mark the frames which need to be decoded, but shouldn't be output. - */ -#define AV_FRAME_FLAG_DISCARD (1 << 2) -/** - * A flag to mark frames whose content is interlaced. - */ -#define AV_FRAME_FLAG_INTERLACED (1 << 3) -/** - * A flag to mark frames where the top field is displayed first if the content - * is interlaced. - */ -#define AV_FRAME_FLAG_TOP_FIELD_FIRST (1 << 4) -/** - * A decoder can use this flag to mark frames which were originally encoded losslessly. - * - * For coding bitstream formats which support both lossless and lossy - * encoding, it is sometimes possible for a decoder to determine which method - * was used when the bitsream was encoded. - */ -#define AV_FRAME_FLAG_LOSSLESS (1 << 5) -/** - * @} - */ - - /** - * Frame flags, a combination of @ref lavu_frame_flags - */ - int flags; - - /** - * MPEG vs JPEG YUV range. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorRange color_range; - - enum AVColorPrimaries color_primaries; - - enum AVColorTransferCharacteristic color_trc; - - /** - * YUV colorspace type. - * - encoding: Set by user - * - decoding: Set by libavcodec - */ - enum AVColorSpace colorspace; - - enum AVChromaLocation chroma_location; - - /** - * frame timestamp estimated using various heuristics, in stream time base - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int64_t best_effort_timestamp; - - /** - * metadata. - * - encoding: Set by user. - * - decoding: Set by libavcodec. - */ - AVDictionary *metadata; - - /** - * decode error flags of the frame, set to a combination of - * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there - * were errors during the decoding. - * - encoding: unused - * - decoding: set by libavcodec, read by user. - */ - int decode_error_flags; -#define FF_DECODE_ERROR_INVALID_BITSTREAM 1 -#define FF_DECODE_ERROR_MISSING_REFERENCE 2 -#define FF_DECODE_ERROR_CONCEALMENT_ACTIVE 4 -#define FF_DECODE_ERROR_DECODE_SLICES 8 - - /** - * For hwaccel-format frames, this should be a reference to the - * AVHWFramesContext describing the frame. - */ - AVBufferRef *hw_frames_ctx; - - /** - * Frame owner's private data. - * - * This field may be set by the code that allocates/owns the frame data. - * It is then not touched by any library functions, except: - * - a new reference to the underlying buffer is propagated by - * av_frame_copy_props() (and hence by av_frame_ref()); - * - it is unreferenced in av_frame_unref(); - * - on the caller's explicit request. E.g. libavcodec encoders/decoders - * will propagate a new reference to/from @ref AVPacket "AVPackets" if the - * caller sets @ref AV_CODEC_FLAG_COPY_OPAQUE. - * - * @see opaque the plain pointer analogue - */ - AVBufferRef *opaque_ref; - - /** - * @anchor cropping - * @name Cropping - * Video frames only. The number of pixels to discard from the the - * top/bottom/left/right border of the frame to obtain the sub-rectangle of - * the frame intended for presentation. - * @{ - */ - size_t crop_top; - size_t crop_bottom; - size_t crop_left; - size_t crop_right; - /** - * @} - */ - - /** - * RefStruct reference for internal use by a single libav* library. - * Must not be used to transfer data between libraries. - * Has to be NULL when ownership of the frame leaves the respective library. - * - * Code outside the FFmpeg libs must never check or change private_ref. - */ - void *private_ref; - - /** - * Channel layout of the audio data. - */ - AVChannelLayout ch_layout; - - /** - * Duration of the frame, in the same units as pts. 0 if unknown. - */ - int64_t duration; -} AVFrame; - - -/** - * Allocate an AVFrame and set its fields to default values. The resulting - * struct must be freed using av_frame_free(). - * - * @return An AVFrame filled with default values or NULL on failure. - * - * @note this only allocates the AVFrame itself, not the data buffers. Those - * must be allocated through other means, e.g. with av_frame_get_buffer() or - * manually. - */ -AVFrame *av_frame_alloc(void); - -/** - * Free the frame and any dynamically allocated objects in it, - * e.g. extended_data. If the frame is reference counted, it will be - * unreferenced first. - * - * @param frame frame to be freed. The pointer will be set to NULL. - */ -void av_frame_free(AVFrame **frame); - -/** - * Set up a new reference to the data described by the source frame. - * - * Copy frame properties from src to dst and create a new reference for each - * AVBufferRef from src. - * - * If src is not reference counted, new buffers are allocated and the data is - * copied. - * - * @warning: dst MUST have been either unreferenced with av_frame_unref(dst), - * or newly allocated with av_frame_alloc() before calling this - * function, or undefined behavior will occur. - * - * @return 0 on success, a negative AVERROR on error - */ -int av_frame_ref(AVFrame *dst, const AVFrame *src); - -/** - * Ensure the destination frame refers to the same data described by the source - * frame, either by creating a new reference for each AVBufferRef from src if - * they differ from those in dst, by allocating new buffers and copying data if - * src is not reference counted, or by unrefencing it if src is empty. - * - * Frame properties on dst will be replaced by those from src. - * - * @return 0 on success, a negative AVERROR on error. On error, dst is - * unreferenced. - */ -int av_frame_replace(AVFrame *dst, const AVFrame *src); - -/** - * Create a new frame that references the same data as src. - * - * This is a shortcut for av_frame_alloc()+av_frame_ref(). - * - * @return newly created AVFrame on success, NULL on error. - */ -AVFrame *av_frame_clone(const AVFrame *src); - -/** - * Unreference all the buffers referenced by frame and reset the frame fields. - */ -void av_frame_unref(AVFrame *frame); - -/** - * Move everything contained in src to dst and reset src. - * - * @warning: dst is not unreferenced, but directly overwritten without reading - * or deallocating its contents. Call av_frame_unref(dst) manually - * before calling this function to ensure that no memory is leaked. - */ -void av_frame_move_ref(AVFrame *dst, AVFrame *src); - -/** - * Allocate new buffer(s) for audio or video data. - * - * The following fields must be set on frame before calling this function: - * - format (pixel format for video, sample format for audio) - * - width and height for video - * - nb_samples and ch_layout for audio - * - * This function will fill AVFrame.data and AVFrame.buf arrays and, if - * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. - * For planar formats, one buffer will be allocated for each plane. - * - * @warning: if frame already has been allocated, calling this function will - * leak memory. In addition, undefined behavior can occur in certain - * cases. - * - * @param frame frame in which to store the new buffers. - * @param align Required buffer size and data pointer alignment. If equal to 0, - * alignment will be chosen automatically for the current CPU. - * It is highly recommended to pass 0 here unless you know what - * you are doing. - * - * @return 0 on success, a negative AVERROR on error. - */ -int av_frame_get_buffer(AVFrame *frame, int align); - -/** - * Check if the frame data is writable. - * - * @return A positive value if the frame data is writable (which is true if and - * only if each of the underlying buffers has only one reference, namely the one - * stored in this frame). Return 0 otherwise. - * - * If 1 is returned the answer is valid until av_buffer_ref() is called on any - * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly). - * - * @see av_frame_make_writable(), av_buffer_is_writable() - */ -int av_frame_is_writable(AVFrame *frame); - -/** - * Ensure that the frame data is writable, avoiding data copy if possible. - * - * Do nothing if the frame is writable, allocate new buffers and copy the data - * if it is not. Non-refcounted frames behave as non-writable, i.e. a copy - * is always made. - * - * @return 0 on success, a negative AVERROR on error. - * - * @see av_frame_is_writable(), av_buffer_is_writable(), - * av_buffer_make_writable() - */ -int av_frame_make_writable(AVFrame *frame); - -/** - * Copy the frame data from src to dst. - * - * This function does not allocate anything, dst must be already initialized and - * allocated with the same parameters as src. - * - * This function only copies the frame data (i.e. the contents of the data / - * extended data arrays), not any other properties. - * - * @return >= 0 on success, a negative AVERROR on error. - */ -int av_frame_copy(AVFrame *dst, const AVFrame *src); - -/** - * Copy only "metadata" fields from src to dst. - * - * Metadata for the purpose of this function are those fields that do not affect - * the data layout in the buffers. E.g. pts, sample rate (for audio) or sample - * aspect ratio (for video), but not width/height or channel layout. - * Side data is also copied. - */ -int av_frame_copy_props(AVFrame *dst, const AVFrame *src); - -/** - * Get the buffer reference a given data plane is stored in. - * - * @param frame the frame to get the plane's buffer from - * @param plane index of the data plane of interest in frame->extended_data. - * - * @return the buffer reference that contains the plane or NULL if the input - * frame is not valid. - */ -AVBufferRef *av_frame_get_plane_buffer(const AVFrame *frame, int plane); - -/** - * Add a new side data to a frame. - * - * @param frame a frame to which the side data should be added - * @param type type of the added side data - * @param size size of the side data - * - * @return newly added side data on success, NULL on error - */ -AVFrameSideData *av_frame_new_side_data(AVFrame *frame, - enum AVFrameSideDataType type, - size_t size); - -/** - * Add a new side data to a frame from an existing AVBufferRef - * - * @param frame a frame to which the side data should be added - * @param type the type of the added side data - * @param buf an AVBufferRef to add as side data. The ownership of - * the reference is transferred to the frame. - * - * @return newly added side data on success, NULL on error. On failure - * the frame is unchanged and the AVBufferRef remains owned by - * the caller. - */ -AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame, - enum AVFrameSideDataType type, - AVBufferRef *buf); - -/** - * @return a pointer to the side data of a given type on success, NULL if there - * is no side data with such type in this frame. - */ -AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, - enum AVFrameSideDataType type); - -/** - * Remove and free all side data instances of the given type. - */ -void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type); - - -/** - * Flags for frame cropping. - */ -enum { - /** - * Apply the maximum possible cropping, even if it requires setting the - * AVFrame.data[] entries to unaligned pointers. Passing unaligned data - * to FFmpeg API is generally not allowed, and causes undefined behavior - * (such as crashes). You can pass unaligned data only to FFmpeg APIs that - * are explicitly documented to accept it. Use this flag only if you - * absolutely know what you are doing. - */ - AV_FRAME_CROP_UNALIGNED = 1 << 0, -}; - -/** - * Crop the given video AVFrame according to its crop_left/crop_top/crop_right/ - * crop_bottom fields. If cropping is successful, the function will adjust the - * data pointers and the width/height fields, and set the crop fields to 0. - * - * In all cases, the cropping boundaries will be rounded to the inherent - * alignment of the pixel format. In some cases, such as for opaque hwaccel - * formats, the left/top cropping is ignored. The crop fields are set to 0 even - * if the cropping was rounded or ignored. - * - * @param frame the frame which should be cropped - * @param flags Some combination of AV_FRAME_CROP_* flags, or 0. - * - * @return >= 0 on success, a negative AVERROR on error. If the cropping fields - * were invalid, AVERROR(ERANGE) is returned, and nothing is changed. - */ -int av_frame_apply_cropping(AVFrame *frame, int flags); - -/** - * @return a string identifying the side data type - */ -const char *av_frame_side_data_name(enum AVFrameSideDataType type); - -/** - * @return side data descriptor corresponding to a given side data type, NULL - * when not available. - */ -const AVSideDataDescriptor *av_frame_side_data_desc(enum AVFrameSideDataType type); - -/** - * Free all side data entries and their contents, then zeroes out the - * values which the pointers are pointing to. - * - * @param sd pointer to array of side data to free. Will be set to NULL - * upon return. - * @param nb_sd pointer to an integer containing the number of entries in - * the array. Will be set to 0 upon return. - */ -void av_frame_side_data_free(AVFrameSideData ***sd, int *nb_sd); - -/** - * Remove existing entries before adding new ones. - */ -#define AV_FRAME_SIDE_DATA_FLAG_UNIQUE (1 << 0) -/** - * Don't add a new entry if another of the same type exists. - * Applies only for side data types without the AV_SIDE_DATA_PROP_MULTI prop. - */ -#define AV_FRAME_SIDE_DATA_FLAG_REPLACE (1 << 1) -/** - * Create a new reference to the passed in buffer instead of taking ownership - * of it. - */ -#define AV_FRAME_SIDE_DATA_FLAG_NEW_REF (1 << 2) - -/** - * Add new side data entry to an array. - * - * @param sd pointer to array of side data to which to add another entry, - * or to NULL in order to start a new array. - * @param nb_sd pointer to an integer containing the number of entries in - * the array. - * @param type type of the added side data - * @param size size of the side data - * @param flags Some combination of AV_FRAME_SIDE_DATA_FLAG_* flags, or 0. - * - * @return newly added side data on success, NULL on error. - * @note In case of AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of - * matching AVFrameSideDataType will be removed before the addition - * is attempted. - * @note In case of AV_FRAME_SIDE_DATA_FLAG_REPLACE being set, if an - * entry of the same type already exists, it will be replaced instead. - */ -AVFrameSideData *av_frame_side_data_new(AVFrameSideData ***sd, int *nb_sd, - enum AVFrameSideDataType type, - size_t size, unsigned int flags); - -/** - * Add a new side data entry to an array from an existing AVBufferRef. - * - * @param sd pointer to array of side data to which to add another entry, - * or to NULL in order to start a new array. - * @param nb_sd pointer to an integer containing the number of entries in - * the array. - * @param type type of the added side data - * @param buf Pointer to AVBufferRef to add to the array. On success, - * the function takes ownership of the AVBufferRef and *buf is - * set to NULL, unless AV_FRAME_SIDE_DATA_FLAG_NEW_REF is set - * in which case the ownership will remain with the caller. - * @param flags Some combination of AV_FRAME_SIDE_DATA_FLAG_* flags, or 0. - * - * @return newly added side data on success, NULL on error. - * @note In case of AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of - * matching AVFrameSideDataType will be removed before the addition - * is attempted. - * @note In case of AV_FRAME_SIDE_DATA_FLAG_REPLACE being set, if an - * entry of the same type already exists, it will be replaced instead. - * - */ -AVFrameSideData *av_frame_side_data_add(AVFrameSideData ***sd, int *nb_sd, - enum AVFrameSideDataType type, - AVBufferRef **buf, unsigned int flags); - -/** - * Add a new side data entry to an array based on existing side data, taking - * a reference towards the contained AVBufferRef. - * - * @param sd pointer to array of side data to which to add another entry, - * or to NULL in order to start a new array. - * @param nb_sd pointer to an integer containing the number of entries in - * the array. - * @param src side data to be cloned, with a new reference utilized - * for the buffer. - * @param flags Some combination of AV_FRAME_SIDE_DATA_FLAG_* flags, or 0. - * - * @return negative error code on failure, >=0 on success. - * @note In case of AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of - * matching AVFrameSideDataType will be removed before the addition - * is attempted. - * @note In case of AV_FRAME_SIDE_DATA_FLAG_REPLACE being set, if an - * entry of the same type already exists, it will be replaced instead. - */ -int av_frame_side_data_clone(AVFrameSideData ***sd, int *nb_sd, - const AVFrameSideData *src, unsigned int flags); - -/** - * Get a side data entry of a specific type from an array. - * - * @param sd array of side data. - * @param nb_sd integer containing the number of entries in the array. - * @param type type of side data to be queried - * - * @return a pointer to the side data of a given type on success, NULL if there - * is no side data with such type in this set. - */ -const AVFrameSideData *av_frame_side_data_get_c(const AVFrameSideData * const *sd, - const int nb_sd, - enum AVFrameSideDataType type); - -/** - * Wrapper around av_frame_side_data_get_c() to workaround the limitation - * that for any type T the conversion from T * const * to const T * const * - * is not performed automatically in C. - * @see av_frame_side_data_get_c() - */ -static inline -const AVFrameSideData *av_frame_side_data_get(AVFrameSideData * const *sd, - const int nb_sd, - enum AVFrameSideDataType type) -{ - return av_frame_side_data_get_c((const AVFrameSideData * const *)sd, - nb_sd, type); -} - -/** - * Remove and free all side data instances of the given type from an array. - */ -void av_frame_side_data_remove(AVFrameSideData ***sd, int *nb_sd, - enum AVFrameSideDataType type); - -/** - * Remove and free all side data instances that match any of the given - * side data properties. (See enum AVSideDataProps) - */ -void av_frame_side_data_remove_by_props(AVFrameSideData ***sd, int *nb_sd, - int props); - -/** - * @} - */ - -#endif /* AVUTIL_FRAME_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/hash.h b/3rdparty/ffmpeg/include/libavutil/hash.h deleted file mode 100644 index 94151ded7cbca..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/hash.h +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright (C) 2013 Reimar Döffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_hash_generic - * Generic hashing API - */ - -#ifndef AVUTIL_HASH_H -#define AVUTIL_HASH_H - -#include -#include - -/** - * @defgroup lavu_hash Hash Functions - * @ingroup lavu_crypto - * Hash functions useful in multimedia. - * - * Hash functions are widely used in multimedia, from error checking and - * concealment to internal regression testing. libavutil has efficient - * implementations of a variety of hash functions that may be useful for - * FFmpeg and other multimedia applications. - * - * @{ - * - * @defgroup lavu_hash_generic Generic Hashing API - * An abstraction layer for all hash functions supported by libavutil. - * - * If your application needs to support a wide range of different hash - * functions, then the Generic Hashing API is for you. It provides a generic, - * reusable API for @ref lavu_hash "all hash functions" implemented in libavutil. - * If you just need to use one particular hash function, use the @ref lavu_hash - * "individual hash" directly. - * - * @section Sample Code - * - * A basic template for using the Generic Hashing API follows: - * - * @code - * struct AVHashContext *ctx = NULL; - * const char *hash_name = NULL; - * uint8_t *output_buf = NULL; - * - * // Select from a string returned by av_hash_names() - * hash_name = ...; - * - * // Allocate a hash context - * ret = av_hash_alloc(&ctx, hash_name); - * if (ret < 0) - * return ret; - * - * // Initialize the hash context - * av_hash_init(ctx); - * - * // Update the hash context with data - * while (data_left) { - * av_hash_update(ctx, data, size); - * } - * - * // Now we have no more data, so it is time to finalize the hash and get the - * // output. But we need to first allocate an output buffer. Note that you can - * // use any memory allocation function, including malloc(), not just - * // av_malloc(). - * output_buf = av_malloc(av_hash_get_size(ctx)); - * if (!output_buf) - * return AVERROR(ENOMEM); - * - * // Finalize the hash context. - * // You can use any of the av_hash_final*() functions provided, for other - * // output formats. If you do so, be sure to adjust the memory allocation - * // above. See the function documentation below for the exact amount of extra - * // memory needed. - * av_hash_final(ctx, output_buffer); - * - * // Free the context - * av_hash_freep(&ctx); - * @endcode - * - * @section Hash Function-Specific Information - * If the CRC32 hash is selected, the #AV_CRC_32_IEEE polynomial will be - * used. - * - * If the Murmur3 hash is selected, the default seed will be used. See @ref - * lavu_murmur3_seedinfo "Murmur3" for more information. - * - * @{ - */ - -/** - * @example ffhash.c - * This example is a simple command line application that takes one or more - * arguments. It demonstrates a typical use of the hashing API with allocation, - * initialization, updating, and finalizing. - */ - -struct AVHashContext; - -/** - * Allocate a hash context for the algorithm specified by name. - * - * @return >= 0 for success, a negative error code for failure - * - * @note The context is not initialized after a call to this function; you must - * call av_hash_init() to do so. - */ -int av_hash_alloc(struct AVHashContext **ctx, const char *name); - -/** - * Get the names of available hash algorithms. - * - * This function can be used to enumerate the algorithms. - * - * @param[in] i Index of the hash algorithm, starting from 0 - * @return Pointer to a static string or `NULL` if `i` is out of range - */ -const char *av_hash_names(int i); - -/** - * Get the name of the algorithm corresponding to the given hash context. - */ -const char *av_hash_get_name(const struct AVHashContext *ctx); - -/** - * Maximum value that av_hash_get_size() will currently return. - * - * You can use this if you absolutely want or need to use static allocation for - * the output buffer and are fine with not supporting hashes newly added to - * libavutil without recompilation. - * - * @warning - * Adding new hashes with larger sizes, and increasing the macro while doing - * so, will not be considered an ABI change. To prevent your code from - * overflowing a buffer, either dynamically allocate the output buffer with - * av_hash_get_size(), or limit your use of the Hashing API to hashes that are - * already in FFmpeg during the time of compilation. - */ -#define AV_HASH_MAX_SIZE 64 - -/** - * Get the size of the resulting hash value in bytes. - * - * The maximum value this function will currently return is available as macro - * #AV_HASH_MAX_SIZE. - * - * @param[in] ctx Hash context - * @return Size of the hash value in bytes - */ -int av_hash_get_size(const struct AVHashContext *ctx); - -/** - * Initialize or reset a hash context. - * - * @param[in,out] ctx Hash context - */ -void av_hash_init(struct AVHashContext *ctx); - -/** - * Update a hash context with additional data. - * - * @param[in,out] ctx Hash context - * @param[in] src Data to be added to the hash context - * @param[in] len Size of the additional data - */ -void av_hash_update(struct AVHashContext *ctx, const uint8_t *src, size_t len); - -/** - * Finalize a hash context and compute the actual hash value. - * - * The minimum size of `dst` buffer is given by av_hash_get_size() or - * #AV_HASH_MAX_SIZE. The use of the latter macro is discouraged. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the final hash value will be stored - * - * @see av_hash_final_bin() provides an alternative API - */ -void av_hash_final(struct AVHashContext *ctx, uint8_t *dst); - -/** - * Finalize a hash context and store the actual hash value in a buffer. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * If `size` is smaller than the hash size (given by av_hash_get_size()), the - * hash is truncated; if size is larger, the buffer is padded with 0. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the final hash value will be stored - * @param[in] size Number of bytes to write to `dst` - */ -void av_hash_final_bin(struct AVHashContext *ctx, uint8_t *dst, int size); - -/** - * Finalize a hash context and store the hexadecimal representation of the - * actual hash value as a string. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * The string is always 0-terminated. - * - * If `size` is smaller than `2 * hash_size + 1`, where `hash_size` is the - * value returned by av_hash_get_size(), the string will be truncated. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the string will be stored - * @param[in] size Maximum number of bytes to write to `dst` - */ -void av_hash_final_hex(struct AVHashContext *ctx, uint8_t *dst, int size); - -/** - * Finalize a hash context and store the Base64 representation of the - * actual hash value as a string. - * - * It is not safe to update or finalize a hash context again, if it has already - * been finalized. - * - * The string is always 0-terminated. - * - * If `size` is smaller than AV_BASE64_SIZE(hash_size), where `hash_size` is - * the value returned by av_hash_get_size(), the string will be truncated. - * - * @param[in,out] ctx Hash context - * @param[out] dst Where the final hash value will be stored - * @param[in] size Maximum number of bytes to write to `dst` - */ -void av_hash_final_b64(struct AVHashContext *ctx, uint8_t *dst, int size); - -/** - * Free hash context and set hash context pointer to `NULL`. - * - * @param[in,out] ctx Pointer to hash context - */ -void av_hash_freep(struct AVHashContext **ctx); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_HASH_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/hdr_dynamic_metadata.h b/3rdparty/ffmpeg/include/libavutil/hdr_dynamic_metadata.h deleted file mode 100644 index 5100ed6f41f71..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/hdr_dynamic_metadata.h +++ /dev/null @@ -1,376 +0,0 @@ -/* - * Copyright (c) 2018 Mohammad Izadi - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HDR_DYNAMIC_METADATA_H -#define AVUTIL_HDR_DYNAMIC_METADATA_H - -#include "frame.h" -#include "rational.h" - -/** - * Option for overlapping elliptical pixel selectors in an image. - */ -enum AVHDRPlusOverlapProcessOption { - AV_HDR_PLUS_OVERLAP_PROCESS_WEIGHTED_AVERAGING = 0, - AV_HDR_PLUS_OVERLAP_PROCESS_LAYERING = 1, -}; - -/** - * Represents the percentile at a specific percentage in - * a distribution. - */ -typedef struct AVHDRPlusPercentile { - /** - * The percentage value corresponding to a specific percentile linearized - * RGB value in the processing window in the scene. The value shall be in - * the range of 0 to100, inclusive. - */ - uint8_t percentage; - - /** - * The linearized maxRGB value at a specific percentile in the processing - * window in the scene. The value shall be in the range of 0 to 1, inclusive - * and in multiples of 0.00001. - */ - AVRational percentile; -} AVHDRPlusPercentile; - -/** - * Color transform parameters at a processing window in a dynamic metadata for - * SMPTE 2094-40. - */ -typedef struct AVHDRPlusColorTransformParams { - /** - * The relative x coordinate of the top left pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(width of Picture - 1). The value 1 corresponds - * to the absolute coordinate of width of Picture - 1. The value for - * first processing window shall be 0. - */ - AVRational window_upper_left_corner_x; - - /** - * The relative y coordinate of the top left pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(height of Picture - 1). The value 1 corresponds - * to the absolute coordinate of height of Picture - 1. The value for - * first processing window shall be 0. - */ - AVRational window_upper_left_corner_y; - - /** - * The relative x coordinate of the bottom right pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(width of Picture - 1). The value 1 corresponds - * to the absolute coordinate of width of Picture - 1. The value for - * first processing window shall be 1. - */ - AVRational window_lower_right_corner_x; - - /** - * The relative y coordinate of the bottom right pixel of the processing - * window. The value shall be in the range of 0 and 1, inclusive and - * in multiples of 1/(height of Picture - 1). The value 1 corresponds - * to the absolute coordinate of height of Picture - 1. The value for - * first processing window shall be 1. - */ - AVRational window_lower_right_corner_y; - - /** - * The x coordinate of the center position of the concentric internal and - * external ellipses of the elliptical pixel selector in the processing - * window. The value shall be in the range of 0 to (width of Picture - 1), - * inclusive and in multiples of 1 pixel. - */ - uint16_t center_of_ellipse_x; - - /** - * The y coordinate of the center position of the concentric internal and - * external ellipses of the elliptical pixel selector in the processing - * window. The value shall be in the range of 0 to (height of Picture - 1), - * inclusive and in multiples of 1 pixel. - */ - uint16_t center_of_ellipse_y; - - /** - * The clockwise rotation angle in degree of arc with respect to the - * positive direction of the x-axis of the concentric internal and external - * ellipses of the elliptical pixel selector in the processing window. The - * value shall be in the range of 0 to 180, inclusive and in multiples of 1. - */ - uint8_t rotation_angle; - - /** - * The semi-major axis value of the internal ellipse of the elliptical pixel - * selector in amount of pixels in the processing window. The value shall be - * in the range of 1 to 65535, inclusive and in multiples of 1 pixel. - */ - uint16_t semimajor_axis_internal_ellipse; - - /** - * The semi-major axis value of the external ellipse of the elliptical pixel - * selector in amount of pixels in the processing window. The value - * shall not be less than semimajor_axis_internal_ellipse of the current - * processing window. The value shall be in the range of 1 to 65535, - * inclusive and in multiples of 1 pixel. - */ - uint16_t semimajor_axis_external_ellipse; - - /** - * The semi-minor axis value of the external ellipse of the elliptical pixel - * selector in amount of pixels in the processing window. The value shall be - * in the range of 1 to 65535, inclusive and in multiples of 1 pixel. - */ - uint16_t semiminor_axis_external_ellipse; - - /** - * Overlap process option indicates one of the two methods of combining - * rendered pixels in the processing window in an image with at least one - * elliptical pixel selector. For overlapping elliptical pixel selectors - * in an image, overlap_process_option shall have the same value. - */ - enum AVHDRPlusOverlapProcessOption overlap_process_option; - - /** - * The maximum of the color components of linearized RGB values in the - * processing window in the scene. The values should be in the range of 0 to - * 1, inclusive and in multiples of 0.00001. maxscl[ 0 ], maxscl[ 1 ], and - * maxscl[ 2 ] are corresponding to R, G, B color components respectively. - */ - AVRational maxscl[3]; - - /** - * The average of linearized maxRGB values in the processing window in the - * scene. The value should be in the range of 0 to 1, inclusive and in - * multiples of 0.00001. - */ - AVRational average_maxrgb; - - /** - * The number of linearized maxRGB values at given percentiles in the - * processing window in the scene. The maximum value shall be 15. - */ - uint8_t num_distribution_maxrgb_percentiles; - - /** - * The linearized maxRGB values at given percentiles in the - * processing window in the scene. - */ - AVHDRPlusPercentile distribution_maxrgb[15]; - - /** - * The fraction of selected pixels in the image that contains the brightest - * pixel in the scene. The value shall be in the range of 0 to 1, inclusive - * and in multiples of 0.001. - */ - AVRational fraction_bright_pixels; - - /** - * This flag indicates that the metadata for the tone mapping function in - * the processing window is present (for value of 1). - */ - uint8_t tone_mapping_flag; - - /** - * The x coordinate of the separation point between the linear part and the - * curved part of the tone mapping function. The value shall be in the range - * of 0 to 1, excluding 0 and in multiples of 1/4095. - */ - AVRational knee_point_x; - - /** - * The y coordinate of the separation point between the linear part and the - * curved part of the tone mapping function. The value shall be in the range - * of 0 to 1, excluding 0 and in multiples of 1/4095. - */ - AVRational knee_point_y; - - /** - * The number of the intermediate anchor parameters of the tone mapping - * function in the processing window. The maximum value shall be 15. - */ - uint8_t num_bezier_curve_anchors; - - /** - * The intermediate anchor parameters of the tone mapping function in the - * processing window in the scene. The values should be in the range of 0 - * to 1, inclusive and in multiples of 1/1023. - */ - AVRational bezier_curve_anchors[15]; - - /** - * This flag shall be equal to 0 in bitstreams conforming to this version of - * this Specification. Other values are reserved for future use. - */ - uint8_t color_saturation_mapping_flag; - - /** - * The color saturation gain in the processing window in the scene. The - * value shall be in the range of 0 to 63/8, inclusive and in multiples of - * 1/8. The default value shall be 1. - */ - AVRational color_saturation_weight; -} AVHDRPlusColorTransformParams; - -/** - * This struct represents dynamic metadata for color volume transform - - * application 4 of SMPTE 2094-40:2016 standard. - * - * To be used as payload of a AVFrameSideData or AVPacketSideData with the - * appropriate type. - * - * @note The struct should be allocated with - * av_dynamic_hdr_plus_alloc() and its size is not a part of - * the public ABI. - */ -typedef struct AVDynamicHDRPlus { - /** - * Country code by Rec. ITU-T T.35 Annex A. The value shall be 0xB5. - */ - uint8_t itu_t_t35_country_code; - - /** - * Application version in the application defining document in ST-2094 - * suite. The value shall be set to 0. - */ - uint8_t application_version; - - /** - * The number of processing windows. The value shall be in the range - * of 1 to 3, inclusive. - */ - uint8_t num_windows; - - /** - * The color transform parameters for every processing window. - */ - AVHDRPlusColorTransformParams params[3]; - - /** - * The nominal maximum display luminance of the targeted system display, - * in units of 0.0001 candelas per square metre. The value shall be in - * the range of 0 to 10000, inclusive. - */ - AVRational targeted_system_display_maximum_luminance; - - /** - * This flag shall be equal to 0 in bit streams conforming to this version - * of this Specification. The value 1 is reserved for future use. - */ - uint8_t targeted_system_display_actual_peak_luminance_flag; - - /** - * The number of rows in the targeted system_display_actual_peak_luminance - * array. The value shall be in the range of 2 to 25, inclusive. - */ - uint8_t num_rows_targeted_system_display_actual_peak_luminance; - - /** - * The number of columns in the - * targeted_system_display_actual_peak_luminance array. The value shall be - * in the range of 2 to 25, inclusive. - */ - uint8_t num_cols_targeted_system_display_actual_peak_luminance; - - /** - * The normalized actual peak luminance of the targeted system display. The - * values should be in the range of 0 to 1, inclusive and in multiples of - * 1/15. - */ - AVRational targeted_system_display_actual_peak_luminance[25][25]; - - /** - * This flag shall be equal to 0 in bitstreams conforming to this version of - * this Specification. The value 1 is reserved for future use. - */ - uint8_t mastering_display_actual_peak_luminance_flag; - - /** - * The number of rows in the mastering_display_actual_peak_luminance array. - * The value shall be in the range of 2 to 25, inclusive. - */ - uint8_t num_rows_mastering_display_actual_peak_luminance; - - /** - * The number of columns in the mastering_display_actual_peak_luminance - * array. The value shall be in the range of 2 to 25, inclusive. - */ - uint8_t num_cols_mastering_display_actual_peak_luminance; - - /** - * The normalized actual peak luminance of the mastering display used for - * mastering the image essence. The values should be in the range of 0 to 1, - * inclusive and in multiples of 1/15. - */ - AVRational mastering_display_actual_peak_luminance[25][25]; -} AVDynamicHDRPlus; - -/** - * Allocate an AVDynamicHDRPlus structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVDynamicHDRPlus filled with default values or NULL - * on failure. - */ -AVDynamicHDRPlus *av_dynamic_hdr_plus_alloc(size_t *size); - -/** - * Allocate a complete AVDynamicHDRPlus and add it to the frame. - * @param frame The frame which side data is added to. - * - * @return The AVDynamicHDRPlus structure to be filled by caller or NULL - * on failure. - */ -AVDynamicHDRPlus *av_dynamic_hdr_plus_create_side_data(AVFrame *frame); - -/** - * Parse the user data registered ITU-T T.35 to AVbuffer (AVDynamicHDRPlus). - * The T.35 buffer must begin with the application mode, skipping the - * country code, terminal provider codes, and application identifier. - * @param s A pointer containing the decoded AVDynamicHDRPlus structure. - * @param data The byte array containing the raw ITU-T T.35 data. - * @param size Size of the data array in bytes. - * - * @return >= 0 on success. Otherwise, returns the appropriate AVERROR. - */ -int av_dynamic_hdr_plus_from_t35(AVDynamicHDRPlus *s, const uint8_t *data, - size_t size); - -#define AV_HDR_PLUS_MAX_PAYLOAD_SIZE 907 - -/** - * Serialize dynamic HDR10+ metadata to a user data registered ITU-T T.35 buffer, - * excluding the first 48 bytes of the header, and beginning with the application mode. - * @param s A pointer containing the decoded AVDynamicHDRPlus structure. - * @param[in,out] data A pointer to pointer to a byte buffer to be filled with the - * serialized metadata. - * If *data is NULL, a buffer be will be allocated and a pointer to - * it stored in its place. The caller assumes ownership of the buffer. - * May be NULL, in which case the function will only store the - * required buffer size in *size. - * @param[in,out] size A pointer to a size to be set to the returned buffer's size. - * If *data is not NULL, *size must contain the size of the input - * buffer. May be NULL only if *data is NULL. - * - * @return >= 0 on success. Otherwise, returns the appropriate AVERROR. - */ -int av_dynamic_hdr_plus_to_t35(const AVDynamicHDRPlus *s, uint8_t **data, size_t *size); - -#endif /* AVUTIL_HDR_DYNAMIC_METADATA_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/hdr_dynamic_vivid_metadata.h b/3rdparty/ffmpeg/include/libavutil/hdr_dynamic_vivid_metadata.h deleted file mode 100644 index d45b4a0f658df..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/hdr_dynamic_vivid_metadata.h +++ /dev/null @@ -1,292 +0,0 @@ -/* - * Copyright (c) 2021 Limin Wang - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HDR_DYNAMIC_VIVID_METADATA_H -#define AVUTIL_HDR_DYNAMIC_VIVID_METADATA_H - -#include "frame.h" -#include "rational.h" - -/** - * HDR Vivid three spline params. - */ -typedef struct AVHDRVivid3SplineParams { - /** - * The mode of three Spline. the value shall be in the range - * of 0 to 3, inclusive. - */ - int th_mode; - - /** - * three_Spline_TH_enable_MB is in the range of 0.0 to 1.0, inclusive - * and in multiples of 1.0/255. - * - */ - AVRational th_enable_mb; - - /** - * 3Spline_TH_enable of three Spline. - * The value shall be in the range of 0.0 to 1.0, inclusive. - * and in multiples of 1.0/4095. - */ - AVRational th_enable; - - /** - * 3Spline_TH_Delta1 of three Spline. - * The value shall be in the range of 0.0 to 0.25, inclusive, - * and in multiples of 0.25/1023. - */ - AVRational th_delta1; - - /** - * 3Spline_TH_Delta2 of three Spline. - * The value shall be in the range of 0.0 to 0.25, inclusive, - * and in multiples of 0.25/1023. - */ - AVRational th_delta2; - - /** - * 3Spline_enable_Strength of three Spline. - * The value shall be in the range of 0.0 to 1.0, inclusive, - * and in multiples of 1.0/255. - */ - AVRational enable_strength; -} AVHDRVivid3SplineParams; - -/** - * Color tone mapping parameters at a processing window in a dynamic metadata for - * CUVA 005.1:2021. - */ -typedef struct AVHDRVividColorToneMappingParams { - /** - * The nominal maximum display luminance of the targeted system display, - * in multiples of 1.0/4095 candelas per square metre. The value shall be in - * the range of 0.0 to 1.0, inclusive. - */ - AVRational targeted_system_display_maximum_luminance; - - /** - * This flag indicates that transfer the base parameter(for value of 1) - */ - int base_enable_flag; - - /** - * base_param_m_p in the base parameter, - * in multiples of 1.0/16383. The value shall be in - * the range of 0.0 to 1.0, inclusive. - */ - AVRational base_param_m_p; - - /** - * base_param_m_m in the base parameter, - * in multiples of 1.0/10. The value shall be in - * the range of 0.0 to 6.3, inclusive. - */ - AVRational base_param_m_m; - - /** - * base_param_m_a in the base parameter, - * in multiples of 1.0/1023. The value shall be in - * the range of 0.0 to 1.0 inclusive. - */ - AVRational base_param_m_a; - - /** - * base_param_m_b in the base parameter, - * in multiples of 1/1023. The value shall be in - * the range of 0.0 to 1.0, inclusive. - */ - AVRational base_param_m_b; - - /** - * base_param_m_n in the base parameter, - * in multiples of 1.0/10. The value shall be in - * the range of 0.0 to 6.3, inclusive. - */ - AVRational base_param_m_n; - - /** - * indicates k1_0 in the base parameter, - * base_param_k1 <= 1: k1_0 = base_param_k1 - * base_param_k1 > 1: reserved - */ - int base_param_k1; - - /** - * indicates k2_0 in the base parameter, - * base_param_k2 <= 1: k2_0 = base_param_k2 - * base_param_k2 > 1: reserved - */ - int base_param_k2; - - /** - * indicates k3_0 in the base parameter, - * base_param_k3 == 1: k3_0 = base_param_k3 - * base_param_k3 == 2: k3_0 = maximum_maxrgb - * base_param_k3 > 2: reserved - */ - int base_param_k3; - - /** - * This flag indicates that delta mode of base parameter(for value of 1) - */ - int base_param_Delta_enable_mode; - - /** - * base_param_Delta in the base parameter, - * in multiples of 1.0/127. The value shall be in - * the range of 0.0 to 1.0, inclusive. - */ - AVRational base_param_Delta; - - /** - * indicates 3Spline_enable_flag in the base parameter, - * This flag indicates that transfer three Spline of base parameter(for value of 1) - */ - int three_Spline_enable_flag; - - /** - * The number of three Spline. The value shall be in the range - * of 1 to 2, inclusive. - */ - int three_Spline_num; - - AVHDRVivid3SplineParams three_spline[2]; -} AVHDRVividColorToneMappingParams; - - -/** - * Color transform parameters at a processing window in a dynamic metadata for - * CUVA 005.1:2021. - */ -typedef struct AVHDRVividColorTransformParams { - /** - * Indicates the minimum brightness of the displayed content. - * The values should be in the range of 0.0 to 1.0, - * inclusive and in multiples of 1/4095. - */ - AVRational minimum_maxrgb; - - /** - * Indicates the average brightness of the displayed content. - * The values should be in the range of 0.0 to 1.0, - * inclusive and in multiples of 1/4095. - */ - AVRational average_maxrgb; - - /** - * Indicates the variance brightness of the displayed content. - * The values should be in the range of 0.0 to 1.0, - * inclusive and in multiples of 1/4095. - */ - AVRational variance_maxrgb; - - /** - * Indicates the maximum brightness of the displayed content. - * The values should be in the range of 0.0 to 1.0, inclusive - * and in multiples of 1/4095. - */ - AVRational maximum_maxrgb; - - /** - * This flag indicates that the metadata for the tone mapping function in - * the processing window is present (for value of 1). - */ - int tone_mapping_mode_flag; - - /** - * The number of tone mapping param. The value shall be in the range - * of 1 to 2, inclusive. - */ - int tone_mapping_param_num; - - /** - * The color tone mapping parameters. - */ - AVHDRVividColorToneMappingParams tm_params[2]; - - /** - * This flag indicates that the metadata for the color saturation mapping in - * the processing window is present (for value of 1). - */ - int color_saturation_mapping_flag; - - /** - * The number of color saturation param. The value shall be in the range - * of 0 to 7, inclusive. - */ - int color_saturation_num; - - /** - * Indicates the color correction strength parameter. - * The values should be in the range of 0.0 to 2.0, inclusive - * and in multiples of 1/128. - */ - AVRational color_saturation_gain[8]; -} AVHDRVividColorTransformParams; - -/** - * This struct represents dynamic metadata for color volume transform - - * CUVA 005.1:2021 standard - * - * To be used as payload of a AVFrameSideData or AVPacketSideData with the - * appropriate type. - * - * @note The struct should be allocated with - * av_dynamic_hdr_vivid_alloc() and its size is not a part of - * the public ABI. - */ -typedef struct AVDynamicHDRVivid { - /** - * The system start code. The value shall be set to 0x01. - */ - uint8_t system_start_code; - - /** - * The number of processing windows. The value shall be set to 0x01 - * if the system_start_code is 0x01. - */ - uint8_t num_windows; - - /** - * The color transform parameters for every processing window. - */ - AVHDRVividColorTransformParams params[3]; -} AVDynamicHDRVivid; - -/** - * Allocate an AVDynamicHDRVivid structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVDynamicHDRVivid filled with default values or NULL - * on failure. - */ -AVDynamicHDRVivid *av_dynamic_hdr_vivid_alloc(size_t *size); - -/** - * Allocate a complete AVDynamicHDRVivid and add it to the frame. - * @param frame The frame which side data is added to. - * - * @return The AVDynamicHDRVivid structure to be filled by caller or NULL - * on failure. - */ -AVDynamicHDRVivid *av_dynamic_hdr_vivid_create_side_data(AVFrame *frame); - -#endif /* AVUTIL_HDR_DYNAMIC_VIVID_METADATA_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/hmac.h b/3rdparty/ffmpeg/include/libavutil/hmac.h deleted file mode 100644 index ca4da6a689d9a..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/hmac.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2012 Martin Storsjo - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HMAC_H -#define AVUTIL_HMAC_H - -#include - -/** - * @defgroup lavu_hmac HMAC - * @ingroup lavu_crypto - * @{ - */ - -enum AVHMACType { - AV_HMAC_MD5, - AV_HMAC_SHA1, - AV_HMAC_SHA224, - AV_HMAC_SHA256, - AV_HMAC_SHA384, - AV_HMAC_SHA512, -}; - -typedef struct AVHMAC AVHMAC; - -/** - * Allocate an AVHMAC context. - * @param type The hash function used for the HMAC. - */ -AVHMAC *av_hmac_alloc(enum AVHMACType type); - -/** - * Free an AVHMAC context. - * @param ctx The context to free, may be NULL - */ -void av_hmac_free(AVHMAC *ctx); - -/** - * Initialize an AVHMAC context with an authentication key. - * @param ctx The HMAC context - * @param key The authentication key - * @param keylen The length of the key, in bytes - */ -void av_hmac_init(AVHMAC *ctx, const uint8_t *key, unsigned int keylen); - -/** - * Hash data with the HMAC. - * @param ctx The HMAC context - * @param data The data to hash - * @param len The length of the data, in bytes - */ -void av_hmac_update(AVHMAC *ctx, const uint8_t *data, unsigned int len); - -/** - * Finish hashing and output the HMAC digest. - * @param ctx The HMAC context - * @param out The output buffer to write the digest into - * @param outlen The length of the out buffer, in bytes - * @return The number of bytes written to out, or a negative error code. - */ -int av_hmac_final(AVHMAC *ctx, uint8_t *out, unsigned int outlen); - -/** - * Hash an array of data with a key. - * @param ctx The HMAC context - * @param data The data to hash - * @param len The length of the data, in bytes - * @param key The authentication key - * @param keylen The length of the key, in bytes - * @param out The output buffer to write the digest into - * @param outlen The length of the out buffer, in bytes - * @return The number of bytes written to out, or a negative error code. - */ -int av_hmac_calc(AVHMAC *ctx, const uint8_t *data, unsigned int len, - const uint8_t *key, unsigned int keylen, - uint8_t *out, unsigned int outlen); - -/** - * @} - */ - -#endif /* AVUTIL_HMAC_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/hwcontext.h b/3rdparty/ffmpeg/include/libavutil/hwcontext.h deleted file mode 100644 index 29374cf0a7e35..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/hwcontext.h +++ /dev/null @@ -1,601 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_H -#define AVUTIL_HWCONTEXT_H - -#include "buffer.h" -#include "frame.h" -#include "log.h" -#include "pixfmt.h" - -enum AVHWDeviceType { - AV_HWDEVICE_TYPE_NONE, - AV_HWDEVICE_TYPE_VDPAU, - AV_HWDEVICE_TYPE_CUDA, - AV_HWDEVICE_TYPE_VAAPI, - AV_HWDEVICE_TYPE_DXVA2, - AV_HWDEVICE_TYPE_QSV, - AV_HWDEVICE_TYPE_VIDEOTOOLBOX, - AV_HWDEVICE_TYPE_D3D11VA, - AV_HWDEVICE_TYPE_DRM, - AV_HWDEVICE_TYPE_OPENCL, - AV_HWDEVICE_TYPE_MEDIACODEC, - AV_HWDEVICE_TYPE_VULKAN, - AV_HWDEVICE_TYPE_D3D12VA, - AV_HWDEVICE_TYPE_AMF, - /* OpenHarmony Codec device */ - AV_HWDEVICE_TYPE_OHCODEC, -}; - -/** - * This struct aggregates all the (hardware/vendor-specific) "high-level" state, - * i.e. state that is not tied to a concrete processing configuration. - * E.g., in an API that supports hardware-accelerated encoding and decoding, - * this struct will (if possible) wrap the state that is common to both encoding - * and decoding and from which specific instances of encoders or decoders can be - * derived. - * - * This struct is reference-counted with the AVBuffer mechanism. The - * av_hwdevice_ctx_alloc() constructor yields a reference, whose data field - * points to the actual AVHWDeviceContext. Further objects derived from - * AVHWDeviceContext (such as AVHWFramesContext, describing a frame pool with - * specific properties) will hold an internal reference to it. After all the - * references are released, the AVHWDeviceContext itself will be freed, - * optionally invoking a user-specified callback for uninitializing the hardware - * state. - */ -typedef struct AVHWDeviceContext { - /** - * A class for logging. Set by av_hwdevice_ctx_alloc(). - */ - const AVClass *av_class; - - /** - * This field identifies the underlying API used for hardware access. - * - * This field is set when this struct is allocated and never changed - * afterwards. - */ - enum AVHWDeviceType type; - - /** - * The format-specific data, allocated and freed by libavutil along with - * this context. - * - * Should be cast by the user to the format-specific context defined in the - * corresponding header (hwcontext_*.h) and filled as described in the - * documentation before calling av_hwdevice_ctx_init(). - * - * After calling av_hwdevice_ctx_init() this struct should not be modified - * by the caller. - */ - void *hwctx; - - /** - * This field may be set by the caller before calling av_hwdevice_ctx_init(). - * - * If non-NULL, this callback will be called when the last reference to - * this context is unreferenced, immediately before it is freed. - * - * @note when other objects (e.g an AVHWFramesContext) are derived from this - * struct, this callback will be invoked after all such child objects - * are fully uninitialized and their respective destructors invoked. - */ - void (*free)(struct AVHWDeviceContext *ctx); - - /** - * Arbitrary user data, to be used e.g. by the free() callback. - */ - void *user_opaque; -} AVHWDeviceContext; - -/** - * This struct describes a set or pool of "hardware" frames (i.e. those with - * data not located in normal system memory). All the frames in the pool are - * assumed to be allocated in the same way and interchangeable. - * - * This struct is reference-counted with the AVBuffer mechanism and tied to a - * given AVHWDeviceContext instance. The av_hwframe_ctx_alloc() constructor - * yields a reference, whose data field points to the actual AVHWFramesContext - * struct. - */ -typedef struct AVHWFramesContext { - /** - * A class for logging. - */ - const AVClass *av_class; - - /** - * A reference to the parent AVHWDeviceContext. This reference is owned and - * managed by the enclosing AVHWFramesContext, but the caller may derive - * additional references from it. - */ - AVBufferRef *device_ref; - - /** - * The parent AVHWDeviceContext. This is simply a pointer to - * device_ref->data provided for convenience. - * - * Set by libavutil in av_hwframe_ctx_init(). - */ - AVHWDeviceContext *device_ctx; - - /** - * The format-specific data, allocated and freed automatically along with - * this context. - * - * The user shall ignore this field if the corresponding format-specific - * header (hwcontext_*.h) does not define a context to be used as - * AVHWFramesContext.hwctx. - * - * Otherwise, it should be cast by the user to said context and filled - * as described in the documentation before calling av_hwframe_ctx_init(). - * - * After any frames using this context are created, the contents of this - * struct should not be modified by the caller. - */ - void *hwctx; - - /** - * This field may be set by the caller before calling av_hwframe_ctx_init(). - * - * If non-NULL, this callback will be called when the last reference to - * this context is unreferenced, immediately before it is freed. - */ - void (*free)(struct AVHWFramesContext *ctx); - - /** - * Arbitrary user data, to be used e.g. by the free() callback. - */ - void *user_opaque; - - /** - * A pool from which the frames are allocated by av_hwframe_get_buffer(). - * This field may be set by the caller before calling av_hwframe_ctx_init(). - * The buffers returned by calling av_buffer_pool_get() on this pool must - * have the properties described in the documentation in the corresponding hw - * type's header (hwcontext_*.h). The pool will be freed strictly before - * this struct's free() callback is invoked. - * - * This field may be NULL, then libavutil will attempt to allocate a pool - * internally. Note that certain device types enforce pools allocated at - * fixed size (frame count), which cannot be extended dynamically. In such a - * case, initial_pool_size must be set appropriately. - */ - AVBufferPool *pool; - - /** - * Initial size of the frame pool. If a device type does not support - * dynamically resizing the pool, then this is also the maximum pool size. - * - * May be set by the caller before calling av_hwframe_ctx_init(). Must be - * set if pool is NULL and the device type does not support dynamic pools. - */ - int initial_pool_size; - - /** - * The pixel format identifying the underlying HW surface type. - * - * Must be a hwaccel format, i.e. the corresponding descriptor must have the - * AV_PIX_FMT_FLAG_HWACCEL flag set. - * - * Must be set by the user before calling av_hwframe_ctx_init(). - */ - enum AVPixelFormat format; - - /** - * The pixel format identifying the actual data layout of the hardware - * frames. - * - * Must be set by the caller before calling av_hwframe_ctx_init(). - * - * @note when the underlying API does not provide the exact data layout, but - * only the colorspace/bit depth, this field should be set to the fully - * planar version of that format (e.g. for 8-bit 420 YUV it should be - * AV_PIX_FMT_YUV420P, not AV_PIX_FMT_NV12 or anything else). - */ - enum AVPixelFormat sw_format; - - /** - * The allocated dimensions of the frames in this pool. - * - * Must be set by the user before calling av_hwframe_ctx_init(). - */ - int width, height; -} AVHWFramesContext; - -/** - * Look up an AVHWDeviceType by name. - * - * @param name String name of the device type (case-insensitive). - * @return The type from enum AVHWDeviceType, or AV_HWDEVICE_TYPE_NONE if - * not found. - */ -enum AVHWDeviceType av_hwdevice_find_type_by_name(const char *name); - -/** Get the string name of an AVHWDeviceType. - * - * @param type Type from enum AVHWDeviceType. - * @return Pointer to a static string containing the name, or NULL if the type - * is not valid. - */ -const char *av_hwdevice_get_type_name(enum AVHWDeviceType type); - -/** - * Iterate over supported device types. - * - * @param prev AV_HWDEVICE_TYPE_NONE initially, then the previous type - * returned by this function in subsequent iterations. - * @return The next usable device type from enum AVHWDeviceType, or - * AV_HWDEVICE_TYPE_NONE if there are no more. - */ -enum AVHWDeviceType av_hwdevice_iterate_types(enum AVHWDeviceType prev); - -/** - * Allocate an AVHWDeviceContext for a given hardware type. - * - * @param type the type of the hardware device to allocate. - * @return a reference to the newly created AVHWDeviceContext on success or NULL - * on failure. - */ -AVBufferRef *av_hwdevice_ctx_alloc(enum AVHWDeviceType type); - -/** - * Finalize the device context before use. This function must be called after - * the context is filled with all the required information and before it is - * used in any way. - * - * @param ref a reference to the AVHWDeviceContext - * @return 0 on success, a negative AVERROR code on failure - */ -int av_hwdevice_ctx_init(AVBufferRef *ref); - -/** - * Open a device of the specified type and create an AVHWDeviceContext for it. - * - * This is a convenience function intended to cover the simple cases. Callers - * who need to fine-tune device creation/management should open the device - * manually and then wrap it in an AVHWDeviceContext using - * av_hwdevice_ctx_alloc()/av_hwdevice_ctx_init(). - * - * The returned context is already initialized and ready for use, the caller - * should not call av_hwdevice_ctx_init() on it. The user_opaque/free fields of - * the created AVHWDeviceContext are set by this function and should not be - * touched by the caller. - * - * @param device_ctx On success, a reference to the newly-created device context - * will be written here. The reference is owned by the caller - * and must be released with av_buffer_unref() when no longer - * needed. On failure, NULL will be written to this pointer. - * @param type The type of the device to create. - * @param device A type-specific string identifying the device to open. - * @param opts A dictionary of additional (type-specific) options to use in - * opening the device. The dictionary remains owned by the caller. - * @param flags currently unused - * - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_hwdevice_ctx_create(AVBufferRef **device_ctx, enum AVHWDeviceType type, - const char *device, AVDictionary *opts, int flags); - -/** - * Create a new device of the specified type from an existing device. - * - * If the source device is a device of the target type or was originally - * derived from such a device (possibly through one or more intermediate - * devices of other types), then this will return a reference to the - * existing device of the same type as is requested. - * - * Otherwise, it will attempt to derive a new device from the given source - * device. If direct derivation to the new type is not implemented, it will - * attempt the same derivation from each ancestor of the source device in - * turn looking for an implemented derivation method. - * - * @param dst_ctx On success, a reference to the newly-created - * AVHWDeviceContext. - * @param type The type of the new device to create. - * @param src_ctx A reference to an existing AVHWDeviceContext which will be - * used to create the new device. - * @param flags Currently unused; should be set to zero. - * @return Zero on success, a negative AVERROR code on failure. - */ -int av_hwdevice_ctx_create_derived(AVBufferRef **dst_ctx, - enum AVHWDeviceType type, - AVBufferRef *src_ctx, int flags); - -/** - * Create a new device of the specified type from an existing device. - * - * This function performs the same action as av_hwdevice_ctx_create_derived, - * however, it is able to set options for the new device to be derived. - * - * @param dst_ctx On success, a reference to the newly-created - * AVHWDeviceContext. - * @param type The type of the new device to create. - * @param src_ctx A reference to an existing AVHWDeviceContext which will be - * used to create the new device. - * @param options Options for the new device to create, same format as in - * av_hwdevice_ctx_create. - * @param flags Currently unused; should be set to zero. - * @return Zero on success, a negative AVERROR code on failure. - */ -int av_hwdevice_ctx_create_derived_opts(AVBufferRef **dst_ctx, - enum AVHWDeviceType type, - AVBufferRef *src_ctx, - AVDictionary *options, int flags); - -/** - * Allocate an AVHWFramesContext tied to a given device context. - * - * @param device_ctx a reference to a AVHWDeviceContext. This function will make - * a new reference for internal use, the one passed to the - * function remains owned by the caller. - * @return a reference to the newly created AVHWFramesContext on success or NULL - * on failure. - */ -AVBufferRef *av_hwframe_ctx_alloc(AVBufferRef *device_ctx); - -/** - * Finalize the context before use. This function must be called after the - * context is filled with all the required information and before it is attached - * to any frames. - * - * @param ref a reference to the AVHWFramesContext - * @return 0 on success, a negative AVERROR code on failure - */ -int av_hwframe_ctx_init(AVBufferRef *ref); - -/** - * Allocate a new frame attached to the given AVHWFramesContext. - * - * @param hwframe_ctx a reference to an AVHWFramesContext - * @param frame an empty (freshly allocated or unreffed) frame to be filled with - * newly allocated buffers. - * @param flags currently unused, should be set to zero - * @return 0 on success, a negative AVERROR code on failure - */ -int av_hwframe_get_buffer(AVBufferRef *hwframe_ctx, AVFrame *frame, int flags); - -/** - * Copy data to or from a hw surface. At least one of dst/src must have an - * AVHWFramesContext attached. - * - * If src has an AVHWFramesContext attached, then the format of dst (if set) - * must use one of the formats returned by av_hwframe_transfer_get_formats(src, - * AV_HWFRAME_TRANSFER_DIRECTION_FROM). - * If dst has an AVHWFramesContext attached, then the format of src must use one - * of the formats returned by av_hwframe_transfer_get_formats(dst, - * AV_HWFRAME_TRANSFER_DIRECTION_TO) - * - * dst may be "clean" (i.e. with data/buf pointers unset), in which case the - * data buffers will be allocated by this function using av_frame_get_buffer(). - * If dst->format is set, then this format will be used, otherwise (when - * dst->format is AV_PIX_FMT_NONE) the first acceptable format will be chosen. - * - * The two frames must have matching allocated dimensions (i.e. equal to - * AVHWFramesContext.width/height), since not all device types support - * transferring a sub-rectangle of the whole surface. The display dimensions - * (i.e. AVFrame.width/height) may be smaller than the allocated dimensions, but - * also have to be equal for both frames. When the display dimensions are - * smaller than the allocated dimensions, the content of the padding in the - * destination frame is unspecified. - * - * @param dst the destination frame. dst is not touched on failure. - * @param src the source frame. - * @param flags currently unused, should be set to zero - * @return 0 on success, a negative AVERROR error code on failure. - */ -int av_hwframe_transfer_data(AVFrame *dst, const AVFrame *src, int flags); - -enum AVHWFrameTransferDirection { - /** - * Transfer the data from the queried hw frame. - */ - AV_HWFRAME_TRANSFER_DIRECTION_FROM, - - /** - * Transfer the data to the queried hw frame. - */ - AV_HWFRAME_TRANSFER_DIRECTION_TO, -}; - -/** - * Get a list of possible source or target formats usable in - * av_hwframe_transfer_data(). - * - * @param hwframe_ctx the frame context to obtain the information for - * @param dir the direction of the transfer - * @param formats the pointer to the output format list will be written here. - * The list is terminated with AV_PIX_FMT_NONE and must be freed - * by the caller when no longer needed using av_free(). - * If this function returns successfully, the format list will - * have at least one item (not counting the terminator). - * On failure, the contents of this pointer are unspecified. - * @param flags currently unused, should be set to zero - * @return 0 on success, a negative AVERROR code on failure. - */ -int av_hwframe_transfer_get_formats(AVBufferRef *hwframe_ctx, - enum AVHWFrameTransferDirection dir, - enum AVPixelFormat **formats, int flags); - - -/** - * This struct describes the constraints on hardware frames attached to - * a given device with a hardware-specific configuration. This is returned - * by av_hwdevice_get_hwframe_constraints() and must be freed by - * av_hwframe_constraints_free() after use. - */ -typedef struct AVHWFramesConstraints { - /** - * A list of possible values for format in the hw_frames_ctx, - * terminated by AV_PIX_FMT_NONE. This member will always be filled. - */ - enum AVPixelFormat *valid_hw_formats; - - /** - * A list of possible values for sw_format in the hw_frames_ctx, - * terminated by AV_PIX_FMT_NONE. Can be NULL if this information is - * not known. - */ - enum AVPixelFormat *valid_sw_formats; - - /** - * The minimum size of frames in this hw_frames_ctx. - * (Zero if not known.) - */ - int min_width; - int min_height; - - /** - * The maximum size of frames in this hw_frames_ctx. - * (INT_MAX if not known / no limit.) - */ - int max_width; - int max_height; -} AVHWFramesConstraints; - -/** - * Allocate a HW-specific configuration structure for a given HW device. - * After use, the user must free all members as required by the specific - * hardware structure being used, then free the structure itself with - * av_free(). - * - * @param device_ctx a reference to the associated AVHWDeviceContext. - * @return The newly created HW-specific configuration structure on - * success or NULL on failure. - */ -void *av_hwdevice_hwconfig_alloc(AVBufferRef *device_ctx); - -/** - * Get the constraints on HW frames given a device and the HW-specific - * configuration to be used with that device. If no HW-specific - * configuration is provided, returns the maximum possible capabilities - * of the device. - * - * @param ref a reference to the associated AVHWDeviceContext. - * @param hwconfig a filled HW-specific configuration structure, or NULL - * to return the maximum possible capabilities of the device. - * @return AVHWFramesConstraints structure describing the constraints - * on the device, or NULL if not available. - */ -AVHWFramesConstraints *av_hwdevice_get_hwframe_constraints(AVBufferRef *ref, - const void *hwconfig); - -/** - * Free an AVHWFrameConstraints structure. - * - * @param constraints The (filled or unfilled) AVHWFrameConstraints structure. - */ -void av_hwframe_constraints_free(AVHWFramesConstraints **constraints); - - -/** - * Flags to apply to frame mappings. - */ -enum { - /** - * The mapping must be readable. - */ - AV_HWFRAME_MAP_READ = 1 << 0, - /** - * The mapping must be writeable. - */ - AV_HWFRAME_MAP_WRITE = 1 << 1, - /** - * The mapped frame will be overwritten completely in subsequent - * operations, so the current frame data need not be loaded. Any values - * which are not overwritten are unspecified. - */ - AV_HWFRAME_MAP_OVERWRITE = 1 << 2, - /** - * The mapping must be direct. That is, there must not be any copying in - * the map or unmap steps. Note that performance of direct mappings may - * be much lower than normal memory. - */ - AV_HWFRAME_MAP_DIRECT = 1 << 3, -}; - -/** - * Map a hardware frame. - * - * This has a number of different possible effects, depending on the format - * and origin of the src and dst frames. On input, src should be a usable - * frame with valid buffers and dst should be blank (typically as just created - * by av_frame_alloc()). src should have an associated hwframe context, and - * dst may optionally have a format and associated hwframe context. - * - * If src was created by mapping a frame from the hwframe context of dst, - * then this function undoes the mapping - dst is replaced by a reference to - * the frame that src was originally mapped from. - * - * If both src and dst have an associated hwframe context, then this function - * attempts to map the src frame from its hardware context to that of dst and - * then fill dst with appropriate data to be usable there. This will only be - * possible if the hwframe contexts and associated devices are compatible - - * given compatible devices, av_hwframe_ctx_create_derived() can be used to - * create a hwframe context for dst in which mapping should be possible. - * - * If src has a hwframe context but dst does not, then the src frame is - * mapped to normal memory and should thereafter be usable as a normal frame. - * If the format is set on dst, then the mapping will attempt to create dst - * with that format and fail if it is not possible. If format is unset (is - * AV_PIX_FMT_NONE) then dst will be mapped with whatever the most appropriate - * format to use is (probably the sw_format of the src hwframe context). - * - * A return value of AVERROR(ENOSYS) indicates that the mapping is not - * possible with the given arguments and hwframe setup, while other return - * values indicate that it failed somehow. - * - * On failure, the destination frame will be left blank, except for the - * hw_frames_ctx/format fields they may have been set by the caller - those will - * be preserved as they were. - * - * @param dst Destination frame, to contain the mapping. - * @param src Source frame, to be mapped. - * @param flags Some combination of AV_HWFRAME_MAP_* flags. - * @return Zero on success, negative AVERROR code on failure. - */ -int av_hwframe_map(AVFrame *dst, const AVFrame *src, int flags); - - -/** - * Create and initialise an AVHWFramesContext as a mapping of another existing - * AVHWFramesContext on a different device. - * - * av_hwframe_ctx_init() should not be called after this. - * - * @param derived_frame_ctx On success, a reference to the newly created - * AVHWFramesContext. - * @param format The AVPixelFormat for the derived context. - * @param derived_device_ctx A reference to the device to create the new - * AVHWFramesContext on. - * @param source_frame_ctx A reference to an existing AVHWFramesContext - * which will be mapped to the derived context. - * @param flags Some combination of AV_HWFRAME_MAP_* flags, defining the - * mapping parameters to apply to frames which are allocated - * in the derived device. - * @return Zero on success, negative AVERROR code on failure. - */ -int av_hwframe_ctx_create_derived(AVBufferRef **derived_frame_ctx, - enum AVPixelFormat format, - AVBufferRef *derived_device_ctx, - AVBufferRef *source_frame_ctx, - int flags); - -#endif /* AVUTIL_HWCONTEXT_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/hwcontext_cuda.h b/3rdparty/ffmpeg/include/libavutil/hwcontext_cuda.h deleted file mode 100644 index cbad434fead0d..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/hwcontext_cuda.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#ifndef AVUTIL_HWCONTEXT_CUDA_H -#define AVUTIL_HWCONTEXT_CUDA_H - -#ifndef CUDA_VERSION -#include -#endif - -#include "pixfmt.h" - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_CUDA. - * - * This API supports dynamic frame pools. AVHWFramesContext.pool must return - * AVBufferRefs whose data pointer is a CUdeviceptr. - */ - -typedef struct AVCUDADeviceContextInternal AVCUDADeviceContextInternal; - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVCUDADeviceContext { - CUcontext cuda_ctx; - CUstream stream; - AVCUDADeviceContextInternal *internal; -} AVCUDADeviceContext; - -/** - * AVHWFramesContext.hwctx is currently not used - */ - -/** - * @defgroup hwcontext_cuda Device context creation flags - * - * Flags for av_hwdevice_ctx_create. - * - * @{ - */ - -/** - * Use primary device context instead of creating a new one. - */ -#define AV_CUDA_USE_PRIMARY_CONTEXT (1 << 0) - -/** - * Use current device context instead of creating a new one. - */ -#define AV_CUDA_USE_CURRENT_CONTEXT (1 << 1) - -/** - * @} - */ - -#endif /* AVUTIL_HWCONTEXT_CUDA_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/hwcontext_d3d11va.h b/3rdparty/ffmpeg/include/libavutil/hwcontext_d3d11va.h deleted file mode 100644 index 77d2d72f1b911..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/hwcontext_d3d11va.h +++ /dev/null @@ -1,178 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_D3D11VA_H -#define AVUTIL_HWCONTEXT_D3D11VA_H - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_D3D11VA. - * - * The default pool implementation will be fixed-size if initial_pool_size is - * set (and allocate elements from an array texture). Otherwise it will allocate - * individual textures. Be aware that decoding requires a single array texture. - * - * Using sw_format==AV_PIX_FMT_YUV420P has special semantics, and maps to - * DXGI_FORMAT_420_OPAQUE. av_hwframe_transfer_data() is not supported for - * this format. Refer to MSDN for details. - * - * av_hwdevice_ctx_create() for this device type supports a key named "debug" - * for the AVDictionary entry. If this is set to any value, the device creation - * code will try to load various supported D3D debugging layers. - */ - -#include -#include - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVD3D11VADeviceContext { - /** - * Device used for texture creation and access. This can also be used to - * set the libavcodec decoding device. - * - * Must be set by the user. This is the only mandatory field - the other - * device context fields are set from this and are available for convenience. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11Device *device; - - /** - * If unset, this will be set from the device field on init. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11DeviceContext *device_context; - - /** - * If unset, this will be set from the device field on init. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11VideoDevice *video_device; - - /** - * If unset, this will be set from the device_context field on init. - * - * Deallocating the AVHWDeviceContext will always release this interface, - * and it does not matter whether it was user-allocated. - */ - ID3D11VideoContext *video_context; - - /** - * Callbacks for locking. They protect accesses to device_context and - * video_context calls. They also protect access to the internal staging - * texture (for av_hwframe_transfer_data() calls). They do NOT protect - * access to hwcontext or decoder state in general. - * - * If unset on init, the hwcontext implementation will set them to use an - * internal mutex. - * - * The underlying lock must be recursive. lock_ctx is for free use by the - * locking implementation. - */ - void (*lock)(void *lock_ctx); - void (*unlock)(void *lock_ctx); - void *lock_ctx; -} AVD3D11VADeviceContext; - -/** - * D3D11 frame descriptor for pool allocation. - * - * In user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer pointing at an object of this type describing the - * planes of the frame. - * - * This has no use outside of custom allocation, and AVFrame AVBufferRef do not - * necessarily point to an instance of this struct. - */ -typedef struct AVD3D11FrameDescriptor { - /** - * The texture in which the frame is located. The reference count is - * managed by the AVBufferRef, and destroying the reference will release - * the interface. - * - * Normally stored in AVFrame.data[0]. - */ - ID3D11Texture2D *texture; - - /** - * The index into the array texture element representing the frame, or 0 - * if the texture is not an array texture. - * - * Normally stored in AVFrame.data[1] (cast from intptr_t). - */ - intptr_t index; -} AVD3D11FrameDescriptor; - -/** - * This struct is allocated as AVHWFramesContext.hwctx - */ -typedef struct AVD3D11VAFramesContext { - /** - * The canonical texture used for pool allocation. If this is set to NULL - * on init, the hwframes implementation will allocate and set an array - * texture if initial_pool_size > 0. - * - * The only situation when the API user should set this is: - * - the user wants to do manual pool allocation (setting - * AVHWFramesContext.pool), instead of letting AVHWFramesContext - * allocate the pool - * - of an array texture - * - and wants it to use it for decoding - * - this has to be done before calling av_hwframe_ctx_init() - * - * Deallocating the AVHWFramesContext will always release this interface, - * and it does not matter whether it was user-allocated. - * - * This is in particular used by the libavcodec D3D11VA hwaccel, which - * requires a single array texture. It will create ID3D11VideoDecoderOutputView - * objects for each array texture element on decoder initialization. - */ - ID3D11Texture2D *texture; - - /** - * D3D11_TEXTURE2D_DESC.BindFlags used for texture creation. The user must - * at least set D3D11_BIND_DECODER if the frames context is to be used for - * video decoding. - * This field is ignored/invalid if a user-allocated texture is provided. - */ - UINT BindFlags; - - /** - * D3D11_TEXTURE2D_DESC.MiscFlags used for texture creation. - * This field is ignored/invalid if a user-allocated texture is provided. - */ - UINT MiscFlags; - - /** - * In case if texture structure member above is not NULL contains the same texture - * pointer for all elements and different indexes into the array texture. - * In case if texture structure member above is NULL, all elements contains - * pointers to separate non-array textures and 0 indexes. - * This field is ignored/invalid if a user-allocated texture is provided. - */ - AVD3D11FrameDescriptor *texture_infos; -} AVD3D11VAFramesContext; - -#endif /* AVUTIL_HWCONTEXT_D3D11VA_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/hwcontext_drm.h b/3rdparty/ffmpeg/include/libavutil/hwcontext_drm.h deleted file mode 100644 index 42709f215ef9a..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/hwcontext_drm.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_DRM_H -#define AVUTIL_HWCONTEXT_DRM_H - -#include -#include - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_DRM. - * - * Internal frame allocation is not currently supported - all frames - * must be allocated by the user. Thus AVHWFramesContext is always - * NULL, though this may change if support for frame allocation is - * added in future. - */ - -enum { - /** - * The maximum number of layers/planes in a DRM frame. - */ - AV_DRM_MAX_PLANES = 4 -}; - -/** - * DRM object descriptor. - * - * Describes a single DRM object, addressing it as a PRIME file - * descriptor. - */ -typedef struct AVDRMObjectDescriptor { - /** - * DRM PRIME fd for the object. - */ - int fd; - /** - * Total size of the object. - * - * (This includes any parts not which do not contain image data.) - */ - size_t size; - /** - * Format modifier applied to the object (DRM_FORMAT_MOD_*). - * - * If the format modifier is unknown then this should be set to - * DRM_FORMAT_MOD_INVALID. - */ - uint64_t format_modifier; -} AVDRMObjectDescriptor; - -/** - * DRM plane descriptor. - * - * Describes a single plane of a layer, which is contained within - * a single object. - */ -typedef struct AVDRMPlaneDescriptor { - /** - * Index of the object containing this plane in the objects - * array of the enclosing frame descriptor. - */ - int object_index; - /** - * Offset within that object of this plane. - */ - ptrdiff_t offset; - /** - * Pitch (linesize) of this plane. - */ - ptrdiff_t pitch; -} AVDRMPlaneDescriptor; - -/** - * DRM layer descriptor. - * - * Describes a single layer within a frame. This has the structure - * defined by its format, and will contain one or more planes. - */ -typedef struct AVDRMLayerDescriptor { - /** - * Format of the layer (DRM_FORMAT_*). - */ - uint32_t format; - /** - * Number of planes in the layer. - * - * This must match the number of planes required by format. - */ - int nb_planes; - /** - * Array of planes in this layer. - */ - AVDRMPlaneDescriptor planes[AV_DRM_MAX_PLANES]; -} AVDRMLayerDescriptor; - -/** - * DRM frame descriptor. - * - * This is used as the data pointer for AV_PIX_FMT_DRM_PRIME frames. - * It is also used by user-allocated frame pools - allocating in - * AVHWFramesContext.pool must return AVBufferRefs which contain - * an object of this type. - * - * The fields of this structure should be set such it can be - * imported directly by EGL using the EGL_EXT_image_dma_buf_import - * and EGL_EXT_image_dma_buf_import_modifiers extensions. - * (Note that the exact layout of a particular format may vary between - * platforms - we only specify that the same platform should be able - * to import it.) - * - * The total number of planes must not exceed AV_DRM_MAX_PLANES, and - * the order of the planes by increasing layer index followed by - * increasing plane index must be the same as the order which would - * be used for the data pointers in the equivalent software format. - */ -typedef struct AVDRMFrameDescriptor { - /** - * Number of DRM objects making up this frame. - */ - int nb_objects; - /** - * Array of objects making up the frame. - */ - AVDRMObjectDescriptor objects[AV_DRM_MAX_PLANES]; - /** - * Number of layers in the frame. - */ - int nb_layers; - /** - * Array of layers in the frame. - */ - AVDRMLayerDescriptor layers[AV_DRM_MAX_PLANES]; -} AVDRMFrameDescriptor; - -/** - * DRM device. - * - * Allocated as AVHWDeviceContext.hwctx. - */ -typedef struct AVDRMDeviceContext { - /** - * File descriptor of DRM device. - * - * This is used as the device to create frames on, and may also be - * used in some derivation and mapping operations. - * - * If no device is required, set to -1. - */ - int fd; -} AVDRMDeviceContext; - -#endif /* AVUTIL_HWCONTEXT_DRM_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/hwcontext_dxva2.h b/3rdparty/ffmpeg/include/libavutil/hwcontext_dxva2.h deleted file mode 100644 index e1b79bc0dee8c..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/hwcontext_dxva2.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#ifndef AVUTIL_HWCONTEXT_DXVA2_H -#define AVUTIL_HWCONTEXT_DXVA2_H - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_DXVA2. - * - * Only fixed-size pools are supported. - * - * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer set to a pointer to IDirect3DSurface9. - */ - -#include -#include - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVDXVA2DeviceContext { - IDirect3DDeviceManager9 *devmgr; -} AVDXVA2DeviceContext; - -/** - * This struct is allocated as AVHWFramesContext.hwctx - */ -typedef struct AVDXVA2FramesContext { - /** - * The surface type (e.g. DXVA2_VideoProcessorRenderTarget or - * DXVA2_VideoDecoderRenderTarget). Must be set by the caller. - */ - DWORD surface_type; - - /** - * The surface pool. When an external pool is not provided by the caller, - * this will be managed (allocated and filled on init, freed on uninit) by - * libavutil. - */ - IDirect3DSurface9 **surfaces; - int nb_surfaces; - - /** - * Certain drivers require the decoder to be destroyed before the surfaces. - * To allow internally managed pools to work properly in such cases, this - * field is provided. - * - * If it is non-NULL, libavutil will call IDirectXVideoDecoder_Release() on - * it just before the internal surface pool is freed. - * - * This is for convenience only. Some code uses other methods to manage the - * decoder reference. - */ - IDirectXVideoDecoder *decoder_to_release; -} AVDXVA2FramesContext; - -#endif /* AVUTIL_HWCONTEXT_DXVA2_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/hwcontext_mediacodec.h b/3rdparty/ffmpeg/include/libavutil/hwcontext_mediacodec.h deleted file mode 100644 index fc0263cabce8f..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/hwcontext_mediacodec.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_MEDIACODEC_H -#define AVUTIL_HWCONTEXT_MEDIACODEC_H - -/** - * MediaCodec details. - * - * Allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVMediaCodecDeviceContext { - /** - * android/view/Surface handle, to be filled by the user. - * - * This is the default surface used by decoders on this device. - */ - void *surface; - - /** - * Pointer to ANativeWindow. - * - * It both surface and native_window is NULL, try to create it - * automatically if create_window is true and OS support - * createPersistentInputSurface. - * - * It can be used as output surface for decoder and input surface for - * encoder. - */ - void *native_window; - - /** - * Enable createPersistentInputSurface automatically. - * - * Disabled by default. - * - * It can be enabled by setting this flag directly, or by setting - * AVDictionary of av_hwdevice_ctx_create(), with "create_window" as key. - * The second method is useful for ffmpeg cmdline, e.g., we can enable it - * via: - * -init_hw_device mediacodec=mediacodec,create_window=1 - */ - int create_window; -} AVMediaCodecDeviceContext; - -#endif /* AVUTIL_HWCONTEXT_MEDIACODEC_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/hwcontext_opencl.h b/3rdparty/ffmpeg/include/libavutil/hwcontext_opencl.h deleted file mode 100644 index 22702300ad241..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/hwcontext_opencl.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_OPENCL_H -#define AVUTIL_HWCONTEXT_OPENCL_H - -#ifdef __APPLE__ -#include -#else -#include -#endif - -#include "frame.h" - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_OPENCL. - * - * Pools allocated internally are always dynamic, and are primarily intended - * to be used in OpenCL-only cases. If interoperation is required, it is - * typically required to allocate frames in the other API and then map the - * frames context to OpenCL with av_hwframe_ctx_create_derived(). - */ - -/** - * OpenCL frame descriptor for pool allocation. - * - * In user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer pointing at an object of this type describing the - * planes of the frame. - */ -typedef struct AVOpenCLFrameDescriptor { - /** - * Number of planes in the frame. - */ - int nb_planes; - /** - * OpenCL image2d objects for each plane of the frame. - */ - cl_mem planes[AV_NUM_DATA_POINTERS]; -} AVOpenCLFrameDescriptor; - -/** - * OpenCL device details. - * - * Allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVOpenCLDeviceContext { - /** - * The primary device ID of the device. If multiple OpenCL devices - * are associated with the context then this is the one which will - * be used for all operations internal to FFmpeg. - */ - cl_device_id device_id; - /** - * The OpenCL context which will contain all operations and frames on - * this device. - */ - cl_context context; - /** - * The default command queue for this device, which will be used by all - * frames contexts which do not have their own command queue. If not - * initialised by the user, a default queue will be created on the - * primary device. - */ - cl_command_queue command_queue; -} AVOpenCLDeviceContext; - -/** - * OpenCL-specific data associated with a frame pool. - * - * Allocated as AVHWFramesContext.hwctx. - */ -typedef struct AVOpenCLFramesContext { - /** - * The command queue used for internal asynchronous operations on this - * device (av_hwframe_transfer_data(), av_hwframe_map()). - * - * If this is not set, the command queue from the associated device is - * used instead. - */ - cl_command_queue command_queue; -} AVOpenCLFramesContext; - -#endif /* AVUTIL_HWCONTEXT_OPENCL_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/hwcontext_qsv.h b/3rdparty/ffmpeg/include/libavutil/hwcontext_qsv.h deleted file mode 100644 index 3c16a8ab98593..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/hwcontext_qsv.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_QSV_H -#define AVUTIL_HWCONTEXT_QSV_H - -#include - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_QSV. - * - * AVHWFramesContext.pool must contain AVBufferRefs whose data pointer points - * to a mfxFrameSurface1 struct. - */ - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVQSVDeviceContext { - mfxSession session; - /** - * The mfxLoader handle used for mfxSession creation - * - * This field is only available for oneVPL user. For non-oneVPL user, this - * field must be set to NULL. - * - * Filled by the user before calling av_hwdevice_ctx_init() and should be - * cast to mfxLoader handle. Deallocating the AVHWDeviceContext will always - * release this interface. - */ - void *loader; -} AVQSVDeviceContext; - -/** - * This struct is allocated as AVHWFramesContext.hwctx - */ -typedef struct AVQSVFramesContext { - /** - * A pointer to a mfxFrameSurface1 struct - * - * It is available when nb_surfaces is non-zero. - */ - mfxFrameSurface1 *surfaces; - - /** - * Number of frames in the pool - * - * It is 0 for dynamic frame pools or AVHWFramesContext.initial_pool_size - * for fixed frame pools. - * - * Note only oneVPL GPU runtime 2.9+ can support dynamic frame pools - * on d3d11va or vaapi - */ - int nb_surfaces; - - /** - * A combination of MFX_MEMTYPE_* describing the frame pool. - */ - int frame_type; - - /** - * A pointer to a mfxFrameInfo struct - * - * It is available when nb_surfaces is 0, all buffers allocated from the - * pool have the same mfxFrameInfo. - */ - mfxFrameInfo *info; -} AVQSVFramesContext; - -#endif /* AVUTIL_HWCONTEXT_QSV_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/hwcontext_vaapi.h b/3rdparty/ffmpeg/include/libavutil/hwcontext_vaapi.h deleted file mode 100644 index 0b2e071cb3353..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/hwcontext_vaapi.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VAAPI_H -#define AVUTIL_HWCONTEXT_VAAPI_H - -#include - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_VAAPI. - * - * Dynamic frame pools are supported, but note that any pool used as a render - * target is required to be of fixed size in order to be be usable as an - * argument to vaCreateContext(). - * - * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer set to a VASurfaceID. - */ - -enum { - /** - * The quirks field has been set by the user and should not be detected - * automatically by av_hwdevice_ctx_init(). - */ - AV_VAAPI_DRIVER_QUIRK_USER_SET = (1 << 0), - /** - * The driver does not destroy parameter buffers when they are used by - * vaRenderPicture(). Additional code will be required to destroy them - * separately afterwards. - */ - AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS = (1 << 1), - - /** - * The driver does not support the VASurfaceAttribMemoryType attribute, - * so the surface allocation code will not try to use it. - */ - AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE = (1 << 2), - - /** - * The driver does not support surface attributes at all. - * The surface allocation code will never pass them to surface allocation, - * and the results of the vaQuerySurfaceAttributes() call will be faked. - */ - AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES = (1 << 3), -}; - -/** - * VAAPI connection details. - * - * Allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVVAAPIDeviceContext { - /** - * The VADisplay handle, to be filled by the user. - */ - VADisplay display; - /** - * Driver quirks to apply - this is filled by av_hwdevice_ctx_init(), - * with reference to a table of known drivers, unless the - * AV_VAAPI_DRIVER_QUIRK_USER_SET bit is already present. The user - * may need to refer to this field when performing any later - * operations using VAAPI with the same VADisplay. - */ - unsigned int driver_quirks; -} AVVAAPIDeviceContext; - -/** - * VAAPI-specific data associated with a frame pool. - * - * Allocated as AVHWFramesContext.hwctx. - */ -typedef struct AVVAAPIFramesContext { - /** - * Set by the user to apply surface attributes to all surfaces in - * the frame pool. If null, default settings are used. - */ - VASurfaceAttrib *attributes; - int nb_attributes; - /** - * The surfaces IDs of all surfaces in the pool after creation. - * Only valid if AVHWFramesContext.initial_pool_size was positive. - * These are intended to be used as the render_targets arguments to - * vaCreateContext(). - */ - VASurfaceID *surface_ids; - int nb_surfaces; -} AVVAAPIFramesContext; - -/** - * VAAPI hardware pipeline configuration details. - * - * Allocated with av_hwdevice_hwconfig_alloc(). - */ -typedef struct AVVAAPIHWConfig { - /** - * ID of a VAAPI pipeline configuration. - */ - VAConfigID config_id; -} AVVAAPIHWConfig; - -#endif /* AVUTIL_HWCONTEXT_VAAPI_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/hwcontext_vdpau.h b/3rdparty/ffmpeg/include/libavutil/hwcontext_vdpau.h deleted file mode 100644 index 1b7ea1e443bdc..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/hwcontext_vdpau.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VDPAU_H -#define AVUTIL_HWCONTEXT_VDPAU_H - -#include - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_VDPAU. - * - * This API supports dynamic frame pools. AVHWFramesContext.pool must return - * AVBufferRefs whose data pointer is a VdpVideoSurface. - */ - -/** - * This struct is allocated as AVHWDeviceContext.hwctx - */ -typedef struct AVVDPAUDeviceContext { - VdpDevice device; - VdpGetProcAddress *get_proc_address; -} AVVDPAUDeviceContext; - -/** - * AVHWFramesContext.hwctx is currently not used - */ - -#endif /* AVUTIL_HWCONTEXT_VDPAU_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/hwcontext_videotoolbox.h b/3rdparty/ffmpeg/include/libavutil/hwcontext_videotoolbox.h deleted file mode 100644 index d35cfbb6c118b..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/hwcontext_videotoolbox.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H -#define AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H - -#include - -#include - -#include "frame.h" -#include "pixfmt.h" - -/** - * @file - * An API-specific header for AV_HWDEVICE_TYPE_VIDEOTOOLBOX. - * - * This API supports frame allocation using a native CVPixelBufferPool - * instead of an AVBufferPool. - * - * If the API user sets a custom pool, AVHWFramesContext.pool must return - * AVBufferRefs whose data pointer is a CVImageBufferRef or CVPixelBufferRef. - * Note that the underlying CVPixelBuffer could be retained by OS frameworks - * depending on application usage, so it is preferable to let CoreVideo manage - * the pool using the default implementation. - * - * Currently AVHWDeviceContext.hwctx are always NULL. - */ - -typedef struct AVVTFramesContext { - enum AVColorRange color_range; -} AVVTFramesContext; - -/** - * Convert a VideoToolbox (actually CoreVideo) format to AVPixelFormat. - * Returns AV_PIX_FMT_NONE if no known equivalent was found. - */ -enum AVPixelFormat av_map_videotoolbox_format_to_pixfmt(uint32_t cv_fmt); - -/** - * Convert an AVPixelFormat to a VideoToolbox (actually CoreVideo) format. - * Returns 0 if no known equivalent was found. - */ -uint32_t av_map_videotoolbox_format_from_pixfmt(enum AVPixelFormat pix_fmt); - -/** - * Same as av_map_videotoolbox_format_from_pixfmt function, but can map and - * return full range pixel formats via a flag. - */ -uint32_t av_map_videotoolbox_format_from_pixfmt2(enum AVPixelFormat pix_fmt, bool full_range); - -/** - * Convert an AVChromaLocation to a VideoToolbox/CoreVideo chroma location string. - * Returns 0 if no known equivalent was found. - */ -CFStringRef av_map_videotoolbox_chroma_loc_from_av(enum AVChromaLocation loc); - -/** - * Convert an AVColorSpace to a VideoToolbox/CoreVideo color matrix string. - * Returns 0 if no known equivalent was found. - */ -CFStringRef av_map_videotoolbox_color_matrix_from_av(enum AVColorSpace space); - -/** - * Convert an AVColorPrimaries to a VideoToolbox/CoreVideo color primaries string. - * Returns 0 if no known equivalent was found. - */ -CFStringRef av_map_videotoolbox_color_primaries_from_av(enum AVColorPrimaries pri); - -/** - * Convert an AVColorTransferCharacteristic to a VideoToolbox/CoreVideo color transfer - * function string. - * Returns 0 if no known equivalent was found. - */ -CFStringRef av_map_videotoolbox_color_trc_from_av(enum AVColorTransferCharacteristic trc); - -/** - * Set CVPixelBufferRef's metadata based on an AVFrame. - * - * Sets/unsets the CVPixelBuffer attachments to match as closely as possible the - * AVFrame metadata. To prevent inconsistent attachments, the attachments for properties - * that could not be matched or are unspecified in the given AVFrame are unset. So if - * any attachments already covered by AVFrame metadata need to be set to a specific - * value, this should happen after calling this function. - * - * Returns < 0 in case of an error. - */ -int av_vt_pixbuf_set_attachments(void *log_ctx, - CVPixelBufferRef pixbuf, const struct AVFrame *src); - -#endif /* AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/hwcontext_vulkan.h b/3rdparty/ffmpeg/include/libavutil/hwcontext_vulkan.h deleted file mode 100644 index 15cf5156689c3..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/hwcontext_vulkan.h +++ /dev/null @@ -1,377 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_HWCONTEXT_VULKAN_H -#define AVUTIL_HWCONTEXT_VULKAN_H - -#if defined(_WIN32) && !defined(VK_USE_PLATFORM_WIN32_KHR) -#define VK_USE_PLATFORM_WIN32_KHR -#endif -#include - -#include "pixfmt.h" -#include "frame.h" -#include "hwcontext.h" - -typedef struct AVVkFrame AVVkFrame; - -typedef struct AVVulkanDeviceQueueFamily { - /* Queue family index */ - int idx; - /* Number of queues in the queue family in use */ - int num; - /* Queue family capabilities. Must be non-zero. - * Flags may be removed to indicate the queue family may not be used - * for a given purpose. */ - VkQueueFlagBits flags; - /* Vulkan implementations are allowed to list multiple video queues - * which differ in what they can encode or decode. */ - VkVideoCodecOperationFlagBitsKHR video_caps; -} AVVulkanDeviceQueueFamily; - -/** - * @file - * API-specific header for AV_HWDEVICE_TYPE_VULKAN. - * - * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs - * with the data pointer set to an AVVkFrame. - */ - -/** - * Main Vulkan context, allocated as AVHWDeviceContext.hwctx. - * All of these can be set before init to change what the context uses - */ -typedef struct AVVulkanDeviceContext { - /** - * Custom memory allocator, else NULL - */ - const VkAllocationCallbacks *alloc; - - /** - * Pointer to a vkGetInstanceProcAddr loading function. - * If unset, will dynamically load and use libvulkan. - */ - PFN_vkGetInstanceProcAddr get_proc_addr; - - /** - * Vulkan instance. Must be at least version 1.3. - */ - VkInstance inst; - - /** - * Physical device - */ - VkPhysicalDevice phys_dev; - - /** - * Active device - */ - VkDevice act_dev; - - /** - * This structure should be set to the set of features that present and enabled - * during device creation. When a device is created by FFmpeg, it will default to - * enabling all that are present of the shaderImageGatherExtended, - * fragmentStoresAndAtomics, shaderInt64 and vertexPipelineStoresAndAtomics features. - */ - VkPhysicalDeviceFeatures2 device_features; - - /** - * Enabled instance extensions. - * If supplying your own device context, set this to an array of strings, with - * each entry containing the specified Vulkan extension string to enable. - * Duplicates are possible and accepted. - * If no extensions are enabled, set these fields to NULL, and 0 respectively. - */ - const char * const *enabled_inst_extensions; - int nb_enabled_inst_extensions; - - /** - * Enabled device extensions. By default, VK_KHR_external_memory_fd, - * VK_EXT_external_memory_dma_buf, VK_EXT_image_drm_format_modifier, - * VK_KHR_external_semaphore_fd and VK_EXT_external_memory_host are enabled if found. - * If supplying your own device context, these fields takes the same format as - * the above fields, with the same conditions that duplicates are possible - * and accepted, and that NULL and 0 respectively means no extensions are enabled. - */ - const char * const *enabled_dev_extensions; - int nb_enabled_dev_extensions; - -#if FF_API_VULKAN_FIXED_QUEUES - /** - * Queue family index for graphics operations, and the number of queues - * enabled for it. If unavailable, will be set to -1. Not required. - * av_hwdevice_create() will attempt to find a dedicated queue for each - * queue family, or pick the one with the least unrelated flags set. - * Queue indices here may overlap if a queue has to share capabilities. - */ - attribute_deprecated - int queue_family_index; - attribute_deprecated - int nb_graphics_queues; - - /** - * Queue family index for transfer operations and the number of queues - * enabled. Required. - */ - attribute_deprecated - int queue_family_tx_index; - attribute_deprecated - int nb_tx_queues; - - /** - * Queue family index for compute operations and the number of queues - * enabled. Required. - */ - attribute_deprecated - int queue_family_comp_index; - attribute_deprecated - int nb_comp_queues; - - /** - * Queue family index for video encode ops, and the amount of queues enabled. - * If the device doesn't support such, queue_family_encode_index will be -1. - * Not required. - */ - attribute_deprecated - int queue_family_encode_index; - attribute_deprecated - int nb_encode_queues; - - /** - * Queue family index for video decode ops, and the amount of queues enabled. - * If the device doesn't support such, queue_family_decode_index will be -1. - * Not required. - */ - attribute_deprecated - int queue_family_decode_index; - attribute_deprecated - int nb_decode_queues; -#endif - - /** - * Locks a queue, preventing other threads from submitting any command - * buffers to this queue. - * If set to NULL, will be set to lavu-internal functions that utilize a - * mutex. - */ - void (*lock_queue)(struct AVHWDeviceContext *ctx, uint32_t queue_family, uint32_t index); - - /** - * Similar to lock_queue(), unlocks a queue. Must only be called after locking. - */ - void (*unlock_queue)(struct AVHWDeviceContext *ctx, uint32_t queue_family, uint32_t index); - - /** - * Queue families used. Must be preferentially ordered. List may contain - * duplicates. - * - * For compatibility reasons, all the enabled queue families listed above - * (queue_family_(tx/comp/encode/decode)_index) must also be included in - * this list until they're removed after deprecation. - */ - AVVulkanDeviceQueueFamily qf[64]; - int nb_qf; -} AVVulkanDeviceContext; - -/** - * Defines the behaviour of frame allocation. - */ -typedef enum AVVkFrameFlags { - /* Unless this flag is set, autodetected flags will be OR'd based on the - * device and tiling during av_hwframe_ctx_init(). */ - AV_VK_FRAME_FLAG_NONE = (1ULL << 0), - - /* Disables multiplane images. - * This is required to export/import images from CUDA. */ - AV_VK_FRAME_FLAG_DISABLE_MULTIPLANE = (1ULL << 2), -} AVVkFrameFlags; - -/** - * Allocated as AVHWFramesContext.hwctx, used to set pool-specific options - */ -typedef struct AVVulkanFramesContext { - /** - * Controls the tiling of allocated frames. - * If left as VK_IMAGE_TILING_OPTIMAL (0), will use optimal tiling. - * Can be set to VK_IMAGE_TILING_LINEAR to force linear images, - * or VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT to force DMABUF-backed - * images. - * @note Imported frames from other APIs ignore this. - */ - VkImageTiling tiling; - - /** - * Defines extra usage of output frames. If non-zero, all flags MUST be - * supported by the VkFormat. Otherwise, will use supported flags amongst: - * - VK_IMAGE_USAGE_SAMPLED_BIT - * - VK_IMAGE_USAGE_STORAGE_BIT - * - VK_IMAGE_USAGE_TRANSFER_SRC_BIT - * - VK_IMAGE_USAGE_TRANSFER_DST_BIT - */ - VkImageUsageFlagBits usage; - - /** - * Extension data for image creation. - * If DRM tiling is used, a VkImageDrmFormatModifierListCreateInfoEXT structure - * can be added to specify the exact modifier to use. - * - * Additional structures may be added at av_hwframe_ctx_init() time, - * which will be freed automatically on uninit(), so users must only free - * any structures they've allocated themselves. - */ - void *create_pnext; - - /** - * Extension data for memory allocation. Must have as many entries as - * the number of planes of the sw_format. - * This will be chained to VkExportMemoryAllocateInfo, which is used - * to make all pool images exportable to other APIs if the necessary - * extensions are present in enabled_dev_extensions. - */ - void *alloc_pnext[AV_NUM_DATA_POINTERS]; - - /** - * A combination of AVVkFrameFlags. Unless AV_VK_FRAME_FLAG_NONE is set, - * autodetected flags will be OR'd based on the device and tiling during - * av_hwframe_ctx_init(). - */ - AVVkFrameFlags flags; - - /** - * Flags to set during image creation. If unset, defaults to - * VK_IMAGE_CREATE_ALIAS_BIT. - */ - VkImageCreateFlags img_flags; - - /** - * Vulkan format for each image. MUST be compatible with the pixel format. - * If unset, will be automatically set. - * There are at most two compatible formats for a frame - a multiplane - * format, and a single-plane multi-image format. - */ - VkFormat format[AV_NUM_DATA_POINTERS]; - - /** - * Number of layers each image will have. - */ - int nb_layers; - - /** - * Locks a frame, preventing other threads from changing frame properties. - * Users SHOULD only ever lock just before command submission in order - * to get accurate frame properties, and unlock immediately after command - * submission without waiting for it to finish. - * - * If unset, will be set to lavu-internal functions that utilize a mutex. - */ - void (*lock_frame)(struct AVHWFramesContext *fc, AVVkFrame *vkf); - - /** - * Similar to lock_frame(), unlocks a frame. Must only be called after locking. - */ - void (*unlock_frame)(struct AVHWFramesContext *fc, AVVkFrame *vkf); -} AVVulkanFramesContext; - -/* - * Frame structure. - * - * @note the size of this structure is not part of the ABI, to allocate - * you must use @av_vk_frame_alloc(). - */ -struct AVVkFrame { - /** - * Vulkan images to which the memory is bound to. - * May be one for multiplane formats, or multiple. - */ - VkImage img[AV_NUM_DATA_POINTERS]; - - /** - * Tiling for the frame. - */ - VkImageTiling tiling; - - /** - * Memory backing the images. Either one, or as many as there are planes - * in the sw_format. - * In case of having multiple VkImages, but one memory, the offset field - * will indicate the bound offset for each image. - */ - VkDeviceMemory mem[AV_NUM_DATA_POINTERS]; - size_t size[AV_NUM_DATA_POINTERS]; - - /** - * OR'd flags for all memory allocated - */ - VkMemoryPropertyFlagBits flags; - - /** - * Updated after every barrier. One per VkImage. - */ - VkAccessFlagBits access[AV_NUM_DATA_POINTERS]; - VkImageLayout layout[AV_NUM_DATA_POINTERS]; - - /** - * Synchronization timeline semaphores, one for each VkImage. - * Must not be freed manually. Must be waited on at every submission using - * the value in sem_value, and must be signalled at every submission, - * using an incremented value. - */ - VkSemaphore sem[AV_NUM_DATA_POINTERS]; - - /** - * Up to date semaphore value at which each image becomes accessible. - * One per VkImage. - * Clients must wait on this value when submitting a command queue, - * and increment it when signalling. - */ - uint64_t sem_value[AV_NUM_DATA_POINTERS]; - - /** - * Internal data. - */ - struct AVVkFrameInternal *internal; - - /** - * Describes the binding offset of each image to the VkDeviceMemory. - * One per VkImage. - */ - ptrdiff_t offset[AV_NUM_DATA_POINTERS]; - - /** - * Queue family of the images. Must be VK_QUEUE_FAMILY_IGNORED if - * the image was allocated with the CONCURRENT concurrency option. - * One per VkImage. - */ - uint32_t queue_family[AV_NUM_DATA_POINTERS]; -}; - -/** - * Allocates a single AVVkFrame and initializes everything as 0. - * @note Must be freed via av_free() - */ -AVVkFrame *av_vk_frame_alloc(void); - -/** - * Returns the optimal per-plane Vulkan format for a given sw_format, - * one for each plane. - * Returns NULL on unsupported formats. - */ -const VkFormat *av_vkfmt_from_pixfmt(enum AVPixelFormat p); - -#endif /* AVUTIL_HWCONTEXT_VULKAN_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/imgutils.h b/3rdparty/ffmpeg/include/libavutil/imgutils.h deleted file mode 100644 index 123a9e5c0d21a..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/imgutils.h +++ /dev/null @@ -1,377 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_IMGUTILS_H -#define AVUTIL_IMGUTILS_H - -/** - * @file - * misc image utilities - * - * @addtogroup lavu_picture - * @{ - */ - -#include -#include -#include "pixdesc.h" -#include "pixfmt.h" -#include "rational.h" - -/** - * Compute the max pixel step for each plane of an image with a - * format described by pixdesc. - * - * The pixel step is the distance in bytes between the first byte of - * the group of bytes which describe a pixel component and the first - * byte of the successive group in the same plane for the same - * component. - * - * @param max_pixsteps an array which is filled with the max pixel step - * for each plane. Since a plane may contain different pixel - * components, the computed max_pixsteps[plane] is relative to the - * component in the plane with the max pixel step. - * @param max_pixstep_comps an array which is filled with the component - * for each plane which has the max pixel step. May be NULL. - * @param pixdesc the AVPixFmtDescriptor for the image, describing its format - */ -void av_image_fill_max_pixsteps(int max_pixsteps[4], int max_pixstep_comps[4], - const AVPixFmtDescriptor *pixdesc); - -/** - * Compute the size of an image line with format pix_fmt and width - * width for the plane plane. - * - * @return the computed size in bytes - */ -int av_image_get_linesize(enum AVPixelFormat pix_fmt, int width, int plane); - -/** - * Fill plane linesizes for an image with pixel format pix_fmt and - * width width. - * - * @param linesizes array to be filled with the linesize for each plane - * @param pix_fmt the AVPixelFormat of the image - * @param width width of the image in pixels - * @return >= 0 in case of success, a negative error code otherwise - */ -int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width); - -/** - * Fill plane sizes for an image with pixel format pix_fmt and height height. - * - * @param size the array to be filled with the size of each image plane - * @param pix_fmt the AVPixelFormat of the image - * @param height height of the image in pixels - * @param linesizes the array containing the linesize for each - * plane, should be filled by av_image_fill_linesizes() - * @return >= 0 in case of success, a negative error code otherwise - * - * @note The linesize parameters have the type ptrdiff_t here, while they are - * int for av_image_fill_linesizes(). - */ -int av_image_fill_plane_sizes(size_t size[4], enum AVPixelFormat pix_fmt, - int height, const ptrdiff_t linesizes[4]); - -/** - * Fill plane data pointers for an image with pixel format pix_fmt and - * height height. - * - * @param data pointers array to be filled with the pointer for each image plane - * @param pix_fmt the AVPixelFormat of the image - * @param height height of the image in pixels - * @param ptr the pointer to a buffer which will contain the image - * @param linesizes the array containing the linesize for each - * plane, should be filled by av_image_fill_linesizes() - * @return the size in bytes required for the image buffer, a negative - * error code in case of failure - */ -int av_image_fill_pointers(uint8_t *data[4], enum AVPixelFormat pix_fmt, int height, - uint8_t *ptr, const int linesizes[4]); - -/** - * Allocate an image with size w and h and pixel format pix_fmt, and - * fill pointers and linesizes accordingly. - * The allocated image buffer has to be freed by using - * av_freep(&pointers[0]). - * - * @param pointers array to be filled with the pointer for each image plane - * @param linesizes the array filled with the linesize for each plane - * @param w width of the image in pixels - * @param h height of the image in pixels - * @param pix_fmt the AVPixelFormat of the image - * @param align the value to use for buffer size alignment - * @return the size in bytes required for the image buffer, a negative - * error code in case of failure - */ -int av_image_alloc(uint8_t *pointers[4], int linesizes[4], - int w, int h, enum AVPixelFormat pix_fmt, int align); - -/** - * Copy image plane from src to dst. - * That is, copy "height" number of lines of "bytewidth" bytes each. - * The first byte of each successive line is separated by *_linesize - * bytes. - * - * bytewidth must be contained by both absolute values of dst_linesize - * and src_linesize, otherwise the function behavior is undefined. - * - * @param dst destination plane to copy to - * @param dst_linesize linesize for the image plane in dst - * @param src source plane to copy from - * @param src_linesize linesize for the image plane in src - * @param height height (number of lines) of the plane - */ -void av_image_copy_plane(uint8_t *dst, int dst_linesize, - const uint8_t *src, int src_linesize, - int bytewidth, int height); - -/** - * Copy image data located in uncacheable (e.g. GPU mapped) memory. Where - * available, this function will use special functionality for reading from such - * memory, which may result in greatly improved performance compared to plain - * av_image_copy_plane(). - * - * bytewidth must be contained by both absolute values of dst_linesize - * and src_linesize, otherwise the function behavior is undefined. - * - * @note The linesize parameters have the type ptrdiff_t here, while they are - * int for av_image_copy_plane(). - * @note On x86, the linesizes currently need to be aligned to the cacheline - * size (i.e. 64) to get improved performance. - */ -void av_image_copy_plane_uc_from(uint8_t *dst, ptrdiff_t dst_linesize, - const uint8_t *src, ptrdiff_t src_linesize, - ptrdiff_t bytewidth, int height); - -/** - * Copy image in src_data to dst_data. - * - * @param dst_data destination image data buffer to copy to - * @param dst_linesizes linesizes for the image in dst_data - * @param src_data source image data buffer to copy from - * @param src_linesizes linesizes for the image in src_data - * @param pix_fmt the AVPixelFormat of the image - * @param width width of the image in pixels - * @param height height of the image in pixels - */ -void av_image_copy(uint8_t * const dst_data[4], const int dst_linesizes[4], - const uint8_t * const src_data[4], const int src_linesizes[4], - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * Wrapper around av_image_copy() to workaround the limitation - * that the conversion from uint8_t * const * to const uint8_t * const * - * is not performed automatically in C. - * @see av_image_copy() - */ -static inline -void av_image_copy2(uint8_t * const dst_data[4], const int dst_linesizes[4], - uint8_t * const src_data[4], const int src_linesizes[4], - enum AVPixelFormat pix_fmt, int width, int height) -{ - av_image_copy(dst_data, dst_linesizes, - (const uint8_t * const *)src_data, src_linesizes, - pix_fmt, width, height); -} - -/** - * Copy image data located in uncacheable (e.g. GPU mapped) memory. Where - * available, this function will use special functionality for reading from such - * memory, which may result in greatly improved performance compared to plain - * av_image_copy(). - * - * The data pointers and the linesizes must be aligned to the maximum required - * by the CPU architecture. - * - * @note The linesize parameters have the type ptrdiff_t here, while they are - * int for av_image_copy(). - * @note On x86, the linesizes currently need to be aligned to the cacheline - * size (i.e. 64) to get improved performance. - */ -void av_image_copy_uc_from(uint8_t * const dst_data[4], const ptrdiff_t dst_linesizes[4], - const uint8_t * const src_data[4], const ptrdiff_t src_linesizes[4], - enum AVPixelFormat pix_fmt, int width, int height); - -/** - * Setup the data pointers and linesizes based on the specified image - * parameters and the provided array. - * - * The fields of the given image are filled in by using the src - * address which points to the image data buffer. Depending on the - * specified pixel format, one or multiple image data pointers and - * line sizes will be set. If a planar format is specified, several - * pointers will be set pointing to the different picture planes and - * the line sizes of the different planes will be stored in the - * lines_sizes array. Call with src == NULL to get the required - * size for the src buffer. - * - * To allocate the buffer and fill in the dst_data and dst_linesize in - * one call, use av_image_alloc(). - * - * @param dst_data data pointers to be filled in - * @param dst_linesize linesizes for the image in dst_data to be filled in - * @param src buffer which will contain or contains the actual image data, can be NULL - * @param pix_fmt the pixel format of the image - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @param align the value used in src for linesize alignment - * @return the size in bytes required for src, a negative error code - * in case of failure - */ -int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4], - const uint8_t *src, - enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Return the size in bytes of the amount of data required to store an - * image with the given parameters. - * - * @param pix_fmt the pixel format of the image - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @param align the assumed linesize alignment - * @return the buffer size in bytes, a negative error code in case of failure - */ -int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Copy image data from an image into a buffer. - * - * av_image_get_buffer_size() can be used to compute the required size - * for the buffer to fill. - * - * @param dst a buffer into which picture data will be copied - * @param dst_size the size in bytes of dst - * @param src_data pointers containing the source image data - * @param src_linesize linesizes for the image in src_data - * @param pix_fmt the pixel format of the source image - * @param width the width of the source image in pixels - * @param height the height of the source image in pixels - * @param align the assumed linesize alignment for dst - * @return the number of bytes written to dst, or a negative value - * (error code) on error - */ -int av_image_copy_to_buffer(uint8_t *dst, int dst_size, - const uint8_t * const src_data[4], const int src_linesize[4], - enum AVPixelFormat pix_fmt, int width, int height, int align); - -/** - * Check if the given dimension of an image is valid, meaning that all - * bytes of the image can be addressed with a signed int. - * - * @param w the width of the picture - * @param h the height of the picture - * @param log_offset the offset to sum to the log level for logging with log_ctx - * @param log_ctx the parent logging context, it may be NULL - * @return >= 0 if valid, a negative error code otherwise - */ -int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx); - -/** - * Check if the given dimension of an image is valid, meaning that all - * bytes of a plane of an image with the specified pix_fmt can be addressed - * with a signed int. - * - * @param w the width of the picture - * @param h the height of the picture - * @param max_pixels the maximum number of pixels the user wants to accept - * @param pix_fmt the pixel format, can be AV_PIX_FMT_NONE if unknown. - * @param log_offset the offset to sum to the log level for logging with log_ctx - * @param log_ctx the parent logging context, it may be NULL - * @return >= 0 if valid, a negative error code otherwise - */ -int av_image_check_size2(unsigned int w, unsigned int h, int64_t max_pixels, enum AVPixelFormat pix_fmt, int log_offset, void *log_ctx); - -/** - * Check if the given sample aspect ratio of an image is valid. - * - * It is considered invalid if the denominator is 0 or if applying the ratio - * to the image size would make the smaller dimension less than 1. If the - * sar numerator is 0, it is considered unknown and will return as valid. - * - * @param w width of the image - * @param h height of the image - * @param sar sample aspect ratio of the image - * @return 0 if valid, a negative AVERROR code otherwise - */ -int av_image_check_sar(unsigned int w, unsigned int h, AVRational sar); - -/** - * Overwrite the image data with black. This is suitable for filling a - * sub-rectangle of an image, meaning the padding between the right most pixel - * and the left most pixel on the next line will not be overwritten. For some - * formats, the image size might be rounded up due to inherent alignment. - * - * If the pixel format has alpha, the alpha is cleared to opaque. - * - * This can return an error if the pixel format is not supported. Normally, all - * non-hwaccel pixel formats should be supported. - * - * Passing NULL for dst_data is allowed. Then the function returns whether the - * operation would have succeeded. (It can return an error if the pix_fmt is - * not supported.) - * - * @param dst_data data pointers to destination image - * @param dst_linesize linesizes for the destination image - * @param pix_fmt the pixel format of the image - * @param range the color range of the image (important for colorspaces such as YUV) - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @return 0 if the image data was cleared, a negative AVERROR code otherwise - */ -int av_image_fill_black(uint8_t * const dst_data[4], const ptrdiff_t dst_linesize[4], - enum AVPixelFormat pix_fmt, enum AVColorRange range, - int width, int height); - -/** - * Overwrite the image data with a color. This is suitable for filling a - * sub-rectangle of an image, meaning the padding between the right most pixel - * and the left most pixel on the next line will not be overwritten. For some - * formats, the image size might be rounded up due to inherent alignment. - * - * If the pixel format has alpha, it is also replaced. Color component values - * are interpreted as native integers (or intfloats) regardless of actual pixel - * format endianness. - * - * This can return an error if the pixel format is not supported. Normally, all - * non-hwaccel pixel formats should be supported. - * - * Passing NULL for dst_data is allowed. Then the function returns whether the - * operation would have succeeded. (It can return an error if the pix_fmt is - * not supported.) - * - * @param dst_data data pointers to destination image - * @param dst_linesize linesizes for the destination image - * @param pix_fmt the pixel format of the image - * @param color the color components to be used for the fill - * @param width the width of the image in pixels - * @param height the height of the image in pixels - * @param flags currently unused - * @return 0 if the image data was filled, a negative AVERROR code otherwise - */ -int av_image_fill_color(uint8_t * const dst_data[4], const ptrdiff_t dst_linesize[4], - enum AVPixelFormat pix_fmt, const uint32_t color[4], - int width, int height, int flags); - -/** - * @} - */ - - -#endif /* AVUTIL_IMGUTILS_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/intfloat.h b/3rdparty/ffmpeg/include/libavutil/intfloat.h deleted file mode 100644 index fe3d7ec4a5b6f..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/intfloat.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2011 Mans Rullgard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_INTFLOAT_H -#define AVUTIL_INTFLOAT_H - -#include -#include "attributes.h" - -union av_intfloat32 { - uint32_t i; - float f; -}; - -union av_intfloat64 { - uint64_t i; - double f; -}; - -/** - * Reinterpret a 32-bit integer as a float. - */ -static av_always_inline float av_int2float(uint32_t i) -{ - union av_intfloat32 v; - v.i = i; - return v.f; -} - -/** - * Reinterpret a float as a 32-bit integer. - */ -static av_always_inline uint32_t av_float2int(float f) -{ - union av_intfloat32 v; - v.f = f; - return v.i; -} - -/** - * Reinterpret a 64-bit integer as a double. - */ -static av_always_inline double av_int2double(uint64_t i) -{ - union av_intfloat64 v; - v.i = i; - return v.f; -} - -/** - * Reinterpret a double as a 64-bit integer. - */ -static av_always_inline uint64_t av_double2int(double f) -{ - union av_intfloat64 v; - v.f = f; - return v.i; -} - -#endif /* AVUTIL_INTFLOAT_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/intreadwrite.h b/3rdparty/ffmpeg/include/libavutil/intreadwrite.h deleted file mode 100644 index ffd15a150296c..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/intreadwrite.h +++ /dev/null @@ -1,677 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_INTREADWRITE_H -#define AVUTIL_INTREADWRITE_H - -#include -#include "libavutil/avconfig.h" -#include "attributes.h" -#include "bswap.h" - -typedef union { - uint64_t u64; - uint32_t u32[2]; - uint16_t u16[4]; - uint8_t u8 [8]; - double f64; - float f32[2]; -} av_alias av_alias64; - -typedef union { - uint32_t u32; - uint16_t u16[2]; - uint8_t u8 [4]; - float f32; -} av_alias av_alias32; - -typedef union { - uint16_t u16; - uint8_t u8 [2]; -} av_alias av_alias16; - -/* - * Arch-specific headers can provide any combination of - * AV_[RW][BLN](16|24|32|48|64) and AV_(COPY|SWAP|ZERO)(64|128) macros. - * Preprocessor symbols must be defined, even if these are implemented - * as inline functions. - * - * R/W means read/write, B/L/N means big/little/native endianness. - * The following macros require aligned access, compared to their - * unaligned variants: AV_(COPY|SWAP|ZERO)(64|128), AV_[RW]N[8-64]A. - * Incorrect usage may range from abysmal performance to crash - * depending on the platform. - * - * The unaligned variants are AV_[RW][BLN][8-64] and AV_COPY*U. - */ - -#ifdef HAVE_AV_CONFIG_H - -#include "config.h" - -#if ARCH_AARCH64 -# include "aarch64/intreadwrite.h" -#elif ARCH_MIPS -# include "mips/intreadwrite.h" -#elif ARCH_PPC -# include "ppc/intreadwrite.h" -#elif ARCH_X86 -# include "x86/intreadwrite.h" -#endif - -#endif /* HAVE_AV_CONFIG_H */ - -/* - * Map AV_RNXX <-> AV_R[BL]XX for all variants provided by per-arch headers. - */ - -#if AV_HAVE_BIGENDIAN - -# if defined(AV_RN16) && !defined(AV_RB16) -# define AV_RB16(p) AV_RN16(p) -# elif !defined(AV_RN16) && defined(AV_RB16) -# define AV_RN16(p) AV_RB16(p) -# endif - -# if defined(AV_WN16) && !defined(AV_WB16) -# define AV_WB16(p, v) AV_WN16(p, v) -# elif !defined(AV_WN16) && defined(AV_WB16) -# define AV_WN16(p, v) AV_WB16(p, v) -# endif - -# if defined(AV_RN24) && !defined(AV_RB24) -# define AV_RB24(p) AV_RN24(p) -# elif !defined(AV_RN24) && defined(AV_RB24) -# define AV_RN24(p) AV_RB24(p) -# endif - -# if defined(AV_WN24) && !defined(AV_WB24) -# define AV_WB24(p, v) AV_WN24(p, v) -# elif !defined(AV_WN24) && defined(AV_WB24) -# define AV_WN24(p, v) AV_WB24(p, v) -# endif - -# if defined(AV_RN32) && !defined(AV_RB32) -# define AV_RB32(p) AV_RN32(p) -# elif !defined(AV_RN32) && defined(AV_RB32) -# define AV_RN32(p) AV_RB32(p) -# endif - -# if defined(AV_WN32) && !defined(AV_WB32) -# define AV_WB32(p, v) AV_WN32(p, v) -# elif !defined(AV_WN32) && defined(AV_WB32) -# define AV_WN32(p, v) AV_WB32(p, v) -# endif - -# if defined(AV_RN48) && !defined(AV_RB48) -# define AV_RB48(p) AV_RN48(p) -# elif !defined(AV_RN48) && defined(AV_RB48) -# define AV_RN48(p) AV_RB48(p) -# endif - -# if defined(AV_WN48) && !defined(AV_WB48) -# define AV_WB48(p, v) AV_WN48(p, v) -# elif !defined(AV_WN48) && defined(AV_WB48) -# define AV_WN48(p, v) AV_WB48(p, v) -# endif - -# if defined(AV_RN64) && !defined(AV_RB64) -# define AV_RB64(p) AV_RN64(p) -# elif !defined(AV_RN64) && defined(AV_RB64) -# define AV_RN64(p) AV_RB64(p) -# endif - -# if defined(AV_WN64) && !defined(AV_WB64) -# define AV_WB64(p, v) AV_WN64(p, v) -# elif !defined(AV_WN64) && defined(AV_WB64) -# define AV_WN64(p, v) AV_WB64(p, v) -# endif - -#else /* AV_HAVE_BIGENDIAN */ - -# if defined(AV_RN16) && !defined(AV_RL16) -# define AV_RL16(p) AV_RN16(p) -# elif !defined(AV_RN16) && defined(AV_RL16) -# define AV_RN16(p) AV_RL16(p) -# endif - -# if defined(AV_WN16) && !defined(AV_WL16) -# define AV_WL16(p, v) AV_WN16(p, v) -# elif !defined(AV_WN16) && defined(AV_WL16) -# define AV_WN16(p, v) AV_WL16(p, v) -# endif - -# if defined(AV_RN24) && !defined(AV_RL24) -# define AV_RL24(p) AV_RN24(p) -# elif !defined(AV_RN24) && defined(AV_RL24) -# define AV_RN24(p) AV_RL24(p) -# endif - -# if defined(AV_WN24) && !defined(AV_WL24) -# define AV_WL24(p, v) AV_WN24(p, v) -# elif !defined(AV_WN24) && defined(AV_WL24) -# define AV_WN24(p, v) AV_WL24(p, v) -# endif - -# if defined(AV_RN32) && !defined(AV_RL32) -# define AV_RL32(p) AV_RN32(p) -# elif !defined(AV_RN32) && defined(AV_RL32) -# define AV_RN32(p) AV_RL32(p) -# endif - -# if defined(AV_WN32) && !defined(AV_WL32) -# define AV_WL32(p, v) AV_WN32(p, v) -# elif !defined(AV_WN32) && defined(AV_WL32) -# define AV_WN32(p, v) AV_WL32(p, v) -# endif - -# if defined(AV_RN48) && !defined(AV_RL48) -# define AV_RL48(p) AV_RN48(p) -# elif !defined(AV_RN48) && defined(AV_RL48) -# define AV_RN48(p) AV_RL48(p) -# endif - -# if defined(AV_WN48) && !defined(AV_WL48) -# define AV_WL48(p, v) AV_WN48(p, v) -# elif !defined(AV_WN48) && defined(AV_WL48) -# define AV_WN48(p, v) AV_WL48(p, v) -# endif - -# if defined(AV_RN64) && !defined(AV_RL64) -# define AV_RL64(p) AV_RN64(p) -# elif !defined(AV_RN64) && defined(AV_RL64) -# define AV_RN64(p) AV_RL64(p) -# endif - -# if defined(AV_WN64) && !defined(AV_WL64) -# define AV_WL64(p, v) AV_WN64(p, v) -# elif !defined(AV_WN64) && defined(AV_WL64) -# define AV_WN64(p, v) AV_WL64(p, v) -# endif - -#endif /* !AV_HAVE_BIGENDIAN */ - -/* - * Define AV_[RW]N helper macros to simplify definitions not provided - * by per-arch headers. - */ - -#if defined(__GNUC__) || defined(__clang__) - -union unaligned_64 { uint64_t l; } __attribute__((packed)) av_alias; -union unaligned_32 { uint32_t l; } __attribute__((packed)) av_alias; -union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; - -# define AV_RN(s, p) (((const union unaligned_##s *) (p))->l) -# define AV_WN(s, p, v) ((((union unaligned_##s *) (p))->l) = (v)) - -#elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_X64) || defined(_M_ARM64)) && AV_HAVE_FAST_UNALIGNED - -# define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p))) -# define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v)) - -#elif AV_HAVE_FAST_UNALIGNED - -# define AV_RN(s, p) (((const av_alias##s*)(p))->u##s) -# define AV_WN(s, p, v) (((av_alias##s*)(p))->u##s = (v)) - -#else - -#ifndef AV_RB16 -# define AV_RB16(x) \ - ((((const uint8_t*)(x))[0] << 8) | \ - ((const uint8_t*)(x))[1]) -#endif -#ifndef AV_WB16 -# define AV_WB16(p, val) do { \ - uint16_t d = (val); \ - ((uint8_t*)(p))[1] = (d); \ - ((uint8_t*)(p))[0] = (d)>>8; \ - } while(0) -#endif - -#ifndef AV_RL16 -# define AV_RL16(x) \ - ((((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL16 -# define AV_WL16(p, val) do { \ - uint16_t d = (val); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - } while(0) -#endif - -#ifndef AV_RB32 -# define AV_RB32(x) \ - (((uint32_t)((const uint8_t*)(x))[0] << 24) | \ - (((const uint8_t*)(x))[1] << 16) | \ - (((const uint8_t*)(x))[2] << 8) | \ - ((const uint8_t*)(x))[3]) -#endif -#ifndef AV_WB32 -# define AV_WB32(p, val) do { \ - uint32_t d = (val); \ - ((uint8_t*)(p))[3] = (d); \ - ((uint8_t*)(p))[2] = (d)>>8; \ - ((uint8_t*)(p))[1] = (d)>>16; \ - ((uint8_t*)(p))[0] = (d)>>24; \ - } while(0) -#endif - -#ifndef AV_RL32 -# define AV_RL32(x) \ - (((uint32_t)((const uint8_t*)(x))[3] << 24) | \ - (((const uint8_t*)(x))[2] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL32 -# define AV_WL32(p, val) do { \ - uint32_t d = (val); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - } while(0) -#endif - -#ifndef AV_RB64 -# define AV_RB64(x) \ - (((uint64_t)((const uint8_t*)(x))[0] << 56) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 48) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[5] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[6] << 8) | \ - (uint64_t)((const uint8_t*)(x))[7]) -#endif -#ifndef AV_WB64 -# define AV_WB64(p, val) do { \ - uint64_t d = (val); \ - ((uint8_t*)(p))[7] = (d); \ - ((uint8_t*)(p))[6] = (d)>>8; \ - ((uint8_t*)(p))[5] = (d)>>16; \ - ((uint8_t*)(p))[4] = (d)>>24; \ - ((uint8_t*)(p))[3] = (d)>>32; \ - ((uint8_t*)(p))[2] = (d)>>40; \ - ((uint8_t*)(p))[1] = (d)>>48; \ - ((uint8_t*)(p))[0] = (d)>>56; \ - } while(0) -#endif - -#ifndef AV_RL64 -# define AV_RL64(x) \ - (((uint64_t)((const uint8_t*)(x))[7] << 56) | \ - ((uint64_t)((const uint8_t*)(x))[6] << 48) | \ - ((uint64_t)((const uint8_t*)(x))[5] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ - (uint64_t)((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL64 -# define AV_WL64(p, val) do { \ - uint64_t d = (val); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - ((uint8_t*)(p))[4] = (d)>>32; \ - ((uint8_t*)(p))[5] = (d)>>40; \ - ((uint8_t*)(p))[6] = (d)>>48; \ - ((uint8_t*)(p))[7] = (d)>>56; \ - } while(0) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RN(s, p) AV_RB##s(p) -# define AV_WN(s, p, v) AV_WB##s(p, v) -#else -# define AV_RN(s, p) AV_RL##s(p) -# define AV_WN(s, p, v) AV_WL##s(p, v) -#endif - -#endif /* HAVE_FAST_UNALIGNED */ - -#ifndef AV_RN16 -# define AV_RN16(p) AV_RN(16, p) -#endif - -#ifndef AV_RN32 -# define AV_RN32(p) AV_RN(32, p) -#endif - -#ifndef AV_RN64 -# define AV_RN64(p) AV_RN(64, p) -#endif - -#ifndef AV_WN16 -# define AV_WN16(p, v) AV_WN(16, p, v) -#endif - -#ifndef AV_WN32 -# define AV_WN32(p, v) AV_WN(32, p, v) -#endif - -#ifndef AV_WN64 -# define AV_WN64(p, v) AV_WN(64, p, v) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RB(s, p) AV_RN##s(p) -# define AV_WB(s, p, v) AV_WN##s(p, v) -# define AV_RL(s, p) av_bswap##s(AV_RN##s(p)) -# define AV_WL(s, p, v) AV_WN##s(p, av_bswap##s(v)) -#else -# define AV_RB(s, p) av_bswap##s(AV_RN##s(p)) -# define AV_WB(s, p, v) AV_WN##s(p, av_bswap##s(v)) -# define AV_RL(s, p) AV_RN##s(p) -# define AV_WL(s, p, v) AV_WN##s(p, v) -#endif - -#define AV_RB8(x) (((const uint8_t*)(x))[0]) -#define AV_WB8(p, d) do { ((uint8_t*)(p))[0] = (d); } while(0) - -#define AV_RL8(x) AV_RB8(x) -#define AV_WL8(p, d) AV_WB8(p, d) - -#ifndef AV_RB16 -# define AV_RB16(p) AV_RB(16, p) -#endif -#ifndef AV_WB16 -# define AV_WB16(p, v) AV_WB(16, p, v) -#endif - -#ifndef AV_RL16 -# define AV_RL16(p) AV_RL(16, p) -#endif -#ifndef AV_WL16 -# define AV_WL16(p, v) AV_WL(16, p, v) -#endif - -#ifndef AV_RB32 -# define AV_RB32(p) AV_RB(32, p) -#endif -#ifndef AV_WB32 -# define AV_WB32(p, v) AV_WB(32, p, v) -#endif - -#ifndef AV_RL32 -# define AV_RL32(p) AV_RL(32, p) -#endif -#ifndef AV_WL32 -# define AV_WL32(p, v) AV_WL(32, p, v) -#endif - -#ifndef AV_RB64 -# define AV_RB64(p) AV_RB(64, p) -#endif -#ifndef AV_WB64 -# define AV_WB64(p, v) AV_WB(64, p, v) -#endif - -#ifndef AV_RL64 -# define AV_RL64(p) AV_RL(64, p) -#endif -#ifndef AV_WL64 -# define AV_WL64(p, v) AV_WL(64, p, v) -#endif - -#ifndef AV_RB24 -# define AV_RB24(x) \ - ((((const uint8_t*)(x))[0] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[2]) -#endif -#ifndef AV_WB24 -# define AV_WB24(p, d) do { \ - ((uint8_t*)(p))[2] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[0] = (d)>>16; \ - } while(0) -#endif - -#ifndef AV_RL24 -# define AV_RL24(x) \ - ((((const uint8_t*)(x))[2] << 16) | \ - (((const uint8_t*)(x))[1] << 8) | \ - ((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL24 -# define AV_WL24(p, d) do { \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - } while(0) -#endif - -#ifndef AV_RB48 -# define AV_RB48(x) \ - (((uint64_t)((const uint8_t*)(x))[0] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 8) | \ - (uint64_t)((const uint8_t*)(x))[5]) -#endif -#ifndef AV_WB48 -# define AV_WB48(p, darg) do { \ - uint64_t d = (darg); \ - ((uint8_t*)(p))[5] = (d); \ - ((uint8_t*)(p))[4] = (d)>>8; \ - ((uint8_t*)(p))[3] = (d)>>16; \ - ((uint8_t*)(p))[2] = (d)>>24; \ - ((uint8_t*)(p))[1] = (d)>>32; \ - ((uint8_t*)(p))[0] = (d)>>40; \ - } while(0) -#endif - -#ifndef AV_RL48 -# define AV_RL48(x) \ - (((uint64_t)((const uint8_t*)(x))[5] << 40) | \ - ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ - ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ - ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ - ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ - (uint64_t)((const uint8_t*)(x))[0]) -#endif -#ifndef AV_WL48 -# define AV_WL48(p, darg) do { \ - uint64_t d = (darg); \ - ((uint8_t*)(p))[0] = (d); \ - ((uint8_t*)(p))[1] = (d)>>8; \ - ((uint8_t*)(p))[2] = (d)>>16; \ - ((uint8_t*)(p))[3] = (d)>>24; \ - ((uint8_t*)(p))[4] = (d)>>32; \ - ((uint8_t*)(p))[5] = (d)>>40; \ - } while(0) -#endif - -/* - * The AV_[RW]NA macros access naturally aligned data - * in a type-safe way. - */ - -#define AV_RNA(s, p) (((const av_alias##s*)(p))->u##s) -#define AV_WNA(s, p, v) (((av_alias##s*)(p))->u##s = (v)) - -#ifndef AV_RN16A -# define AV_RN16A(p) AV_RNA(16, p) -#endif - -#ifndef AV_RN32A -# define AV_RN32A(p) AV_RNA(32, p) -#endif - -#ifndef AV_RN64A -# define AV_RN64A(p) AV_RNA(64, p) -#endif - -#ifndef AV_WN16A -# define AV_WN16A(p, v) AV_WNA(16, p, v) -#endif - -#ifndef AV_WN32A -# define AV_WN32A(p, v) AV_WNA(32, p, v) -#endif - -#ifndef AV_WN64A -# define AV_WN64A(p, v) AV_WNA(64, p, v) -#endif - -#if AV_HAVE_BIGENDIAN -# define AV_RLA(s, p) av_bswap##s(AV_RN##s##A(p)) -# define AV_WLA(s, p, v) AV_WN##s##A(p, av_bswap##s(v)) -# define AV_RBA(s, p) AV_RN##s##A(p) -# define AV_WBA(s, p, v) AV_WN##s##A(p, v) -#else -# define AV_RLA(s, p) AV_RN##s##A(p) -# define AV_WLA(s, p, v) AV_WN##s##A(p, v) -# define AV_RBA(s, p) av_bswap##s(AV_RN##s##A(p)) -# define AV_WBA(s, p, v) AV_WN##s##A(p, av_bswap##s(v)) -#endif - -#ifndef AV_RL16A -# define AV_RL16A(p) AV_RLA(16, p) -#endif -#ifndef AV_WL16A -# define AV_WL16A(p, v) AV_WLA(16, p, v) -#endif - -#ifndef AV_RB16A -# define AV_RB16A(p) AV_RBA(16, p) -#endif -#ifndef AV_WB16A -# define AV_WB16A(p, v) AV_WBA(16, p, v) -#endif - -#ifndef AV_RL32A -# define AV_RL32A(p) AV_RLA(32, p) -#endif -#ifndef AV_WL32A -# define AV_WL32A(p, v) AV_WLA(32, p, v) -#endif - -#ifndef AV_RB32A -# define AV_RB32A(p) AV_RBA(32, p) -#endif -#ifndef AV_WB32A -# define AV_WB32A(p, v) AV_WBA(32, p, v) -#endif - -#ifndef AV_RL64A -# define AV_RL64A(p) AV_RLA(64, p) -#endif -#ifndef AV_WL64A -# define AV_WL64A(p, v) AV_WLA(64, p, v) -#endif - -#ifndef AV_RB64A -# define AV_RB64A(p) AV_RBA(64, p) -#endif -#ifndef AV_WB64A -# define AV_WB64A(p, v) AV_WBA(64, p, v) -#endif - -/* - * The AV_COPYxxU macros are suitable for copying data to/from unaligned - * memory locations. - */ - -#define AV_COPYU(n, d, s) AV_WN##n(d, AV_RN##n(s)); - -#ifndef AV_COPY16U -# define AV_COPY16U(d, s) AV_COPYU(16, d, s) -#endif - -#ifndef AV_COPY32U -# define AV_COPY32U(d, s) AV_COPYU(32, d, s) -#endif - -#ifndef AV_COPY64U -# define AV_COPY64U(d, s) AV_COPYU(64, d, s) -#endif - -#ifndef AV_COPY128U -# define AV_COPY128U(d, s) \ - do { \ - AV_COPY64U(d, s); \ - AV_COPY64U((char *)(d) + 8, (const char *)(s) + 8); \ - } while(0) -#endif - -/* Parameters for AV_COPY*, AV_SWAP*, AV_ZERO* must be - * naturally aligned. - */ - -#define AV_COPY(n, d, s) \ - (((av_alias##n*)(d))->u##n = ((const av_alias##n*)(s))->u##n) - -#ifndef AV_COPY16 -# define AV_COPY16(d, s) AV_COPY(16, d, s) -#endif - -#ifndef AV_COPY32 -# define AV_COPY32(d, s) AV_COPY(32, d, s) -#endif - -#ifndef AV_COPY64 -# define AV_COPY64(d, s) AV_COPY(64, d, s) -#endif - -#ifndef AV_COPY128 -# define AV_COPY128(d, s) \ - do { \ - AV_COPY64(d, s); \ - AV_COPY64((char*)(d)+8, (char*)(s)+8); \ - } while(0) -#endif - -#define AV_SWAP(n, a, b) FFSWAP(av_alias##n, *(av_alias##n*)(a), *(av_alias##n*)(b)) - -#ifndef AV_SWAP64 -# define AV_SWAP64(a, b) AV_SWAP(64, a, b) -#endif - -#define AV_ZERO(n, d) (((av_alias##n*)(d))->u##n = 0) - -#ifndef AV_ZERO16 -# define AV_ZERO16(d) AV_ZERO(16, d) -#endif - -#ifndef AV_ZERO32 -# define AV_ZERO32(d) AV_ZERO(32, d) -#endif - -#ifndef AV_ZERO64 -# define AV_ZERO64(d) AV_ZERO(64, d) -#endif - -#ifndef AV_ZERO128 -# define AV_ZERO128(d) \ - do { \ - AV_ZERO64(d); \ - AV_ZERO64((char*)(d)+8); \ - } while(0) -#endif - -#endif /* AVUTIL_INTREADWRITE_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/lfg.h b/3rdparty/ffmpeg/include/libavutil/lfg.h deleted file mode 100644 index 043d0ab3430fc..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/lfg.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Lagged Fibonacci PRNG - * Copyright (c) 2008 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LFG_H -#define AVUTIL_LFG_H - -#include - -/** - * Context structure for the Lagged Fibonacci PRNG. - * The exact layout, types and content of this struct may change and should - * not be accessed directly. Only its `sizeof()` is guaranteed to stay the same - * to allow easy instantiation. - */ -typedef struct AVLFG { - unsigned int state[64]; - int index; -} AVLFG; - -void av_lfg_init(AVLFG *c, unsigned int seed); - -/** - * Seed the state of the ALFG using binary data. - * - * @return 0 on success, negative value (AVERROR) on failure. - */ -int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length); - -/** - * Get the next random unsigned 32-bit number using an ALFG. - * - * Please also consider a simple LCG like state= state*1664525+1013904223, - * it may be good enough and faster for your specific use case. - */ -static inline unsigned int av_lfg_get(AVLFG *c){ - unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63]; - c->index += 1U; - return a; -} - -/** - * Get the next random unsigned 32-bit number using a MLFG. - * - * Please also consider av_lfg_get() above, it is faster. - */ -static inline unsigned int av_mlfg_get(AVLFG *c){ - unsigned int a= c->state[(c->index-55) & 63]; - unsigned int b= c->state[(c->index-24) & 63]; - a = c->state[c->index & 63] = 2*a*b+a+b; - c->index += 1U; - return a; -} - -/** - * Get the next two numbers generated by a Box-Muller Gaussian - * generator using the random numbers issued by lfg. - * - * @param lfg pointer to the context structure - * @param out array where the two generated numbers are placed - */ -void av_bmg_get(AVLFG *lfg, double out[2]); - -#endif /* AVUTIL_LFG_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/log.h b/3rdparty/ffmpeg/include/libavutil/log.h deleted file mode 100644 index 4a111ca9a5b8a..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/log.h +++ /dev/null @@ -1,427 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LOG_H -#define AVUTIL_LOG_H - -#include -#include "attributes.h" -#include "version.h" - -typedef enum { - AV_CLASS_CATEGORY_NA = 0, - AV_CLASS_CATEGORY_INPUT, - AV_CLASS_CATEGORY_OUTPUT, - AV_CLASS_CATEGORY_MUXER, - AV_CLASS_CATEGORY_DEMUXER, - AV_CLASS_CATEGORY_ENCODER, - AV_CLASS_CATEGORY_DECODER, - AV_CLASS_CATEGORY_FILTER, - AV_CLASS_CATEGORY_BITSTREAM_FILTER, - AV_CLASS_CATEGORY_SWSCALER, - AV_CLASS_CATEGORY_SWRESAMPLER, - AV_CLASS_CATEGORY_HWDEVICE, - AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT = 40, - AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT, - AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, - AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT, - AV_CLASS_CATEGORY_DEVICE_OUTPUT, - AV_CLASS_CATEGORY_DEVICE_INPUT, - AV_CLASS_CATEGORY_NB ///< not part of ABI/API -}AVClassCategory; - -enum AVClassStateFlags { - /** - * Object initialization has finished and it is now in the 'runtime' stage. - * This affects e.g. what options can be set on the object (only - * AV_OPT_FLAG_RUNTIME_PARAM options can be set on initialized objects). - */ - AV_CLASS_STATE_INITIALIZED = (1 << 0), -}; - -#define AV_IS_INPUT_DEVICE(category) \ - (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_INPUT)) - -#define AV_IS_OUTPUT_DEVICE(category) \ - (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT) || \ - ((category) == AV_CLASS_CATEGORY_DEVICE_OUTPUT)) - -struct AVOptionRanges; - -/** - * Describe the class of an AVClass context structure. That is an - * arbitrary struct of which the first field is a pointer to an - * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.). - */ -typedef struct AVClass { - /** - * The name of the class; usually it is the same name as the - * context structure type to which the AVClass is associated. - */ - const char* class_name; - - /** - * A pointer to a function which returns the name of a context - * instance ctx associated with the class. - */ - const char* (*item_name)(void* ctx); - - /** - * An array of options for the structure or NULL. - * When non-NULL, the array must be terminated by an option with a NULL - * name. - * - * @see av_set_default_options() - */ - const struct AVOption *option; - - /** - * LIBAVUTIL_VERSION with which this structure was created. - * This is used to allow fields to be added to AVClass without requiring - * major version bumps everywhere. - */ - - int version; - - /** - * Offset in the structure where the log level offset is stored. The log - * level offset is an int added to the log level for logging with this - * object as the context. - * - * 0 means there is no such variable. - */ - int log_level_offset_offset; - - /** - * Offset in the structure where a pointer to the parent context for - * logging is stored. For example a decoder could pass its AVCodecContext - * to eval as such a parent context, which an ::av_log() implementation - * could then leverage to display the parent context. - * - * When the pointer is NULL, or this offset is zero, the object is assumed - * to have no parent. - */ - int parent_log_context_offset; - - /** - * Category used for visualization (like color). - * - * Only used when ::get_category() is NULL. Use this field when all - * instances of this class have the same category, use ::get_category() - * otherwise. - */ - AVClassCategory category; - - /** - * Callback to return the instance category. Use this callback when - * different instances of this class may have different categories, - * ::category otherwise. - */ - AVClassCategory (*get_category)(void* ctx); - - /** - * Callback to return the supported/allowed ranges. - */ - int (*query_ranges)(struct AVOptionRanges **, void *obj, const char *key, int flags); - - /** - * Return next AVOptions-enabled child or NULL - */ - void* (*child_next)(void *obj, void *prev); - - /** - * Iterate over the AVClasses corresponding to potential AVOptions-enabled - * children. - * - * @param iter pointer to opaque iteration state. The caller must initialize - * *iter to NULL before the first call. - * @return AVClass for the next AVOptions-enabled child or NULL if there are - * no more such children. - * - * @note The difference between ::child_next() and ::child_class_iterate() - * is that ::child_next() iterates over _actual_ children of an - * _existing_ object instance, while ::child_class_iterate() iterates - * over the classes of all _potential_ children of any possible - * instance of this class. - */ - const struct AVClass* (*child_class_iterate)(void **iter); - - /** - * When non-zero, offset in the object to an unsigned int holding object - * state flags, a combination of AVClassStateFlags values. The flags are - * updated by the object to signal its state to the generic code. - * - * Added in version 59.41.100. - */ - int state_flags_offset; -} AVClass; - -/** - * @addtogroup lavu_log - * - * @{ - * - * @defgroup lavu_log_constants Logging Constants - * - * @{ - */ - -/** - * Print no output. - */ -#define AV_LOG_QUIET -8 - -/** - * Something went really wrong and we will crash now. - */ -#define AV_LOG_PANIC 0 - -/** - * Something went wrong and recovery is not possible. - * For example, no header was found for a format which depends - * on headers or an illegal combination of parameters is used. - */ -#define AV_LOG_FATAL 8 - -/** - * Something went wrong and cannot losslessly be recovered. - * However, not all future data is affected. - */ -#define AV_LOG_ERROR 16 - -/** - * Something somehow does not look correct. This may or may not - * lead to problems. An example would be the use of '-vstrict -2'. - */ -#define AV_LOG_WARNING 24 - -/** - * Standard information. - */ -#define AV_LOG_INFO 32 - -/** - * Detailed information. - */ -#define AV_LOG_VERBOSE 40 - -/** - * Stuff which is only useful for libav* developers. - */ -#define AV_LOG_DEBUG 48 - -/** - * Extremely verbose debugging, useful for libav* development. - */ -#define AV_LOG_TRACE 56 - -#define AV_LOG_MAX_OFFSET (AV_LOG_TRACE - AV_LOG_QUIET) - -/** - * @} - */ - -/** - * Sets additional colors for extended debugging sessions. - * @code - av_log(ctx, AV_LOG_DEBUG|AV_LOG_C(134), "Message in purple\n"); - @endcode - * Requires 256color terminal support. Uses outside debugging is not - * recommended. - */ -#define AV_LOG_C(x) ((x) << 8) - -/** - * Send the specified message to the log if the level is less than or equal - * to the current av_log_level. By default, all logging messages are sent to - * stderr. This behavior can be altered by setting a different logging callback - * function. - * @see av_log_set_callback - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct or NULL if general log. - * @param level The importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant". - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - */ -void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4); - -/** - * Send the specified message to the log once with the initial_level and then with - * the subsequent_level. By default, all logging messages are sent to - * stderr. This behavior can be altered by setting a different logging callback - * function. - * @see av_log - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct or NULL if general log. - * @param initial_level importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant" for the first occurrence. - * @param subsequent_level importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant" after the first occurrence. - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - * @param state a variable to keep trak of if a message has already been printed - * this must be initialized to 0 before the first use. The same state - * must not be accessed by 2 Threads simultaneously. - */ -void av_log_once(void* avcl, int initial_level, int subsequent_level, int *state, const char *fmt, ...) av_printf_format(5, 6); - - -/** - * Send the specified message to the log if the level is less than or equal - * to the current av_log_level. By default, all logging messages are sent to - * stderr. This behavior can be altered by setting a different logging callback - * function. - * @see av_log_set_callback - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant". - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - * @param vl The arguments referenced by the format string. - */ -void av_vlog(void *avcl, int level, const char *fmt, va_list vl); - -/** - * Get the current log level - * - * @see lavu_log_constants - * - * @return Current log level - */ -int av_log_get_level(void); - -/** - * Set the log level - * - * @see lavu_log_constants - * - * @param level Logging level - */ -void av_log_set_level(int level); - -/** - * Set the logging callback - * - * @note The callback must be thread safe, even if the application does not use - * threads itself as some codecs are multithreaded. - * - * @see av_log_default_callback - * - * @param callback A logging function with a compatible signature. - */ -void av_log_set_callback(void (*callback)(void*, int, const char*, va_list)); - -/** - * Default logging callback - * - * It prints the message to stderr, optionally colorizing it. - * - * @param avcl A pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct. - * @param level The importance level of the message expressed using a @ref - * lavu_log_constants "Logging Constant". - * @param fmt The format string (printf-compatible) that specifies how - * subsequent arguments are converted to output. - * @param vl The arguments referenced by the format string. - */ -void av_log_default_callback(void *avcl, int level, const char *fmt, - va_list vl); - -/** - * Return the context name - * - * @param ctx The AVClass context - * - * @return The AVClass class_name - */ -const char* av_default_item_name(void* ctx); -AVClassCategory av_default_get_category(void *ptr); - -/** - * Format a line of log the same way as the default callback. - * @param line buffer to receive the formatted line - * @param line_size size of the buffer - * @param print_prefix used to store whether the prefix must be printed; - * must point to a persistent integer initially set to 1 - */ -void av_log_format_line(void *ptr, int level, const char *fmt, va_list vl, - char *line, int line_size, int *print_prefix); - -/** - * Format a line of log the same way as the default callback. - * @param line buffer to receive the formatted line; - * may be NULL if line_size is 0 - * @param line_size size of the buffer; at most line_size-1 characters will - * be written to the buffer, plus one null terminator - * @param print_prefix used to store whether the prefix must be printed; - * must point to a persistent integer initially set to 1 - * @return Returns a negative value if an error occurred, otherwise returns - * the number of characters that would have been written for a - * sufficiently large buffer, not including the terminating null - * character. If the return value is not less than line_size, it means - * that the log message was truncated to fit the buffer. - */ -int av_log_format_line2(void *ptr, int level, const char *fmt, va_list vl, - char *line, int line_size, int *print_prefix); - -/** - * Skip repeated messages, this requires the user app to use av_log() instead of - * (f)printf as the 2 would otherwise interfere and lead to - * "Last message repeated x times" messages below (f)printf messages with some - * bad luck. - * Also to receive the last, "last repeated" line if any, the user app must - * call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end - */ -#define AV_LOG_SKIP_REPEATED 1 - -/** - * Include the log severity in messages originating from codecs. - * - * Results in messages such as: - * [rawvideo @ 0xDEADBEEF] [error] encode did not produce valid pts - */ -#define AV_LOG_PRINT_LEVEL 2 - -/** - * Include system time in log output. - */ -#define AV_LOG_PRINT_TIME 4 - -/** - * Include system date and time in log output. - */ -#define AV_LOG_PRINT_DATETIME 8 - -void av_log_set_flags(int arg); -int av_log_get_flags(void); - -/** - * @} - */ - -#endif /* AVUTIL_LOG_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/lzo.h b/3rdparty/ffmpeg/include/libavutil/lzo.h deleted file mode 100644 index c03403992d5f6..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/lzo.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * LZO 1x decompression - * copyright (c) 2006 Reimar Doeffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LZO_H -#define AVUTIL_LZO_H - -/** - * @defgroup lavu_lzo LZO - * @ingroup lavu_crypto - * - * @{ - */ - -#include - -/** @name Error flags returned by av_lzo1x_decode - * @{ */ -/// end of the input buffer reached before decoding finished -#define AV_LZO_INPUT_DEPLETED 1 -/// decoded data did not fit into output buffer -#define AV_LZO_OUTPUT_FULL 2 -/// a reference to previously decoded data was wrong -#define AV_LZO_INVALID_BACKPTR 4 -/// a non-specific error in the compressed bitstream -#define AV_LZO_ERROR 8 -/** @} */ - -#define AV_LZO_INPUT_PADDING 8 -#define AV_LZO_OUTPUT_PADDING 12 - -/** - * @brief Decodes LZO 1x compressed data. - * @param out output buffer - * @param outlen size of output buffer, number of bytes left are returned here - * @param in input buffer - * @param inlen size of input buffer, number of bytes left are returned here - * @return 0 on success, otherwise a combination of the error flags above - * - * Make sure all buffers are appropriately padded, in must provide - * AV_LZO_INPUT_PADDING, out must provide AV_LZO_OUTPUT_PADDING additional bytes. - */ -int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen); - -/** - * @} - */ - -#endif /* AVUTIL_LZO_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/macros.h b/3rdparty/ffmpeg/include/libavutil/macros.h deleted file mode 100644 index 2a7567c3ea8fb..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/macros.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu - * Utility Preprocessor macros - */ - -#ifndef AVUTIL_MACROS_H -#define AVUTIL_MACROS_H - -#include "libavutil/avconfig.h" - -#if AV_HAVE_BIGENDIAN -# define AV_NE(be, le) (be) -#else -# define AV_NE(be, le) (le) -#endif - -/** - * Comparator. - * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0 - * if x == y. This is useful for instance in a qsort comparator callback. - * Furthermore, compilers are able to optimize this to branchless code, and - * there is no risk of overflow with signed types. - * As with many macros, this evaluates its argument multiple times, it thus - * must not have a side-effect. - */ -#define FFDIFFSIGN(x,y) (((x)>(y)) - ((x)<(y))) - -#define FFMAX(a,b) ((a) > (b) ? (a) : (b)) -#define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c) -#define FFMIN(a,b) ((a) > (b) ? (b) : (a)) -#define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c) - -#define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0) -#define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) - -#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24)) -#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24)) - -/** - * @addtogroup preproc_misc Preprocessor String Macros - * - * String manipulation macros - * - * @{ - */ - -#define AV_STRINGIFY(s) AV_TOSTRING(s) -#define AV_TOSTRING(s) #s - -#define AV_GLUE(a, b) a ## b -#define AV_JOIN(a, b) AV_GLUE(a, b) - -/** - * @} - */ - -#define AV_PRAGMA(s) _Pragma(#s) - -#define FFALIGN(x, a) (((x)+(a)-1)&~((a)-1)) - -#endif /* AVUTIL_MACROS_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/mastering_display_metadata.h b/3rdparty/ffmpeg/include/libavutil/mastering_display_metadata.h deleted file mode 100644 index 52fcef9e37110..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/mastering_display_metadata.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (c) 2016 Neil Birkbeck - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_MASTERING_DISPLAY_METADATA_H -#define AVUTIL_MASTERING_DISPLAY_METADATA_H - -#include "frame.h" -#include "rational.h" - - -/** - * Mastering display metadata capable of representing the color volume of - * the display used to master the content (SMPTE 2086:2014). - * - * To be used as payload of a AVFrameSideData or AVPacketSideData with the - * appropriate type. - * - * @note The struct should be allocated with av_mastering_display_metadata_alloc() - * and its size is not a part of the public ABI. - */ -typedef struct AVMasteringDisplayMetadata { - /** - * CIE 1931 xy chromaticity coords of color primaries (r, g, b order). - */ - AVRational display_primaries[3][2]; - - /** - * CIE 1931 xy chromaticity coords of white point. - */ - AVRational white_point[2]; - - /** - * Min luminance of mastering display (cd/m^2). - */ - AVRational min_luminance; - - /** - * Max luminance of mastering display (cd/m^2). - */ - AVRational max_luminance; - - /** - * Flag indicating whether the display primaries (and white point) are set. - */ - int has_primaries; - - /** - * Flag indicating whether the luminance (min_ and max_) have been set. - */ - int has_luminance; - -} AVMasteringDisplayMetadata; - -/** - * Allocate an AVMasteringDisplayMetadata structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVMasteringDisplayMetadata filled with default values or NULL - * on failure. - */ -AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc(void); - -/** - * Allocate an AVMasteringDisplayMetadata structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVMasteringDisplayMetadata filled with default values or NULL - * on failure. - */ -AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc_size(size_t *size); - -/** - * Allocate a complete AVMasteringDisplayMetadata and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVMasteringDisplayMetadata structure to be filled by caller. - */ -AVMasteringDisplayMetadata *av_mastering_display_metadata_create_side_data(AVFrame *frame); - -/** - * Content light level needed by to transmit HDR over HDMI (CTA-861.3). - * - * To be used as payload of a AVFrameSideData or AVPacketSideData with the - * appropriate type. - * - * @note The struct should be allocated with av_content_light_metadata_alloc() - * and its size is not a part of the public ABI. - */ -typedef struct AVContentLightMetadata { - /** - * Max content light level (cd/m^2). - */ - unsigned MaxCLL; - - /** - * Max average light level per frame (cd/m^2). - */ - unsigned MaxFALL; -} AVContentLightMetadata; - -/** - * Allocate an AVContentLightMetadata structure and set its fields to - * default values. The resulting struct can be freed using av_freep(). - * - * @return An AVContentLightMetadata filled with default values or NULL - * on failure. - */ -AVContentLightMetadata *av_content_light_metadata_alloc(size_t *size); - -/** - * Allocate a complete AVContentLightMetadata and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVContentLightMetadata structure to be filled by caller. - */ -AVContentLightMetadata *av_content_light_metadata_create_side_data(AVFrame *frame); - -#endif /* AVUTIL_MASTERING_DISPLAY_METADATA_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/mathematics.h b/3rdparty/ffmpeg/include/libavutil/mathematics.h deleted file mode 100644 index 486de530f2e4f..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/mathematics.h +++ /dev/null @@ -1,300 +0,0 @@ -/* - * copyright (c) 2005-2012 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @addtogroup lavu_math - * Mathematical utilities for working with timestamp and time base. - */ - -#ifndef AVUTIL_MATHEMATICS_H -#define AVUTIL_MATHEMATICS_H - -#include -#include -#include "attributes.h" -#include "rational.h" -#include "intfloat.h" - -#ifndef M_E -#define M_E 2.7182818284590452354 /* e */ -#endif -#ifndef M_Ef -#define M_Ef 2.7182818284590452354f /* e */ -#endif -#ifndef M_LN2 -#define M_LN2 0.69314718055994530942 /* log_e 2 */ -#endif -#ifndef M_LN2f -#define M_LN2f 0.69314718055994530942f /* log_e 2 */ -#endif -#ifndef M_LN10 -#define M_LN10 2.30258509299404568402 /* log_e 10 */ -#endif -#ifndef M_LN10f -#define M_LN10f 2.30258509299404568402f /* log_e 10 */ -#endif -#ifndef M_LOG2_10 -#define M_LOG2_10 3.32192809488736234787 /* log_2 10 */ -#endif -#ifndef M_LOG2_10f -#define M_LOG2_10f 3.32192809488736234787f /* log_2 10 */ -#endif -#ifndef M_PHI -#define M_PHI 1.61803398874989484820 /* phi / golden ratio */ -#endif -#ifndef M_PHIf -#define M_PHIf 1.61803398874989484820f /* phi / golden ratio */ -#endif -#ifndef M_PI -#define M_PI 3.14159265358979323846 /* pi */ -#endif -#ifndef M_PIf -#define M_PIf 3.14159265358979323846f /* pi */ -#endif -#ifndef M_PI_2 -#define M_PI_2 1.57079632679489661923 /* pi/2 */ -#endif -#ifndef M_PI_2f -#define M_PI_2f 1.57079632679489661923f /* pi/2 */ -#endif -#ifndef M_PI_4 -#define M_PI_4 0.78539816339744830962 /* pi/4 */ -#endif -#ifndef M_PI_4f -#define M_PI_4f 0.78539816339744830962f /* pi/4 */ -#endif -#ifndef M_1_PI -#define M_1_PI 0.31830988618379067154 /* 1/pi */ -#endif -#ifndef M_1_PIf -#define M_1_PIf 0.31830988618379067154f /* 1/pi */ -#endif -#ifndef M_2_PI -#define M_2_PI 0.63661977236758134308 /* 2/pi */ -#endif -#ifndef M_2_PIf -#define M_2_PIf 0.63661977236758134308f /* 2/pi */ -#endif -#ifndef M_2_SQRTPI -#define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */ -#endif -#ifndef M_2_SQRTPIf -#define M_2_SQRTPIf 1.12837916709551257390f /* 2/sqrt(pi) */ -#endif -#ifndef M_SQRT1_2 -#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ -#endif -#ifndef M_SQRT1_2f -#define M_SQRT1_2f 0.70710678118654752440f /* 1/sqrt(2) */ -#endif -#ifndef M_SQRT2 -#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ -#endif -#ifndef M_SQRT2f -#define M_SQRT2f 1.41421356237309504880f /* sqrt(2) */ -#endif -#ifndef NAN -#define NAN av_int2float(0x7fc00000) -#endif -#ifndef INFINITY -#define INFINITY av_int2float(0x7f800000) -#endif - -/** - * @addtogroup lavu_math - * - * @{ - */ - -/** - * Rounding methods. - */ -enum AVRounding { - AV_ROUND_ZERO = 0, ///< Round toward zero. - AV_ROUND_INF = 1, ///< Round away from zero. - AV_ROUND_DOWN = 2, ///< Round toward -infinity. - AV_ROUND_UP = 3, ///< Round toward +infinity. - AV_ROUND_NEAR_INF = 5, ///< Round to nearest and halfway cases away from zero. - /** - * Flag telling rescaling functions to pass `INT64_MIN`/`MAX` through - * unchanged, avoiding special cases for #AV_NOPTS_VALUE. - * - * Unlike other values of the enumeration AVRounding, this value is a - * bitmask that must be used in conjunction with another value of the - * enumeration through a bitwise OR, in order to set behavior for normal - * cases. - * - * @code{.c} - * av_rescale_rnd(3, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); - * // Rescaling 3: - * // Calculating 3 * 1 / 2 - * // 3 / 2 is rounded up to 2 - * // => 2 - * - * av_rescale_rnd(AV_NOPTS_VALUE, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); - * // Rescaling AV_NOPTS_VALUE: - * // AV_NOPTS_VALUE == INT64_MIN - * // AV_NOPTS_VALUE is passed through - * // => AV_NOPTS_VALUE - * @endcode - */ - AV_ROUND_PASS_MINMAX = 8192, -}; - -/** - * Compute the greatest common divisor of two integer operands. - * - * @param a Operand - * @param b Operand - * @return GCD of a and b up to sign; if a >= 0 and b >= 0, return value is >= 0; - * if a == 0 and b == 0, returns 0. - */ -int64_t av_const av_gcd(int64_t a, int64_t b); - -/** - * Rescale a 64-bit integer with rounding to nearest. - * - * The operation is mathematically equivalent to `a * b / c`, but writing that - * directly can overflow. - * - * This function is equivalent to av_rescale_rnd() with #AV_ROUND_NEAR_INF. - * - * @see av_rescale_rnd(), av_rescale_q(), av_rescale_q_rnd() - */ -int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const; - -/** - * Rescale a 64-bit integer with specified rounding. - * - * The operation is mathematically equivalent to `a * b / c`, but writing that - * directly can overflow, and does not support different rounding methods. - * If the result is not representable then INT64_MIN is returned. - * - * @see av_rescale(), av_rescale_q(), av_rescale_q_rnd() - */ -int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd) av_const; - -/** - * Rescale a 64-bit integer by 2 rational numbers. - * - * The operation is mathematically equivalent to `a * bq / cq`. - * - * This function is equivalent to av_rescale_q_rnd() with #AV_ROUND_NEAR_INF. - * - * @see av_rescale(), av_rescale_rnd(), av_rescale_q_rnd() - */ -int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const; - -/** - * Rescale a 64-bit integer by 2 rational numbers with specified rounding. - * - * The operation is mathematically equivalent to `a * bq / cq`. - * - * @see av_rescale(), av_rescale_rnd(), av_rescale_q() - */ -int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, - enum AVRounding rnd) av_const; - -/** - * Compare two timestamps each in its own time base. - * - * @return One of the following values: - * - -1 if `ts_a` is before `ts_b` - * - 1 if `ts_a` is after `ts_b` - * - 0 if they represent the same position - * - * @warning - * The result of the function is undefined if one of the timestamps is outside - * the `int64_t` range when represented in the other's timebase. - */ -int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b); - -/** - * Compare the remainders of two integer operands divided by a common divisor. - * - * In other words, compare the least significant `log2(mod)` bits of integers - * `a` and `b`. - * - * @code{.c} - * av_compare_mod(0x11, 0x02, 0x10) < 0 // since 0x11 % 0x10 (0x1) < 0x02 % 0x10 (0x2) - * av_compare_mod(0x11, 0x02, 0x20) > 0 // since 0x11 % 0x20 (0x11) > 0x02 % 0x20 (0x02) - * @endcode - * - * @param a Operand - * @param b Operand - * @param mod Divisor; must be a power of 2 - * @return - * - a negative value if `a % mod < b % mod` - * - a positive value if `a % mod > b % mod` - * - zero if `a % mod == b % mod` - */ -int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod); - -/** - * Rescale a timestamp while preserving known durations. - * - * This function is designed to be called per audio packet to scale the input - * timestamp to a different time base. Compared to a simple av_rescale_q() - * call, this function is robust against possible inconsistent frame durations. - * - * The `last` parameter is a state variable that must be preserved for all - * subsequent calls for the same stream. For the first call, `*last` should be - * initialized to #AV_NOPTS_VALUE. - * - * @param[in] in_tb Input time base - * @param[in] in_ts Input timestamp - * @param[in] fs_tb Duration time base; typically this is finer-grained - * (greater) than `in_tb` and `out_tb` - * @param[in] duration Duration till the next call to this function (i.e. - * duration of the current packet/frame) - * @param[in,out] last Pointer to a timestamp expressed in terms of - * `fs_tb`, acting as a state variable - * @param[in] out_tb Output timebase - * @return Timestamp expressed in terms of `out_tb` - * - * @note In the context of this function, "duration" is in term of samples, not - * seconds. - */ -int64_t av_rescale_delta(AVRational in_tb, int64_t in_ts, AVRational fs_tb, int duration, int64_t *last, AVRational out_tb); - -/** - * Add a value to a timestamp. - * - * This function guarantees that when the same value is repeatedly added that - * no accumulation of rounding errors occurs. - * - * @param[in] ts Input timestamp - * @param[in] ts_tb Input timestamp time base - * @param[in] inc Value to be added - * @param[in] inc_tb Time base of `inc` - */ -int64_t av_add_stable(AVRational ts_tb, int64_t ts, AVRational inc_tb, int64_t inc); - -/** - * 0th order modified bessel function of the first kind. - */ -double av_bessel_i0(double x); - -/** - * @} - */ - -#endif /* AVUTIL_MATHEMATICS_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/md5.h b/3rdparty/ffmpeg/include/libavutil/md5.h deleted file mode 100644 index fc2eabdb162ff..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/md5.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_md5 - * Public header for MD5 hash function implementation. - */ - -#ifndef AVUTIL_MD5_H -#define AVUTIL_MD5_H - -#include -#include - -#include "attributes.h" - -/** - * @defgroup lavu_md5 MD5 - * @ingroup lavu_hash - * MD5 hash function implementation. - * - * @{ - */ - -extern const int av_md5_size; - -struct AVMD5; - -/** - * Allocate an AVMD5 context. - */ -struct AVMD5 *av_md5_alloc(void); - -/** - * Initialize MD5 hashing. - * - * @param ctx pointer to the function context (of size av_md5_size) - */ -void av_md5_init(struct AVMD5 *ctx); - -/** - * Update hash value. - * - * @param ctx hash function context - * @param src input data to update hash with - * @param len input data length - */ -void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, size_t len); - -/** - * Finish hashing and output digest value. - * - * @param ctx hash function context - * @param dst buffer where output digest value is stored - */ -void av_md5_final(struct AVMD5 *ctx, uint8_t *dst); - -/** - * Hash an array of data. - * - * @param dst The output buffer to write the digest into - * @param src The data to hash - * @param len The length of the data, in bytes - */ -void av_md5_sum(uint8_t *dst, const uint8_t *src, size_t len); - -/** - * @} - */ - -#endif /* AVUTIL_MD5_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/mem.h b/3rdparty/ffmpeg/include/libavutil/mem.h deleted file mode 100644 index ab7648ac5705f..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/mem.h +++ /dev/null @@ -1,607 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_mem - * Memory handling functions - */ - -#ifndef AVUTIL_MEM_H -#define AVUTIL_MEM_H - -#include -#include - -#include "attributes.h" - -/** - * @addtogroup lavu_mem - * Utilities for manipulating memory. - * - * FFmpeg has several applications of memory that are not required of a typical - * program. For example, the computing-heavy components like video decoding and - * encoding can be sped up significantly through the use of aligned memory. - * - * However, for each of FFmpeg's applications of memory, there might not be a - * recognized or standardized API for that specific use. Memory alignment, for - * instance, varies wildly depending on operating systems, architectures, and - * compilers. Hence, this component of @ref libavutil is created to make - * dealing with memory consistently possible on all platforms. - * - * @{ - */ - -/** - * @defgroup lavu_mem_attrs Function Attributes - * Function attributes applicable to memory handling functions. - * - * These function attributes can help compilers emit more useful warnings, or - * generate better code. - * @{ - */ - -/** - * @def av_malloc_attrib - * Function attribute denoting a malloc-like function. - * - * @see Function attribute `malloc` in GCC's documentation - */ - -#if AV_GCC_VERSION_AT_LEAST(3,1) - #define av_malloc_attrib __attribute__((__malloc__)) -#else - #define av_malloc_attrib -#endif - -/** - * @def av_alloc_size(...) - * Function attribute used on a function that allocates memory, whose size is - * given by the specified parameter(s). - * - * @code{.c} - * void *av_malloc(size_t size) av_alloc_size(1); - * void *av_calloc(size_t nmemb, size_t size) av_alloc_size(1, 2); - * @endcode - * - * @param ... One or two parameter indexes, separated by a comma - * - * @see Function attribute `alloc_size` in GCC's documentation - */ - -#if AV_GCC_VERSION_AT_LEAST(4,3) - #define av_alloc_size(...) __attribute__((alloc_size(__VA_ARGS__))) -#else - #define av_alloc_size(...) -#endif - -/** - * @} - */ - -/** - * @defgroup lavu_mem_funcs Heap Management - * Functions responsible for allocating, freeing, and copying memory. - * - * All memory allocation functions have a built-in upper limit of `INT_MAX` - * bytes. This may be changed with av_max_alloc(), although exercise extreme - * caution when doing so. - * - * @{ - */ - -/** - * Allocate a memory block with alignment suitable for all memory accesses - * (including vectors if available on the CPU). - * - * @param size Size in bytes for the memory block to be allocated - * @return Pointer to the allocated block, or `NULL` if the block cannot - * be allocated - * @see av_mallocz() - */ -void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1); - -/** - * Allocate a memory block with alignment suitable for all memory accesses - * (including vectors if available on the CPU) and zero all the bytes of the - * block. - * - * @param size Size in bytes for the memory block to be allocated - * @return Pointer to the allocated block, or `NULL` if it cannot be allocated - * @see av_malloc() - */ -void *av_mallocz(size_t size) av_malloc_attrib av_alloc_size(1); - -/** - * Allocate a memory block for an array with av_malloc(). - * - * The allocated memory will have size `size * nmemb` bytes. - * - * @param nmemb Number of element - * @param size Size of a single element - * @return Pointer to the allocated block, or `NULL` if the block cannot - * be allocated - * @see av_malloc() - */ -av_alloc_size(1, 2) void *av_malloc_array(size_t nmemb, size_t size); - -/** - * Allocate a memory block for an array with av_mallocz(). - * - * The allocated memory will have size `size * nmemb` bytes. - * - * @param nmemb Number of elements - * @param size Size of the single element - * @return Pointer to the allocated block, or `NULL` if the block cannot - * be allocated - * - * @see av_mallocz() - * @see av_malloc_array() - */ -void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib av_alloc_size(1, 2); - -/** - * Allocate, reallocate, or free a block of memory. - * - * If `ptr` is `NULL` and `size` > 0, allocate a new block. Otherwise, expand or - * shrink that block of memory according to `size`. - * - * @param ptr Pointer to a memory block already allocated with - * av_realloc() or `NULL` - * @param size Size in bytes of the memory block to be allocated or - * reallocated - * - * @return Pointer to a newly-reallocated block or `NULL` if the block - * cannot be reallocated - * - * @warning Unlike av_malloc(), the returned pointer is not guaranteed to be - * correctly aligned. The returned pointer must be freed after even - * if size is zero. - * @see av_fast_realloc() - * @see av_reallocp() - */ -void *av_realloc(void *ptr, size_t size) av_alloc_size(2); - -/** - * Allocate, reallocate, or free a block of memory through a pointer to a - * pointer. - * - * If `*ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is - * zero, free the memory block pointed to by `*ptr`. Otherwise, expand or - * shrink that block of memory according to `size`. - * - * @param[in,out] ptr Pointer to a pointer to a memory block already allocated - * with av_realloc(), or a pointer to `NULL`. The pointer - * is updated on success, or freed on failure. - * @param[in] size Size in bytes for the memory block to be allocated or - * reallocated - * - * @return Zero on success, an AVERROR error code on failure - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be - * correctly aligned. - */ -av_warn_unused_result -int av_reallocp(void *ptr, size_t size); - -/** - * Allocate, reallocate, or free a block of memory. - * - * This function does the same thing as av_realloc(), except: - * - It takes two size arguments and allocates `nelem * elsize` bytes, - * after checking the result of the multiplication for integer overflow. - * - It frees the input block in case of failure, thus avoiding the memory - * leak with the classic - * @code{.c} - * buf = realloc(buf); - * if (!buf) - * return -1; - * @endcode - * pattern. - */ -void *av_realloc_f(void *ptr, size_t nelem, size_t elsize); - -/** - * Allocate, reallocate, or free an array. - * - * If `ptr` is `NULL` and `nmemb` > 0, allocate a new block. - * - * @param ptr Pointer to a memory block already allocated with - * av_realloc() or `NULL` - * @param nmemb Number of elements in the array - * @param size Size of the single element of the array - * - * @return Pointer to a newly-reallocated block or NULL if the block - * cannot be reallocated - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be - * correctly aligned. The returned pointer must be freed after even if - * nmemb is zero. - * @see av_reallocp_array() - */ -av_alloc_size(2, 3) void *av_realloc_array(void *ptr, size_t nmemb, size_t size); - -/** - * Allocate, reallocate an array through a pointer to a pointer. - * - * If `*ptr` is `NULL` and `nmemb` > 0, allocate a new block. - * - * @param[in,out] ptr Pointer to a pointer to a memory block already - * allocated with av_realloc(), or a pointer to `NULL`. - * The pointer is updated on success, or freed on failure. - * @param[in] nmemb Number of elements - * @param[in] size Size of the single element - * - * @return Zero on success, an AVERROR error code on failure - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be - * correctly aligned. *ptr must be freed after even if nmemb is zero. - */ -int av_reallocp_array(void *ptr, size_t nmemb, size_t size); - -/** - * Reallocate the given buffer if it is not large enough, otherwise do nothing. - * - * If the given buffer is `NULL`, then a new uninitialized buffer is allocated. - * - * If the given buffer is not large enough, and reallocation fails, `NULL` is - * returned and `*size` is set to 0, but the original buffer is not changed or - * freed. - * - * A typical use pattern follows: - * - * @code{.c} - * uint8_t *buf = ...; - * uint8_t *new_buf = av_fast_realloc(buf, ¤t_size, size_needed); - * if (!new_buf) { - * // Allocation failed; clean up original buffer - * av_freep(&buf); - * return AVERROR(ENOMEM); - * } - * @endcode - * - * @param[in,out] ptr Already allocated buffer, or `NULL` - * @param[in,out] size Pointer to the size of buffer `ptr`. `*size` is - * updated to the new allocated size, in particular 0 - * in case of failure. - * @param[in] min_size Desired minimal size of buffer `ptr` - * @return `ptr` if the buffer is large enough, a pointer to newly reallocated - * buffer if the buffer was not large enough, or `NULL` in case of - * error - * @see av_realloc() - * @see av_fast_malloc() - */ -void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Allocate a buffer, reusing the given one if large enough. - * - * Contrary to av_fast_realloc(), the current buffer contents might not be - * preserved and on error the old buffer is freed, thus no special handling to - * avoid memleaks is necessary. - * - * `*ptr` is allowed to be `NULL`, in which case allocation always happens if - * `size_needed` is greater than 0. - * - * @code{.c} - * uint8_t *buf = ...; - * av_fast_malloc(&buf, ¤t_size, size_needed); - * if (!buf) { - * // Allocation failed; buf already freed - * return AVERROR(ENOMEM); - * } - * @endcode - * - * @param[in,out] ptr Pointer to pointer to an already allocated buffer. - * `*ptr` will be overwritten with pointer to new - * buffer on success or `NULL` on failure - * @param[in,out] size Pointer to the size of buffer `*ptr`. `*size` is - * updated to the new allocated size, in particular 0 - * in case of failure. - * @param[in] min_size Desired minimal size of buffer `*ptr` - * @see av_realloc() - * @see av_fast_mallocz() - */ -void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size); - -/** - * Allocate and clear a buffer, reusing the given one if large enough. - * - * Like av_fast_malloc(), but all newly allocated space is initially cleared. - * Reused buffer is not cleared. - * - * `*ptr` is allowed to be `NULL`, in which case allocation always happens if - * `size_needed` is greater than 0. - * - * @param[in,out] ptr Pointer to pointer to an already allocated buffer. - * `*ptr` will be overwritten with pointer to new - * buffer on success or `NULL` on failure - * @param[in,out] size Pointer to the size of buffer `*ptr`. `*size` is - * updated to the new allocated size, in particular 0 - * in case of failure. - * @param[in] min_size Desired minimal size of buffer `*ptr` - * @see av_fast_malloc() - */ -void av_fast_mallocz(void *ptr, unsigned int *size, size_t min_size); - -/** - * Free a memory block which has been allocated with a function of av_malloc() - * or av_realloc() family. - * - * @param ptr Pointer to the memory block which should be freed. - * - * @note `ptr = NULL` is explicitly allowed. - * @note It is recommended that you use av_freep() instead, to prevent leaving - * behind dangling pointers. - * @see av_freep() - */ -void av_free(void *ptr); - -/** - * Free a memory block which has been allocated with a function of av_malloc() - * or av_realloc() family, and set the pointer pointing to it to `NULL`. - * - * @code{.c} - * uint8_t *buf = av_malloc(16); - * av_free(buf); - * // buf now contains a dangling pointer to freed memory, and accidental - * // dereference of buf will result in a use-after-free, which may be a - * // security risk. - * - * uint8_t *buf = av_malloc(16); - * av_freep(&buf); - * // buf is now NULL, and accidental dereference will only result in a - * // NULL-pointer dereference. - * @endcode - * - * @param ptr Pointer to the pointer to the memory block which should be freed - * @note `*ptr = NULL` is safe and leads to no action. - * @see av_free() - */ -void av_freep(void *ptr); - -/** - * Duplicate a string. - * - * @param s String to be duplicated - * @return Pointer to a newly-allocated string containing a - * copy of `s` or `NULL` if the string cannot be allocated - * @see av_strndup() - */ -char *av_strdup(const char *s) av_malloc_attrib; - -/** - * Duplicate a substring of a string. - * - * @param s String to be duplicated - * @param len Maximum length of the resulting string (not counting the - * terminating byte) - * @return Pointer to a newly-allocated string containing a - * substring of `s` or `NULL` if the string cannot be allocated - */ -char *av_strndup(const char *s, size_t len) av_malloc_attrib; - -/** - * Duplicate a buffer with av_malloc(). - * - * @param p Buffer to be duplicated - * @param size Size in bytes of the buffer copied - * @return Pointer to a newly allocated buffer containing a - * copy of `p` or `NULL` if the buffer cannot be allocated - */ -void *av_memdup(const void *p, size_t size); - -/** - * Overlapping memcpy() implementation. - * - * @param dst Destination buffer - * @param back Number of bytes back to start copying (i.e. the initial size of - * the overlapping window); must be > 0 - * @param cnt Number of bytes to copy; must be >= 0 - * - * @note `cnt > back` is valid, this will copy the bytes we just copied, - * thus creating a repeating pattern with a period length of `back`. - */ -void av_memcpy_backptr(uint8_t *dst, int back, int cnt); - -/** - * @} - */ - -/** - * @defgroup lavu_mem_dynarray Dynamic Array - * - * Utilities to make an array grow when needed. - * - * Sometimes, the programmer would want to have an array that can grow when - * needed. The libavutil dynamic array utilities fill that need. - * - * libavutil supports two systems of appending elements onto a dynamically - * allocated array, the first one storing the pointer to the value in the - * array, and the second storing the value directly. In both systems, the - * caller is responsible for maintaining a variable containing the length of - * the array, as well as freeing of the array after use. - * - * The first system stores pointers to values in a block of dynamically - * allocated memory. Since only pointers are stored, the function does not need - * to know the size of the type. Both av_dynarray_add() and - * av_dynarray_add_nofree() implement this system. - * - * @code - * type **array = NULL; //< an array of pointers to values - * int nb = 0; //< a variable to keep track of the length of the array - * - * type to_be_added = ...; - * type to_be_added2 = ...; - * - * av_dynarray_add(&array, &nb, &to_be_added); - * if (nb == 0) - * return AVERROR(ENOMEM); - * - * av_dynarray_add(&array, &nb, &to_be_added2); - * if (nb == 0) - * return AVERROR(ENOMEM); - * - * // Now: - * // nb == 2 - * // &to_be_added == array[0] - * // &to_be_added2 == array[1] - * - * av_freep(&array); - * @endcode - * - * The second system stores the value directly in a block of memory. As a - * result, the function has to know the size of the type. av_dynarray2_add() - * implements this mechanism. - * - * @code - * type *array = NULL; //< an array of values - * int nb = 0; //< a variable to keep track of the length of the array - * - * type to_be_added = ...; - * type to_be_added2 = ...; - * - * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), NULL); - * if (!addr) - * return AVERROR(ENOMEM); - * memcpy(addr, &to_be_added, sizeof(to_be_added)); - * - * // Shortcut of the above. - * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), - * (const void *)&to_be_added2); - * if (!addr) - * return AVERROR(ENOMEM); - * - * // Now: - * // nb == 2 - * // to_be_added == array[0] - * // to_be_added2 == array[1] - * - * av_freep(&array); - * @endcode - * - * @{ - */ - -/** - * Add the pointer to an element to a dynamic array. - * - * The array to grow is supposed to be an array of pointers to - * structures, and the element to add must be a pointer to an already - * allocated structure. - * - * The array is reallocated when its size reaches powers of 2. - * Therefore, the amortized cost of adding an element is constant. - * - * In case of success, the pointer to the array is updated in order to - * point to the new grown array, and the number pointed to by `nb_ptr` - * is incremented. - * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and - * `*nb_ptr` is set to 0. - * - * @param[in,out] tab_ptr Pointer to the array to grow - * @param[in,out] nb_ptr Pointer to the number of elements in the array - * @param[in] elem Element to add - * @see av_dynarray_add_nofree(), av_dynarray2_add() - */ -void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem); - -/** - * Add an element to a dynamic array. - * - * Function has the same functionality as av_dynarray_add(), - * but it doesn't free memory on fails. It returns error code - * instead and leave current buffer untouched. - * - * @return >=0 on success, negative otherwise - * @see av_dynarray_add(), av_dynarray2_add() - */ -av_warn_unused_result -int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem); - -/** - * Add an element of size `elem_size` to a dynamic array. - * - * The array is reallocated when its number of elements reaches powers of 2. - * Therefore, the amortized cost of adding an element is constant. - * - * In case of success, the pointer to the array is updated in order to - * point to the new grown array, and the number pointed to by `nb_ptr` - * is incremented. - * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and - * `*nb_ptr` is set to 0. - * - * @param[in,out] tab_ptr Pointer to the array to grow - * @param[in,out] nb_ptr Pointer to the number of elements in the array - * @param[in] elem_size Size in bytes of an element in the array - * @param[in] elem_data Pointer to the data of the element to add. If - * `NULL`, the space of the newly added element is - * allocated but left uninitialized. - * - * @return Pointer to the data of the element to copy in the newly allocated - * space - * @see av_dynarray_add(), av_dynarray_add_nofree() - */ -void *av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size, - const uint8_t *elem_data); - -/** - * @} - */ - -/** - * @defgroup lavu_mem_misc Miscellaneous Functions - * - * Other functions related to memory allocation. - * - * @{ - */ - -/** - * Multiply two `size_t` values checking for overflow. - * - * @param[in] a Operand of multiplication - * @param[in] b Operand of multiplication - * @param[out] r Pointer to the result of the operation - * @return 0 on success, AVERROR(EINVAL) on overflow - */ -int av_size_mult(size_t a, size_t b, size_t *r); - -/** - * Set the maximum size that may be allocated in one block. - * - * The value specified with this function is effective for all libavutil's @ref - * lavu_mem_funcs "heap management functions." - * - * By default, the max value is defined as `INT_MAX`. - * - * @param max Value to be set as the new maximum size - * - * @warning Exercise extreme caution when using this function. Don't touch - * this if you do not understand the full consequence of doing so. - */ -void av_max_alloc(size_t max); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_MEM_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/motion_vector.h b/3rdparty/ffmpeg/include/libavutil/motion_vector.h deleted file mode 100644 index ec295563889a0..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/motion_vector.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_MOTION_VECTOR_H -#define AVUTIL_MOTION_VECTOR_H - -#include - -typedef struct AVMotionVector { - /** - * Where the current macroblock comes from; negative value when it comes - * from the past, positive value when it comes from the future. - * XXX: set exact relative ref frame reference instead of a +/- 1 "direction". - */ - int32_t source; - /** - * Width and height of the block. - */ - uint8_t w, h; - /** - * Absolute source position. Can be outside the frame area. - */ - int16_t src_x, src_y; - /** - * Absolute destination position. Can be outside the frame area. - */ - int16_t dst_x, dst_y; - /** - * Extra flag information. - * Currently unused. - */ - uint64_t flags; - /** - * Motion vector - * src_x = dst_x + motion_x / motion_scale - * src_y = dst_y + motion_y / motion_scale - */ - int32_t motion_x, motion_y; - uint16_t motion_scale; -} AVMotionVector; - -#endif /* AVUTIL_MOTION_VECTOR_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/murmur3.h b/3rdparty/ffmpeg/include/libavutil/murmur3.h deleted file mode 100644 index d90bc2fcd131c..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/murmur3.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (C) 2013 Reimar Döffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_murmur3 - * Public header for MurmurHash3 hash function implementation. - */ - -#ifndef AVUTIL_MURMUR3_H -#define AVUTIL_MURMUR3_H - -#include -#include - -/** - * @defgroup lavu_murmur3 Murmur3 - * @ingroup lavu_hash - * MurmurHash3 hash function implementation. - * - * MurmurHash3 is a non-cryptographic hash function, of which three - * incompatible versions were created by its inventor Austin Appleby: - * - * - 32-bit output - * - 128-bit output for 32-bit platforms - * - 128-bit output for 64-bit platforms - * - * FFmpeg only implements the last variant: 128-bit output designed for 64-bit - * platforms. Even though the hash function was designed for 64-bit platforms, - * the function in reality works on 32-bit systems too, only with reduced - * performance. - * - * @anchor lavu_murmur3_seedinfo - * By design, MurmurHash3 requires a seed to operate. In response to this, - * libavutil provides two functions for hash initiation, one that requires a - * seed (av_murmur3_init_seeded()) and one that uses a fixed arbitrary integer - * as the seed, and therefore does not (av_murmur3_init()). - * - * To make hashes comparable, you should provide the same seed for all calls to - * this hash function -- if you are supplying one yourself, that is. - * - * @{ - */ - -/** - * Allocate an AVMurMur3 hash context. - * - * @return Uninitialized hash context or `NULL` in case of error - */ -struct AVMurMur3 *av_murmur3_alloc(void); - -/** - * Initialize or reinitialize an AVMurMur3 hash context with a seed. - * - * @param[out] c Hash context - * @param[in] seed Random seed - * - * @see av_murmur3_init() - * @see @ref lavu_murmur3_seedinfo "Detailed description" on a discussion of - * seeds for MurmurHash3. - */ -void av_murmur3_init_seeded(struct AVMurMur3 *c, uint64_t seed); - -/** - * Initialize or reinitialize an AVMurMur3 hash context. - * - * Equivalent to av_murmur3_init_seeded() with a built-in seed. - * - * @param[out] c Hash context - * - * @see av_murmur3_init_seeded() - * @see @ref lavu_murmur3_seedinfo "Detailed description" on a discussion of - * seeds for MurmurHash3. - */ -void av_murmur3_init(struct AVMurMur3 *c); - -/** - * Update hash context with new data. - * - * @param[out] c Hash context - * @param[in] src Input data to update hash with - * @param[in] len Number of bytes to read from `src` - */ -void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, size_t len); - -/** - * Finish hashing and output digest value. - * - * @param[in,out] c Hash context - * @param[out] dst Buffer where output digest value is stored - */ -void av_murmur3_final(struct AVMurMur3 *c, uint8_t dst[16]); - -/** - * @} - */ - -#endif /* AVUTIL_MURMUR3_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/opt.h b/3rdparty/ffmpeg/include/libavutil/opt.h deleted file mode 100644 index ab24fae7779fb..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/opt.h +++ /dev/null @@ -1,1194 +0,0 @@ -/* - * AVOptions - * copyright (c) 2005 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_OPT_H -#define AVUTIL_OPT_H - -/** - * @file - * AVOptions - */ - -#include "rational.h" -#include "avutil.h" -#include "channel_layout.h" -#include "dict.h" -#include "log.h" -#include "pixfmt.h" -#include "samplefmt.h" - -/** - * @defgroup avoptions AVOptions - * @ingroup lavu_data - * @{ - * AVOptions provide a generic system to declare options on arbitrary structs - * ("objects"). An option can have a help text, a type and a range of possible - * values. Options may then be enumerated, read and written to. - * - * There are two modes of access to members of AVOption and its child structs. - * One is called 'native access', and refers to access from the code that - * declares the AVOption in question. The other is 'foreign access', and refers - * to access from other code. - * - * Certain struct members in this header are documented as 'native access only' - * or similar - it means that only the code that declared the AVOption in - * question is allowed to access the field. This allows us to extend the - * semantics of those fields without breaking API compatibility. - * - * @section avoptions_scope Scope of AVOptions - * - * AVOptions is designed to support any set of multimedia configuration options - * that can be defined at compile-time. Although it is mainly used to expose - * FFmpeg options, you are welcome to adapt it to your own use case. - * - * No single approach can ever fully solve the problem of configuration, - * but please submit a patch if you believe you have found a problem - * that is best solved by extending AVOptions. - * - * @section avoptions_implement Implementing AVOptions - * This section describes how to add AVOptions capabilities to a struct. - * - * All AVOptions-related information is stored in an AVClass. Therefore - * the first member of the struct should be a pointer to an AVClass describing it. - * The option field of the AVClass must be set to a NULL-terminated static array - * of AVOptions. Each AVOption must have a non-empty name, a type, a default - * value and for number-type AVOptions also a range of allowed values. It must - * also declare an offset in bytes from the start of the struct, where the field - * associated with this AVOption is located. Other fields in the AVOption struct - * should also be set when applicable, but are not required. - * - * The following example illustrates an AVOptions-enabled struct: - * @code - * typedef struct test_struct { - * const AVClass *class; - * int int_opt; - * char *str_opt; - * uint8_t *bin_opt; - * int bin_len; - * } test_struct; - * - * static const AVOption test_options[] = { - * { "test_int", "This is a test option of int type.", offsetof(test_struct, int_opt), - * AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX }, - * { "test_str", "This is a test option of string type.", offsetof(test_struct, str_opt), - * AV_OPT_TYPE_STRING }, - * { "test_bin", "This is a test option of binary type.", offsetof(test_struct, bin_opt), - * AV_OPT_TYPE_BINARY }, - * { NULL }, - * }; - * - * static const AVClass test_class = { - * .class_name = "test class", - * .item_name = av_default_item_name, - * .option = test_options, - * .version = LIBAVUTIL_VERSION_INT, - * }; - * @endcode - * - * Next, when allocating your struct, you must ensure that the AVClass pointer - * is set to the correct value. Then, av_opt_set_defaults() can be called to - * initialize defaults. After that the struct is ready to be used with the - * AVOptions API. - * - * When cleaning up, you may use the av_opt_free() function to automatically - * free all the allocated string and binary options. - * - * Continuing with the above example: - * - * @code - * test_struct *alloc_test_struct(void) - * { - * test_struct *ret = av_mallocz(sizeof(*ret)); - * ret->class = &test_class; - * av_opt_set_defaults(ret); - * return ret; - * } - * void free_test_struct(test_struct **foo) - * { - * av_opt_free(*foo); - * av_freep(foo); - * } - * @endcode - * - * @subsection avoptions_implement_nesting Nesting - * It may happen that an AVOptions-enabled struct contains another - * AVOptions-enabled struct as a member (e.g. AVCodecContext in - * libavcodec exports generic options, while its priv_data field exports - * codec-specific options). In such a case, it is possible to set up the - * parent struct to export a child's options. To do that, simply - * implement AVClass.child_next() and AVClass.child_class_iterate() in the - * parent struct's AVClass. - * Assuming that the test_struct from above now also contains a - * child_struct field: - * - * @code - * typedef struct child_struct { - * AVClass *class; - * int flags_opt; - * } child_struct; - * static const AVOption child_opts[] = { - * { "test_flags", "This is a test option of flags type.", - * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX }, - * { NULL }, - * }; - * static const AVClass child_class = { - * .class_name = "child class", - * .item_name = av_default_item_name, - * .option = child_opts, - * .version = LIBAVUTIL_VERSION_INT, - * }; - * - * void *child_next(void *obj, void *prev) - * { - * test_struct *t = obj; - * if (!prev && t->child_struct) - * return t->child_struct; - * return NULL - * } - * const AVClass child_class_iterate(void **iter) - * { - * const AVClass *c = *iter ? NULL : &child_class; - * *iter = (void*)(uintptr_t)c; - * return c; - * } - * @endcode - * Putting child_next() and child_class_iterate() as defined above into - * test_class will now make child_struct's options accessible through - * test_struct (again, proper setup as described above needs to be done on - * child_struct right after it is created). - * - * From the above example it might not be clear why both child_next() - * and child_class_iterate() are needed. The distinction is that child_next() - * iterates over actually existing objects, while child_class_iterate() - * iterates over all possible child classes. E.g. if an AVCodecContext - * was initialized to use a codec which has private options, then its - * child_next() will return AVCodecContext.priv_data and finish - * iterating. OTOH child_class_iterate() on AVCodecContext.av_class will - * iterate over all available codecs with private options. - * - * @subsection avoptions_implement_named_constants Named constants - * It is possible to create named constants for options. Simply set the unit - * field of the option the constants should apply to a string and - * create the constants themselves as options of type AV_OPT_TYPE_CONST - * with their unit field set to the same string. - * Their default_val field should contain the value of the named - * constant. - * For example, to add some named constants for the test_flags option - * above, put the following into the child_opts array: - * @code - * { "test_flags", "This is a test option of flags type.", - * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, "test_unit" }, - * { "flag1", "This is a flag with value 16", 0, AV_OPT_TYPE_CONST, { .i64 = 16 }, 0, 0, "test_unit" }, - * @endcode - * - * @section avoptions_use Using AVOptions - * This section deals with accessing options in an AVOptions-enabled struct. - * Such structs in FFmpeg are e.g. AVCodecContext in libavcodec or - * AVFormatContext in libavformat. - * - * @subsection avoptions_use_examine Examining AVOptions - * The basic functions for examining options are av_opt_next(), which iterates - * over all options defined for one object, and av_opt_find(), which searches - * for an option with the given name. - * - * The situation is more complicated with nesting. An AVOptions-enabled struct - * may have AVOptions-enabled children. Passing the AV_OPT_SEARCH_CHILDREN flag - * to av_opt_find() will make the function search children recursively. - * - * For enumerating there are basically two cases. The first is when you want to - * get all options that may potentially exist on the struct and its children - * (e.g. when constructing documentation). In that case you should call - * av_opt_child_class_iterate() recursively on the parent struct's AVClass. The - * second case is when you have an already initialized struct with all its - * children and you want to get all options that can be actually written or read - * from it. In that case you should call av_opt_child_next() recursively (and - * av_opt_next() on each result). - * - * @subsection avoptions_use_get_set Reading and writing AVOptions - * When setting options, you often have a string read directly from the - * user. In such a case, simply passing it to av_opt_set() is enough. For - * non-string type options, av_opt_set() will parse the string according to the - * option type. - * - * Similarly av_opt_get() will read any option type and convert it to a string - * which will be returned. Do not forget that the string is allocated, so you - * have to free it with av_free(). - * - * In some cases it may be more convenient to put all options into an - * AVDictionary and call av_opt_set_dict() on it. A specific case of this - * are the format/codec open functions in lavf/lavc which take a dictionary - * filled with option as a parameter. This makes it possible to set some options - * that cannot be set otherwise, since e.g. the input file format is not known - * before the file is actually opened. - */ - -/** - * An option type determines: - * - for native access, the underlying C type of the field that an AVOption - * refers to; - * - for foreign access, the semantics of accessing the option through this API, - * e.g. which av_opt_get_*() and av_opt_set_*() functions can be called, or - * what format will av_opt_get()/av_opt_set() expect/produce. - */ -enum AVOptionType{ - /** - * Underlying C type is unsigned int. - */ - AV_OPT_TYPE_FLAGS = 1, - /** - * Underlying C type is int. - */ - AV_OPT_TYPE_INT, - /** - * Underlying C type is int64_t. - */ - AV_OPT_TYPE_INT64, - /** - * Underlying C type is double. - */ - AV_OPT_TYPE_DOUBLE, - /** - * Underlying C type is float. - */ - AV_OPT_TYPE_FLOAT, - /** - * Underlying C type is a uint8_t* that is either NULL or points to a C - * string allocated with the av_malloc() family of functions. - */ - AV_OPT_TYPE_STRING, - /** - * Underlying C type is AVRational. - */ - AV_OPT_TYPE_RATIONAL, - /** - * Underlying C type is a uint8_t* that is either NULL or points to an array - * allocated with the av_malloc() family of functions. The pointer is - * immediately followed by an int containing the array length in bytes. - */ - AV_OPT_TYPE_BINARY, - /** - * Underlying C type is AVDictionary*. - */ - AV_OPT_TYPE_DICT, - /** - * Underlying C type is uint64_t. - */ - AV_OPT_TYPE_UINT64, - /** - * Special option type for declaring named constants. Does not correspond to - * an actual field in the object, offset must be 0. - */ - AV_OPT_TYPE_CONST, - /** - * Underlying C type is two consecutive integers. - */ - AV_OPT_TYPE_IMAGE_SIZE, - /** - * Underlying C type is enum AVPixelFormat. - */ - AV_OPT_TYPE_PIXEL_FMT, - /** - * Underlying C type is enum AVSampleFormat. - */ - AV_OPT_TYPE_SAMPLE_FMT, - /** - * Underlying C type is AVRational. - */ - AV_OPT_TYPE_VIDEO_RATE, - /** - * Underlying C type is int64_t. - */ - AV_OPT_TYPE_DURATION, - /** - * Underlying C type is uint8_t[4]. - */ - AV_OPT_TYPE_COLOR, - /** - * Underlying C type is int. - */ - AV_OPT_TYPE_BOOL, - /** - * Underlying C type is AVChannelLayout. - */ - AV_OPT_TYPE_CHLAYOUT, - /** - * Underlying C type is unsigned int. - */ - AV_OPT_TYPE_UINT, - - /** - * May be combined with another regular option type to declare an array - * option. - * - * For array options, @ref AVOption.offset should refer to a pointer - * corresponding to the option type. The pointer should be immediately - * followed by an unsigned int that will store the number of elements in the - * array. - */ - AV_OPT_TYPE_FLAG_ARRAY = (1 << 16), -}; - -/** - * A generic parameter which can be set by the user for muxing or encoding. - */ -#define AV_OPT_FLAG_ENCODING_PARAM (1 << 0) -/** - * A generic parameter which can be set by the user for demuxing or decoding. - */ -#define AV_OPT_FLAG_DECODING_PARAM (1 << 1) -#define AV_OPT_FLAG_AUDIO_PARAM (1 << 3) -#define AV_OPT_FLAG_VIDEO_PARAM (1 << 4) -#define AV_OPT_FLAG_SUBTITLE_PARAM (1 << 5) -/** - * The option is intended for exporting values to the caller. - */ -#define AV_OPT_FLAG_EXPORT (1 << 6) -/** - * The option may not be set through the AVOptions API, only read. - * This flag only makes sense when AV_OPT_FLAG_EXPORT is also set. - */ -#define AV_OPT_FLAG_READONLY (1 << 7) -/** - * A generic parameter which can be set by the user for bit stream filtering. - */ -#define AV_OPT_FLAG_BSF_PARAM (1 << 8) - -/** - * A generic parameter which can be set by the user at runtime. - */ -#define AV_OPT_FLAG_RUNTIME_PARAM (1 << 15) -/** - * A generic parameter which can be set by the user for filtering. - */ -#define AV_OPT_FLAG_FILTERING_PARAM (1 << 16) -/** - * Set if option is deprecated, users should refer to AVOption.help text for - * more information. - */ -#define AV_OPT_FLAG_DEPRECATED (1 << 17) -/** - * Set if option constants can also reside in child objects. - */ -#define AV_OPT_FLAG_CHILD_CONSTS (1 << 18) - -/** - * May be set as default_val for AV_OPT_TYPE_FLAG_ARRAY options. - */ -typedef struct AVOptionArrayDef { - /** - * Native access only. - * - * Default value of the option, as would be serialized by av_opt_get() (i.e. - * using the value of sep as the separator). - */ - const char *def; - - /** - * Minimum number of elements in the array. When this field is non-zero, def - * must be non-NULL and contain at least this number of elements. - */ - unsigned size_min; - /** - * Maximum number of elements in the array, 0 when unlimited. - */ - unsigned size_max; - - /** - * Separator between array elements in string representations of this - * option, used by av_opt_set() and av_opt_get(). It must be a printable - * ASCII character, excluding alphanumeric and the backslash. A comma is - * used when sep=0. - * - * The separator and the backslash must be backslash-escaped in order to - * appear in string representations of the option value. - */ - char sep; -} AVOptionArrayDef; - -/** - * AVOption - */ -typedef struct AVOption { - const char *name; - - /** - * short English help text - * @todo What about other languages? - */ - const char *help; - - /** - * Native access only. - * - * The offset relative to the context structure where the option - * value is stored. It should be 0 for named constants. - */ - int offset; - enum AVOptionType type; - - /** - * Native access only, except when documented otherwise. - * the default value for scalar options - */ - union { - int64_t i64; - double dbl; - const char *str; - /* TODO those are unused now */ - AVRational q; - - /** - * Used for AV_OPT_TYPE_FLAG_ARRAY options. May be NULL. - * - * Foreign access to some members allowed, as noted in AVOptionArrayDef - * documentation. - */ - const AVOptionArrayDef *arr; - } default_val; - double min; ///< minimum valid value for the option - double max; ///< maximum valid value for the option - - /** - * A combination of AV_OPT_FLAG_*. - */ - int flags; - - /** - * The logical unit to which the option belongs. Non-constant - * options and corresponding named constants share the same - * unit. May be NULL. - */ - const char *unit; -} AVOption; - -/** - * A single allowed range of values, or a single allowed value. - */ -typedef struct AVOptionRange { - const char *str; - /** - * Value range. - * For string ranges this represents the min/max length. - * For dimensions this represents the min/max pixel count or width/height in multi-component case. - */ - double value_min, value_max; - /** - * Value's component range. - * For string this represents the unicode range for chars, 0-127 limits to ASCII. - */ - double component_min, component_max; - /** - * Range flag. - * If set to 1 the struct encodes a range, if set to 0 a single value. - */ - int is_range; -} AVOptionRange; - -/** - * List of AVOptionRange structs. - */ -typedef struct AVOptionRanges { - /** - * Array of option ranges. - * - * Most of option types use just one component. - * Following describes multi-component option types: - * - * AV_OPT_TYPE_IMAGE_SIZE: - * component index 0: range of pixel count (width * height). - * component index 1: range of width. - * component index 2: range of height. - * - * @note To obtain multi-component version of this structure, user must - * provide AV_OPT_MULTI_COMPONENT_RANGE to av_opt_query_ranges or - * av_opt_query_ranges_default function. - * - * Multi-component range can be read as in following example: - * - * @code - * int range_index, component_index; - * AVOptionRanges *ranges; - * AVOptionRange *range[3]; //may require more than 3 in the future. - * av_opt_query_ranges(&ranges, obj, key, AV_OPT_MULTI_COMPONENT_RANGE); - * for (range_index = 0; range_index < ranges->nb_ranges; range_index++) { - * for (component_index = 0; component_index < ranges->nb_components; component_index++) - * range[component_index] = ranges->range[ranges->nb_ranges * component_index + range_index]; - * //do something with range here. - * } - * av_opt_freep_ranges(&ranges); - * @endcode - */ - AVOptionRange **range; - /** - * Number of ranges per component. - */ - int nb_ranges; - /** - * Number of components. - */ - int nb_components; -} AVOptionRanges; - -/** - * @defgroup opt_mng AVOption (un)initialization and inspection. - * @{ - */ - -/** - * Set the values of all AVOption fields to their default values. - * - * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) - */ -void av_opt_set_defaults(void *s); - -/** - * Set the values of all AVOption fields to their default values. Only these - * AVOption fields for which (opt->flags & mask) == flags will have their - * default applied to s. - * - * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) - * @param mask combination of AV_OPT_FLAG_* - * @param flags combination of AV_OPT_FLAG_* - */ -void av_opt_set_defaults2(void *s, int mask, int flags); - -/** - * Free all allocated objects in obj. - */ -void av_opt_free(void *obj); - -/** - * Iterate over all AVOptions belonging to obj. - * - * @param obj an AVOptions-enabled struct or a double pointer to an - * AVClass describing it. - * @param prev result of the previous call to av_opt_next() on this object - * or NULL - * @return next AVOption or NULL - */ -const AVOption *av_opt_next(const void *obj, const AVOption *prev); - -/** - * Iterate over AVOptions-enabled children of obj. - * - * @param prev result of a previous call to this function or NULL - * @return next AVOptions-enabled child or NULL - */ -void *av_opt_child_next(void *obj, void *prev); - -/** - * Iterate over potential AVOptions-enabled children of parent. - * - * @param iter a pointer where iteration state is stored. - * @return AVClass corresponding to next potential child or NULL - */ -const AVClass *av_opt_child_class_iterate(const AVClass *parent, void **iter); - -#define AV_OPT_SEARCH_CHILDREN (1 << 0) /**< Search in possible children of the - given object first. */ -/** - * The obj passed to av_opt_find() is fake -- only a double pointer to AVClass - * instead of a required pointer to a struct containing AVClass. This is - * useful for searching for options without needing to allocate the corresponding - * object. - */ -#define AV_OPT_SEARCH_FAKE_OBJ (1 << 1) - -/** - * In av_opt_get, return NULL if the option has a pointer type and is set to NULL, - * rather than returning an empty string. - */ -#define AV_OPT_ALLOW_NULL (1 << 2) - -/** - * May be used with av_opt_set_array() to signal that new elements should - * replace the existing ones in the indicated range. - */ -#define AV_OPT_ARRAY_REPLACE (1 << 3) - -/** - * Allows av_opt_query_ranges and av_opt_query_ranges_default to return more than - * one component for certain option types. - * @see AVOptionRanges for details. - */ -#define AV_OPT_MULTI_COMPONENT_RANGE (1 << 12) - -/** - * Look for an option in an object. Consider only options which - * have all the specified flags set. - * - * @param[in] obj A pointer to a struct whose first element is a - * pointer to an AVClass. - * Alternatively a double pointer to an AVClass, if - * AV_OPT_SEARCH_FAKE_OBJ search flag is set. - * @param[in] name The name of the option to look for. - * @param[in] unit When searching for named constants, name of the unit - * it belongs to. - * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * - * @return A pointer to the option found, or NULL if no option - * was found. - * - * @note Options found with AV_OPT_SEARCH_CHILDREN flag may not be settable - * directly with av_opt_set(). Use special calls which take an options - * AVDictionary (e.g. avformat_open_input()) to set options found with this - * flag. - */ -const AVOption *av_opt_find(void *obj, const char *name, const char *unit, - int opt_flags, int search_flags); - -/** - * Look for an option in an object. Consider only options which - * have all the specified flags set. - * - * @param[in] obj A pointer to a struct whose first element is a - * pointer to an AVClass. - * Alternatively a double pointer to an AVClass, if - * AV_OPT_SEARCH_FAKE_OBJ search flag is set. - * @param[in] name The name of the option to look for. - * @param[in] unit When searching for named constants, name of the unit - * it belongs to. - * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * @param[out] target_obj if non-NULL, an object to which the option belongs will be - * written here. It may be different from obj if AV_OPT_SEARCH_CHILDREN is present - * in search_flags. This parameter is ignored if search_flags contain - * AV_OPT_SEARCH_FAKE_OBJ. - * - * @return A pointer to the option found, or NULL if no option - * was found. - */ -const AVOption *av_opt_find2(void *obj, const char *name, const char *unit, - int opt_flags, int search_flags, void **target_obj); - -/** - * Show the obj options. - * - * @param req_flags requested flags for the options to show. Show only the - * options for which it is opt->flags & req_flags. - * @param rej_flags rejected flags for the options to show. Show only the - * options for which it is !(opt->flags & req_flags). - * @param av_log_obj log context to use for showing the options - */ -int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags); - -/** - * Extract a key-value pair from the beginning of a string. - * - * @param ropts pointer to the options string, will be updated to - * point to the rest of the string (one of the pairs_sep - * or the final NUL) - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value, for example '=' - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other, for example ':' or ',' - * @param flags flags; see the AV_OPT_FLAG_* values below - * @param rkey parsed key; must be freed using av_free() - * @param rval parsed value; must be freed using av_free() - * - * @return >=0 for success, or a negative value corresponding to an - * AVERROR code in case of error; in particular: - * AVERROR(EINVAL) if no key is present - * - */ -int av_opt_get_key_value(const char **ropts, - const char *key_val_sep, const char *pairs_sep, - unsigned flags, - char **rkey, char **rval); - -enum { - - /** - * Accept to parse a value without a key; the key will then be returned - * as NULL. - */ - AV_OPT_FLAG_IMPLICIT_KEY = 1, -}; - -/** - * @} - */ - -/** - * @defgroup opt_write Setting and modifying option values - * @{ - */ - -/** - * Parse the key/value pairs list in opts. For each key/value pair - * found, stores the value in the field in ctx that is named like the - * key. ctx must be an AVClass context, storing is done using - * AVOptions. - * - * @param opts options string to parse, may be NULL - * @param key_val_sep a 0-terminated list of characters used to - * separate key from value - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other - * @return the number of successfully set key/value pairs, or a negative - * value corresponding to an AVERROR code in case of error: - * AVERROR(EINVAL) if opts cannot be parsed, - * the error code issued by av_opt_set() if a key/value pair - * cannot be set - */ -int av_set_options_string(void *ctx, const char *opts, - const char *key_val_sep, const char *pairs_sep); - -/** - * Parse the key-value pairs list in opts. For each key=value pair found, - * set the value of the corresponding option in ctx. - * - * @param ctx the AVClass object to set options on - * @param opts the options string, key-value pairs separated by a - * delimiter - * @param shorthand a NULL-terminated array of options names for shorthand - * notation: if the first field in opts has no key part, - * the key is taken from the first element of shorthand; - * then again for the second, etc., until either opts is - * finished, shorthand is finished or a named option is - * found; after that, all options must be named - * @param key_val_sep a 0-terminated list of characters used to separate - * key from value, for example '=' - * @param pairs_sep a 0-terminated list of characters used to separate - * two pairs from each other, for example ':' or ',' - * @return the number of successfully set key=value pairs, or a negative - * value corresponding to an AVERROR code in case of error: - * AVERROR(EINVAL) if opts cannot be parsed, - * the error code issued by av_set_string3() if a key/value pair - * cannot be set - * - * Options names must use only the following characters: a-z A-Z 0-9 - . / _ - * Separators must use characters distinct from option names and from each - * other. - */ -int av_opt_set_from_string(void *ctx, const char *opts, - const char *const *shorthand, - const char *key_val_sep, const char *pairs_sep); - -/** - * Set all the options from a given dictionary on an object. - * - * @param obj a struct whose first element is a pointer to AVClass - * @param options options to process. This dictionary will be freed and replaced - * by a new one containing all options not found in obj. - * Of course this new dictionary needs to be freed by caller - * with av_dict_free(). - * - * @return 0 on success, a negative AVERROR if some option was found in obj, - * but could not be set. - * - * @see av_dict_copy() - */ -int av_opt_set_dict(void *obj, struct AVDictionary **options); - - -/** - * Set all the options from a given dictionary on an object. - * - * @param obj a struct whose first element is a pointer to AVClass - * @param options options to process. This dictionary will be freed and replaced - * by a new one containing all options not found in obj. - * Of course this new dictionary needs to be freed by caller - * with av_dict_free(). - * @param search_flags A combination of AV_OPT_SEARCH_*. - * - * @return 0 on success, a negative AVERROR if some option was found in obj, - * but could not be set. - * - * @see av_dict_copy() - */ -int av_opt_set_dict2(void *obj, struct AVDictionary **options, int search_flags); - -/** - * Copy options from src object into dest object. - * - * The underlying AVClass of both src and dest must coincide. The guarantee - * below does not apply if this is not fulfilled. - * - * Options that require memory allocation (e.g. string or binary) are malloc'ed in dest object. - * Original memory allocated for such options is freed unless both src and dest options points to the same memory. - * - * Even on error it is guaranteed that allocated options from src and dest - * no longer alias each other afterwards; in particular calling av_opt_free() - * on both src and dest is safe afterwards if dest has been memdup'ed from src. - * - * @param dest Object to copy from - * @param src Object to copy into - * @return 0 on success, negative on error - */ -int av_opt_copy(void *dest, const void *src); - -/** - * @defgroup opt_set_funcs Option setting functions - * @{ - * Those functions set the field of obj with the given name to value. - * - * @param[in] obj A struct whose first element is a pointer to an AVClass. - * @param[in] name the name of the field to set - * @param[in] val The value to set. In case of av_opt_set() if the field is not - * of a string type, then the given string is parsed. - * SI postfixes and some named scalars are supported. - * If the field is of a numeric type, it has to be a numeric or named - * scalar. Behavior with more than one scalar and +- infix operators - * is undefined. - * If the field is of a flags type, it has to be a sequence of numeric - * scalars or named flags separated by '+' or '-'. Prefixing a flag - * with '+' causes it to be set without affecting the other flags; - * similarly, '-' unsets a flag. - * If the field is of a dictionary type, it has to be a ':' separated list of - * key=value parameters. Values containing ':' special characters must be - * escaped. - * @param search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN - * is passed here, then the option may be set on a child of obj. - * - * @return 0 if the value has been set, or an AVERROR code in case of - * error: - * AVERROR_OPTION_NOT_FOUND if no matching option exists - * AVERROR(ERANGE) if the value is out of range - * AVERROR(EINVAL) if the value is not valid - */ -int av_opt_set (void *obj, const char *name, const char *val, int search_flags); -int av_opt_set_int (void *obj, const char *name, int64_t val, int search_flags); -int av_opt_set_double (void *obj, const char *name, double val, int search_flags); -int av_opt_set_q (void *obj, const char *name, AVRational val, int search_flags); -int av_opt_set_bin (void *obj, const char *name, const uint8_t *val, int size, int search_flags); -int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_flags); -int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags); -int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags); -int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags); -/** - * @note Any old chlayout present is discarded and replaced with a copy of the new one. The - * caller still owns layout and is responsible for uninitializing it. - */ -int av_opt_set_chlayout(void *obj, const char *name, const AVChannelLayout *layout, int search_flags); -/** - * @note Any old dictionary present is discarded and replaced with a copy of the new one. The - * caller still owns val is and responsible for freeing it. - */ -int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, int search_flags); - -#if FF_API_OPT_INT_LIST -/** - * Set a binary option to an integer list. - * - * @param obj AVClass object to set options on - * @param name name of the binary option - * @param val pointer to an integer list (must have the correct type with - * regard to the contents of the list) - * @param term list terminator (usually 0 or -1) - * @param flags search flags - */ -#define av_opt_set_int_list(obj, name, val, term, flags) \ - (av_int_list_length(val, term) > INT_MAX / sizeof(*(val)) ? \ - AVERROR(EINVAL) : \ - av_opt_set_bin(obj, name, (const uint8_t *)(val), \ - av_int_list_length(val, term) * sizeof(*(val)), flags)) -#endif - -/** - * Add, replace, or remove elements for an array option. Which of these - * operations is performed depends on the values of val and search_flags. - * - * @param start_elem Index of the first array element to modify; must not be - * larger than array size as returned by - * av_opt_get_array_size(). - * @param nb_elems number of array elements to modify; when val is NULL, - * start_elem+nb_elems must not be larger than array size as - * returned by av_opt_get_array_size() - * - * @param val_type Option type corresponding to the type of val, ignored when val is - * NULL. - * - * The effect of this function will will be as if av_opt_setX() - * was called for each element, where X is specified by type. - * E.g. AV_OPT_TYPE_STRING corresponds to av_opt_set(). - * - * Typically this should be the same as the scalarized type of - * the AVOption being set, but certain conversions are also - * possible - the same as those done by the corresponding - * av_opt_set*() function. E.g. any option type can be set from - * a string, numeric types can be set from int64, double, or - * rational, etc. - * - * @param val Array with nb_elems elements or NULL. - * - * When NULL, nb_elems array elements starting at start_elem are - * removed from the array. Any array elements remaining at the end - * are shifted by nb_elems towards the first element in order to keep - * the array contiguous. - * - * Otherwise (val is non-NULL), the type of val must match the - * underlying C type as documented for val_type. - * - * When AV_OPT_ARRAY_REPLACE is not set in search_flags, the array is - * enlarged by nb_elems, and the contents of val are inserted at - * start_elem. Previously existing array elements from start_elem - * onwards (if present) are shifted by nb_elems away from the first - * element in order to make space for the new elements. - * - * When AV_OPT_ARRAY_REPLACE is set in search_flags, the contents - * of val replace existing array elements from start_elem to - * start_elem+nb_elems (if present). New array size is - * max(start_elem + nb_elems, old array size). - */ -int av_opt_set_array(void *obj, const char *name, int search_flags, - unsigned int start_elem, unsigned int nb_elems, - enum AVOptionType val_type, const void *val); - -/** - * @} - * @} - */ - -/** - * @defgroup opt_read Reading option values - * @{ - */ - -/** - * @defgroup opt_get_funcs Option getting functions - * @{ - * Those functions get a value of the option with the given name from an object. - * - * @param[in] obj a struct whose first element is a pointer to an AVClass. - * @param[in] name name of the option to get. - * @param[in] search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN - * is passed here, then the option may be found in a child of obj. - * @param[out] out_val value of the option will be written here - * @return >=0 on success, a negative error code otherwise - */ -/** - * @note the returned string will be av_malloc()ed and must be av_free()ed by the caller - * - * @note if AV_OPT_ALLOW_NULL is set in search_flags in av_opt_get, and the - * option is of type AV_OPT_TYPE_STRING, AV_OPT_TYPE_BINARY or AV_OPT_TYPE_DICT - * and is set to NULL, *out_val will be set to NULL instead of an allocated - * empty string. - */ -int av_opt_get (void *obj, const char *name, int search_flags, uint8_t **out_val); -int av_opt_get_int (void *obj, const char *name, int search_flags, int64_t *out_val); -int av_opt_get_double (void *obj, const char *name, int search_flags, double *out_val); -int av_opt_get_q (void *obj, const char *name, int search_flags, AVRational *out_val); -int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_out, int *h_out); -int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt); -int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt); -int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val); -/** - * @param[out] layout The returned layout is a copy of the actual value and must - * be freed with av_channel_layout_uninit() by the caller - */ -int av_opt_get_chlayout(void *obj, const char *name, int search_flags, AVChannelLayout *layout); -/** - * @param[out] out_val The returned dictionary is a copy of the actual value and must - * be freed with av_dict_free() by the caller - */ -int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDictionary **out_val); - -/** - * For an array-type option, get the number of elements in the array. - */ -int av_opt_get_array_size(void *obj, const char *name, int search_flags, - unsigned int *out_val); - -/** - * For an array-type option, retrieve the values of one or more array elements. - * - * @param start_elem index of the first array element to retrieve - * @param nb_elems number of array elements to retrieve; start_elem+nb_elems - * must not be larger than array size as returned by - * av_opt_get_array_size() - * - * @param out_type Option type corresponding to the desired output. - * - * The array elements produced by this function will - * will be as if av_opt_getX() was called for each element, - * where X is specified by out_type. E.g. AV_OPT_TYPE_STRING - * corresponds to av_opt_get(). - * - * Typically this should be the same as the scalarized type of - * the AVOption being retrieved, but certain conversions are - * also possible - the same as those done by the corresponding - * av_opt_get*() function. E.g. any option type can be retrieved - * as a string, numeric types can be retrieved as int64, double, - * or rational, etc. - * - * @param out_val Array with nb_elems members into which the output will be - * written. The array type must match the underlying C type as - * documented for out_type, and be zeroed on entry to this - * function. - * - * For dynamically allocated types (strings, binary, dicts, - * etc.), the result is owned and freed by the caller. - */ -int av_opt_get_array(void *obj, const char *name, int search_flags, - unsigned int start_elem, unsigned int nb_elems, - enum AVOptionType out_type, void *out_val); -/** - * @} - */ - -/** - * @defgroup opt_eval_funcs Evaluating option strings - * @{ - * This group of functions can be used to evaluate option strings - * and get numbers out of them. They do the same thing as av_opt_set(), - * except the result is written into the caller-supplied pointer. - * - * @param obj a struct whose first element is a pointer to AVClass. - * @param o an option for which the string is to be evaluated. - * @param val string to be evaluated. - * @param *_out value of the string will be written here. - * - * @return 0 on success, a negative number on failure. - */ -int av_opt_eval_flags (void *obj, const AVOption *o, const char *val, int *flags_out); -int av_opt_eval_int (void *obj, const AVOption *o, const char *val, int *int_out); -int av_opt_eval_uint (void *obj, const AVOption *o, const char *val, unsigned *uint_out); -int av_opt_eval_int64 (void *obj, const AVOption *o, const char *val, int64_t *int64_out); -int av_opt_eval_float (void *obj, const AVOption *o, const char *val, float *float_out); -int av_opt_eval_double(void *obj, const AVOption *o, const char *val, double *double_out); -int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational *q_out); -/** - * @} - */ - -#if FF_API_OPT_PTR -/** - * Gets a pointer to the requested field in a struct. - * This function allows accessing a struct even when its fields are moved or - * renamed since the application making the access has been compiled, - * - * @returns a pointer to the field, it can be cast to the correct type and read - * or written to. - * - * @deprecated direct access to AVOption-exported fields is not supported - */ -attribute_deprecated -void *av_opt_ptr(const AVClass *avclass, void *obj, const char *name); -#endif - -/** - * Check if given option is set to its default value. - * - * Options o must belong to the obj. This function must not be called to check child's options state. - * @see av_opt_is_set_to_default_by_name(). - * - * @param obj AVClass object to check option on - * @param o option to be checked - * @return >0 when option is set to its default, - * 0 when option is not set its default, - * <0 on error - */ -int av_opt_is_set_to_default(void *obj, const AVOption *o); - -/** - * Check if given option is set to its default value. - * - * @param obj AVClass object to check option on - * @param name option name - * @param search_flags combination of AV_OPT_SEARCH_* - * @return >0 when option is set to its default, - * 0 when option is not set its default, - * <0 on error - */ -int av_opt_is_set_to_default_by_name(void *obj, const char *name, int search_flags); - -/** - * Check whether a particular flag is set in a flags field. - * - * @param field_name the name of the flag field option - * @param flag_name the name of the flag to check - * @return non-zero if the flag is set, zero if the flag isn't set, - * isn't of the right type, or the flags field doesn't exist. - */ -int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name); - -#define AV_OPT_SERIALIZE_SKIP_DEFAULTS 0x00000001 ///< Serialize options that are not set to default values only. -#define AV_OPT_SERIALIZE_OPT_FLAGS_EXACT 0x00000002 ///< Serialize options that exactly match opt_flags only. -#define AV_OPT_SERIALIZE_SEARCH_CHILDREN 0x00000004 ///< Serialize options in possible children of the given object. - -/** - * Serialize object's options. - * - * Create a string containing object's serialized options. - * Such string may be passed back to av_opt_set_from_string() in order to restore option values. - * A key/value or pairs separator occurring in the serialized value or - * name string are escaped through the av_escape() function. - * - * @param[in] obj AVClass object to serialize - * @param[in] opt_flags serialize options with all the specified flags set (AV_OPT_FLAG) - * @param[in] flags combination of AV_OPT_SERIALIZE_* flags - * @param[out] buffer Pointer to buffer that will be allocated with string containing serialized options. - * Buffer must be freed by the caller when is no longer needed. - * @param[in] key_val_sep character used to separate key from value - * @param[in] pairs_sep character used to separate two pairs from each other - * @return >= 0 on success, negative on error - * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. - */ -int av_opt_serialize(void *obj, int opt_flags, int flags, char **buffer, - const char key_val_sep, const char pairs_sep); - -/** - * @} - */ - -/** - * Free an AVOptionRanges struct and set it to NULL. - */ -void av_opt_freep_ranges(AVOptionRanges **ranges); - -/** - * Get a list of allowed ranges for the given option. - * - * The returned list may depend on other fields in obj like for example profile. - * - * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored - * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance - * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges - * - * The result must be freed with av_opt_freep_ranges. - * - * @return number of components returned on success, a negative error code otherwise - */ -int av_opt_query_ranges(AVOptionRanges **, void *obj, const char *key, int flags); - -/** - * Get a default list of allowed ranges for the given option. - * - * This list is constructed without using the AVClass.query_ranges() callback - * and can be used as fallback from within the callback. - * - * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored - * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance - * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges - * - * The result must be freed with av_opt_free_ranges. - * - * @return number of components returned on success, a negative error code otherwise - */ -int av_opt_query_ranges_default(AVOptionRanges **, void *obj, const char *key, int flags); - -/** - * @} - */ - -#endif /* AVUTIL_OPT_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/parseutils.h b/3rdparty/ffmpeg/include/libavutil/parseutils.h deleted file mode 100644 index dad5c2775b26a..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/parseutils.h +++ /dev/null @@ -1,197 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PARSEUTILS_H -#define AVUTIL_PARSEUTILS_H - -#include - -#include "rational.h" - -/** - * @file - * misc parsing utilities - */ - -/** - * Parse str and store the parsed ratio in q. - * - * Note that a ratio with infinite (1/0) or negative value is - * considered valid, so you should check on the returned value if you - * want to exclude those values. - * - * The undefined value can be expressed using the "0:0" string. - * - * @param[in,out] q pointer to the AVRational which will contain the ratio - * @param[in] str the string to parse: it has to be a string in the format - * num:den, a float number or an expression - * @param[in] max the maximum allowed numerator and denominator - * @param[in] log_offset log level offset which is applied to the log - * level of log_ctx - * @param[in] log_ctx parent logging context - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_ratio(AVRational *q, const char *str, int max, - int log_offset, void *log_ctx); - -#define av_parse_ratio_quiet(rate, str, max) \ - av_parse_ratio(rate, str, max, AV_LOG_MAX_OFFSET, NULL) - -/** - * Parse str and put in width_ptr and height_ptr the detected values. - * - * @param[in,out] width_ptr pointer to the variable which will contain the detected - * width value - * @param[in,out] height_ptr pointer to the variable which will contain the detected - * height value - * @param[in] str the string to parse: it has to be a string in the format - * width x height or a valid video size abbreviation. - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str); - -/** - * Parse str and store the detected values in *rate. - * - * @param[in,out] rate pointer to the AVRational which will contain the detected - * frame rate - * @param[in] str the string to parse: it has to be a string in the format - * rate_num / rate_den, a float number or a valid video rate abbreviation - * @return >= 0 on success, a negative error code otherwise - */ -int av_parse_video_rate(AVRational *rate, const char *str); - -/** - * Put the RGBA values that correspond to color_string in rgba_color. - * - * @param rgba_color 4-elements array of uint8_t values, where the respective - * red, green, blue and alpha component values are written. - * @param color_string a string specifying a color. It can be the name of - * a color (case insensitive match) or a [0x|#]RRGGBB[AA] sequence, - * possibly followed by "@" and a string representing the alpha - * component. - * The alpha component may be a string composed by "0x" followed by an - * hexadecimal number or a decimal number between 0.0 and 1.0, which - * represents the opacity value (0x00/0.0 means completely transparent, - * 0xff/1.0 completely opaque). - * If the alpha component is not specified then 0xff is assumed. - * The string "random" will result in a random color. - * @param slen length of the initial part of color_string containing the - * color. It can be set to -1 if color_string is a null terminated string - * containing nothing else than the color. - * @param log_ctx a pointer to an arbitrary struct of which the first field - * is a pointer to an AVClass struct (used for av_log()). Can be NULL. - * @return >= 0 in case of success, a negative value in case of - * failure (for example if color_string cannot be parsed). - */ -int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen, - void *log_ctx); - -/** - * Get the name of a color from the internal table of hard-coded named - * colors. - * - * This function is meant to enumerate the color names recognized by - * av_parse_color(). - * - * @param color_idx index of the requested color, starting from 0 - * @param rgb if not NULL, will point to a 3-elements array with the color value in RGB - * @return the color name string or NULL if color_idx is not in the array - */ -const char *av_get_known_color_name(int color_idx, const uint8_t **rgb); - -/** - * Parse timestr and return in *time a corresponding number of - * microseconds. - * - * @param timeval puts here the number of microseconds corresponding - * to the string in timestr. If the string represents a duration, it - * is the number of microseconds contained in the time interval. If - * the string is a date, is the number of microseconds since 1st of - * January, 1970 up to the time of the parsed date. If timestr cannot - * be successfully parsed, set *time to INT64_MIN. - - * @param timestr a string representing a date or a duration. - * - If a date the syntax is: - * @code - * [{YYYY-MM-DD|YYYYMMDD}[T|t| ]]{{HH:MM:SS[.m...]]]}|{HHMMSS[.m...]]]}}[Z] - * now - * @endcode - * If the value is "now" it takes the current time. - * Time is local time unless Z is appended, in which case it is - * interpreted as UTC. - * If the year-month-day part is not specified it takes the current - * year-month-day. - * - If a duration the syntax is: - * @code - * [-][HH:]MM:SS[.m...] - * [-]S+[.m...] - * @endcode - * @param duration flag which tells how to interpret timestr, if not - * zero timestr is interpreted as a duration, otherwise as a date - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise - */ -int av_parse_time(int64_t *timeval, const char *timestr, int duration); - -/** - * Attempt to find a specific tag in a URL. - * - * syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done. - * Return 1 if found. - */ -int av_find_info_tag(char *arg, int arg_size, const char *tag1, const char *info); - -/** - * Simplified version of strptime - * - * Parse the input string p according to the format string fmt and - * store its results in the structure dt. - * This implementation supports only a subset of the formats supported - * by the standard strptime(). - * - * The supported input field descriptors are listed below. - * - `%%H`: the hour as a decimal number, using a 24-hour clock, in the - * range '00' through '23' - * - `%%J`: hours as a decimal number, in the range '0' through INT_MAX - * - `%%M`: the minute as a decimal number, using a 24-hour clock, in the - * range '00' through '59' - * - `%%S`: the second as a decimal number, using a 24-hour clock, in the - * range '00' through '59' - * - `%%Y`: the year as a decimal number, using the Gregorian calendar - * - `%%m`: the month as a decimal number, in the range '1' through '12' - * - `%%d`: the day of the month as a decimal number, in the range '1' - * through '31' - * - `%%T`: alias for `%%H:%%M:%%S` - * - `%%`: a literal `%` - * - * @return a pointer to the first character not processed in this function - * call. In case the input string contains more characters than - * required by the format string the return value points right after - * the last consumed input character. In case the whole input string - * is consumed the return value points to the null byte at the end of - * the string. On failure NULL is returned. - */ -char *av_small_strptime(const char *p, const char *fmt, struct tm *dt); - -/** - * Convert the decomposed UTC time in tm to a time_t value. - */ -time_t av_timegm(struct tm *tm); - -#endif /* AVUTIL_PARSEUTILS_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/pixdesc.h b/3rdparty/ffmpeg/include/libavutil/pixdesc.h deleted file mode 100644 index ba2f6328141b3..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/pixdesc.h +++ /dev/null @@ -1,440 +0,0 @@ -/* - * pixel format descriptor - * Copyright (c) 2009 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXDESC_H -#define AVUTIL_PIXDESC_H - -#include - -#include "attributes.h" -#include "pixfmt.h" - -typedef struct AVComponentDescriptor { - /** - * Which of the 4 planes contains the component. - */ - int plane; - - /** - * Number of elements between 2 horizontally consecutive pixels. - * Elements are bits for bitstream formats, bytes otherwise. - */ - int step; - - /** - * Number of elements before the component of the first pixel. - * Elements are bits for bitstream formats, bytes otherwise. - */ - int offset; - - /** - * Number of least significant bits that must be shifted away - * to get the value. - */ - int shift; - - /** - * Number of bits in the component. - */ - int depth; -} AVComponentDescriptor; - -/** - * Descriptor that unambiguously describes how the bits of a pixel are - * stored in the up to 4 data planes of an image. It also stores the - * subsampling factors and number of components. - * - * @note This is separate of the colorspace (RGB, YCbCr, YPbPr, JPEG-style YUV - * and all the YUV variants) AVPixFmtDescriptor just stores how values - * are stored not what these values represent. - */ -typedef struct AVPixFmtDescriptor { - const char *name; - uint8_t nb_components; ///< The number of components each pixel has, (1-4) - - /** - * Amount to shift the luma width right to find the chroma width. - * For YV12 this is 1 for example. - * chroma_width = AV_CEIL_RSHIFT(luma_width, log2_chroma_w) - * The note above is needed to ensure rounding up. - * This value only refers to the chroma components. - */ - uint8_t log2_chroma_w; - - /** - * Amount to shift the luma height right to find the chroma height. - * For YV12 this is 1 for example. - * chroma_height= AV_CEIL_RSHIFT(luma_height, log2_chroma_h) - * The note above is needed to ensure rounding up. - * This value only refers to the chroma components. - */ - uint8_t log2_chroma_h; - - /** - * Combination of AV_PIX_FMT_FLAG_... flags. - */ - uint64_t flags; - - /** - * Parameters that describe how pixels are packed. - * If the format has 1 or 2 components, then luma is 0. - * If the format has 3 or 4 components: - * if the RGB flag is set then 0 is red, 1 is green and 2 is blue; - * otherwise 0 is luma, 1 is chroma-U and 2 is chroma-V. - * - * If present, the Alpha channel is always the last component. - */ - AVComponentDescriptor comp[4]; - - /** - * Alternative comma-separated names. - */ - const char *alias; -} AVPixFmtDescriptor; - -/** - * Pixel format is big-endian. - */ -#define AV_PIX_FMT_FLAG_BE (1 << 0) -/** - * Pixel format has a palette in data[1], values are indexes in this palette. - */ -#define AV_PIX_FMT_FLAG_PAL (1 << 1) -/** - * All values of a component are bit-wise packed end to end. - */ -#define AV_PIX_FMT_FLAG_BITSTREAM (1 << 2) -/** - * Pixel format is an HW accelerated format. - */ -#define AV_PIX_FMT_FLAG_HWACCEL (1 << 3) -/** - * At least one pixel component is not in the first data plane. - */ -#define AV_PIX_FMT_FLAG_PLANAR (1 << 4) -/** - * The pixel format contains RGB-like data (as opposed to YUV/grayscale). - */ -#define AV_PIX_FMT_FLAG_RGB (1 << 5) - -/** - * The pixel format has an alpha channel. This is set on all formats that - * support alpha in some way, including AV_PIX_FMT_PAL8. The alpha is always - * straight, never pre-multiplied. - * - * If a codec or a filter does not support alpha, it should set all alpha to - * opaque, or use the equivalent pixel formats without alpha component, e.g. - * AV_PIX_FMT_RGB0 (or AV_PIX_FMT_RGB24 etc.) instead of AV_PIX_FMT_RGBA. - */ -#define AV_PIX_FMT_FLAG_ALPHA (1 << 7) - -/** - * The pixel format is following a Bayer pattern - */ -#define AV_PIX_FMT_FLAG_BAYER (1 << 8) - -/** - * The pixel format contains IEEE-754 floating point values. Precision (double, - * single, or half) should be determined by the pixel size (64, 32, or 16 bits). - */ -#define AV_PIX_FMT_FLAG_FLOAT (1 << 9) - -/** - * The pixel format contains XYZ-like data (as opposed to YUV/RGB/grayscale). - */ -#define AV_PIX_FMT_FLAG_XYZ (1 << 10) - -/** - * Return the number of bits per pixel used by the pixel format - * described by pixdesc. Note that this is not the same as the number - * of bits per sample. - * - * The returned number of bits refers to the number of bits actually - * used for storing the pixel information, that is padding bits are - * not counted. - */ -int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc); - -/** - * Return the number of bits per pixel for the pixel format - * described by pixdesc, including any padding or unused bits. - */ -int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc); - -/** - * @return a pixel format descriptor for provided pixel format or NULL if - * this pixel format is unknown. - */ -const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt); - -/** - * Iterate over all pixel format descriptors known to libavutil. - * - * @param prev previous descriptor. NULL to get the first descriptor. - * - * @return next descriptor or NULL after the last descriptor - */ -const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev); - -/** - * @return an AVPixelFormat id described by desc, or AV_PIX_FMT_NONE if desc - * is not a valid pointer to a pixel format descriptor. - */ -enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc); - -/** - * Utility function to access log2_chroma_w log2_chroma_h from - * the pixel format AVPixFmtDescriptor. - * - * @param[in] pix_fmt the pixel format - * @param[out] h_shift store log2_chroma_w (horizontal/width shift) - * @param[out] v_shift store log2_chroma_h (vertical/height shift) - * - * @return 0 on success, AVERROR(ENOSYS) on invalid or unknown pixel format - */ -int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, - int *h_shift, int *v_shift); - -/** - * @return number of planes in pix_fmt, a negative AVERROR if pix_fmt is not a - * valid pixel format. - */ -int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt); - -/** - * @return the name for provided color range or NULL if unknown. - */ -const char *av_color_range_name(enum AVColorRange range); - -/** - * @return the AVColorRange value for name or an AVError if not found. - */ -int av_color_range_from_name(const char *name); - -/** - * @return the name for provided color primaries or NULL if unknown. - */ -const char *av_color_primaries_name(enum AVColorPrimaries primaries); - -/** - * @return the AVColorPrimaries value for name or an AVError if not found. - */ -int av_color_primaries_from_name(const char *name); - -/** - * @return the name for provided color transfer or NULL if unknown. - */ -const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer); - -/** - * @return the AVColorTransferCharacteristic value for name or an AVError if not found. - */ -int av_color_transfer_from_name(const char *name); - -/** - * @return the name for provided color space or NULL if unknown. - */ -const char *av_color_space_name(enum AVColorSpace space); - -/** - * @return the AVColorSpace value for name or an AVError if not found. - */ -int av_color_space_from_name(const char *name); - -/** - * @return the name for provided chroma location or NULL if unknown. - */ -const char *av_chroma_location_name(enum AVChromaLocation location); - -/** - * @return the AVChromaLocation value for name or an AVError if not found. - */ -int av_chroma_location_from_name(const char *name); - -/** - * Converts AVChromaLocation to swscale x/y chroma position. - * - * The positions represent the chroma (0,0) position in a coordinates system - * with luma (0,0) representing the origin and luma(1,1) representing 256,256 - * - * @param xpos horizontal chroma sample position - * @param ypos vertical chroma sample position - */ -int av_chroma_location_enum_to_pos(int *xpos, int *ypos, enum AVChromaLocation pos); - -/** - * Converts swscale x/y chroma position to AVChromaLocation. - * - * The positions represent the chroma (0,0) position in a coordinates system - * with luma (0,0) representing the origin and luma(1,1) representing 256,256 - * - * @param xpos horizontal chroma sample position - * @param ypos vertical chroma sample position - */ -enum AVChromaLocation av_chroma_location_pos_to_enum(int xpos, int ypos); - -/** - * Return the pixel format corresponding to name. - * - * If there is no pixel format with name name, then looks for a - * pixel format with the name corresponding to the native endian - * format of name. - * For example in a little-endian system, first looks for "gray16", - * then for "gray16le". - * - * Finally if no pixel format has been found, returns AV_PIX_FMT_NONE. - */ -enum AVPixelFormat av_get_pix_fmt(const char *name); - -/** - * Return the short name for a pixel format, NULL in case pix_fmt is - * unknown. - * - * @see av_get_pix_fmt(), av_get_pix_fmt_string() - */ -const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt); - -/** - * Print in buf the string corresponding to the pixel format with - * number pix_fmt, or a header if pix_fmt is negative. - * - * @param buf the buffer where to write the string - * @param buf_size the size of buf - * @param pix_fmt the number of the pixel format to print the - * corresponding info string, or a negative value to print the - * corresponding header. - */ -char *av_get_pix_fmt_string(char *buf, int buf_size, - enum AVPixelFormat pix_fmt); - -/** - * Read a line from an image, and write the values of the - * pixel format component c to dst. - * - * @param data the array containing the pointers to the planes of the image - * @param linesize the array containing the linesizes of the image - * @param desc the pixel format descriptor for the image - * @param x the horizontal coordinate of the first pixel to read - * @param y the vertical coordinate of the first pixel to read - * @param w the width of the line to read, that is the number of - * values to write to dst - * @param read_pal_component if not zero and the format is a paletted - * format writes the values corresponding to the palette - * component c in data[1] to dst, rather than the palette indexes in - * data[0]. The behavior is undefined if the format is not paletted. - * @param dst_element_size size of elements in dst array (2 or 4 byte) - */ -void av_read_image_line2(void *dst, const uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w, int read_pal_component, - int dst_element_size); - -void av_read_image_line(uint16_t *dst, const uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w, int read_pal_component); - -/** - * Write the values from src to the pixel format component c of an - * image line. - * - * @param src array containing the values to write - * @param data the array containing the pointers to the planes of the - * image to write into. It is supposed to be zeroed. - * @param linesize the array containing the linesizes of the image - * @param desc the pixel format descriptor for the image - * @param x the horizontal coordinate of the first pixel to write - * @param y the vertical coordinate of the first pixel to write - * @param w the width of the line to write, that is the number of - * values to write to the image line - * @param src_element_size size of elements in src array (2 or 4 byte) - */ -void av_write_image_line2(const void *src, uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w, int src_element_size); - -void av_write_image_line(const uint16_t *src, uint8_t *data[4], - const int linesize[4], const AVPixFmtDescriptor *desc, - int x, int y, int c, int w); - -/** - * Utility function to swap the endianness of a pixel format. - * - * @param[in] pix_fmt the pixel format - * - * @return pixel format with swapped endianness if it exists, - * otherwise AV_PIX_FMT_NONE - */ -enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt); - -#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */ -#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */ -#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */ -#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */ -#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */ -#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */ -#define FF_LOSS_EXCESS_RESOLUTION 0x0040 /**< loss due to unneeded extra resolution */ -#define FF_LOSS_EXCESS_DEPTH 0x0080 /**< loss due to unneeded extra color depth */ - - -/** - * Compute what kind of losses will occur when converting from one specific - * pixel format to another. - * When converting from one pixel format to another, information loss may occur. - * For example, when converting from RGB24 to GRAY, the color information will - * be lost. Similarly, other losses occur when converting from some formats to - * other formats. These losses can involve loss of chroma, but also loss of - * resolution, loss of color depth, loss due to the color space conversion, loss - * of the alpha bits or loss due to color quantization. - * av_get_fix_fmt_loss() informs you about the various types of losses - * which will occur when converting from one pixel format to another. - * - * @param[in] dst_pix_fmt destination pixel format - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @return Combination of flags informing you what kind of losses will occur - * (maximum loss for an invalid dst_pix_fmt). - */ -int av_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, - enum AVPixelFormat src_pix_fmt, - int has_alpha); - -/** - * Compute what kind of losses will occur when converting from one specific - * pixel format to another. - * When converting from one pixel format to another, information loss may occur. - * For example, when converting from RGB24 to GRAY, the color information will - * be lost. Similarly, other losses occur when converting from some formats to - * other formats. These losses can involve loss of chroma, but also loss of - * resolution, loss of color depth, loss due to the color space conversion, loss - * of the alpha bits or loss due to color quantization. - * av_get_fix_fmt_loss() informs you about the various types of losses - * which will occur when converting from one pixel format to another. - * - * @param[in] dst_pix_fmt destination pixel format - * @param[in] src_pix_fmt source pixel format - * @param[in] has_alpha Whether the source pixel format alpha channel is used. - * @return Combination of flags informing you what kind of losses will occur - * (maximum loss for an invalid dst_pix_fmt). - */ -enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, - enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); - -#endif /* AVUTIL_PIXDESC_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/pixelutils.h b/3rdparty/ffmpeg/include/libavutil/pixelutils.h deleted file mode 100644 index 7a997cde1c8af..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/pixelutils.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXELUTILS_H -#define AVUTIL_PIXELUTILS_H - -#include -#include - -/** - * Sum of abs(src1[x] - src2[x]) - */ -typedef int (*av_pixelutils_sad_fn)(const uint8_t *src1, ptrdiff_t stride1, - const uint8_t *src2, ptrdiff_t stride2); - -/** - * Get a potentially optimized pointer to a Sum-of-absolute-differences - * function (see the av_pixelutils_sad_fn prototype). - * - * @param w_bits 1< - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_PIXFMT_H -#define AVUTIL_PIXFMT_H - -/** - * @file - * pixel format definitions - */ - -#include "libavutil/avconfig.h" -#include "version.h" - -#define AVPALETTE_SIZE 1024 -#define AVPALETTE_COUNT 256 - -/** - * Maximum number of planes in any pixel format. - * This should be used when a maximum is needed, but code should not - * be written to require a maximum for no good reason. - */ -#define AV_VIDEO_MAX_PLANES 4 - -/** - * Pixel format. - * - * @note - * AV_PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA - * color is put together as: - * (A << 24) | (R << 16) | (G << 8) | B - * This is stored as BGRA on little-endian CPU architectures and ARGB on - * big-endian CPUs. - * - * @note - * If the resolution is not a multiple of the chroma subsampling factor - * then the chroma plane resolution must be rounded up. - * - * @par - * When the pixel format is palettized RGB32 (AV_PIX_FMT_PAL8), the palettized - * image data is stored in AVFrame.data[0]. The palette is transported in - * AVFrame.data[1], is 1024 bytes long (256 4-byte entries) and is - * formatted the same as in AV_PIX_FMT_RGB32 described above (i.e., it is - * also endian-specific). Note also that the individual RGB32 palette - * components stored in AVFrame.data[1] should be in the range 0..255. - * This is important as many custom PAL8 video codecs that were designed - * to run on the IBM VGA graphics adapter use 6-bit palette components. - * - * @par - * For all the 8 bits per pixel formats, an RGB32 palette is in data[1] like - * for pal8. This palette is filled in automatically by the function - * allocating the picture. - */ -enum AVPixelFormat { - AV_PIX_FMT_NONE = -1, - AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) - AV_PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr - AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... - AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... - AV_PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) - AV_PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) - AV_PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) - AV_PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) - AV_PIX_FMT_GRAY8, ///< Y , 8bpp - AV_PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb - AV_PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb - AV_PIX_FMT_PAL8, ///< 8 bits with AV_PIX_FMT_RGB32 palette - AV_PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range - AV_PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting color_range - AV_PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting color_range - AV_PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 - AV_PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 - AV_PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) - AV_PIX_FMT_BGR4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits - AV_PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) - AV_PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)3R 3G 2B(lsb) - AV_PIX_FMT_RGB4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits - AV_PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) - AV_PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V) - AV_PIX_FMT_NV21, ///< as above, but U and V bytes are swapped - - AV_PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... - AV_PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... - AV_PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... - AV_PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... - - AV_PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian - AV_PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian - AV_PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples) - AV_PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range - AV_PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples) - AV_PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian - AV_PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian - - AV_PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian - AV_PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian - AV_PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian , X=unused/undefined - AV_PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined - - AV_PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian - AV_PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian - AV_PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefined - AV_PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined - - /** - * Hardware acceleration through VA-API, data[3] contains a - * VASurfaceID. - */ - AV_PIX_FMT_VAAPI, - - AV_PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer - - AV_PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), big-endian, X=unused/undefined - AV_PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), big-endian, X=unused/undefined - AV_PIX_FMT_YA8, ///< 8 bits gray, 8 bits alpha - - AV_PIX_FMT_Y400A = AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 - AV_PIX_FMT_GRAY8A= AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 - - AV_PIX_FMT_BGR48BE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian - AV_PIX_FMT_BGR48LE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as little-endian - - /** - * The following 12 formats have the disadvantage of needing 1 format for each bit depth. - * Notice that each 9/10 bits sample is stored in 16 bits with extra padding. - * If you want to support multiple bit depths, then using AV_PIX_FMT_YUV420P16* with the bpp stored separately is better. - */ - AV_PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp - AV_PIX_FMT_GBR24P = AV_PIX_FMT_GBRP, // alias for #AV_PIX_FMT_GBRP - AV_PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big-endian - AV_PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little-endian - AV_PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big-endian - AV_PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little-endian - AV_PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big-endian - AV_PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little-endian - AV_PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) - AV_PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) - AV_PIX_FMT_YUVA420P9BE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian - AV_PIX_FMT_YUVA420P9LE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian - AV_PIX_FMT_YUVA422P9BE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian - AV_PIX_FMT_YUVA422P9LE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian - AV_PIX_FMT_YUVA444P9BE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian - AV_PIX_FMT_YUVA444P9LE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian - AV_PIX_FMT_YUVA420P10BE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) - AV_PIX_FMT_YUVA420P10LE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) - AV_PIX_FMT_YUVA422P10BE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA422P10LE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA444P10BE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA444P10LE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA420P16BE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) - AV_PIX_FMT_YUVA420P16LE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) - AV_PIX_FMT_YUVA422P16BE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA422P16LE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) - AV_PIX_FMT_YUVA444P16BE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) - AV_PIX_FMT_YUVA444P16LE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) - - AV_PIX_FMT_VDPAU, ///< HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface - - AV_PIX_FMT_XYZ12LE, ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as little-endian, the 4 lower bits are set to 0 - AV_PIX_FMT_XYZ12BE, ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as big-endian, the 4 lower bits are set to 0 - AV_PIX_FMT_NV16, ///< interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) - AV_PIX_FMT_NV20LE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_NV20BE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - - AV_PIX_FMT_RGBA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - AV_PIX_FMT_RGBA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian - AV_PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - AV_PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian - - AV_PIX_FMT_YVYU422, ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb - - AV_PIX_FMT_YA16BE, ///< 16 bits gray, 16 bits alpha (big-endian) - AV_PIX_FMT_YA16LE, ///< 16 bits gray, 16 bits alpha (little-endian) - - AV_PIX_FMT_GBRAP, ///< planar GBRA 4:4:4:4 32bpp - AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian - AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian - /** - * HW acceleration through QSV, data[3] contains a pointer to the - * mfxFrameSurface1 structure. - * - * Before FFmpeg 5.0: - * mfxFrameSurface1.Data.MemId contains a pointer when importing - * the following frames as QSV frames: - * - * VAAPI: - * mfxFrameSurface1.Data.MemId contains a pointer to VASurfaceID - * - * DXVA2: - * mfxFrameSurface1.Data.MemId contains a pointer to IDirect3DSurface9 - * - * FFmpeg 5.0 and above: - * mfxFrameSurface1.Data.MemId contains a pointer to the mfxHDLPair - * structure when importing the following frames as QSV frames: - * - * VAAPI: - * mfxHDLPair.first contains a VASurfaceID pointer. - * mfxHDLPair.second is always MFX_INFINITE. - * - * DXVA2: - * mfxHDLPair.first contains IDirect3DSurface9 pointer. - * mfxHDLPair.second is always MFX_INFINITE. - * - * D3D11: - * mfxHDLPair.first contains a ID3D11Texture2D pointer. - * mfxHDLPair.second contains the texture array index of the frame if the - * ID3D11Texture2D is an array texture, or always MFX_INFINITE if it is a - * normal texture. - */ - AV_PIX_FMT_QSV, - /** - * HW acceleration though MMAL, data[3] contains a pointer to the - * MMAL_BUFFER_HEADER_T structure. - */ - AV_PIX_FMT_MMAL, - - AV_PIX_FMT_D3D11VA_VLD, ///< HW decoding through Direct3D11 via old API, Picture.data[3] contains a ID3D11VideoDecoderOutputView pointer - - /** - * HW acceleration through CUDA. data[i] contain CUdeviceptr pointers - * exactly as for system memory frames. - */ - AV_PIX_FMT_CUDA, - - AV_PIX_FMT_0RGB, ///< packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined - AV_PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined - AV_PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined - AV_PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined - - AV_PIX_FMT_YUV420P12BE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P12LE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P14BE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian - AV_PIX_FMT_YUV420P14LE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV422P14BE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - AV_PIX_FMT_YUV422P14LE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian - AV_PIX_FMT_YUV444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_YUV444P14BE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian - AV_PIX_FMT_YUV444P14LE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian - AV_PIX_FMT_GBRP12BE, ///< planar GBR 4:4:4 36bpp, big-endian - AV_PIX_FMT_GBRP12LE, ///< planar GBR 4:4:4 36bpp, little-endian - AV_PIX_FMT_GBRP14BE, ///< planar GBR 4:4:4 42bpp, big-endian - AV_PIX_FMT_GBRP14LE, ///< planar GBR 4:4:4 42bpp, little-endian - AV_PIX_FMT_YUVJ411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV411P and setting color_range - - AV_PIX_FMT_BAYER_BGGR8, ///< bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples - AV_PIX_FMT_BAYER_RGGB8, ///< bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples - AV_PIX_FMT_BAYER_GBRG8, ///< bayer, GBGB..(odd line), RGRG..(even line), 8-bit samples - AV_PIX_FMT_BAYER_GRBG8, ///< bayer, GRGR..(odd line), BGBG..(even line), 8-bit samples - AV_PIX_FMT_BAYER_BGGR16LE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_BGGR16BE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, big-endian - AV_PIX_FMT_BAYER_RGGB16LE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_RGGB16BE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, big-endian - AV_PIX_FMT_BAYER_GBRG16LE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_GBRG16BE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, big-endian - AV_PIX_FMT_BAYER_GRBG16LE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_GRBG16BE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian - - AV_PIX_FMT_YUV440P10LE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian - AV_PIX_FMT_YUV440P10BE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian - AV_PIX_FMT_YUV440P12LE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian - AV_PIX_FMT_YUV440P12BE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian - AV_PIX_FMT_AYUV64LE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), little-endian - AV_PIX_FMT_AYUV64BE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), big-endian - - AV_PIX_FMT_VIDEOTOOLBOX, ///< hardware decoding through Videotoolbox - - AV_PIX_FMT_P010LE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian - AV_PIX_FMT_P010BE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, big-endian - - AV_PIX_FMT_GBRAP12BE, ///< planar GBR 4:4:4:4 48bpp, big-endian - AV_PIX_FMT_GBRAP12LE, ///< planar GBR 4:4:4:4 48bpp, little-endian - - AV_PIX_FMT_GBRAP10BE, ///< planar GBR 4:4:4:4 40bpp, big-endian - AV_PIX_FMT_GBRAP10LE, ///< planar GBR 4:4:4:4 40bpp, little-endian - - AV_PIX_FMT_MEDIACODEC, ///< hardware decoding through MediaCodec - - AV_PIX_FMT_GRAY12BE, ///< Y , 12bpp, big-endian - AV_PIX_FMT_GRAY12LE, ///< Y , 12bpp, little-endian - AV_PIX_FMT_GRAY10BE, ///< Y , 10bpp, big-endian - AV_PIX_FMT_GRAY10LE, ///< Y , 10bpp, little-endian - - AV_PIX_FMT_P016LE, ///< like NV12, with 16bpp per component, little-endian - AV_PIX_FMT_P016BE, ///< like NV12, with 16bpp per component, big-endian - - /** - * Hardware surfaces for Direct3D11. - * - * This is preferred over the legacy AV_PIX_FMT_D3D11VA_VLD. The new D3D11 - * hwaccel API and filtering support AV_PIX_FMT_D3D11 only. - * - * data[0] contains a ID3D11Texture2D pointer, and data[1] contains the - * texture array index of the frame as intptr_t if the ID3D11Texture2D is - * an array texture (or always 0 if it's a normal texture). - */ - AV_PIX_FMT_D3D11, - - AV_PIX_FMT_GRAY9BE, ///< Y , 9bpp, big-endian - AV_PIX_FMT_GRAY9LE, ///< Y , 9bpp, little-endian - - AV_PIX_FMT_GBRPF32BE, ///< IEEE-754 single precision planar GBR 4:4:4, 96bpp, big-endian - AV_PIX_FMT_GBRPF32LE, ///< IEEE-754 single precision planar GBR 4:4:4, 96bpp, little-endian - AV_PIX_FMT_GBRAPF32BE, ///< IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, big-endian - AV_PIX_FMT_GBRAPF32LE, ///< IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, little-endian - - /** - * DRM-managed buffers exposed through PRIME buffer sharing. - * - * data[0] points to an AVDRMFrameDescriptor. - */ - AV_PIX_FMT_DRM_PRIME, - /** - * Hardware surfaces for OpenCL. - * - * data[i] contain 2D image objects (typed in C as cl_mem, used - * in OpenCL as image2d_t) for each plane of the surface. - */ - AV_PIX_FMT_OPENCL, - - AV_PIX_FMT_GRAY14BE, ///< Y , 14bpp, big-endian - AV_PIX_FMT_GRAY14LE, ///< Y , 14bpp, little-endian - - AV_PIX_FMT_GRAYF32BE, ///< IEEE-754 single precision Y, 32bpp, big-endian - AV_PIX_FMT_GRAYF32LE, ///< IEEE-754 single precision Y, 32bpp, little-endian - - AV_PIX_FMT_YUVA422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), 12b alpha, big-endian - AV_PIX_FMT_YUVA422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), 12b alpha, little-endian - AV_PIX_FMT_YUVA444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), 12b alpha, big-endian - AV_PIX_FMT_YUVA444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), 12b alpha, little-endian - - AV_PIX_FMT_NV24, ///< planar YUV 4:4:4, 24bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V) - AV_PIX_FMT_NV42, ///< as above, but U and V bytes are swapped - - /** - * Vulkan hardware images. - * - * data[0] points to an AVVkFrame - */ - AV_PIX_FMT_VULKAN, - - AV_PIX_FMT_Y210BE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, big-endian - AV_PIX_FMT_Y210LE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, little-endian - - AV_PIX_FMT_X2RGB10LE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_X2RGB10BE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), big-endian, X=unused/undefined - AV_PIX_FMT_X2BGR10LE, ///< packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G 10R(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_X2BGR10BE, ///< packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G 10R(lsb), big-endian, X=unused/undefined - - AV_PIX_FMT_P210BE, ///< interleaved chroma YUV 4:2:2, 20bpp, data in the high bits, big-endian - AV_PIX_FMT_P210LE, ///< interleaved chroma YUV 4:2:2, 20bpp, data in the high bits, little-endian - - AV_PIX_FMT_P410BE, ///< interleaved chroma YUV 4:4:4, 30bpp, data in the high bits, big-endian - AV_PIX_FMT_P410LE, ///< interleaved chroma YUV 4:4:4, 30bpp, data in the high bits, little-endian - - AV_PIX_FMT_P216BE, ///< interleaved chroma YUV 4:2:2, 32bpp, big-endian - AV_PIX_FMT_P216LE, ///< interleaved chroma YUV 4:2:2, 32bpp, little-endian - - AV_PIX_FMT_P416BE, ///< interleaved chroma YUV 4:4:4, 48bpp, big-endian - AV_PIX_FMT_P416LE, ///< interleaved chroma YUV 4:4:4, 48bpp, little-endian - - AV_PIX_FMT_VUYA, ///< packed VUYA 4:4:4:4, 32bpp (1 Cr & Cb sample per 1x1 Y & A samples), VUYAVUYA... - - AV_PIX_FMT_RGBAF16BE, ///< IEEE-754 half precision packed RGBA 16:16:16:16, 64bpp, RGBARGBA..., big-endian - AV_PIX_FMT_RGBAF16LE, ///< IEEE-754 half precision packed RGBA 16:16:16:16, 64bpp, RGBARGBA..., little-endian - - AV_PIX_FMT_VUYX, ///< packed VUYX 4:4:4:4, 32bpp, Variant of VUYA where alpha channel is left undefined - - AV_PIX_FMT_P012LE, ///< like NV12, with 12bpp per component, data in the high bits, zeros in the low bits, little-endian - AV_PIX_FMT_P012BE, ///< like NV12, with 12bpp per component, data in the high bits, zeros in the low bits, big-endian - - AV_PIX_FMT_Y212BE, ///< packed YUV 4:2:2 like YUYV422, 24bpp, data in the high bits, zeros in the low bits, big-endian - AV_PIX_FMT_Y212LE, ///< packed YUV 4:2:2 like YUYV422, 24bpp, data in the high bits, zeros in the low bits, little-endian - - AV_PIX_FMT_XV30BE, ///< packed XVYU 4:4:4, 32bpp, (msb)2X 10V 10Y 10U(lsb), big-endian, variant of Y410 where alpha channel is left undefined - AV_PIX_FMT_XV30LE, ///< packed XVYU 4:4:4, 32bpp, (msb)2X 10V 10Y 10U(lsb), little-endian, variant of Y410 where alpha channel is left undefined - - AV_PIX_FMT_XV36BE, ///< packed XVYU 4:4:4, 48bpp, data in the high bits, zeros in the low bits, big-endian, variant of Y412 where alpha channel is left undefined - AV_PIX_FMT_XV36LE, ///< packed XVYU 4:4:4, 48bpp, data in the high bits, zeros in the low bits, little-endian, variant of Y412 where alpha channel is left undefined - - AV_PIX_FMT_RGBF32BE, ///< IEEE-754 single precision packed RGB 32:32:32, 96bpp, RGBRGB..., big-endian - AV_PIX_FMT_RGBF32LE, ///< IEEE-754 single precision packed RGB 32:32:32, 96bpp, RGBRGB..., little-endian - - AV_PIX_FMT_RGBAF32BE, ///< IEEE-754 single precision packed RGBA 32:32:32:32, 128bpp, RGBARGBA..., big-endian - AV_PIX_FMT_RGBAF32LE, ///< IEEE-754 single precision packed RGBA 32:32:32:32, 128bpp, RGBARGBA..., little-endian - - AV_PIX_FMT_P212BE, ///< interleaved chroma YUV 4:2:2, 24bpp, data in the high bits, big-endian - AV_PIX_FMT_P212LE, ///< interleaved chroma YUV 4:2:2, 24bpp, data in the high bits, little-endian - - AV_PIX_FMT_P412BE, ///< interleaved chroma YUV 4:4:4, 36bpp, data in the high bits, big-endian - AV_PIX_FMT_P412LE, ///< interleaved chroma YUV 4:4:4, 36bpp, data in the high bits, little-endian - - AV_PIX_FMT_GBRAP14BE, ///< planar GBR 4:4:4:4 56bpp, big-endian - AV_PIX_FMT_GBRAP14LE, ///< planar GBR 4:4:4:4 56bpp, little-endian - - /** - * Hardware surfaces for Direct3D 12. - * - * data[0] points to an AVD3D12VAFrame - */ - AV_PIX_FMT_D3D12, - - AV_PIX_FMT_AYUV, ///< packed AYUV 4:4:4:4, 32bpp (1 Cr & Cb sample per 1x1 Y & A samples), AYUVAYUV... - - AV_PIX_FMT_UYVA, ///< packed UYVA 4:4:4:4, 32bpp (1 Cr & Cb sample per 1x1 Y & A samples), UYVAUYVA... - - AV_PIX_FMT_VYU444, ///< packed VYU 4:4:4, 24bpp (1 Cr & Cb sample per 1x1 Y), VYUVYU... - - AV_PIX_FMT_V30XBE, ///< packed VYUX 4:4:4 like XV30, 32bpp, (msb)10V 10Y 10U 2X(lsb), big-endian - AV_PIX_FMT_V30XLE, ///< packed VYUX 4:4:4 like XV30, 32bpp, (msb)10V 10Y 10U 2X(lsb), little-endian - - AV_PIX_FMT_RGBF16BE, ///< IEEE-754 half precision packed RGB 16:16:16, 48bpp, RGBRGB..., big-endian - AV_PIX_FMT_RGBF16LE, ///< IEEE-754 half precision packed RGB 16:16:16, 48bpp, RGBRGB..., little-endian - - AV_PIX_FMT_RGBA128BE, ///< packed RGBA 32:32:32:32, 128bpp, RGBARGBA..., big-endian - AV_PIX_FMT_RGBA128LE, ///< packed RGBA 32:32:32:32, 128bpp, RGBARGBA..., little-endian - - AV_PIX_FMT_RGB96BE, ///< packed RGBA 32:32:32, 96bpp, RGBRGB..., big-endian - AV_PIX_FMT_RGB96LE, ///< packed RGBA 32:32:32, 96bpp, RGBRGB..., little-endian - - AV_PIX_FMT_Y216BE, ///< packed YUV 4:2:2 like YUYV422, 32bpp, big-endian - AV_PIX_FMT_Y216LE, ///< packed YUV 4:2:2 like YUYV422, 32bpp, little-endian - - AV_PIX_FMT_XV48BE, ///< packed XVYU 4:4:4, 64bpp, big-endian, variant of Y416 where alpha channel is left undefined - AV_PIX_FMT_XV48LE, ///< packed XVYU 4:4:4, 64bpp, little-endian, variant of Y416 where alpha channel is left undefined - - AV_PIX_FMT_GBRPF16BE, ///< IEEE-754 half precision planer GBR 4:4:4, 48bpp, big-endian - AV_PIX_FMT_GBRPF16LE, ///< IEEE-754 half precision planer GBR 4:4:4, 48bpp, little-endian - AV_PIX_FMT_GBRAPF16BE, ///< IEEE-754 half precision planar GBRA 4:4:4:4, 64bpp, big-endian - AV_PIX_FMT_GBRAPF16LE, ///< IEEE-754 half precision planar GBRA 4:4:4:4, 64bpp, little-endian - - AV_PIX_FMT_GRAYF16BE, ///< IEEE-754 half precision Y, 16bpp, big-endian - AV_PIX_FMT_GRAYF16LE, ///< IEEE-754 half precision Y, 16bpp, little-endian - - /** - * HW acceleration through AMF. data[0] contain AMFSurface pointer - */ - AV_PIX_FMT_AMF_SURFACE, - - AV_PIX_FMT_GRAY32BE, ///< Y , 32bpp, big-endian - AV_PIX_FMT_GRAY32LE, ///< Y , 32bpp, little-endian - - AV_PIX_FMT_YAF32BE, ///< IEEE-754 single precision packed YA, 32 bits gray, 32 bits alpha, 64bpp, big-endian - AV_PIX_FMT_YAF32LE, ///< IEEE-754 single precision packed YA, 32 bits gray, 32 bits alpha, 64bpp, little-endian - - AV_PIX_FMT_YAF16BE, ///< IEEE-754 half precision packed YA, 16 bits gray, 16 bits alpha, 32bpp, big-endian - AV_PIX_FMT_YAF16LE, ///< IEEE-754 half precision packed YA, 16 bits gray, 16 bits alpha, 32bpp, little-endian - - AV_PIX_FMT_GBRAP32BE, ///< planar GBRA 4:4:4:4 128bpp, big-endian - AV_PIX_FMT_GBRAP32LE, ///< planar GBRA 4:4:4:4 128bpp, little-endian - - AV_PIX_FMT_YUV444P10MSBBE, ///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), lowest bits zero, big-endian - AV_PIX_FMT_YUV444P10MSBLE, ///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), lowest bits zero, little-endian - AV_PIX_FMT_YUV444P12MSBBE, ///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), lowest bits zero, big-endian - AV_PIX_FMT_YUV444P12MSBLE, ///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), lowest bits zero, little-endian - AV_PIX_FMT_GBRP10MSBBE, ///< planar GBR 4:4:4 30bpp, lowest bits zero, big-endian - AV_PIX_FMT_GBRP10MSBLE, ///< planar GBR 4:4:4 30bpp, lowest bits zero, little-endian - AV_PIX_FMT_GBRP12MSBBE, ///< planar GBR 4:4:4 36bpp, lowest bits zero, big-endian - AV_PIX_FMT_GBRP12MSBLE, ///< planar GBR 4:4:4 36bpp, lowest bits zero, little-endian - - AV_PIX_FMT_OHCODEC, /// hardware decoding through openharmony - - AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions -}; - -#if AV_HAVE_BIGENDIAN -# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##be -#else -# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##le -#endif - -#define AV_PIX_FMT_RGB32 AV_PIX_FMT_NE(ARGB, BGRA) -#define AV_PIX_FMT_RGB32_1 AV_PIX_FMT_NE(RGBA, ABGR) -#define AV_PIX_FMT_BGR32 AV_PIX_FMT_NE(ABGR, RGBA) -#define AV_PIX_FMT_BGR32_1 AV_PIX_FMT_NE(BGRA, ARGB) -#define AV_PIX_FMT_0RGB32 AV_PIX_FMT_NE(0RGB, BGR0) -#define AV_PIX_FMT_0BGR32 AV_PIX_FMT_NE(0BGR, RGB0) - -#define AV_PIX_FMT_GRAY9 AV_PIX_FMT_NE(GRAY9BE, GRAY9LE) -#define AV_PIX_FMT_GRAY10 AV_PIX_FMT_NE(GRAY10BE, GRAY10LE) -#define AV_PIX_FMT_GRAY12 AV_PIX_FMT_NE(GRAY12BE, GRAY12LE) -#define AV_PIX_FMT_GRAY14 AV_PIX_FMT_NE(GRAY14BE, GRAY14LE) -#define AV_PIX_FMT_GRAY16 AV_PIX_FMT_NE(GRAY16BE, GRAY16LE) -#define AV_PIX_FMT_GRAY32 AV_PIX_FMT_NE(GRAY32BE, GRAY32LE) -#define AV_PIX_FMT_YA16 AV_PIX_FMT_NE(YA16BE, YA16LE) -#define AV_PIX_FMT_RGB48 AV_PIX_FMT_NE(RGB48BE, RGB48LE) -#define AV_PIX_FMT_RGB565 AV_PIX_FMT_NE(RGB565BE, RGB565LE) -#define AV_PIX_FMT_RGB555 AV_PIX_FMT_NE(RGB555BE, RGB555LE) -#define AV_PIX_FMT_RGB444 AV_PIX_FMT_NE(RGB444BE, RGB444LE) -#define AV_PIX_FMT_RGBA64 AV_PIX_FMT_NE(RGBA64BE, RGBA64LE) -#define AV_PIX_FMT_BGR48 AV_PIX_FMT_NE(BGR48BE, BGR48LE) -#define AV_PIX_FMT_BGR565 AV_PIX_FMT_NE(BGR565BE, BGR565LE) -#define AV_PIX_FMT_BGR555 AV_PIX_FMT_NE(BGR555BE, BGR555LE) -#define AV_PIX_FMT_BGR444 AV_PIX_FMT_NE(BGR444BE, BGR444LE) -#define AV_PIX_FMT_BGRA64 AV_PIX_FMT_NE(BGRA64BE, BGRA64LE) - -#define AV_PIX_FMT_YUV420P9 AV_PIX_FMT_NE(YUV420P9BE , YUV420P9LE) -#define AV_PIX_FMT_YUV422P9 AV_PIX_FMT_NE(YUV422P9BE , YUV422P9LE) -#define AV_PIX_FMT_YUV444P9 AV_PIX_FMT_NE(YUV444P9BE , YUV444P9LE) -#define AV_PIX_FMT_YUV420P10 AV_PIX_FMT_NE(YUV420P10BE, YUV420P10LE) -#define AV_PIX_FMT_YUV422P10 AV_PIX_FMT_NE(YUV422P10BE, YUV422P10LE) -#define AV_PIX_FMT_YUV440P10 AV_PIX_FMT_NE(YUV440P10BE, YUV440P10LE) -#define AV_PIX_FMT_YUV444P10 AV_PIX_FMT_NE(YUV444P10BE, YUV444P10LE) -#define AV_PIX_FMT_YUV420P12 AV_PIX_FMT_NE(YUV420P12BE, YUV420P12LE) -#define AV_PIX_FMT_YUV422P12 AV_PIX_FMT_NE(YUV422P12BE, YUV422P12LE) -#define AV_PIX_FMT_YUV440P12 AV_PIX_FMT_NE(YUV440P12BE, YUV440P12LE) -#define AV_PIX_FMT_YUV444P12 AV_PIX_FMT_NE(YUV444P12BE, YUV444P12LE) -#define AV_PIX_FMT_YUV420P14 AV_PIX_FMT_NE(YUV420P14BE, YUV420P14LE) -#define AV_PIX_FMT_YUV422P14 AV_PIX_FMT_NE(YUV422P14BE, YUV422P14LE) -#define AV_PIX_FMT_YUV444P14 AV_PIX_FMT_NE(YUV444P14BE, YUV444P14LE) -#define AV_PIX_FMT_YUV420P16 AV_PIX_FMT_NE(YUV420P16BE, YUV420P16LE) -#define AV_PIX_FMT_YUV422P16 AV_PIX_FMT_NE(YUV422P16BE, YUV422P16LE) -#define AV_PIX_FMT_YUV444P16 AV_PIX_FMT_NE(YUV444P16BE, YUV444P16LE) - -#define AV_PIX_FMT_YUV444P10MSB AV_PIX_FMT_NE(YUV444P10MSBBE, YUV444P10MSBLE) -#define AV_PIX_FMT_YUV444P12MSB AV_PIX_FMT_NE(YUV444P12MSBBE, YUV444P12MSBLE) - -#define AV_PIX_FMT_GBRP9 AV_PIX_FMT_NE(GBRP9BE , GBRP9LE) -#define AV_PIX_FMT_GBRP10 AV_PIX_FMT_NE(GBRP10BE, GBRP10LE) -#define AV_PIX_FMT_GBRP12 AV_PIX_FMT_NE(GBRP12BE, GBRP12LE) -#define AV_PIX_FMT_GBRP14 AV_PIX_FMT_NE(GBRP14BE, GBRP14LE) -#define AV_PIX_FMT_GBRP16 AV_PIX_FMT_NE(GBRP16BE, GBRP16LE) -#define AV_PIX_FMT_GBRAP10 AV_PIX_FMT_NE(GBRAP10BE, GBRAP10LE) -#define AV_PIX_FMT_GBRAP12 AV_PIX_FMT_NE(GBRAP12BE, GBRAP12LE) -#define AV_PIX_FMT_GBRAP14 AV_PIX_FMT_NE(GBRAP14BE, GBRAP14LE) -#define AV_PIX_FMT_GBRAP16 AV_PIX_FMT_NE(GBRAP16BE, GBRAP16LE) -#define AV_PIX_FMT_GBRAP32 AV_PIX_FMT_NE(GBRAP32BE, GBRAP32LE) - -#define AV_PIX_FMT_GBRP10MSB AV_PIX_FMT_NE(GBRP10MSBBE, GBRP10MSBLE) -#define AV_PIX_FMT_GBRP12MSB AV_PIX_FMT_NE(GBRP12MSBBE, GBRP12MSBLE) - -#define AV_PIX_FMT_BAYER_BGGR16 AV_PIX_FMT_NE(BAYER_BGGR16BE, BAYER_BGGR16LE) -#define AV_PIX_FMT_BAYER_RGGB16 AV_PIX_FMT_NE(BAYER_RGGB16BE, BAYER_RGGB16LE) -#define AV_PIX_FMT_BAYER_GBRG16 AV_PIX_FMT_NE(BAYER_GBRG16BE, BAYER_GBRG16LE) -#define AV_PIX_FMT_BAYER_GRBG16 AV_PIX_FMT_NE(BAYER_GRBG16BE, BAYER_GRBG16LE) - -#define AV_PIX_FMT_GBRPF16 AV_PIX_FMT_NE(GBRPF16BE, GBRPF16LE) -#define AV_PIX_FMT_GBRAPF16 AV_PIX_FMT_NE(GBRAPF16BE, GBRAPF16LE) -#define AV_PIX_FMT_GBRPF32 AV_PIX_FMT_NE(GBRPF32BE, GBRPF32LE) -#define AV_PIX_FMT_GBRAPF32 AV_PIX_FMT_NE(GBRAPF32BE, GBRAPF32LE) - -#define AV_PIX_FMT_GRAYF16 AV_PIX_FMT_NE(GRAYF16BE, GRAYF16LE) -#define AV_PIX_FMT_GRAYF32 AV_PIX_FMT_NE(GRAYF32BE, GRAYF32LE) - -#define AV_PIX_FMT_YAF16 AV_PIX_FMT_NE(YAF16BE, YAF16LE) -#define AV_PIX_FMT_YAF32 AV_PIX_FMT_NE(YAF32BE, YAF32LE) - -#define AV_PIX_FMT_YUVA420P9 AV_PIX_FMT_NE(YUVA420P9BE , YUVA420P9LE) -#define AV_PIX_FMT_YUVA422P9 AV_PIX_FMT_NE(YUVA422P9BE , YUVA422P9LE) -#define AV_PIX_FMT_YUVA444P9 AV_PIX_FMT_NE(YUVA444P9BE , YUVA444P9LE) -#define AV_PIX_FMT_YUVA420P10 AV_PIX_FMT_NE(YUVA420P10BE, YUVA420P10LE) -#define AV_PIX_FMT_YUVA422P10 AV_PIX_FMT_NE(YUVA422P10BE, YUVA422P10LE) -#define AV_PIX_FMT_YUVA444P10 AV_PIX_FMT_NE(YUVA444P10BE, YUVA444P10LE) -#define AV_PIX_FMT_YUVA422P12 AV_PIX_FMT_NE(YUVA422P12BE, YUVA422P12LE) -#define AV_PIX_FMT_YUVA444P12 AV_PIX_FMT_NE(YUVA444P12BE, YUVA444P12LE) -#define AV_PIX_FMT_YUVA420P16 AV_PIX_FMT_NE(YUVA420P16BE, YUVA420P16LE) -#define AV_PIX_FMT_YUVA422P16 AV_PIX_FMT_NE(YUVA422P16BE, YUVA422P16LE) -#define AV_PIX_FMT_YUVA444P16 AV_PIX_FMT_NE(YUVA444P16BE, YUVA444P16LE) - -#define AV_PIX_FMT_XYZ12 AV_PIX_FMT_NE(XYZ12BE, XYZ12LE) -#define AV_PIX_FMT_NV20 AV_PIX_FMT_NE(NV20BE, NV20LE) -#define AV_PIX_FMT_AYUV64 AV_PIX_FMT_NE(AYUV64BE, AYUV64LE) -#define AV_PIX_FMT_P010 AV_PIX_FMT_NE(P010BE, P010LE) -#define AV_PIX_FMT_P012 AV_PIX_FMT_NE(P012BE, P012LE) -#define AV_PIX_FMT_P016 AV_PIX_FMT_NE(P016BE, P016LE) - -#define AV_PIX_FMT_Y210 AV_PIX_FMT_NE(Y210BE, Y210LE) -#define AV_PIX_FMT_Y212 AV_PIX_FMT_NE(Y212BE, Y212LE) -#define AV_PIX_FMT_Y216 AV_PIX_FMT_NE(Y216BE, Y216LE) -#define AV_PIX_FMT_XV30 AV_PIX_FMT_NE(XV30BE, XV30LE) -#define AV_PIX_FMT_XV36 AV_PIX_FMT_NE(XV36BE, XV36LE) -#define AV_PIX_FMT_XV48 AV_PIX_FMT_NE(XV48BE, XV48LE) -#define AV_PIX_FMT_V30X AV_PIX_FMT_NE(V30XBE, V30XLE) -#define AV_PIX_FMT_X2RGB10 AV_PIX_FMT_NE(X2RGB10BE, X2RGB10LE) -#define AV_PIX_FMT_X2BGR10 AV_PIX_FMT_NE(X2BGR10BE, X2BGR10LE) - -#define AV_PIX_FMT_P210 AV_PIX_FMT_NE(P210BE, P210LE) -#define AV_PIX_FMT_P410 AV_PIX_FMT_NE(P410BE, P410LE) -#define AV_PIX_FMT_P212 AV_PIX_FMT_NE(P212BE, P212LE) -#define AV_PIX_FMT_P412 AV_PIX_FMT_NE(P412BE, P412LE) -#define AV_PIX_FMT_P216 AV_PIX_FMT_NE(P216BE, P216LE) -#define AV_PIX_FMT_P416 AV_PIX_FMT_NE(P416BE, P416LE) - -#define AV_PIX_FMT_RGBF16 AV_PIX_FMT_NE(RGBF16BE, RGBF16LE) -#define AV_PIX_FMT_RGBAF16 AV_PIX_FMT_NE(RGBAF16BE, RGBAF16LE) - -#define AV_PIX_FMT_RGBF32 AV_PIX_FMT_NE(RGBF32BE, RGBF32LE) -#define AV_PIX_FMT_RGBAF32 AV_PIX_FMT_NE(RGBAF32BE, RGBAF32LE) - -#define AV_PIX_FMT_RGB96 AV_PIX_FMT_NE(RGB96BE, RGB96LE) -#define AV_PIX_FMT_RGBA128 AV_PIX_FMT_NE(RGBA128BE, RGBA128LE) - -/** - * Chromaticity coordinates of the source primaries. - * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.1 and ITU-T H.273. - */ -enum AVColorPrimaries { - AVCOL_PRI_RESERVED0 = 0, - AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP 177 Annex B - AVCOL_PRI_UNSPECIFIED = 2, - AVCOL_PRI_RESERVED = 3, - AVCOL_PRI_BT470M = 4, ///< also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) - - AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM - AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC - AVCOL_PRI_SMPTE240M = 7, ///< identical to above, also called "SMPTE C" even though it uses D65 - AVCOL_PRI_FILM = 8, ///< colour filters using Illuminant C - AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 - AVCOL_PRI_SMPTE428 = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ) - AVCOL_PRI_SMPTEST428_1 = AVCOL_PRI_SMPTE428, - AVCOL_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) / DCI P3 - AVCOL_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 (2010) / P3 D65 / Display P3 - AVCOL_PRI_EBU3213 = 22, ///< EBU Tech. 3213-E (nothing there) / one of JEDEC P22 group phosphors - AVCOL_PRI_JEDEC_P22 = AVCOL_PRI_EBU3213, - AVCOL_PRI_NB ///< Not part of ABI -}; - -/** - * Color Transfer Characteristic. - * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.2. - */ -enum AVColorTransferCharacteristic { - AVCOL_TRC_RESERVED0 = 0, - AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361 - AVCOL_TRC_UNSPECIFIED = 2, - AVCOL_TRC_RESERVED = 3, - AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM - AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG - AVCOL_TRC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC - AVCOL_TRC_SMPTE240M = 7, - AVCOL_TRC_LINEAR = 8, ///< "Linear transfer characteristics" - AVCOL_TRC_LOG = 9, ///< "Logarithmic transfer characteristic (100:1 range)" - AVCOL_TRC_LOG_SQRT = 10, ///< "Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range)" - AVCOL_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4 - AVCOL_TRC_BT1361_ECG = 12, ///< ITU-R BT1361 Extended Colour Gamut - AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC) - AVCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10-bit system - AVCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12-bit system - AVCOL_TRC_SMPTE2084 = 16, ///< SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems - AVCOL_TRC_SMPTEST2084 = AVCOL_TRC_SMPTE2084, - AVCOL_TRC_SMPTE428 = 17, ///< SMPTE ST 428-1 - AVCOL_TRC_SMPTEST428_1 = AVCOL_TRC_SMPTE428, - AVCOL_TRC_ARIB_STD_B67 = 18, ///< ARIB STD-B67, known as "Hybrid log-gamma" - AVCOL_TRC_NB ///< Not part of ABI -}; - -/** - * YUV colorspace type. - * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.3. - */ -enum AVColorSpace { - AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB), YZX and ST 428-1 - AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / derived in SMPTE RP 177 Annex B - AVCOL_SPC_UNSPECIFIED = 2, - AVCOL_SPC_RESERVED = 3, ///< reserved for future use by ITU-T and ISO/IEC just like 15-255 are - AVCOL_SPC_FCC = 4, ///< FCC Title 47 Code of Federal Regulations 73.682 (a)(20) - AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 - AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above - AVCOL_SPC_SMPTE240M = 7, ///< derived from 170M primaries and D65 white point, 170M is derived from BT470 System M's primaries - AVCOL_SPC_YCGCO = 8, ///< used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 - AVCOL_SPC_YCOCG = AVCOL_SPC_YCGCO, - AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system - AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system - AVCOL_SPC_SMPTE2085 = 11, ///< SMPTE 2085, Y'D'zD'x - AVCOL_SPC_CHROMA_DERIVED_NCL = 12, ///< Chromaticity-derived non-constant luminance system - AVCOL_SPC_CHROMA_DERIVED_CL = 13, ///< Chromaticity-derived constant luminance system - AVCOL_SPC_ICTCP = 14, ///< ITU-R BT.2100-0, ICtCp - AVCOL_SPC_IPT_C2 = 15, ///< SMPTE ST 2128, IPT-C2 - AVCOL_SPC_YCGCO_RE = 16, ///< YCgCo-R, even addition of bits - AVCOL_SPC_YCGCO_RO = 17, ///< YCgCo-R, odd addition of bits - AVCOL_SPC_NB ///< Not part of ABI -}; - -/** - * Visual content value range. - * - * These values are based on definitions that can be found in multiple - * specifications, such as ITU-T BT.709 (3.4 - Quantization of RGB, luminance - * and colour-difference signals), ITU-T BT.2020 (Table 5 - Digital - * Representation) as well as ITU-T BT.2100 (Table 9 - Digital 10- and 12-bit - * integer representation). At the time of writing, the BT.2100 one is - * recommended, as it also defines the full range representation. - * - * Common definitions: - * - For RGB and luma planes such as Y in YCbCr and I in ICtCp, - * 'E' is the original value in range of 0.0 to 1.0. - * - For chroma planes such as Cb,Cr and Ct,Cp, 'E' is the original - * value in range of -0.5 to 0.5. - * - 'n' is the output bit depth. - * - For additional definitions such as rounding and clipping to valid n - * bit unsigned integer range, please refer to BT.2100 (Table 9). - */ -enum AVColorRange { - AVCOL_RANGE_UNSPECIFIED = 0, - - /** - * Narrow or limited range content. - * - * - For luma planes: - * - * (219 * E + 16) * 2^(n-8) - * - * F.ex. the range of 16-235 for 8 bits - * - * - For chroma planes: - * - * (224 * E + 128) * 2^(n-8) - * - * F.ex. the range of 16-240 for 8 bits - */ - AVCOL_RANGE_MPEG = 1, - - /** - * Full range content. - * - * - For RGB and luma planes: - * - * (2^n - 1) * E - * - * F.ex. the range of 0-255 for 8 bits - * - * - For chroma planes: - * - * (2^n - 1) * E + 2^(n - 1) - * - * F.ex. the range of 1-255 for 8 bits - */ - AVCOL_RANGE_JPEG = 2, - AVCOL_RANGE_NB ///< Not part of ABI -}; - -/** - * Location of chroma samples. - * - * Illustration showing the location of the first (top left) chroma sample of the - * image, the left shows only luma, the right - * shows the location of the chroma sample, the 2 could be imagined to overlay - * each other but are drawn separately due to limitations of ASCII - * - * 1st 2nd 1st 2nd horizontal luma sample positions - * v v v v - * ______ ______ - *1st luma line > |X X ... |3 4 X ... X are luma samples, - * | |1 2 1-6 are possible chroma positions - *2nd luma line > |X X ... |5 6 X ... 0 is undefined/unknown position - */ -enum AVChromaLocation { - AVCHROMA_LOC_UNSPECIFIED = 0, - AVCHROMA_LOC_LEFT = 1, ///< MPEG-2/4 4:2:0, H.264 default for 4:2:0 - AVCHROMA_LOC_CENTER = 2, ///< MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0 - AVCHROMA_LOC_TOPLEFT = 3, ///< ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2 - AVCHROMA_LOC_TOP = 4, - AVCHROMA_LOC_BOTTOMLEFT = 5, - AVCHROMA_LOC_BOTTOM = 6, - AVCHROMA_LOC_NB ///< Not part of ABI -}; - -#endif /* AVUTIL_PIXFMT_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/random_seed.h b/3rdparty/ffmpeg/include/libavutil/random_seed.h deleted file mode 100644 index 8a47be967968b..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/random_seed.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2009 Baptiste Coudurier - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_RANDOM_SEED_H -#define AVUTIL_RANDOM_SEED_H - -#include -#include -/** - * @addtogroup lavu_crypto - * @{ - */ - -/** - * Get a seed to use in conjunction with random functions. - * This function tries to provide a good seed at a best effort bases. - * Its possible to call this function multiple times if more bits are needed. - * It can be quite slow, which is why it should only be used as seed for a faster - * PRNG. The quality of the seed depends on the platform. - */ -uint32_t av_get_random_seed(void); - -/** - * Generate cryptographically secure random data, i.e. suitable for use as - * encryption keys and similar. - * - * @param buf buffer into which the random data will be written - * @param len size of buf in bytes - * - * @retval 0 success, len bytes of random data was written - * into buf - * @retval "a negative AVERROR code" random data could not be generated - */ -int av_random_bytes(uint8_t *buf, size_t len); - -/** - * @} - */ - -#endif /* AVUTIL_RANDOM_SEED_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/rational.h b/3rdparty/ffmpeg/include/libavutil/rational.h deleted file mode 100644 index 30ac2aced76ee..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/rational.h +++ /dev/null @@ -1,225 +0,0 @@ -/* - * rational numbers - * Copyright (c) 2003 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_math_rational - * Utilities for rational number calculation. - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_RATIONAL_H -#define AVUTIL_RATIONAL_H - -#include -#include -#include "attributes.h" - -/** - * @defgroup lavu_math_rational AVRational - * @ingroup lavu_math - * Rational number calculation. - * - * While rational numbers can be expressed as floating-point numbers, the - * conversion process is a lossy one, so are floating-point operations. On the - * other hand, the nature of FFmpeg demands highly accurate calculation of - * timestamps. This set of rational number utilities serves as a generic - * interface for manipulating rational numbers as pairs of numerators and - * denominators. - * - * Many of the functions that operate on AVRational's have the suffix `_q`, in - * reference to the mathematical symbol "ℚ" (Q) which denotes the set of all - * rational numbers. - * - * @{ - */ - -/** - * Rational number (pair of numerator and denominator). - */ -typedef struct AVRational{ - int num; ///< Numerator - int den; ///< Denominator -} AVRational; - -/** - * Create an AVRational. - * - * Useful for compilers that do not support compound literals. - * - * @note The return value is not reduced. - * @see av_reduce() - */ -static inline AVRational av_make_q(int num, int den) -{ - AVRational r = { num, den }; - return r; -} - -/** - * Compare two rationals. - * - * @param a First rational - * @param b Second rational - * - * @return One of the following values: - * - 0 if `a == b` - * - 1 if `a > b` - * - -1 if `a < b` - * - `INT_MIN` if one of the values is of the form `0 / 0` - */ -static inline int av_cmp_q(AVRational a, AVRational b){ - const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den; - - if(tmp) return (int)((tmp ^ a.den ^ b.den)>>63)|1; - else if(b.den && a.den) return 0; - else if(a.num && b.num) return (a.num>>31) - (b.num>>31); - else return INT_MIN; -} - -/** - * Convert an AVRational to a `double`. - * @param a AVRational to convert - * @return `a` in floating-point form - * @see av_d2q() - */ -static inline double av_q2d(AVRational a){ - return a.num / (double) a.den; -} - -/** - * Reduce a fraction. - * - * This is useful for framerate calculations. - * - * @param[out] dst_num Destination numerator - * @param[out] dst_den Destination denominator - * @param[in] num Source numerator - * @param[in] den Source denominator - * @param[in] max Maximum allowed values for `dst_num` & `dst_den` - * @return 1 if the operation is exact, 0 otherwise - */ -int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max); - -/** - * Multiply two rationals. - * @param b First rational - * @param c Second rational - * @return b*c - */ -AVRational av_mul_q(AVRational b, AVRational c) av_const; - -/** - * Divide one rational by another. - * @param b First rational - * @param c Second rational - * @return b/c - */ -AVRational av_div_q(AVRational b, AVRational c) av_const; - -/** - * Add two rationals. - * @param b First rational - * @param c Second rational - * @return b+c - */ -AVRational av_add_q(AVRational b, AVRational c) av_const; - -/** - * Subtract one rational from another. - * @param b First rational - * @param c Second rational - * @return b-c - */ -AVRational av_sub_q(AVRational b, AVRational c) av_const; - -/** - * Invert a rational. - * @param q value - * @return 1 / q - */ -static av_always_inline AVRational av_inv_q(AVRational q) -{ - AVRational r = { q.den, q.num }; - return r; -} - -/** - * Convert a double precision floating point number to a rational. - * - * In case of infinity, the returned value is expressed as `{1, 0}` or - * `{-1, 0}` depending on the sign. - * - * In general rational numbers with |num| <= 1<<26 && |den| <= 1<<26 - * can be recovered exactly from their double representation. - * (no exceptions were found within 1B random ones) - * - * @param d `double` to convert - * @param max Maximum allowed numerator and denominator - * @return `d` in AVRational form - * @see av_q2d() - */ -AVRational av_d2q(double d, int max) av_const; - -/** - * Find which of the two rationals is closer to another rational. - * - * @param q Rational to be compared against - * @param q1 Rational to be tested - * @param q2 Rational to be tested - * @return One of the following values: - * - 1 if `q1` is nearer to `q` than `q2` - * - -1 if `q2` is nearer to `q` than `q1` - * - 0 if they have the same distance - */ -int av_nearer_q(AVRational q, AVRational q1, AVRational q2); - -/** - * Find the value in a list of rationals nearest a given reference rational. - * - * @param q Reference rational - * @param q_list Array of rationals terminated by `{0, 0}` - * @return Index of the nearest value found in the array - */ -int av_find_nearest_q_idx(AVRational q, const AVRational* q_list); - -/** - * Convert an AVRational to a IEEE 32-bit `float` expressed in fixed-point - * format. - * - * @param q Rational to be converted - * @return Equivalent floating-point value, expressed as an unsigned 32-bit - * integer. - * @note The returned value is platform-indepedant. - */ -uint32_t av_q2intfloat(AVRational q); - -/** - * Return the best rational so that a and b are multiple of it. - * If the resulting denominator is larger than max_den, return def. - */ -AVRational av_gcd_q(AVRational a, AVRational b, int max_den, AVRational def); - -/** - * @} - */ - -#endif /* AVUTIL_RATIONAL_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/rc4.h b/3rdparty/ffmpeg/include/libavutil/rc4.h deleted file mode 100644 index 0c72a88ecd7bd..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/rc4.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * RC4 encryption/decryption/pseudo-random number generator - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_RC4_H -#define AVUTIL_RC4_H - -#include - -/** - * @defgroup lavu_rc4 RC4 - * @ingroup lavu_crypto - * @{ - */ - -typedef struct AVRC4 { - uint8_t state[256]; - int x, y; -} AVRC4; - -/** - * Allocate an AVRC4 context. - */ -AVRC4 *av_rc4_alloc(void); - -/** - * @brief Initializes an AVRC4 context. - * - * @param d pointer to the AVRC4 context - * @param key buffer containing the key - * @param key_bits must be a multiple of 8 - * @param decrypt 0 for encryption, 1 for decryption, currently has no effect - * @return zero on success, negative value otherwise - */ -int av_rc4_init(struct AVRC4 *d, const uint8_t *key, int key_bits, int decrypt); - -/** - * @brief Encrypts / decrypts using the RC4 algorithm. - * - * @param d pointer to the AVRC4 context - * @param count number of bytes - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst, may be NULL - * @param iv not (yet) used for RC4, should be NULL - * @param decrypt 0 for encryption, 1 for decryption, not (yet) used - */ -void av_rc4_crypt(struct AVRC4 *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_RC4_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/replaygain.h b/3rdparty/ffmpeg/include/libavutil/replaygain.h deleted file mode 100644 index b49bf1a3d9686..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/replaygain.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_REPLAYGAIN_H -#define AVUTIL_REPLAYGAIN_H - -#include - -/** - * ReplayGain information (see - * http://wiki.hydrogenaudio.org/index.php?title=ReplayGain_1.0_specification). - * The size of this struct is a part of the public ABI. - */ -typedef struct AVReplayGain { - /** - * Track replay gain in microbels (divide by 100000 to get the value in dB). - * Should be set to INT32_MIN when unknown. - */ - int32_t track_gain; - /** - * Peak track amplitude, with 100000 representing full scale (but values - * may overflow). 0 when unknown. - */ - uint32_t track_peak; - /** - * Same as track_gain, but for the whole album. - */ - int32_t album_gain; - /** - * Same as track_peak, but for the whole album, - */ - uint32_t album_peak; -} AVReplayGain; - -#endif /* AVUTIL_REPLAYGAIN_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/ripemd.h b/3rdparty/ffmpeg/include/libavutil/ripemd.h deleted file mode 100644 index 9df9f905f3de6..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/ripemd.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * Copyright (C) 2013 James Almer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_ripemd - * Public header for RIPEMD hash function implementation. - */ - -#ifndef AVUTIL_RIPEMD_H -#define AVUTIL_RIPEMD_H - -#include -#include - -#include "attributes.h" - -/** - * @defgroup lavu_ripemd RIPEMD - * @ingroup lavu_hash - * RIPEMD hash function implementation. - * - * @{ - */ - -extern const int av_ripemd_size; - -struct AVRIPEMD; - -/** - * Allocate an AVRIPEMD context. - */ -struct AVRIPEMD *av_ripemd_alloc(void); - -/** - * Initialize RIPEMD hashing. - * - * @param context pointer to the function context (of size av_ripemd_size) - * @param bits number of bits in digest (128, 160, 256 or 320 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_ripemd_init(struct AVRIPEMD* context, int bits); - -/** - * Update hash value. - * - * @param context hash function context - * @param data input data to update hash with - * @param len input data length - */ -void av_ripemd_update(struct AVRIPEMD* context, const uint8_t* data, size_t len); - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_ripemd_final(struct AVRIPEMD* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_RIPEMD_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/samplefmt.h b/3rdparty/ffmpeg/include/libavutil/samplefmt.h deleted file mode 100644 index 43a57a422cdbf..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/samplefmt.h +++ /dev/null @@ -1,269 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_SAMPLEFMT_H -#define AVUTIL_SAMPLEFMT_H - -#include - -/** - * @addtogroup lavu_audio - * @{ - * - * @defgroup lavu_sampfmts Audio sample formats - * - * Audio sample format enumeration and related convenience functions. - * @{ - */ - -/** - * Audio sample formats - * - * - The data described by the sample format is always in native-endian order. - * Sample values can be expressed by native C types, hence the lack of a signed - * 24-bit sample format even though it is a common raw audio data format. - * - * - The floating-point formats are based on full volume being in the range - * [-1.0, 1.0]. Any values outside this range are beyond full volume level. - * - * - The data layout as used in av_samples_fill_arrays() and elsewhere in FFmpeg - * (such as AVFrame in libavcodec) is as follows: - * - * @par - * For planar sample formats, each audio channel is in a separate data plane, - * and linesize is the buffer size, in bytes, for a single plane. All data - * planes must be the same size. For packed sample formats, only the first data - * plane is used, and samples for each channel are interleaved. In this case, - * linesize is the buffer size, in bytes, for the 1 plane. - * - */ -enum AVSampleFormat { - AV_SAMPLE_FMT_NONE = -1, - AV_SAMPLE_FMT_U8, ///< unsigned 8 bits - AV_SAMPLE_FMT_S16, ///< signed 16 bits - AV_SAMPLE_FMT_S32, ///< signed 32 bits - AV_SAMPLE_FMT_FLT, ///< float - AV_SAMPLE_FMT_DBL, ///< double - - AV_SAMPLE_FMT_U8P, ///< unsigned 8 bits, planar - AV_SAMPLE_FMT_S16P, ///< signed 16 bits, planar - AV_SAMPLE_FMT_S32P, ///< signed 32 bits, planar - AV_SAMPLE_FMT_FLTP, ///< float, planar - AV_SAMPLE_FMT_DBLP, ///< double, planar - AV_SAMPLE_FMT_S64, ///< signed 64 bits - AV_SAMPLE_FMT_S64P, ///< signed 64 bits, planar - - AV_SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if linking dynamically -}; - -/** - * Return the name of sample_fmt, or NULL if sample_fmt is not - * recognized. - */ -const char *av_get_sample_fmt_name(enum AVSampleFormat sample_fmt); - -/** - * Return a sample format corresponding to name, or AV_SAMPLE_FMT_NONE - * on error. - */ -enum AVSampleFormat av_get_sample_fmt(const char *name); - -/** - * Return the planar<->packed alternative form of the given sample format, or - * AV_SAMPLE_FMT_NONE on error. If the passed sample_fmt is already in the - * requested planar/packed format, the format returned is the same as the - * input. - */ -enum AVSampleFormat av_get_alt_sample_fmt(enum AVSampleFormat sample_fmt, int planar); - -/** - * Get the packed alternative form of the given sample format. - * - * If the passed sample_fmt is already in packed format, the format returned is - * the same as the input. - * - * @return the packed alternative form of the given sample format or - AV_SAMPLE_FMT_NONE on error. - */ -enum AVSampleFormat av_get_packed_sample_fmt(enum AVSampleFormat sample_fmt); - -/** - * Get the planar alternative form of the given sample format. - * - * If the passed sample_fmt is already in planar format, the format returned is - * the same as the input. - * - * @return the planar alternative form of the given sample format or - AV_SAMPLE_FMT_NONE on error. - */ -enum AVSampleFormat av_get_planar_sample_fmt(enum AVSampleFormat sample_fmt); - -/** - * Generate a string corresponding to the sample format with - * sample_fmt, or a header if sample_fmt is negative. - * - * @param buf the buffer where to write the string - * @param buf_size the size of buf - * @param sample_fmt the number of the sample format to print the - * corresponding info string, or a negative value to print the - * corresponding header. - * @return the pointer to the filled buffer or NULL if sample_fmt is - * unknown or in case of other errors - */ -char *av_get_sample_fmt_string(char *buf, int buf_size, enum AVSampleFormat sample_fmt); - -/** - * Return number of bytes per sample. - * - * @param sample_fmt the sample format - * @return number of bytes per sample or zero if unknown for the given - * sample format - */ -int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt); - -/** - * Check if the sample format is planar. - * - * @param sample_fmt the sample format to inspect - * @return 1 if the sample format is planar, 0 if it is interleaved - */ -int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt); - -/** - * Get the required buffer size for the given audio parameters. - * - * @param[out] linesize calculated linesize, may be NULL - * @param nb_channels the number of channels - * @param nb_samples the number of samples in a single channel - * @param sample_fmt the sample format - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return required buffer size, or negative error code on failure - */ -int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples, - enum AVSampleFormat sample_fmt, int align); - -/** - * @} - * - * @defgroup lavu_sampmanip Samples manipulation - * - * Functions that manipulate audio samples - * @{ - */ - -/** - * Fill plane data pointers and linesize for samples with sample - * format sample_fmt. - * - * The audio_data array is filled with the pointers to the samples data planes: - * for planar, set the start point of each channel's data within the buffer, - * for packed, set the start point of the entire buffer only. - * - * The value pointed to by linesize is set to the aligned size of each - * channel's data buffer for planar layout, or to the aligned size of the - * buffer for all channels for packed layout. - * - * The buffer in buf must be big enough to contain all the samples - * (use av_samples_get_buffer_size() to compute its minimum size), - * otherwise the audio_data pointers will point to invalid data. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param[out] audio_data array to be filled with the pointer for each channel - * @param[out] linesize calculated linesize, may be NULL - * @param buf the pointer to a buffer containing the samples - * @param nb_channels the number of channels - * @param nb_samples the number of samples in a single channel - * @param sample_fmt the sample format - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return minimum size in bytes required for the buffer on success, - * or a negative error code on failure - */ -int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, - const uint8_t *buf, - int nb_channels, int nb_samples, - enum AVSampleFormat sample_fmt, int align); - -/** - * Allocate a samples buffer for nb_samples samples, and fill data pointers and - * linesize accordingly. - * The allocated samples buffer can be freed by using av_freep(&audio_data[0]) - * Allocated data will be initialized to silence. - * - * @see enum AVSampleFormat - * The documentation for AVSampleFormat describes the data layout. - * - * @param[out] audio_data array to be filled with the pointer for each channel - * @param[out] linesize aligned size for audio buffer(s), may be NULL - * @param nb_channels number of audio channels - * @param nb_samples number of samples per channel - * @param sample_fmt the sample format - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return >=0 on success or a negative error code on failure - * @todo return the size of the allocated buffer in case of success at the next bump - * @see av_samples_fill_arrays() - * @see av_samples_alloc_array_and_samples() - */ -int av_samples_alloc(uint8_t **audio_data, int *linesize, int nb_channels, - int nb_samples, enum AVSampleFormat sample_fmt, int align); - -/** - * Allocate a data pointers array, samples buffer for nb_samples - * samples, and fill data pointers and linesize accordingly. - * - * This is the same as av_samples_alloc(), but also allocates the data - * pointers array. - * - * @see av_samples_alloc() - */ -int av_samples_alloc_array_and_samples(uint8_t ***audio_data, int *linesize, int nb_channels, - int nb_samples, enum AVSampleFormat sample_fmt, int align); - -/** - * Copy samples from src to dst. - * - * @param dst destination array of pointers to data planes - * @param src source array of pointers to data planes - * @param dst_offset offset in samples at which the data will be written to dst - * @param src_offset offset in samples at which the data will be read from src - * @param nb_samples number of samples to be copied - * @param nb_channels number of audio channels - * @param sample_fmt audio sample format - */ -int av_samples_copy(uint8_t * const *dst, uint8_t * const *src, int dst_offset, - int src_offset, int nb_samples, int nb_channels, - enum AVSampleFormat sample_fmt); - -/** - * Fill an audio buffer with silence. - * - * @param audio_data array of pointers to data planes - * @param offset offset in samples at which to start filling - * @param nb_samples number of samples to fill - * @param nb_channels number of audio channels - * @param sample_fmt audio sample format - */ -int av_samples_set_silence(uint8_t * const *audio_data, int offset, int nb_samples, - int nb_channels, enum AVSampleFormat sample_fmt); - -/** - * @} - * @} - */ -#endif /* AVUTIL_SAMPLEFMT_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/sha.h b/3rdparty/ffmpeg/include/libavutil/sha.h deleted file mode 100644 index 2e1220abd1215..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/sha.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_sha - * Public header for SHA-1 & SHA-256 hash function implementations. - */ - -#ifndef AVUTIL_SHA_H -#define AVUTIL_SHA_H - -#include -#include - -#include "attributes.h" - -/** - * @defgroup lavu_sha SHA - * @ingroup lavu_hash - * SHA-1 and SHA-256 (Secure Hash Algorithm) hash function implementations. - * - * This module supports the following SHA hash functions: - * - * - SHA-1: 160 bits - * - SHA-224: 224 bits, as a variant of SHA-2 - * - SHA-256: 256 bits, as a variant of SHA-2 - * - * @see For SHA-384, SHA-512, and variants thereof, see @ref lavu_sha512. - * - * @{ - */ - -extern const int av_sha_size; - -struct AVSHA; - -/** - * Allocate an AVSHA context. - */ -struct AVSHA *av_sha_alloc(void); - -/** - * Initialize SHA-1 or SHA-2 hashing. - * - * @param context pointer to the function context (of size av_sha_size) - * @param bits number of bits in digest (SHA-1 - 160 bits, SHA-2 224 or 256 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_sha_init(struct AVSHA* context, int bits); - -/** - * Update hash value. - * - * @param ctx hash function context - * @param data input data to update hash with - * @param len input data length - */ -void av_sha_update(struct AVSHA *ctx, const uint8_t *data, size_t len); - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_sha_final(struct AVSHA* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_SHA_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/sha512.h b/3rdparty/ffmpeg/include/libavutil/sha512.h deleted file mode 100644 index a4a3f23db30e2..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/sha512.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) 2007 Michael Niedermayer - * Copyright (C) 2013 James Almer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_sha512 - * Public header for SHA-512 implementation. - */ - -#ifndef AVUTIL_SHA512_H -#define AVUTIL_SHA512_H - -#include -#include - -#include "attributes.h" - -/** - * @defgroup lavu_sha512 SHA-512 - * @ingroup lavu_hash - * SHA-512 (Secure Hash Algorithm) hash function implementations. - * - * This module supports the following SHA-2 hash functions: - * - * - SHA-512/224: 224 bits - * - SHA-512/256: 256 bits - * - SHA-384: 384 bits - * - SHA-512: 512 bits - * - * @see For SHA-1, SHA-256, and variants thereof, see @ref lavu_sha. - * - * @{ - */ - -extern const int av_sha512_size; - -struct AVSHA512; - -/** - * Allocate an AVSHA512 context. - */ -struct AVSHA512 *av_sha512_alloc(void); - -/** - * Initialize SHA-2 512 hashing. - * - * @param context pointer to the function context (of size av_sha512_size) - * @param bits number of bits in digest (224, 256, 384 or 512 bits) - * @return zero if initialization succeeded, -1 otherwise - */ -int av_sha512_init(struct AVSHA512* context, int bits); - -/** - * Update hash value. - * - * @param context hash function context - * @param data input data to update hash with - * @param len input data length - */ -void av_sha512_update(struct AVSHA512* context, const uint8_t* data, size_t len); - -/** - * Finish hashing and output digest value. - * - * @param context hash function context - * @param digest buffer where output digest value is stored - */ -void av_sha512_final(struct AVSHA512* context, uint8_t *digest); - -/** - * @} - */ - -#endif /* AVUTIL_SHA512_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/spherical.h b/3rdparty/ffmpeg/include/libavutil/spherical.h deleted file mode 100644 index 4b78978eb9420..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/spherical.h +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright (c) 2016 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_video_spherical - * Spherical video - */ - -#ifndef AVUTIL_SPHERICAL_H -#define AVUTIL_SPHERICAL_H - -#include -#include - -/** - * @defgroup lavu_video_spherical Spherical video mapping - * @ingroup lavu_video - * - * A spherical video file contains surfaces that need to be mapped onto a - * sphere. Depending on how the frame was converted, a different distortion - * transformation or surface recomposition function needs to be applied before - * the video should be mapped and displayed. - * @{ - */ - -/** - * Projection of the video surface(s) on a sphere. - */ -enum AVSphericalProjection { - /** - * Video represents a sphere mapped on a flat surface using - * equirectangular projection. - */ - AV_SPHERICAL_EQUIRECTANGULAR, - - /** - * Video frame is split into 6 faces of a cube, and arranged on a - * 3x2 layout. Faces are oriented upwards for the front, left, right, - * and back faces. The up face is oriented so the top of the face is - * forwards and the down face is oriented so the top of the face is - * to the back. - */ - AV_SPHERICAL_CUBEMAP, - - /** - * Video represents a portion of a sphere mapped on a flat surface - * using equirectangular projection. The @ref bounding fields indicate - * the position of the current video in a larger surface. - */ - AV_SPHERICAL_EQUIRECTANGULAR_TILE, - - /** - * Video frame displays as a 180 degree equirectangular projection. - */ - AV_SPHERICAL_HALF_EQUIRECTANGULAR, - - /** - * Video frame displays on a flat, rectangular 2D surface. - */ - AV_SPHERICAL_RECTILINEAR, - - /** - * Fisheye projection (Apple). - * See: https://developer.apple.com/documentation/coremedia/cmprojectiontype/fisheye - */ - AV_SPHERICAL_FISHEYE, - - /** - * Parametric Immersive projection (Apple). - * See: https://developer.apple.com/documentation/coremedia/cmprojectiontype/parametricimmersive - */ - AV_SPHERICAL_PARAMETRIC_IMMERSIVE, -}; - -/** - * This structure describes how to handle spherical videos, outlining - * information about projection, initial layout, and any other view modifier. - * - * @note The struct must be allocated with av_spherical_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVSphericalMapping { - /** - * Projection type. - */ - enum AVSphericalProjection projection; - - /** - * @name Initial orientation - * @{ - * There fields describe additional rotations applied to the sphere after - * the video frame is mapped onto it. The sphere is rotated around the - * viewer, who remains stationary. The order of transformation is always - * yaw, followed by pitch, and finally by roll. - * - * The coordinate system matches the one defined in OpenGL, where the - * forward vector (z) is coming out of screen, and it is equivalent to - * a rotation matrix of R = r_y(yaw) * r_x(pitch) * r_z(roll). - * - * A positive yaw rotates the portion of the sphere in front of the viewer - * toward their right. A positive pitch rotates the portion of the sphere - * in front of the viewer upwards. A positive roll tilts the portion of - * the sphere in front of the viewer to the viewer's right. - * - * These values are exported as 16.16 fixed point. - * - * See this equirectangular projection as example: - * - * @code{.unparsed} - * Yaw - * -180 0 180 - * 90 +-------------+-------------+ 180 - * | | | up - * P | | | y| forward - * i | ^ | | /z - * t 0 +-------------X-------------+ 0 Roll | / - * c | | | | / - * h | | | 0|/_____right - * | | | x - * -90 +-------------+-------------+ -180 - * - * X - the default camera center - * ^ - the default up vector - * @endcode - */ - int32_t yaw; ///< Rotation around the up vector [-180, 180]. - int32_t pitch; ///< Rotation around the right vector [-90, 90]. - int32_t roll; ///< Rotation around the forward vector [-180, 180]. - /** - * @} - */ - - /** - * @name Bounding rectangle - * @anchor bounding - * @{ - * These fields indicate the location of the current tile, and where - * it should be mapped relative to the original surface. They are - * exported as 0.32 fixed point, and can be converted to classic - * pixel values with av_spherical_bounds(). - * - * @code{.unparsed} - * +----------------+----------+ - * | |bound_top | - * | +--------+ | - * | bound_left |tile | | - * +<---------->| |<--->+bound_right - * | +--------+ | - * | | | - * | bound_bottom| | - * +----------------+----------+ - * @endcode - * - * If needed, the original video surface dimensions can be derived - * by adding the current stream or frame size to the related bounds, - * like in the following example: - * - * @code{c} - * original_width = tile->width + bound_left + bound_right; - * original_height = tile->height + bound_top + bound_bottom; - * @endcode - * - * @note These values are valid only for the tiled equirectangular - * projection type (@ref AV_SPHERICAL_EQUIRECTANGULAR_TILE), - * and should be ignored in all other cases. - */ - uint32_t bound_left; ///< Distance from the left edge - uint32_t bound_top; ///< Distance from the top edge - uint32_t bound_right; ///< Distance from the right edge - uint32_t bound_bottom; ///< Distance from the bottom edge - /** - * @} - */ - - /** - * Number of pixels to pad from the edge of each cube face. - * - * @note This value is valid for only for the cubemap projection type - * (@ref AV_SPHERICAL_CUBEMAP), and should be ignored in all other - * cases. - */ - uint32_t padding; -} AVSphericalMapping; - -/** - * Allocate a AVSphericalVideo structure and initialize its fields to default - * values. - * - * @return the newly allocated struct or NULL on failure - */ -AVSphericalMapping *av_spherical_alloc(size_t *size); - -/** - * Convert the @ref bounding fields from an AVSphericalVideo - * from 0.32 fixed point to pixels. - * - * @param map The AVSphericalVideo map to read bound values from. - * @param width Width of the current frame or stream. - * @param height Height of the current frame or stream. - * @param left Pixels from the left edge. - * @param top Pixels from the top edge. - * @param right Pixels from the right edge. - * @param bottom Pixels from the bottom edge. - */ -void av_spherical_tile_bounds(const AVSphericalMapping *map, - size_t width, size_t height, - size_t *left, size_t *top, - size_t *right, size_t *bottom); - -/** - * Provide a human-readable name of a given AVSphericalProjection. - * - * @param projection The input AVSphericalProjection. - * - * @return The name of the AVSphericalProjection, or "unknown". - */ -const char *av_spherical_projection_name(enum AVSphericalProjection projection); - -/** - * Get the AVSphericalProjection form a human-readable name. - * - * @param name The input string. - * - * @return The AVSphericalProjection value, or -1 if not found. - */ -int av_spherical_from_name(const char *name); -/** - * @} - */ - -#endif /* AVUTIL_SPHERICAL_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/stereo3d.h b/3rdparty/ffmpeg/include/libavutil/stereo3d.h deleted file mode 100644 index c0a4ab3f2d393..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/stereo3d.h +++ /dev/null @@ -1,325 +0,0 @@ -/* - * Copyright (c) 2013 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu_video_stereo3d - * Stereoscopic video - */ - -#ifndef AVUTIL_STEREO3D_H -#define AVUTIL_STEREO3D_H - -#include - -#include "frame.h" - -/** - * @defgroup lavu_video_stereo3d Stereo3D types and functions - * @ingroup lavu_video - * - * A stereoscopic video file consists in multiple views embedded in a single - * frame, usually describing two views of a scene. This file describes all - * possible codec-independent view arrangements. - * - * @{ - */ - -/** - * List of possible 3D Types - */ -enum AVStereo3DType { - /** - * Video is not stereoscopic (and metadata has to be there). - */ - AV_STEREO3D_2D, - - /** - * Views are next to each other. - * - * @code{.unparsed} - * LLLLRRRR - * LLLLRRRR - * LLLLRRRR - * ... - * @endcode - */ - AV_STEREO3D_SIDEBYSIDE, - - /** - * Views are on top of each other. - * - * @code{.unparsed} - * LLLLLLLL - * LLLLLLLL - * RRRRRRRR - * RRRRRRRR - * @endcode - */ - AV_STEREO3D_TOPBOTTOM, - - /** - * Views are alternated temporally. - * - * @code{.unparsed} - * frame0 frame1 frame2 ... - * LLLLLLLL RRRRRRRR LLLLLLLL - * LLLLLLLL RRRRRRRR LLLLLLLL - * LLLLLLLL RRRRRRRR LLLLLLLL - * ... ... ... - * @endcode - */ - AV_STEREO3D_FRAMESEQUENCE, - - /** - * Views are packed in a checkerboard-like structure per pixel. - * - * @code{.unparsed} - * LRLRLRLR - * RLRLRLRL - * LRLRLRLR - * ... - * @endcode - */ - AV_STEREO3D_CHECKERBOARD, - - /** - * Views are next to each other, but when upscaling - * apply a checkerboard pattern. - * - * @code{.unparsed} - * LLLLRRRR L L L L R R R R - * LLLLRRRR => L L L L R R R R - * LLLLRRRR L L L L R R R R - * LLLLRRRR L L L L R R R R - * @endcode - */ - AV_STEREO3D_SIDEBYSIDE_QUINCUNX, - - /** - * Views are packed per line, as if interlaced. - * - * @code{.unparsed} - * LLLLLLLL - * RRRRRRRR - * LLLLLLLL - * ... - * @endcode - */ - AV_STEREO3D_LINES, - - /** - * Views are packed per column. - * - * @code{.unparsed} - * LRLRLRLR - * LRLRLRLR - * LRLRLRLR - * ... - * @endcode - */ - AV_STEREO3D_COLUMNS, - - /** - * Video is stereoscopic but the packing is unspecified. - */ - AV_STEREO3D_UNSPEC, -}; - -/** - * List of possible view types. - */ -enum AVStereo3DView { - /** - * Frame contains two packed views. - */ - AV_STEREO3D_VIEW_PACKED, - - /** - * Frame contains only the left view. - */ - AV_STEREO3D_VIEW_LEFT, - - /** - * Frame contains only the right view. - */ - AV_STEREO3D_VIEW_RIGHT, - - /** - * Content is unspecified. - */ - AV_STEREO3D_VIEW_UNSPEC, -}; - -/** - * List of possible primary eyes. - */ -enum AVStereo3DPrimaryEye { - /** - * Neither eye. - */ - AV_PRIMARY_EYE_NONE, - - /** - * Left eye. - */ - AV_PRIMARY_EYE_LEFT, - - /** - * Right eye - */ - AV_PRIMARY_EYE_RIGHT, -}; - -/** - * Inverted views, Right/Bottom represents the left view. - */ -#define AV_STEREO3D_FLAG_INVERT (1 << 0) - -/** - * Stereo 3D type: this structure describes how two videos are packed - * within a single video surface, with additional information as needed. - * - * @note The struct must be allocated with av_stereo3d_alloc() and - * its size is not a part of the public ABI. - */ -typedef struct AVStereo3D { - /** - * How views are packed within the video. - */ - enum AVStereo3DType type; - - /** - * Additional information about the frame packing. - */ - int flags; - - /** - * Determines which views are packed. - */ - enum AVStereo3DView view; - - /** - * Which eye is the primary eye when rendering in 2D. - */ - enum AVStereo3DPrimaryEye primary_eye; - - /** - * The distance between the centres of the lenses of the camera system, - * in micrometers. Zero if unset. - */ - uint32_t baseline; - - /** - * Relative shift of the left and right images, which changes the zero parallax plane. - * Range is -1.0 to 1.0. Zero if unset. - */ - AVRational horizontal_disparity_adjustment; - - /** - * Horizontal field of view, in degrees. Zero if unset. - */ - AVRational horizontal_field_of_view; -} AVStereo3D; - -/** - * Allocate an AVStereo3D structure and set its fields to default values. - * The resulting struct can be freed using av_freep(). - * - * @return An AVStereo3D filled with default values or NULL on failure. - */ -AVStereo3D *av_stereo3d_alloc(void); - -/** - * Allocate an AVStereo3D structure and set its fields to default values. - * The resulting struct can be freed using av_freep(). - * - * @return An AVStereo3D filled with default values or NULL on failure. - */ -AVStereo3D *av_stereo3d_alloc_size(size_t *size); - -/** - * Allocate a complete AVFrameSideData and add it to the frame. - * - * @param frame The frame which side data is added to. - * - * @return The AVStereo3D structure to be filled by caller. - */ -AVStereo3D *av_stereo3d_create_side_data(AVFrame *frame); - -/** - * Provide a human-readable name of a given stereo3d type. - * - * @param type The input stereo3d type value. - * - * @return The name of the stereo3d value, or "unknown". - */ -const char *av_stereo3d_type_name(unsigned int type); - -/** - * Get the AVStereo3DType form a human-readable name. - * - * @param name The input string. - * - * @return The AVStereo3DType value, or -1 if not found. - */ -int av_stereo3d_from_name(const char *name); - -/** - * Provide a human-readable name of a given stereo3d view. - * - * @param type The input stereo3d view value. - * - * @return The name of the stereo3d view value, or "unknown". - */ -const char *av_stereo3d_view_name(unsigned int view); - -/** - * Get the AVStereo3DView form a human-readable name. - * - * @param name The input string. - * - * @return The AVStereo3DView value, or -1 if not found. - */ -int av_stereo3d_view_from_name(const char *name); - -/** - * Provide a human-readable name of a given stereo3d primary eye. - * - * @param type The input stereo3d primary eye value. - * - * @return The name of the stereo3d primary eye value, or "unknown". - */ -const char *av_stereo3d_primary_eye_name(unsigned int eye); - -/** - * Get the AVStereo3DPrimaryEye form a human-readable name. - * - * @param name The input string. - * - * @return The AVStereo3DPrimaryEye value, or -1 if not found. - */ -int av_stereo3d_primary_eye_from_name(const char *name); - -/** - * @} - */ - -#endif /* AVUTIL_STEREO3D_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/tea.h b/3rdparty/ffmpeg/include/libavutil/tea.h deleted file mode 100644 index dd929bdafdc42..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/tea.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * A 32-bit implementation of the TEA algorithm - * Copyright (c) 2015 Vesselin Bontchev - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TEA_H -#define AVUTIL_TEA_H - -#include - -/** - * @file - * @brief Public header for libavutil TEA algorithm - * @defgroup lavu_tea TEA - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_tea_size; - -struct AVTEA; - -/** - * Allocate an AVTEA context - * To free the struct: av_free(ptr) - */ -struct AVTEA *av_tea_alloc(void); - -/** - * Initialize an AVTEA context. - * - * @param ctx an AVTEA context - * @param key a key of 16 bytes used for encryption/decryption - * @param rounds the number of rounds in TEA (64 is the "standard") - */ -void av_tea_init(struct AVTEA *ctx, const uint8_t key[16], int rounds); - -/** - * Encrypt or decrypt a buffer using a previously initialized context. - * - * @param ctx an AVTEA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_tea_crypt(struct AVTEA *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_TEA_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/threadmessage.h b/3rdparty/ffmpeg/include/libavutil/threadmessage.h deleted file mode 100644 index 42ce655f365ac..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/threadmessage.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with FFmpeg; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_THREADMESSAGE_H -#define AVUTIL_THREADMESSAGE_H - -typedef struct AVThreadMessageQueue AVThreadMessageQueue; - -typedef enum AVThreadMessageFlags { - - /** - * Perform non-blocking operation. - * If this flag is set, send and recv operations are non-blocking and - * return AVERROR(EAGAIN) immediately if they can not proceed. - */ - AV_THREAD_MESSAGE_NONBLOCK = 1, - -} AVThreadMessageFlags; - -/** - * Allocate a new message queue. - * - * @param mq pointer to the message queue - * @param nelem maximum number of elements in the queue - * @param elsize size of each element in the queue - * @return >=0 for success; <0 for error, in particular AVERROR(ENOSYS) if - * lavu was built without thread support - */ -int av_thread_message_queue_alloc(AVThreadMessageQueue **mq, - unsigned nelem, - unsigned elsize); - -/** - * Free a message queue. - * - * The message queue must no longer be in use by another thread. - */ -void av_thread_message_queue_free(AVThreadMessageQueue **mq); - -/** - * Send a message on the queue. - */ -int av_thread_message_queue_send(AVThreadMessageQueue *mq, - void *msg, - unsigned flags); - -/** - * Receive a message from the queue. - */ -int av_thread_message_queue_recv(AVThreadMessageQueue *mq, - void *msg, - unsigned flags); - -/** - * Set the sending error code. - * - * If the error code is set to non-zero, av_thread_message_queue_send() will - * return it immediately. Conventional values, such as AVERROR_EOF or - * AVERROR(EAGAIN), can be used to cause the sending thread to stop or - * suspend its operation. - */ -void av_thread_message_queue_set_err_send(AVThreadMessageQueue *mq, - int err); - -/** - * Set the receiving error code. - * - * If the error code is set to non-zero, av_thread_message_queue_recv() will - * return it immediately when there are no longer available messages. - * Conventional values, such as AVERROR_EOF or AVERROR(EAGAIN), can be used - * to cause the receiving thread to stop or suspend its operation. - */ -void av_thread_message_queue_set_err_recv(AVThreadMessageQueue *mq, - int err); - -/** - * Set the optional free message callback function which will be called if an - * operation is removing messages from the queue. - */ -void av_thread_message_queue_set_free_func(AVThreadMessageQueue *mq, - void (*free_func)(void *msg)); - -/** - * Return the current number of messages in the queue. - * - * @return the current number of messages or AVERROR(ENOSYS) if lavu was built - * without thread support - */ -int av_thread_message_queue_nb_elems(AVThreadMessageQueue *mq); - -/** - * Flush the message queue - * - * This function is mostly equivalent to reading and free-ing every message - * except that it will be done in a single operation (no lock/unlock between - * reads). - */ -void av_thread_message_flush(AVThreadMessageQueue *mq); - -#endif /* AVUTIL_THREADMESSAGE_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/time.h b/3rdparty/ffmpeg/include/libavutil/time.h deleted file mode 100644 index dc169b064a0d7..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/time.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2000-2003 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TIME_H -#define AVUTIL_TIME_H - -#include - -/** - * Get the current time in microseconds. - */ -int64_t av_gettime(void); - -/** - * Get the current time in microseconds since some unspecified starting point. - * On platforms that support it, the time comes from a monotonic clock - * This property makes this time source ideal for measuring relative time. - * The returned values may not be monotonic on platforms where a monotonic - * clock is not available. - */ -int64_t av_gettime_relative(void); - -/** - * Indicates with a boolean result if the av_gettime_relative() time source - * is monotonic. - */ -int av_gettime_relative_is_monotonic(void); - -/** - * Sleep for a period of time. Although the duration is expressed in - * microseconds, the actual delay may be rounded to the precision of the - * system timer. - * - * @param usec Number of microseconds to sleep. - * @return zero on success or (negative) error code. - */ -int av_usleep(unsigned usec); - -#endif /* AVUTIL_TIME_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/timecode.h b/3rdparty/ffmpeg/include/libavutil/timecode.h deleted file mode 100644 index fe0fc835764c6..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/timecode.h +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright (c) 2006 Smartjog S.A.S, Baptiste Coudurier - * Copyright (c) 2011-2012 Smartjog S.A.S, Clément Bœsch - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Timecode helpers header - */ - -#ifndef AVUTIL_TIMECODE_H -#define AVUTIL_TIMECODE_H - -#include -#include "rational.h" - -#define AV_TIMECODE_STR_SIZE 23 - -enum AVTimecodeFlag { - AV_TIMECODE_FLAG_DROPFRAME = 1<<0, ///< timecode is drop frame - AV_TIMECODE_FLAG_24HOURSMAX = 1<<1, ///< timecode wraps after 24 hours - AV_TIMECODE_FLAG_ALLOWNEGATIVE = 1<<2, ///< negative time values are allowed -}; - -typedef struct { - int start; ///< timecode frame start (first base frame number) - uint32_t flags; ///< flags such as drop frame, +24 hours support, ... - AVRational rate; ///< frame rate in rational form - unsigned fps; ///< frame per second; must be consistent with the rate field -} AVTimecode; - -/** - * Adjust frame number for NTSC drop frame time code. - * - * @param framenum frame number to adjust - * @param fps frame per second, multiples of 30 - * @return adjusted frame number - * @warning adjustment is only valid for multiples of NTSC 29.97 - */ -int av_timecode_adjust_ntsc_framenum2(int framenum, int fps); - -/** - * Convert frame number to SMPTE 12M binary representation. - * - * @param tc timecode data correctly initialized - * @param framenum frame number - * @return the SMPTE binary representation - * - * See SMPTE ST 314M-2005 Sec 4.4.2.2.1 "Time code pack (TC)" - * the format description as follows: - * bits 0-5: hours, in BCD(6bits) - * bits 6: BGF1 - * bits 7: BGF2 (NTSC) or FIELD (PAL) - * bits 8-14: minutes, in BCD(7bits) - * bits 15: BGF0 (NTSC) or BGF2 (PAL) - * bits 16-22: seconds, in BCD(7bits) - * bits 23: FIELD (NTSC) or BGF0 (PAL) - * bits 24-29: frames, in BCD(6bits) - * bits 30: drop frame flag (0: non drop, 1: drop) - * bits 31: color frame flag (0: unsync mode, 1: sync mode) - * @note BCD numbers (6 or 7 bits): 4 or 5 lower bits for units, 2 higher bits for tens. - * @note Frame number adjustment is automatically done in case of drop timecode, - * you do NOT have to call av_timecode_adjust_ntsc_framenum2(). - * @note The frame number is relative to tc->start. - * @note Color frame (CF) and binary group flags (BGF) bits are set to zero. - */ -uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum); - -/** - * Convert sei info to SMPTE 12M binary representation. - * - * @param rate frame rate in rational form - * @param drop drop flag - * @param hh hour - * @param mm minute - * @param ss second - * @param ff frame number - * @return the SMPTE binary representation - */ -uint32_t av_timecode_get_smpte(AVRational rate, int drop, int hh, int mm, int ss, int ff); - -/** - * Load timecode string in buf. - * - * @param tc timecode data correctly initialized - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param framenum frame number - * @return the buf parameter - * - * @note Timecode representation can be a negative timecode and have more than - * 24 hours, but will only be honored if the flags are correctly set. - * @note The frame number is relative to tc->start. - */ -char *av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum); - -/** - * Get the timecode string from the SMPTE timecode format. - * - * In contrast to av_timecode_make_smpte_tc_string this function supports 50/60 - * fps timecodes by using the field bit. - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param rate frame rate of the timecode - * @param tcsmpte the 32-bit SMPTE timecode - * @param prevent_df prevent the use of a drop flag when it is known the DF bit - * is arbitrary - * @param skip_field prevent the use of a field flag when it is known the field - * bit is arbitrary (e.g. because it is used as PC flag) - * @return the buf parameter - */ -char *av_timecode_make_smpte_tc_string2(char *buf, AVRational rate, uint32_t tcsmpte, int prevent_df, int skip_field); - -/** - * Get the timecode string from the SMPTE timecode format. - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tcsmpte the 32-bit SMPTE timecode - * @param prevent_df prevent the use of a drop flag when it is known the DF bit - * is arbitrary - * @return the buf parameter - */ -char *av_timecode_make_smpte_tc_string(char *buf, uint32_t tcsmpte, int prevent_df); - -/** - * Get the timecode string from the 25-bit timecode format (MPEG GOP format). - * - * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long - * @param tc25bit the 25-bits timecode - * @return the buf parameter - */ -char *av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit); - -/** - * Init a timecode struct with the passed parameters. - * - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param flags miscellaneous flags such as drop frame, +24 hours, ... - * (see AVTimecodeFlag) - * @param frame_start the first frame number - * @param log_ctx a pointer to an arbitrary struct of which the first field - * is a pointer to an AVClass struct (used for av_log) - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start, void *log_ctx); - -/** - * Init a timecode struct from the passed timecode components. - * - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param flags miscellaneous flags such as drop frame, +24 hours, ... - * (see AVTimecodeFlag) - * @param hh hours - * @param mm minutes - * @param ss seconds - * @param ff frames - * @param log_ctx a pointer to an arbitrary struct of which the first field - * is a pointer to an AVClass struct (used for av_log) - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init_from_components(AVTimecode *tc, AVRational rate, int flags, int hh, int mm, int ss, int ff, void *log_ctx); - -/** - * Parse timecode representation (hh:mm:ss[:;.]ff). - * - * @param tc pointer to an allocated AVTimecode - * @param rate frame rate in rational form - * @param str timecode string which will determine the frame start - * @param log_ctx a pointer to an arbitrary struct of which the first field is a - * pointer to an AVClass struct (used for av_log). - * @return 0 on success, AVERROR otherwise - */ -int av_timecode_init_from_string(AVTimecode *tc, AVRational rate, const char *str, void *log_ctx); - -/** - * Check if the timecode feature is available for the given frame rate - * - * @return 0 if supported, <0 otherwise - */ -int av_timecode_check_frame_rate(AVRational rate); - -#endif /* AVUTIL_TIMECODE_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/timestamp.h b/3rdparty/ffmpeg/include/libavutil/timestamp.h deleted file mode 100644 index fa53a46b98767..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/timestamp.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * timestamp utils, mostly useful for debugging/logging purposes - */ - -#ifndef AVUTIL_TIMESTAMP_H -#define AVUTIL_TIMESTAMP_H - -#include "avutil.h" - -#if defined(__cplusplus) && !defined(__STDC_FORMAT_MACROS) && !defined(PRId64) -#error missing -D__STDC_FORMAT_MACROS / #define __STDC_FORMAT_MACROS -#endif - -#define AV_TS_MAX_STRING_SIZE 32 - -/** - * Fill the provided buffer with a string containing a timestamp - * representation. - * - * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE - * @param ts the timestamp to represent - * @return the buffer in input - */ -static inline char *av_ts_make_string(char *buf, int64_t ts) -{ - if (ts == AV_NOPTS_VALUE) snprintf(buf, AV_TS_MAX_STRING_SIZE, "NOPTS"); - else snprintf(buf, AV_TS_MAX_STRING_SIZE, "%" PRId64, ts); - return buf; -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_ts2str(ts) av_ts_make_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts) - -/** - * Fill the provided buffer with a string containing a timestamp time - * representation. - * - * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE - * @param ts the timestamp to represent - * @param tb the timebase of the timestamp - * @return the buffer in input - */ -char *av_ts_make_time_string2(char *buf, int64_t ts, AVRational tb); - -/** - * Fill the provided buffer with a string containing a timestamp - * representation. - * - * @see av_ts_make_time_string2 - */ -static inline char *av_ts_make_time_string(char *buf, int64_t ts, - const AVRational *tb) -{ - return av_ts_make_time_string2(buf, ts, *tb); -} - -/** - * Convenience macro, the return value should be used only directly in - * function arguments but never stand-alone. - */ -#define av_ts2timestr(ts, tb) av_ts_make_time_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts, tb) - -#endif /* AVUTIL_TIMESTAMP_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/tree.h b/3rdparty/ffmpeg/include/libavutil/tree.h deleted file mode 100644 index bbb8fbb1262ed..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/tree.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * copyright (c) 2006 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * A tree container. - * @author Michael Niedermayer - */ - -#ifndef AVUTIL_TREE_H -#define AVUTIL_TREE_H - -#include "attributes.h" - -/** - * @addtogroup lavu_tree AVTree - * @ingroup lavu_data - * - * Low-complexity tree container - * - * Insertion, removal, finding equal, largest which is smaller than and - * smallest which is larger than, all have O(log n) worst-case complexity. - * @{ - */ - - -struct AVTreeNode; -extern const int av_tree_node_size; - -/** - * Allocate an AVTreeNode. - */ -struct AVTreeNode *av_tree_node_alloc(void); - -/** - * Find an element. - * @param root a pointer to the root node of the tree - * @param next If next is not NULL, then next[0] will contain the previous - * element and next[1] the next element. If either does not exist, - * then the corresponding entry in next is unchanged. - * @param cmp compare function used to compare elements in the tree, - * API identical to that of Standard C's qsort - * It is guaranteed that the first and only the first argument to cmp() - * will be the key parameter to av_tree_find(), thus it could if the - * user wants, be a different type (like an opaque context). - * @return An element with cmp(key, elem) == 0 or NULL if no such element - * exists in the tree. - */ -void *av_tree_find(const struct AVTreeNode *root, void *key, - int (*cmp)(const void *key, const void *b), void *next[2]); - -/** - * Insert or remove an element. - * - * If *next is NULL, then the supplied element will be removed if it exists. - * If *next is non-NULL, then the supplied element will be inserted, unless - * it already exists in the tree. - * - * @param rootp A pointer to a pointer to the root node of the tree; note that - * the root node can change during insertions, this is required - * to keep the tree balanced. - * @param key pointer to the element key to insert in the tree - * @param next Used to allocate and free AVTreeNodes. For insertion the user - * must set it to an allocated and zeroed object of at least - * av_tree_node_size bytes size. av_tree_insert() will set it to - * NULL if it has been consumed. - * For deleting elements *next is set to NULL by the user and - * av_tree_insert() will set it to the AVTreeNode which was - * used for the removed element. - * This allows the use of flat arrays, which have - * lower overhead compared to many malloced elements. - * You might want to define a function like: - * @code - * void *tree_insert(struct AVTreeNode **rootp, void *key, - * int (*cmp)(void *key, const void *b), - * AVTreeNode **next) - * { - * if (!*next) - * *next = av_mallocz(av_tree_node_size); - * return av_tree_insert(rootp, key, cmp, next); - * } - * void *tree_remove(struct AVTreeNode **rootp, void *key, - * int (*cmp)(void *key, const void *b, AVTreeNode **next)) - * { - * av_freep(next); - * return av_tree_insert(rootp, key, cmp, next); - * } - * @endcode - * @param cmp compare function used to compare elements in the tree, API identical - * to that of Standard C's qsort - * @return If no insertion happened, the found element; if an insertion or - * removal happened, then either key or NULL will be returned. - * Which one it is depends on the tree state and the implementation. You - * should make no assumptions that it's one or the other in the code. - */ -void *av_tree_insert(struct AVTreeNode **rootp, void *key, - int (*cmp)(const void *key, const void *b), - struct AVTreeNode **next); - -void av_tree_destroy(struct AVTreeNode *t); - -/** - * Apply enu(opaque, &elem) to all the elements in the tree in a given range. - * - * @param cmp a comparison function that returns < 0 for an element below the - * range, > 0 for an element above the range and == 0 for an - * element inside the range - * - * @note The cmp function should use the same ordering used to construct the - * tree. - */ -void av_tree_enumerate(struct AVTreeNode *t, void *opaque, - int (*cmp)(void *opaque, void *elem), - int (*enu)(void *opaque, void *elem)); - -/** - * @} - */ - -#endif /* AVUTIL_TREE_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/twofish.h b/3rdparty/ffmpeg/include/libavutil/twofish.h deleted file mode 100644 index 67f359e88c2e0..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/twofish.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * An implementation of the TwoFish algorithm - * Copyright (c) 2015 Supraja Meedinti - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TWOFISH_H -#define AVUTIL_TWOFISH_H - -#include - - -/** - * @file - * @brief Public header for libavutil TWOFISH algorithm - * @defgroup lavu_twofish TWOFISH - * @ingroup lavu_crypto - * @{ - */ - -extern const int av_twofish_size; - -struct AVTWOFISH; - -/** - * Allocate an AVTWOFISH context - * To free the struct: av_free(ptr) - */ -struct AVTWOFISH *av_twofish_alloc(void); - -/** - * Initialize an AVTWOFISH context. - * - * @param ctx an AVTWOFISH context - * @param key a key of size ranging from 1 to 32 bytes used for encryption/decryption - * @param key_bits number of keybits: 128, 192, 256 If less than the required, padded with zeroes to nearest valid value; return value is 0 if key_bits is 128/192/256, -1 if less than 0, 1 otherwise - */ -int av_twofish_init(struct AVTWOFISH *ctx, const uint8_t *key, int key_bits); - -/** - * Encrypt or decrypt a buffer using a previously initialized context - * - * @param ctx an AVTWOFISH context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 16 byte blocks - * @param iv initialization vector for CBC mode, NULL for ECB mode - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_twofish_crypt(struct AVTWOFISH *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t* iv, int decrypt); - -/** - * @} - */ -#endif /* AVUTIL_TWOFISH_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/tx.h b/3rdparty/ffmpeg/include/libavutil/tx.h deleted file mode 100644 index c950095735d76..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/tx.h +++ /dev/null @@ -1,210 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_TX_H -#define AVUTIL_TX_H - -#include -#include - -typedef struct AVTXContext AVTXContext; - -typedef struct AVComplexFloat { - float re, im; -} AVComplexFloat; - -typedef struct AVComplexDouble { - double re, im; -} AVComplexDouble; - -typedef struct AVComplexInt32 { - int32_t re, im; -} AVComplexInt32; - -enum AVTXType { - /** - * Standard complex to complex FFT with sample data type of AVComplexFloat, - * AVComplexDouble or AVComplexInt32, for each respective variant. - * - * Output is not 1/len normalized. Scaling currently unsupported. - * The stride parameter must be set to the size of a single sample in bytes. - */ - AV_TX_FLOAT_FFT = 0, - AV_TX_DOUBLE_FFT = 2, - AV_TX_INT32_FFT = 4, - - /** - * Standard MDCT with a sample data type of float, double or int32_t, - * respectively. For the float and int32 variants, the scale type is - * 'float', while for the double variant, it's 'double'. - * If scale is NULL, 1.0 will be used as a default. - * - * Length is the frame size, not the window size (which is 2x frame). - * For forward transforms, the stride specifies the spacing between each - * sample in the output array in bytes. The input must be a flat array. - * - * For inverse transforms, the stride specifies the spacing between each - * sample in the input array in bytes. The output must be a flat array. - * - * NOTE: the inverse transform is half-length, meaning the output will not - * contain redundant data. This is what most codecs work with. To do a full - * inverse transform, set the AV_TX_FULL_IMDCT flag on init. - */ - AV_TX_FLOAT_MDCT = 1, - AV_TX_DOUBLE_MDCT = 3, - AV_TX_INT32_MDCT = 5, - - /** - * Real to complex and complex to real DFTs. - * For the float and int32 variants, the scale type is 'float', while for - * the double variant, it's a 'double'. If scale is NULL, 1.0 will be used - * as a default. - * - * For forward transforms (R2C), stride must be the spacing between two - * samples in bytes. For inverse transforms, the stride must be set - * to the spacing between two complex values in bytes. - * - * The forward transform performs a real-to-complex DFT of N samples to - * N/2+1 complex values. - * - * The inverse transform performs a complex-to-real DFT of N/2+1 complex - * values to N real samples. The output is not normalized, but can be - * made so by setting the scale value to 1.0/len. - * NOTE: the inverse transform always overwrites the input. - */ - AV_TX_FLOAT_RDFT = 6, - AV_TX_DOUBLE_RDFT = 7, - AV_TX_INT32_RDFT = 8, - - /** - * Real to real (DCT) transforms. - * - * The forward transform is a DCT-II. - * The inverse transform is a DCT-III. - * - * The input array is always overwritten. DCT-III requires that the - * input be padded with 2 extra samples. Stride must be set to the - * spacing between two samples in bytes. - */ - AV_TX_FLOAT_DCT = 9, - AV_TX_DOUBLE_DCT = 10, - AV_TX_INT32_DCT = 11, - - /** - * Discrete Cosine Transform I - * - * The forward transform is a DCT-I. - * The inverse transform is a DCT-I multiplied by 2/(N + 1). - * - * The input array is always overwritten. - */ - AV_TX_FLOAT_DCT_I = 12, - AV_TX_DOUBLE_DCT_I = 13, - AV_TX_INT32_DCT_I = 14, - - /** - * Discrete Sine Transform I - * - * The forward transform is a DST-I. - * The inverse transform is a DST-I multiplied by 2/(N + 1). - * - * The input array is always overwritten. - */ - AV_TX_FLOAT_DST_I = 15, - AV_TX_DOUBLE_DST_I = 16, - AV_TX_INT32_DST_I = 17, - - /* Not part of the API, do not use */ - AV_TX_NB, -}; - -/** - * Function pointer to a function to perform the transform. - * - * @note Using a different context than the one allocated during av_tx_init() - * is not allowed. - * - * @param s the transform context - * @param out the output array - * @param in the input array - * @param stride the input or output stride in bytes - * - * The out and in arrays must be aligned to the maximum required by the CPU - * architecture unless the AV_TX_UNALIGNED flag was set in av_tx_init(). - * The stride must follow the constraints the transform type has specified. - */ -typedef void (*av_tx_fn)(AVTXContext *s, void *out, void *in, ptrdiff_t stride); - -/** - * Flags for av_tx_init() - */ -enum AVTXFlags { - /** - * Allows for in-place transformations, where input == output. - * May be unsupported or slower for some transform types. - */ - AV_TX_INPLACE = 1ULL << 0, - - /** - * Relaxes alignment requirement for the in and out arrays of av_tx_fn(). - * May be slower with certain transform types. - */ - AV_TX_UNALIGNED = 1ULL << 1, - - /** - * Performs a full inverse MDCT rather than leaving out samples that can be - * derived through symmetry. Requires an output array of 'len' floats, - * rather than the usual 'len/2' floats. - * Ignored for all transforms but inverse MDCTs. - */ - AV_TX_FULL_IMDCT = 1ULL << 2, - - /** - * Perform a real to half-complex RDFT. - * Only the real, or imaginary coefficients will - * be output, depending on the flag used. Only available for forward RDFTs. - * Output array must have enough space to hold N complex values - * (regular size for a real to complex transform). - */ - AV_TX_REAL_TO_REAL = 1ULL << 3, - AV_TX_REAL_TO_IMAGINARY = 1ULL << 4, -}; - -/** - * Initialize a transform context with the given configuration - * (i)MDCTs with an odd length are currently not supported. - * - * @param ctx the context to allocate, will be NULL on error - * @param tx pointer to the transform function pointer to set - * @param type type the type of transform - * @param inv whether to do an inverse or a forward transform - * @param len the size of the transform in samples - * @param scale pointer to the value to scale the output if supported by type - * @param flags a bitmask of AVTXFlags or 0 - * - * @return 0 on success, negative error code on failure - */ -int av_tx_init(AVTXContext **ctx, av_tx_fn *tx, enum AVTXType type, - int inv, int len, const void *scale, uint64_t flags); - -/** - * Frees a context and sets *ctx to NULL, does nothing when *ctx == NULL. - */ -void av_tx_uninit(AVTXContext **ctx); - -#endif /* AVUTIL_TX_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/uuid.h b/3rdparty/ffmpeg/include/libavutil/uuid.h deleted file mode 100644 index 748b7ed3c944b..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/uuid.h +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (c) 2022 Pierre-Anthony Lemieux - * Zane van Iperen - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * UUID parsing and serialization utilities. - * The library treats the UUID as an opaque sequence of 16 unsigned bytes, - * i.e. ignoring the internal layout of the UUID, which depends on the type - * of the UUID. - * - * @author Pierre-Anthony Lemieux - * @author Zane van Iperen - */ - -#ifndef AVUTIL_UUID_H -#define AVUTIL_UUID_H - -#include -#include - -#define AV_PRI_UUID \ - "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-" \ - "%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx" - -#define AV_PRI_URN_UUID \ - "urn:uuid:%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-" \ - "%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx" - -/* AV_UUID_ARG() is used together with AV_PRI_UUID() or AV_PRI_URN_UUID - * to print UUIDs, e.g. - * av_log(NULL, AV_LOG_DEBUG, "UUID: " AV_PRI_UUID, AV_UUID_ARG(uuid)); - */ -#define AV_UUID_ARG(x) \ - (x)[ 0], (x)[ 1], (x)[ 2], (x)[ 3], \ - (x)[ 4], (x)[ 5], (x)[ 6], (x)[ 7], \ - (x)[ 8], (x)[ 9], (x)[10], (x)[11], \ - (x)[12], (x)[13], (x)[14], (x)[15] - -#define AV_UUID_LEN 16 - -/* Binary representation of a UUID */ -typedef uint8_t AVUUID[AV_UUID_LEN]; - -/** - * Parses a string representation of a UUID formatted according to IETF RFC 4122 - * into an AVUUID. The parsing is case-insensitive. The string must be 37 - * characters long, including the terminating NUL character. - * - * Example string representation: "2fceebd0-7017-433d-bafb-d073a7116696" - * - * @param[in] in String representation of a UUID, - * e.g. 2fceebd0-7017-433d-bafb-d073a7116696 - * @param[out] uu AVUUID - * @return A non-zero value in case of an error. - */ -int av_uuid_parse(const char *in, AVUUID uu); - -/** - * Parses a URN representation of a UUID, as specified at IETF RFC 4122, - * into an AVUUID. The parsing is case-insensitive. The string must be 46 - * characters long, including the terminating NUL character. - * - * Example string representation: "urn:uuid:2fceebd0-7017-433d-bafb-d073a7116696" - * - * @param[in] in URN UUID - * @param[out] uu AVUUID - * @return A non-zero value in case of an error. - */ -int av_uuid_urn_parse(const char *in, AVUUID uu); - -/** - * Parses a string representation of a UUID formatted according to IETF RFC 4122 - * into an AVUUID. The parsing is case-insensitive. - * - * @param[in] in_start Pointer to the first character of the string representation - * @param[in] in_end Pointer to the character after the last character of the - * string representation. That memory location is never - * accessed. It is an error if `in_end - in_start != 36`. - * @param[out] uu AVUUID - * @return A non-zero value in case of an error. - */ -int av_uuid_parse_range(const char *in_start, const char *in_end, AVUUID uu); - -/** - * Serializes a AVUUID into a string representation according to IETF RFC 4122. - * The string is lowercase and always 37 characters long, including the - * terminating NUL character. - * - * @param[in] uu AVUUID - * @param[out] out Pointer to an array of no less than 37 characters. - */ -void av_uuid_unparse(const AVUUID uu, char *out); - -/** - * Compares two UUIDs for equality. - * - * @param[in] uu1 AVUUID - * @param[in] uu2 AVUUID - * @return Nonzero if uu1 and uu2 are identical, 0 otherwise - */ -static inline int av_uuid_equal(const AVUUID uu1, const AVUUID uu2) -{ - return memcmp(uu1, uu2, AV_UUID_LEN) == 0; -} - -/** - * Copies the bytes of src into dest. - * - * @param[out] dest AVUUID - * @param[in] src AVUUID - */ -static inline void av_uuid_copy(AVUUID dest, const AVUUID src) -{ - memcpy(dest, src, AV_UUID_LEN); -} - -/** - * Sets a UUID to the nil UUID, i.e. a UUID with have all - * its 128 bits set to zero. - * - * @param[in,out] uu UUID to be set to the nil UUID - */ -static inline void av_uuid_nil(AVUUID uu) -{ - memset(uu, 0, AV_UUID_LEN); -} - -#endif /* AVUTIL_UUID_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/version.h b/3rdparty/ffmpeg/include/libavutil/version.h deleted file mode 100644 index 6ce66075b441b..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/version.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * copyright (c) 2003 Fabrice Bellard - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * @ingroup lavu - * Libavutil version macros - */ - -#ifndef AVUTIL_VERSION_H -#define AVUTIL_VERSION_H - -#include "macros.h" - -/** - * @addtogroup version_utils - * - * Useful to check and match library version in order to maintain - * backward compatibility. - * - * The FFmpeg libraries follow a versioning scheme very similar to - * Semantic Versioning (http://semver.org/) - * The difference is that the component called PATCH is called MICRO in FFmpeg - * and its value is reset to 100 instead of 0 to keep it above or equal to 100. - * Also we do not increase MICRO for every bugfix or change in git master. - * - * Prior to FFmpeg 3.2 point releases did not change any lib version number to - * avoid aliassing different git master checkouts. - * Starting with FFmpeg 3.2, the released library versions will occupy - * a separate MAJOR.MINOR that is not used on the master development branch. - * That is if we branch a release of master 55.10.123 we will bump to 55.11.100 - * for the release and master will continue at 55.12.100 after it. Each new - * point release will then bump the MICRO improving the usefulness of the lib - * versions. - * - * @{ - */ - -#define AV_VERSION_INT(a, b, c) ((a)<<16 | (b)<<8 | (c)) -#define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c -#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) - -/** - * Extract version components from the full ::AV_VERSION_INT int as returned - * by functions like ::avformat_version() and ::avcodec_version() - */ -#define AV_VERSION_MAJOR(a) ((a) >> 16) -#define AV_VERSION_MINOR(a) (((a) & 0x00FF00) >> 8) -#define AV_VERSION_MICRO(a) ((a) & 0xFF) - -/** - * @} - */ - -/** - * @defgroup lavu_ver Version and Build diagnostics - * - * Macros and function useful to check at compile time and at runtime - * which version of libavutil is in use. - * - * @{ - */ - -#define LIBAVUTIL_VERSION_MAJOR 60 -#define LIBAVUTIL_VERSION_MINOR 8 -#define LIBAVUTIL_VERSION_MICRO 100 - -#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ - LIBAVUTIL_VERSION_MINOR, \ - LIBAVUTIL_VERSION_MICRO) -#define LIBAVUTIL_VERSION AV_VERSION(LIBAVUTIL_VERSION_MAJOR, \ - LIBAVUTIL_VERSION_MINOR, \ - LIBAVUTIL_VERSION_MICRO) -#define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT - -#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION) - -/** - * @defgroup lavu_depr_guards Deprecation Guards - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - * - * @note, when bumping the major version it is recommended to manually - * disable each FF_API_* in its own commit instead of disabling them all - * at once through the bump. This improves the git bisect-ability of the change. - * - * @{ - */ - -#define FF_API_MOD_UINTP2 (LIBAVUTIL_VERSION_MAJOR < 61) -#define FF_API_RISCV_FD_ZBA (LIBAVUTIL_VERSION_MAJOR < 61) -#define FF_API_VULKAN_FIXED_QUEUES (LIBAVUTIL_VERSION_MAJOR < 61) -#define FF_API_OPT_INT_LIST (LIBAVUTIL_VERSION_MAJOR < 61) -#define FF_API_OPT_PTR (LIBAVUTIL_VERSION_MAJOR < 61) - -/** - * @} - * @} - */ - -#endif /* AVUTIL_VERSION_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/video_enc_params.h b/3rdparty/ffmpeg/include/libavutil/video_enc_params.h deleted file mode 100644 index 62265a5c0642d..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/video_enc_params.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_VIDEO_ENC_PARAMS_H -#define AVUTIL_VIDEO_ENC_PARAMS_H - -#include -#include - -#include "libavutil/avassert.h" -#include "libavutil/frame.h" - -enum AVVideoEncParamsType { - AV_VIDEO_ENC_PARAMS_NONE = -1, - /** - * VP9 stores: - * - per-frame base (luma AC) quantizer index, exported as AVVideoEncParams.qp - * - deltas for luma DC, chroma AC and chroma DC, exported in the - * corresponding entries in AVVideoEncParams.delta_qp - * - per-segment delta, exported as for each block as AVVideoBlockParams.delta_qp - * - * To compute the resulting quantizer index for a block: - * - for luma AC, add the base qp and the per-block delta_qp, saturating to - * unsigned 8-bit. - * - for luma DC and chroma AC/DC, add the corresponding - * AVVideoBlockParams.delta_qp to the luma AC index, again saturating to - * unsigned 8-bit. - */ - AV_VIDEO_ENC_PARAMS_VP9, - - /** - * H.264 stores: - * - in PPS (per-picture): - * * initial QP_Y (luma) value, exported as AVVideoEncParams.qp - * * delta(s) for chroma QP values (same for both, or each separately), - * exported as in the corresponding entries in AVVideoEncParams.delta_qp - * - per-slice QP delta, not exported directly, added to the per-MB value - * - per-MB delta; not exported directly; the final per-MB quantizer - * parameter - QP_Y - minus the value in AVVideoEncParams.qp is exported - * as AVVideoBlockParams.qp_delta. - */ - AV_VIDEO_ENC_PARAMS_H264, - - /* - * MPEG-2-compatible quantizer. - * - * Summing the frame-level qp with the per-block delta_qp gives the - * resulting quantizer for the block. - */ - AV_VIDEO_ENC_PARAMS_MPEG2, -}; - -/** - * Video encoding parameters for a given frame. This struct is allocated along - * with an optional array of per-block AVVideoBlockParams descriptors. - * Must be allocated with av_video_enc_params_alloc(). - */ -typedef struct AVVideoEncParams { - /** - * Number of blocks in the array. - * - * May be 0, in which case no per-block information is present. In this case - * the values of blocks_offset / block_size are unspecified and should not - * be accessed. - */ - unsigned int nb_blocks; - /** - * Offset in bytes from the beginning of this structure at which the array - * of blocks starts. - */ - size_t blocks_offset; - /* - * Size of each block in bytes. May not match sizeof(AVVideoBlockParams). - */ - size_t block_size; - - /** - * Type of the parameters (the codec they are used with). - */ - enum AVVideoEncParamsType type; - - /** - * Base quantisation parameter for the frame. The final quantiser for a - * given block in a given plane is obtained from this value, possibly - * combined with {@code delta_qp} and the per-block delta in a manner - * documented for each type. - */ - int32_t qp; - - /** - * Quantisation parameter offset from the base (per-frame) qp for a given - * plane (first index) and AC/DC coefficients (second index). - */ - int32_t delta_qp[4][2]; -} AVVideoEncParams; - -/** - * Data structure for storing block-level encoding information. - * It is allocated as a part of AVVideoEncParams and should be retrieved with - * av_video_enc_params_block(). - * - * sizeof(AVVideoBlockParams) is not a part of the ABI and new fields may be - * added to it. - */ -typedef struct AVVideoBlockParams { - /** - * Distance in luma pixels from the top-left corner of the visible frame - * to the top-left corner of the block. - * Can be negative if top/right padding is present on the coded frame. - */ - int src_x, src_y; - /** - * Width and height of the block in luma pixels. - */ - int w, h; - - /** - * Difference between this block's final quantization parameter and the - * corresponding per-frame value. - */ - int32_t delta_qp; -} AVVideoBlockParams; - -/** - * Get the block at the specified {@code idx}. Must be between 0 and nb_blocks - 1. - */ -static av_always_inline AVVideoBlockParams* -av_video_enc_params_block(AVVideoEncParams *par, unsigned int idx) -{ - av_assert0(idx < par->nb_blocks); - return (AVVideoBlockParams *)((uint8_t *)par + par->blocks_offset + - idx * par->block_size); -} - -/** - * Allocates memory for AVVideoEncParams of the given type, plus an array of - * {@code nb_blocks} AVVideoBlockParams and initializes the variables. Can be - * freed with a normal av_free() call. - * - * @param out_size if non-NULL, the size in bytes of the resulting data array is - * written here. - */ -AVVideoEncParams *av_video_enc_params_alloc(enum AVVideoEncParamsType type, - unsigned int nb_blocks, size_t *out_size); - -/** - * Allocates memory for AVEncodeInfoFrame plus an array of - * {@code nb_blocks} AVEncodeInfoBlock in the given AVFrame {@code frame} - * as AVFrameSideData of type AV_FRAME_DATA_VIDEO_ENC_PARAMS - * and initializes the variables. - */ -AVVideoEncParams* -av_video_enc_params_create_side_data(AVFrame *frame, enum AVVideoEncParamsType type, - unsigned int nb_blocks); - -#endif /* AVUTIL_VIDEO_ENC_PARAMS_H */ diff --git a/3rdparty/ffmpeg/include/libavutil/xtea.h b/3rdparty/ffmpeg/include/libavutil/xtea.h deleted file mode 100644 index 735427c109a15..0000000000000 --- a/3rdparty/ffmpeg/include/libavutil/xtea.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * A 32-bit implementation of the XTEA algorithm - * Copyright (c) 2012 Samuel Pitoiset - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_XTEA_H -#define AVUTIL_XTEA_H - -#include - -/** - * @file - * @brief Public header for libavutil XTEA algorithm - * @defgroup lavu_xtea XTEA - * @ingroup lavu_crypto - * @{ - */ - -typedef struct AVXTEA { - uint32_t key[16]; -} AVXTEA; - -/** - * Allocate an AVXTEA context. - */ -AVXTEA *av_xtea_alloc(void); - -/** - * Initialize an AVXTEA context. - * - * @param ctx an AVXTEA context - * @param key a key of 16 bytes used for encryption/decryption, - * interpreted as big endian 32 bit numbers - */ -void av_xtea_init(struct AVXTEA *ctx, const uint8_t key[16]); - -/** - * Initialize an AVXTEA context. - * - * @param ctx an AVXTEA context - * @param key a key of 16 bytes used for encryption/decryption, - * interpreted as little endian 32 bit numbers - */ -void av_xtea_le_init(struct AVXTEA *ctx, const uint8_t key[16]); - -/** - * Encrypt or decrypt a buffer using a previously initialized context, - * in big endian format. - * - * @param ctx an AVXTEA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_xtea_crypt(struct AVXTEA *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * Encrypt or decrypt a buffer using a previously initialized context, - * in little endian format. - * - * @param ctx an AVXTEA context - * @param dst destination array, can be equal to src - * @param src source array, can be equal to dst - * @param count number of 8 byte blocks - * @param iv initialization vector for CBC mode, if NULL then ECB will be used - * @param decrypt 0 for encryption, 1 for decryption - */ -void av_xtea_le_crypt(struct AVXTEA *ctx, uint8_t *dst, const uint8_t *src, - int count, uint8_t *iv, int decrypt); - -/** - * @} - */ - -#endif /* AVUTIL_XTEA_H */ diff --git a/3rdparty/ffmpeg/include/libswresample/swresample.h b/3rdparty/ffmpeg/include/libswresample/swresample.h deleted file mode 100644 index 052089acca54c..0000000000000 --- a/3rdparty/ffmpeg/include/libswresample/swresample.h +++ /dev/null @@ -1,587 +0,0 @@ -/* - * Copyright (C) 2011-2013 Michael Niedermayer (michaelni@gmx.at) - * - * This file is part of libswresample - * - * libswresample is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * libswresample is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with libswresample; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWRESAMPLE_SWRESAMPLE_H -#define SWRESAMPLE_SWRESAMPLE_H - -/** - * @file - * @ingroup lswr - * libswresample public header - */ - -/** - * @defgroup lswr libswresample - * @{ - * - * Audio resampling, sample format conversion and mixing library. - * - * Interaction with lswr is done through SwrContext, which is - * allocated with swr_alloc() or swr_alloc_set_opts2(). It is opaque, so all parameters - * must be set with the @ref avoptions API. - * - * The first thing you will need to do in order to use lswr is to allocate - * SwrContext. This can be done with swr_alloc() or swr_alloc_set_opts2(). If you - * are using the former, you must set options through the @ref avoptions API. - * The latter function provides the same feature, but it allows you to set some - * common options in the same statement. - * - * For example the following code will setup conversion from planar float sample - * format to interleaved signed 16-bit integer, downsampling from 48kHz to - * 44.1kHz and downmixing from 5.1 channels to stereo (using the default mixing - * matrix). This is using the swr_alloc() function. - * @code - * SwrContext *swr = swr_alloc(); - * av_opt_set_chlayout(swr, "in_chlayout", &(AVChannelLayout)AV_CHANNEL_LAYOUT_5POINT1, 0); - * av_opt_set_chlayout(swr, "out_chlayout", &(AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO, 0); - * av_opt_set_int(swr, "in_sample_rate", 48000, 0); - * av_opt_set_int(swr, "out_sample_rate", 44100, 0); - * av_opt_set_sample_fmt(swr, "in_sample_fmt", AV_SAMPLE_FMT_FLTP, 0); - * av_opt_set_sample_fmt(swr, "out_sample_fmt", AV_SAMPLE_FMT_S16, 0); - * @endcode - * - * The same job can be done using swr_alloc_set_opts2() as well: - * @code - * SwrContext *swr = NULL; - * int ret = swr_alloc_set_opts2(&swr, // we're allocating a new context - * &(AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO, // out_ch_layout - * AV_SAMPLE_FMT_S16, // out_sample_fmt - * 44100, // out_sample_rate - * &(AVChannelLayout)AV_CHANNEL_LAYOUT_5POINT1, // in_ch_layout - * AV_SAMPLE_FMT_FLTP, // in_sample_fmt - * 48000, // in_sample_rate - * 0, // log_offset - * NULL); // log_ctx - * @endcode - * - * Once all values have been set, it must be initialized with swr_init(). If - * you need to change the conversion parameters, you can change the parameters - * using @ref avoptions, as described above in the first example; or by using - * swr_alloc_set_opts2(), but with the first argument the allocated context. - * You must then call swr_init() again. - * - * The conversion itself is done by repeatedly calling swr_convert(). - * Note that the samples may get buffered in swr if you provide insufficient - * output space or if sample rate conversion is done, which requires "future" - * samples. Samples that do not require future input can be retrieved at any - * time by using swr_convert() (in_count can be set to 0). - * At the end of conversion the resampling buffer can be flushed by calling - * swr_convert() with NULL in and 0 in_count. - * - * The samples used in the conversion process can be managed with the libavutil - * @ref lavu_sampmanip "samples manipulation" API, including av_samples_alloc() - * function used in the following example. - * - * The delay between input and output, can at any time be found by using - * swr_get_delay(). - * - * The following code demonstrates the conversion loop assuming the parameters - * from above and caller-defined functions get_input() and handle_output(): - * @code - * uint8_t **input; - * int in_samples; - * - * while (get_input(&input, &in_samples)) { - * uint8_t *output; - * int out_samples = av_rescale_rnd(swr_get_delay(swr, 48000) + - * in_samples, 44100, 48000, AV_ROUND_UP); - * av_samples_alloc(&output, NULL, 2, out_samples, - * AV_SAMPLE_FMT_S16, 0); - * out_samples = swr_convert(swr, &output, out_samples, - * input, in_samples); - * handle_output(output, out_samples); - * av_freep(&output); - * } - * @endcode - * - * When the conversion is finished, the conversion - * context and everything associated with it must be freed with swr_free(). - * A swr_close() function is also available, but it exists mainly for - * compatibility with libavresample, and is not required to be called. - * - * There will be no memory leak if the data is not completely flushed before - * swr_free(). - */ - -#include -#include "libavutil/channel_layout.h" -#include "libavutil/frame.h" -#include "libavutil/samplefmt.h" - -#include "libswresample/version_major.h" -#ifndef HAVE_AV_CONFIG_H -/* When included as part of the ffmpeg build, only include the major version - * to avoid unnecessary rebuilds. When included externally, keep including - * the full version information. */ -#include "libswresample/version.h" -#endif - -/** - * @name Option constants - * These constants are used for the @ref avoptions interface for lswr. - * @{ - * - */ - -#define SWR_FLAG_RESAMPLE 1 ///< Force resampling even if equal sample rate -//TODO use int resample ? -//long term TODO can we enable this dynamically? - -/** Dithering algorithms */ -enum SwrDitherType { - SWR_DITHER_NONE = 0, - SWR_DITHER_RECTANGULAR, - SWR_DITHER_TRIANGULAR, - SWR_DITHER_TRIANGULAR_HIGHPASS, - - SWR_DITHER_NS = 64, ///< not part of API/ABI - SWR_DITHER_NS_LIPSHITZ, - SWR_DITHER_NS_F_WEIGHTED, - SWR_DITHER_NS_MODIFIED_E_WEIGHTED, - SWR_DITHER_NS_IMPROVED_E_WEIGHTED, - SWR_DITHER_NS_SHIBATA, - SWR_DITHER_NS_LOW_SHIBATA, - SWR_DITHER_NS_HIGH_SHIBATA, - SWR_DITHER_NB, ///< not part of API/ABI -}; - -/** Resampling Engines */ -enum SwrEngine { - SWR_ENGINE_SWR, /**< SW Resampler */ - SWR_ENGINE_SOXR, /**< SoX Resampler */ - SWR_ENGINE_NB, ///< not part of API/ABI -}; - -/** Resampling Filter Types */ -enum SwrFilterType { - SWR_FILTER_TYPE_CUBIC, /**< Cubic */ - SWR_FILTER_TYPE_BLACKMAN_NUTTALL, /**< Blackman Nuttall windowed sinc */ - SWR_FILTER_TYPE_KAISER, /**< Kaiser windowed sinc */ -}; - -/** - * @} - */ - -/** - * The libswresample context. Unlike libavcodec and libavformat, this structure - * is opaque. This means that if you would like to set options, you must use - * the @ref avoptions API and cannot directly set values to members of the - * structure. - */ -typedef struct SwrContext SwrContext; - -/** - * Get the AVClass for SwrContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - * @return the AVClass of SwrContext - */ -const AVClass *swr_get_class(void); - -/** - * @name SwrContext constructor functions - * @{ - */ - -/** - * Allocate SwrContext. - * - * If you use this function you will need to set the parameters (manually or - * with swr_alloc_set_opts2()) before calling swr_init(). - * - * @see swr_alloc_set_opts2(), swr_init(), swr_free() - * @return NULL on error, allocated context otherwise - */ -struct SwrContext *swr_alloc(void); - -/** - * Initialize context after user parameters have been set. - * @note The context must be configured using the AVOption API. - * - * @see av_opt_set_int() - * @see av_opt_set_dict() - * - * @param[in,out] s Swr context to initialize - * @return AVERROR error code in case of failure. - */ -int swr_init(struct SwrContext *s); - -/** - * Check whether an swr context has been initialized or not. - * - * @param[in] s Swr context to check - * @see swr_init() - * @return positive if it has been initialized, 0 if not initialized - */ -int swr_is_initialized(struct SwrContext *s); - -/** - * Allocate SwrContext if needed and set/reset common parameters. - * - * This function does not require *ps to be allocated with swr_alloc(). On the - * other hand, swr_alloc() can use swr_alloc_set_opts2() to set the parameters - * on the allocated context. - * - * @param ps Pointer to an existing Swr context if available, or to NULL if not. - * On success, *ps will be set to the allocated context. - * @param out_ch_layout output channel layout (e.g. AV_CHANNEL_LAYOUT_*) - * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_*). - * @param out_sample_rate output sample rate (frequency in Hz) - * @param in_ch_layout input channel layout (e.g. AV_CHANNEL_LAYOUT_*) - * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_*). - * @param in_sample_rate input sample rate (frequency in Hz) - * @param log_offset logging level offset - * @param log_ctx parent logging context, can be NULL - * - * @see swr_init(), swr_free() - * @return 0 on success, a negative AVERROR code on error. - * On error, the Swr context is freed and *ps set to NULL. - */ -int swr_alloc_set_opts2(struct SwrContext **ps, - const AVChannelLayout *out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate, - const AVChannelLayout *in_ch_layout, enum AVSampleFormat in_sample_fmt, int in_sample_rate, - int log_offset, void *log_ctx); -/** - * @} - * - * @name SwrContext destructor functions - * @{ - */ - -/** - * Free the given SwrContext and set the pointer to NULL. - * - * @param[in] s a pointer to a pointer to Swr context - */ -void swr_free(struct SwrContext **s); - -/** - * Closes the context so that swr_is_initialized() returns 0. - * - * The context can be brought back to life by running swr_init(), - * swr_init() can also be used without swr_close(). - * This function is mainly provided for simplifying the usecase - * where one tries to support libavresample and libswresample. - * - * @param[in,out] s Swr context to be closed - */ -void swr_close(struct SwrContext *s); - -/** - * @} - * - * @name Core conversion functions - * @{ - */ - -/** Convert audio. - * - * in and in_count can be set to 0 to flush the last few samples out at the - * end. - * - * If more input is provided than output space, then the input will be buffered. - * You can avoid this buffering by using swr_get_out_samples() to retrieve an - * upper bound on the required number of output samples for the given number of - * input samples. Conversion will run directly without copying whenever possible. - * - * @param s allocated Swr context, with parameters set - * @param out output buffers, only the first one need be set in case of packed audio - * @param out_count amount of space available for output in samples per channel - * @param in input buffers, only the first one need to be set in case of packed audio - * @param in_count number of input samples available in one channel - * - * @return number of samples output per channel, negative value on error - */ -int swr_convert(struct SwrContext *s, uint8_t * const *out, int out_count, - const uint8_t * const *in , int in_count); - -/** - * Convert the next timestamp from input to output - * timestamps are in 1/(in_sample_rate * out_sample_rate) units. - * - * @note There are 2 slightly differently behaving modes. - * @li When automatic timestamp compensation is not used, (min_compensation >= FLT_MAX) - * in this case timestamps will be passed through with delays compensated - * @li When automatic timestamp compensation is used, (min_compensation < FLT_MAX) - * in this case the output timestamps will match output sample numbers. - * See ffmpeg-resampler(1) for the two modes of compensation. - * - * @param[in] s initialized Swr context - * @param[in] pts timestamp for the next input sample, INT64_MIN if unknown - * @see swr_set_compensation(), swr_drop_output(), and swr_inject_silence() are - * function used internally for timestamp compensation. - * @return the output timestamp for the next output sample - */ -int64_t swr_next_pts(struct SwrContext *s, int64_t pts); - -/** - * @} - * - * @name Low-level option setting functions - * These functions provide a means to set low-level options that is not possible - * with the AVOption API. - * @{ - */ - -/** - * Activate resampling compensation ("soft" compensation). This function is - * internally called when needed in swr_next_pts(). - * - * @param[in,out] s allocated Swr context. If it is not initialized, - * or SWR_FLAG_RESAMPLE is not set, swr_init() is - * called with the flag set. - * @param[in] sample_delta delta in PTS per sample - * @param[in] compensation_distance number of samples to compensate for - * @return >= 0 on success, AVERROR error codes if: - * @li @c s is NULL, - * @li @c compensation_distance is less than 0, - * @li @c compensation_distance is 0 but sample_delta is not, - * @li compensation unsupported by resampler, or - * @li swr_init() fails when called. - */ -int swr_set_compensation(struct SwrContext *s, int sample_delta, int compensation_distance); - -/** - * Set a customized input channel mapping. - * - * @param[in,out] s allocated Swr context, not yet initialized - * @param[in] channel_map customized input channel mapping (array of channel - * indexes, -1 for a muted channel) - * @return >= 0 on success, or AVERROR error code in case of failure. - */ -int swr_set_channel_mapping(struct SwrContext *s, const int *channel_map); - -/** - * Generate a channel mixing matrix. - * - * This function is the one used internally by libswresample for building the - * default mixing matrix. It is made public just as a utility function for - * building custom matrices. - * - * @param in_layout input channel layout - * @param out_layout output channel layout - * @param center_mix_level mix level for the center channel - * @param surround_mix_level mix level for the surround channel(s) - * @param lfe_mix_level mix level for the low-frequency effects channel - * @param rematrix_maxval if 1.0, coefficients will be normalized to prevent - * overflow. if INT_MAX, coefficients will not be - * normalized. - * @param[out] matrix mixing coefficients; matrix[i + stride * o] is - * the weight of input channel i in output channel o. - * @param stride distance between adjacent input channels in the - * matrix array - * @param matrix_encoding matrixed stereo downmix mode (e.g. dplii) - * @param log_ctx parent logging context, can be NULL - * @return 0 on success, negative AVERROR code on failure - */ -int swr_build_matrix2(const AVChannelLayout *in_layout, const AVChannelLayout *out_layout, - double center_mix_level, double surround_mix_level, - double lfe_mix_level, double maxval, - double rematrix_volume, double *matrix, - ptrdiff_t stride, enum AVMatrixEncoding matrix_encoding, - void *log_context); - -/** - * Set a customized remix matrix. - * - * @param s allocated Swr context, not yet initialized - * @param matrix remix coefficients; matrix[i + stride * o] is - * the weight of input channel i in output channel o - * @param stride offset between lines of the matrix - * @return >= 0 on success, or AVERROR error code in case of failure. - */ -int swr_set_matrix(struct SwrContext *s, const double *matrix, int stride); - -/** - * @} - * - * @name Sample handling functions - * @{ - */ - -/** - * Drops the specified number of output samples. - * - * This function, along with swr_inject_silence(), is called by swr_next_pts() - * if needed for "hard" compensation. - * - * @param s allocated Swr context - * @param count number of samples to be dropped - * - * @return >= 0 on success, or a negative AVERROR code on failure - */ -int swr_drop_output(struct SwrContext *s, int count); - -/** - * Injects the specified number of silence samples. - * - * This function, along with swr_drop_output(), is called by swr_next_pts() - * if needed for "hard" compensation. - * - * @param s allocated Swr context - * @param count number of samples to be dropped - * - * @return >= 0 on success, or a negative AVERROR code on failure - */ -int swr_inject_silence(struct SwrContext *s, int count); - -/** - * Gets the delay the next input sample will experience relative to the next output sample. - * - * Swresample can buffer data if more input has been provided than available - * output space, also converting between sample rates needs a delay. - * This function returns the sum of all such delays. - * The exact delay is not necessarily an integer value in either input or - * output sample rate. Especially when downsampling by a large value, the - * output sample rate may be a poor choice to represent the delay, similarly - * for upsampling and the input sample rate. - * - * @param s swr context - * @param base timebase in which the returned delay will be: - * @li if it's set to 1 the returned delay is in seconds - * @li if it's set to 1000 the returned delay is in milliseconds - * @li if it's set to the input sample rate then the returned - * delay is in input samples - * @li if it's set to the output sample rate then the returned - * delay is in output samples - * @li if it's the least common multiple of in_sample_rate and - * out_sample_rate then an exact rounding-free delay will be - * returned - * @returns the delay in 1 / @c base units. - */ -int64_t swr_get_delay(struct SwrContext *s, int64_t base); - -/** - * Find an upper bound on the number of samples that the next swr_convert - * call will output, if called with in_samples of input samples. This - * depends on the internal state, and anything changing the internal state - * (like further swr_convert() calls) will may change the number of samples - * swr_get_out_samples() returns for the same number of input samples. - * - * @param in_samples number of input samples. - * @note any call to swr_inject_silence(), swr_convert(), swr_next_pts() - * or swr_set_compensation() invalidates this limit - * @note it is recommended to pass the correct available buffer size - * to all functions like swr_convert() even if swr_get_out_samples() - * indicates that less would be used. - * @returns an upper bound on the number of samples that the next swr_convert - * will output or a negative value to indicate an error - */ -int swr_get_out_samples(struct SwrContext *s, int in_samples); - -/** - * @} - * - * @name Configuration accessors - * @{ - */ - -/** - * Return the @ref LIBSWRESAMPLE_VERSION_INT constant. - * - * This is useful to check if the build-time libswresample has the same version - * as the run-time one. - * - * @returns the unsigned int-typed version - */ -unsigned swresample_version(void); - -/** - * Return the swr build-time configuration. - * - * @returns the build-time @c ./configure flags - */ -const char *swresample_configuration(void); - -/** - * Return the swr license. - * - * @returns the license of libswresample, determined at build-time - */ -const char *swresample_license(void); - -/** - * @} - * - * @name AVFrame based API - * @{ - */ - -/** - * Convert the samples in the input AVFrame and write them to the output AVFrame. - * - * Input and output AVFrames must have channel_layout, sample_rate and format set. - * - * If the output AVFrame does not have the data pointers allocated the nb_samples - * field will be set using av_frame_get_buffer() - * is called to allocate the frame. - * - * The output AVFrame can be NULL or have fewer allocated samples than required. - * In this case, any remaining samples not written to the output will be added - * to an internal FIFO buffer, to be returned at the next call to this function - * or to swr_convert(). - * - * If converting sample rate, there may be data remaining in the internal - * resampling delay buffer. swr_get_delay() tells the number of - * remaining samples. To get this data as output, call this function or - * swr_convert() with NULL input. - * - * If the SwrContext configuration does not match the output and - * input AVFrame settings the conversion does not take place and depending on - * which AVFrame is not matching AVERROR_OUTPUT_CHANGED, AVERROR_INPUT_CHANGED - * or the result of a bitwise-OR of them is returned. - * - * @see swr_delay() - * @see swr_convert() - * @see swr_get_delay() - * - * @param swr audio resample context - * @param output output AVFrame - * @param input input AVFrame - * @return 0 on success, AVERROR on failure or nonmatching - * configuration. - */ -int swr_convert_frame(SwrContext *swr, - AVFrame *output, const AVFrame *input); - -/** - * Configure or reconfigure the SwrContext using the information - * provided by the AVFrames. - * - * The original resampling context is reset even on failure. - * The function calls swr_close() internally if the context is open. - * - * @see swr_close(); - * - * @param swr audio resample context - * @param out output AVFrame - * @param in input AVFrame - * @return 0 on success, AVERROR on failure. - */ -int swr_config_frame(SwrContext *swr, const AVFrame *out, const AVFrame *in); - -/** - * @} - * @} - */ - -#endif /* SWRESAMPLE_SWRESAMPLE_H */ diff --git a/3rdparty/ffmpeg/include/libswresample/version.h b/3rdparty/ffmpeg/include/libswresample/version.h deleted file mode 100644 index 9c223e1426f9a..0000000000000 --- a/3rdparty/ffmpeg/include/libswresample/version.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Version macros. - * - * This file is part of libswresample - * - * libswresample is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * libswresample is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with libswresample; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWRESAMPLE_VERSION_H -#define SWRESAMPLE_VERSION_H - -/** - * @file - * Libswresample version macros - */ - -#include "libavutil/version.h" - -#include "version_major.h" - -#define LIBSWRESAMPLE_VERSION_MINOR 1 -#define LIBSWRESAMPLE_VERSION_MICRO 100 - -#define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \ - LIBSWRESAMPLE_VERSION_MINOR, \ - LIBSWRESAMPLE_VERSION_MICRO) -#define LIBSWRESAMPLE_VERSION AV_VERSION(LIBSWRESAMPLE_VERSION_MAJOR, \ - LIBSWRESAMPLE_VERSION_MINOR, \ - LIBSWRESAMPLE_VERSION_MICRO) -#define LIBSWRESAMPLE_BUILD LIBSWRESAMPLE_VERSION_INT - -#define LIBSWRESAMPLE_IDENT "SwR" AV_STRINGIFY(LIBSWRESAMPLE_VERSION) - -#endif /* SWRESAMPLE_VERSION_H */ diff --git a/3rdparty/ffmpeg/include/libswresample/version_major.h b/3rdparty/ffmpeg/include/libswresample/version_major.h deleted file mode 100644 index 4e0bc0ab19970..0000000000000 --- a/3rdparty/ffmpeg/include/libswresample/version_major.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Version macros. - * - * This file is part of libswresample - * - * libswresample is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * libswresample is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with libswresample; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWRESAMPLE_VERSION_MAJOR_H -#define SWRESAMPLE_VERSION_MAJOR_H - -/** - * @file - * Libswresample version macros - */ - -#define LIBSWRESAMPLE_VERSION_MAJOR 6 - -#endif /* SWRESAMPLE_VERSION_MAJOR_H */ diff --git a/3rdparty/ffmpeg/include/libswscale/swscale.h b/3rdparty/ffmpeg/include/libswscale/swscale.h deleted file mode 100644 index 39e23075a4d1a..0000000000000 --- a/3rdparty/ffmpeg/include/libswscale/swscale.h +++ /dev/null @@ -1,683 +0,0 @@ -/* - * Copyright (C) 2024 Niklas Haas - * Copyright (C) 2001-2011 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWSCALE_SWSCALE_H -#define SWSCALE_SWSCALE_H - -/** - * @file - * @ingroup libsws - * external API header - */ - -#include - -#include "libavutil/avutil.h" -#include "libavutil/frame.h" -#include "libavutil/log.h" -#include "libavutil/pixfmt.h" -#include "version_major.h" -#ifndef HAVE_AV_CONFIG_H -/* When included as part of the ffmpeg build, only include the major version - * to avoid unnecessary rebuilds. When included externally, keep including - * the full version information. */ -#include "version.h" -#endif - -/** - * @defgroup libsws libswscale - * Color conversion and scaling library. - * - * @{ - * - * Return the LIBSWSCALE_VERSION_INT constant. - */ -unsigned swscale_version(void); - -/** - * Return the libswscale build-time configuration. - */ -const char *swscale_configuration(void); - -/** - * Return the libswscale license. - */ -const char *swscale_license(void); - -/** - * Get the AVClass for SwsContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. - * - * @see av_opt_find(). - */ -const AVClass *sws_get_class(void); - -/****************************** - * Flags and quality settings * - ******************************/ - -typedef enum SwsDither { - SWS_DITHER_NONE = 0, /* disable dithering */ - SWS_DITHER_AUTO, /* auto-select from preset */ - SWS_DITHER_BAYER, /* ordered dither matrix */ - SWS_DITHER_ED, /* error diffusion */ - SWS_DITHER_A_DITHER, /* arithmetic addition */ - SWS_DITHER_X_DITHER, /* arithmetic xor */ - SWS_DITHER_NB, /* not part of the ABI */ -} SwsDither; - -typedef enum SwsAlphaBlend { - SWS_ALPHA_BLEND_NONE = 0, - SWS_ALPHA_BLEND_UNIFORM, - SWS_ALPHA_BLEND_CHECKERBOARD, - SWS_ALPHA_BLEND_NB, /* not part of the ABI */ -} SwsAlphaBlend; - -typedef enum SwsFlags { - /** - * Scaler selection options. Only one may be active at a time. - */ - SWS_FAST_BILINEAR = 1 << 0, ///< fast bilinear filtering - SWS_BILINEAR = 1 << 1, ///< bilinear filtering - SWS_BICUBIC = 1 << 2, ///< 2-tap cubic B-spline - SWS_X = 1 << 3, ///< experimental - SWS_POINT = 1 << 4, ///< nearest neighbor - SWS_AREA = 1 << 5, ///< area averaging - SWS_BICUBLIN = 1 << 6, ///< bicubic luma, bilinear chroma - SWS_GAUSS = 1 << 7, ///< gaussian approximation - SWS_SINC = 1 << 8, ///< unwindowed sinc - SWS_LANCZOS = 1 << 9, ///< 3-tap sinc/sinc - SWS_SPLINE = 1 << 10, ///< cubic Keys spline - - /** - * Return an error on underspecified conversions. Without this flag, - * unspecified fields are defaulted to sensible values. - */ - SWS_STRICT = 1 << 11, - - /** - * Emit verbose log of scaling parameters. - */ - SWS_PRINT_INFO = 1 << 12, - - /** - * Perform full chroma upsampling when upscaling to RGB. - * - * For example, when converting 50x50 yuv420p to 100x100 rgba, setting this flag - * will scale the chroma plane from 25x25 to 100x100 (4:4:4), and then convert - * the 100x100 yuv444p image to rgba in the final output step. - * - * Without this flag, the chroma plane is instead scaled to 50x100 (4:2:2), - * with a single chroma sample being reused for both of the horizontally - * adjacent RGBA output pixels. - */ - SWS_FULL_CHR_H_INT = 1 << 13, - - /** - * Perform full chroma interpolation when downscaling RGB sources. - * - * For example, when converting a 100x100 rgba source to 50x50 yuv444p, setting - * this flag will generate a 100x100 (4:4:4) chroma plane, which is then - * downscaled to the required 50x50. - * - * Without this flag, the chroma plane is instead generated at 50x100 (dropping - * every other pixel), before then being downscaled to the required 50x50 - * resolution. - */ - SWS_FULL_CHR_H_INP = 1 << 14, - - /** - * Force bit-exact output. This will prevent the use of platform-specific - * optimizations that may lead to slight difference in rounding, in favor - * of always maintaining exact bit output compatibility with the reference - * C code. - * - * Note: It is recommended to set both of these flags simultaneously. - */ - SWS_ACCURATE_RND = 1 << 18, - SWS_BITEXACT = 1 << 19, - - /** - * Deprecated flags. - */ - SWS_DIRECT_BGR = 1 << 15, ///< This flag has no effect - SWS_ERROR_DIFFUSION = 1 << 23, ///< Set `SwsContext.dither` instead -} SwsFlags; - -typedef enum SwsIntent { - SWS_INTENT_PERCEPTUAL = 0, ///< Perceptual tone mapping - SWS_INTENT_RELATIVE_COLORIMETRIC = 1, ///< Relative colorimetric clipping - SWS_INTENT_SATURATION = 2, ///< Saturation mapping - SWS_INTENT_ABSOLUTE_COLORIMETRIC = 3, ///< Absolute colorimetric clipping - SWS_INTENT_NB, ///< not part of the ABI -} SwsIntent; - -/*********************************** - * Context creation and management * - ***********************************/ - -/** - * Main external API structure. New fields can be added to the end with - * minor version bumps. Removal, reordering and changes to existing fields - * require a major version bump. sizeof(SwsContext) is not part of the ABI. - */ -typedef struct SwsContext { - const AVClass *av_class; - - /** - * Private data of the user, can be used to carry app specific stuff. - */ - void *opaque; - - /** - * Bitmask of SWS_*. See `SwsFlags` for details. - */ - unsigned flags; - - /** - * Extra parameters for fine-tuning certain scalers. - */ - double scaler_params[2]; - - /** - * How many threads to use for processing, or 0 for automatic selection. - */ - int threads; - - /** - * Dither mode. - */ - SwsDither dither; - - /** - * Alpha blending mode. See `SwsAlphaBlend` for details. - */ - SwsAlphaBlend alpha_blend; - - /** - * Use gamma correct scaling. - */ - int gamma_flag; - - /** - * Deprecated frame property overrides, for the legacy API only. - * - * Ignored by sws_scale_frame() when used in dynamic mode, in which - * case all properties are instead taken from the frame directly. - */ - int src_w, src_h; ///< Width and height of the source frame - int dst_w, dst_h; ///< Width and height of the destination frame - int src_format; ///< Source pixel format - int dst_format; ///< Destination pixel format - int src_range; ///< Source is full range - int dst_range; ///< Destination is full range - int src_v_chr_pos; ///< Source vertical chroma position in luma grid / 256 - int src_h_chr_pos; ///< Source horizontal chroma position - int dst_v_chr_pos; ///< Destination vertical chroma position - int dst_h_chr_pos; ///< Destination horizontal chroma position - - /** - * Desired ICC intent for color space conversions. - */ - int intent; - - /* Remember to add new fields to graph.c:opts_equal() */ -} SwsContext; - -/** - * Allocate an empty SwsContext and set its fields to default values. - */ -SwsContext *sws_alloc_context(void); - -/** - * Free the context and everything associated with it, and write NULL - * to the provided pointer. - */ -void sws_free_context(SwsContext **ctx); - -/*************************** - * Supported frame formats * - ***************************/ - -/** - * Test if a given pixel format is supported. - * - * @param output If 0, test if compatible with the source/input frame; - * otherwise, with the destination/output frame. - * @param format The format to check. - * - * @return A positive integer if supported, 0 otherwise. - */ -int sws_test_format(enum AVPixelFormat format, int output); - -/** - * Test if a given color space is supported. - * - * @param output If 0, test if compatible with the source/input frame; - * otherwise, with the destination/output frame. - * @param colorspace The colorspace to check. - * - * @return A positive integer if supported, 0 otherwise. - */ -int sws_test_colorspace(enum AVColorSpace colorspace, int output); - -/** - * Test if a given set of color primaries is supported. - * - * @param output If 0, test if compatible with the source/input frame; - * otherwise, with the destination/output frame. - * @param primaries The color primaries to check. - * - * @return A positive integer if supported, 0 otherwise. - */ -int sws_test_primaries(enum AVColorPrimaries primaries, int output); - -/** - * Test if a given color transfer function is supported. - * - * @param output If 0, test if compatible with the source/input frame; - * otherwise, with the destination/output frame. - * @param trc The color transfer function to check. - * - * @return A positive integer if supported, 0 otherwise. - */ -int sws_test_transfer(enum AVColorTransferCharacteristic trc, int output); - -/** - * Helper function to run all sws_test_* against a frame, as well as testing - * the basic frame properties for sanity. Ignores irrelevant properties - for - * example, AVColorSpace is not checked for RGB frames. - */ -int sws_test_frame(const AVFrame *frame, int output); - -/** - * Like `sws_scale_frame`, but without actually scaling. It will instead - * merely initialize internal state that *would* be required to perform the - * operation, as well as returning the correct error code for unsupported - * frame combinations. - * - * @param ctx The scaling context. - * @param dst The destination frame to consider. - * @param src The source frame to consider. - * @return 0 on success, a negative AVERROR code on failure. - */ -int sws_frame_setup(SwsContext *ctx, const AVFrame *dst, const AVFrame *src); - -/******************** - * Main scaling API * - ********************/ - -/** - * Check if a given conversion is a noop. Returns a positive integer if - * no operation needs to be performed, 0 otherwise. - */ -int sws_is_noop(const AVFrame *dst, const AVFrame *src); - -/** - * Scale source data from `src` and write the output to `dst`. - * - * This function can be used directly on an allocated context, without setting - * up any frame properties or calling `sws_init_context()`. Such usage is fully - * dynamic and does not require reallocation if the frame properties change. - * - * Alternatively, this function can be called on a context that has been - * explicitly initialized. However, this is provided only for backwards - * compatibility. In this usage mode, all frame properties must be correctly - * set at init time, and may no longer change after initialization. - * - * @param ctx The scaling context. - * @param dst The destination frame. The data buffers may either be already - * allocated by the caller or left clear, in which case they will - * be allocated by the scaler. The latter may have performance - * advantages - e.g. in certain cases some (or all) output planes - * may be references to input planes, rather than copies. - * @param src The source frame. If the data buffers are set to NULL, then - * this function behaves identically to `sws_frame_setup`. - * @return >= 0 on success, a negative AVERROR code on failure. - */ -int sws_scale_frame(SwsContext *c, AVFrame *dst, const AVFrame *src); - -/************************* - * Legacy (stateful) API * - *************************/ - -#define SWS_SRC_V_CHR_DROP_MASK 0x30000 -#define SWS_SRC_V_CHR_DROP_SHIFT 16 - -#define SWS_PARAM_DEFAULT 123456 - -#define SWS_MAX_REDUCE_CUTOFF 0.002 - -#define SWS_CS_ITU709 1 -#define SWS_CS_FCC 4 -#define SWS_CS_ITU601 5 -#define SWS_CS_ITU624 5 -#define SWS_CS_SMPTE170M 5 -#define SWS_CS_SMPTE240M 7 -#define SWS_CS_DEFAULT 5 -#define SWS_CS_BT2020 9 - -/** - * Return a pointer to yuv<->rgb coefficients for the given colorspace - * suitable for sws_setColorspaceDetails(). - * - * @param colorspace One of the SWS_CS_* macros. If invalid, - * SWS_CS_DEFAULT is used. - */ -const int *sws_getCoefficients(int colorspace); - -// when used for filters they must have an odd number of elements -// coeffs cannot be shared between vectors -typedef struct SwsVector { - double *coeff; ///< pointer to the list of coefficients - int length; ///< number of coefficients in the vector -} SwsVector; - -// vectors can be shared -typedef struct SwsFilter { - SwsVector *lumH; - SwsVector *lumV; - SwsVector *chrH; - SwsVector *chrV; -} SwsFilter; - -/** - * Return a positive value if pix_fmt is a supported input format, 0 - * otherwise. - */ -int sws_isSupportedInput(enum AVPixelFormat pix_fmt); - -/** - * Return a positive value if pix_fmt is a supported output format, 0 - * otherwise. - */ -int sws_isSupportedOutput(enum AVPixelFormat pix_fmt); - -/** - * @param[in] pix_fmt the pixel format - * @return a positive value if an endianness conversion for pix_fmt is - * supported, 0 otherwise. - */ -int sws_isSupportedEndiannessConversion(enum AVPixelFormat pix_fmt); - -/** - * Initialize the swscaler context sws_context. - * - * This function is considered deprecated, and provided only for backwards - * compatibility with sws_scale() and sws_start_frame(). The preferred way to - * use libswscale is to set all frame properties correctly and call - * sws_scale_frame() directly, without explicitly initializing the context. - * - * @return zero or positive value on success, a negative value on - * error - */ -av_warn_unused_result -int sws_init_context(SwsContext *sws_context, SwsFilter *srcFilter, SwsFilter *dstFilter); - -/** - * Free the swscaler context swsContext. - * If swsContext is NULL, then does nothing. - */ -void sws_freeContext(SwsContext *swsContext); - -/** - * Allocate and return an SwsContext. You need it to perform - * scaling/conversion operations using sws_scale(). - * - * @param srcW the width of the source image - * @param srcH the height of the source image - * @param srcFormat the source image format - * @param dstW the width of the destination image - * @param dstH the height of the destination image - * @param dstFormat the destination image format - * @param flags specify which algorithm and options to use for rescaling - * @param param extra parameters to tune the used scaler - * For SWS_BICUBIC param[0] and [1] tune the shape of the basis - * function, param[0] tunes f(1) and param[1] f´(1) - * For SWS_GAUSS param[0] tunes the exponent and thus cutoff - * frequency - * For SWS_LANCZOS param[0] tunes the width of the window function - * @return a pointer to an allocated context, or NULL in case of error - * @note this function is to be removed after a saner alternative is - * written - */ -SwsContext *sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat, - int dstW, int dstH, enum AVPixelFormat dstFormat, - int flags, SwsFilter *srcFilter, - SwsFilter *dstFilter, const double *param); - -/** - * Scale the image slice in srcSlice and put the resulting scaled - * slice in the image in dst. A slice is a sequence of consecutive - * rows in an image. Requires a context that has been previously - * been initialized with sws_init_context(). - * - * Slices have to be provided in sequential order, either in - * top-bottom or bottom-top order. If slices are provided in - * non-sequential order the behavior of the function is undefined. - * - * @param c the scaling context previously created with - * sws_getContext() - * @param srcSlice the array containing the pointers to the planes of - * the source slice - * @param srcStride the array containing the strides for each plane of - * the source image - * @param srcSliceY the position in the source image of the slice to - * process, that is the number (counted starting from - * zero) in the image of the first row of the slice - * @param srcSliceH the height of the source slice, that is the number - * of rows in the slice - * @param dst the array containing the pointers to the planes of - * the destination image - * @param dstStride the array containing the strides for each plane of - * the destination image - * @return the height of the output slice - */ -int sws_scale(SwsContext *c, const uint8_t *const srcSlice[], - const int srcStride[], int srcSliceY, int srcSliceH, - uint8_t *const dst[], const int dstStride[]); - -/** - * Initialize the scaling process for a given pair of source/destination frames. - * Must be called before any calls to sws_send_slice() and sws_receive_slice(). - * Requires a context that has been previously been initialized with - * sws_init_context(). - * - * This function will retain references to src and dst, so they must both use - * refcounted buffers (if allocated by the caller, in case of dst). - * - * @param c The scaling context - * @param dst The destination frame. - * - * The data buffers may either be already allocated by the caller or - * left clear, in which case they will be allocated by the scaler. - * The latter may have performance advantages - e.g. in certain cases - * some output planes may be references to input planes, rather than - * copies. - * - * Output data will be written into this frame in successful - * sws_receive_slice() calls. - * @param src The source frame. The data buffers must be allocated, but the - * frame data does not have to be ready at this point. Data - * availability is then signalled by sws_send_slice(). - * @return 0 on success, a negative AVERROR code on failure - * - * @see sws_frame_end() - */ -int sws_frame_start(SwsContext *c, AVFrame *dst, const AVFrame *src); - -/** - * Finish the scaling process for a pair of source/destination frames previously - * submitted with sws_frame_start(). Must be called after all sws_send_slice() - * and sws_receive_slice() calls are done, before any new sws_frame_start() - * calls. - * - * @param c The scaling context - */ -void sws_frame_end(SwsContext *c); - -/** - * Indicate that a horizontal slice of input data is available in the source - * frame previously provided to sws_frame_start(). The slices may be provided in - * any order, but may not overlap. For vertically subsampled pixel formats, the - * slices must be aligned according to subsampling. - * - * @param c The scaling context - * @param slice_start first row of the slice - * @param slice_height number of rows in the slice - * - * @return a non-negative number on success, a negative AVERROR code on failure. - */ -int sws_send_slice(SwsContext *c, unsigned int slice_start, - unsigned int slice_height); - -/** - * Request a horizontal slice of the output data to be written into the frame - * previously provided to sws_frame_start(). - * - * @param c The scaling context - * @param slice_start first row of the slice; must be a multiple of - * sws_receive_slice_alignment() - * @param slice_height number of rows in the slice; must be a multiple of - * sws_receive_slice_alignment(), except for the last slice - * (i.e. when slice_start+slice_height is equal to output - * frame height) - * - * @return a non-negative number if the data was successfully written into the output - * AVERROR(EAGAIN) if more input data needs to be provided before the - * output can be produced - * another negative AVERROR code on other kinds of scaling failure - */ -int sws_receive_slice(SwsContext *c, unsigned int slice_start, - unsigned int slice_height); - -/** - * Get the alignment required for slices. Requires a context that has been - * previously been initialized with sws_init_context(). - * - * @param c The scaling context - * @return alignment required for output slices requested with sws_receive_slice(). - * Slice offsets and sizes passed to sws_receive_slice() must be - * multiples of the value returned from this function. - */ -unsigned int sws_receive_slice_alignment(const SwsContext *c); - -/** - * @param c the scaling context - * @param dstRange flag indicating the while-black range of the output (1=jpeg / 0=mpeg) - * @param srcRange flag indicating the while-black range of the input (1=jpeg / 0=mpeg) - * @param table the yuv2rgb coefficients describing the output yuv space, normally ff_yuv2rgb_coeffs[x] - * @param inv_table the yuv2rgb coefficients describing the input yuv space, normally ff_yuv2rgb_coeffs[x] - * @param brightness 16.16 fixed point brightness correction - * @param contrast 16.16 fixed point contrast correction - * @param saturation 16.16 fixed point saturation correction - * - * @return A negative error code on error, non negative otherwise. - * If `LIBSWSCALE_VERSION_MAJOR < 7`, returns -1 if not supported. - */ -int sws_setColorspaceDetails(SwsContext *c, const int inv_table[4], - int srcRange, const int table[4], int dstRange, - int brightness, int contrast, int saturation); - -/** - * @return A negative error code on error, non negative otherwise. - * If `LIBSWSCALE_VERSION_MAJOR < 7`, returns -1 if not supported. - */ -int sws_getColorspaceDetails(SwsContext *c, int **inv_table, - int *srcRange, int **table, int *dstRange, - int *brightness, int *contrast, int *saturation); - -/** - * Allocate and return an uninitialized vector with length coefficients. - */ -SwsVector *sws_allocVec(int length); - -/** - * Return a normalized Gaussian curve used to filter stuff - * quality = 3 is high quality, lower is lower quality. - */ -SwsVector *sws_getGaussianVec(double variance, double quality); - -/** - * Scale all the coefficients of a by the scalar value. - */ -void sws_scaleVec(SwsVector *a, double scalar); - -/** - * Scale all the coefficients of a so that their sum equals height. - */ -void sws_normalizeVec(SwsVector *a, double height); - -void sws_freeVec(SwsVector *a); - -SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur, - float lumaSharpen, float chromaSharpen, - float chromaHShift, float chromaVShift, - int verbose); -void sws_freeFilter(SwsFilter *filter); - -/** - * Check if context can be reused, otherwise reallocate a new one. - * - * If context is NULL, just calls sws_getContext() to get a new - * context. Otherwise, checks if the parameters are the ones already - * saved in context. If that is the case, returns the current - * context. Otherwise, frees context and gets a new context with - * the new parameters. - * - * Be warned that srcFilter and dstFilter are not checked, they - * are assumed to remain the same. - */ -SwsContext *sws_getCachedContext(SwsContext *context, int srcW, int srcH, - enum AVPixelFormat srcFormat, int dstW, int dstH, - enum AVPixelFormat dstFormat, int flags, - SwsFilter *srcFilter, SwsFilter *dstFilter, - const double *param); - -/** - * Convert an 8-bit paletted frame into a frame with a color depth of 32 bits. - * - * The output frame will have the same packed format as the palette. - * - * @param src source frame buffer - * @param dst destination frame buffer - * @param num_pixels number of pixels to convert - * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src - */ -void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette); - -/** - * Convert an 8-bit paletted frame into a frame with a color depth of 24 bits. - * - * With the palette format "ABCD", the destination frame ends up with the format "ABC". - * - * @param src source frame buffer - * @param dst destination frame buffer - * @param num_pixels number of pixels to convert - * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src - */ -void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette); - -/** - * @} - */ - -#endif /* SWSCALE_SWSCALE_H */ diff --git a/3rdparty/ffmpeg/include/libswscale/version.h b/3rdparty/ffmpeg/include/libswscale/version.h deleted file mode 100644 index 4e54701aba888..0000000000000 --- a/3rdparty/ffmpeg/include/libswscale/version.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWSCALE_VERSION_H -#define SWSCALE_VERSION_H - -/** - * @file - * swscale version macros - */ - -#include "libavutil/version.h" - -#include "version_major.h" - -#define LIBSWSCALE_VERSION_MINOR 1 -#define LIBSWSCALE_VERSION_MICRO 100 - -#define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \ - LIBSWSCALE_VERSION_MINOR, \ - LIBSWSCALE_VERSION_MICRO) -#define LIBSWSCALE_VERSION AV_VERSION(LIBSWSCALE_VERSION_MAJOR, \ - LIBSWSCALE_VERSION_MINOR, \ - LIBSWSCALE_VERSION_MICRO) -#define LIBSWSCALE_BUILD LIBSWSCALE_VERSION_INT - -#define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION) - -#endif /* SWSCALE_VERSION_H */ diff --git a/3rdparty/ffmpeg/include/libswscale/version_major.h b/3rdparty/ffmpeg/include/libswscale/version_major.h deleted file mode 100644 index 0dc507921ed4c..0000000000000 --- a/3rdparty/ffmpeg/include/libswscale/version_major.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWSCALE_VERSION_MAJOR_H -#define SWSCALE_VERSION_MAJOR_H - -/** - * @file - * swscale version macros - */ - -#define LIBSWSCALE_VERSION_MAJOR 9 - -/** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - */ - -#endif /* SWSCALE_VERSION_MAJOR_H */ diff --git a/cmake/FindFFMPEG.cmake b/cmake/FindFFMPEG.cmake index f727ef2dddfff..e3386c8fd36d4 100644 --- a/cmake/FindFFMPEG.cmake +++ b/cmake/FindFFMPEG.cmake @@ -55,10 +55,16 @@ function (_ffmpeg_find component headername) list(APPEND CMAKE_FIND_LIBRARY_PREFIXES "" "lib") endif () + if (WIN32 AND FFMPEG_${component}_INCLUDE_DIR) + get_filename_component(_ffmpeg_prefix "${FFMPEG_${component}_INCLUDE_DIR}" DIRECTORY) + set(_ffmpeg_bindir "${_ffmpeg_prefix}/bin") + endif () + find_library("FFMPEG_${component}_LIBRARY" NAMES "${component}" PATHS + "${_ffmpeg_bindir}" "${FFMPEG_ROOT}/lib" ~/Library/Frameworks /Library/Frameworks diff --git a/cmake/SearchForStuff.cmake b/cmake/SearchForStuff.cmake index f3b71b7dd2ae1..e0f3b4ac7e3a2 100644 --- a/cmake/SearchForStuff.cmake +++ b/cmake/SearchForStuff.cmake @@ -22,6 +22,7 @@ find_package(Freetype 2.10 REQUIRED) # 2.10 is the first with COLRv0 support, wh find_package(plutovg 1.1.0 REQUIRED) find_package(plutosvg 0.0.7 REQUIRED) find_package(ryml REQUIRED) +find_package(FFMPEG COMPONENTS avcodec avformat avutil swresample swscale REQUIRED) if (WIN32) find_package(DirectX-Headers 1.618.1 REQUIRED) endif() @@ -35,21 +36,12 @@ if (WIN32) add_subdirectory(3rdparty/D3D12MemAlloc EXCLUDE_FROM_ALL) add_subdirectory(3rdparty/winpixeventruntime EXCLUDE_FROM_ALL) add_subdirectory(3rdparty/winwil EXCLUDE_FROM_ALL) - set(FFMPEG_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/3rdparty/ffmpeg/include") find_package(Vtune) else() find_package(CURL REQUIRED) find_package(PCAP REQUIRED) find_package(Vtune) - # Use bundled ffmpeg v4.x.x headers if we can't locate it in the system. - # We'll try to load it dynamically at runtime. - find_package(FFMPEG COMPONENTS avcodec avformat avutil swresample swscale) - if(NOT FFMPEG_FOUND) - message(WARNING "FFmpeg not found, using bundled headers.") - set(FFMPEG_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/3rdparty/ffmpeg/include") - endif() - ## Use CheckLib package to find module include(CheckLib) diff --git a/common/vsprops/LinkPCSX2Deps.props b/common/vsprops/LinkPCSX2Deps.props index f986272cd1bc0..75825177acb69 100644 --- a/common/vsprops/LinkPCSX2Deps.props +++ b/common/vsprops/LinkPCSX2Deps.props @@ -28,12 +28,11 @@ - - - - - - + + + + + diff --git a/pcsx2/CMakeLists.txt b/pcsx2/CMakeLists.txt index 4652ff99f5ce9..38a6aaae9042a 100644 --- a/pcsx2/CMakeLists.txt +++ b/pcsx2/CMakeLists.txt @@ -1320,10 +1320,17 @@ function(setup_main_executable target) install(FILES "${DEPS_BINDIR}/${DEP_TO_COPY}" DESTINATION "${CMAKE_SOURCE_DIR}/bin") endforeach() - set(OPT_DEPS_TO_COPY avcodec-62.dll avformat-62.dll avutil-60.dll swresample-6.dll swscale-9.dll) - foreach(OPT_DEP_TO_COPY ${OPT_DEPS_TO_COPY}) - install(FILES "${DEPS_BINDIR}/${OPT_DEP_TO_COPY}" DESTINATION "${CMAKE_SOURCE_DIR}/bin" OPTIONAL) - endforeach() + file(GLOB OPT_DEPS_FULL_PATHS + "${DEPS_BINDIR}/avcodec-*.dll" + "${DEPS_BINDIR}/avformat-*.dll" + "${DEPS_BINDIR}/avutil-*.dll" + "${DEPS_BINDIR}/swscale-*.dll" + "${DEPS_BINDIR}/swresample-*.dll" + ) + install(FILES ${OPT_DEPS_FULL_PATHS} DESTINATION "${CMAKE_SOURCE_DIR}/bin" OPTIONAL) + + set(OPT_DEPS_TO_COPY ${OPT_DEPS_FULL_PATHS}) + list(TRANSFORM OPT_DEPS_TO_COPY REPLACE "^.*/" "") set(SYMBOLS_TO_COPY ${DEPS_TO_COPY} ${OPT_DEPS_TO_COPY}) list(TRANSFORM SYMBOLS_TO_COPY REPLACE "[.]dll" ".pdb") diff --git a/pcsx2/GS/GSCapture.cpp b/pcsx2/GS/GSCapture.cpp index 827a4a75bcb69..d143f9e8db377 100644 --- a/pcsx2/GS/GSCapture.cpp +++ b/pcsx2/GS/GSCapture.cpp @@ -67,6 +67,7 @@ extern "C" { X(avcodec_receive_packet) \ X(avcodec_parameters_from_context) \ X(avcodec_get_hw_config) \ + X(avcodec_get_supported_config) \ X(av_codec_iterate) \ X(av_packet_alloc) \ X(av_packet_free) \ @@ -454,14 +455,16 @@ bool GSCapture::BeginCapture(float fps, GSVector2i recommendedResolution, float // Default to NV12 if not overridden by the user const AVPixelFormat preferred_sw_pix_fmt = GSConfig.VideoCaptureFormat.empty() ? AV_PIX_FMT_NV12 : static_cast(std::stoi(GSConfig.VideoCaptureFormat)); AVPixelFormat sw_pix_fmt = preferred_sw_pix_fmt; - if (vcodec->pix_fmts) + const AVPixelFormat* supported_pix_fmts = nullptr; + if (wrap_avcodec_get_supported_config(nullptr, vcodec, AV_CODEC_CONFIG_PIX_FORMAT, 0, + reinterpret_cast(&supported_pix_fmts), nullptr) == 0 && supported_pix_fmts) { - sw_pix_fmt = vcodec->pix_fmts[0]; - for (u32 i = 0; vcodec->pix_fmts[i] != AV_PIX_FMT_NONE; i++) + sw_pix_fmt = supported_pix_fmts[0]; + for (u32 i = 0; supported_pix_fmts[i] != AV_PIX_FMT_NONE; i++) { - if (vcodec->pix_fmts[i] == preferred_sw_pix_fmt) + if (supported_pix_fmts[i] == preferred_sw_pix_fmt) { - sw_pix_fmt = vcodec->pix_fmts[i]; + sw_pix_fmt = supported_pix_fmts[i]; break; } } @@ -686,18 +689,28 @@ bool GSCapture::BeginCapture(float fps, GSVector2i recommendedResolution, float #endif bool supports_format = false; - for (const AVSampleFormat* p = acodec->sample_fmts; *p != AV_SAMPLE_FMT_NONE; p++) + const AVSampleFormat* supported_sample_fmts = nullptr; + if (wrap_avcodec_get_supported_config(nullptr, acodec, AV_CODEC_CONFIG_SAMPLE_FORMAT, 0, + reinterpret_cast(&supported_sample_fmts), nullptr) == 0 && supported_sample_fmts) { - if (*p == s_audio_codec_context->sample_fmt) + for (const AVSampleFormat* p = supported_sample_fmts; *p != AV_SAMPLE_FMT_NONE; p++) { - supports_format = true; - break; + if (*p == s_audio_codec_context->sample_fmt) + { + supports_format = true; + break; + } } } + else + { + supports_format = true; + } + if (!supports_format) { Console.WriteLn(fmt::format("Audio codec '{}' does not support float samples, using default.", acodec->name)); - s_audio_codec_context->sample_fmt = acodec->sample_fmts[0]; + s_audio_codec_context->sample_fmt = supported_sample_fmts[0]; s_swr_context = wrap_swr_alloc(); if (!s_swr_context) { @@ -1532,16 +1545,18 @@ GSCapture::FormatList GSCapture::GetVideoFormatList(const char* codec) return ret; } + const AVPixelFormat* pix_fmts = nullptr; // rawvideo doesn't have a list of formats. - if (v_codec->pix_fmts == nullptr) + if (wrap_avcodec_get_supported_config(nullptr, v_codec, AV_CODEC_CONFIG_PIX_FORMAT, 0, + reinterpret_cast(&pix_fmts), nullptr) != 0 || !pix_fmts) { - Console.Error("(GetVideoFormatList) v_codec->pix_fmts is null."); + Console.Error("(GetVideoFormatList) v_codec has no pixel format list."); return ret; } - for (int i = 0; v_codec->pix_fmts[i] != AVPixelFormat::AV_PIX_FMT_NONE; i++) + for (int i = 0; pix_fmts[i] != AVPixelFormat::AV_PIX_FMT_NONE; i++) { - ret.emplace_back(v_codec->pix_fmts[i], wrap_av_get_pix_fmt_name(v_codec->pix_fmts[i])); + ret.emplace_back(pix_fmts[i], wrap_av_get_pix_fmt_name(pix_fmts[i])); } return ret; diff --git a/pcsx2/pcsx2.vcxproj b/pcsx2/pcsx2.vcxproj index 5dcf68fcc1804..119e7bc4a4bfb 100644 --- a/pcsx2/pcsx2.vcxproj +++ b/pcsx2/pcsx2.vcxproj @@ -48,7 +48,6 @@ %(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\soundtouch\soundtouch %(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\discord-rpc\include %(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\jpgd - %(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\ffmpeg\include %(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\glad\include %(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\vulkan\include %(AdditionalIncludeDirectories);$(SolutionDir)3rdparty\d3d12memalloc\include