early-access version 2864

This commit is contained in:
pineappleEA 2022-07-27 20:06:50 +02:00
parent 569d5e0f66
commit c1feb74617
2062 changed files with 73334 additions and 70676 deletions

View file

@ -1,3 +1,6 @@
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
cmake_minimum_required(VERSION 3.15) cmake_minimum_required(VERSION 3.15)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")

View file

@ -1,3 +1,6 @@
# SPDX-FileCopyrightText: 2020 yuzu Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
function(copy_yuzu_FFmpeg_deps target_dir) function(copy_yuzu_FFmpeg_deps target_dir)
include(WindowsCopyFiles) include(WindowsCopyFiles)
set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/") set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/")

View file

@ -1,3 +1,6 @@
# SPDX-FileCopyrightText: 2016 Citra Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
function(copy_yuzu_Qt5_deps target_dir) function(copy_yuzu_Qt5_deps target_dir)
include(WindowsCopyFiles) include(WindowsCopyFiles)
if (MSVC) if (MSVC)

View file

@ -1,3 +1,6 @@
# SPDX-FileCopyrightText: 2016 Citra Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
function(copy_yuzu_SDL_deps target_dir) function(copy_yuzu_SDL_deps target_dir)
include(WindowsCopyFiles) include(WindowsCopyFiles)
set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/") set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/")

View file

@ -1,3 +1,5 @@
# SPDX-FileCopyrightText: 2017 yuzu Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
# This function downloads a binary library package from our external repo. # This function downloads a binary library package from our external repo.
# Params: # Params:

View file

@ -1,3 +1,6 @@
# SPDX-FileCopyrightText: 2019 yuzu Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
# Gets a UTC timstamp and sets the provided variable to it # Gets a UTC timstamp and sets the provided variable to it
function(get_timestamp _var) function(get_timestamp _var)
string(TIMESTAMP timestamp UTC) string(TIMESTAMP timestamp UTC)

View file

@ -1,3 +1,6 @@
# SPDX-FileCopyrightText: 2022 yuzu Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
# buildcache wrapper # buildcache wrapper
OPTION(USE_CCACHE "Use buildcache for compilation" OFF) OPTION(USE_CCACHE "Use buildcache for compilation" OFF)
IF(USE_CCACHE) IF(USE_CCACHE)

View file

@ -1,3 +1,6 @@
# SPDX-FileCopyrightText: 2022 yuzu Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
set(MINGW_PREFIX /usr/x86_64-w64-mingw32/) set(MINGW_PREFIX /usr/x86_64-w64-mingw32/)
set(CMAKE_SYSTEM_NAME Windows) set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_PROCESSOR x86_64) set(CMAKE_SYSTEM_PROCESSOR x86_64)

View file

@ -1,3 +1,6 @@
# SPDX-FileCopyrightText: 2018 tech4me <guiwanglong@gmail.com>
# SPDX-License-Identifier: GPL-2.0-or-later
set(MINGW_PREFIX /usr/x86_64-w64-mingw32/) set(MINGW_PREFIX /usr/x86_64-w64-mingw32/)
set(CMAKE_SYSTEM_NAME Windows) set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_PROCESSOR x86_64) set(CMAKE_SYSTEM_PROCESSOR x86_64)

674
LICENSE.txt Executable file
View file

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
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.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
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 <https://www.gnu.org/licenses/>.
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:
<program> Copyright (C) <year> <name of author>
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
<https://www.gnu.org/licenses/>.
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
<https://www.gnu.org/licenses/why-not-lgpl.html>.

View file

@ -1,7 +1,7 @@
yuzu emulator early access yuzu emulator early access
============= =============
This is the source code for early-access 2863. This is the source code for early-access 2864.
## Legal Notice ## Legal Notice

View file

@ -1,3 +1,8 @@
<!--
SPDX-FileCopyrightText: 2018 yuzu Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later
-->
<RCC> <RCC>
<qresource prefix="compatibility_list"> <qresource prefix="compatibility_list">
<file>compatibility_list.json</file> <file>compatibility_list.json</file>

View file

@ -1,3 +1,8 @@
<!--
SPDX-FileCopyrightText: 2020 yuzu Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later
-->
<RCC> <RCC>
<qresource prefix="controller"> <qresource prefix="controller">
<file alias="applet_dual_joycon">applet_dual_joycon.png</file> <file alias="applet_dual_joycon">applet_dual_joycon.png</file>

View file

@ -1,3 +1,8 @@
<!--
SPDX-FileCopyrightText: 2021 yuzu Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later
-->
<RCC> <RCC>
<qresource prefix="overlay"> <qresource prefix="overlay">
<file>arrow_left.png</file> <file>arrow_left.png</file>

View file

@ -1,3 +1,6 @@
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
[Desktop Entry] [Desktop Entry]
Version=1.0 Version=1.0
Type=Application Type=Application

View file

@ -1,4 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!--
SPDX-FileCopyrightText: 2021 yuzu Emulator Project
SPDX-License-Identifier: CC0-1.0
-->
<component type="desktop-application"> <component type="desktop-application">
<id>org.yuzu_emu.yuzu</id> <id>org.yuzu_emu.yuzu</id>
<metadata_license>CC0-1.0</metadata_license> <metadata_license>CC0-1.0</metadata_license>

View file

@ -1,4 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!--
SPDX-FileCopyrightText: 2018 yuzu Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later
-->
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"> <mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
<mime-type type="application/x-nx-nro"> <mime-type type="application/x-nx-nro">
<comment>Nintendo Switch homebrew executable</comment> <comment>Nintendo Switch homebrew executable</comment>

View file

@ -1,3 +1,8 @@
<!--
SPDX-FileCopyrightText: 2019 yuzu Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later
-->
<RCC> <RCC>
<qresource prefix="icons/colorful"> <qresource prefix="icons/colorful">
<file alias="index.theme">icons/index.theme</file> <file alias="index.theme">icons/index.theme</file>

View file

@ -1,3 +1,8 @@
<!--
SPDX-FileCopyrightText: 2019 yuzu Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later
-->
<RCC> <RCC>
<qresource prefix="icons/colorful_dark"> <qresource prefix="icons/colorful_dark">
<file alias="16x16/connected.png">../colorful/icons/16x16/connected.png</file> <file alias="16x16/connected.png">../colorful/icons/16x16/connected.png</file>

View file

@ -1,3 +1,8 @@
<!--
SPDX-FileCopyrightText: 2020 yuzu Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later
-->
<RCC> <RCC>
<qresource prefix="icons/colorful_midnight_blue"> <qresource prefix="icons/colorful_midnight_blue">
<file alias="index.theme">icons/index.theme</file> <file alias="index.theme">icons/index.theme</file>

View file

@ -1,3 +1,8 @@
<!--
SPDX-FileCopyrightText: 2018 yuzu Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later
-->
<RCC> <RCC>
<qresource prefix="icons/default"> <qresource prefix="icons/default">
<file alias="index.theme">icons/index.theme</file> <file alias="index.theme">icons/index.theme</file>

6
dist/yuzu.manifest vendored
View file

@ -1,4 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
SPDX-FileCopyrightText: 2020 yuzu Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later
-->
<assembly manifestVersion="1.0" <assembly manifestVersion="1.0"
xmlns="urn:schemas-microsoft-com:asm.v1" xmlns="urn:schemas-microsoft-com:asm.v1"
xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">

View file

@ -1,4 +1,5 @@
# Definitions for all external bundled libraries # SPDX-FileCopyrightText: 2016 Citra Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMakeModules") list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMakeModules")
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/externals/find-modules") list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/externals/find-modules")

View file

@ -1,3 +1,7 @@
# SPDX-FileCopyrightText: 2009 Iowa State University
# SPDX-FileContributor: Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# SPDX-License-Identifier: BSL-1.0
# - Returns a version string from Git # - Returns a version string from Git
# #
# These functions force a re-configure on each git commit so that you can # These functions force a re-configure on each git commit so that you can

View file

@ -1,4 +1,7 @@
# # SPDX-FileCopyrightText: 2009 Iowa State University
# SPDX-FileContributor: Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# SPDX-License-Identifier: BSL-1.0
# Internal file for GetGitRevisionDescription.cmake # Internal file for GetGitRevisionDescription.cmake
# #
# Requires CMake 2.6 or newer (uses the 'function' command) # Requires CMake 2.6 or newer (uses the 'function' command)

View file

@ -1,6 +1,5 @@
# Copyright 2018 Yuzu Emulator Project # SPDX-FileCopyrightText: 2018 yuzu Emulator Project
# Licensed under GPLv2 or any later version # SPDX-License-Identifier: GPL-2.0-or-later
# Refer to the license.txt file included.
# This file provides the function windows_copy_files. # This file provides the function windows_copy_files.
# This is only valid on Windows. # This is only valid on Windows.

View file

@ -1,3 +1,6 @@
# SPDX-FileCopyrightText: 2021 yuzu Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
if (NOT WIN32) if (NOT WIN32)
# Build FFmpeg from externals # Build FFmpeg from externals
message(STATUS "Using FFmpeg from externals") message(STATUS "Using FFmpeg from externals")

View file

@ -10,16 +10,12 @@
<barryjzhao@tencent.com> <jun.zhao@intel.com> <barryjzhao@tencent.com> <jun.zhao@intel.com>
<josh@itanimul.li> <joshdk@obe.tv> <josh@itanimul.li> <joshdk@obe.tv>
<michael@niedermayer.cc> <michaelni@gmx.at> <michael@niedermayer.cc> <michaelni@gmx.at>
<linjie.justin.fu@gmail.com> <linjie.fu@intel.com> <linjie.fu@intel.com> <fulinjie@zju.edu.cn>
<linjie.justin.fu@gmail.com> <fulinjie@zju.edu.cn>
<ceffmpeg@gmail.com> <cehoyos@ag.or.at> <ceffmpeg@gmail.com> <cehoyos@ag.or.at>
<ceffmpeg@gmail.com> <cehoyos@rainbow.studorg.tuwien.ac.at> <ceffmpeg@gmail.com> <cehoyos@rainbow.studorg.tuwien.ac.at>
<ffmpeg@gyani.pro> <gyandoshi@gmail.com> <ffmpeg@gyani.pro> <gyandoshi@gmail.com>
<atomnuker@gmail.com> <rpehlivanov@obe.tv> <atomnuker@gmail.com> <rpehlivanov@obe.tv>
<lizhong1008@gmail.com> <zhong.li@intel.com> <zhong.li@intel.com> <zhongli_dev@126.com>
<lizhong1008@gmail.com> <zhongli_dev@126.com>
<andreas.rheinhardt@gmail.com> <andreas.rheinhardt@googlemail.com> <andreas.rheinhardt@gmail.com> <andreas.rheinhardt@googlemail.com>
rcombs <rcombs@rcombs.me> <rodger.combs@gmail.com> rcombs <rcombs@rcombs.me> <rodger.combs@gmail.com>
<thilo.borgmann@mail.de> <thilo.borgmann@googlemail.com> <thilo.borgmann@mail.de> <thilo.borgmann@googlemail.com>
<liuqi05@kuaishou.com> <lq@chinaffmpeg.org>
<ruiling.song83@gmail.com> <ruiling.song@intel.com>

View file

@ -1,89 +1,47 @@
Entries are sorted chronologically from oldest to youngest within each release, Entries are sorted chronologically from oldest to youngest within each release,
releases are sorted from youngest to oldest. releases are sorted from youngest to oldest.
version <next>: version 4.3.1:
- AudioToolbox output device avcodec/tiff: Check input space in dng_decode_jpeg()
- MacCaption demuxer avcodec/mjpeg_parser: Adjust size rejection threshold
- PGX decoder avcodec/cbs_jpeg: Fix uninitialized end index in cbs_jpeg_split_fragment()
- chromanr video filter avformat/sdp: Fix potential write beyond end of buffer
- VDPAU accelerated HEVC 10/12bit decoding avformat/mm: Check for existence of audio stream
- ADPCM IMA Ubisoft APM encoder avformat/mov: Fix unaligned read of uint32_t and endian-dependance in mov_read_default
- Rayman 2 APM muxer avcodec/apedec: Fix undefined integer overflow with 24bit
- AV1 encoding support SVT-AV1 avcodec/loco: Fix integer overflow with large values from loco_get_rice()
- Cineform HD encoder avformat/smjpegdec: Check the existence of referred streams
- ADPCM Argonaut Games encoder avcodec/tiff: Check frame parameters before blit for DNG
- Argonaut Games ASF muxer avcodec/mjpegdec: Limit bayer to single plane outputting format
- AV1 Low overhead bitstream format demuxer avcodec/pnmdec: Fix misaligned reads
- RPZA video encoder avcodec/mv30: Fix integer overflows in idct2_1d()
- ADPCM IMA MOFLEX decoder avcodec/hcadec: Check total_band_count against imdct_in size
- MobiClip FastAudio decoder avcodec/scpr3: Fix out of array access with dectab
- MobiClip video decoder avcodec/tiff: Do not overrun the array ends in dng_blit()
- MOFLEX demuxer avcodec/dstdec: Replace AC overread check by sample rate check
- MODS demuxer dnn_backend_native: Add overflow check for length calculation.
- PhotoCD decoder avcodec/h264_metadata_bsf: Fix invalid av_freep
- MCA demuxer avcodec/cbs_h265: set default VUI parameters when vui_parameters_present_flag is false
- AV1 decoder (Hardware acceleration used only) avcodec/av1_parser: initialize avctx->pix_fmt
- SVS demuxer avcodec/av1_parser: add missing parsing for RGB pixel format signaling
- Argonaut Games BRP demuxer avcodec/av1_parser: set context values outside the OBU parsing loop
- DAT demuxer avutil/avsscanf: Add () to avoid integer overflow in scanexp()
- aax demuxer avformat/utils: reorder duration computation to avoid overflow
- IPU decoder, parser and demuxer avcodec/pngdec: Check for fctl after idat
- Intel QSV-accelerated AV1 decoding avformat/hls: Pass a copy of the URL for probing
- Argonaut Games Video decoder avutil/common: Fix integer overflow in av_ceil_log2_c()
- libwavpack encoder removed avcodec/wmalosslessdec: fix overflow with pred in revert_cdlms
- ACE demuxer avformat/mvdec: Fix integer overflow with billions of channels
- AVS3 demuxer avformat/microdvddec: skip malformed lines without frame number.
- AVS3 video decoder via libuavs3d dnn_backend_native: check operand index
- Cintel RAW decoder dnn_backend_native.c: refine code for fail case
- VDPAU accelerated VP9 10/12bit decoding avformat/mov: fix memleaks
- afreqshift and aphaseshift filters libavformat/mov: Fix memleaks when demuxing DV audio
- High Voltage Software ADPCM encoder avcodec/cbs_av1: Fix writing uvlc numbers >= INT_MAX
- LEGO Racers ALP (.tun & .pcm) muxer avformat/avc, mxfenc: Avoid allocation of H264 SPS structure, fix memleak
- AV1 VAAPI decoder avcodec/bitstream: Don't check for undefined behaviour after it happened
- adenorm filter avformat/aviobuf: Also return truncated buffer in avio_get_dyn_buf()
- ADPCM IMA AMV encoder avformat/aviobuf: Don't check for overflow after it happened
- 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: version 4.3:
- v360 filter - v360 filter

View file

@ -55,9 +55,9 @@ fate.ffmpeg.org Timothy Gu
Trac bug tracker Alexander Strasser, Michael Niedermayer, Carl Eugen Hoyos Trac bug tracker Alexander Strasser, Michael Niedermayer, Carl Eugen Hoyos
Patchwork Andriy Gelman Patchwork Andriy Gelman
mailing lists Baptiste Coudurier mailing lists Baptiste Coudurier
Twitter Reynaldo H. Verdejo Pinochet Twitter Lou Logan, Reynaldo H. Verdejo Pinochet
Launchpad Timothy Gu Launchpad Timothy Gu
ffmpeg-security Andreas Cadhalpun, Carl Eugen Hoyos, Clément Bœsch, Michael Niedermayer, Reimar Doeffinger, rcombs, wm4 ffmpeg-security Andreas Cadhalpun, Carl Eugen Hoyos, Clément Bœsch, Michael Niedermayer, Reimar Doeffinger, Rodger Combs, wm4
libavutil libavutil
@ -144,7 +144,7 @@ Codecs:
ass* Aurelien Jacobs ass* Aurelien Jacobs
asv* Michael Niedermayer asv* Michael Niedermayer
atrac3plus* Maxim Poliakovski atrac3plus* Maxim Poliakovski
audiotoolbox* rcombs audiotoolbox* Rodger Combs
avs2* Huiwen Ren avs2* Huiwen Ren
bgmc.c, bgmc.h Thilo Borgmann bgmc.c, bgmc.h Thilo Borgmann
binkaudio.c Peter Ross binkaudio.c Peter Ross
@ -235,6 +235,7 @@ Codecs:
rv10.c Michael Niedermayer rv10.c Michael Niedermayer
s3tc* Ivo van Poorten s3tc* Ivo van Poorten
smc.c Mike Melanson smc.c Mike Melanson
smvjpegdec.c Ash Hughes
snow* Michael Niedermayer, Loren Merritt snow* Michael Niedermayer, Loren Merritt
sonic.c Alex Beregszaszi sonic.c Alex Beregszaszi
speedhq.c Steinar H. Gunderson speedhq.c Steinar H. Gunderson
@ -392,12 +393,7 @@ Muxers/Demuxers:
afc.c Paul B Mahol afc.c Paul B Mahol
aiffdec.c Baptiste Coudurier, Matthieu Bouron aiffdec.c Baptiste Coudurier, Matthieu Bouron
aiffenc.c Baptiste Coudurier, Matthieu Bouron aiffenc.c Baptiste Coudurier, Matthieu Bouron
alp.c Zane van Iperen
amvenc.c Zane van Iperen
apm.c Zane van Iperen
apngdec.c Benoit Fouet apngdec.c Benoit Fouet
argo_asf.c Zane van Iperen
argo_brp.c Zane van Iperen
ass* Aurelien Jacobs ass* Aurelien Jacobs
astdec.c Paul B Mahol astdec.c Paul B Mahol
astenc.c James Almer astenc.c James Almer
@ -435,7 +431,6 @@ Muxers/Demuxers:
ircam* Paul B Mahol ircam* Paul B Mahol
iss.c Stefan Gehrer iss.c Stefan Gehrer
jvdec.c Peter Ross jvdec.c Peter Ross
kvag.c Zane van Iperen
libmodplug.c Clément Bœsch libmodplug.c Clément Bœsch
libopenmpt.c Josh de Kock libopenmpt.c Josh de Kock
lmlm4.c Ivo van Poorten lmlm4.c Ivo van Poorten
@ -468,7 +463,6 @@ Muxers/Demuxers:
oggparse*.c David Conrad oggparse*.c David Conrad
oma.c Maxim Poliakovski oma.c Maxim Poliakovski
paf.c Paul B Mahol paf.c Paul B Mahol
pp_bnk.c Zane van Iperen
psxstr.c Mike Melanson psxstr.c Mike Melanson
pva.c Ivo van Poorten pva.c Ivo van Poorten
pvfdec.c Paul B Mahol pvfdec.c Paul B Mahol
@ -613,6 +607,7 @@ Jaikrishnan Menon 61A1 F09F 01C9 2D45 78E1 C862 25DC 8831 AF70 D368
James Almer 7751 2E8C FD94 A169 57E6 9A7A 1463 01AD 7376 59E0 James Almer 7751 2E8C FD94 A169 57E6 9A7A 1463 01AD 7376 59E0
Jean Delvare 7CA6 9F44 60F1 BDC4 1FD2 C858 A552 6B9B B3CD 4E6A Jean Delvare 7CA6 9F44 60F1 BDC4 1FD2 C858 A552 6B9B B3CD 4E6A
Loren Merritt ABD9 08F4 C920 3F65 D8BE 35D7 1540 DAA7 060F 56DE Loren Merritt ABD9 08F4 C920 3F65 D8BE 35D7 1540 DAA7 060F 56DE
Lou Logan (llogan) 7D68 DC73 CBEF EABB 671A B6CF 621C 2E28 82F8 DC3A
Lynne FE50 139C 6805 72CA FD52 1F8D A2FE A5F0 3F03 4464 Lynne FE50 139C 6805 72CA FD52 1F8D A2FE A5F0 3F03 4464
Michael Niedermayer 9FF2 128B 147E F673 0BAD F133 611E C787 040B 0FAB Michael Niedermayer 9FF2 128B 147E F673 0BAD F133 611E C787 040B 0FAB
Nicolas George 24CE 01CE 9ACC 5CEB 74D8 8D9D B063 D997 36E5 4C93 Nicolas George 24CE 01CE 9ACC 5CEB 74D8 8D9D B063 D997 36E5 4C93
@ -634,4 +629,3 @@ Tiancheng "Timothy" Gu 9456 AFC0 814A 8139 E994 8351 7FE6 B095 B582 B0D4
Tim Nicholson 38CF DB09 3ED0 F607 8B67 6CED 0C0B FC44 8B0B FC83 Tim Nicholson 38CF DB09 3ED0 F607 8B67 6CED 0C0B FC44 8B0B FC83
Tomas Härdin (thardin) A79D 4E3D F38F 763F 91F5 8B33 A01E 8AE0 41BB 2551 Tomas Härdin (thardin) A79D 4E3D F38F 763F 91F5 8B33 A01E 8AE0 41BB 2551
Wei Gao 4269 7741 857A 0E60 9EC5 08D2 4744 4EFA 62C1 87B9 Wei Gao 4269 7741 857A 0E60 9EC5 08D2 4744 4EFA 62C1 87B9
Zane van Iperen (zane) 61AE D40F 368B 6F26 9DAE 3892 6861 6B2D 8AC4 DCC5

View file

@ -53,23 +53,13 @@ target_dec_%_fuzzer$(EXESUF): target_dec_%_fuzzer.o $(FF_DEP_LIBS)
tools/target_bsf_%_fuzzer$(EXESUF): tools/target_bsf_%_fuzzer.o $(FF_DEP_LIBS) tools/target_bsf_%_fuzzer$(EXESUF): tools/target_bsf_%_fuzzer.o $(FF_DEP_LIBS)
$(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) $(FF_EXTRALIBS) $(LIBFUZZER_PATH) $(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) $(FF_EXTRALIBS) $(LIBFUZZER_PATH)
target_dem_%_fuzzer$(EXESUF): target_dem_%_fuzzer.o $(FF_DEP_LIBS)
$(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) $(FF_EXTRALIBS) $(LIBFUZZER_PATH)
tools/target_dem_fuzzer$(EXESUF): tools/target_dem_fuzzer.o $(FF_DEP_LIBS) tools/target_dem_fuzzer$(EXESUF): tools/target_dem_fuzzer.o $(FF_DEP_LIBS)
$(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) $(FF_EXTRALIBS) $(LIBFUZZER_PATH) $(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) $(FF_EXTRALIBS) $(LIBFUZZER_PATH)
tools/target_io_dem_fuzzer$(EXESUF): tools/target_io_dem_fuzzer.o $(FF_DEP_LIBS)
$(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) $(FF_EXTRALIBS) $(LIBFUZZER_PATH)
tools/enum_options$(EXESUF): ELIBS = $(FF_EXTRALIBS)
tools/enum_options$(EXESUF): $(FF_DEP_LIBS)
tools/sofa2wavs$(EXESUF): ELIBS = $(FF_EXTRALIBS) tools/sofa2wavs$(EXESUF): ELIBS = $(FF_EXTRALIBS)
tools/uncoded_frame$(EXESUF): $(FF_DEP_LIBS) tools/uncoded_frame$(EXESUF): $(FF_DEP_LIBS)
tools/uncoded_frame$(EXESUF): ELIBS = $(FF_EXTRALIBS) tools/uncoded_frame$(EXESUF): ELIBS = $(FF_EXTRALIBS)
tools/target_dec_%_fuzzer$(EXESUF): $(FF_DEP_LIBS) tools/target_dec_%_fuzzer$(EXESUF): $(FF_DEP_LIBS)
tools/target_dem_%_fuzzer$(EXESUF): $(FF_DEP_LIBS)
CONFIGURABLE_COMPONENTS = \ CONFIGURABLE_COMPONENTS = \
$(wildcard $(FFLIBS:%=$(SRC_PATH)/lib%/all*.c)) \ $(wildcard $(FFLIBS:%=$(SRC_PATH)/lib%/all*.c)) \
@ -110,7 +100,7 @@ include $(SRC_PATH)/fftools/Makefile
include $(SRC_PATH)/doc/Makefile include $(SRC_PATH)/doc/Makefile
include $(SRC_PATH)/doc/examples/Makefile include $(SRC_PATH)/doc/examples/Makefile
libavcodec/avcodec.o libavformat/utils.o libavdevice/avdevice.o libavfilter/avfilter.o libavutil/utils.o libpostproc/postprocess.o libswresample/swresample.o libswscale/utils.o : libavutil/ffversion.h libavcodec/utils.o libavformat/utils.o libavdevice/avdevice.o libavfilter/avfilter.o libavutil/utils.o libpostproc/postprocess.o libswresample/swresample.o libswscale/utils.o : libavutil/ffversion.h
$(PROGS): %$(PROGSSUF)$(EXESUF): %$(PROGSSUF)_g$(EXESUF) $(PROGS): %$(PROGSSUF)$(EXESUF): %$(PROGSSUF)_g$(EXESUF)
ifeq ($(STRIPTYPE),direct) ifeq ($(STRIPTYPE),direct)

View file

@ -1 +1 @@
4.4 4.3.1

View file

@ -1,10 +1,10 @@
┌────────────────────────────────────┐ ┌────────────────────────────────────┐
│ RELEASE NOTES for FFmpeg 4.4 "Rao" │ │ RELEASE NOTES for FFmpeg 4.3 "4:3" │
└────────────────────────────────────┘ └────────────────────────────────────┘
The FFmpeg Project proudly presents FFmpeg 4.4 "Rao", about 10 The FFmpeg Project proudly presents FFmpeg 4.3 "4:3", about 10
months after the release of FFmpeg 4.3. months after the release of FFmpeg 4.2.
A complete Changelog is available at the root of the project, and the A complete Changelog is available at the root of the project, and the
complete Git history on https://git.ffmpeg.org/gitweb/ffmpeg.git complete Git history on https://git.ffmpeg.org/gitweb/ffmpeg.git

View file

@ -1,7 +1,7 @@
/* /*
* Minimum CUDA compatibility definitions header * Minimum CUDA compatibility definitions header
* *
* Copyright (c) 2019 rcombs * Copyright (c) 2019 Rodger Combs
* *
* This file is part of FFmpeg. * This file is part of FFmpeg.
* *
@ -49,16 +49,6 @@ typedef struct __device_builtin__ __align__(4) ushort2
unsigned short x, y; unsigned short x, y;
} ushort2; } ushort2;
typedef struct __device_builtin__ __align__(8) float2
{
float x, y;
} float2;
typedef struct __device_builtin__ __align__(8) int2
{
int x, y;
} int2;
typedef struct __device_builtin__ uint3 typedef struct __device_builtin__ uint3
{ {
unsigned int x, y, z; unsigned int x, y, z;
@ -66,6 +56,11 @@ typedef struct __device_builtin__ uint3
typedef struct uint3 dim3; typedef struct uint3 dim3;
typedef struct __device_builtin__ __align__(8) int2
{
int x, y;
} int2;
typedef struct __device_builtin__ __align__(4) uchar4 typedef struct __device_builtin__ __align__(4) uchar4
{ {
unsigned char x, y, z, w; unsigned char x, y, z, w;
@ -73,7 +68,7 @@ typedef struct __device_builtin__ __align__(4) uchar4
typedef struct __device_builtin__ __align__(8) ushort4 typedef struct __device_builtin__ __align__(8) ushort4
{ {
unsigned short x, y, z, w; unsigned char x, y, z, w;
} ushort4; } ushort4;
typedef struct __device_builtin__ __align__(16) int4 typedef struct __device_builtin__ __align__(16) int4
@ -81,11 +76,6 @@ typedef struct __device_builtin__ __align__(16) int4
int x, y, z, w; int x, y, z, w;
} int4; } int4;
typedef struct __device_builtin__ __align__(16) float4
{
float x, y, z, w;
} float4;
// Accessors for special registers // Accessors for special registers
#define GETCOMP(reg, comp) \ #define GETCOMP(reg, comp) \
asm("mov.u32 %0, %%" #reg "." #comp ";" : "=r"(tmp)); \ asm("mov.u32 %0, %%" #reg "." #comp ";" : "=r"(tmp)); \
@ -110,31 +100,24 @@ GET(getThreadIdx, tid)
#define threadIdx (getThreadIdx()) #define threadIdx (getThreadIdx())
// Basic initializers (simple macros rather than inline functions) // Basic initializers (simple macros rather than inline functions)
#define make_int2(a, b) ((int2){.x = a, .y = b})
#define make_uchar2(a, b) ((uchar2){.x = a, .y = b}) #define make_uchar2(a, b) ((uchar2){.x = a, .y = b})
#define make_ushort2(a, b) ((ushort2){.x = a, .y = b}) #define make_ushort2(a, b) ((ushort2){.x = a, .y = b})
#define make_float2(a, b) ((float2){.x = a, .y = b})
#define make_int4(a, b, c, d) ((int4){.x = a, .y = b, .z = c, .w = d})
#define make_uchar4(a, b, c, d) ((uchar4){.x = a, .y = b, .z = c, .w = d}) #define make_uchar4(a, b, c, d) ((uchar4){.x = a, .y = b, .z = c, .w = d})
#define make_ushort4(a, b, c, d) ((ushort4){.x = a, .y = b, .z = c, .w = d}) #define make_ushort4(a, b, c, d) ((ushort4){.x = a, .y = b, .z = c, .w = d})
#define make_float4(a, b, c, d) ((float4){.x = a, .y = b, .z = c, .w = d})
// Conversions from the tex instruction's 4-register output to various types // Conversions from the tex instruction's 4-register output to various types
#define TEX2D(type, ret) static inline __device__ void conv(type* out, unsigned a, unsigned b, unsigned c, unsigned d) {*out = (ret);} #define TEX2D(type, ret) static inline __device__ void conv(type* out, unsigned a, unsigned b, unsigned c, unsigned d) {*out = (ret);}
TEX2D(unsigned char, a & 0xFF) TEX2D(unsigned char, a & 0xFF)
TEX2D(unsigned short, a & 0xFFFF) TEX2D(unsigned short, a & 0xFFFF)
TEX2D(float, a)
TEX2D(uchar2, make_uchar2(a & 0xFF, b & 0xFF)) TEX2D(uchar2, make_uchar2(a & 0xFF, b & 0xFF))
TEX2D(ushort2, make_ushort2(a & 0xFFFF, b & 0xFFFF)) TEX2D(ushort2, make_ushort2(a & 0xFFFF, b & 0xFFFF))
TEX2D(float2, make_float2(a, b))
TEX2D(uchar4, make_uchar4(a & 0xFF, b & 0xFF, c & 0xFF, d & 0xFF)) TEX2D(uchar4, make_uchar4(a & 0xFF, b & 0xFF, c & 0xFF, d & 0xFF))
TEX2D(ushort4, make_ushort4(a & 0xFFFF, b & 0xFFFF, c & 0xFFFF, d & 0xFFFF)) TEX2D(ushort4, make_ushort4(a & 0xFFFF, b & 0xFFFF, c & 0xFFFF, d & 0xFFFF))
TEX2D(float4, make_float4(a, b, c, d))
// Template calling tex instruction and converting the output to the selected type // Template calling tex instruction and converting the output to the selected type
template<typename T> template <class T>
inline __device__ T tex2D(cudaTextureObject_t texObject, float x, float y) static inline __device__ T tex2D(cudaTextureObject_t texObject, float x, float y)
{ {
T ret; T ret;
unsigned ret1, ret2, ret3, ret4; unsigned ret1, ret2, ret3, ret4;
@ -145,44 +128,4 @@ inline __device__ T tex2D(cudaTextureObject_t texObject, float x, float y)
return ret; return ret;
} }
template<>
inline __device__ float4 tex2D<float4>(cudaTextureObject_t texObject, float x, float y)
{
float4 ret;
asm("tex.2d.v4.f32.f32 {%0, %1, %2, %3}, [%4, {%5, %6}];" :
"=r"(ret.x), "=r"(ret.y), "=r"(ret.z), "=r"(ret.w) :
"l"(texObject), "f"(x), "f"(y));
return ret;
}
template<>
inline __device__ float tex2D<float>(cudaTextureObject_t texObject, float x, float y)
{
return tex2D<float4>(texObject, x, y).x;
}
template<>
inline __device__ float2 tex2D<float2>(cudaTextureObject_t texObject, float x, float y)
{
float4 ret = tex2D<float4>(texObject, x, y);
return make_float2(ret.x, ret.y);
}
// Math helper functions
static inline __device__ float floorf(float a) { return __builtin_floorf(a); }
static inline __device__ float floor(float a) { return __builtin_floorf(a); }
static inline __device__ double floor(double a) { return __builtin_floor(a); }
static inline __device__ float ceilf(float a) { return __builtin_ceilf(a); }
static inline __device__ float ceil(float a) { return __builtin_ceilf(a); }
static inline __device__ double ceil(double a) { return __builtin_ceil(a); }
static inline __device__ float truncf(float a) { return __builtin_truncf(a); }
static inline __device__ float trunc(float a) { return __builtin_truncf(a); }
static inline __device__ double trunc(double a) { return __builtin_trunc(a); }
static inline __device__ float fabsf(float a) { return __builtin_fabsf(a); }
static inline __device__ float fabs(float a) { return __builtin_fabsf(a); }
static inline __device__ double fabs(double a) { return __builtin_fabs(a); }
static inline __device__ float __sinf(float a) { return __nvvm_sin_approx_f(a); }
static inline __device__ float __cosf(float a) { return __nvvm_cos_approx_f(a); }
#endif /* COMPAT_CUDA_CUDA_RUNTIME_H */ #endif /* COMPAT_CUDA_CUDA_RUNTIME_H */

View file

@ -190,9 +190,9 @@ External library support:
Using any of the following switches will allow FFmpeg to link to the Using any of the following switches will allow FFmpeg to link to the
corresponding external library. All the components depending on that library corresponding external library. All the components depending on that library
will become enabled, if all their other dependencies are met and they are not will become enabled, if all their other dependencies are met and they are not
explicitly disabled. E.g. --enable-libopus will enable linking to explicitly disabled. E.g. --enable-libwavpack will enable linking to
libopus and allow the libopus encoder to be built, unless it is libwavpack and allow the libwavpack encoder to be built, unless it is
specifically disabled with --disable-encoder=libopus. specifically disabled with --disable-encoder=libwavpack.
Note that only the system libraries are auto-detected. All the other external Note that only the system libraries are auto-detected. All the other external
libraries must be explicitly enabled. libraries must be explicitly enabled.
@ -253,13 +253,10 @@ External library support:
--enable-libopenh264 enable H.264 encoding via OpenH264 [no] --enable-libopenh264 enable H.264 encoding via OpenH264 [no]
--enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no] --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
--enable-libopenmpt enable decoding tracked files via libopenmpt [no] --enable-libopenmpt enable decoding tracked files via libopenmpt [no]
--enable-libopenvino enable OpenVINO as a DNN module backend
for DNN based filters like dnn_processing [no]
--enable-libopus enable Opus de/encoding via libopus [no] --enable-libopus enable Opus de/encoding via libopus [no]
--enable-libpulse enable Pulseaudio input via libpulse [no] --enable-libpulse enable Pulseaudio input via libpulse [no]
--enable-librabbitmq enable RabbitMQ library [no] --enable-librabbitmq enable RabbitMQ library [no]
--enable-librav1e enable AV1 encoding via rav1e [no] --enable-librav1e enable AV1 encoding via rav1e [no]
--enable-librist enable RIST via librist [no]
--enable-librsvg enable SVG rasterization via librsvg [no] --enable-librsvg enable SVG rasterization via librsvg [no]
--enable-librubberband enable rubberband needed for rubberband filter [no] --enable-librubberband enable rubberband needed for rubberband filter [no]
--enable-librtmp enable RTMP[E] support via librtmp [no] --enable-librtmp enable RTMP[E] support via librtmp [no]
@ -270,7 +267,6 @@ External library support:
--enable-libspeex enable Speex de/encoding via libspeex [no] --enable-libspeex enable Speex de/encoding via libspeex [no]
--enable-libsrt enable Haivision SRT protocol via libsrt [no] --enable-libsrt enable Haivision SRT protocol via libsrt [no]
--enable-libssh enable SFTP protocol via libssh [no] --enable-libssh enable SFTP protocol via libssh [no]
--enable-libsvtav1 enable AV1 encoding via SVT [no]
--enable-libtensorflow enable TensorFlow as a DNN module backend --enable-libtensorflow enable TensorFlow as a DNN module backend
for DNN based filters like sr [no] for DNN based filters like sr [no]
--enable-libtesseract enable Tesseract, needed for ocr filter [no] --enable-libtesseract enable Tesseract, needed for ocr filter [no]
@ -278,7 +274,6 @@ External library support:
--enable-libtls enable LibreSSL (via libtls), needed for https support --enable-libtls enable LibreSSL (via libtls), needed for https support
if openssl, gnutls or mbedtls is not used [no] if openssl, gnutls or mbedtls is not used [no]
--enable-libtwolame enable MP2 encoding via libtwolame [no] --enable-libtwolame enable MP2 encoding via libtwolame [no]
--enable-libuavs3d enable AVS3 decoding via libuavs3d [no]
--enable-libv4l2 enable libv4l2/v4l-utils [no] --enable-libv4l2 enable libv4l2/v4l-utils [no]
--enable-libvidstab enable video stabilization using vid.stab [no] --enable-libvidstab enable video stabilization using vid.stab [no]
--enable-libvmaf enable vmaf filter via libvmaf [no] --enable-libvmaf enable vmaf filter via libvmaf [no]
@ -286,6 +281,7 @@ External library support:
--enable-libvorbis enable Vorbis en/decoding via libvorbis, --enable-libvorbis enable Vorbis en/decoding via libvorbis,
native implementation exists [no] native implementation exists [no]
--enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no] --enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no]
--enable-libwavpack enable wavpack encoding via libwavpack [no]
--enable-libwebp enable WebP encoding via libwebp [no] --enable-libwebp enable WebP encoding via libwebp [no]
--enable-libx264 enable H.264 encoding via x264 [no] --enable-libx264 enable H.264 encoding via x264 [no]
--enable-libx265 enable HEVC encoding via x265 [no] --enable-libx265 enable HEVC encoding via x265 [no]
@ -1745,6 +1741,7 @@ EXTERNAL_LIBRARY_VERSION3_LIST="
liblensfun liblensfun
libopencore_amrnb libopencore_amrnb
libopencore_amrwb libopencore_amrwb
libvmaf
libvo_amrwbenc libvo_amrwbenc
mbedtls mbedtls
rkmpp rkmpp
@ -1793,12 +1790,10 @@ EXTERNAL_LIBRARY_LIST="
libopenh264 libopenh264
libopenjpeg libopenjpeg
libopenmpt libopenmpt
libopenvino
libopus libopus
libpulse libpulse
librabbitmq librabbitmq
librav1e librav1e
librist
librsvg librsvg
librtmp librtmp
libshine libshine
@ -1808,16 +1803,14 @@ EXTERNAL_LIBRARY_LIST="
libspeex libspeex
libsrt libsrt
libssh libssh
libsvtav1
libtensorflow libtensorflow
libtesseract libtesseract
libtheora libtheora
libtwolame libtwolame
libuavs3d
libv4l2 libv4l2
libvmaf
libvorbis libvorbis
libvpx libvpx
libwavpack
libwebp libwebp
libxml2 libxml2
libzimg libzimg
@ -2127,7 +2120,6 @@ HEADERS_LIST="
ES2_gl_h ES2_gl_h
gsm_h gsm_h
io_h io_h
linux_dma_buf_h
linux_perf_event_h linux_perf_event_h
machine_ioctl_bt848_h machine_ioctl_bt848_h
machine_ioctl_meteor_h machine_ioctl_meteor_h
@ -2290,7 +2282,6 @@ TOOLCHAIN_FEATURES="
TYPES_LIST=" TYPES_LIST="
kCMVideoCodecType_HEVC kCMVideoCodecType_HEVC
kCMVideoCodecType_HEVCWithAlpha
kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange
kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ
kCVImageBufferTransferFunction_ITU_R_2100_HLG kCVImageBufferTransferFunction_ITU_R_2100_HLG
@ -2329,7 +2320,6 @@ HAVE_LIST="
$THREADS_LIST $THREADS_LIST
$TOOLCHAIN_FEATURES $TOOLCHAIN_FEATURES
$TYPES_LIST $TYPES_LIST
libdrm_getfb2
makeinfo makeinfo
makeinfo_html makeinfo_html
opencl_d3d11 opencl_d3d11
@ -2348,7 +2338,6 @@ CONFIG_EXTRA="
aandcttables aandcttables
ac3dsp ac3dsp
adts_header adts_header
atsc_a53
audio_frame_queue audio_frame_queue
audiodsp audiodsp
blockdsp blockdsp
@ -2562,7 +2551,7 @@ mips64r6_deps="mips"
mipsfpu_deps="mips" mipsfpu_deps="mips"
mipsdsp_deps="mips" mipsdsp_deps="mips"
mipsdspr2_deps="mips" mipsdspr2_deps="mips"
mmi_deps_any="loongson2 loongson3" mmi_deps="mips"
msa_deps="mipsfpu" msa_deps="mipsfpu"
msa2_deps="msa" msa2_deps="msa"
@ -2631,15 +2620,14 @@ cbs_mpeg2_select="cbs"
cbs_vp9_select="cbs" cbs_vp9_select="cbs"
dct_select="rdft" dct_select="rdft"
dirac_parse_select="golomb" dirac_parse_select="golomb"
dnn_suggest="libtensorflow libopenvino" dnn_suggest="libtensorflow"
dnn_deps="swscale"
error_resilience_select="me_cmp" error_resilience_select="me_cmp"
faandct_deps="faan" faandct_deps="faan"
faandct_select="fdctdsp" faandct_select="fdctdsp"
faanidct_deps="faan" faanidct_deps="faan"
faanidct_select="idctdsp" faanidct_select="idctdsp"
h264dsp_select="startcode" h264dsp_select="startcode"
hevcparse_select="atsc_a53 golomb" hevcparse_select="golomb"
frame_thread_encoder_deps="encoders threads" frame_thread_encoder_deps="encoders threads"
intrax8_select="blockdsp idctdsp" intrax8_select="blockdsp idctdsp"
mdct_select="fft" mdct_select="fft"
@ -2655,7 +2643,7 @@ rdft_select="fft"
# decoders / encoders # decoders / encoders
aac_decoder_select="adts_header mdct15 mdct sinewin" aac_decoder_select="adts_header mdct15 mdct sinewin"
aac_fixed_decoder_select="adts_header mdct" aac_fixed_decoder_select="adts_header mdct sinewin"
aac_encoder_select="audio_frame_queue iirfilter lpc mdct sinewin" aac_encoder_select="audio_frame_queue iirfilter lpc mdct sinewin"
aac_latm_decoder_select="aac_decoder aac_latm_parser" aac_latm_decoder_select="aac_decoder aac_latm_parser"
ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct" ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
@ -2690,7 +2678,7 @@ atrac3al_decoder_select="mdct"
atrac3p_decoder_select="mdct sinewin" atrac3p_decoder_select="mdct sinewin"
atrac3pal_decoder_select="mdct sinewin" atrac3pal_decoder_select="mdct sinewin"
atrac9_decoder_select="mdct" atrac9_decoder_select="mdct"
av1_decoder_select="cbs_av1" avrn_decoder_select="exif jpegtables"
bink_decoder_select="blockdsp hpeldsp" bink_decoder_select="blockdsp hpeldsp"
binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs" binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs" binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
@ -2718,7 +2706,6 @@ eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
eatgq_decoder_select="aandcttables" eatgq_decoder_select="aandcttables"
eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp" eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
exr_decoder_deps="zlib" exr_decoder_deps="zlib"
exr_encoder_deps="zlib"
ffv1_decoder_select="rangecoder" ffv1_decoder_select="rangecoder"
ffv1_encoder_select="rangecoder" ffv1_encoder_select="rangecoder"
ffvhuff_decoder_select="huffyuv_decoder" ffvhuff_decoder_select="huffyuv_decoder"
@ -2744,12 +2731,12 @@ h263_encoder_select="h263dsp mpegvideoenc"
h263i_decoder_select="h263_decoder" h263i_decoder_select="h263_decoder"
h263p_decoder_select="h263_decoder" h263p_decoder_select="h263_decoder"
h263p_encoder_select="h263_encoder" h263p_encoder_select="h263_encoder"
h264_decoder_select="atsc_a53 cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp" h264_decoder_select="cabac golomb h264chroma h264dsp h264parse h264pred h264qpel videodsp"
h264_decoder_suggest="error_resilience" h264_decoder_suggest="error_resilience"
hap_decoder_select="snappy texturedsp" hap_decoder_select="snappy texturedsp"
hap_encoder_deps="libsnappy" hap_encoder_deps="libsnappy"
hap_encoder_select="texturedspenc" hap_encoder_select="texturedspenc"
hevc_decoder_select="atsc_a53 bswapdsp cabac golomb hevcparse videodsp" hevc_decoder_select="bswapdsp cabac golomb hevcparse videodsp"
huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp" huffyuv_decoder_select="bswapdsp huffyuvdsp llviddsp"
huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llvidencdsp" huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp llvidencdsp"
hymt_decoder_select="huffyuv_decoder" hymt_decoder_select="huffyuv_decoder"
@ -2764,7 +2751,7 @@ interplay_video_decoder_select="hpeldsp"
jpegls_decoder_select="mjpeg_decoder" jpegls_decoder_select="mjpeg_decoder"
jv_decoder_select="blockdsp" jv_decoder_select="blockdsp"
lagarith_decoder_select="llviddsp" lagarith_decoder_select="llviddsp"
ljpeg_encoder_select="idctdsp jpegtables" ljpeg_encoder_select="idctdsp jpegtables mpegvideoenc"
lscr_decoder_deps="zlib" lscr_decoder_deps="zlib"
magicyuv_decoder_select="llviddsp" magicyuv_decoder_select="llviddsp"
magicyuv_encoder_select="llvidencdsp" magicyuv_encoder_select="llvidencdsp"
@ -2776,7 +2763,6 @@ mjpeg_encoder_select="jpegtables mpegvideoenc"
mjpegb_decoder_select="mjpeg_decoder" mjpegb_decoder_select="mjpeg_decoder"
mlp_decoder_select="mlp_parser" mlp_decoder_select="mlp_parser"
mlp_encoder_select="lpc audio_frame_queue" mlp_encoder_select="lpc audio_frame_queue"
mobiclip_decoder_select="bswapdsp golomb"
motionpixels_decoder_select="bswapdsp" motionpixels_decoder_select="bswapdsp"
mp1_decoder_select="mpegaudio" mp1_decoder_select="mpegaudio"
mp1float_decoder_select="mpegaudio" mp1float_decoder_select="mpegaudio"
@ -2805,7 +2791,7 @@ msmpeg4v2_encoder_select="h263_encoder"
msmpeg4v3_decoder_select="h263_decoder" msmpeg4v3_decoder_select="h263_decoder"
msmpeg4v3_encoder_select="h263_encoder" msmpeg4v3_encoder_select="h263_encoder"
mss2_decoder_select="mpegvideo qpeldsp vc1_decoder" mss2_decoder_select="mpegvideo qpeldsp vc1_decoder"
mts2_decoder_select="jpegtables mss34dsp" mts2_decoder_select="mss34dsp"
mv30_decoder_select="aandcttables blockdsp" mv30_decoder_select="aandcttables blockdsp"
mvha_decoder_deps="zlib" mvha_decoder_deps="zlib"
mvha_decoder_select="llviddsp" mvha_decoder_select="llviddsp"
@ -2842,7 +2828,6 @@ rv40_decoder_select="golomb h264pred h264qpel mpegvideo rv34dsp"
screenpresso_decoder_deps="zlib" screenpresso_decoder_deps="zlib"
shorten_decoder_select="bswapdsp" shorten_decoder_select="bswapdsp"
sipr_decoder_select="lsp" sipr_decoder_select="lsp"
smvjpeg_decoder_select="mjpeg_decoder"
snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp" snow_decoder_select="dwt h264qpel hpeldsp me_cmp rangecoder videodsp"
snow_encoder_select="dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder" snow_encoder_select="dwt h264qpel hpeldsp me_cmp mpegvideoenc rangecoder"
sonic_decoder_select="golomb rangecoder" sonic_decoder_select="golomb rangecoder"
@ -2850,7 +2835,6 @@ sonic_encoder_select="golomb rangecoder"
sonic_ls_encoder_select="golomb rangecoder" sonic_ls_encoder_select="golomb rangecoder"
sp5x_decoder_select="mjpeg_decoder" sp5x_decoder_select="mjpeg_decoder"
speedhq_decoder_select="mpegvideo" speedhq_decoder_select="mpegvideo"
speedhq_encoder_select="mpegvideoenc"
srgc_decoder_deps="zlib" srgc_decoder_deps="zlib"
svq1_decoder_select="hpeldsp" svq1_decoder_select="hpeldsp"
svq1_encoder_select="hpeldsp me_cmp mpegvideoenc" svq1_encoder_select="hpeldsp me_cmp mpegvideoenc"
@ -2924,16 +2908,6 @@ videotoolbox_hwaccel_deps="videotoolbox pthreads"
videotoolbox_hwaccel_extralibs="-framework QuartzCore" videotoolbox_hwaccel_extralibs="-framework QuartzCore"
xvmc_deps="X11_extensions_XvMClib_h" xvmc_deps="X11_extensions_XvMClib_h"
av1_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_AV1"
av1_d3d11va_hwaccel_select="av1_decoder"
av1_d3d11va2_hwaccel_deps="d3d11va DXVA_PicParams_AV1"
av1_d3d11va2_hwaccel_select="av1_decoder"
av1_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_AV1"
av1_dxva2_hwaccel_select="av1_decoder"
av1_nvdec_hwaccel_deps="nvdec CUVIDAV1PICPARAMS"
av1_nvdec_hwaccel_select="av1_decoder"
av1_vaapi_hwaccel_deps="vaapi VADecPictureParameterBufferAV1_bit_depth_idx"
av1_vaapi_hwaccel_select="av1_decoder"
h263_vaapi_hwaccel_deps="vaapi" h263_vaapi_hwaccel_deps="vaapi"
h263_vaapi_hwaccel_select="h263_decoder" h263_vaapi_hwaccel_select="h263_decoder"
h263_videotoolbox_hwaccel_deps="videotoolbox" h263_videotoolbox_hwaccel_deps="videotoolbox"
@ -3068,7 +3042,6 @@ nvenc_encoder_deps="nvenc"
aac_mf_encoder_deps="mediafoundation" aac_mf_encoder_deps="mediafoundation"
ac3_mf_encoder_deps="mediafoundation" ac3_mf_encoder_deps="mediafoundation"
av1_cuvid_decoder_deps="cuvid CUVIDAV1PICPARAMS"
h263_v4l2m2m_decoder_deps="v4l2_m2m h263_v4l2_m2m" h263_v4l2m2m_decoder_deps="v4l2_m2m h263_v4l2_m2m"
h263_v4l2m2m_encoder_deps="v4l2_m2m h263_v4l2_m2m" h263_v4l2m2m_encoder_deps="v4l2_m2m h263_v4l2_m2m"
h264_amf_encoder_deps="amf" h264_amf_encoder_deps="amf"
@ -3080,10 +3053,9 @@ h264_mediacodec_decoder_select="h264_mp4toannexb_bsf h264_parser"
h264_mf_encoder_deps="mediafoundation" h264_mf_encoder_deps="mediafoundation"
h264_mmal_decoder_deps="mmal" h264_mmal_decoder_deps="mmal"
h264_nvenc_encoder_deps="nvenc" h264_nvenc_encoder_deps="nvenc"
h264_nvenc_encoder_select="atsc_a53"
h264_omx_encoder_deps="omx" h264_omx_encoder_deps="omx"
h264_qsv_decoder_select="h264_mp4toannexb_bsf qsvdec" h264_qsv_decoder_select="h264_mp4toannexb_bsf qsvdec"
h264_qsv_encoder_select="atsc_a53 qsvenc" h264_qsv_encoder_select="qsvenc"
h264_rkmpp_decoder_deps="rkmpp" h264_rkmpp_decoder_deps="rkmpp"
h264_rkmpp_decoder_select="h264_mp4toannexb_bsf" h264_rkmpp_decoder_select="h264_mp4toannexb_bsf"
h264_vaapi_encoder_select="cbs_h264 vaapi_encode" h264_vaapi_encoder_select="cbs_h264 vaapi_encode"
@ -3097,7 +3069,6 @@ hevc_mediacodec_decoder_deps="mediacodec"
hevc_mediacodec_decoder_select="hevc_mp4toannexb_bsf hevc_parser" hevc_mediacodec_decoder_select="hevc_mp4toannexb_bsf hevc_parser"
hevc_mf_encoder_deps="mediafoundation" hevc_mf_encoder_deps="mediafoundation"
hevc_nvenc_encoder_deps="nvenc" hevc_nvenc_encoder_deps="nvenc"
hevc_nvenc_encoder_select="atsc_a53"
hevc_qsv_decoder_select="hevc_mp4toannexb_bsf qsvdec" hevc_qsv_decoder_select="hevc_mp4toannexb_bsf qsvdec"
hevc_qsv_encoder_select="hevcparse qsvenc" hevc_qsv_encoder_select="hevcparse qsvenc"
hevc_rkmpp_decoder_deps="rkmpp" hevc_rkmpp_decoder_deps="rkmpp"
@ -3157,12 +3128,11 @@ vp9_qsv_encoder_deps="libmfx MFX_CODEC_VP9"
vp9_qsv_encoder_select="qsvenc" vp9_qsv_encoder_select="qsvenc"
vp9_v4l2m2m_decoder_deps="v4l2_m2m vp9_v4l2_m2m" vp9_v4l2m2m_decoder_deps="v4l2_m2m vp9_v4l2_m2m"
wmv3_crystalhd_decoder_select="crystalhd" wmv3_crystalhd_decoder_select="crystalhd"
av1_qsv_decoder_select="qsvdec"
# parsers # parsers
aac_parser_select="adts_header" aac_parser_select="adts_header"
av1_parser_select="cbs_av1" av1_parser_select="cbs_av1"
h264_parser_select="atsc_a53 golomb h264dsp h264parse" h264_parser_select="golomb h264dsp h264parse"
hevc_parser_select="hevcparse" hevc_parser_select="hevcparse"
mpegaudio_parser_select="mpegaudioheader" mpegaudio_parser_select="mpegaudioheader"
mpegvideo_parser_select="mpegvideo" mpegvideo_parser_select="mpegvideo"
@ -3223,9 +3193,9 @@ pcm_mulaw_at_encoder_deps="audiotoolbox"
pcm_mulaw_at_encoder_select="audio_frame_queue" pcm_mulaw_at_encoder_select="audio_frame_queue"
chromaprint_muxer_deps="chromaprint" chromaprint_muxer_deps="chromaprint"
h264_videotoolbox_encoder_deps="pthreads" h264_videotoolbox_encoder_deps="pthreads"
h264_videotoolbox_encoder_select="atsc_a53 videotoolbox_encoder" h264_videotoolbox_encoder_select="videotoolbox_encoder"
hevc_videotoolbox_encoder_deps="pthreads" hevc_videotoolbox_encoder_deps="pthreads"
hevc_videotoolbox_encoder_select="atsc_a53 videotoolbox_encoder" hevc_videotoolbox_encoder_select="videotoolbox_encoder"
libaom_av1_decoder_deps="libaom" libaom_av1_decoder_deps="libaom"
libaom_av1_encoder_deps="libaom" libaom_av1_encoder_deps="libaom"
libaom_av1_encoder_select="extract_extradata_bsf" libaom_av1_encoder_select="extract_extradata_bsf"
@ -3234,7 +3204,6 @@ libcelt_decoder_deps="libcelt"
libcodec2_decoder_deps="libcodec2" libcodec2_decoder_deps="libcodec2"
libcodec2_encoder_deps="libcodec2" libcodec2_encoder_deps="libcodec2"
libdav1d_decoder_deps="libdav1d" libdav1d_decoder_deps="libdav1d"
libdav1d_decoder_select="atsc_a53"
libdavs2_decoder_deps="libdavs2" libdavs2_decoder_deps="libdavs2"
libfdk_aac_decoder_deps="libfdk_aac" libfdk_aac_decoder_deps="libfdk_aac"
libfdk_aac_encoder_deps="libfdk_aac" libfdk_aac_encoder_deps="libfdk_aac"
@ -3271,10 +3240,8 @@ libshine_encoder_select="audio_frame_queue"
libspeex_decoder_deps="libspeex" libspeex_decoder_deps="libspeex"
libspeex_encoder_deps="libspeex" libspeex_encoder_deps="libspeex"
libspeex_encoder_select="audio_frame_queue" libspeex_encoder_select="audio_frame_queue"
libsvtav1_encoder_deps="libsvtav1"
libtheora_encoder_deps="libtheora" libtheora_encoder_deps="libtheora"
libtwolame_encoder_deps="libtwolame" libtwolame_encoder_deps="libtwolame"
libuavs3d_decoder_deps="libuavs3d"
libvo_amrwbenc_encoder_deps="libvo_amrwbenc" libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
libvorbis_decoder_deps="libvorbis" libvorbis_decoder_deps="libvorbis"
libvorbis_encoder_deps="libvorbis libvorbisenc" libvorbis_encoder_deps="libvorbis libvorbisenc"
@ -3283,11 +3250,12 @@ libvpx_vp8_decoder_deps="libvpx"
libvpx_vp8_encoder_deps="libvpx" libvpx_vp8_encoder_deps="libvpx"
libvpx_vp9_decoder_deps="libvpx" libvpx_vp9_decoder_deps="libvpx"
libvpx_vp9_encoder_deps="libvpx" libvpx_vp9_encoder_deps="libvpx"
libwavpack_encoder_deps="libwavpack"
libwavpack_encoder_select="audio_frame_queue"
libwebp_encoder_deps="libwebp" libwebp_encoder_deps="libwebp"
libwebp_anim_encoder_deps="libwebp" libwebp_anim_encoder_deps="libwebp"
libx262_encoder_deps="libx262" libx262_encoder_deps="libx262"
libx264_encoder_deps="libx264" libx264_encoder_deps="libx264"
libx264_encoder_select="atsc_a53"
libx264rgb_encoder_deps="libx264 x264_csp_bgr" libx264rgb_encoder_deps="libx264 x264_csp_bgr"
libx264rgb_encoder_select="libx264_encoder" libx264rgb_encoder_select="libx264_encoder"
libx265_encoder_deps="libx265" libx265_encoder_deps="libx265"
@ -3309,9 +3277,9 @@ asf_o_demuxer_select="riffdec"
asf_muxer_select="riffenc" asf_muxer_select="riffenc"
asf_stream_muxer_select="asf_muxer" asf_stream_muxer_select="asf_muxer"
av1_demuxer_select="av1_frame_merge_bsf av1_parser" av1_demuxer_select="av1_frame_merge_bsf av1_parser"
avi_demuxer_select="riffdec exif" avi_demuxer_select="iso_media riffdec exif"
avi_muxer_select="riffenc" avi_muxer_select="riffenc"
caf_demuxer_select="iso_media" caf_demuxer_select="iso_media riffdec"
caf_muxer_select="iso_media" caf_muxer_select="iso_media"
dash_muxer_select="mp4_muxer" dash_muxer_select="mp4_muxer"
dash_demuxer_deps="libxml2" dash_demuxer_deps="libxml2"
@ -3337,9 +3305,9 @@ ismv_muxer_select="mov_muxer"
ivf_muxer_select="av1_metadata_bsf vp9_superframe_bsf" ivf_muxer_select="av1_metadata_bsf vp9_superframe_bsf"
latm_muxer_select="aac_adtstoasc_bsf" latm_muxer_select="aac_adtstoasc_bsf"
matroska_audio_muxer_select="matroska_muxer" matroska_audio_muxer_select="matroska_muxer"
matroska_demuxer_select="riffdec" matroska_demuxer_select="iso_media riffdec"
matroska_demuxer_suggest="bzlib lzo zlib" matroska_demuxer_suggest="bzlib lzo zlib"
matroska_muxer_select="riffenc vp9_superframe_bsf aac_adtstoasc_bsf" matroska_muxer_select="iso_media riffenc vp9_superframe_bsf aac_adtstoasc_bsf"
mlp_demuxer_select="mlp_parser" mlp_demuxer_select="mlp_parser"
mmf_muxer_select="riffenc" mmf_muxer_select="riffenc"
mov_demuxer_select="iso_media riffdec" mov_demuxer_select="iso_media riffdec"
@ -3349,14 +3317,13 @@ mp3_demuxer_select="mpegaudio_parser"
mp3_muxer_select="mpegaudioheader" mp3_muxer_select="mpegaudioheader"
mp4_muxer_select="mov_muxer" mp4_muxer_select="mov_muxer"
mpegts_demuxer_select="iso_media" mpegts_demuxer_select="iso_media"
mpegts_muxer_select="ac3_parser adts_muxer latm_muxer h264_mp4toannexb_bsf hevc_mp4toannexb_bsf" mpegts_muxer_select="adts_muxer latm_muxer h264_mp4toannexb_bsf hevc_mp4toannexb_bsf"
mpegtsraw_demuxer_select="mpegts_demuxer" mpegtsraw_demuxer_select="mpegts_demuxer"
mxf_muxer_select="golomb pcm_rechunk_bsf" mxf_muxer_select="golomb pcm_rechunk_bsf"
mxf_d10_muxer_select="mxf_muxer" mxf_d10_muxer_select="mxf_muxer"
mxf_opatom_muxer_select="mxf_muxer" mxf_opatom_muxer_select="mxf_muxer"
nut_muxer_select="riffenc" nut_muxer_select="riffenc"
nuv_demuxer_select="riffdec" nuv_demuxer_select="riffdec"
obu_demuxer_select="av1_frame_merge_bsf av1_parser"
oga_muxer_select="ogg_muxer" oga_muxer_select="ogg_muxer"
ogg_demuxer_select="dirac_parse" ogg_demuxer_select="dirac_parse"
ogv_muxer_select="ogg_muxer" ogv_muxer_select="ogg_muxer"
@ -3364,7 +3331,6 @@ opus_muxer_select="ogg_muxer"
psp_muxer_select="mov_muxer" psp_muxer_select="mov_muxer"
rtp_demuxer_select="sdp_demuxer" rtp_demuxer_select="sdp_demuxer"
rtp_muxer_select="golomb jpegtables" rtp_muxer_select="golomb jpegtables"
rtp_mpegts_muxer_select="mpegts_muxer rtp_muxer"
rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp" rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol srtp"
rtsp_demuxer_select="http_protocol rtpdec" rtsp_demuxer_select="http_protocol rtpdec"
rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain" rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
@ -3386,7 +3352,7 @@ w64_muxer_select="wav_muxer"
wav_demuxer_select="riffdec" wav_demuxer_select="riffdec"
wav_muxer_select="riffenc" wav_muxer_select="riffenc"
webm_chunk_muxer_select="webm_muxer" webm_chunk_muxer_select="webm_muxer"
webm_muxer_select="riffenc" webm_muxer_select="iso_media riffenc"
webm_dash_manifest_demuxer_select="matroska_demuxer" webm_dash_manifest_demuxer_select="matroska_demuxer"
wtv_demuxer_select="mpegts_demuxer riffdec" wtv_demuxer_select="mpegts_demuxer riffdec"
wtv_muxer_select="mpegts_muxer riffenc" wtv_muxer_select="mpegts_muxer riffenc"
@ -3401,8 +3367,6 @@ alsa_outdev_deps="alsa"
avfoundation_indev_deps="avfoundation corevideo coremedia pthreads" avfoundation_indev_deps="avfoundation corevideo coremedia pthreads"
avfoundation_indev_suggest="coregraphics applicationservices" avfoundation_indev_suggest="coregraphics applicationservices"
avfoundation_indev_extralibs="-framework Foundation" avfoundation_indev_extralibs="-framework Foundation"
audiotoolbox_outdev_deps="audiotoolbox pthreads"
audiotoolbox_outdev_extralibs="-framework AudioToolbox -framework CoreAudio"
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h" bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
caca_outdev_deps="libcaca" caca_outdev_deps="libcaca"
decklink_deps_any="libdl LoadLibrary" decklink_deps_any="libdl LoadLibrary"
@ -3453,8 +3417,7 @@ ffrtmpcrypt_protocol_select="tcp_protocol"
ffrtmphttp_protocol_conflict="librtmp_protocol" ffrtmphttp_protocol_conflict="librtmp_protocol"
ffrtmphttp_protocol_select="http_protocol" ffrtmphttp_protocol_select="http_protocol"
ftp_protocol_select="tcp_protocol" ftp_protocol_select="tcp_protocol"
gopher_protocol_select="tcp_protocol" gopher_protocol_select="network"
gophers_protocol_select="tls_protocol"
http_protocol_select="tcp_protocol" http_protocol_select="tcp_protocol"
http_protocol_suggest="zlib" http_protocol_suggest="zlib"
httpproxy_protocol_select="tcp_protocol" httpproxy_protocol_select="tcp_protocol"
@ -3495,8 +3458,6 @@ unix_protocol_select="network"
# external library protocols # external library protocols
libamqp_protocol_deps="librabbitmq" libamqp_protocol_deps="librabbitmq"
libamqp_protocol_select="network" libamqp_protocol_select="network"
librist_protocol_deps="librist"
librist_protocol_select="network"
librtmp_protocol_deps="librtmp" librtmp_protocol_deps="librtmp"
librtmpe_protocol_deps="librtmp" librtmpe_protocol_deps="librtmp"
librtmps_protocol_deps="librtmp" librtmps_protocol_deps="librtmp"
@ -3519,7 +3480,6 @@ afir_filter_deps="avcodec"
afir_filter_select="rdft" afir_filter_select="rdft"
amovie_filter_deps="avcodec avformat" amovie_filter_deps="avcodec avformat"
aresample_filter_deps="swresample" aresample_filter_deps="swresample"
asoftclip_filter_deps="swresample"
asr_filter_deps="pocketsphinx" asr_filter_deps="pocketsphinx"
ass_filter_deps="libass" ass_filter_deps="libass"
atempo_filter_deps="avcodec" atempo_filter_deps="avcodec"
@ -3555,6 +3515,7 @@ derain_filter_select="dnn"
deshake_filter_select="pixelutils" deshake_filter_select="pixelutils"
deshake_opencl_filter_deps="opencl" deshake_opencl_filter_deps="opencl"
dilation_opencl_filter_deps="opencl" dilation_opencl_filter_deps="opencl"
dnn_processing_filter_deps="swscale"
dnn_processing_filter_select="dnn" dnn_processing_filter_select="dnn"
drawtext_filter_deps="libfreetype" drawtext_filter_deps="libfreetype"
drawtext_filter_suggest="libfontconfig libfribidi" drawtext_filter_suggest="libfontconfig libfribidi"
@ -4275,7 +4236,7 @@ case "$toolchain" in
ld_default="$source_path/compat/windows/mslink" ld_default="$source_path/compat/windows/mslink"
nm_default="dumpbin.exe -symbols" nm_default="dumpbin.exe -symbols"
ar_default="lib.exe" ar_default="lib.exe"
case "${arch:-$arch_default}" in case "$arch" in
aarch64|arm64) aarch64|arm64)
as_default="armasm64.exe" as_default="armasm64.exe"
;; ;;
@ -5039,6 +5000,8 @@ elif enabled bfin; then
elif enabled mips; then elif enabled mips; then
cpuflags="-march=$cpu"
if [ "$cpu" != "generic" ]; then if [ "$cpu" != "generic" ]; then
disable mips32r2 disable mips32r2
disable mips32r5 disable mips32r5
@ -5047,40 +5010,81 @@ elif enabled mips; then
disable mips64r6 disable mips64r6
disable loongson2 disable loongson2
disable loongson3 disable loongson3
disable mipsdsp
disable mipsdspr2
cpuflags="-march=$cpu"
case $cpu in case $cpu in
# General ISA levels 24kc|24kf*|24kec|34kc|1004kc|24kef*|34kf*|1004kf*|74kc|74kf)
mips1|mips3)
;;
mips32r2)
enable mips32r2 enable mips32r2
disable msa
;; ;;
mips32r5) p5600|i6400|p6600)
enable mips32r2 disable mipsdsp
enable mips32r5 disable mipsdspr2
;; ;;
mips64r2|mips64r5) loongson*)
enable mips64r2 enable loongson2
enable loongson3 enable loongson3
enable local_aligned
enable simd_align_16
enable fast_64bit
enable fast_clz
enable fast_cmov
enable fast_unaligned
disable aligned_stack
disable mipsdsp
disable mipsdspr2
# When gcc version less than 5.3.0, add -fno-expensive-optimizations flag.
if [ $cc == gcc ]; then
gcc_version=$(gcc -dumpversion)
if [ "$(echo "$gcc_version 5.3.0" | tr " " "\n" | sort -rV | head -n 1)" == "$gcc_version" ]; then
expensive_optimization_flag=""
else
expensive_optimization_flag="-fno-expensive-optimizations"
fi
fi
case $cpu in
loongson3*)
cpuflags="-march=loongson3a -mhard-float $expensive_optimization_flag"
;; ;;
# Cores from MIPS(MTI) loongson2e)
cpuflags="-march=loongson2e -mhard-float $expensive_optimization_flag"
;;
loongson2f)
cpuflags="-march=loongson2f -mhard-float $expensive_optimization_flag"
;;
esac
;;
*)
# Unknown CPU. Disable everything.
warn "unknown CPU. Disabling all MIPS optimizations."
disable mipsfpu
disable mipsdsp
disable mipsdspr2
disable msa
disable mmi
;;
esac
case $cpu in
24kc) 24kc)
disable mipsfpu disable mipsfpu
enable mips32r2 disable mipsdsp
disable mipsdspr2
;; ;;
24kf*|24kec|34kc|74Kc|1004kc) 24kf*)
enable mips32r2 disable mipsdsp
disable mipsdspr2
;;
24kec|34kc|1004kc)
disable mipsfpu
disable mipsdspr2
;; ;;
24kef*|34kf*|1004kf*) 24kef*|34kf*|1004kf*)
enable mipsdsp disable mipsdspr2
enable mips32r2 ;;
74kc)
disable mipsfpu
;; ;;
p5600) p5600)
enable mips32r2
enable mips32r5 enable mips32r5
check_cflags "-mtune=p5600" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" check_cflags "-mtune=p5600" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops"
;; ;;
@ -5092,51 +5096,9 @@ elif enabled mips; then
enable mips64r6 enable mips64r6
check_cflags "-mtune=p6600 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64" check_cflags "-mtune=p6600 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64"
;; ;;
# Cores from Loongson
loongson2e|loongson2f|loongson3*)
enable local_aligned
enable simd_align_16
enable fast_64bit
enable fast_clz
enable fast_cmov
enable fast_unaligned
disable aligned_stack
# When gcc version less than 5.3.0, add -fno-expensive-optimizations flag.
if test "$cc_type" = "gcc"; then
case $gcc_basever in
2|2.*|3.*|4.*|5.0|5.1|5.2)
expensive_optimization_flag="-fno-expensive-optimizations"
;;
*)
expensive_optimization_flag=""
;;
esac esac
fi
case $cpu in
loongson3*)
enable loongson3
cpuflags="-march=loongson3a -mhard-float $expensive_optimization_flag"
;;
loongson2e)
enable loongson2
cpuflags="-march=loongson2e -mhard-float $expensive_optimization_flag"
;;
loongson2f)
enable loongson2
cpuflags="-march=loongson2f -mhard-float $expensive_optimization_flag"
;;
esac
;;
*)
warn "unknown MIPS CPU"
;;
esac
else else
disable mipsdsp # We do not disable anything. Is up to the user to disable the unwanted features.
disable mipsdspr2
# Disable DSP stuff for generic CPU, it can't be detected at runtime.
warn 'generic cpu selected' warn 'generic cpu selected'
fi fi
@ -5883,42 +5845,28 @@ EOF
elif enabled mips; then elif enabled mips; then
# Check toolchain ISA level enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"'
enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"'
enabled mmi && check_inline_asm mmi '"punpcklhw $f0, $f0, $f0"'
# Enable minimum ISA based on selected options
if enabled mips64; then if enabled mips64; then
enabled mips64r6 && check_inline_asm mips64r6 '"dlsa $0, $0, $0, 1"' && enabled mips64r6 && check_inline_asm_flags mips64r6 '"dlsa $0, $0, $0, 1"' '-mips64r6'
disable mips64r2 enabled mips64r2 && check_inline_asm_flags mips64r2 '"dext $0, $0, 0, 1"' '-mips64r2'
disabled mips64r6 && disabled mips64r2 && check_inline_asm_flags mips64r1 '"daddi $0, $0, 0"' '-mips64'
enabled mips64r2 && check_inline_asm mips64r2 '"dext $0, $0, 0, 1"'
disable mips32r6 && disable mips32r5 && disable mips32r2
else else
enabled mips32r6 && check_inline_asm mips32r6 '"aui $0, $0, 0"' && enabled mips32r6 && check_inline_asm_flags mips32r6 '"aui $0, $0, 0"' '-mips32r6'
disable mips32r5 && disable mips32r2 enabled mips32r5 && check_inline_asm_flags mips32r5 '"eretnc"' '-mips32r5'
enabled mips32r2 && check_inline_asm_flags mips32r2 '"ext $0, $0, 0, 1"' '-mips32r2'
enabled mips32r5 && check_inline_asm mips32r5 '"eretnc"' disabled mips32r6 && disabled mips32r5 && disabled mips32r2 && check_inline_asm_flags mips32r1 '"addi $0, $0, 0"' '-mips32'
enabled mips32r2 && check_inline_asm mips32r2 '"ext $0, $0, 0, 1"'
disable mips64r6 && disable mips64r5 && disable mips64r2
fi fi
enabled mipsfpu && check_inline_asm mipsfpu '"cvt.d.l $f0, $f2"' enabled mipsfpu && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f2"' '-mhard-float'
enabled mipsfpu && (enabled mips32r5 || enabled mips32r6 || enabled mips64r6) && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f1"' '-mfp64' enabled mipsfpu && (enabled mips32r5 || enabled mips32r6 || enabled mips64r6) && check_inline_asm_flags mipsfpu '"cvt.d.l $f0, $f1"' '-mfp64'
enabled mipsfpu && enabled msa && check_inline_asm_flags msa '"addvi.b $w0, $w1, 1"' '-mmsa' && check_headers msa.h || disable msa
enabled mipsdsp && check_inline_asm_flags mipsdsp '"addu.qb $t0, $t1, $t2"' '-mdsp' enabled mipsdsp && check_inline_asm_flags mipsdsp '"addu.qb $t0, $t1, $t2"' '-mdsp'
enabled mipsdspr2 && check_inline_asm_flags mipsdspr2 '"absq_s.qb $t0, $t1"' '-mdspr2' enabled mipsdspr2 && check_inline_asm_flags mipsdspr2 '"absq_s.qb $t0, $t1"' '-mdspr2'
enabled msa && enabled msa2 && check_inline_asm_flags msa2 '"nxbits.any.b $w0, $w0"' '-mmsa2' && check_headers msa2.h || disable msa2
# MSA and MSA2 can be detected at runtime so we supply extra flags here
enabled mipsfpu && enabled msa && check_inline_asm msa '"addvi.b $w0, $w1, 1"' '-mmsa' && append MSAFLAGS '-mmsa'
enabled msa && enabled msa2 && check_inline_asm msa2 '"nxbits.any.b $w0, $w0"' '-mmsa2' && append MSAFLAGS '-mmsa2'
# loongson2 have no switch cflag so we can only probe toolchain ability
enabled loongson2 && check_inline_asm loongson2 '"dmult.g $8, $9, $10"' && disable loongson3
# loongson3 is paired with MMI
enabled loongson3 && check_inline_asm loongson3 '"gsldxc1 $f0, 0($2, $3)"' '-mloongson-ext' && append MMIFLAGS '-mloongson-ext'
# MMI can be detected at runtime too
enabled mmi && check_inline_asm mmi '"punpcklhw $f0, $f0, $f0"' '-mloongson-mmi' && append MMIFLAGS '-mloongson-mmi'
if enabled bigendian && enabled msa; then if enabled bigendian && enabled msa; then
disable msa disable msa
@ -6160,9 +6108,6 @@ check_headers dxgidebug.h
check_headers dxva.h check_headers dxva.h
check_headers dxva2api.h -D_WIN32_WINNT=0x0600 check_headers dxva2api.h -D_WIN32_WINNT=0x0600
check_headers io.h check_headers io.h
enabled libdrm &&
check_headers linux/dma-buf.h
check_headers linux/perf_event.h check_headers linux/perf_event.h
check_headers libcrystalhd/libcrystalhd_if.h check_headers libcrystalhd/libcrystalhd_if.h
check_headers malloc.h check_headers malloc.h
@ -6207,7 +6152,6 @@ enabled videotoolbox && check_apple_framework VideoToolbox
check_apple_framework CoreFoundation check_apple_framework CoreFoundation
check_apple_framework CoreMedia check_apple_framework CoreMedia
check_apple_framework CoreVideo check_apple_framework CoreVideo
check_apple_framework CoreAudio
enabled avfoundation && { enabled avfoundation && {
disable coregraphics applicationservices disable coregraphics applicationservices
@ -6217,7 +6161,6 @@ enabled avfoundation && {
enabled videotoolbox && { enabled videotoolbox && {
check_lib coreservices CoreServices/CoreServices.h UTGetOSTypeFromString "-framework CoreServices" check_lib coreservices CoreServices/CoreServices.h UTGetOSTypeFromString "-framework CoreServices"
check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_HEVC "-framework CoreMedia" check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_HEVC "-framework CoreMedia"
check_func_headers CoreMedia/CMFormatDescription.h kCMVideoCodecType_HEVCWithAlpha "-framework CoreMedia"
check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange "-framework CoreVideo" check_func_headers CoreVideo/CVPixelBuffer.h kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange "-framework CoreVideo"
check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ "-framework CoreVideo" check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_SMPTE_ST_2084_PQ "-framework CoreVideo"
check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_ITU_R_2100_HLG "-framework CoreVideo" check_func_headers CoreVideo/CVImageBuffer.h kCVImageBufferTransferFunction_ITU_R_2100_HLG "-framework CoreVideo"
@ -6226,7 +6169,6 @@ enabled videotoolbox && {
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
check_type "windows.h dxva.h" "DXVA_PicParams_AV1" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0 check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
check_type "windows.h dxva.h" "DXVA_PicParams_VP9" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0 check_type "windows.h dxva.h" "DXVA_PicParams_VP9" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
check_type "windows.h d3d11.h" "ID3D11VideoDecoder" check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
@ -6250,7 +6192,7 @@ fi
if enabled cuda_nvcc; then if enabled cuda_nvcc; then
nvccflags="$nvccflags -ptx" nvccflags="$nvccflags -ptx"
else else
nvccflags="$nvccflags -S -nocudalib -nocudainc --cuda-device-only -Wno-c++11-narrowing -include ${source_link}/compat/cuda/cuda_runtime.h" nvccflags="$nvccflags -S -nocudalib -nocudainc --cuda-device-only -include ${source_link}/compat/cuda/cuda_runtime.h"
check_nvcc cuda_llvm check_nvcc cuda_llvm
fi fi
@ -6333,7 +6275,7 @@ enabled avisynth && require_headers "avisynth/avisynth_c.h"
enabled cuda_nvcc && { check_nvcc cuda_nvcc || die "ERROR: failed checking for nvcc."; } enabled cuda_nvcc && { check_nvcc cuda_nvcc || die "ERROR: failed checking for nvcc."; }
enabled chromaprint && require chromaprint chromaprint.h chromaprint_get_version -lchromaprint enabled chromaprint && require chromaprint chromaprint.h chromaprint_get_version -lchromaprint
enabled decklink && { require_headers DeckLinkAPI.h && enabled decklink && { require_headers DeckLinkAPI.h &&
{ test_cpp_condition DeckLinkAPIVersion.h "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a0a0000" || die "ERROR: Decklink API version must be >= 10.10"; } } { test_cpp_condition DeckLinkAPIVersion.h "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a090500" || die "ERROR: Decklink API version must be >= 10.9.5."; } }
enabled frei0r && require_headers "frei0r.h dlfcn.h" enabled frei0r && require_headers "frei0r.h dlfcn.h"
enabled gmp && require gmp gmp.h mpz_export -lgmp enabled gmp && require gmp gmp.h mpz_export -lgmp
enabled gnutls && require_pkg_config gnutls gnutls gnutls/gnutls.h gnutls_global_init enabled gnutls && require_pkg_config gnutls gnutls gnutls/gnutls.h gnutls_global_init
@ -6353,7 +6295,7 @@ enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
die "ERROR: libcelt must be installed and version must be >= 0.11.0."; } die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
enabled libcaca && require_pkg_config libcaca caca caca.h caca_create_canvas enabled libcaca && require_pkg_config libcaca caca caca.h caca_create_canvas
enabled libcodec2 && require libcodec2 codec2/codec2.h codec2_create -lcodec2 enabled libcodec2 && require libcodec2 codec2/codec2.h codec2_create -lcodec2
enabled libdav1d && require_pkg_config libdav1d "dav1d >= 0.5.0" "dav1d/dav1d.h" dav1d_version enabled libdav1d && require_pkg_config libdav1d "dav1d >= 0.4.0" "dav1d/dav1d.h" dav1d_version
enabled libdavs2 && require_pkg_config libdavs2 "davs2 >= 1.6.0" davs2.h davs2_decoder_open enabled libdavs2 && require_pkg_config libdavs2 "davs2 >= 1.6.0" davs2.h davs2_decoder_open
enabled libdc1394 && require_pkg_config libdc1394 libdc1394-2 dc1394/dc1394.h dc1394_new enabled libdc1394 && require_pkg_config libdc1394 libdc1394-2 dc1394/dc1394.h dc1394_new
enabled libdrm && require_pkg_config libdrm libdrm xf86drm.h drmGetVersion enabled libdrm && require_pkg_config libdrm libdrm xf86drm.h drmGetVersion
@ -6366,7 +6308,7 @@ enabled fontconfig && enable libfontconfig
enabled libfontconfig && require_pkg_config libfontconfig fontconfig "fontconfig/fontconfig.h" FcInit enabled libfontconfig && require_pkg_config libfontconfig fontconfig "fontconfig/fontconfig.h" FcInit
enabled libfreetype && require_pkg_config libfreetype freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType enabled libfreetype && require_pkg_config libfreetype freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
enabled libfribidi && require_pkg_config libfribidi fribidi fribidi.h fribidi_version_info enabled libfribidi && require_pkg_config libfribidi fribidi fribidi.h fribidi_version_info
enabled libglslang && require_cpp libglslang glslang/SPIRV/GlslangToSpv.h "glslang::TIntermediate*" -lglslang -lMachineIndependent -lOSDependent -lHLSL -lOGLCompiler -lGenericCodeGen -lSPVRemapper -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -lpthread -lstdc++ enabled libglslang && require_cpp libglslang glslang/SPIRV/GlslangToSpv.h "glslang::TIntermediate*" -lglslang -lOSDependent -lHLSL -lOGLCompiler -lSPVRemapper -lSPIRV -lSPIRV-Tools-opt -lSPIRV-Tools -lpthread -lstdc++
enabled libgme && { check_pkg_config libgme libgme gme/gme.h gme_new_emu || enabled libgme && { check_pkg_config libgme libgme gme/gme.h gme_new_emu ||
require libgme gme/gme.h gme_new_emu -lgme -lstdc++; } require libgme gme/gme.h gme_new_emu -lgme -lstdc++; }
enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do enabled libgsm && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
@ -6405,7 +6347,6 @@ enabled libopenh264 && require_pkg_config libopenh264 openh264 wels/codec_
enabled libopenjpeg && { check_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version || enabled libopenjpeg && { check_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version ||
{ require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } } { require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } }
enabled libopenmpt && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++" enabled libopenmpt && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++"
enabled libopenvino && require libopenvino c_api/ie_c_api.h ie_c_api_version -linference_engine_c_api
enabled libopus && { enabled libopus && {
enabled libopus_decoder && { enabled libopus_decoder && {
require_pkg_config libopus opus opus_multistream.h opus_multistream_decoder_create require_pkg_config libopus opus opus_multistream.h opus_multistream_decoder_create
@ -6416,8 +6357,7 @@ enabled libopus && {
} }
enabled libpulse && require_pkg_config libpulse libpulse pulse/pulseaudio.h pa_context_new enabled libpulse && require_pkg_config libpulse libpulse pulse/pulseaudio.h pa_context_new
enabled librabbitmq && require_pkg_config librabbitmq "librabbitmq >= 0.7.1" amqp.h amqp_new_connection enabled librabbitmq && require_pkg_config librabbitmq "librabbitmq >= 0.7.1" amqp.h amqp_new_connection
enabled librav1e && require_pkg_config librav1e "rav1e >= 0.4.0" rav1e.h rav1e_context_new enabled librav1e && require_pkg_config librav1e "rav1e >= 0.1.0" rav1e.h rav1e_context_new
enabled librist && require_pkg_config librist "librist >= 0.2" librist/librist.h rist_receiver_create
enabled librsvg && require_pkg_config librsvg librsvg-2.0 librsvg-2.0/librsvg/rsvg.h rsvg_handle_render_cairo enabled librsvg && require_pkg_config librsvg librsvg-2.0 librsvg-2.0/librsvg/rsvg.h rsvg_handle_render_cairo
enabled librtmp && require_pkg_config librtmp librtmp librtmp/rtmp.h RTMP_Socket enabled librtmp && require_pkg_config librtmp librtmp librtmp/rtmp.h RTMP_Socket
enabled librubberband && require_pkg_config librubberband "rubberband >= 1.8.1" rubberband/rubberband-c.h rubberband_new -lstdc++ && append librubberband_extralibs "-lstdc++" enabled librubberband && require_pkg_config librubberband "rubberband >= 1.8.1" rubberband/rubberband-c.h rubberband_new -lstdc++ && append librubberband_extralibs "-lstdc++"
@ -6429,7 +6369,6 @@ enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr
enabled libssh && require_pkg_config libssh libssh libssh/sftp.h sftp_init enabled libssh && require_pkg_config libssh libssh libssh/sftp.h sftp_init
enabled libspeex && require_pkg_config libspeex speex speex/speex.h speex_decoder_init enabled libspeex && require_pkg_config libspeex speex speex/speex.h speex_decoder_init
enabled libsrt && require_pkg_config libsrt "srt >= 1.3.0" srt/srt.h srt_socket enabled libsrt && require_pkg_config libsrt "srt >= 1.3.0" srt/srt.h srt_socket
enabled libsvtav1 && require_pkg_config libsvtav1 "SvtAv1Enc >= 0.8.4" EbSvtAv1Enc.h svt_av1_enc_init_handle
enabled libtensorflow && require libtensorflow tensorflow/c/c_api.h TF_Version -ltensorflow enabled libtensorflow && require libtensorflow tensorflow/c/c_api.h TF_Version -ltensorflow
enabled libtesseract && require_pkg_config libtesseract tesseract tesseract/capi.h TessBaseAPICreate enabled libtesseract && require_pkg_config libtesseract tesseract tesseract/capi.h TessBaseAPICreate
enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
@ -6437,10 +6376,9 @@ enabled libtls && require_pkg_config libtls libtls tls.h tls_configur
enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame && enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame &&
{ check_lib libtwolame twolame.h twolame_encode_buffer_float32_interleaved -ltwolame || { check_lib libtwolame twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; } die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
enabled libuavs3d && require_pkg_config libuavs3d "uavs3d >= 1.1.41" uavs3d.h uavs3d_decode
enabled libv4l2 && require_pkg_config libv4l2 libv4l2 libv4l2.h v4l2_ioctl enabled libv4l2 && require_pkg_config libv4l2 libv4l2 libv4l2.h v4l2_ioctl
enabled libvidstab && require_pkg_config libvidstab "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit enabled libvidstab && require_pkg_config libvidstab "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
enabled libvmaf && require_pkg_config libvmaf "libvmaf >= 1.5.2" libvmaf.h compute_vmaf enabled libvmaf && require_pkg_config libvmaf "libvmaf >= 1.3.9" libvmaf.h compute_vmaf
enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
enabled libvorbis && require_pkg_config libvorbis vorbis vorbis/codec.h vorbis_info_init && enabled libvorbis && require_pkg_config libvorbis vorbis vorbis/codec.h vorbis_info_init &&
require_pkg_config libvorbisenc vorbisenc vorbis/vorbisenc.h vorbis_encode_init require_pkg_config libvorbisenc vorbisenc vorbis/vorbisenc.h vorbis_encode_init
@ -6467,6 +6405,7 @@ enabled libvpx && {
fi fi
} }
enabled libwavpack && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput -lwavpack
enabled libwebp && { enabled libwebp && {
enabled libwebp_encoder && require_pkg_config libwebp "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion enabled libwebp_encoder && require_pkg_config libwebp "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
enabled libwebp_anim_encoder && check_pkg_config libwebp_anim_encoder "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit; } enabled libwebp_anim_encoder && check_pkg_config libwebp_anim_encoder "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit; }
@ -6685,9 +6624,6 @@ test_cpp <<EOF && enable uwp && d3d11va_extralibs="-ldxgi -ld3d11"
#endif #endif
EOF EOF
enabled libdrm &&
check_pkg_config libdrm_getfb2 libdrm "xf86drmMode.h" drmModeGetFB2
enabled vaapi && enabled vaapi &&
check_pkg_config vaapi "libva >= 0.35.0" "va/va.h" vaInitialize check_pkg_config vaapi "libva >= 0.35.0" "va/va.h" vaInitialize
@ -6702,7 +6638,6 @@ if enabled vaapi; then
check_type "va/va.h va/va_dec_hevc.h" "VAPictureParameterBufferHEVC" check_type "va/va.h va/va_dec_hevc.h" "VAPictureParameterBufferHEVC"
check_struct "va/va.h" "VADecPictureParameterBufferVP9" bit_depth check_struct "va/va.h" "VADecPictureParameterBufferVP9" bit_depth
check_struct "va/va.h" "VADecPictureParameterBufferAV1" bit_depth_idx
check_type "va/va.h va/va_vpp.h" "VAProcFilterParameterBufferHDRToneMapping" check_type "va/va.h va/va_vpp.h" "VAProcFilterParameterBufferHDRToneMapping"
check_struct "va/va.h va/va_vpp.h" "VAProcPipelineCaps" rotation_flags check_struct "va/va.h va/va_vpp.h" "VAProcPipelineCaps" rotation_flags
check_type "va/va.h va/va_enc_hevc.h" "VAEncPictureParameterBufferHEVC" check_type "va/va.h va/va_enc_hevc.h" "VAEncPictureParameterBufferHEVC"
@ -6778,10 +6713,6 @@ void f(void) { struct { const GUID guid; } s[] = { { NV_ENC_PRESET_HQ_GUID } };
int main(void) { return 0; } int main(void) { return 0; }
EOF EOF
if enabled_any nvdec cuvid; then
check_type "ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h" "CUVIDAV1PICPARAMS"
fi
enabled amf && enabled amf &&
check_cpp_condition amf "AMF/core/Version.h" \ check_cpp_condition amf "AMF/core/Version.h" \
"(AMF_VERSION_MAJOR << 48 | AMF_VERSION_MINOR << 32 | AMF_VERSION_RELEASE << 16 | AMF_VERSION_BUILD_NUM) >= 0x0001000400090000" "(AMF_VERSION_MAJOR << 48 | AMF_VERSION_MINOR << 32 | AMF_VERSION_RELEASE << 16 | AMF_VERSION_BUILD_NUM) >= 0x0001000400090000"
@ -7509,8 +7440,6 @@ LDSOFLAGS=$LDSOFLAGS
SHFLAGS=$(echo $($ldflags_filter $SHFLAGS)) SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
ASMSTRIPFLAGS=$ASMSTRIPFLAGS ASMSTRIPFLAGS=$ASMSTRIPFLAGS
X86ASMFLAGS=$X86ASMFLAGS X86ASMFLAGS=$X86ASMFLAGS
MSAFLAGS=$MSAFLAGS
MMIFLAGS=$MMIFLAGS
BUILDSUF=$build_suffix BUILDSUF=$build_suffix
PROGSSUF=$progs_suffix PROGSSUF=$progs_suffix
FULLNAME=$FULLNAME FULLNAME=$FULLNAME
@ -7584,11 +7513,10 @@ cat > $TMPH <<EOF
#define FFMPEG_CONFIG_H #define FFMPEG_CONFIG_H
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)" #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
#define FFMPEG_LICENSE "$(c_escape $license)" #define FFMPEG_LICENSE "$(c_escape $license)"
#define CONFIG_THIS_YEAR 2021 #define CONFIG_THIS_YEAR 2020
#define FFMPEG_DATADIR "$(eval c_escape $datadir)" #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
#define AVCONV_DATADIR "$(eval c_escape $datadir)" #define AVCONV_DATADIR "$(eval c_escape $datadir)"
#define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})" #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
#define OS_NAME $target_os
#define av_restrict $restrict_keyword #define av_restrict $restrict_keyword
#define EXTERN_PREFIX "${extern_prefix}" #define EXTERN_PREFIX "${extern_prefix}"
#define EXTERN_ASM ${extern_prefix} #define EXTERN_ASM ${extern_prefix}

View file

@ -15,134 +15,6 @@ libavutil: 2017-10-21
API changes, most recent first: API changes, most recent first:
-------- 8< --------- FFmpeg 4.4 was cut here -------- 8< ---------
2021-03-19 - e8c0bca6bd - lavu 56.69.100 - adler32.h
Added a typedef for the type of the Adler-32 checksums
used by av_adler32_update(). It will be changed to uint32_t
at the next major bump.
The type of the parameter for the length of the input buffer
will also be changed to size_t at the next major bump.
2021-03-19 - e318438f2f - lavf 58.75.100 - avformat.h
AVChapter.id will be changed from int to int64_t
on the next major version bump.
2021-03-17 - f7db77bd87 - lavc 58.133.100 - codec.h
Deprecated av_init_packet(). Once removed, sizeof(AVPacket) will
no longer be a part of the public ABI.
Deprecated AVPacketList.
2021-03-16 - 7d09579190 - lavc 58.132.100 - codec.h
Add AV_CODEC_CAP_OTHER_THREADS as a new name for
AV_CODEC_CAP_AUTO_THREADS. AV_CODEC_CAP_AUTO_THREADS
is now deprecated.
2021-03-12 - 6e7e3a3820 - lavc 58.131.100 - avcodec.h codec.h
Add a get_encode_buffer callback to AVCodecContext, similar to
get_buffer2 but for encoders.
Add avcodec_default_get_encode_buffer().
Add AV_GET_ENCODE_BUFFER_FLAG_REF.
Encoders may now be flagged as AV_CODEC_CAP_DR1 capable.
2021-03-10 - 42e68fe015 - lavf 58.72.100 - avformat.h
Change AVBufferRef related AVStream function and struct size
parameter and fields type to size_t at next major bump.
2021-03-10 - d79e0fe65c - lavc 58.130.100 - packet.h
Change AVBufferRef related AVPacket function and struct size
parameter and fields type to size_t at next major bump.
2021-03-10 - 14040a1d91 - lavu 56.68.100 - buffer.h frame.h
Change AVBufferRef and relevant AVFrame function and struct size
parameter and fields type to size_t at next major bump.
2021-03-04 - a0eec776b6 - lavc 58.128.101 - avcodec.h
Enable err_recognition to be set for encoders.
2021-03-03 - 2ff40b98ec - lavf 58.70.100 - avformat.h
Deprecate AVFMT_FLAG_PRIV_OPT. It will do nothing
as soon as av_demuxer_open() is removed.
2021-02-27 - dd9227e48f - lavc 58.126.100 - avcodec.h
Deprecated avcodec_get_frame_class().
2021-02-21 - 5ca40d6d94 - lavu 56.66.100 - tx.h
Add enum AVTXFlags and AVTXFlags.AV_TX_INPLACE
2021-02-14 - 4f49ca7bbc - lavd 58.12.100 - avdevice.h
Deprecated avdevice_capabilities_create() and
avdevice_capabilities_free().
2021-02-10 - 1bda9bb68a - lavu 56.65.100 - common.h
Add FFABS64U()
2021-01-26 - 5dd9567080 - lavu 56.64.100 - common.h
Add FFABSU()
2021-01-25 - 56709ca8aa - lavc 58.119.100 - avcodec.h
Deprecate AVCodecContext.debug_mv, FF_DEBUG_VIS_MV_P_FOR, FF_DEBUG_VIS_MV_B_FOR,
FF_DEBUG_VIS_MV_B_BACK
2021-01-11 - ebdd33086a - lavc 58.116.100 - avcodec.h
Add FF_PROFILE_VVC_MAIN_10 and FF_PROFILE_VVC_MAIN_10_444.
2020-01-01 - baecaa16c1 - lavu 56.63.100 - video_enc_params.h
Add AV_VIDEO_ENC_PARAMS_MPEG2
2020-12-03 - eca12f4d5a - lavu 56.62.100 - timecode.h
Add av_timecode_init_from_components.
2020-11-27 - a83098ab03 - lavc 58.114.100 - avcodec.h
Deprecate AVCodecContext.thread_safe_callbacks. Starting with
LIBAVCODEC_VERSION_MAJOR=60, user callbacks must always be
thread-safe when frame threading is used.
2020-11-25 - d243dd540a - lavc 58.113.100 - avcodec.h
Adds a new flag AV_CODEC_EXPORT_DATA_FILM_GRAIN for export_side_data.
2020-11-25 - 4f9ee87253 - lavu 56.61.100 - film_grain_params.h
Adds a new API for extracting codec film grain parameters as side data.
Adds a new AVFrameSideDataType entry AV_FRAME_DATA_FILM_GRAIN_PARAMS for it.
2020-10-28 - f95d9510ff - lavf 58.64.100 - avformat.h
Add AVSTREAM_EVENT_FLAG_NEW_PACKETS.
2020-09-28 - 68918d3b7f - lavu 56.60.100 - buffer.h
Add a av_buffer_replace() convenience function.
2020-09-13 - 837b6eb90e - lavu 56.59.100 - timecode.h
Add av_timecode_make_smpte_tc_string2.
2020-08-21 - 06f2651204 - lavu 56.58.100 - avstring.h
Deprecate av_d2str(). Use av_asprintf() instead.
2020-08-04 - 34de0abbe7 - lavu 56.58.100 - channel_layout.h
Add AV_CH_LAYOUT_22POINT2 together with its newly required pieces:
AV_CH_TOP_SIDE_LEFT, AV_CH_TOP_SIDE_RIGHT, AV_CH_BOTTOM_FRONT_CENTER,
AV_CH_BOTTOM_FRONT_LEFT, AV_CH_BOTTOM_FRONT_RIGHT.
2020-07-23 - 84655b7101 - lavu 56.57.100 - cpu.h
Add AV_CPU_FLAG_MMI and AV_CPU_FLAG_MSA.
2020-07-22 - 3a8e927176 - lavu 56.56.100 - imgutils.h
Add av_image_fill_plane_sizes().
2020-07-15 - 448a9aaa78 - lavc 58.96.100 - packet.h
Add AV_PKT_DATA_S12M_TIMECODE.
2020-06-12 - b09fb030c1 - lavu 56.55.100 - pixdesc.h
Add AV_PIX_FMT_X2RGB10.
2020-06-11 - bc8ab084fb - lavu 56.54.100 - frame.h
Add AV_FRAME_DATA_SEI_UNREGISTERED.
2020-06-10 - 1b4a98b029 - lavu 56.53.100 - log.h opt.h
Add av_opt_child_class_iterate() and AVClass.child_class_iterate().
Deprecate av_opt_child_class_next() and AVClass.child_class_next().
-------- 8< --------- FFmpeg 4.3 was cut here -------- 8< ---------
2020-06-05 - ec39c2276a - lavu 56.50.100 - buffer.h 2020-06-05 - ec39c2276a - lavu 56.50.100 - buffer.h
Passing NULL as alloc argument to av_buffer_pool_init2() is now allowed. Passing NULL as alloc argument to av_buffer_pool_init2() is now allowed.

View file

@ -38,7 +38,7 @@ PROJECT_NAME = FFmpeg
# could be handy for archiving the generated documentation or if some version # could be handy for archiving the generated documentation or if some version
# control system is used. # control system is used.
PROJECT_NUMBER = 4.4 PROJECT_NUMBER = 4.3.1
# Using the PROJECT_BRIEF tag one can provide an optional one line description # Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a # for a project that appears at the top of each page and should give viewer a

View file

@ -675,63 +675,6 @@ Remove extradata from all frames.
@end table @end table
@end table @end table
@section setts
Set PTS and DTS in packets.
It accepts the following parameters:
@table @option
@item ts
@item pts
@item dts
Set expressions for PTS, DTS or both.
@end table
The expressions are evaluated through the eval API and can contain the following
constants:
@table @option
@item N
The count of the input packet. Starting from 0.
@item TS
The demux timestamp in input in case of @code{ts} or @code{dts} option or presentation
timestamp in case of @code{pts} option.
@item POS
The original position in the file of the packet, or undefined if undefined
for the current packet
@item DTS
The demux timestamp in input.
@item PTS
The presentation timestamp in input.
@item STARTDTS
The DTS of the first packet.
@item STARTPTS
The PTS of the first packet.
@item PREV_INDTS
The previous input DTS.
@item PREV_INPTS
The previous input PTS.
@item PREV_OUTDTS
The previous output DTS.
@item PREV_OUTPTS
The previous output PTS.
@item TB
The timebase of stream packet belongs.
@item SR
The sample rate of stream packet belongs.
@end table
@anchor{text2movsub} @anchor{text2movsub}
@section text2movsub @section text2movsub

View file

@ -50,6 +50,8 @@ Use internal 2pass ratecontrol in first pass mode.
Use internal 2pass ratecontrol in second pass mode. Use internal 2pass ratecontrol in second pass mode.
@item gray @item gray
Only decode/encode grayscale. Only decode/encode grayscale.
@item emu_edge
Do not draw edges.
@item psnr @item psnr
Set error[?] variables during encoding. Set error[?] variables during encoding.
@item truncated @item truncated
@ -70,6 +72,10 @@ This ensures that file and data checksums are reproducible and match between
platforms. Its primary use is for regression testing. platforms. Its primary use is for regression testing.
@item aic @item aic
Apply H263 advanced intra coding / mpeg4 ac prediction. Apply H263 advanced intra coding / mpeg4 ac prediction.
@item cbp
Deprecated, use mpegvideo private options instead.
@item qprd
Deprecated, use mpegvideo private options instead.
@item ilme @item ilme
Apply interlaced motion estimation. Apply interlaced motion estimation.
@item cgop @item cgop
@ -78,6 +84,40 @@ Use closed gop.
Output even potentially corrupted frames. Output even potentially corrupted frames.
@end table @end table
@item me_method @var{integer} (@emph{encoding,video})
Set motion estimation method.
Possible values:
@table @samp
@item zero
zero motion estimation (fastest)
@item full
full motion estimation (slowest)
@item epzs
EPZS motion estimation (default)
@item esa
esa motion estimation (alias for full)
@item tesa
tesa motion estimation
@item dia
dia motion estimation (alias for epzs)
@item log
log motion estimation
@item phods
phods motion estimation
@item x1
X1 motion estimation
@item hex
hex motion estimation
@item umh
umh motion estimation
@item iter
iter motion estimation
@end table
@item extradata_size @var{integer}
Set extradata size.
@item time_base @var{rational number} @item time_base @var{rational number}
Set codec time base. Set codec time base.
@ -144,6 +184,9 @@ Default value is 0.
@item b_qfactor @var{float} (@emph{encoding,video}) @item b_qfactor @var{float} (@emph{encoding,video})
Set qp factor between P and B frames. Set qp factor between P and B frames.
@item rc_strategy @var{integer} (@emph{encoding,video})
Set ratecontrol method.
@item b_strategy @var{integer} (@emph{encoding,video}) @item b_strategy @var{integer} (@emph{encoding,video})
Set strategy to choose between I/P/B-frames. Set strategy to choose between I/P/B-frames.
@ -167,6 +210,8 @@ Possible values:
@table @samp @table @samp
@item autodetect @item autodetect
@item old_msmpeg4
some old lavc generated msmpeg4v3 files (no autodetection)
@item xvid_ilace @item xvid_ilace
Xvid interlacing bug (autodetected if fourcc==XVIX) Xvid interlacing bug (autodetected if fourcc==XVIX)
@item ump4 @item ump4
@ -175,6 +220,8 @@ Xvid interlacing bug (autodetected if fourcc==XVIX)
padding bug (autodetected) padding bug (autodetected)
@item amv @item amv
@item ac_vlc
illegal vlc bug (autodetected per fourcc)
@item qpel_chroma @item qpel_chroma
@item std_qpel @item std_qpel
@ -195,6 +242,14 @@ Workaround various bugs in microsoft broken decoders.
trancated frames trancated frames
@end table @end table
@item lelim @var{integer} (@emph{encoding,video})
Set single coefficient elimination threshold for luminance (negative
values also consider DC coefficient).
@item celim @var{integer} (@emph{encoding,video})
Set single coefficient elimination threshold for chrominance (negative
values also consider dc coefficient)
@item strict @var{integer} (@emph{decoding/encoding,audio,video}) @item strict @var{integer} (@emph{decoding/encoding,audio,video})
Specify how strictly to follow the standards. Specify how strictly to follow the standards.
@ -251,8 +306,26 @@ consider things that a sane encoder should not do as an error
@item mpeg_quant @var{integer} (@emph{encoding,video}) @item mpeg_quant @var{integer} (@emph{encoding,video})
Use MPEG quantizers instead of H.263. Use MPEG quantizers instead of H.263.
@item qsquish @var{float} (@emph{encoding,video})
How to keep quantizer between qmin and qmax (0 = clip, 1 = use
differentiable function).
@item rc_qmod_amp @var{float} (@emph{encoding,video})
Set experimental quantizer modulation.
@item rc_qmod_freq @var{integer} (@emph{encoding,video})
Set experimental quantizer modulation.
@item rc_override_count @var{integer} @item rc_override_count @var{integer}
@item rc_eq @var{string} (@emph{encoding,video})
Set rate control equation. When computing the expression, besides the
standard functions defined in the section 'Expression Evaluation', the
following functions are available: bits2qp(bits), qp2bits(qp). Also
the following constants are available: iTex pTex tex mv fCode iCount
mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex
avgTex.
@item maxrate @var{integer} (@emph{encoding,audio,video}) @item maxrate @var{integer} (@emph{encoding,audio,video})
Set max bitrate tolerance (in bits/s). Requires bufsize to be set. Set max bitrate tolerance (in bits/s). Requires bufsize to be set.
@ -263,12 +336,18 @@ encode. It is of little use elsewise.
@item bufsize @var{integer} (@emph{encoding,audio,video}) @item bufsize @var{integer} (@emph{encoding,audio,video})
Set ratecontrol buffer size (in bits). Set ratecontrol buffer size (in bits).
@item rc_buf_aggressivity @var{float} (@emph{encoding,video})
Currently useless.
@item i_qfactor @var{float} (@emph{encoding,video}) @item i_qfactor @var{float} (@emph{encoding,video})
Set QP factor between P and I frames. Set QP factor between P and I frames.
@item i_qoffset @var{float} (@emph{encoding,video}) @item i_qoffset @var{float} (@emph{encoding,video})
Set QP offset between P and I frames. Set QP offset between P and I frames.
@item rc_init_cplx @var{float} (@emph{encoding,video})
Set initial complexity for 1-pass encoding.
@item dct @var{integer} (@emph{encoding,video}) @item dct @var{integer} (@emph{encoding,video})
Set DCT algorithm. Set DCT algorithm.
@ -333,7 +412,11 @@ Automatically pick a IDCT compatible with the simple one
@item simpleneon @item simpleneon
@item xvid @item simplealpha
@item ipp
@item xvidmmx
@item faani @item faani
floating point AAN IDCT floating point AAN IDCT
@ -631,9 +714,19 @@ Set diamond type & size for motion estimation pre-pass.
@item subq @var{integer} (@emph{encoding,video}) @item subq @var{integer} (@emph{encoding,video})
Set sub pel motion estimation quality. Set sub pel motion estimation quality.
@item dtg_active_format @var{integer}
@item me_range @var{integer} (@emph{encoding,video}) @item me_range @var{integer} (@emph{encoding,video})
Set limit motion vectors range (1023 for DivX player). Set limit motion vectors range (1023 for DivX player).
@item ibias @var{integer} (@emph{encoding,video})
Set intra quant bias.
@item pbias @var{integer} (@emph{encoding,video})
Set inter quant bias.
@item color_table_id @var{integer}
@item global_quality @var{integer} (@emph{encoding,audio,video}) @item global_quality @var{integer} (@emph{encoding,audio,video})
@item coder @var{integer} (@emph{encoding,video}) @item coder @var{integer} (@emph{encoding,video})
@ -648,6 +741,8 @@ arithmetic coder
raw (no encoding) raw (no encoding)
@item rle @item rle
run-length coder run-length coder
@item deflate
deflate-based coder
@end table @end table
@item context @var{integer} (@emph{encoding,video}) @item context @var{integer} (@emph{encoding,video})
@ -668,9 +763,17 @@ use fewest bits
use best rate distortion use best rate distortion
@end table @end table
@item stream_codec_tag @var{integer}
@item sc_threshold @var{integer} (@emph{encoding,video}) @item sc_threshold @var{integer} (@emph{encoding,video})
Set scene change threshold. Set scene change threshold.
@item lmin @var{integer} (@emph{encoding,video})
Set min lagrange factor (VBR).
@item lmax @var{integer} (@emph{encoding,video})
Set max lagrange factor (VBR).
@item nr @var{integer} (@emph{encoding,video}) @item nr @var{integer} (@emph{encoding,video})
Set noise reduction. Set noise reduction.
@ -713,14 +816,13 @@ for codecs that support it. See also @file{doc/examples/export_mvs.c}.
@item prft @item prft
Export encoder Producer Reference Time into packet side-data (see @code{AV_PKT_DATA_PRFT}) Export encoder Producer Reference Time into packet side-data (see @code{AV_PKT_DATA_PRFT})
for codecs that support it. for codecs that support it.
@item venc_params
Export video encoding parameters through frame side data (see @code{AV_FRAME_DATA_VIDEO_ENC_PARAMS})
for codecs that support it. At present, those are H.264 and VP9.
@item film_grain
Export film grain parameters through frame side data (see @code{AV_FRAME_DATA_FILM_GRAIN_PARAMS}).
Supported at present by AV1 decoders.
@end table @end table
@item error @var{integer} (@emph{encoding,video})
@item qns @var{integer} (@emph{encoding,video})
Deprecated, use mpegvideo private options instead.
@item threads @var{integer} (@emph{decoding/encoding,video}) @item threads @var{integer} (@emph{decoding/encoding,video})
Set the number of threads to be used, in case the selected codec Set the number of threads to be used, in case the selected codec
implementation supports multi-threading. implementation supports multi-threading.
@ -733,6 +835,12 @@ automatically select the number of threads to set
Default value is @samp{auto}. Default value is @samp{auto}.
@item me_threshold @var{integer} (@emph{encoding,video})
Set motion estimation threshold.
@item mb_threshold @var{integer} (@emph{encoding,video})
Set macroblock threshold.
@item dc @var{integer} (@emph{encoding,video}) @item dc @var{integer} (@emph{encoding,video})
Set intra_dc_precision. Set intra_dc_precision.
@ -810,6 +918,9 @@ noise preserving sum of squared differences
@end table @end table
@item border_mask @var{float} (@emph{encoding,video})
Increase the quantizer for macroblocks close to borders.
@item mblmin @var{integer} (@emph{encoding,video}) @item mblmin @var{integer} (@emph{encoding,video})
Set min macroblock lagrange factor (VBR). Set min macroblock lagrange factor (VBR).
@ -883,6 +994,9 @@ Adjust sensitivity of b_frame_strategy 1.
@item timecode_frame_start @var{integer} (@emph{encoding,video}) @item timecode_frame_start @var{integer} (@emph{encoding,video})
Set GOP timecode frame start number, in non drop frame format. Set GOP timecode frame start number, in non drop frame format.
@item request_channels @var{integer} (@emph{decoding,audio})
Set desired number of audio channels.
@item bits_per_raw_sample @var{integer} @item bits_per_raw_sample @var{integer}
@item channel_layout @var{integer} (@emph{decoding/encoding,audio}) @item channel_layout @var{integer} (@emph{decoding/encoding,audio})
@ -996,12 +1110,6 @@ BT.2020 NCL
BT.2020 CL BT.2020 CL
@item smpte2085 @item smpte2085
SMPTE 2085 SMPTE 2085
@item chroma-derived-nc
Chroma-derived NCL
@item chroma-derived-c
Chroma-derived CL
@item ictcp
ICtCp
@end table @end table
@item color_range @var{integer} (@emph{decoding/encoding,video}) @item color_range @var{integer} (@emph{decoding/encoding,video})

View file

@ -25,19 +25,6 @@ enabled decoders.
A description of some of the currently available video decoders A description of some of the currently available video decoders
follows. follows.
@section av1
AOMedia Video 1 (AV1) decoder.
@subsection Options
@table @option
@item operating_point
Select an operating point of a scalable AV1 bitstream (0 - 31). Default is 0.
@end table
@section rawvideo @section rawvideo
Raw video decoder. Raw video decoder.
@ -101,27 +88,6 @@ This decoder allows libavcodec to decode AVS2 streams with davs2 library.
@c man end VIDEO DECODERS @c man end VIDEO DECODERS
@section libuavs3d
AVS3-P2/IEEE1857.10 video decoder.
libuavs3d allows libavcodec to decode AVS3 streams.
Requires the presence of the libuavs3d headers and library during configuration.
You need to explicitly configure the build with @code{--enable-libuavs3d}.
@subsection Options
The following option is supported by the libuavs3d wrapper.
@table @option
@item frame_threads
Set amount of frame threads to use during decoding. The default value is 0 (autodetect).
@end table
@c man end VIDEO DECODERS
@chapter Audio Decoders @chapter Audio Decoders
@c man begin AUDIO DECODERS @c man begin AUDIO DECODERS
@ -141,7 +107,7 @@ the undocumented RealAudio 3 (a.k.a. dnet).
@item -drc_scale @var{value} @item -drc_scale @var{value}
Dynamic Range Scale Factor. The factor to apply to dynamic range values Dynamic Range Scale Factor. The factor to apply to dynamic range values
from the AC-3 stream. This factor is applied exponentially. The default value is 1. from the AC-3 stream. This factor is applied exponentially.
There are 3 notable scale factor ranges: There are 3 notable scale factor ranges:
@table @option @table @option
@item drc_scale == 0 @item drc_scale == 0

View file

@ -151,9 +151,10 @@ the undocumented RealAudio 3 (a.k.a. dnet).
The @var{ac3} encoder uses floating-point math, while the @var{ac3_fixed} The @var{ac3} encoder uses floating-point math, while the @var{ac3_fixed}
encoder only uses fixed-point integer math. This does not mean that one is encoder only uses fixed-point integer math. This does not mean that one is
always faster, just that one or the other may be better suited to a always faster, just that one or the other may be better suited to a
particular system. The @var{ac3_fixed} encoder is not the default codec for particular system. The floating-point encoder will generally produce better
any of the output formats, so it must be specified explicitly using the option quality audio for a given bitrate. The @var{ac3_fixed} encoder is not the
@code{-acodec ac3_fixed} in order to use it. default codec for any of the output formats, so it must be specified explicitly
using the option @code{-acodec ac3_fixed} in order to use it.
@subsection AC-3 Metadata @subsection AC-3 Metadata
@ -952,11 +953,6 @@ The default is 20ms.
@item packet_loss (@emph{expect-loss}) @item packet_loss (@emph{expect-loss})
Set expected packet loss percentage. The default is 0. Set expected packet loss percentage. The default is 0.
@item fec (@emph{n/a})
Enable inband forward error correction. @option{packet_loss} must be non-zero
to take advantage - frequency of FEC 'side-data' is proportional to expected packet loss.
Default is disabled.
@item application (N.A.) @item application (N.A.)
Set intended application type. Valid options are listed below: Set intended application type. Valid options are listed below:
@ -1184,6 +1180,53 @@ transient response is a higher bitrate.
@end table @end table
@anchor{libwavpack}
@section libwavpack
A wrapper providing WavPack encoding through libwavpack.
Only lossless mode using 32-bit integer samples is supported currently.
Requires the presence of the libwavpack headers and library during
configuration. You need to explicitly configure the build with
@code{--enable-libwavpack}.
Note that a libavcodec-native encoder for the WavPack codec exists so users can
encode audios with this codec without using this encoder. See @ref{wavpackenc}.
@subsection Options
@command{wavpack} command line utility's corresponding options are listed in
parentheses, if any.
@table @option
@item frame_size (@emph{--blocksize})
Default is 32768.
@item compression_level
Set speed vs. compression tradeoff. Acceptable arguments are listed below:
@table @samp
@item 0 (@emph{-f})
Fast mode.
@item 1
Normal (default) settings.
@item 2 (@emph{-h})
High quality.
@item 3 (@emph{-hh})
Very high quality.
@item 4-8 (@emph{-hh -x}@var{EXTRAPROC})
Same as @samp{3}, but with extra processing enabled.
@samp{4} is the same as @option{-x2} and @samp{8} is the same as @option{-x6}.
@end table
@end table
@anchor{mjpegenc} @anchor{mjpegenc}
@section mjpeg @section mjpeg
@ -1210,6 +1253,11 @@ Compute and use optimal huffman tables.
WavPack lossless audio encoder. WavPack lossless audio encoder.
This is a libavcodec-native WavPack encoder. There is also an encoder based on
libwavpack, but there is virtually no reason to use that encoder.
See also @ref{libwavpack}.
@subsection Options @subsection Options
The equivalent options for @command{wavpack} command line utility are listed in The equivalent options for @command{wavpack} command line utility are listed in
@ -1230,6 +1278,7 @@ For the complete formula of calculating default, see
@file{libavcodec/wavpackenc.c}. @file{libavcodec/wavpackenc.c}.
@item compression_level (@emph{-f}, @emph{-h}, @emph{-hh}, and @emph{-x}) @item compression_level (@emph{-f}, @emph{-h}, @emph{-hh}, and @emph{-x})
This option's syntax is consistent with @ref{libwavpack}'s.
@end table @end table
@subsubsection Private options @subsubsection Private options
@ -1268,44 +1317,6 @@ disabled
A description of some of the currently available video encoders A description of some of the currently available video encoders
follows. follows.
@section GIF
GIF image/animation encoder.
@subsection Options
@table @option
@item gifflags @var{integer}
Sets the flags used for GIF encoding.
@table @option
@item offsetting
Enables picture offsetting.
Default is enabled.
@item transdiff
Enables transparency detection between frames.
Default is enabled.
@end table
@item gifimage @var{integer}
Enables encoding one full GIF image per frame, rather than an animated GIF.
Default value is @option{0}.
@item global_palette @var{integer}
Writes a palette to the global GIF header where feasible.
If disabled, every frame will always have a palette written, even if there
is a global palette supplied.
Default value is @option{1}.
@end table
@section Hap @section Hap
Vidvox Hap video encoder. Vidvox Hap video encoder.
@ -1354,58 +1365,10 @@ can be selected with @code{-pred 1}.
@subsection Options @subsection Options
@table @option @table @option
@item format @var{integer} @item format
Can be set to either @code{j2k} or @code{jp2} (the default) that Can be set to either @code{j2k} or @code{jp2} (the default) that
makes it possible to store non-rgb pix_fmts. makes it possible to store non-rgb pix_fmts.
@item tile_width @var{integer}
Sets tile width. Range is 1 to 1073741824. Default is 256.
@item tile_height @var{integer}
Sets tile height. Range is 1 to 1073741824. Default is 256.
@item pred @var{integer}
Allows setting the discrete wavelet transform (DWT) type
@table @option
@item dwt97int (Lossy)
@item dwt53 (Lossless)
@end table
Default is @code{dwt97int}
@item sop @var{boolean}
Enable this to add SOP marker at the start of each packet. Disabled by default.
@item eph @var{boolean}
Enable this to add EPH marker at the end of each packet header. Disabled by default.
@item prog @var{integer}
Sets the progression order to be used by the encoder.
Possible values are:
@table @option
@item lrcp
@item rlcp
@item rpcl
@item pcrl
@item cprl
@end table
Set to @code{lrcp} by default.
@item layer_rates @var{string}
By default, when this option is not used, compression is done using the quality metric.
This option allows for compression using compression ratio. The compression ratio for each
level could be specified. The compression ratio of a layer @code{l} species the what ratio of
total file size is contained in the first @code{l} layers.
Example usage:
@example
ffmpeg -i input.bmp -c:v jpeg2000 -layer_rates "100,10,1" output.j2k
@end example
This would compress the image to contain 3 layers, where the data contained in the
first layer would be compressed by 1000 times, compressed by 100 in the first two layers,
and shall contain all data while using all 3 layers.
@end table @end table
@section librav1e @section librav1e
@ -1636,165 +1599,6 @@ Enable the use of global motion for block prediction. Default is true.
Enable block copy mode for intra block prediction. This mode is Enable block copy mode for intra block prediction. This mode is
useful for screen content. Default is true. useful for screen content. Default is true.
@item enable-rect-partitions (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable rectangular partitions. Default is true.
@item enable-1to4-partitions (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable 1:4/4:1 partitions. Default is true.
@item enable-ab-partitions (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable AB shape partitions. Default is true.
@item enable-angle-delta (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable angle delta intra prediction. Default is true.
@item enable-cfl-intra (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable chroma predicted from luma intra prediction. Default is true.
@item enable-filter-intra (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable filter intra predictor. Default is true.
@item enable-intra-edge-filter (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable intra edge filter. Default is true.
@item enable-smooth-intra (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable smooth intra prediction mode. Default is true.
@item enable-paeth-intra (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable paeth predictor in intra prediction. Default is true.
@item enable-palette (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable palette prediction mode. Default is true.
@item enable-flip-idtx (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable extended transform type, including FLIPADST_DCT, DCT_FLIPADST,
FLIPADST_FLIPADST, ADST_FLIPADST, FLIPADST_ADST, IDTX, V_DCT, H_DCT,
V_ADST, H_ADST, V_FLIPADST, H_FLIPADST. Default is true.
@item enable-tx64 (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable 64-pt transform. Default is true.
@item reduced-tx-type-set (@emph{boolean}) (Requires libaom >= v2.0.0)
Use reduced set of transform types. Default is false.
@item use-intra-dct-only (@emph{boolean}) (Requires libaom >= v2.0.0)
Use DCT only for INTRA modes. Default is false.
@item use-inter-dct-only (@emph{boolean}) (Requires libaom >= v2.0.0)
Use DCT only for INTER modes. Default is false.
@item use-intra-default-tx-only (@emph{boolean}) (Requires libaom >= v2.0.0)
Use Default-transform only for INTRA modes. Default is false.
@item enable-ref-frame-mvs (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable temporal mv prediction. Default is true.
@item enable-reduced-reference-set (@emph{boolean}) (Requires libaom >= v2.0.0)
Use reduced set of single and compound references. Default is false.
@item enable-obmc (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable obmc. Default is true.
@item enable-dual-filter (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable dual filter. Default is true.
@item enable-diff-wtd-comp (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable difference-weighted compound. Default is true.
@item enable-dist-wtd-comp (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable distance-weighted compound. Default is true.
@item enable-onesided-comp (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable one sided compound. Default is true.
@item enable-interinter-wedge (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable interinter wedge compound. Default is true.
@item enable-interintra-wedge (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable interintra wedge compound. Default is true.
@item enable-masked-comp (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable masked compound. Default is true.
@item enable-interintra-comp (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable interintra compound. Default is true.
@item enable-smooth-interintra (@emph{boolean}) (Requires libaom >= v2.0.0)
Enable smooth interintra mode. Default is true.
@item aom-params
Set libaom options using a list of @var{key}=@var{value} pairs separated
by ":". For a list of supported options, see @command{aomenc --help} under the
section "AV1 Specific Options".
For example to specify libaom encoding options with @option{-aom-params}:
@example
ffmpeg -i input -c:v libaom-av1 -b:v 500K -aom-params tune=psnr:enable-tpl-model=1 output.mp4
@end example
@end table
@section libsvtav1
SVT-AV1 encoder wrapper.
Requires the presence of the SVT-AV1 headers and library during configuration.
You need to explicitly configure the build with @code{--enable-libsvtav1}.
@subsection Options
@table @option
@item profile
Set the encoding profile.
@item level
Set the operating point level.
@item tier
Set the operating point tier.
@item rc
Set the rate control mode to use.
Possible modes:
@table @option
@item cqp
Constant quantizer: use fixed values of qindex (dependent on the frame type)
throughout the stream. This mode is the default.
@item vbr
Variable bitrate: use a target bitrate for the whole stream.
@item cvbr
Constrained variable bitrate: use a target bitrate for each GOP.
@end table
@item qmax
Set the maximum quantizer to use when using a bitrate mode.
@item qmin
Set the minimum quantizer to use when using a bitrate mode.
@item qp
Set the quantizer used in cqp rate control mode (0-63).
@item sc_detection
Enable scene change detection.
@item la_depth
Set number of frames to look ahead (0-120).
@item preset
Set the quality-speed tradeoff, in the range 0 to 8. Higher values are
faster but lower quality. Defaults to 8 (highest speed).
@item tile_rows
Set log2 of the number of rows of tiles to use (0-6).
@item tile_columns
Set log2 of the number of columns of tiles to use (0-4).
@end table @end table
@section libkvazaar @section libkvazaar
@ -2177,38 +1981,6 @@ midpoint is passed in rather than calculated for a specific clip or chunk.
The valid range is [0, 10000]. 0 (default) uses standard VBR. The valid range is [0, 10000]. 0 (default) uses standard VBR.
@item enable-tpl @var{boolean} @item enable-tpl @var{boolean}
Enable temporal dependency model. Enable temporal dependency model.
@item ref-frame-config
Using per-frame metadata, set members of the structure @code{vpx_svc_ref_frame_config_t} in @code{vpx/vp8cx.h} to fine-control referencing schemes and frame buffer management.
@*Use a :-separated list of key=value pairs.
For example,
@example
av_dict_set(&av_frame->metadata, "ref-frame-config", \
"rfc_update_buffer_slot=7:rfc_lst_fb_idx=0:rfc_gld_fb_idx=1:rfc_alt_fb_idx=2:rfc_reference_last=0:rfc_reference_golden=0:rfc_reference_alt_ref=0");
@end example
@table @option
@item rfc_update_buffer_slot
Indicates the buffer slot number to update
@item rfc_update_last
Indicates whether to update the LAST frame
@item rfc_update_golden
Indicates whether to update GOLDEN frame
@item rfc_update_alt_ref
Indicates whether to update ALT_REF frame
@item rfc_lst_fb_idx
LAST frame buffer index
@item rfc_gld_fb_idx
GOLDEN frame buffer index
@item rfc_alt_fb_idx
ALT_REF frame buffer index
@item rfc_reference_last
Indicates whether to reference LAST frame
@item rfc_reference_golden
Indicates whether to reference GOLDEN frame
@item rfc_reference_alt_ref
Indicates whether to reference ALT_REF frame
@item rfc_reference_duration
Indicates frame duration
@end table
@end table @end table
@end table @end table
@ -2305,7 +2077,9 @@ pixel formats as input instead of YUV.
@subsection Supported Pixel Formats @subsection Supported Pixel Formats
x264 supports 8- to 10-bit color spaces. The exact bit depth is controlled at x264 supports 8- to 10-bit color spaces. The exact bit depth is controlled at
x264's configure time. x264's configure time. FFmpeg only supports one bit depth in one particular
build. In other words, it is not possible to build one FFmpeg with multiple
versions of x264 with different bit depths.
@subsection Options @subsection Options
@ -2966,28 +2740,18 @@ MPEG-2 video encoder.
@subsection Options @subsection Options
@table @option @table @option
@item profile @item profile @var{integer}
Select the mpeg2 profile to encode: Select the mpeg2 profile to encode:
@table @samp @table @samp
@item 422 @item 422
@item high @item main
@item ss @item ss
Spatially Scalable Spatially Scalable
@item snr @item snr
SNR Scalable SNR Scalable
@item main
@item simple
@end table
@item level
Select the mpeg2 level to encode:
@table @samp
@item high @item high
@item high1440 @item simple
@item main
@item low
@end table @end table
@item seq_disp_ext @var{integer} @item seq_disp_ext @var{integer}
@ -3351,11 +3115,6 @@ Include HDR metadata if the input frames have it
messages). messages).
@end table @end table
@item tiles
Set the number of tiles to encode the input video with, as columns x rows.
Larger numbers allow greater parallelism in both encoding and decoding, but
may decrease coding efficiency.
@end table @end table
@item mjpeg_vaapi @item mjpeg_vaapi

View file

@ -41,7 +41,7 @@ static void pgm_save(unsigned char *buf, int wrap, int xsize, int ysize,
FILE *f; FILE *f;
int i; int i;
f = fopen(filename,"wb"); f = fopen(filename,"w");
fprintf(f, "P5\n%d %d\n%d\n", xsize, ysize, 255); fprintf(f, "P5\n%d %d\n%d\n", xsize, ysize, 255);
for (i = 0; i < ysize; i++) for (i = 0; i < ysize; i++)
fwrite(buf + i * wrap, 1, xsize, f); fwrite(buf + i * wrap, 1, xsize, f);

View file

@ -51,7 +51,7 @@ static int video_dst_bufsize;
static int video_stream_idx = -1, audio_stream_idx = -1; static int video_stream_idx = -1, audio_stream_idx = -1;
static AVFrame *frame = NULL; static AVFrame *frame = NULL;
static AVPacket *pkt = NULL; static AVPacket pkt;
static int video_frame_count = 0; static int video_frame_count = 0;
static int audio_frame_count = 0; static int audio_frame_count = 0;
@ -303,12 +303,10 @@ int main (int argc, char **argv)
goto end; goto end;
} }
pkt = av_packet_alloc(); /* initialize packet, set data to NULL, let the demuxer fill it */
if (!pkt) { av_init_packet(&pkt);
fprintf(stderr, "Could not allocate packet\n"); pkt.data = NULL;
ret = AVERROR(ENOMEM); pkt.size = 0;
goto end;
}
if (video_stream) if (video_stream)
printf("Demuxing video from file '%s' into '%s'\n", src_filename, video_dst_filename); printf("Demuxing video from file '%s' into '%s'\n", src_filename, video_dst_filename);
@ -316,14 +314,14 @@ int main (int argc, char **argv)
printf("Demuxing audio from file '%s' into '%s'\n", src_filename, audio_dst_filename); printf("Demuxing audio from file '%s' into '%s'\n", src_filename, audio_dst_filename);
/* read frames from the file */ /* read frames from the file */
while (av_read_frame(fmt_ctx, pkt) >= 0) { while (av_read_frame(fmt_ctx, &pkt) >= 0) {
// check if the packet belongs to a stream we are interested in, otherwise // check if the packet belongs to a stream we are interested in, otherwise
// skip it // skip it
if (pkt->stream_index == video_stream_idx) if (pkt.stream_index == video_stream_idx)
ret = decode_packet(video_dec_ctx, pkt); ret = decode_packet(video_dec_ctx, &pkt);
else if (pkt->stream_index == audio_stream_idx) else if (pkt.stream_index == audio_stream_idx)
ret = decode_packet(audio_dec_ctx, pkt); ret = decode_packet(audio_dec_ctx, &pkt);
av_packet_unref(pkt); av_packet_unref(&pkt);
if (ret < 0) if (ret < 0)
break; break;
} }
@ -374,7 +372,6 @@ end:
fclose(video_dst_file); fclose(video_dst_file);
if (audio_dst_file) if (audio_dst_file)
fclose(audio_dst_file); fclose(audio_dst_file);
av_packet_free(&pkt);
av_frame_free(&frame); av_frame_free(&frame);
av_free(video_dst_data[0]); av_free(video_dst_data[0]);

View file

@ -223,7 +223,7 @@ int main(int argc, char *argv[])
} }
/* open the file to dump raw data */ /* open the file to dump raw data */
output_file = fopen(argv[3], "w+b"); output_file = fopen(argv[3], "w+");
/* actual decoding and dump the raw data */ /* actual decoding and dump the raw data */
while (ret >= 0) { while (ret >= 0) {

View file

@ -519,6 +519,7 @@ static AVFrame *get_video_frame(OutputStream *ost)
static int write_video_frame(AVFormatContext *oc, OutputStream *ost) static int write_video_frame(AVFormatContext *oc, OutputStream *ost)
{ {
return write_frame(oc, ost->enc, ost->st, get_video_frame(ost)); return write_frame(oc, ost->enc, ost->st, get_video_frame(ost));
} }
static void close_stream(AVFormatContext *oc, OutputStream *ost) static void close_stream(AVFormatContext *oc, OutputStream *ost)

View file

@ -245,16 +245,14 @@ cleanup:
/** /**
* Initialize one data packet for reading or writing. * Initialize one data packet for reading or writing.
* @param[out] packet Packet to be initialized * @param packet Packet to be initialized
* @return Error code (0 if successful)
*/ */
static int init_packet(AVPacket **packet) static void init_packet(AVPacket *packet)
{ {
if (!(*packet = av_packet_alloc())) { av_init_packet(packet);
fprintf(stderr, "Could not allocate packet\n"); /* Set the packet data and size so that it is recognized as being empty. */
return AVERROR(ENOMEM); packet->data = NULL;
} packet->size = 0;
return 0;
} }
/** /**
@ -373,31 +371,28 @@ static int decode_audio_frame(AVFrame *frame,
int *data_present, int *finished) int *data_present, int *finished)
{ {
/* Packet used for temporary storage. */ /* Packet used for temporary storage. */
AVPacket *input_packet; AVPacket input_packet;
int error; int error;
init_packet(&input_packet);
error = init_packet(&input_packet);
if (error < 0)
return error;
/* Read one audio frame from the input file into a temporary packet. */ /* Read one audio frame from the input file into a temporary packet. */
if ((error = av_read_frame(input_format_context, input_packet)) < 0) { if ((error = av_read_frame(input_format_context, &input_packet)) < 0) {
/* If we are at the end of the file, flush the decoder below. */ /* If we are at the end of the file, flush the decoder below. */
if (error == AVERROR_EOF) if (error == AVERROR_EOF)
*finished = 1; *finished = 1;
else { else {
fprintf(stderr, "Could not read frame (error '%s')\n", fprintf(stderr, "Could not read frame (error '%s')\n",
av_err2str(error)); av_err2str(error));
goto cleanup; return error;
} }
} }
/* Send the audio frame stored in the temporary packet to the decoder. /* Send the audio frame stored in the temporary packet to the decoder.
* The input audio stream decoder is used to do this. */ * The input audio stream decoder is used to do this. */
if ((error = avcodec_send_packet(input_codec_context, input_packet)) < 0) { if ((error = avcodec_send_packet(input_codec_context, &input_packet)) < 0) {
fprintf(stderr, "Could not send packet for decoding (error '%s')\n", fprintf(stderr, "Could not send packet for decoding (error '%s')\n",
av_err2str(error)); av_err2str(error));
goto cleanup; return error;
} }
/* Receive one frame from the decoder. */ /* Receive one frame from the decoder. */
@ -423,7 +418,7 @@ static int decode_audio_frame(AVFrame *frame,
} }
cleanup: cleanup:
av_packet_free(&input_packet); av_packet_unref(&input_packet);
return error; return error;
} }
@ -666,12 +661,9 @@ static int encode_audio_frame(AVFrame *frame,
int *data_present) int *data_present)
{ {
/* Packet used for temporary storage. */ /* Packet used for temporary storage. */
AVPacket *output_packet; AVPacket output_packet;
int error; int error;
init_packet(&output_packet);
error = init_packet(&output_packet);
if (error < 0)
return error;
/* Set a timestamp based on the sample rate for the container. */ /* Set a timestamp based on the sample rate for the container. */
if (frame) { if (frame) {
@ -689,11 +681,11 @@ static int encode_audio_frame(AVFrame *frame,
} else if (error < 0) { } else if (error < 0) {
fprintf(stderr, "Could not send packet for encoding (error '%s')\n", fprintf(stderr, "Could not send packet for encoding (error '%s')\n",
av_err2str(error)); av_err2str(error));
goto cleanup; return error;
} }
/* Receive one encoded frame from the encoder. */ /* Receive one encoded frame from the encoder. */
error = avcodec_receive_packet(output_codec_context, output_packet); error = avcodec_receive_packet(output_codec_context, &output_packet);
/* If the encoder asks for more data to be able to provide an /* If the encoder asks for more data to be able to provide an
* encoded frame, return indicating that no data is present. */ * encoded frame, return indicating that no data is present. */
if (error == AVERROR(EAGAIN)) { if (error == AVERROR(EAGAIN)) {
@ -714,14 +706,14 @@ static int encode_audio_frame(AVFrame *frame,
/* Write one audio frame from the temporary packet to the output file. */ /* Write one audio frame from the temporary packet to the output file. */
if (*data_present && if (*data_present &&
(error = av_write_frame(output_format_context, output_packet)) < 0) { (error = av_write_frame(output_format_context, &output_packet)) < 0) {
fprintf(stderr, "Could not write frame (error '%s')\n", fprintf(stderr, "Could not write frame (error '%s')\n",
av_err2str(error)); av_err2str(error));
goto cleanup; goto cleanup;
} }
cleanup: cleanup:
av_packet_free(&output_packet); av_packet_unref(&output_packet);
return error; return error;
} }

View file

@ -41,17 +41,12 @@ typedef struct FilteringContext {
AVFilterContext *buffersink_ctx; AVFilterContext *buffersink_ctx;
AVFilterContext *buffersrc_ctx; AVFilterContext *buffersrc_ctx;
AVFilterGraph *filter_graph; AVFilterGraph *filter_graph;
AVPacket *enc_pkt;
AVFrame *filtered_frame;
} FilteringContext; } FilteringContext;
static FilteringContext *filter_ctx; static FilteringContext *filter_ctx;
typedef struct StreamContext { typedef struct StreamContext {
AVCodecContext *dec_ctx; AVCodecContext *dec_ctx;
AVCodecContext *enc_ctx; AVCodecContext *enc_ctx;
AVFrame *dec_frame;
} StreamContext; } StreamContext;
static StreamContext *stream_ctx; static StreamContext *stream_ctx;
@ -107,10 +102,6 @@ static int open_input_file(const char *filename)
} }
} }
stream_ctx[i].dec_ctx = codec_ctx; stream_ctx[i].dec_ctx = codec_ctx;
stream_ctx[i].dec_frame = av_frame_alloc();
if (!stream_ctx[i].dec_frame)
return AVERROR(ENOMEM);
} }
av_dump_format(ifmt_ctx, 0, filename, 0); av_dump_format(ifmt_ctx, 0, filename, 0);
@ -407,63 +398,54 @@ static int init_filters(void)
stream_ctx[i].enc_ctx, filter_spec); stream_ctx[i].enc_ctx, filter_spec);
if (ret) if (ret)
return ret; return ret;
filter_ctx[i].enc_pkt = av_packet_alloc();
if (!filter_ctx[i].enc_pkt)
return AVERROR(ENOMEM);
filter_ctx[i].filtered_frame = av_frame_alloc();
if (!filter_ctx[i].filtered_frame)
return AVERROR(ENOMEM);
} }
return 0; return 0;
} }
static int encode_write_frame(unsigned int stream_index, int flush) static int encode_write_frame(AVFrame *filt_frame, unsigned int stream_index, int *got_frame) {
{
StreamContext *stream = &stream_ctx[stream_index];
FilteringContext *filter = &filter_ctx[stream_index];
AVFrame *filt_frame = flush ? NULL : filter->filtered_frame;
AVPacket *enc_pkt = filter->enc_pkt;
int ret; int ret;
int got_frame_local;
AVPacket enc_pkt;
int (*enc_func)(AVCodecContext *, AVPacket *, const AVFrame *, int *) =
(ifmt_ctx->streams[stream_index]->codecpar->codec_type ==
AVMEDIA_TYPE_VIDEO) ? avcodec_encode_video2 : avcodec_encode_audio2;
if (!got_frame)
got_frame = &got_frame_local;
av_log(NULL, AV_LOG_INFO, "Encoding frame\n"); av_log(NULL, AV_LOG_INFO, "Encoding frame\n");
/* encode filtered frame */ /* encode filtered frame */
av_packet_unref(enc_pkt); enc_pkt.data = NULL;
enc_pkt.size = 0;
ret = avcodec_send_frame(stream->enc_ctx, filt_frame); av_init_packet(&enc_pkt);
ret = enc_func(stream_ctx[stream_index].enc_ctx, &enc_pkt,
filt_frame, got_frame);
av_frame_free(&filt_frame);
if (ret < 0) if (ret < 0)
return ret; return ret;
if (!(*got_frame))
while (ret >= 0) {
ret = avcodec_receive_packet(stream->enc_ctx, enc_pkt);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
return 0; return 0;
/* prepare packet for muxing */ /* prepare packet for muxing */
enc_pkt->stream_index = stream_index; enc_pkt.stream_index = stream_index;
av_packet_rescale_ts(enc_pkt, av_packet_rescale_ts(&enc_pkt,
stream->enc_ctx->time_base, stream_ctx[stream_index].enc_ctx->time_base,
ofmt_ctx->streams[stream_index]->time_base); ofmt_ctx->streams[stream_index]->time_base);
av_log(NULL, AV_LOG_DEBUG, "Muxing frame\n"); av_log(NULL, AV_LOG_DEBUG, "Muxing frame\n");
/* mux encoded frame */ /* mux encoded frame */
ret = av_interleaved_write_frame(ofmt_ctx, enc_pkt); ret = av_interleaved_write_frame(ofmt_ctx, &enc_pkt);
}
return ret; return ret;
} }
static int filter_encode_write_frame(AVFrame *frame, unsigned int stream_index) static int filter_encode_write_frame(AVFrame *frame, unsigned int stream_index)
{ {
FilteringContext *filter = &filter_ctx[stream_index];
int ret; int ret;
AVFrame *filt_frame;
av_log(NULL, AV_LOG_INFO, "Pushing decoded frame to filters\n"); av_log(NULL, AV_LOG_INFO, "Pushing decoded frame to filters\n");
/* push the decoded frame into the filtergraph */ /* push the decoded frame into the filtergraph */
ret = av_buffersrc_add_frame_flags(filter->buffersrc_ctx, ret = av_buffersrc_add_frame_flags(filter_ctx[stream_index].buffersrc_ctx,
frame, 0); frame, 0);
if (ret < 0) { if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while feeding the filtergraph\n"); av_log(NULL, AV_LOG_ERROR, "Error while feeding the filtergraph\n");
@ -472,9 +454,14 @@ static int filter_encode_write_frame(AVFrame *frame, unsigned int stream_index)
/* pull filtered frames from the filtergraph */ /* pull filtered frames from the filtergraph */
while (1) { while (1) {
filt_frame = av_frame_alloc();
if (!filt_frame) {
ret = AVERROR(ENOMEM);
break;
}
av_log(NULL, AV_LOG_INFO, "Pulling filtered frame from filters\n"); av_log(NULL, AV_LOG_INFO, "Pulling filtered frame from filters\n");
ret = av_buffersink_get_frame(filter->buffersink_ctx, ret = av_buffersink_get_frame(filter_ctx[stream_index].buffersink_ctx,
filter->filtered_frame); filt_frame);
if (ret < 0) { if (ret < 0) {
/* if no more frames for output - returns AVERROR(EAGAIN) /* if no more frames for output - returns AVERROR(EAGAIN)
* if flushed and no more frames for output - returns AVERROR_EOF * if flushed and no more frames for output - returns AVERROR_EOF
@ -482,12 +469,12 @@ static int filter_encode_write_frame(AVFrame *frame, unsigned int stream_index)
*/ */
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
ret = 0; ret = 0;
av_frame_free(&filt_frame);
break; break;
} }
filter->filtered_frame->pict_type = AV_PICTURE_TYPE_NONE; filt_frame->pict_type = AV_PICTURE_TYPE_NONE;
ret = encode_write_frame(stream_index, 0); ret = encode_write_frame(filt_frame, stream_index, NULL);
av_frame_unref(filter->filtered_frame);
if (ret < 0) if (ret < 0)
break; break;
} }
@ -497,20 +484,34 @@ static int filter_encode_write_frame(AVFrame *frame, unsigned int stream_index)
static int flush_encoder(unsigned int stream_index) static int flush_encoder(unsigned int stream_index)
{ {
int ret;
int got_frame;
if (!(stream_ctx[stream_index].enc_ctx->codec->capabilities & if (!(stream_ctx[stream_index].enc_ctx->codec->capabilities &
AV_CODEC_CAP_DELAY)) AV_CODEC_CAP_DELAY))
return 0; return 0;
while (1) {
av_log(NULL, AV_LOG_INFO, "Flushing stream #%u encoder\n", stream_index); av_log(NULL, AV_LOG_INFO, "Flushing stream #%u encoder\n", stream_index);
return encode_write_frame(stream_index, 1); ret = encode_write_frame(NULL, stream_index, &got_frame);
if (ret < 0)
break;
if (!got_frame)
return 0;
}
return ret;
} }
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int ret; int ret;
AVPacket *packet = NULL; AVPacket packet = { .data = NULL, .size = 0 };
AVFrame *frame = NULL;
enum AVMediaType type;
unsigned int stream_index; unsigned int stream_index;
unsigned int i; unsigned int i;
int got_frame;
int (*dec_func)(AVCodecContext *, AVFrame *, int *, const AVPacket *);
if (argc != 3) { if (argc != 3) {
av_log(NULL, AV_LOG_ERROR, "Usage: %s <input file> <output file>\n", argv[0]); av_log(NULL, AV_LOG_ERROR, "Usage: %s <input file> <output file>\n", argv[0]);
@ -523,54 +524,56 @@ int main(int argc, char **argv)
goto end; goto end;
if ((ret = init_filters()) < 0) if ((ret = init_filters()) < 0)
goto end; goto end;
if (!(packet = av_packet_alloc()))
goto end;
/* read all packets */ /* read all packets */
while (1) { while (1) {
if ((ret = av_read_frame(ifmt_ctx, packet)) < 0) if ((ret = av_read_frame(ifmt_ctx, &packet)) < 0)
break; break;
stream_index = packet->stream_index; stream_index = packet.stream_index;
type = ifmt_ctx->streams[packet.stream_index]->codecpar->codec_type;
av_log(NULL, AV_LOG_DEBUG, "Demuxer gave frame of stream_index %u\n", av_log(NULL, AV_LOG_DEBUG, "Demuxer gave frame of stream_index %u\n",
stream_index); stream_index);
if (filter_ctx[stream_index].filter_graph) { if (filter_ctx[stream_index].filter_graph) {
StreamContext *stream = &stream_ctx[stream_index];
av_log(NULL, AV_LOG_DEBUG, "Going to reencode&filter the frame\n"); av_log(NULL, AV_LOG_DEBUG, "Going to reencode&filter the frame\n");
frame = av_frame_alloc();
av_packet_rescale_ts(packet, if (!frame) {
ret = AVERROR(ENOMEM);
break;
}
av_packet_rescale_ts(&packet,
ifmt_ctx->streams[stream_index]->time_base, ifmt_ctx->streams[stream_index]->time_base,
stream->dec_ctx->time_base); stream_ctx[stream_index].dec_ctx->time_base);
ret = avcodec_send_packet(stream->dec_ctx, packet); dec_func = (type == AVMEDIA_TYPE_VIDEO) ? avcodec_decode_video2 :
avcodec_decode_audio4;
ret = dec_func(stream_ctx[stream_index].dec_ctx, frame,
&got_frame, &packet);
if (ret < 0) { if (ret < 0) {
av_frame_free(&frame);
av_log(NULL, AV_LOG_ERROR, "Decoding failed\n"); av_log(NULL, AV_LOG_ERROR, "Decoding failed\n");
break; break;
} }
while (ret >= 0) { if (got_frame) {
ret = avcodec_receive_frame(stream->dec_ctx, stream->dec_frame); frame->pts = frame->best_effort_timestamp;
if (ret == AVERROR_EOF || ret == AVERROR(EAGAIN)) ret = filter_encode_write_frame(frame, stream_index);
break; av_frame_free(&frame);
else if (ret < 0)
goto end;
stream->dec_frame->pts = stream->dec_frame->best_effort_timestamp;
ret = filter_encode_write_frame(stream->dec_frame, stream_index);
if (ret < 0) if (ret < 0)
goto end; goto end;
} else {
av_frame_free(&frame);
} }
} else { } else {
/* remux this frame without reencoding */ /* remux this frame without reencoding */
av_packet_rescale_ts(packet, av_packet_rescale_ts(&packet,
ifmt_ctx->streams[stream_index]->time_base, ifmt_ctx->streams[stream_index]->time_base,
ofmt_ctx->streams[stream_index]->time_base); ofmt_ctx->streams[stream_index]->time_base);
ret = av_interleaved_write_frame(ofmt_ctx, packet); ret = av_interleaved_write_frame(ofmt_ctx, &packet);
if (ret < 0) if (ret < 0)
goto end; goto end;
} }
av_packet_unref(packet); av_packet_unref(&packet);
} }
/* flush filters and encoders */ /* flush filters and encoders */
@ -594,18 +597,14 @@ int main(int argc, char **argv)
av_write_trailer(ofmt_ctx); av_write_trailer(ofmt_ctx);
end: end:
av_packet_free(&packet); av_packet_unref(&packet);
av_frame_free(&frame);
for (i = 0; i < ifmt_ctx->nb_streams; i++) { for (i = 0; i < ifmt_ctx->nb_streams; i++) {
avcodec_free_context(&stream_ctx[i].dec_ctx); avcodec_free_context(&stream_ctx[i].dec_ctx);
if (ofmt_ctx && ofmt_ctx->nb_streams > i && ofmt_ctx->streams[i] && stream_ctx[i].enc_ctx) if (ofmt_ctx && ofmt_ctx->nb_streams > i && ofmt_ctx->streams[i] && stream_ctx[i].enc_ctx)
avcodec_free_context(&stream_ctx[i].enc_ctx); avcodec_free_context(&stream_ctx[i].enc_ctx);
if (filter_ctx && filter_ctx[i].filter_graph) { if (filter_ctx && filter_ctx[i].filter_graph)
avfilter_graph_free(&filter_ctx[i].filter_graph); avfilter_graph_free(&filter_ctx[i].filter_graph);
av_packet_free(&filter_ctx[i].enc_pkt);
av_frame_free(&filter_ctx[i].filtered_frame);
}
av_frame_free(&stream_ctx[i].dec_frame);
} }
av_free(filter_ctx); av_free(filter_ctx);
av_free(stream_ctx); av_free(stream_ctx);

View file

@ -74,27 +74,27 @@ static int set_hwframe_ctx(AVCodecContext *ctx, AVBufferRef *hw_device_ctx)
static int encode_write(AVCodecContext *avctx, AVFrame *frame, FILE *fout) static int encode_write(AVCodecContext *avctx, AVFrame *frame, FILE *fout)
{ {
int ret = 0; int ret = 0;
AVPacket *enc_pkt; AVPacket enc_pkt;
if (!(enc_pkt = av_packet_alloc())) av_init_packet(&enc_pkt);
return AVERROR(ENOMEM); enc_pkt.data = NULL;
enc_pkt.size = 0;
if ((ret = avcodec_send_frame(avctx, frame)) < 0) { if ((ret = avcodec_send_frame(avctx, frame)) < 0) {
fprintf(stderr, "Error code: %s\n", av_err2str(ret)); fprintf(stderr, "Error code: %s\n", av_err2str(ret));
goto end; goto end;
} }
while (1) { while (1) {
ret = avcodec_receive_packet(avctx, enc_pkt); ret = avcodec_receive_packet(avctx, &enc_pkt);
if (ret) if (ret)
break; break;
enc_pkt->stream_index = 0; enc_pkt.stream_index = 0;
ret = fwrite(enc_pkt->data, enc_pkt->size, 1, fout); ret = fwrite(enc_pkt.data, enc_pkt.size, 1, fout);
av_packet_unref(enc_pkt); av_packet_unref(&enc_pkt);
} }
end: end:
av_packet_free(&enc_pkt);
ret = ((ret == AVERROR(EAGAIN)) ? 0 : -1); ret = ((ret == AVERROR(EAGAIN)) ? 0 : -1);
return ret; return ret;
} }

View file

@ -109,25 +109,28 @@ static int open_input_file(const char *filename)
return ret; return ret;
} }
static int encode_write(AVPacket *enc_pkt, AVFrame *frame) static int encode_write(AVFrame *frame)
{ {
int ret = 0; int ret = 0;
AVPacket enc_pkt;
av_packet_unref(enc_pkt); av_init_packet(&enc_pkt);
enc_pkt.data = NULL;
enc_pkt.size = 0;
if ((ret = avcodec_send_frame(encoder_ctx, frame)) < 0) { if ((ret = avcodec_send_frame(encoder_ctx, frame)) < 0) {
fprintf(stderr, "Error during encoding. Error code: %s\n", av_err2str(ret)); fprintf(stderr, "Error during encoding. Error code: %s\n", av_err2str(ret));
goto end; goto end;
} }
while (1) { while (1) {
ret = avcodec_receive_packet(encoder_ctx, enc_pkt); ret = avcodec_receive_packet(encoder_ctx, &enc_pkt);
if (ret) if (ret)
break; break;
enc_pkt->stream_index = 0; enc_pkt.stream_index = 0;
av_packet_rescale_ts(enc_pkt, ifmt_ctx->streams[video_stream]->time_base, av_packet_rescale_ts(&enc_pkt, ifmt_ctx->streams[video_stream]->time_base,
ofmt_ctx->streams[0]->time_base); ofmt_ctx->streams[0]->time_base);
ret = av_interleaved_write_frame(ofmt_ctx, enc_pkt); ret = av_interleaved_write_frame(ofmt_ctx, &enc_pkt);
if (ret < 0) { if (ret < 0) {
fprintf(stderr, "Error during writing data to output file. " fprintf(stderr, "Error during writing data to output file. "
"Error code: %s\n", av_err2str(ret)); "Error code: %s\n", av_err2str(ret));
@ -213,7 +216,7 @@ static int dec_enc(AVPacket *pkt, AVCodec *enc_codec)
initialized = 1; initialized = 1;
} }
if ((ret = encode_write(pkt, frame)) < 0) if ((ret = encode_write(frame)) < 0)
fprintf(stderr, "Error during encoding and writing.\n"); fprintf(stderr, "Error during encoding and writing.\n");
fail: fail:
@ -227,7 +230,7 @@ fail:
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int ret = 0; int ret = 0;
AVPacket *dec_pkt; AVPacket dec_pkt;
AVCodec *enc_codec; AVCodec *enc_codec;
if (argc != 4) { if (argc != 4) {
@ -243,12 +246,6 @@ int main(int argc, char **argv)
return -1; return -1;
} }
dec_pkt = av_packet_alloc();
if (!dec_pkt) {
fprintf(stderr, "Failed to allocate decode packet\n");
goto end;
}
if ((ret = open_input_file(argv[1])) < 0) if ((ret = open_input_file(argv[1])) < 0)
goto end; goto end;
@ -278,21 +275,23 @@ int main(int argc, char **argv)
/* read all packets and only transcoding video */ /* read all packets and only transcoding video */
while (ret >= 0) { while (ret >= 0) {
if ((ret = av_read_frame(ifmt_ctx, dec_pkt)) < 0) if ((ret = av_read_frame(ifmt_ctx, &dec_pkt)) < 0)
break; break;
if (video_stream == dec_pkt->stream_index) if (video_stream == dec_pkt.stream_index)
ret = dec_enc(dec_pkt, enc_codec); ret = dec_enc(&dec_pkt, enc_codec);
av_packet_unref(dec_pkt); av_packet_unref(&dec_pkt);
} }
/* flush decoder */ /* flush decoder */
av_packet_unref(dec_pkt); dec_pkt.data = NULL;
ret = dec_enc(dec_pkt, enc_codec); dec_pkt.size = 0;
ret = dec_enc(&dec_pkt, enc_codec);
av_packet_unref(&dec_pkt);
/* flush encoder */ /* flush encoder */
ret = encode_write(dec_pkt, NULL); ret = encode_write(NULL);
/* write the trailer for output stream */ /* write the trailer for output stream */
av_write_trailer(ofmt_ctx); av_write_trailer(ofmt_ctx);
@ -303,6 +302,5 @@ end:
avcodec_free_context(&decoder_ctx); avcodec_free_context(&decoder_ctx);
avcodec_free_context(&encoder_ctx); avcodec_free_context(&encoder_ctx);
av_buffer_unref(&hw_device_ctx); av_buffer_unref(&hw_device_ctx);
av_packet_free(&dec_pkt);
return ret; return ret;
} }

View file

@ -617,102 +617,6 @@ they do not conflict with the standard, as in:
ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg
@end example @end example
The parameters set for each target are as follows.
@strong{VCD}
@example
@var{pal}:
-f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324
-s 352x288 -r 25
-codec:v mpeg1video -g 15 -b:v 1150k -maxrate:v 1150v -minrate:v 1150k -bufsize:v 327680
-ar 44100 -ac 2
-codec:a mp2 -b:a 224k
@var{ntsc}:
-f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324
-s 352x240 -r 30000/1001
-codec:v mpeg1video -g 18 -b:v 1150k -maxrate:v 1150v -minrate:v 1150k -bufsize:v 327680
-ar 44100 -ac 2
-codec:a mp2 -b:a 224k
@var{film}:
-f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324
-s 352x240 -r 24000/1001
-codec:v mpeg1video -g 18 -b:v 1150k -maxrate:v 1150v -minrate:v 1150k -bufsize:v 327680
-ar 44100 -ac 2
-codec:a mp2 -b:a 224k
@end example
@strong{SVCD}
@example
@var{pal}:
-f svcd -packetsize 2324
-s 480x576 -pix_fmt yuv420p -r 25
-codec:v mpeg2video -g 15 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1
-ar 44100
-codec:a mp2 -b:a 224k
@var{ntsc}:
-f svcd -packetsize 2324
-s 480x480 -pix_fmt yuv420p -r 30000/1001
-codec:v mpeg2video -g 18 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1
-ar 44100
-codec:a mp2 -b:a 224k
@var{film}:
-f svcd -packetsize 2324
-s 480x480 -pix_fmt yuv420p -r 24000/1001
-codec:v mpeg2video -g 18 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1
-ar 44100
-codec:a mp2 -b:a 224k
@end example
@strong{DVD}
@example
@var{pal}:
-f dvd -muxrate 10080k -packetsize 2048
-s 720x576 -pix_fmt yuv420p -r 25
-codec:v mpeg2video -g 15 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008
-ar 48000
-codec:a ac3 -b:a 448k
@var{ntsc}:
-f dvd -muxrate 10080k -packetsize 2048
-s 720x480 -pix_fmt yuv420p -r 30000/1001
-codec:v mpeg2video -g 18 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008
-ar 48000
-codec:a ac3 -b:a 448k
@var{film}:
-f dvd -muxrate 10080k -packetsize 2048
-s 720x480 -pix_fmt yuv420p -r 24000/1001
-codec:v mpeg2video -g 18 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008
-ar 48000
-codec:a ac3 -b:a 448k
@end example
@strong{DV}
@example
@var{pal}:
-f dv
-s 720x576 -pix_fmt yuv420p -r 25
-ar 48000 -ac 2
@var{ntsc}:
-f dv
-s 720x480 -pix_fmt yuv411p -r 30000/1001
-ar 48000 -ac 2
@var{film}:
-f dv
-s 720x480 -pix_fmt yuv411p -r 24000/1001
-ar 48000 -ac 2
@end example
The @code{dv50} target is identical to the @code{dv} target except that the pixel format set is @code{yuv422p} for all three standards.
Any user-set value for a parameter above will override the target preset value. In that case, the output may
not comply with the target standard.
@item -dn (@emph{input/output}) @item -dn (@emph{input/output})
As an input option, blocks all data streams of a file from being filtered or As an input option, blocks all data streams of a file from being filtered or
being automatically selected or mapped for any output. See @code{-discard} being automatically selected or mapped for any output. See @code{-discard}
@ -771,19 +675,14 @@ Specify the preset for matching stream(s).
Print encoding progress/statistics. It is on by default, to explicitly Print encoding progress/statistics. It is on by default, to explicitly
disable it you need to specify @code{-nostats}. disable it you need to specify @code{-nostats}.
@item -stats_period @var{time} (@emph{global})
Set period at which encoding progress/statistics are updated. Default is 0.5 seconds.
@item -progress @var{url} (@emph{global}) @item -progress @var{url} (@emph{global})
Send program-friendly progress information to @var{url}. Send program-friendly progress information to @var{url}.
Progress information is written periodically and at the end of Progress information is written approximately every second and at the end of
the encoding process. It is made of "@var{key}=@var{value}" lines. @var{key} the encoding process. It is made of "@var{key}=@var{value}" lines. @var{key}
consists of only alphanumeric characters. The last key of a sequence of consists of only alphanumeric characters. The last key of a sequence of
progress information is always "progress". progress information is always "progress".
The update period is set using @code{-stats_period}.
@anchor{stdin option} @anchor{stdin option}
@item -stdin @item -stdin
Enable interaction on standard input. On by default unless standard input is Enable interaction on standard input. On by default unless standard input is
@ -835,6 +734,10 @@ ffmpeg -dump_attachment:t "" -i INPUT
Technical note -- attachments are implemented as codec extradata, so this Technical note -- attachments are implemented as codec extradata, so this
option can actually be used to extract extradata from any stream, not just option can actually be used to extract extradata from any stream, not just
attachments. attachments.
@item -noautorotate
Disable automatically rotating video based on file metadata.
@end table @end table
@section Video Options @section Video Options
@ -855,13 +758,6 @@ If in doubt use @option{-framerate} instead of the input option @option{-r}.
As an output option, duplicate or drop input frames to achieve constant output As an output option, duplicate or drop input frames to achieve constant output
frame rate @var{fps}. frame rate @var{fps}.
@item -fpsmax[:@var{stream_specifier}] @var{fps} (@emph{output,per-stream})
Set maximum frame rate (Hz value, fraction or abbreviation).
Clamps output frame rate when output framerate is auto-set and is higher than this value.
Useful in batch processing or when input framerate is wrongly detected as very high.
It cannot be set together with @code{-r}. It is ignored during streamcopy.
@item -s[:@var{stream_specifier}] @var{size} (@emph{input/output,per-stream}) @item -s[:@var{stream_specifier}] @var{size} (@emph{input/output,per-stream})
Set frame size. Set frame size.
@ -923,18 +819,6 @@ Create the filtergraph specified by @var{filtergraph} and use it to
filter the stream. filter the stream.
This is an alias for @code{-filter:v}, see the @ref{filter_option,,-filter option}. This is an alias for @code{-filter:v}, see the @ref{filter_option,,-filter option}.
@item -autorotate
Automatically rotate the video according to file metadata. Enabled by
default, use @option{-noautorotate} to disable it.
@item -autoscale
Automatically scale the video according to the resolution of first frame.
Enabled by default, use @option{-noautoscale} to disable it. When autoscale is
disabled, all output frames of filter graph might not be in the same resolution
and may be inadequate for some encoder/muxer. Therefore, it is not recommended
to disable it unless you really know what you are doing.
Disable autoscale at your own risk.
@end table @end table
@section Advanced Video options @section Advanced Video options
@ -964,8 +848,8 @@ factor if negative.
Force interlacing support in encoder (MPEG-2 and MPEG-4 only). Force interlacing support in encoder (MPEG-2 and MPEG-4 only).
Use this option if your input file is interlaced and you want Use this option if your input file is interlaced and you want
to keep the interlaced format for minimum losses. to keep the interlaced format for minimum losses.
The alternative is to deinterlace the input stream by use of a filter The alternative is to deinterlace the input stream with
such as @code{yadif} or @code{bwdif}, but deinterlacing introduces losses. @option{-deinterlace}, but deinterlacing introduces losses.
@item -psnr @item -psnr
Calculate PSNR of compressed frames. Calculate PSNR of compressed frames.
@item -vstats @item -vstats
@ -1608,17 +1492,6 @@ is enabled.
This option has been deprecated. Use the @code{aresample} audio filter instead. This option has been deprecated. Use the @code{aresample} audio filter instead.
@item -adrift_threshold @var{time}
Set the minimum difference between timestamps and audio data (in seconds) to trigger
adding/dropping samples to make it match the timestamps. This option effectively is
a threshold to select between hard (add/drop) and soft (squeeze/stretch) compensation.
@code{-async} must be set to a positive value.
@item -apad @var{parameters} (@emph{output,per-stream})
Pad the output audio stream(s). This is the same as applying @code{-af apad}.
Argument is a string of filter parameters composed the same as with the @code{apad} filter.
@code{-shortest} must be set for this output for the option to take effect.
@item -copyts @item -copyts
Do not process input timestamps, but keep their values without trying Do not process input timestamps, but keep their values without trying
to sanitize them. In particular, do not remove the initial start time to sanitize them. In particular, do not remove the initial start time
@ -1773,22 +1646,6 @@ graph will be added to the output file automatically, so we can simply write
ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv
@end example @end example
As a special exception, you can use a bitmap subtitle stream as input: it
will be converted into a video with the same size as the largest video in
the file, or 720x576 if no video is present. Note that this is an
experimental and temporary solution. It will be removed once libavfilter has
proper support for subtitles.
For example, to hardcode subtitles on top of a DVB-T recording stored in
MPEG-TS format, delaying the subtitles by 1 second:
@example
ffmpeg -i input.ts -filter_complex \
'[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay' \
-sn -map '#0x2dc' output.mkv
@end example
(0x2d0, 0x2dc and 0x2ef are the MPEG-TS PIDs of respectively the video,
audio and subtitles streams; 0:0, 0:3 and 0:7 would have worked too)
To generate 5 seconds of pure red video using lavfi @code{color} source: To generate 5 seconds of pure red video using lavfi @code{color} source:
@example @example
ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv
@ -1824,9 +1681,8 @@ not start from timestamp 0, such as transport streams.
@item -thread_queue_size @var{size} (@emph{input}) @item -thread_queue_size @var{size} (@emph{input})
This option sets the maximum number of queued packets when reading from the This option sets the maximum number of queued packets when reading from the
file or device. With low latency / high rate live streams, packets may be file or device. With low latency / high rate live streams, packets may be
discarded if they are not read in a timely manner; setting this value can discarded if they are not read in a timely manner; raising this value can
force ffmpeg to use a separate input thread and read packets as soon as they avoid it.
arrive. By default ffmpeg only do this if multiple inputs are specified.
@item -sdp_file @var{file} (@emph{global}) @item -sdp_file @var{file} (@emph{global})
Print sdp information for an output stream to @var{file}. Print sdp information for an output stream to @var{file}.
@ -1869,11 +1725,6 @@ No packets were passed to the muxer, the output is empty.
No packets were passed to the muxer in some of the output streams. No packets were passed to the muxer in some of the output streams.
@end table @end table
@item -max_error_rate (@emph{global})
Set fraction of decoding frame failures across all inputs which when crossed
ffmpeg will return exit code 69. Crossing this threshold does not terminate
processing. Range is a floating-point number between 0 to 1. Default is 2/3.
@item -xerror (@emph{global}) @item -xerror (@emph{global})
Stop and exit on error Stop and exit on error
@ -1886,23 +1737,24 @@ this buffer, in packets, for the matching output stream.
The default value of this option should be high enough for most uses, so only The default value of this option should be high enough for most uses, so only
touch this option if you are sure that you need it. touch this option if you are sure that you need it.
@item -muxing_queue_data_threshold @var{bytes} (@emph{output,per-stream})
This is a minimum threshold until which the muxing queue size is not taken into
account. Defaults to 50 megabytes per stream, and is based on the overall size
of packets passed to the muxer.
@item -auto_conversion_filters (@emph{global})
Enable automatically inserting format conversion filters in all filter
graphs, including those defined by @option{-vf}, @option{-af},
@option{-filter_complex} and @option{-lavfi}. If filter format negotiation
requires a conversion, the initialization of the filters will fail.
Conversions can still be performed by inserting the relevant conversion
filter (scale, aresample) in the graph.
On by default, to explicitly disable it you need to specify
@code{-noauto_conversion_filters}.
@end table @end table
As a special exception, you can use a bitmap subtitle stream as input: it
will be converted into a video with the same size as the largest video in
the file, or 720x576 if no video is present. Note that this is an
experimental and temporary solution. It will be removed once libavfilter has
proper support for subtitles.
For example, to hardcode subtitles on top of a DVB-T recording stored in
MPEG-TS format, delaying the subtitles by 1 second:
@example
ffmpeg -i input.ts -filter_complex \
'[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay' \
-sn -map '#0x2dc' output.mkv
@end example
(0x2d0, 0x2dc and 0x2ef are the MPEG-TS PIDs of respectively the video,
audio and subtitles streams; 0:0, 0:3 and 0:7 would have worked too)
@section Preset files @section Preset files
A preset file contains a sequence of @var{option}=@var{value} pairs, A preset file contains a sequence of @var{option}=@var{value} pairs,
one for each line, specifying a sequence of options which would be one for each line, specifying a sequence of options which would be
@ -2179,7 +2031,6 @@ ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
@ifset config-avfilter @ifset config-avfilter
@include filters.texi @include filters.texi
@end ifset @end ifset
@include general_contents.texi
@end ifset @end ifset
@chapter See Also @chapter See Also

View file

@ -295,7 +295,6 @@ Toggle full screen.
@ifset config-avfilter @ifset config-avfilter
@include filters.texi @include filters.texi
@end ifset @end ifset
@include general_contents.texi
@end ifset @end ifset
@chapter See Also @chapter See Also

View file

@ -642,7 +642,6 @@ DV, GXF and AVI timecodes are available in format metadata
@ifset config-avfilter @ifset config-avfilter
@include filters.texi @include filters.texi
@end ifset @end ifset
@include general_contents.texi
@end ifset @end ifset
@chapter See Also @chapter See Also

View file

@ -61,6 +61,8 @@
<xsd:attribute name="dts_time" type="xsd:float" /> <xsd:attribute name="dts_time" type="xsd:float" />
<xsd:attribute name="duration" type="xsd:long" /> <xsd:attribute name="duration" type="xsd:long" />
<xsd:attribute name="duration_time" type="xsd:float" /> <xsd:attribute name="duration_time" type="xsd:float" />
<xsd:attribute name="convergence_duration" type="xsd:long" />
<xsd:attribute name="convergence_duration_time" type="xsd:float" />
<xsd:attribute name="size" type="xsd:long" use="required" /> <xsd:attribute name="size" type="xsd:long" use="required" />
<xsd:attribute name="pos" type="xsd:long" /> <xsd:attribute name="pos" type="xsd:long" />
<xsd:attribute name="flags" type="xsd:string" use="required" /> <xsd:attribute name="flags" type="xsd:string" use="required" />
@ -213,6 +215,7 @@
<xsd:attribute name="codec_long_name" type="xsd:string" /> <xsd:attribute name="codec_long_name" type="xsd:string" />
<xsd:attribute name="profile" type="xsd:string" /> <xsd:attribute name="profile" type="xsd:string" />
<xsd:attribute name="codec_type" type="xsd:string" /> <xsd:attribute name="codec_type" type="xsd:string" />
<xsd:attribute name="codec_time_base" type="xsd:string" use="required"/>
<xsd:attribute name="codec_tag" type="xsd:string" use="required"/> <xsd:attribute name="codec_tag" type="xsd:string" use="required"/>
<xsd:attribute name="codec_tag_string" type="xsd:string" use="required"/> <xsd:attribute name="codec_tag_string" type="xsd:string" use="required"/>
<xsd:attribute name="extradata" type="xsd:string" /> <xsd:attribute name="extradata" type="xsd:string" />
@ -235,6 +238,7 @@
<xsd:attribute name="color_primaries" type="xsd:string"/> <xsd:attribute name="color_primaries" type="xsd:string"/>
<xsd:attribute name="chroma_location" type="xsd:string"/> <xsd:attribute name="chroma_location" type="xsd:string"/>
<xsd:attribute name="field_order" type="xsd:string"/> <xsd:attribute name="field_order" type="xsd:string"/>
<xsd:attribute name="timecode" type="xsd:string"/>
<xsd:attribute name="refs" type="xsd:int"/> <xsd:attribute name="refs" type="xsd:int"/>
<!-- audio attributes --> <!-- audio attributes -->
@ -354,6 +358,7 @@
<xsd:attribute name="hwaccel" type="xsd:int" use="required"/> <xsd:attribute name="hwaccel" type="xsd:int" use="required"/>
<xsd:attribute name="planar" type="xsd:int" use="required"/> <xsd:attribute name="planar" type="xsd:int" use="required"/>
<xsd:attribute name="rgb" type="xsd:int" use="required"/> <xsd:attribute name="rgb" type="xsd:int" use="required"/>
<xsd:attribute name="pseudopal" type="xsd:int" use="required"/>
<xsd:attribute name="alpha" type="xsd:int" use="required"/> <xsd:attribute name="alpha" type="xsd:int" use="required"/>
</xsd:complexType> </xsd:complexType>

View file

@ -107,24 +107,17 @@ Print detailed information about the muxer named @var{muxer_name}. Use the
@option{-formats} option to get a list of all muxers and demuxers. @option{-formats} option to get a list of all muxers and demuxers.
@item filter=@var{filter_name} @item filter=@var{filter_name}
Print detailed information about the filter named @var{filter_name}. Use the Print detailed information about the filter name @var{filter_name}. Use the
@option{-filters} option to get a list of all filters. @option{-filters} option to get a list of all filters.
@item bsf=@var{bitstream_filter_name} @item bsf=@var{bitstream_filter_name}
Print detailed information about the bitstream filter named @var{bitstream_filter_name}. Print detailed information about the bitstream filter name @var{bitstream_filter_name}.
Use the @option{-bsfs} option to get a list of all bitstream filters. Use the @option{-bsfs} option to get a list of all bitstream filters.
@item protocol=@var{protocol_name}
Print detailed information about the protocol named @var{protocol_name}.
Use the @option{-protocols} option to get a list of all protocols.
@end table @end table
@item -version @item -version
Show version. Show version.
@item -buildconf
Show the build configuration, one option per line.
@item -formats @item -formats
Show available formats (including devices). Show available formats (including devices).
@ -352,12 +345,6 @@ Possible flags for this option are:
@item k8 @item k8
@end table @end table
@end table @end table
@item -max_alloc @var{bytes}
Set the maximum size limit for allocating a block on the heap by ffmpeg's
family of malloc functions. Exercise @strong{extreme caution} when using
this option. Don't use if you do not understand the full consequence of doing so.
Default is INT_MAX.
@end table @end table
@section AVOptions @section AVOptions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -296,31 +296,16 @@ supports it.
Set the pixel format of the captured video. Set the pixel format of the captured video.
Available values are: Available values are:
@table @samp @table @samp
@item auto
This is the default which means 8-bit YUV 422 or 8-bit ARGB if format
autodetection is used, 8-bit YUV 422 otherwise.
@item uyvy422 @item uyvy422
8-bit YUV 422.
@item yuv422p10 @item yuv422p10
10-bit YUV 422.
@item argb @item argb
8-bit RGB.
@item bgra @item bgra
8-bit RGB.
@item rgb10 @item rgb10
10-bit RGB.
@end table @end table
@item teletext_lines @item teletext_lines
@ -350,13 +335,8 @@ Defaults to @samp{unset}.
@item timecode_format @item timecode_format
Timecode type to include in the frame and video stream metadata. Must be Timecode type to include in the frame and video stream metadata. Must be
@samp{none}, @samp{rp188vitc}, @samp{rp188vitc2}, @samp{rp188ltc}, @samp{none}, @samp{rp188vitc}, @samp{rp188vitc2}, @samp{rp188ltc},
@samp{rp188hfr}, @samp{rp188any}, @samp{vitc}, @samp{vitc2}, or @samp{serial}. @samp{rp188any}, @samp{vitc}, @samp{vitc2}, or @samp{serial}. Defaults to
Defaults to @samp{none} (not included). @samp{none} (not included).
In order to properly support 50/60 fps timecodes, the ordering of the queried
timecode types for @samp{rp188any} is HFR, VITC1, VITC2 and LTC for >30 fps
content. Note that this is slightly different to the ordering used by the
DeckLink API, which is HFR, VITC1, LTC, VITC2.
@item video_input @item video_input
Sets the video input source. Must be @samp{unset}, @samp{sdi}, @samp{hdmi}, Sets the video input source. Must be @samp{unset}, @samp{sdi}, @samp{hdmi},
@ -418,12 +398,6 @@ are dropped till a frame with timecode is received.
Option @var{timecode_format} must be specified. Option @var{timecode_format} must be specified.
Defaults to @option{false}. Defaults to @option{false}.
@item enable_klv(@emph{bool})
If set to @option{true}, extracts KLV data from VANC and outputs KLV packets.
KLV VANC packets are joined based on MID and PSC fields and aggregated into
one KLV packet.
Defaults to @option{false}.
@end table @end table
@subsection Examples @subsection Examples
@ -909,15 +883,11 @@ If you don't understand what all of that means, you probably don't want this. L
DRM device to capture on. Defaults to @option{/dev/dri/card0}. DRM device to capture on. Defaults to @option{/dev/dri/card0}.
@item format @item format
Pixel format of the framebuffer. This can be autodetected if you are running Linux 5.7 Pixel format of the framebuffer. Defaults to @option{bgr0}.
or later, but needs to be provided for earlier versions. Defaults to @option{bgr0},
which is the most common format used by the Linux console and Xorg X server.
@item format_modifier @item format_modifier
Format modifier to signal on output frames. This is necessary to import correctly into Format modifier to signal on output frames. This is necessary to import correctly into
some APIs. It can be autodetected if you are running Linux 5.7 or later, but will need some APIs, but can't be autodetected. See the libdrm documentation for possible values.
to be provided explicitly when needed in earlier versions. See the libdrm documentation
for possible values.
@item crtc_id @item crtc_id
KMS CRTC ID to define the capture source. The first active plane on the given CRTC KMS CRTC ID to define the capture source. The first active plane on the given CRTC
@ -1508,14 +1478,6 @@ ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
@subsection Options @subsection Options
@table @option @table @option
@item select_region
Specify whether to select the grabbing area graphically using the pointer.
A value of @code{1} prompts the user to select the grabbing area graphically
by clicking and dragging. A single click with no dragging will select the
whole screen. A region with zero width or height will also select the whole
screen. This option overwrites the @var{video_size}, @var{grab_x}, and
@var{grab_y} options. Default value is @code{0}.
@item draw_mouse @item draw_mouse
Specify whether to draw the mouse pointer. A value of @code{0} specifies Specify whether to draw the mouse pointer. A value of @code{0} specifies
not to draw the pointer. Default value is @code{1}. not to draw the pointer. Default value is @code{1}.
@ -1564,21 +1526,8 @@ With @var{follow_mouse}:
ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg
@end example @end example
@item window_id
Grab this window, instead of the whole screen. Default value is 0, which maps to
the whole screen (root window).
The id of a window can be found using the @command{xwininfo} program, possibly with options -tree and
-root.
If the window is later enlarged, the new area is not recorded. Video ends when
the window is closed, unmapped (i.e., iconified) or shrunk beyond the video
size (which defaults to the initial window size).
This option disables options @option{follow_mouse} and @option{select_region}.
@item video_size @item video_size
Set the video frame size. Default is the full desktop or window. Set the video frame size. Default is the full desktop.
@item grab_x @item grab_x
@item grab_y @item grab_y

View file

@ -20,7 +20,8 @@ Slice threading -
Frame threading - Frame threading -
* Restrictions with slice threading also apply. * Restrictions with slice threading also apply.
* Custom get_buffer2() and get_format() callbacks must be thread-safe. * For best performance, the client should set thread_safe_callbacks if it
provides a thread-safe get_buffer() callback.
* There is one frame of delay added for every thread beyond the first one. * There is one frame of delay added for every thread beyond the first one.
Clients must be able to handle this; the pkt_dts and pkt_pts fields in Clients must be able to handle this; the pkt_dts and pkt_pts fields in
AVFrame will work as usual. AVFrame will work as usual.

View file

@ -89,12 +89,6 @@ specific scenarios, e.g. when merging multiple audio streams into one for
compatibility with software that only supports a single audio stream in AVI compatibility with software that only supports a single audio stream in AVI
(see @ref{amerge,,the "amerge" section in the ffmpeg-filters manual,ffmpeg-filters}). (see @ref{amerge,,the "amerge" section in the ffmpeg-filters manual,ffmpeg-filters}).
@item flipped_raw_rgb
If set to true, store positive height for raw RGB bitmaps, which indicates
bitmap is stored bottom-up. Note that this option does not flip the bitmap
which has to be done manually beforehand, e.g. by using the vflip filter.
Default is @var{false} and indicates bitmap is stored top down.
@end table @end table
@anchor{chromaprint} @anchor{chromaprint}
@ -242,8 +236,6 @@ This is a deprecated option to set the segment length in microseconds, use @var{
@item seg_duration @var{duration} @item seg_duration @var{duration}
Set the segment length in seconds (fractional value can be set). The value is Set the segment length in seconds (fractional value can be set). The value is
treated as average segment duration when @var{use_template} is enabled and treated as average segment duration when @var{use_template} is enabled and
@var{use_timeline} is disabled and as minimum segment duration for all the other
use cases.
@item frag_duration @var{duration} @item frag_duration @var{duration}
Set the length in seconds of fragments within segments (fractional value can be set). Set the length in seconds of fragments within segments (fractional value can be set).
@item frag_type @var{type} @item frag_type @var{type}
@ -275,10 +267,8 @@ Override User-Agent field in HTTP header. Applicable only for HTTP output.
@item http_persistent @var{http_persistent} @item http_persistent @var{http_persistent}
Use persistent HTTP connections. Applicable only for HTTP output. Use persistent HTTP connections. Applicable only for HTTP output.
@item hls_playlist @var{hls_playlist} @item hls_playlist @var{hls_playlist}
Generate HLS playlist files as well. The master playlist is generated with the filename @var{hls_master_name}. Generate HLS playlist files as well. The master playlist is generated with the filename master.m3u8.
One media playlist file is generated for each stream with filenames media_0.m3u8, media_1.m3u8, etc. One media playlist file is generated for each stream with filenames media_0.m3u8, media_1.m3u8, etc.
@item hls_master_name @var{file_name}
HLS master playlist name. Default is "master.m3u8".
@item streaming @var{streaming} @item streaming @var{streaming}
Enable (1) or disable (0) chunk streaming mode of output. In chunk streaming Enable (1) or disable (0) chunk streaming mode of output. In chunk streaming
mode, each frame will be a moof fragment which forms a chunk. mode, each frame will be a moof fragment which forms a chunk.
@ -374,10 +364,6 @@ adjusting playback latency and buffer occupancy during normal playback by client
Set the maximum playback rate indicated as appropriate for the purposes of automatically Set the maximum playback rate indicated as appropriate for the purposes of automatically
adjusting playback latency and buffer occupancy during normal playback by clients. adjusting playback latency and buffer occupancy during normal playback by clients.
@item update_period @var{update_period}
Set the mpd update period ,for dynamic content.
The unit is second.
@end table @end table
@anchor{framecrc} @anchor{framecrc}
@ -611,21 +597,14 @@ segmentation.
This muxer supports the following options: This muxer supports the following options:
@table @option @table @option
@item hls_init_time @var{duration} @item hls_init_time @var{seconds}
Set the initial target segment length. Default value is @var{0}. Set the initial target segment length in seconds. Default value is @var{0}.
@var{duration} must be a time duration specification,
see @ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}.
Segment will be cut on the next key frame after this time has passed on the first m3u8 list. Segment will be cut on the next key frame after this time has passed on the first m3u8 list.
After the initial playlist is filled @command{ffmpeg} will cut segments After the initial playlist is filled @command{ffmpeg} will cut segments
at duration equal to @code{hls_time} at duration equal to @code{hls_time}
@item hls_time @var{duration} @item hls_time @var{seconds}
Set the target segment length. Default value is 2. Set the target segment length in seconds. Default value is 2.
@var{duration} must be a time duration specification,
see @ref{time duration syntax,,the Time duration section in the ffmpeg-utils(1) manual,ffmpeg-utils}.
Segment will be cut on the next key frame after this time has passed. Segment will be cut on the next key frame after this time has passed.
@item hls_list_size @var{size} @item hls_list_size @var{size}
@ -840,7 +819,7 @@ When enabled every segment generated is encrypted and the encryption key
is saved as @var{playlist name}.key. is saved as @var{playlist name}.key.
@item -hls_enc_key @var{key} @item -hls_enc_key @var{key}
16-octet key to encrypt the segments, by default it Hex-coded 16byte key to encrypt the segments, by default it
is randomly generated. is randomly generated.
@item -hls_enc_key_url @var{keyurl} @item -hls_enc_key_url @var{keyurl}
@ -848,7 +827,7 @@ If set, @var{keyurl} is prepended instead of @var{baseurl} to the key filename
in the playlist. in the playlist.
@item -hls_enc_iv @var{iv} @item -hls_enc_iv @var{iv}
16-octet initialization vector for every segment instead Hex-coded 16byte initialization vector for every segment instead
of the autogenerated ones. of the autogenerated ones.
@item hls_segment_type @var{flags} @item hls_segment_type @var{flags}
@ -868,13 +847,6 @@ fmp4 files may be used in HLS version 7 and above.
@item hls_fmp4_init_filename @var{filename} @item hls_fmp4_init_filename @var{filename}
Set filename to the fragment files header file, default filename is @file{init.mp4}. Set filename to the fragment files header file, default filename is @file{init.mp4}.
Use @code{-strftime 1} on @var{filename} to expand the segment filename with localtime.
@example
ffmpeg -i in.nut -hls_segment_type fmp4 -strftime 1 -hls_fmp4_init_filename "%s_init.mp4" out.m3u8
@end example
This will produce init like this
@file{1602678741_init.mp4}
@item hls_fmp4_init_resend @item hls_fmp4_init_resend
Resend init file after m3u8 file refresh every time, default is @var{0}. Resend init file after m3u8 file refresh every time, default is @var{0}.
@ -1435,13 +1407,6 @@ disposition default exists, no subtitle track will be marked as default.
In this mode the FlagDefault is set if and only if the AV_DISPOSITION_DEFAULT In this mode the FlagDefault is set if and only if the AV_DISPOSITION_DEFAULT
flag is set in the disposition of the corresponding stream. flag is set in the disposition of the corresponding stream.
@end table @end table
@item flipped_raw_rgb
If set to true, store positive height for raw RGB bitmaps, which indicates
bitmap is stored bottom-up. Note that this option does not flip the bitmap
which has to be done manually beforehand, e.g. by using the vflip filter.
Default is @var{false} and indicates bitmap is stored top down.
@end table @end table
@anchor{md5} @anchor{md5}
@ -2310,11 +2275,6 @@ certain (usually permanent) errors the recovery is not attempted even when
Specify whether to wait for the keyframe after recovering from Specify whether to wait for the keyframe after recovering from
queue overflow or failure. This option is set to 0 (false) by default. queue overflow or failure. This option is set to 0 (false) by default.
@item timeshift @var{duration}
Buffer the specified amount of packets and delay writing the output. Note that
@var{queue_size} must be big enough to store the packets for timeshift. At the
end of the input the fifo buffer is flushed at realtime speed.
@end table @end table
@subsection Examples @subsection Examples

View file

@ -38,52 +38,6 @@ ffmpeg -i INPUT -f alsa hw:1,7
@end example @end example
@end itemize @end itemize
@section AudioToolbox
AudioToolbox output device.
Allows native output to CoreAudio devices on OSX.
The output filename can be empty (or @code{-}) to refer to the default system output device or a number that refers to the device index as shown using: @code{-list_devices true}.
Alternatively, the audio input device can be chosen by index using the
@option{
-audio_device_index <INDEX>
}
, overriding any device name or index given in the input filename.
All available devices can be enumerated by using @option{-list_devices true}, listing
all device names, UIDs and corresponding indices.
@subsection Options
AudioToolbox supports the following options:
@table @option
@item -audio_device_index <INDEX>
Specify the audio device by its index. Overrides anything given in the output filename.
@end table
@subsection Examples
@itemize
@item
Print the list of supported devices and output a sine wave to the default device:
@example
$ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -list_devices true -
@end example
@item
Output a sine wave to the device with the index 2, overriding any output filename:
@example
$ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -audio_device_index 2 -
@end example
@end itemize
@section caca @section caca
CACA output device. CACA output device.

View file

@ -63,17 +63,16 @@ After starting the broker, an FFmpeg client may stream data to the broker using
the command: the command:
@example @example
ffmpeg -re -i input -f mpegts amqp://[[user]:[password]@@]hostname[:port][/vhost] ffmpeg -re -i input -f mpegts amqp://[[user]:[password]@@]hostname[:port]
@end example @end example
Where hostname and port (default is 5672) is the address of the broker. The Where hostname and port (default is 5672) is the address of the broker. The
client may also set a user/password for authentication. The default for both client may also set a user/password for authentication. The default for both
fields is "guest". Name of virtual host on broker can be set with vhost. The fields is "guest".
default value is "/".
Muliple subscribers may stream from the broker using the command: Muliple subscribers may stream from the broker using the command:
@example @example
ffplay amqp://[[user]:[password]@@]hostname[:port][/vhost] ffplay amqp://[[user]:[password]@@]hostname[:port]
@end example @end example
In RabbitMQ all data published to the broker flows through a specific exchange, In RabbitMQ all data published to the broker flows through a specific exchange,
@ -110,21 +109,6 @@ the received message may be truncated causing decoding errors.
The timeout in seconds during the initial connection to the broker. The The timeout in seconds during the initial connection to the broker. The
default value is rw_timeout, or 5 seconds if rw_timeout is not set. default value is rw_timeout, or 5 seconds if rw_timeout is not set.
@item delivery_mode @var{mode}
Sets the delivery mode of each message sent to broker.
The following values are accepted:
@table @samp
@item persistent
Delivery mode set to "persistent" (2). This is the default value.
Messages may be written to the broker's disk depending on its setup.
@item non-persistent
Delivery mode set to "non-persistent" (1).
Messages will stay in broker's memory unless the broker is under memory
pressure.
@end table
@end table @end table
@section async @section async
@ -175,16 +159,6 @@ Caching wrapper for input stream.
Cache the input stream to temporary file. It brings seeking capability to live streams. Cache the input stream to temporary file. It brings seeking capability to live streams.
The accepted options are:
@table @option
@item read_ahead_limit
Amount in bytes that may be read ahead when seeking isn't supported. Range is -1 to INT_MAX.
-1 for unlimited. Default is 65536.
@end table
URL Syntax is
@example @example
cache:@var{URL} cache:@var{URL}
@end example @end example
@ -341,12 +315,6 @@ operation. ff* tools may produce incomplete content due to server limitations.
Gopher protocol. Gopher protocol.
@section gophers
Gophers protocol.
The Gopher protocol with TLS encapsulation.
@section hls @section hls
Read Apple HTTP Live Streaming compliant segmented stream as Read Apple HTTP Live Streaming compliant segmented stream as
@ -409,6 +377,11 @@ string describing the libavformat build. ("Lavf/<version>")
@item user-agent @item user-agent
This is a deprecated option, you can use user_agent instead it. This is a deprecated option, you can use user_agent instead it.
@item timeout
Set timeout in microseconds of socket I/O operations used by the underlying low level
operation. By default it is set to -1, which means that the timeout is
not specified.
@item reconnect_at_eof @item reconnect_at_eof
If set then eof is treated like an error and causes reconnection, this is useful If set then eof is treated like an error and causes reconnection, this is useful
for live / endless streams. for live / endless streams.
@ -416,13 +389,6 @@ for live / endless streams.
@item reconnect_streamed @item reconnect_streamed
If set then even streamed/non seekable streams will be reconnected on errors. If set then even streamed/non seekable streams will be reconnected on errors.
@item reconnect_on_network_error
Reconnect automatically in case of TCP/TLS errors during connect.
@item reconnect_on_http_error
A comma separated list of HTTP status codes to reconnect on. The list can
include specific status codes (e.g. '503') or the strings '4xx' / '5xx'.
@item reconnect_delay_max @item reconnect_delay_max
Sets the maximum delay in seconds after which to give up reconnecting Sets the maximum delay in seconds after which to give up reconnecting
@ -500,28 +466,6 @@ Send an Expect: 100-continue header for POST. If set to 1 it will send, if set
to 0 it won't, if set to -1 it will try to send if it is applicable. Default to 0 it won't, if set to -1 it will try to send if it is applicable. Default
value is -1. value is -1.
@item auth_type
Set HTTP authentication type. No option for Digest, since this method requires
getting nonce parameters from the server first and can't be used straight away like
Basic.
@table @option
@item none
Choose the HTTP authentication type automatically. This is the default.
@item basic
Choose the HTTP basic authentication.
Basic authentication sends a Base64-encoded string that contains a user name and password
for the client. Base64 is not a form of encryption and should be considered the same as
sending the user name and password in clear text (Base64 is a reversible encoding).
If a resource needs to be protected, strongly consider using an authentication scheme
other than basic authentication. HTTPS/TLS should be used with basic authentication.
Without these additional security enhancements, basic authentication should not be used
to protect sensitive or valuable information.
@end table
@end table @end table
@subsection HTTP Cookies @subsection HTTP Cookies
@ -576,9 +520,6 @@ audio/mpeg.
This enables support for Icecast versions < 2.4.0, that do not support the This enables support for Icecast versions < 2.4.0, that do not support the
HTTP PUT method but the SOURCE method. HTTP PUT method but the SOURCE method.
@item tls
Establish a TLS (HTTPS) connection to Icecast.
@end table @end table
@example @example
@ -696,42 +637,6 @@ Example usage:
-f rtp_mpegts -fec prompeg=l=8:d=4 rtp://@var{hostname}:@var{port} -f rtp_mpegts -fec prompeg=l=8:d=4 rtp://@var{hostname}:@var{port}
@end example @end example
@section rist
Reliable Internet Streaming Transport protocol
The accepted options are:
@table @option
@item rist_profile
Supported values:
@table @samp
@item simple
@item main
This one is default.
@item advanced
@end table
@item buffer_size
Set internal RIST buffer size in milliseconds for retransmission of data.
Default value is 0 which means the librist default (1 sec). Maximum value is 30
seconds.
@item pkt_size
Set maximum packet size for sending data. 1316 by default.
@item log_level
Set loglevel for RIST logging messages. You only need to set this if you
explicitly want to enable debug level messages or packet loss simulation,
otherwise the regular loglevel is respected.
@item secret
Set override of encryption secret, by default is unset.
@item encryption
Set encryption type, by default is disabled.
Acceptable values are 128 and 256.
@end table
@section rtmp @section rtmp
Real-Time Messaging Protocol. Real-Time Messaging Protocol.
@ -1033,9 +938,6 @@ Set the local RTCP port to @var{n}.
@item pkt_size=@var{n} @item pkt_size=@var{n}
Set max packet size (in bytes) to @var{n}. Set max packet size (in bytes) to @var{n}.
@item buffer_size=@var{size}
Set the maximum UDP socket buffer size in bytes.
@item connect=0|1 @item connect=0|1
Do a @code{connect()} on the UDP socket (if set to 1) or not (if set Do a @code{connect()} on the UDP socket (if set to 1) or not (if set
to 0). to 0).
@ -1053,9 +955,6 @@ set to 1) or to a default remote address (if set to 0).
@item localport=@var{n} @item localport=@var{n}
Set the local RTP port to @var{n}. Set the local RTP port to @var{n}.
@item timeout=@var{n}
Set timeout (in microseconds) of socket I/O operations to @var{n}.
This is a deprecated option. Instead, @option{localrtpport} should be This is a deprecated option. Instead, @option{localrtpport} should be
used. used.
@ -1697,9 +1596,8 @@ tcp://@var{hostname}:@var{port}[?@var{options}]
The list of supported options follows. The list of supported options follows.
@table @option @table @option
@item listen=@var{2|1|0} @item listen=@var{1|0}
Listen for an incoming connection. 0 disables listen, 1 enables listen in Listen for an incoming connection. Default value is 0.
single client mode, 2 enables listen in multi-client mode. Default value is 0.
@item timeout=@var{microseconds} @item timeout=@var{microseconds}
Set raise error timeout, expressed in microseconds. Set raise error timeout, expressed in microseconds.
@ -1775,10 +1673,6 @@ A file containing the private key for the certificate.
If enabled, listen for connections on the provided port, and assume If enabled, listen for connections on the provided port, and assume
the server role in the handshake instead of the client role. the server role in the handshake instead of the client role.
@item http_proxy
The HTTP proxy to tunnel through, e.g. @code{http://example.com:1234}.
The proxy must support the CONNECT method.
@end table @end table
Example command lines: Example command lines:

View file

@ -172,9 +172,6 @@ INF: while(<$inf>) {
} elsif ($ended =~ /^(?:itemize|enumerate|(?:multi|[fv])?table)$/) { } elsif ($ended =~ /^(?:itemize|enumerate|(?:multi|[fv])?table)$/) {
$_ = "\n=back\n"; $_ = "\n=back\n";
$ic = pop @icstack; $ic = pop @icstack;
} elsif ($ended =~ /^float$/) {
$_ = "\n=back\n";
$ic = pop @icstack;
} else { } else {
die "unknown command \@end $ended at line $.\n"; die "unknown command \@end $ended at line $.\n";
} }
@ -300,12 +297,6 @@ INF: while(<$inf>) {
$_ = ""; # need a paragraph break $_ = ""; # need a paragraph break
}; };
/^\@(float)\s+\w+/ and do {
push @endwstack, $endw;
$endw = $1;
$_ = "\n=over 4\n";
};
/^\@item\s+(.*\S)\s*$/ and $endw eq "multitable" and do { /^\@item\s+(.*\S)\s*$/ and $endw eq "multitable" and do {
my $columns = $1; my $columns = $1;
$columns =~ s/\@tab/ : /; $columns =~ s/\@tab/ : /;

View file

@ -110,13 +110,11 @@ maximum of 2 digits. The @var{m} at the end expresses decimal value for
@emph{or} @emph{or}
@example @example
[-]@var{S}+[.@var{m}...][s|ms|us] [-]@var{S}+[.@var{m}...]
@end example @end example
@var{S} expresses the number of seconds, with the optional decimal part @var{S} expresses the number of seconds, with the optional decimal part
@var{m}. The optional literal suffixes @samp{s}, @samp{ms} or @samp{us} @var{m}.
indicate to interpret the value as seconds, milliseconds or microseconds,
respectively.
In both expressions, the optional @samp{-} indicates negative duration. In both expressions, the optional @samp{-} indicates negative duration.

View file

@ -44,7 +44,7 @@ LDFLAGS := $(ALLFFLIBS:%=$(LD_PATH)lib%) $(LDFLAGS)
define COMPILE define COMPILE
$(call $(1)DEP,$(1)) $(call $(1)DEP,$(1))
$($(1)) $($(1)FLAGS) $($(2)) $($(1)_DEPFLAGS) $($(1)_C) $($(1)_O) $(patsubst $(SRC_PATH)/%,$(SRC_LINK)/%,$<) $($(1)) $($(1)FLAGS) $($(1)_DEPFLAGS) $($(1)_C) $($(1)_O) $(patsubst $(SRC_PATH)/%,$(SRC_LINK)/%,$<)
endef endef
COMPILE_C = $(call COMPILE,CC) COMPILE_C = $(call COMPILE,CC)
@ -54,14 +54,6 @@ COMPILE_M = $(call COMPILE,OBJCC)
COMPILE_X86ASM = $(call COMPILE,X86ASM) COMPILE_X86ASM = $(call COMPILE,X86ASM)
COMPILE_HOSTC = $(call COMPILE,HOSTCC) COMPILE_HOSTC = $(call COMPILE,HOSTCC)
COMPILE_NVCC = $(call COMPILE,NVCC) COMPILE_NVCC = $(call COMPILE,NVCC)
COMPILE_MMI = $(call COMPILE,CC,MMIFLAGS)
COMPILE_MSA = $(call COMPILE,CC,MSAFLAGS)
%_mmi.o: %_mmi.c
$(COMPILE_MMI)
%_msa.o: %_msa.c
$(COMPILE_MSA)
%.o: %.c %.o: %.c
$(COMPILE_C) $(COMPILE_C)
@ -107,7 +99,7 @@ COMPILE_MSA = $(call COMPILE,CC,MSAFLAGS)
%.c %.h %.pc %.ver %.version: TAG = GEN %.c %.h %.pc %.ver %.version: TAG = GEN
# Dummy rule to stop make trying to rebuild removed or renamed headers # Dummy rule to stop make trying to rebuild removed or renamed headers
%.h %_template.c: %.h:
@: @:
# Disable suffix rules. Most of the builtin rules are suffix rules, # Disable suffix rules. Most of the builtin rules are suffix rules,

View file

@ -202,22 +202,23 @@ void show_help_options(const OptionDef *options, const char *msg, int req_flags,
void show_help_children(const AVClass *class, int flags) void show_help_children(const AVClass *class, int flags)
{ {
void *iter = NULL; const AVClass *child = NULL;
const AVClass *child;
if (class->option) { if (class->option) {
av_opt_show2(&class, NULL, flags, 0); av_opt_show2(&class, NULL, flags, 0);
printf("\n"); printf("\n");
} }
while (child = av_opt_child_class_iterate(class, &iter)) while (child = av_opt_child_class_next(class, child))
show_help_children(child, flags); show_help_children(child, flags);
} }
static const OptionDef *find_option(const OptionDef *po, const char *name) static const OptionDef *find_option(const OptionDef *po, const char *name)
{ {
const char *p = strchr(name, ':');
int len = p ? p - name : strlen(name);
while (po->name) { while (po->name) {
const char *end; if (!strncmp(name, po->name, len) && strlen(po->name) == len)
if (av_strstart(name, po->name, &end) && (!*end || *end == ':'))
break; break;
po++; po++;
} }
@ -1163,13 +1164,13 @@ static void print_buildconf(int flags, int level)
// Change all the ' --' strings to '~--' so that // Change all the ' --' strings to '~--' so that
// they can be identified as tokens. // they can be identified as tokens.
while ((conflist = strstr(str, " --")) != NULL) { while ((conflist = strstr(str, " --")) != NULL) {
conflist[0] = '~'; strncpy(conflist, "~--", 3);
} }
// Compensate for the weirdness this would cause // Compensate for the weirdness this would cause
// when passing 'pkg-config --static'. // when passing 'pkg-config --static'.
while ((remove_tilde = strstr(str, "pkg-config~")) != NULL) { while ((remove_tilde = strstr(str, "pkg-config~")) != NULL) {
remove_tilde[sizeof("pkg-config~") - 2] = ' '; strncpy(remove_tilde, "pkg-config ", 11);
} }
splitconf = strtok(str, "~"); splitconf = strtok(str, "~");
@ -1415,7 +1416,7 @@ static void print_codec(const AVCodec *c)
printf("variable "); printf("variable ");
if (c->capabilities & (AV_CODEC_CAP_FRAME_THREADS | if (c->capabilities & (AV_CODEC_CAP_FRAME_THREADS |
AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_SLICE_THREADS |
AV_CODEC_CAP_OTHER_THREADS)) AV_CODEC_CAP_AUTO_THREADS))
printf("threads "); printf("threads ");
if (c->capabilities & AV_CODEC_CAP_AVOID_PROBING) if (c->capabilities & AV_CODEC_CAP_AVOID_PROBING)
printf("avoidprobe "); printf("avoidprobe ");
@ -1432,12 +1433,12 @@ static void print_codec(const AVCodec *c)
printf(" Threading capabilities: "); printf(" Threading capabilities: ");
switch (c->capabilities & (AV_CODEC_CAP_FRAME_THREADS | switch (c->capabilities & (AV_CODEC_CAP_FRAME_THREADS |
AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_SLICE_THREADS |
AV_CODEC_CAP_OTHER_THREADS)) { AV_CODEC_CAP_AUTO_THREADS)) {
case AV_CODEC_CAP_FRAME_THREADS | case AV_CODEC_CAP_FRAME_THREADS |
AV_CODEC_CAP_SLICE_THREADS: printf("frame and slice"); break; AV_CODEC_CAP_SLICE_THREADS: printf("frame and slice"); break;
case AV_CODEC_CAP_FRAME_THREADS: printf("frame"); break; case AV_CODEC_CAP_FRAME_THREADS: printf("frame"); break;
case AV_CODEC_CAP_SLICE_THREADS: printf("slice"); break; case AV_CODEC_CAP_SLICE_THREADS: printf("slice"); break;
case AV_CODEC_CAP_OTHER_THREADS: printf("other"); break; case AV_CODEC_CAP_AUTO_THREADS : printf("auto"); break;
default: printf("none"); break; default: printf("none"); break;
} }
printf("\n"); printf("\n");
@ -2101,7 +2102,7 @@ int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec)
} }
AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id, AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id,
AVFormatContext *s, AVStream *st, const AVCodec *codec) AVFormatContext *s, AVStream *st, AVCodec *codec)
{ {
AVDictionary *ret = NULL; AVDictionary *ret = NULL;
AVDictionaryEntry *t = NULL; AVDictionaryEntry *t = NULL;
@ -2130,7 +2131,6 @@ AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id,
} }
while (t = av_dict_get(opts, "", t, AV_DICT_IGNORE_SUFFIX)) { while (t = av_dict_get(opts, "", t, AV_DICT_IGNORE_SUFFIX)) {
const AVClass *priv_class;
char *p = strchr(t->key, ':'); char *p = strchr(t->key, ':');
/* check stream specification in opt name */ /* check stream specification in opt name */
@ -2143,8 +2143,8 @@ AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id,
if (av_opt_find(&cc, t->key, NULL, flags, AV_OPT_SEARCH_FAKE_OBJ) || if (av_opt_find(&cc, t->key, NULL, flags, AV_OPT_SEARCH_FAKE_OBJ) ||
!codec || !codec ||
((priv_class = codec->priv_class) && (codec->priv_class &&
av_opt_find(&priv_class, t->key, NULL, flags, av_opt_find(&codec->priv_class, t->key, NULL, flags,
AV_OPT_SEARCH_FAKE_OBJ))) AV_OPT_SEARCH_FAKE_OBJ)))
av_dict_set(&ret, t->key, t->value, 0); av_dict_set(&ret, t->key, t->value, 0);
else if (t->key[0] == prefix && else if (t->key[0] == prefix &&
@ -2307,7 +2307,7 @@ int show_sources(void *optctx, const char *opt, const char *arg)
int ret = 0; int ret = 0;
int error_level = av_log_get_level(); int error_level = av_log_get_level();
av_log_set_level(AV_LOG_WARNING); av_log_set_level(AV_LOG_ERROR);
if ((ret = show_sinks_sources_parse_arg(arg, &dev, &opts)) < 0) if ((ret = show_sinks_sources_parse_arg(arg, &dev, &opts)) < 0)
goto fail; goto fail;
@ -2345,7 +2345,7 @@ int show_sinks(void *optctx, const char *opt, const char *arg)
int ret = 0; int ret = 0;
int error_level = av_log_get_level(); int error_level = av_log_get_level();
av_log_set_level(AV_LOG_WARNING); av_log_set_level(AV_LOG_ERROR);
if ((ret = show_sinks_sources_parse_arg(arg, &dev, &opts)) < 0) if ((ret = show_sinks_sources_parse_arg(arg, &dev, &opts)) < 0)
goto fail; goto fail;

View file

@ -414,7 +414,7 @@ int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec);
* @return a pointer to the created dictionary * @return a pointer to the created dictionary
*/ */
AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id, AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id,
AVFormatContext *s, AVStream *st, const AVCodec *codec); AVFormatContext *s, AVStream *st, AVCodec *codec);
/** /**
* Setup AVCodecContext options for avformat_find_stream_info(). * Setup AVCodecContext options for avformat_find_stream_info().

File diff suppressed because it is too large Load diff

View file

@ -108,8 +108,6 @@ typedef struct OptionsContext {
int nb_audio_sample_rate; int nb_audio_sample_rate;
SpecifierOpt *frame_rates; SpecifierOpt *frame_rates;
int nb_frame_rates; int nb_frame_rates;
SpecifierOpt *max_frame_rates;
int nb_max_frame_rates;
SpecifierOpt *frame_sizes; SpecifierOpt *frame_sizes;
int nb_frame_sizes; int nb_frame_sizes;
SpecifierOpt *frame_pix_fmts; SpecifierOpt *frame_pix_fmts;
@ -217,8 +215,6 @@ typedef struct OptionsContext {
int nb_passlogfiles; int nb_passlogfiles;
SpecifierOpt *max_muxing_queue_size; SpecifierOpt *max_muxing_queue_size;
int nb_max_muxing_queue_size; int nb_max_muxing_queue_size;
SpecifierOpt *muxing_queue_data_threshold;
int nb_muxing_queue_data_threshold;
SpecifierOpt *guess_layout_max; SpecifierOpt *guess_layout_max;
int nb_guess_layout_max; int nb_guess_layout_max;
SpecifierOpt *apad; SpecifierOpt *apad;
@ -233,8 +229,6 @@ typedef struct OptionsContext {
int nb_time_bases; int nb_time_bases;
SpecifierOpt *enc_time_bases; SpecifierOpt *enc_time_bases;
int nb_enc_time_bases; int nb_enc_time_bases;
SpecifierOpt *autoscale;
int nb_autoscale;
} OptionsContext; } OptionsContext;
typedef struct InputFilter { typedef struct InputFilter {
@ -307,10 +301,9 @@ typedef struct InputStream {
#define DECODING_FOR_FILTER 2 #define DECODING_FOR_FILTER 2
AVCodecContext *dec_ctx; AVCodecContext *dec_ctx;
const AVCodec *dec; AVCodec *dec;
AVFrame *decoded_frame; AVFrame *decoded_frame;
AVFrame *filter_frame; /* a ref of decoded_frame, to be sent to filters */ AVFrame *filter_frame; /* a ref of decoded_frame, to be sent to filters */
AVPacket *pkt;
int64_t start; /* time when read started */ int64_t start; /* time when read started */
/* predicted dts of the next packet read for this stream or (when there are /* predicted dts of the next packet read for this stream or (when there are
@ -419,8 +412,6 @@ typedef struct InputFile {
int rate_emu; int rate_emu;
int accurate_seek; int accurate_seek;
AVPacket *pkt;
#if HAVE_THREADS #if HAVE_THREADS
AVThreadMessageQueue *in_thread_queue; AVThreadMessageQueue *in_thread_queue;
pthread_t thread; /* thread reading from this file */ pthread_t thread; /* thread reading from this file */
@ -473,11 +464,10 @@ typedef struct OutputStream {
AVCodecContext *enc_ctx; AVCodecContext *enc_ctx;
AVCodecParameters *ref_par; /* associated input codec parameters with encoders options applied */ AVCodecParameters *ref_par; /* associated input codec parameters with encoders options applied */
const AVCodec *enc; AVCodec *enc;
int64_t max_frames; int64_t max_frames;
AVFrame *filtered_frame; AVFrame *filtered_frame;
AVFrame *last_frame; AVFrame *last_frame;
AVPacket *pkt;
int last_dropped; int last_dropped;
int last_nb0_frames[3]; int last_nb0_frames[3];
@ -485,12 +475,10 @@ typedef struct OutputStream {
/* video only */ /* video only */
AVRational frame_rate; AVRational frame_rate;
AVRational max_frame_rate;
int is_cfr; int is_cfr;
int force_fps; int force_fps;
int top_field_first; int top_field_first;
int rotate_overridden; int rotate_overridden;
int autoscale;
double rotate_override_value; double rotate_override_value;
AVRational frame_aspect_ratio; AVRational frame_aspect_ratio;
@ -556,15 +544,6 @@ typedef struct OutputStream {
/* the packets are buffered here until the muxer is ready to be initialized */ /* the packets are buffered here until the muxer is ready to be initialized */
AVFifoBuffer *muxing_queue; AVFifoBuffer *muxing_queue;
/*
* The size of the AVPackets' buffers in queue.
* Updated when a packet is either pushed or pulled from the queue.
*/
size_t muxing_queue_data_size;
/* Threshold after which max_muxing_queue_size will be in effect */
size_t muxing_queue_data_threshold;
/* packet picture type */ /* packet picture type */
int pict_type; int pict_type;
@ -621,7 +600,6 @@ extern int debug_ts;
extern int exit_on_error; extern int exit_on_error;
extern int abort_on_flags; extern int abort_on_flags;
extern int print_stats; extern int print_stats;
extern int64_t stats_period;
extern int qp_hist; extern int qp_hist;
extern int stdin_interaction; extern int stdin_interaction;
extern int frame_bits_per_raw_sample; extern int frame_bits_per_raw_sample;
@ -632,7 +610,6 @@ extern char *videotoolbox_pixfmt;
extern int filter_nbthreads; extern int filter_nbthreads;
extern int filter_complex_nbthreads; extern int filter_complex_nbthreads;
extern int vstats_version; extern int vstats_version;
extern int auto_conversion_filters;
extern const AVIOInterruptCB int_cb; extern const AVIOInterruptCB int_cb;
@ -647,15 +624,23 @@ extern HWDevice *filter_hw_device;
void term_init(void); void term_init(void);
void term_exit(void); void term_exit(void);
void reset_options(OptionsContext *o, int is_input);
void show_usage(void); void show_usage(void);
void opt_output_file(void *optctx, const char *filename);
void remove_avoptions(AVDictionary **a, AVDictionary *b); void remove_avoptions(AVDictionary **a, AVDictionary *b);
void assert_avoptions(AVDictionary *m); void assert_avoptions(AVDictionary *m);
int guess_input_channel_layout(InputStream *ist); int guess_input_channel_layout(InputStream *ist);
enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *avctx, AVCodec *codec, enum AVPixelFormat target);
void choose_sample_fmt(AVStream *st, AVCodec *codec);
int configure_filtergraph(FilterGraph *fg); int configure_filtergraph(FilterGraph *fg);
int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOut *out);
void check_filter_outputs(void); void check_filter_outputs(void);
int ist_in_filtergraph(FilterGraph *fg, InputStream *ist);
int filtergraph_is_simple(FilterGraph *fg); int filtergraph_is_simple(FilterGraph *fg);
int init_simple_filtergraph(InputStream *ist, OutputStream *ost); int init_simple_filtergraph(InputStream *ist, OutputStream *ost);
int init_complex_filtergraph(FilterGraph *fg); int init_complex_filtergraph(FilterGraph *fg);

View file

@ -60,8 +60,7 @@ static const enum AVPixelFormat *get_compliance_unofficial_pix_fmts(enum AVCodec
} }
} }
static enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *enc_ctx, enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *enc_ctx, AVCodec *codec, enum AVPixelFormat target)
const AVCodec *codec, enum AVPixelFormat target)
{ {
if (codec && codec->pix_fmts) { if (codec && codec->pix_fmts) {
const enum AVPixelFormat *p = codec->pix_fmts; const enum AVPixelFormat *p = codec->pix_fmts;
@ -74,7 +73,7 @@ static enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *enc_ctx
p = get_compliance_unofficial_pix_fmts(enc_ctx->codec_id, p); p = get_compliance_unofficial_pix_fmts(enc_ctx->codec_id, p);
} }
for (; *p != AV_PIX_FMT_NONE; p++) { for (; *p != AV_PIX_FMT_NONE; p++) {
best = av_find_best_pix_fmt_of_2(best, *p, target, has_alpha, NULL); best= avcodec_find_best_pix_fmt_of_2(best, *p, target, has_alpha, NULL);
if (*p == target) if (*p == target)
break; break;
} }
@ -91,6 +90,29 @@ static enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *enc_ctx
return target; return target;
} }
void choose_sample_fmt(AVStream *st, AVCodec *codec)
{
if (codec && codec->sample_fmts) {
const enum AVSampleFormat *p = codec->sample_fmts;
for (; *p != -1; p++) {
if (*p == st->codecpar->format)
break;
}
if (*p == -1) {
const AVCodecDescriptor *desc = avcodec_descriptor_get(codec->id);
if(desc && (desc->props & AV_CODEC_PROP_LOSSLESS) && av_get_sample_fmt_name(st->codecpar->format) > av_get_sample_fmt_name(codec->sample_fmts[0]))
av_log(NULL, AV_LOG_ERROR, "Conversion will not be lossless.\n");
if(av_get_sample_fmt_name(st->codecpar->format))
av_log(NULL, AV_LOG_WARNING,
"Incompatible sample format '%s' for codec '%s', auto-selecting format '%s'\n",
av_get_sample_fmt_name(st->codecpar->format),
codec->name,
av_get_sample_fmt_name(codec->sample_fmts[0]));
st->codecpar->format = codec->sample_fmts[0];
}
}
}
static char *choose_pix_fmts(OutputFilter *ofilter) static char *choose_pix_fmts(OutputFilter *ofilter)
{ {
OutputStream *ost = ofilter->ost; OutputStream *ost = ofilter->ost;
@ -448,7 +470,7 @@ static int configure_output_video_filter(FilterGraph *fg, OutputFilter *ofilter,
if (ret < 0) if (ret < 0)
return ret; return ret;
if ((ofilter->width || ofilter->height) && ofilter->ost->autoscale) { if (ofilter->width || ofilter->height) {
char args[255]; char args[255];
AVFilterContext *filter; AVFilterContext *filter;
AVDictionaryEntry *e = NULL; AVDictionaryEntry *e = NULL;
@ -618,6 +640,13 @@ static int configure_output_audio_filter(FilterGraph *fg, OutputFilter *ofilter,
pad_idx = 0; pad_idx = 0;
} }
if (audio_volume != 256 && 0) {
char args[256];
snprintf(args, sizeof(args), "%f", audio_volume / 256.);
AUTO_INSERT_FILTER("-vol", "volume", args);
}
if (ost->apad && of->shortest) { if (ost->apad && of->shortest) {
char args[256]; char args[256];
int i; int i;
@ -645,8 +674,7 @@ static int configure_output_audio_filter(FilterGraph *fg, OutputFilter *ofilter,
return 0; return 0;
} }
static int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOut *out)
AVFilterInOut *out)
{ {
if (!ofilter->ost) { if (!ofilter->ost) {
av_log(NULL, AV_LOG_FATAL, "Filter %s has an unconnected output\n", ofilter->name); av_log(NULL, AV_LOG_FATAL, "Filter %s has an unconnected output\n", ofilter->name);
@ -1076,8 +1104,6 @@ int configure_filtergraph(FilterGraph *fg)
configure_output_filter(fg, fg->outputs[i], cur); configure_output_filter(fg, fg->outputs[i], cur);
avfilter_inout_free(&outputs); avfilter_inout_free(&outputs);
if (!auto_conversion_filters)
avfilter_graph_set_auto_convert(fg->graph, AVFILTER_AUTO_CONVERT_NONE);
if ((ret = avfilter_graph_config(fg->graph, NULL)) < 0) if ((ret = avfilter_graph_config(fg->graph, NULL)) < 0)
goto fail; goto fail;
@ -1177,6 +1203,15 @@ int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *frame)
return 0; return 0;
} }
int ist_in_filtergraph(FilterGraph *fg, InputStream *ist)
{
int i;
for (i = 0; i < fg->nb_inputs; i++)
if (fg->inputs[i]->ist == ist)
return 1;
return 0;
}
int filtergraph_is_simple(FilterGraph *fg) int filtergraph_is_simple(FilterGraph *fg)
{ {
return !fg->graph_desc; return !fg->graph_desc;

View file

@ -51,50 +51,47 @@
#define SPECIFIER_OPT_FMT_f "%f" #define SPECIFIER_OPT_FMT_f "%f"
#define SPECIFIER_OPT_FMT_dbl "%lf" #define SPECIFIER_OPT_FMT_dbl "%lf"
static const char *const opt_name_codec_names[] = {"c", "codec", "acodec", "vcodec", "scodec", "dcodec", NULL}; static const char *opt_name_codec_names[] = {"c", "codec", "acodec", "vcodec", "scodec", "dcodec", NULL};
static const char *const opt_name_audio_channels[] = {"ac", NULL}; static const char *opt_name_audio_channels[] = {"ac", NULL};
static const char *const opt_name_audio_sample_rate[] = {"ar", NULL}; static const char *opt_name_audio_sample_rate[] = {"ar", NULL};
static const char *const opt_name_frame_rates[] = {"r", NULL}; static const char *opt_name_frame_rates[] = {"r", NULL};
static const char *const opt_name_max_frame_rates[] = {"fpsmax", NULL}; static const char *opt_name_frame_sizes[] = {"s", NULL};
static const char *const opt_name_frame_sizes[] = {"s", NULL}; static const char *opt_name_frame_pix_fmts[] = {"pix_fmt", NULL};
static const char *const opt_name_frame_pix_fmts[] = {"pix_fmt", NULL}; static const char *opt_name_ts_scale[] = {"itsscale", NULL};
static const char *const opt_name_ts_scale[] = {"itsscale", NULL}; static const char *opt_name_hwaccels[] = {"hwaccel", NULL};
static const char *const opt_name_hwaccels[] = {"hwaccel", NULL}; static const char *opt_name_hwaccel_devices[] = {"hwaccel_device", NULL};
static const char *const opt_name_hwaccel_devices[] = {"hwaccel_device", NULL}; static const char *opt_name_hwaccel_output_formats[] = {"hwaccel_output_format", NULL};
static const char *const opt_name_hwaccel_output_formats[] = {"hwaccel_output_format", NULL}; static const char *opt_name_autorotate[] = {"autorotate", NULL};
static const char *const opt_name_autorotate[] = {"autorotate", NULL}; static const char *opt_name_max_frames[] = {"frames", "aframes", "vframes", "dframes", NULL};
static const char *const opt_name_autoscale[] = {"autoscale", NULL}; static const char *opt_name_bitstream_filters[] = {"bsf", "absf", "vbsf", NULL};
static const char *const opt_name_max_frames[] = {"frames", "aframes", "vframes", "dframes", NULL}; static const char *opt_name_codec_tags[] = {"tag", "atag", "vtag", "stag", NULL};
static const char *const opt_name_bitstream_filters[] = {"bsf", "absf", "vbsf", NULL}; static const char *opt_name_sample_fmts[] = {"sample_fmt", NULL};
static const char *const opt_name_codec_tags[] = {"tag", "atag", "vtag", "stag", NULL}; static const char *opt_name_qscale[] = {"q", "qscale", NULL};
static const char *const opt_name_sample_fmts[] = {"sample_fmt", NULL}; static const char *opt_name_forced_key_frames[] = {"forced_key_frames", NULL};
static const char *const opt_name_qscale[] = {"q", "qscale", NULL}; static const char *opt_name_force_fps[] = {"force_fps", NULL};
static const char *const opt_name_forced_key_frames[] = {"forced_key_frames", NULL}; static const char *opt_name_frame_aspect_ratios[] = {"aspect", NULL};
static const char *const opt_name_force_fps[] = {"force_fps", NULL}; static const char *opt_name_rc_overrides[] = {"rc_override", NULL};
static const char *const opt_name_frame_aspect_ratios[] = {"aspect", NULL}; static const char *opt_name_intra_matrices[] = {"intra_matrix", NULL};
static const char *const opt_name_rc_overrides[] = {"rc_override", NULL}; static const char *opt_name_inter_matrices[] = {"inter_matrix", NULL};
static const char *const opt_name_intra_matrices[] = {"intra_matrix", NULL}; static const char *opt_name_chroma_intra_matrices[] = {"chroma_intra_matrix", NULL};
static const char *const opt_name_inter_matrices[] = {"inter_matrix", NULL}; static const char *opt_name_top_field_first[] = {"top", NULL};
static const char *const opt_name_chroma_intra_matrices[] = {"chroma_intra_matrix", NULL}; static const char *opt_name_presets[] = {"pre", "apre", "vpre", "spre", NULL};
static const char *const opt_name_top_field_first[] = {"top", NULL}; static const char *opt_name_copy_initial_nonkeyframes[] = {"copyinkfr", NULL};
static const char *const opt_name_presets[] = {"pre", "apre", "vpre", "spre", NULL}; static const char *opt_name_copy_prior_start[] = {"copypriorss", NULL};
static const char *const opt_name_copy_initial_nonkeyframes[] = {"copyinkfr", NULL}; static const char *opt_name_filters[] = {"filter", "af", "vf", NULL};
static const char *const opt_name_copy_prior_start[] = {"copypriorss", NULL}; static const char *opt_name_filter_scripts[] = {"filter_script", NULL};
static const char *const opt_name_filters[] = {"filter", "af", "vf", NULL}; static const char *opt_name_reinit_filters[] = {"reinit_filter", NULL};
static const char *const opt_name_filter_scripts[] = {"filter_script", NULL}; static const char *opt_name_fix_sub_duration[] = {"fix_sub_duration", NULL};
static const char *const opt_name_reinit_filters[] = {"reinit_filter", NULL}; static const char *opt_name_canvas_sizes[] = {"canvas_size", NULL};
static const char *const opt_name_fix_sub_duration[] = {"fix_sub_duration", NULL}; static const char *opt_name_pass[] = {"pass", NULL};
static const char *const opt_name_canvas_sizes[] = {"canvas_size", NULL}; static const char *opt_name_passlogfiles[] = {"passlogfile", NULL};
static const char *const opt_name_pass[] = {"pass", NULL}; static const char *opt_name_max_muxing_queue_size[] = {"max_muxing_queue_size", NULL};
static const char *const opt_name_passlogfiles[] = {"passlogfile", NULL}; static const char *opt_name_guess_layout_max[] = {"guess_layout_max", NULL};
static const char *const opt_name_max_muxing_queue_size[] = {"max_muxing_queue_size", NULL}; static const char *opt_name_apad[] = {"apad", NULL};
static const char *const opt_name_muxing_queue_data_threshold[] = {"muxing_queue_data_threshold", NULL}; static const char *opt_name_discard[] = {"discard", NULL};
static const char *const opt_name_guess_layout_max[] = {"guess_layout_max", NULL}; static const char *opt_name_disposition[] = {"disposition", NULL};
static const char *const opt_name_apad[] = {"apad", NULL}; static const char *opt_name_time_bases[] = {"time_base", NULL};
static const char *const opt_name_discard[] = {"discard", NULL}; static const char *opt_name_enc_time_bases[] = {"enc_time_base", NULL};
static const char *const opt_name_disposition[] = {"disposition", NULL};
static const char *const opt_name_time_bases[] = {"time_base", NULL};
static const char *const opt_name_enc_time_bases[] = {"enc_time_base", NULL};
#define WARN_MULTIPLE_OPT_USAGE(name, type, so, st)\ #define WARN_MULTIPLE_OPT_USAGE(name, type, so, st)\
{\ {\
@ -174,8 +171,6 @@ float max_error_rate = 2.0/3;
int filter_nbthreads = 0; int filter_nbthreads = 0;
int filter_complex_nbthreads = 0; int filter_complex_nbthreads = 0;
int vstats_version = 2; int vstats_version = 2;
int auto_conversion_filters = 1;
int64_t stats_period = 500000;
static int intra_only = 0; static int intra_only = 0;
@ -232,7 +227,6 @@ static void init_options(OptionsContext *o)
o->limit_filesize = UINT64_MAX; o->limit_filesize = UINT64_MAX;
o->chapters_input_file = INT_MAX; o->chapters_input_file = INT_MAX;
o->accurate_seek = 1; o->accurate_seek = 1;
o->thread_queue_size = -1;
} }
static int show_hwaccels(void *optctx, const char *opt, const char *arg) static int show_hwaccels(void *optctx, const char *opt, const char *arg)
@ -284,21 +278,6 @@ static int opt_abort_on(void *optctx, const char *opt, const char *arg)
return av_opt_eval_flags(&pclass, &opts[0], arg, &abort_on_flags); return av_opt_eval_flags(&pclass, &opts[0], arg, &abort_on_flags);
} }
static int opt_stats_period(void *optctx, const char *opt, const char *arg)
{
int64_t user_stats_period = parse_time_or_die(opt, arg, 1);
if (user_stats_period <= 0) {
av_log(NULL, AV_LOG_ERROR, "stats_period %s must be positive.\n", arg);
return AVERROR(EINVAL);
}
stats_period = user_stats_period;
av_log(NULL, AV_LOG_INFO, "ffmpeg stats and -progress period set to %s.\n", arg);
return 0;
}
static int opt_sameq(void *optctx, const char *opt, const char *arg) static int opt_sameq(void *optctx, const char *opt, const char *arg)
{ {
av_log(NULL, AV_LOG_ERROR, "Option '%s' was removed. " av_log(NULL, AV_LOG_ERROR, "Option '%s' was removed. "
@ -766,13 +745,13 @@ static AVCodec *find_codec_or_die(const char *name, enum AVMediaType type, int e
return codec; return codec;
} }
static const AVCodec *choose_decoder(OptionsContext *o, AVFormatContext *s, AVStream *st) static AVCodec *choose_decoder(OptionsContext *o, AVFormatContext *s, AVStream *st)
{ {
char *codec_name = NULL; char *codec_name = NULL;
MATCH_PER_STREAM_OPT(codec_names, str, codec_name, s, st); MATCH_PER_STREAM_OPT(codec_names, str, codec_name, s, st);
if (codec_name) { if (codec_name) {
const AVCodec *codec = find_codec_or_die(codec_name, st->codecpar->codec_type, 0); AVCodec *codec = find_codec_or_die(codec_name, st->codecpar->codec_type, 0);
st->codecpar->codec_id = codec->id; st->codecpar->codec_id = codec->id;
return codec; return codec;
} else } else
@ -868,6 +847,15 @@ static void add_input_streams(OptionsContext *o, AVFormatContext *ic)
case AVMEDIA_TYPE_VIDEO: case AVMEDIA_TYPE_VIDEO:
if(!ist->dec) if(!ist->dec)
ist->dec = avcodec_find_decoder(par->codec_id); ist->dec = avcodec_find_decoder(par->codec_id);
#if FF_API_LOWRES
if (st->codec->lowres) {
ist->dec_ctx->lowres = st->codec->lowres;
ist->dec_ctx->width = st->codec->width;
ist->dec_ctx->height = st->codec->height;
ist->dec_ctx->coded_width = st->codec->coded_width;
ist->dec_ctx->coded_height = st->codec->coded_height;
}
#endif
// avformat_find_stream_info() doesn't set this for us anymore. // avformat_find_stream_info() doesn't set this for us anymore.
ist->dec_ctx->framerate = st->avg_frame_rate; ist->dec_ctx->framerate = st->avg_frame_rate;
@ -1280,11 +1268,8 @@ static int open_input_file(OptionsContext *o, const char *filename)
f->loop = o->loop; f->loop = o->loop;
f->duration = 0; f->duration = 0;
f->time_base = (AVRational){ 1, 1 }; f->time_base = (AVRational){ 1, 1 };
f->pkt = av_packet_alloc();
if (!f->pkt)
exit_program(1);
#if HAVE_THREADS #if HAVE_THREADS
f->thread_queue_size = o->thread_queue_size; f->thread_queue_size = o->thread_queue_size > 0 ? o->thread_queue_size : 8;
#endif #endif
/* check if all codec options have been used */ /* check if all codec options have been used */
@ -1477,8 +1462,6 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
ost->encoder_opts = filter_codec_opts(o->g->codec_opts, ost->enc->id, oc, st, ost->enc); ost->encoder_opts = filter_codec_opts(o->g->codec_opts, ost->enc->id, oc, st, ost->enc);
MATCH_PER_STREAM_OPT(presets, str, preset, oc, st); MATCH_PER_STREAM_OPT(presets, str, preset, oc, st);
ost->autoscale = 1;
MATCH_PER_STREAM_OPT(autoscale, i, ost->autoscale, oc, st);
if (preset && (!(ret = get_preset_file_2(preset, ost->enc->name, &s)))) { if (preset && (!(ret = get_preset_file_2(preset, ost->enc->name, &s)))) {
do { do {
buf = get_line(s); buf = get_line(s);
@ -1574,12 +1557,7 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
ost->max_muxing_queue_size = 128; ost->max_muxing_queue_size = 128;
MATCH_PER_STREAM_OPT(max_muxing_queue_size, i, ost->max_muxing_queue_size, oc, st); MATCH_PER_STREAM_OPT(max_muxing_queue_size, i, ost->max_muxing_queue_size, oc, st);
ost->max_muxing_queue_size *= sizeof(ost->pkt); ost->max_muxing_queue_size *= sizeof(AVPacket);
ost->muxing_queue_data_size = 0;
ost->muxing_queue_data_threshold = 50*1024*1024;
MATCH_PER_STREAM_OPT(muxing_queue_data_threshold, i, ost->muxing_queue_data_threshold, oc, st);
if (oc->oformat->flags & AVFMT_GLOBALHEADER) if (oc->oformat->flags & AVFMT_GLOBALHEADER)
ost->enc_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; ost->enc_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
@ -1692,7 +1670,7 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc, in
AVStream *st; AVStream *st;
OutputStream *ost; OutputStream *ost;
AVCodecContext *video_enc; AVCodecContext *video_enc;
char *frame_rate = NULL, *max_frame_rate = NULL, *frame_aspect_ratio = NULL; char *frame_rate = NULL, *frame_aspect_ratio = NULL;
ost = new_output_stream(o, oc, AVMEDIA_TYPE_VIDEO, source_index); ost = new_output_stream(o, oc, AVMEDIA_TYPE_VIDEO, source_index);
st = ost->st; st = ost->st;
@ -1703,21 +1681,8 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc, in
av_log(NULL, AV_LOG_FATAL, "Invalid framerate value: %s\n", frame_rate); av_log(NULL, AV_LOG_FATAL, "Invalid framerate value: %s\n", frame_rate);
exit_program(1); exit_program(1);
} }
if (frame_rate && video_sync_method == VSYNC_PASSTHROUGH)
MATCH_PER_STREAM_OPT(max_frame_rates, str, max_frame_rate, oc, st); av_log(NULL, AV_LOG_ERROR, "Using -vsync 0 and -r can produce invalid output files\n");
if (max_frame_rate && av_parse_video_rate(&ost->max_frame_rate, max_frame_rate) < 0) {
av_log(NULL, AV_LOG_FATAL, "Invalid maximum framerate value: %s\n", max_frame_rate);
exit_program(1);
}
if (frame_rate && max_frame_rate) {
av_log(NULL, AV_LOG_ERROR, "Only one of -fpsmax and -r can be set for a stream.\n");
exit_program(1);
}
if ((frame_rate || max_frame_rate) &&
video_sync_method == VSYNC_PASSTHROUGH)
av_log(NULL, AV_LOG_ERROR, "Using -vsync 0 and -r/-fpsmax can produce invalid output files\n");
MATCH_PER_STREAM_OPT(frame_aspect_ratios, str, frame_aspect_ratio, oc, st); MATCH_PER_STREAM_OPT(frame_aspect_ratios, str, frame_aspect_ratio, oc, st);
if (frame_aspect_ratio) { if (frame_aspect_ratio) {
@ -2240,23 +2205,22 @@ static int open_output_file(OptionsContext *o, const char *filename)
/* video: highest resolution */ /* video: highest resolution */
if (!o->video_disable && av_guess_codec(oc->oformat, NULL, filename, NULL, AVMEDIA_TYPE_VIDEO) != AV_CODEC_ID_NONE) { if (!o->video_disable && av_guess_codec(oc->oformat, NULL, filename, NULL, AVMEDIA_TYPE_VIDEO) != AV_CODEC_ID_NONE) {
int best_score = 0, idx = -1; int area = 0, idx = -1;
int qcr = avformat_query_codec(oc->oformat, oc->oformat->video_codec, 0); int qcr = avformat_query_codec(oc->oformat, oc->oformat->video_codec, 0);
for (i = 0; i < nb_input_streams; i++) { for (i = 0; i < nb_input_streams; i++) {
int score; int new_area;
ist = input_streams[i]; ist = input_streams[i];
score = ist->st->codecpar->width * ist->st->codecpar->height new_area = ist->st->codecpar->width * ist->st->codecpar->height + 100000000*!!ist->st->codec_info_nb_frames
+ 100000000 * !!(ist->st->event_flags & AVSTREAM_EVENT_FLAG_NEW_PACKETS)
+ 5000000*!!(ist->st->disposition & AV_DISPOSITION_DEFAULT); + 5000000*!!(ist->st->disposition & AV_DISPOSITION_DEFAULT);
if (ist->user_set_discard == AVDISCARD_ALL) if (ist->user_set_discard == AVDISCARD_ALL)
continue; continue;
if((qcr!=MKTAG('A', 'P', 'I', 'C')) && (ist->st->disposition & AV_DISPOSITION_ATTACHED_PIC)) if((qcr!=MKTAG('A', 'P', 'I', 'C')) && (ist->st->disposition & AV_DISPOSITION_ATTACHED_PIC))
score = 1; new_area = 1;
if (ist->st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && if (ist->st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO &&
score > best_score) { new_area > area) {
if((qcr==MKTAG('A', 'P', 'I', 'C')) && !(ist->st->disposition & AV_DISPOSITION_ATTACHED_PIC)) if((qcr==MKTAG('A', 'P', 'I', 'C')) && !(ist->st->disposition & AV_DISPOSITION_ATTACHED_PIC))
continue; continue;
best_score = score; area = new_area;
idx = i; idx = i;
} }
} }
@ -2658,9 +2622,6 @@ loop_end:
if(o->recording_time != INT64_MAX) if(o->recording_time != INT64_MAX)
av_dict_set(&oc->metadata, "duration", NULL, 0); av_dict_set(&oc->metadata, "duration", NULL, 0);
av_dict_set(&oc->metadata, "creation_time", NULL, 0); av_dict_set(&oc->metadata, "creation_time", NULL, 0);
av_dict_set(&oc->metadata, "company_name", NULL, 0);
av_dict_set(&oc->metadata, "product_name", NULL, 0);
av_dict_set(&oc->metadata, "product_version", NULL, 0);
} }
if (!o->metadata_streams_manual) if (!o->metadata_streams_manual)
for (i = of->ost_index; i < nb_output_streams; i++) { for (i = of->ost_index; i < nb_output_streams; i++) {
@ -3580,12 +3541,8 @@ const OptionDef options[] = {
"create a complex filtergraph", "graph_description" }, "create a complex filtergraph", "graph_description" },
{ "filter_complex_script", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_complex_script }, { "filter_complex_script", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_complex_script },
"read complex filtergraph description from a file", "filename" }, "read complex filtergraph description from a file", "filename" },
{ "auto_conversion_filters", OPT_BOOL | OPT_EXPERT, { &auto_conversion_filters },
"enable automatic conversion filters globally" },
{ "stats", OPT_BOOL, { &print_stats }, { "stats", OPT_BOOL, { &print_stats },
"print progress report during encoding", }, "print progress report during encoding", },
{ "stats_period", HAS_ARG | OPT_EXPERT, { .func_arg = opt_stats_period },
"set the period at which ffmpeg updates stats and -progress output", "time" },
{ "attach", HAS_ARG | OPT_PERFILE | OPT_EXPERT | { "attach", HAS_ARG | OPT_PERFILE | OPT_EXPERT |
OPT_OUTPUT, { .func_arg = opt_attach }, OPT_OUTPUT, { .func_arg = opt_attach },
"add an attachment to the output file", "filename" }, "add an attachment to the output file", "filename" },
@ -3597,7 +3554,7 @@ const OptionDef options[] = {
{ "debug_ts", OPT_BOOL | OPT_EXPERT, { &debug_ts }, { "debug_ts", OPT_BOOL | OPT_EXPERT, { &debug_ts },
"print timestamp debugging info" }, "print timestamp debugging info" },
{ "max_error_rate", HAS_ARG | OPT_FLOAT, { &max_error_rate }, { "max_error_rate", HAS_ARG | OPT_FLOAT, { &max_error_rate },
"ratio of decoding errors (0.0: no errors, 1.0: 100% errors) above which ffmpeg returns an error instead of success.", "maximum error rate" }, "ratio of errors (0.0: no errors, 1.0: 100% errors) above which ffmpeg returns an error instead of success.", "maximum error rate" },
{ "discard", OPT_STRING | HAS_ARG | OPT_SPEC | { "discard", OPT_STRING | HAS_ARG | OPT_SPEC |
OPT_INPUT, { .off = OFFSET(discard) }, OPT_INPUT, { .off = OFFSET(discard) },
"discard", "" }, "discard", "" },
@ -3616,9 +3573,6 @@ const OptionDef options[] = {
{ "r", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_SPEC | { "r", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_SPEC |
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(frame_rates) }, OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(frame_rates) },
"set frame rate (Hz value, fraction or abbreviation)", "rate" }, "set frame rate (Hz value, fraction or abbreviation)", "rate" },
{ "fpsmax", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_SPEC |
OPT_OUTPUT, { .off = OFFSET(max_frame_rates) },
"set max frame rate (Hz value, fraction or abbreviation)", "rate" },
{ "s", OPT_VIDEO | HAS_ARG | OPT_SUBTITLE | OPT_STRING | OPT_SPEC | { "s", OPT_VIDEO | HAS_ARG | OPT_SUBTITLE | OPT_STRING | OPT_SPEC |
OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(frame_sizes) }, OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(frame_sizes) },
"set frame size (WxH or abbreviation)", "size" }, "set frame size (WxH or abbreviation)", "size" },
@ -3710,9 +3664,6 @@ const OptionDef options[] = {
{ "autorotate", HAS_ARG | OPT_BOOL | OPT_SPEC | { "autorotate", HAS_ARG | OPT_BOOL | OPT_SPEC |
OPT_EXPERT | OPT_INPUT, { .off = OFFSET(autorotate) }, OPT_EXPERT | OPT_INPUT, { .off = OFFSET(autorotate) },
"automatically insert correct rotate filters" }, "automatically insert correct rotate filters" },
{ "autoscale", HAS_ARG | OPT_BOOL | OPT_SPEC |
OPT_EXPERT | OPT_OUTPUT, { .off = OFFSET(autoscale) },
"automatically insert a scale filter at the end of the filter graph" },
/* audio options */ /* audio options */
{ "aframes", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_audio_frames }, { "aframes", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_audio_frames },
@ -3799,8 +3750,6 @@ const OptionDef options[] = {
{ "max_muxing_queue_size", HAS_ARG | OPT_INT | OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, { .off = OFFSET(max_muxing_queue_size) }, { "max_muxing_queue_size", HAS_ARG | OPT_INT | OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, { .off = OFFSET(max_muxing_queue_size) },
"maximum number of packets that can be buffered while waiting for all streams to initialize", "packets" }, "maximum number of packets that can be buffered while waiting for all streams to initialize", "packets" },
{ "muxing_queue_data_threshold", HAS_ARG | OPT_INT | OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, { .off = OFFSET(muxing_queue_data_threshold) },
"set the threshold after which max_muxing_queue_size is taken into account", "bytes" },
/* data codec support */ /* data codec support */
{ "dcodec", HAS_ARG | OPT_DATA | OPT_PERFILE | OPT_EXPERT | OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_data_codec }, { "dcodec", HAS_ARG | OPT_DATA | OPT_PERFILE | OPT_EXPERT | OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_data_codec },

View file

@ -36,7 +36,6 @@
#include "libavutil/pixdesc.h" #include "libavutil/pixdesc.h"
#include "libavutil/imgutils.h" #include "libavutil/imgutils.h"
#include "libavutil/dict.h" #include "libavutil/dict.h"
#include "libavutil/fifo.h"
#include "libavutil/parseutils.h" #include "libavutil/parseutils.h"
#include "libavutil/samplefmt.h" #include "libavutil/samplefmt.h"
#include "libavutil/avassert.h" #include "libavutil/avassert.h"
@ -112,12 +111,13 @@ const int program_birth_year = 2003;
static unsigned sws_flags = SWS_BICUBIC; static unsigned sws_flags = SWS_BICUBIC;
typedef struct MyAVPacketList { typedef struct MyAVPacketList {
AVPacket *pkt; AVPacket pkt;
struct MyAVPacketList *next;
int serial; int serial;
} MyAVPacketList; } MyAVPacketList;
typedef struct PacketQueue { typedef struct PacketQueue {
AVFifoBuffer *pkt_list; MyAVPacketList *first_pkt, *last_pkt;
int nb_packets; int nb_packets;
int size; int size;
int64_t duration; int64_t duration;
@ -187,7 +187,7 @@ enum {
}; };
typedef struct Decoder { typedef struct Decoder {
AVPacket *pkt; AVPacket pkt;
PacketQueue *queue; PacketQueue *queue;
AVCodecContext *avctx; AVCodecContext *avctx;
int pkt_serial; int pkt_serial;
@ -361,6 +361,8 @@ static int filter_nbthreads = 0;
static int is_full_screen; static int is_full_screen;
static int64_t audio_callback_time; static int64_t audio_callback_time;
static AVPacket flush_pkt;
#define FF_QUIT_EVENT (SDL_USEREVENT + 2) #define FF_QUIT_EVENT (SDL_USEREVENT + 2)
static SDL_Window *window; static SDL_Window *window;
@ -425,23 +427,28 @@ int64_t get_valid_channel_layout(int64_t channel_layout, int channels)
static int packet_queue_put_private(PacketQueue *q, AVPacket *pkt) static int packet_queue_put_private(PacketQueue *q, AVPacket *pkt)
{ {
MyAVPacketList pkt1; MyAVPacketList *pkt1;
if (q->abort_request) if (q->abort_request)
return -1; return -1;
if (av_fifo_space(q->pkt_list) < sizeof(pkt1)) { pkt1 = av_malloc(sizeof(MyAVPacketList));
if (av_fifo_grow(q->pkt_list, sizeof(pkt1)) < 0) if (!pkt1)
return -1; return -1;
} pkt1->pkt = *pkt;
pkt1->next = NULL;
if (pkt == &flush_pkt)
q->serial++;
pkt1->serial = q->serial;
pkt1.pkt = pkt; if (!q->last_pkt)
pkt1.serial = q->serial; q->first_pkt = pkt1;
else
av_fifo_generic_write(q->pkt_list, &pkt1, sizeof(pkt1), NULL); q->last_pkt->next = pkt1;
q->last_pkt = pkt1;
q->nb_packets++; q->nb_packets++;
q->size += pkt1.pkt->size + sizeof(pkt1); q->size += pkt1->pkt.size + sizeof(*pkt1);
q->duration += pkt1.pkt->duration; q->duration += pkt1->pkt.duration;
/* XXX: should duplicate packet data in DV case */ /* XXX: should duplicate packet data in DV case */
SDL_CondSignal(q->cond); SDL_CondSignal(q->cond);
return 0; return 0;
@ -449,28 +456,24 @@ static int packet_queue_put_private(PacketQueue *q, AVPacket *pkt)
static int packet_queue_put(PacketQueue *q, AVPacket *pkt) static int packet_queue_put(PacketQueue *q, AVPacket *pkt)
{ {
AVPacket *pkt1;
int ret; int ret;
pkt1 = av_packet_alloc();
if (!pkt1) {
av_packet_unref(pkt);
return -1;
}
av_packet_move_ref(pkt1, pkt);
SDL_LockMutex(q->mutex); SDL_LockMutex(q->mutex);
ret = packet_queue_put_private(q, pkt1); ret = packet_queue_put_private(q, pkt);
SDL_UnlockMutex(q->mutex); SDL_UnlockMutex(q->mutex);
if (ret < 0) if (pkt != &flush_pkt && ret < 0)
av_packet_free(&pkt1); av_packet_unref(pkt);
return ret; return ret;
} }
static int packet_queue_put_nullpacket(PacketQueue *q, AVPacket *pkt, int stream_index) static int packet_queue_put_nullpacket(PacketQueue *q, int stream_index)
{ {
AVPacket pkt1, *pkt = &pkt1;
av_init_packet(pkt);
pkt->data = NULL;
pkt->size = 0;
pkt->stream_index = stream_index; pkt->stream_index = stream_index;
return packet_queue_put(q, pkt); return packet_queue_put(q, pkt);
} }
@ -479,9 +482,6 @@ static int packet_queue_put_nullpacket(PacketQueue *q, AVPacket *pkt, int stream
static int packet_queue_init(PacketQueue *q) static int packet_queue_init(PacketQueue *q)
{ {
memset(q, 0, sizeof(PacketQueue)); memset(q, 0, sizeof(PacketQueue));
q->pkt_list = av_fifo_alloc(sizeof(MyAVPacketList));
if (!q->pkt_list)
return AVERROR(ENOMEM);
q->mutex = SDL_CreateMutex(); q->mutex = SDL_CreateMutex();
if (!q->mutex) { if (!q->mutex) {
av_log(NULL, AV_LOG_FATAL, "SDL_CreateMutex(): %s\n", SDL_GetError()); av_log(NULL, AV_LOG_FATAL, "SDL_CreateMutex(): %s\n", SDL_GetError());
@ -498,24 +498,25 @@ static int packet_queue_init(PacketQueue *q)
static void packet_queue_flush(PacketQueue *q) static void packet_queue_flush(PacketQueue *q)
{ {
MyAVPacketList pkt1; MyAVPacketList *pkt, *pkt1;
SDL_LockMutex(q->mutex); SDL_LockMutex(q->mutex);
while (av_fifo_size(q->pkt_list) >= sizeof(pkt1)) { for (pkt = q->first_pkt; pkt; pkt = pkt1) {
av_fifo_generic_read(q->pkt_list, &pkt1, sizeof(pkt1), NULL); pkt1 = pkt->next;
av_packet_free(&pkt1.pkt); av_packet_unref(&pkt->pkt);
av_freep(&pkt);
} }
q->last_pkt = NULL;
q->first_pkt = NULL;
q->nb_packets = 0; q->nb_packets = 0;
q->size = 0; q->size = 0;
q->duration = 0; q->duration = 0;
q->serial++;
SDL_UnlockMutex(q->mutex); SDL_UnlockMutex(q->mutex);
} }
static void packet_queue_destroy(PacketQueue *q) static void packet_queue_destroy(PacketQueue *q)
{ {
packet_queue_flush(q); packet_queue_flush(q);
av_fifo_freep(&q->pkt_list);
SDL_DestroyMutex(q->mutex); SDL_DestroyMutex(q->mutex);
SDL_DestroyCond(q->cond); SDL_DestroyCond(q->cond);
} }
@ -535,14 +536,14 @@ static void packet_queue_start(PacketQueue *q)
{ {
SDL_LockMutex(q->mutex); SDL_LockMutex(q->mutex);
q->abort_request = 0; q->abort_request = 0;
q->serial++; packet_queue_put_private(q, &flush_pkt);
SDL_UnlockMutex(q->mutex); SDL_UnlockMutex(q->mutex);
} }
/* return < 0 if aborted, 0 if no packet and > 0 if packet. */ /* return < 0 if aborted, 0 if no packet and > 0 if packet. */
static int packet_queue_get(PacketQueue *q, AVPacket *pkt, int block, int *serial) static int packet_queue_get(PacketQueue *q, AVPacket *pkt, int block, int *serial)
{ {
MyAVPacketList pkt1; MyAVPacketList *pkt1;
int ret; int ret;
SDL_LockMutex(q->mutex); SDL_LockMutex(q->mutex);
@ -553,15 +554,18 @@ static int packet_queue_get(PacketQueue *q, AVPacket *pkt, int block, int *seria
break; break;
} }
if (av_fifo_size(q->pkt_list) >= sizeof(pkt1)) { pkt1 = q->first_pkt;
av_fifo_generic_read(q->pkt_list, &pkt1, sizeof(pkt1), NULL); if (pkt1) {
q->first_pkt = pkt1->next;
if (!q->first_pkt)
q->last_pkt = NULL;
q->nb_packets--; q->nb_packets--;
q->size -= pkt1.pkt->size + sizeof(pkt1); q->size -= pkt1->pkt.size + sizeof(*pkt1);
q->duration -= pkt1.pkt->duration; q->duration -= pkt1->pkt.duration;
av_packet_move_ref(pkt, pkt1.pkt); *pkt = pkt1->pkt;
if (serial) if (serial)
*serial = pkt1.serial; *serial = pkt1->serial;
av_packet_free(&pkt1.pkt); av_free(pkt1);
ret = 1; ret = 1;
break; break;
} else if (!block) { } else if (!block) {
@ -575,23 +579,21 @@ static int packet_queue_get(PacketQueue *q, AVPacket *pkt, int block, int *seria
return ret; return ret;
} }
static int decoder_init(Decoder *d, AVCodecContext *avctx, PacketQueue *queue, SDL_cond *empty_queue_cond) { static void decoder_init(Decoder *d, AVCodecContext *avctx, PacketQueue *queue, SDL_cond *empty_queue_cond) {
memset(d, 0, sizeof(Decoder)); memset(d, 0, sizeof(Decoder));
d->pkt = av_packet_alloc();
if (!d->pkt)
return AVERROR(ENOMEM);
d->avctx = avctx; d->avctx = avctx;
d->queue = queue; d->queue = queue;
d->empty_queue_cond = empty_queue_cond; d->empty_queue_cond = empty_queue_cond;
d->start_pts = AV_NOPTS_VALUE; d->start_pts = AV_NOPTS_VALUE;
d->pkt_serial = -1; d->pkt_serial = -1;
return 0;
} }
static int decoder_decode_frame(Decoder *d, AVFrame *frame, AVSubtitle *sub) { static int decoder_decode_frame(Decoder *d, AVFrame *frame, AVSubtitle *sub) {
int ret = AVERROR(EAGAIN); int ret = AVERROR(EAGAIN);
for (;;) { for (;;) {
AVPacket pkt;
if (d->queue->serial == d->pkt_serial) { if (d->queue->serial == d->pkt_serial) {
do { do {
if (d->queue->abort_request) if (d->queue->abort_request)
@ -637,48 +639,49 @@ static int decoder_decode_frame(Decoder *d, AVFrame *frame, AVSubtitle *sub) {
if (d->queue->nb_packets == 0) if (d->queue->nb_packets == 0)
SDL_CondSignal(d->empty_queue_cond); SDL_CondSignal(d->empty_queue_cond);
if (d->packet_pending) { if (d->packet_pending) {
av_packet_move_ref(&pkt, &d->pkt);
d->packet_pending = 0; d->packet_pending = 0;
} else { } else {
int old_serial = d->pkt_serial; if (packet_queue_get(d->queue, &pkt, 1, &d->pkt_serial) < 0)
if (packet_queue_get(d->queue, d->pkt, 1, &d->pkt_serial) < 0)
return -1; return -1;
if (old_serial != d->pkt_serial) { }
if (d->queue->serial == d->pkt_serial)
break;
av_packet_unref(&pkt);
} while (1);
if (pkt.data == flush_pkt.data) {
avcodec_flush_buffers(d->avctx); avcodec_flush_buffers(d->avctx);
d->finished = 0; d->finished = 0;
d->next_pts = d->start_pts; d->next_pts = d->start_pts;
d->next_pts_tb = d->start_pts_tb; d->next_pts_tb = d->start_pts_tb;
} } else {
}
if (d->queue->serial == d->pkt_serial)
break;
av_packet_unref(d->pkt);
} while (1);
if (d->avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) { if (d->avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) {
int got_frame = 0; int got_frame = 0;
ret = avcodec_decode_subtitle2(d->avctx, sub, &got_frame, d->pkt); ret = avcodec_decode_subtitle2(d->avctx, sub, &got_frame, &pkt);
if (ret < 0) { if (ret < 0) {
ret = AVERROR(EAGAIN); ret = AVERROR(EAGAIN);
} else { } else {
if (got_frame && !d->pkt->data) { if (got_frame && !pkt.data) {
d->packet_pending = 1; d->packet_pending = 1;
av_packet_move_ref(&d->pkt, &pkt);
} }
ret = got_frame ? 0 : (d->pkt->data ? AVERROR(EAGAIN) : AVERROR_EOF); ret = got_frame ? 0 : (pkt.data ? AVERROR(EAGAIN) : AVERROR_EOF);
} }
av_packet_unref(d->pkt);
} else { } else {
if (avcodec_send_packet(d->avctx, d->pkt) == AVERROR(EAGAIN)) { if (avcodec_send_packet(d->avctx, &pkt) == AVERROR(EAGAIN)) {
av_log(d->avctx, AV_LOG_ERROR, "Receive_frame and send_packet both returned EAGAIN, which is an API violation.\n"); av_log(d->avctx, AV_LOG_ERROR, "Receive_frame and send_packet both returned EAGAIN, which is an API violation.\n");
d->packet_pending = 1; d->packet_pending = 1;
} else { av_packet_move_ref(&d->pkt, &pkt);
av_packet_unref(d->pkt);
} }
} }
av_packet_unref(&pkt);
}
} }
} }
static void decoder_destroy(Decoder *d) { static void decoder_destroy(Decoder *d) {
av_packet_free(&d->pkt); av_packet_unref(&d->pkt);
avcodec_free_context(&d->avctx); avcodec_free_context(&d->avctx);
} }
@ -1148,8 +1151,6 @@ static void video_audio_display(VideoState *s)
if (realloc_texture(&s->vis_texture, SDL_PIXELFORMAT_ARGB8888, s->width, s->height, SDL_BLENDMODE_NONE, 1) < 0) if (realloc_texture(&s->vis_texture, SDL_PIXELFORMAT_ARGB8888, s->width, s->height, SDL_BLENDMODE_NONE, 1) < 0)
return; return;
if (s->xpos >= s->width)
s->xpos = 0;
nb_display_channels= FFMIN(nb_display_channels, 2); nb_display_channels= FFMIN(nb_display_channels, 2);
if (rdft_bits != s->rdft_bits) { if (rdft_bits != s->rdft_bits) {
av_rdft_end(s->rdft); av_rdft_end(s->rdft);
@ -1199,6 +1200,8 @@ static void video_audio_display(VideoState *s)
} }
if (!s->paused) if (!s->paused)
s->xpos++; s->xpos++;
if (s->xpos >= s->width)
s->xpos= s->xleft;
} }
} }
@ -2005,7 +2008,7 @@ static int configure_audio_filters(VideoState *is, const char *afilters, int for
if (force_output_format) { if (force_output_format) {
channel_layouts[0] = is->audio_tgt.channel_layout; channel_layouts[0] = is->audio_tgt.channel_layout;
channels [0] = is->audio_tgt.channel_layout ? -1 : is->audio_tgt.channels; channels [0] = is->audio_tgt.channels;
sample_rates [0] = is->audio_tgt.freq; sample_rates [0] = is->audio_tgt.freq;
if ((ret = av_opt_set_int(filt_asink, "all_channel_counts", 0, AV_OPT_SEARCH_CHILDREN)) < 0) if ((ret = av_opt_set_int(filt_asink, "all_channel_counts", 0, AV_OPT_SEARCH_CHILDREN)) < 0)
goto end; goto end;
@ -2573,7 +2576,7 @@ static int stream_component_open(VideoState *is, int stream_index)
{ {
AVFormatContext *ic = is->ic; AVFormatContext *ic = is->ic;
AVCodecContext *avctx; AVCodecContext *avctx;
const AVCodec *codec; AVCodec *codec;
const char *forced_codec_name = NULL; const char *forced_codec_name = NULL;
AVDictionary *opts = NULL; AVDictionary *opts = NULL;
AVDictionaryEntry *t = NULL; AVDictionaryEntry *t = NULL;
@ -2628,6 +2631,8 @@ static int stream_component_open(VideoState *is, int stream_index)
av_dict_set(&opts, "threads", "auto", 0); av_dict_set(&opts, "threads", "auto", 0);
if (stream_lowres) if (stream_lowres)
av_dict_set_int(&opts, "lowres", stream_lowres, 0); av_dict_set_int(&opts, "lowres", stream_lowres, 0);
if (avctx->codec_type == AVMEDIA_TYPE_VIDEO || avctx->codec_type == AVMEDIA_TYPE_AUDIO)
av_dict_set(&opts, "refcounted_frames", "1", 0);
if ((ret = avcodec_open2(avctx, codec, &opts)) < 0) { if ((ret = avcodec_open2(avctx, codec, &opts)) < 0) {
goto fail; goto fail;
} }
@ -2680,8 +2685,7 @@ static int stream_component_open(VideoState *is, int stream_index)
is->audio_stream = stream_index; is->audio_stream = stream_index;
is->audio_st = ic->streams[stream_index]; is->audio_st = ic->streams[stream_index];
if ((ret = decoder_init(&is->auddec, avctx, &is->audioq, is->continue_read_thread)) < 0) decoder_init(&is->auddec, avctx, &is->audioq, is->continue_read_thread);
goto fail;
if ((is->ic->iformat->flags & (AVFMT_NOBINSEARCH | AVFMT_NOGENSEARCH | AVFMT_NO_BYTE_SEEK)) && !is->ic->iformat->read_seek) { if ((is->ic->iformat->flags & (AVFMT_NOBINSEARCH | AVFMT_NOGENSEARCH | AVFMT_NO_BYTE_SEEK)) && !is->ic->iformat->read_seek) {
is->auddec.start_pts = is->audio_st->start_time; is->auddec.start_pts = is->audio_st->start_time;
is->auddec.start_pts_tb = is->audio_st->time_base; is->auddec.start_pts_tb = is->audio_st->time_base;
@ -2694,8 +2698,7 @@ static int stream_component_open(VideoState *is, int stream_index)
is->video_stream = stream_index; is->video_stream = stream_index;
is->video_st = ic->streams[stream_index]; is->video_st = ic->streams[stream_index];
if ((ret = decoder_init(&is->viddec, avctx, &is->videoq, is->continue_read_thread)) < 0) decoder_init(&is->viddec, avctx, &is->videoq, is->continue_read_thread);
goto fail;
if ((ret = decoder_start(&is->viddec, video_thread, "video_decoder", is)) < 0) if ((ret = decoder_start(&is->viddec, video_thread, "video_decoder", is)) < 0)
goto out; goto out;
is->queue_attachments_req = 1; is->queue_attachments_req = 1;
@ -2704,8 +2707,7 @@ static int stream_component_open(VideoState *is, int stream_index)
is->subtitle_stream = stream_index; is->subtitle_stream = stream_index;
is->subtitle_st = ic->streams[stream_index]; is->subtitle_st = ic->streams[stream_index];
if ((ret = decoder_init(&is->subdec, avctx, &is->subtitleq, is->continue_read_thread)) < 0) decoder_init(&is->subdec, avctx, &is->subtitleq, is->continue_read_thread);
goto fail;
if ((ret = decoder_start(&is->subdec, subtitle_thread, "subtitle_decoder", is)) < 0) if ((ret = decoder_start(&is->subdec, subtitle_thread, "subtitle_decoder", is)) < 0)
goto out; goto out;
break; break;
@ -2758,7 +2760,7 @@ static int read_thread(void *arg)
AVFormatContext *ic = NULL; AVFormatContext *ic = NULL;
int err, i, ret; int err, i, ret;
int st_index[AVMEDIA_TYPE_NB]; int st_index[AVMEDIA_TYPE_NB];
AVPacket *pkt = NULL; AVPacket pkt1, *pkt = &pkt1;
int64_t stream_start_time; int64_t stream_start_time;
int pkt_in_play_range = 0; int pkt_in_play_range = 0;
AVDictionaryEntry *t; AVDictionaryEntry *t;
@ -2775,12 +2777,6 @@ static int read_thread(void *arg)
memset(st_index, -1, sizeof(st_index)); memset(st_index, -1, sizeof(st_index));
is->eof = 0; is->eof = 0;
pkt = av_packet_alloc();
if (!pkt) {
av_log(NULL, AV_LOG_FATAL, "Could not allocate packet.\n");
ret = AVERROR(ENOMEM);
goto fail;
}
ic = avformat_alloc_context(); ic = avformat_alloc_context();
if (!ic) { if (!ic) {
av_log(NULL, AV_LOG_FATAL, "Could not allocate context.\n"); av_log(NULL, AV_LOG_FATAL, "Could not allocate context.\n");
@ -2964,12 +2960,18 @@ static int read_thread(void *arg)
av_log(NULL, AV_LOG_ERROR, av_log(NULL, AV_LOG_ERROR,
"%s: error while seeking\n", is->ic->url); "%s: error while seeking\n", is->ic->url);
} else { } else {
if (is->audio_stream >= 0) if (is->audio_stream >= 0) {
packet_queue_flush(&is->audioq); packet_queue_flush(&is->audioq);
if (is->subtitle_stream >= 0) packet_queue_put(&is->audioq, &flush_pkt);
}
if (is->subtitle_stream >= 0) {
packet_queue_flush(&is->subtitleq); packet_queue_flush(&is->subtitleq);
if (is->video_stream >= 0) packet_queue_put(&is->subtitleq, &flush_pkt);
}
if (is->video_stream >= 0) {
packet_queue_flush(&is->videoq); packet_queue_flush(&is->videoq);
packet_queue_put(&is->videoq, &flush_pkt);
}
if (is->seek_flags & AVSEEK_FLAG_BYTE) { if (is->seek_flags & AVSEEK_FLAG_BYTE) {
set_clock(&is->extclk, NAN, 0); set_clock(&is->extclk, NAN, 0);
} else { } else {
@ -2984,10 +2986,11 @@ static int read_thread(void *arg)
} }
if (is->queue_attachments_req) { if (is->queue_attachments_req) {
if (is->video_st && is->video_st->disposition & AV_DISPOSITION_ATTACHED_PIC) { if (is->video_st && is->video_st->disposition & AV_DISPOSITION_ATTACHED_PIC) {
if ((ret = av_packet_ref(pkt, &is->video_st->attached_pic)) < 0) AVPacket copy;
if ((ret = av_packet_ref(&copy, &is->video_st->attached_pic)) < 0)
goto fail; goto fail;
packet_queue_put(&is->videoq, pkt); packet_queue_put(&is->videoq, &copy);
packet_queue_put_nullpacket(&is->videoq, pkt, is->video_stream); packet_queue_put_nullpacket(&is->videoq, is->video_stream);
} }
is->queue_attachments_req = 0; is->queue_attachments_req = 0;
} }
@ -3018,19 +3021,15 @@ static int read_thread(void *arg)
if (ret < 0) { if (ret < 0) {
if ((ret == AVERROR_EOF || avio_feof(ic->pb)) && !is->eof) { if ((ret == AVERROR_EOF || avio_feof(ic->pb)) && !is->eof) {
if (is->video_stream >= 0) if (is->video_stream >= 0)
packet_queue_put_nullpacket(&is->videoq, pkt, is->video_stream); packet_queue_put_nullpacket(&is->videoq, is->video_stream);
if (is->audio_stream >= 0) if (is->audio_stream >= 0)
packet_queue_put_nullpacket(&is->audioq, pkt, is->audio_stream); packet_queue_put_nullpacket(&is->audioq, is->audio_stream);
if (is->subtitle_stream >= 0) if (is->subtitle_stream >= 0)
packet_queue_put_nullpacket(&is->subtitleq, pkt, is->subtitle_stream); packet_queue_put_nullpacket(&is->subtitleq, is->subtitle_stream);
is->eof = 1; is->eof = 1;
} }
if (ic->pb && ic->pb->error) { if (ic->pb && ic->pb->error)
if (autoexit)
goto fail;
else
break; break;
}
SDL_LockMutex(wait_mutex); SDL_LockMutex(wait_mutex);
SDL_CondWaitTimeout(is->continue_read_thread, wait_mutex, 10); SDL_CondWaitTimeout(is->continue_read_thread, wait_mutex, 10);
SDL_UnlockMutex(wait_mutex); SDL_UnlockMutex(wait_mutex);
@ -3063,7 +3062,6 @@ static int read_thread(void *arg)
if (ic && !is->ic) if (ic && !is->ic)
avformat_close_input(&ic); avformat_close_input(&ic);
av_packet_free(&pkt);
if (ret != 0) { if (ret != 0) {
SDL_Event event; SDL_Event event;
@ -3736,6 +3734,9 @@ int main(int argc, char **argv)
SDL_EventState(SDL_SYSWMEVENT, SDL_IGNORE); SDL_EventState(SDL_SYSWMEVENT, SDL_IGNORE);
SDL_EventState(SDL_USEREVENT, SDL_IGNORE); SDL_EventState(SDL_USEREVENT, SDL_IGNORE);
av_init_packet(&flush_pkt);
flush_pkt.data = (uint8_t *)&flush_pkt;
if (!display_disable) { if (!display_disable) {
int flags = SDL_WINDOW_HIDDEN; int flags = SDL_WINDOW_HIDDEN;
if (alwaysontop) if (alwaysontop)

View file

@ -35,7 +35,6 @@
#include "libavutil/bprint.h" #include "libavutil/bprint.h"
#include "libavutil/display.h" #include "libavutil/display.h"
#include "libavutil/hash.h" #include "libavutil/hash.h"
#include "libavutil/hdr_dynamic_metadata.h"
#include "libavutil/mastering_display_metadata.h" #include "libavutil/mastering_display_metadata.h"
#include "libavutil/dovi_meta.h" #include "libavutil/dovi_meta.h"
#include "libavutil/opt.h" #include "libavutil/opt.h"
@ -1672,6 +1671,24 @@ static av_cold int xml_init(WriterContext *wctx)
return 0; return 0;
} }
static const char *xml_escape_str(AVBPrint *dst, const char *src, void *log_ctx)
{
const char *p;
for (p = src; *p; p++) {
switch (*p) {
case '&' : av_bprintf(dst, "%s", "&amp;"); break;
case '<' : av_bprintf(dst, "%s", "&lt;"); break;
case '>' : av_bprintf(dst, "%s", "&gt;"); break;
case '"' : av_bprintf(dst, "%s", "&quot;"); break;
case '\'': av_bprintf(dst, "%s", "&apos;"); break;
default: av_bprint_chars(dst, *p, 1);
}
}
return dst->str;
}
#define XML_INDENT() printf("%*c", xml->indent_level * 4, ' ') #define XML_INDENT() printf("%*c", xml->indent_level * 4, ' ')
static void xml_print_section_header(WriterContext *wctx) static void xml_print_section_header(WriterContext *wctx)
@ -1743,22 +1760,14 @@ static void xml_print_str(WriterContext *wctx, const char *key, const char *valu
if (section->flags & SECTION_FLAG_HAS_VARIABLE_FIELDS) { if (section->flags & SECTION_FLAG_HAS_VARIABLE_FIELDS) {
XML_INDENT(); XML_INDENT();
av_bprint_escape(&buf, key, NULL,
AV_ESCAPE_MODE_XML, AV_ESCAPE_FLAG_XML_DOUBLE_QUOTES);
printf("<%s key=\"%s\"", printf("<%s key=\"%s\"",
section->element_name, buf.str); section->element_name, xml_escape_str(&buf, key, wctx));
av_bprint_clear(&buf); av_bprint_clear(&buf);
printf(" value=\"%s\"/>\n", xml_escape_str(&buf, value, wctx));
av_bprint_escape(&buf, value, NULL,
AV_ESCAPE_MODE_XML, AV_ESCAPE_FLAG_XML_DOUBLE_QUOTES);
printf(" value=\"%s\"/>\n", buf.str);
} else { } else {
if (wctx->nb_item[wctx->level]) if (wctx->nb_item[wctx->level])
printf(" "); printf(" ");
printf("%s=\"%s\"", key, xml_escape_str(&buf, value, wctx));
av_bprint_escape(&buf, value, NULL,
AV_ESCAPE_MODE_XML, AV_ESCAPE_FLAG_XML_DOUBLE_QUOTES);
printf("%s=\"%s\"", key, buf.str);
} }
av_bprint_finalize(&buf, NULL); av_bprint_finalize(&buf, NULL);
@ -1851,105 +1860,6 @@ static inline int show_tags(WriterContext *w, AVDictionary *tags, int section_id
return ret; return ret;
} }
static void print_dynamic_hdr10_plus(WriterContext *w, const AVDynamicHDRPlus *metadata)
{
if (!metadata)
return;
print_int("application version", metadata->application_version);
print_int("num_windows", metadata->num_windows);
for (int n = 1; n < metadata->num_windows; n++) {
const AVHDRPlusColorTransformParams *params = &metadata->params[n];
print_q("window_upper_left_corner_x",
params->window_upper_left_corner_x,'/');
print_q("window_upper_left_corner_y",
params->window_upper_left_corner_y,'/');
print_q("window_lower_right_corner_x",
params->window_lower_right_corner_x,'/');
print_q("window_lower_right_corner_y",
params->window_lower_right_corner_y,'/');
print_q("window_upper_left_corner_x",
params->window_upper_left_corner_x,'/');
print_q("window_upper_left_corner_y",
params->window_upper_left_corner_y,'/');
print_int("center_of_ellipse_x",
params->center_of_ellipse_x ) ;
print_int("center_of_ellipse_y",
params->center_of_ellipse_y );
print_int("rotation_angle",
params->rotation_angle);
print_int("semimajor_axis_internal_ellipse",
params->semimajor_axis_internal_ellipse);
print_int("semimajor_axis_external_ellipse",
params->semimajor_axis_external_ellipse);
print_int("semiminor_axis_external_ellipse",
params->semiminor_axis_external_ellipse);
print_int("overlap_process_option",
params->overlap_process_option);
}
print_q("targeted_system_display_maximum_luminance",
metadata->targeted_system_display_maximum_luminance,'/');
if (metadata->targeted_system_display_actual_peak_luminance_flag) {
print_int("num_rows_targeted_system_display_actual_peak_luminance",
metadata->num_rows_targeted_system_display_actual_peak_luminance);
print_int("num_cols_targeted_system_display_actual_peak_luminance",
metadata->num_cols_targeted_system_display_actual_peak_luminance);
for (int i = 0; i < metadata->num_rows_targeted_system_display_actual_peak_luminance; i++) {
for (int j = 0; j < metadata->num_cols_targeted_system_display_actual_peak_luminance; j++) {
print_q("targeted_system_display_actual_peak_luminance",
metadata->targeted_system_display_actual_peak_luminance[i][j],'/');
}
}
}
for (int n = 0; n < metadata->num_windows; n++) {
const AVHDRPlusColorTransformParams *params = &metadata->params[n];
for (int i = 0; i < 3; i++) {
print_q("maxscl",params->maxscl[i],'/');
}
print_q("average_maxrgb",
params->average_maxrgb,'/');
print_int("num_distribution_maxrgb_percentiles",
params->num_distribution_maxrgb_percentiles);
for (int i = 0; i < params->num_distribution_maxrgb_percentiles; i++) {
print_int("distribution_maxrgb_percentage",
params->distribution_maxrgb[i].percentage);
print_q("distribution_maxrgb_percentile",
params->distribution_maxrgb[i].percentile,'/');
}
print_q("fraction_bright_pixels",
params->fraction_bright_pixels,'/');
}
if (metadata->mastering_display_actual_peak_luminance_flag) {
print_int("num_rows_mastering_display_actual_peak_luminance",
metadata->num_rows_mastering_display_actual_peak_luminance);
print_int("num_cols_mastering_display_actual_peak_luminance",
metadata->num_cols_mastering_display_actual_peak_luminance);
for (int i = 0; i < metadata->num_rows_mastering_display_actual_peak_luminance; i++) {
for (int j = 0; j < metadata->num_cols_mastering_display_actual_peak_luminance; j++) {
print_q("mastering_display_actual_peak_luminance",
metadata->mastering_display_actual_peak_luminance[i][j],'/');
}
}
}
for (int n = 0; n < metadata->num_windows; n++) {
const AVHDRPlusColorTransformParams *params = &metadata->params[n];
if (params->tone_mapping_flag) {
print_q("knee_point_x", params->knee_point_x,'/');
print_q("knee_point_y", params->knee_point_y,'/');
print_int("num_bezier_curve_anchors",
params->num_bezier_curve_anchors );
for (int i = 0; i < params->num_bezier_curve_anchors; i++) {
print_q("bezier_curve_anchors",
params->bezier_curve_anchors[i],'/');
}
}
if (params->color_saturation_mapping_flag) {
print_q("color_saturation_weight",
params->color_saturation_weight,'/');
}
}
}
static void print_pkt_side_data(WriterContext *w, static void print_pkt_side_data(WriterContext *w,
AVCodecParameters *par, AVCodecParameters *par,
const AVPacketSideData *side_data, const AVPacketSideData *side_data,
@ -2158,6 +2068,8 @@ static void show_packet(WriterContext *w, InputFile *ifile, AVPacket *pkt, int p
print_time("dts_time", pkt->dts, &st->time_base); print_time("dts_time", pkt->dts, &st->time_base);
print_duration_ts("duration", pkt->duration); print_duration_ts("duration", pkt->duration);
print_duration_time("duration_time", pkt->duration, &st->time_base); print_duration_time("duration_time", pkt->duration, &st->time_base);
print_duration_ts("convergence_duration", pkt->convergence_duration);
print_duration_time("convergence_duration_time", pkt->convergence_duration, &st->time_base);
print_val("size", pkt->size, unit_byte_str); print_val("size", pkt->size, unit_byte_str);
if (pkt->pos != -1) print_fmt ("pos", "%"PRId64, pkt->pos); if (pkt->pos != -1) print_fmt ("pos", "%"PRId64, pkt->pos);
else print_str_opt("pos", "N/A"); else print_str_opt("pos", "N/A");
@ -2313,7 +2225,7 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream,
writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_TIMECODE_LIST); writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_TIMECODE_LIST);
for (int j = 1; j <= m ; j++) { for (int j = 1; j <= m ; j++) {
char tcbuf[AV_TIMECODE_STR_SIZE]; char tcbuf[AV_TIMECODE_STR_SIZE];
av_timecode_make_smpte_tc_string2(tcbuf, stream->avg_frame_rate, tc[j], 0, 0); av_timecode_make_smpte_tc_string(tcbuf, tc[j], 0);
writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_TIMECODE); writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_TIMECODE);
print_str("value", tcbuf); print_str("value", tcbuf);
writer_print_section_footer(w); writer_print_section_footer(w);
@ -2338,9 +2250,6 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream,
print_q("min_luminance", metadata->min_luminance, '/'); print_q("min_luminance", metadata->min_luminance, '/');
print_q("max_luminance", metadata->max_luminance, '/'); print_q("max_luminance", metadata->max_luminance, '/');
} }
} else if (sd->type == AV_FRAME_DATA_DYNAMIC_HDR_PLUS) {
AVDynamicHDRPlus *metadata = (AVDynamicHDRPlus *)sd->data;
print_dynamic_hdr10_plus(w, metadata);
} else if (sd->type == AV_FRAME_DATA_CONTENT_LIGHT_LEVEL) { } else if (sd->type == AV_FRAME_DATA_CONTENT_LIGHT_LEVEL) {
AVContentLightMetadata *metadata = (AVContentLightMetadata *)sd->data; AVContentLightMetadata *metadata = (AVContentLightMetadata *)sd->data;
print_int("max_content", metadata->MaxCLL); print_int("max_content", metadata->MaxCLL);
@ -2453,12 +2362,14 @@ static int read_interval_packets(WriterContext *w, InputFile *ifile,
const ReadInterval *interval, int64_t *cur_ts) const ReadInterval *interval, int64_t *cur_ts)
{ {
AVFormatContext *fmt_ctx = ifile->fmt_ctx; AVFormatContext *fmt_ctx = ifile->fmt_ctx;
AVPacket *pkt = NULL; AVPacket pkt;
AVFrame *frame = NULL; AVFrame *frame = NULL;
int ret = 0, i = 0, frame_count = 0; int ret = 0, i = 0, frame_count = 0;
int64_t start = -INT64_MAX, end = interval->end; int64_t start = -INT64_MAX, end = interval->end;
int has_start = 0, has_end = interval->has_end && !interval->end_is_offset; int has_start = 0, has_end = interval->has_end && !interval->end_is_offset;
av_init_packet(&pkt);
av_log(NULL, AV_LOG_VERBOSE, "Processing read interval "); av_log(NULL, AV_LOG_VERBOSE, "Processing read interval ");
log_read_interval(interval, NULL, AV_LOG_VERBOSE); log_read_interval(interval, NULL, AV_LOG_VERBOSE);
@ -2491,23 +2402,18 @@ static int read_interval_packets(WriterContext *w, InputFile *ifile,
ret = AVERROR(ENOMEM); ret = AVERROR(ENOMEM);
goto end; goto end;
} }
pkt = av_packet_alloc(); while (!av_read_frame(fmt_ctx, &pkt)) {
if (!pkt) {
ret = AVERROR(ENOMEM);
goto end;
}
while (!av_read_frame(fmt_ctx, pkt)) {
if (fmt_ctx->nb_streams > nb_streams) { if (fmt_ctx->nb_streams > nb_streams) {
REALLOCZ_ARRAY_STREAM(nb_streams_frames, nb_streams, fmt_ctx->nb_streams); REALLOCZ_ARRAY_STREAM(nb_streams_frames, nb_streams, fmt_ctx->nb_streams);
REALLOCZ_ARRAY_STREAM(nb_streams_packets, nb_streams, fmt_ctx->nb_streams); REALLOCZ_ARRAY_STREAM(nb_streams_packets, nb_streams, fmt_ctx->nb_streams);
REALLOCZ_ARRAY_STREAM(selected_streams, nb_streams, fmt_ctx->nb_streams); REALLOCZ_ARRAY_STREAM(selected_streams, nb_streams, fmt_ctx->nb_streams);
nb_streams = fmt_ctx->nb_streams; nb_streams = fmt_ctx->nb_streams;
} }
if (selected_streams[pkt->stream_index]) { if (selected_streams[pkt.stream_index]) {
AVRational tb = ifile->streams[pkt->stream_index].st->time_base; AVRational tb = ifile->streams[pkt.stream_index].st->time_base;
if (pkt->pts != AV_NOPTS_VALUE) if (pkt.pts != AV_NOPTS_VALUE)
*cur_ts = av_rescale_q(pkt->pts, tb, AV_TIME_BASE_Q); *cur_ts = av_rescale_q(pkt.pts, tb, AV_TIME_BASE_Q);
if (!has_start && *cur_ts != AV_NOPTS_VALUE) { if (!has_start && *cur_ts != AV_NOPTS_VALUE) {
start = *cur_ts; start = *cur_ts;
@ -2529,27 +2435,26 @@ static int read_interval_packets(WriterContext *w, InputFile *ifile,
frame_count++; frame_count++;
if (do_read_packets) { if (do_read_packets) {
if (do_show_packets) if (do_show_packets)
show_packet(w, ifile, pkt, i++); show_packet(w, ifile, &pkt, i++);
nb_streams_packets[pkt->stream_index]++; nb_streams_packets[pkt.stream_index]++;
} }
if (do_read_frames) { if (do_read_frames) {
int packet_new = 1; int packet_new = 1;
while (process_frame(w, ifile, frame, pkt, &packet_new) > 0); while (process_frame(w, ifile, frame, &pkt, &packet_new) > 0);
} }
} }
av_packet_unref(pkt); av_packet_unref(&pkt);
} }
av_packet_unref(pkt); av_packet_unref(&pkt);
//Flush remaining frames that are cached in the decoder //Flush remaining frames that are cached in the decoder
for (i = 0; i < fmt_ctx->nb_streams; i++) { for (i = 0; i < fmt_ctx->nb_streams; i++) {
pkt->stream_index = i; pkt.stream_index = i;
if (do_read_frames) if (do_read_frames)
while (process_frame(w, ifile, frame, pkt, &(int){1}) > 0); while (process_frame(w, ifile, frame, &pkt, &(int){1}) > 0);
} }
end: end:
av_frame_free(&frame); av_frame_free(&frame);
av_packet_free(&pkt);
if (ret < 0) { if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Could not read packets in interval "); av_log(NULL, AV_LOG_ERROR, "Could not read packets in interval ");
log_read_interval(interval, NULL, AV_LOG_ERROR); log_read_interval(interval, NULL, AV_LOG_ERROR);
@ -2625,6 +2530,10 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id
s = av_get_media_type_string(par->codec_type); s = av_get_media_type_string(par->codec_type);
if (s) print_str ("codec_type", s); if (s) print_str ("codec_type", s);
else print_str_opt("codec_type", "unknown"); else print_str_opt("codec_type", "unknown");
#if FF_API_LAVF_AVCTX
if (dec_ctx)
print_q("codec_time_base", dec_ctx->time_base, '/');
#endif
/* print AVI/FourCC tag */ /* print AVI/FourCC tag */
print_str("codec_tag_string", av_fourcc2str(par->codec_tag)); print_str("codec_tag_string", av_fourcc2str(par->codec_tag));
@ -2634,11 +2543,13 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id
case AVMEDIA_TYPE_VIDEO: case AVMEDIA_TYPE_VIDEO:
print_int("width", par->width); print_int("width", par->width);
print_int("height", par->height); print_int("height", par->height);
#if FF_API_LAVF_AVCTX
if (dec_ctx) { if (dec_ctx) {
print_int("coded_width", dec_ctx->coded_width); print_int("coded_width", dec_ctx->coded_width);
print_int("coded_height", dec_ctx->coded_height); print_int("coded_height", dec_ctx->coded_height);
print_int("closed_captions", !!(dec_ctx->properties & FF_CODEC_PROPERTY_CLOSED_CAPTIONS)); print_int("closed_captions", !!(dec_ctx->properties & FF_CODEC_PROPERTY_CLOSED_CAPTIONS));
} }
#endif
print_int("has_b_frames", par->video_delay); print_int("has_b_frames", par->video_delay);
sar = av_guess_sample_aspect_ratio(fmt_ctx, stream, NULL); sar = av_guess_sample_aspect_ratio(fmt_ctx, stream, NULL);
if (sar.num) { if (sar.num) {
@ -2676,6 +2587,15 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id
else else
print_str_opt("field_order", "unknown"); print_str_opt("field_order", "unknown");
#if FF_API_PRIVATE_OPT
if (dec_ctx && dec_ctx->timecode_frame_start >= 0) {
char tcbuf[AV_TIMECODE_STR_SIZE];
av_timecode_make_mpeg_tc_string(tcbuf, dec_ctx->timecode_frame_start);
print_str("timecode", tcbuf);
} else {
print_str_opt("timecode", "N/A");
}
#endif
if (dec_ctx) if (dec_ctx)
print_int("refs", dec_ctx->refs); print_int("refs", dec_ctx->refs);
break; break;
@ -2733,10 +2653,10 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id
print_time("duration", stream->duration, &stream->time_base); print_time("duration", stream->duration, &stream->time_base);
if (par->bit_rate > 0) print_val ("bit_rate", par->bit_rate, unit_bit_per_second_str); if (par->bit_rate > 0) print_val ("bit_rate", par->bit_rate, unit_bit_per_second_str);
else print_str_opt("bit_rate", "N/A"); else print_str_opt("bit_rate", "N/A");
if (dec_ctx && dec_ctx->rc_max_rate > 0) #if FF_API_LAVF_AVCTX
print_val ("max_bit_rate", dec_ctx->rc_max_rate, unit_bit_per_second_str); if (stream->codec->rc_max_rate > 0) print_val ("max_bit_rate", stream->codec->rc_max_rate, unit_bit_per_second_str);
else else print_str_opt("max_bit_rate", "N/A");
print_str_opt("max_bit_rate", "N/A"); #endif
if (dec_ctx && dec_ctx->bits_per_raw_sample > 0) print_fmt("bits_per_raw_sample", "%d", dec_ctx->bits_per_raw_sample); if (dec_ctx && dec_ctx->bits_per_raw_sample > 0) print_fmt("bits_per_raw_sample", "%d", dec_ctx->bits_per_raw_sample);
else print_str_opt("bits_per_raw_sample", "N/A"); else print_str_opt("bits_per_raw_sample", "N/A");
if (stream->nb_frames) print_fmt ("nb_frames", "%"PRId64, stream->nb_frames); if (stream->nb_frames) print_fmt ("nb_frames", "%"PRId64, stream->nb_frames);
@ -2934,7 +2854,7 @@ static int open_input_file(InputFile *ifile, const char *filename,
{ {
int err, i; int err, i;
AVFormatContext *fmt_ctx = NULL; AVFormatContext *fmt_ctx = NULL;
AVDictionaryEntry *t = NULL; AVDictionaryEntry *t;
int scan_all_pmts_set = 0; int scan_all_pmts_set = 0;
fmt_ctx = avformat_alloc_context(); fmt_ctx = avformat_alloc_context();
@ -2959,8 +2879,10 @@ static int open_input_file(InputFile *ifile, const char *filename,
ifile->fmt_ctx = fmt_ctx; ifile->fmt_ctx = fmt_ctx;
if (scan_all_pmts_set) if (scan_all_pmts_set)
av_dict_set(&format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE); av_dict_set(&format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE);
while ((t = av_dict_get(format_opts, "", t, AV_DICT_IGNORE_SUFFIX))) if ((t = av_dict_get(format_opts, "", NULL, AV_DICT_IGNORE_SUFFIX))) {
av_log(NULL, AV_LOG_WARNING, "Option %s skipped - not known to demuxer.\n", t->key); av_log(NULL, AV_LOG_ERROR, "Option %s not found.\n", t->key);
return AVERROR_OPTION_NOT_FOUND;
}
if (find_stream_info) { if (find_stream_info) {
AVDictionary **opts = setup_find_stream_info_opts(fmt_ctx, codec_opts); AVDictionary **opts = setup_find_stream_info_opts(fmt_ctx, codec_opts);
@ -2990,7 +2912,7 @@ static int open_input_file(InputFile *ifile, const char *filename,
for (i = 0; i < fmt_ctx->nb_streams; i++) { for (i = 0; i < fmt_ctx->nb_streams; i++) {
InputStream *ist = &ifile->streams[i]; InputStream *ist = &ifile->streams[i];
AVStream *stream = fmt_ctx->streams[i]; AVStream *stream = fmt_ctx->streams[i];
const AVCodec *codec; AVCodec *codec;
ist->st = stream; ist->st = stream;
@ -3028,6 +2950,12 @@ static int open_input_file(InputFile *ifile, const char *filename,
} }
ist->dec_ctx->pkt_timebase = stream->time_base; ist->dec_ctx->pkt_timebase = stream->time_base;
ist->dec_ctx->framerate = stream->avg_frame_rate;
#if FF_API_LAVF_AVCTX
ist->dec_ctx->properties = stream->codec->properties;
ist->dec_ctx->coded_width = stream->codec->coded_width;
ist->dec_ctx->coded_height = stream->codec->coded_height;
#endif
if (avcodec_open2(ist->dec_ctx, codec, &opts) < 0) { if (avcodec_open2(ist->dec_ctx, codec, &opts) < 0) {
av_log(NULL, AV_LOG_WARNING, "Could not open codec for input stream %d\n", av_log(NULL, AV_LOG_WARNING, "Could not open codec for input stream %d\n",
@ -3228,6 +3156,9 @@ static void ffprobe_show_pixel_formats(WriterContext *w)
PRINT_PIX_FMT_FLAG(HWACCEL, "hwaccel"); PRINT_PIX_FMT_FLAG(HWACCEL, "hwaccel");
PRINT_PIX_FMT_FLAG(PLANAR, "planar"); PRINT_PIX_FMT_FLAG(PLANAR, "planar");
PRINT_PIX_FMT_FLAG(RGB, "rgb"); PRINT_PIX_FMT_FLAG(RGB, "rgb");
#if FF_API_PSEUDOPAL
PRINT_PIX_FMT_FLAG(PSEUDOPAL, "pseudopal");
#endif
PRINT_PIX_FMT_FLAG(ALPHA, "alpha"); PRINT_PIX_FMT_FLAG(ALPHA, "alpha");
writer_print_section_footer(w); writer_print_section_footer(w);
} }

View file

@ -30,7 +30,6 @@
#include "libavutil/frame.h" #include "libavutil/frame.h"
#include "libavutil/imgutils.h" #include "libavutil/imgutils.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
#include "libavutil/mem_internal.h"
#include "avcodec.h" #include "avcodec.h"
#include "blockdsp.h" #include "blockdsp.h"
#include "bswapdsp.h" #include "bswapdsp.h"
@ -499,8 +498,8 @@ static int decode_i_block(FourXContext *f, int16_t *block)
{ {
int code, i, j, level, val; int code, i, j, level, val;
if (get_bits_left(&f->pre_gb) < 2) { if (get_bits_left(&f->gb) < 2){
av_log(f->avctx, AV_LOG_ERROR, "%d bits left before decode_i_block()\n", get_bits_left(&f->pre_gb)); av_log(f->avctx, AV_LOG_ERROR, "%d bits left before decode_i_block()\n", get_bits_left(&f->gb));
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }

View file

@ -122,7 +122,7 @@ static int decode_frame(AVCodecContext *avctx, void *data,
} }
if (avctx->bits_per_coded_sample <= 8) { if (avctx->bits_per_coded_sample <= 8) {
buffer_size_t size; int size;
const uint8_t *pal = av_packet_get_side_data(avpkt, const uint8_t *pal = av_packet_get_side_data(avpkt,
AV_PKT_DATA_PALETTE, AV_PKT_DATA_PALETTE,
&size); &size);

View file

@ -29,7 +29,6 @@ HEADERS = ac3_parser.h \
OBJS = ac3_parser.o \ OBJS = ac3_parser.o \
adts_parser.o \ adts_parser.o \
allcodecs.o \ allcodecs.o \
avcodec.o \
avdct.o \ avdct.o \
avpacket.o \ avpacket.o \
avpicture.o \ avpicture.o \
@ -38,7 +37,6 @@ OBJS = ac3_parser.o \
bitstream_filters.o \ bitstream_filters.o \
bsf.o \ bsf.o \
codec_desc.o \ codec_desc.o \
codec_par.o \
d3d11va.o \ d3d11va.o \
decode.o \ decode.o \
dirac.o \ dirac.o \
@ -50,6 +48,7 @@ OBJS = ac3_parser.o \
mediacodec.o \ mediacodec.o \
mpeg12framerate.o \ mpeg12framerate.o \
options.o \ options.o \
mjpegenc_huffman.o \
parser.o \ parser.o \
parsers.o \ parsers.o \
profiles.o \ profiles.o \
@ -65,15 +64,14 @@ OBJS-$(CONFIG_AC3DSP) += ac3dsp.o ac3.o ac3tab.o
OBJS-$(CONFIG_ADTS_HEADER) += adts_header.o mpeg4audio.o OBJS-$(CONFIG_ADTS_HEADER) += adts_header.o mpeg4audio.o
OBJS-$(CONFIG_AMF) += amfenc.o OBJS-$(CONFIG_AMF) += amfenc.o
OBJS-$(CONFIG_AUDIO_FRAME_QUEUE) += audio_frame_queue.o OBJS-$(CONFIG_AUDIO_FRAME_QUEUE) += audio_frame_queue.o
OBJS-$(CONFIG_ATSC_A53) += atsc_a53.o
OBJS-$(CONFIG_AUDIODSP) += audiodsp.o OBJS-$(CONFIG_AUDIODSP) += audiodsp.o
OBJS-$(CONFIG_BLOCKDSP) += blockdsp.o OBJS-$(CONFIG_BLOCKDSP) += blockdsp.o
OBJS-$(CONFIG_BSWAPDSP) += bswapdsp.o OBJS-$(CONFIG_BSWAPDSP) += bswapdsp.o
OBJS-$(CONFIG_CABAC) += cabac.o OBJS-$(CONFIG_CABAC) += cabac.o
OBJS-$(CONFIG_CBS) += cbs.o cbs_bsf.o OBJS-$(CONFIG_CBS) += cbs.o
OBJS-$(CONFIG_CBS_AV1) += cbs_av1.o OBJS-$(CONFIG_CBS_AV1) += cbs_av1.o
OBJS-$(CONFIG_CBS_H264) += cbs_h2645.o cbs_sei.o h2645_parse.o OBJS-$(CONFIG_CBS_H264) += cbs_h2645.o h2645_parse.o
OBJS-$(CONFIG_CBS_H265) += cbs_h2645.o cbs_sei.o h2645_parse.o OBJS-$(CONFIG_CBS_H265) += cbs_h2645.o h2645_parse.o
OBJS-$(CONFIG_CBS_JPEG) += cbs_jpeg.o OBJS-$(CONFIG_CBS_JPEG) += cbs_jpeg.o
OBJS-$(CONFIG_CBS_MPEG2) += cbs_mpeg2.o OBJS-$(CONFIG_CBS_MPEG2) += cbs_mpeg2.o
OBJS-$(CONFIG_CBS_VP9) += cbs_vp9.o OBJS-$(CONFIG_CBS_VP9) += cbs_vp9.o
@ -84,9 +82,10 @@ OBJS-$(CONFIG_EXIF) += exif.o tiff_common.o
OBJS-$(CONFIG_FAANDCT) += faandct.o OBJS-$(CONFIG_FAANDCT) += faandct.o
OBJS-$(CONFIG_FAANIDCT) += faanidct.o OBJS-$(CONFIG_FAANIDCT) += faanidct.o
OBJS-$(CONFIG_FDCTDSP) += fdctdsp.o jfdctfst.o jfdctint.o OBJS-$(CONFIG_FDCTDSP) += fdctdsp.o jfdctfst.o jfdctint.o
FFT-OBJS-$(CONFIG_HARDCODED_TABLES) += cos_tables.o FFT-OBJS-$(CONFIG_HARDCODED_TABLES) += cos_tables.o cos_fixed_tables.o
OBJS-$(CONFIG_FFT) += avfft.o fft_float.o fft_fixed_32.o \ OBJS-$(CONFIG_FFT) += avfft.o fft_fixed.o fft_float.o \
fft_init_table.o $(FFT-OBJS-yes) fft_fixed_32.o fft_init_table.o \
$(FFT-OBJS-yes)
OBJS-$(CONFIG_FLACDSP) += flacdsp.o OBJS-$(CONFIG_FLACDSP) += flacdsp.o
OBJS-$(CONFIG_FMTCONVERT) += fmtconvert.o OBJS-$(CONFIG_FMTCONVERT) += fmtconvert.o
OBJS-$(CONFIG_GOLOMB) += golomb.o OBJS-$(CONFIG_GOLOMB) += golomb.o
@ -96,8 +95,7 @@ OBJS-$(CONFIG_H264DSP) += h264dsp.o h264idct.o
OBJS-$(CONFIG_H264PARSE) += h264_parse.o h2645_parse.o h264_ps.o OBJS-$(CONFIG_H264PARSE) += h264_parse.o h2645_parse.o h264_ps.o
OBJS-$(CONFIG_H264PRED) += h264pred.o OBJS-$(CONFIG_H264PRED) += h264pred.o
OBJS-$(CONFIG_H264QPEL) += h264qpel.o OBJS-$(CONFIG_H264QPEL) += h264qpel.o
OBJS-$(CONFIG_HEVCPARSE) += hevc_parse.o h2645_parse.o hevc_ps.o hevc_sei.o hevc_data.o \ OBJS-$(CONFIG_HEVCPARSE) += hevc_parse.o h2645_parse.o hevc_ps.o hevc_sei.o hevc_data.o
dynamic_hdr10_plus.o
OBJS-$(CONFIG_HPELDSP) += hpeldsp.o OBJS-$(CONFIG_HPELDSP) += hpeldsp.o
OBJS-$(CONFIG_HUFFMAN) += huffman.o OBJS-$(CONFIG_HUFFMAN) += huffman.o
OBJS-$(CONFIG_HUFFYUVDSP) += huffyuvdsp.o OBJS-$(CONFIG_HUFFYUVDSP) += huffyuvdsp.o
@ -115,11 +113,11 @@ OBJS-$(CONFIG_LLVIDENCDSP) += lossless_videoencdsp.o
OBJS-$(CONFIG_LPC) += lpc.o OBJS-$(CONFIG_LPC) += lpc.o
OBJS-$(CONFIG_LSP) += lsp.o OBJS-$(CONFIG_LSP) += lsp.o
OBJS-$(CONFIG_LZF) += lzf.o OBJS-$(CONFIG_LZF) += lzf.o
OBJS-$(CONFIG_MDCT) += mdct_float.o mdct_fixed_32.o OBJS-$(CONFIG_MDCT) += mdct_fixed.o mdct_float.o mdct_fixed_32.o
OBJS-$(CONFIG_ME_CMP) += me_cmp.o OBJS-$(CONFIG_ME_CMP) += me_cmp.o
OBJS-$(CONFIG_MEDIACODEC) += mediacodecdec_common.o mediacodec_surface.o mediacodec_wrapper.o mediacodec_sw_buffer.o OBJS-$(CONFIG_MEDIACODEC) += mediacodecdec_common.o mediacodec_surface.o mediacodec_wrapper.o mediacodec_sw_buffer.o
OBJS-$(CONFIG_MPEG_ER) += mpeg_er.o OBJS-$(CONFIG_MPEG_ER) += mpeg_er.o
OBJS-$(CONFIG_MPEGAUDIO) += mpegaudio.o mpegaudiodec_common.o OBJS-$(CONFIG_MPEGAUDIO) += mpegaudio.o
OBJS-$(CONFIG_MPEGAUDIODSP) += mpegaudiodsp.o \ OBJS-$(CONFIG_MPEGAUDIODSP) += mpegaudiodsp.o \
mpegaudiodsp_data.o \ mpegaudiodsp_data.o \
mpegaudiodsp_fixed.o \ mpegaudiodsp_fixed.o \
@ -142,7 +140,7 @@ OBJS-$(CONFIG_RANGECODER) += rangecoder.o
OBJS-$(CONFIG_RDFT) += rdft.o OBJS-$(CONFIG_RDFT) += rdft.o
OBJS-$(CONFIG_RV34DSP) += rv34dsp.o OBJS-$(CONFIG_RV34DSP) += rv34dsp.o
OBJS-$(CONFIG_SHARED) += log2_tab.o reverse.o OBJS-$(CONFIG_SHARED) += log2_tab.o reverse.o
OBJS-$(CONFIG_SINEWIN) += sinewin.o OBJS-$(CONFIG_SINEWIN) += sinewin.o sinewin_fixed.o
OBJS-$(CONFIG_SNAPPY) += snappy.o OBJS-$(CONFIG_SNAPPY) += snappy.o
OBJS-$(CONFIG_STARTCODE) += startcode.o OBJS-$(CONFIG_STARTCODE) += startcode.o
OBJS-$(CONFIG_TEXTUREDSP) += texturedsp.o OBJS-$(CONFIG_TEXTUREDSP) += texturedsp.o
@ -162,10 +160,10 @@ OBJS-$(CONFIG_WMV2DSP) += wmv2dsp.o
OBJS-$(CONFIG_ZERO12V_DECODER) += 012v.o OBJS-$(CONFIG_ZERO12V_DECODER) += 012v.o
OBJS-$(CONFIG_A64MULTI_ENCODER) += a64multienc.o elbg.o OBJS-$(CONFIG_A64MULTI_ENCODER) += a64multienc.o elbg.o
OBJS-$(CONFIG_A64MULTI5_ENCODER) += a64multienc.o elbg.o OBJS-$(CONFIG_A64MULTI5_ENCODER) += a64multienc.o elbg.o
OBJS-$(CONFIG_AAC_DECODER) += aacdec.o aactab.o aacsbr.o aacps_common.o aacps_float.o \ OBJS-$(CONFIG_AAC_DECODER) += aacdec.o aactab.o aacsbr.o aacps_float.o \
mpeg4audio.o kbdwin.o \ mpeg4audio.o kbdwin.o \
sbrdsp.o aacpsdsp_float.o cbrt_data.o sbrdsp.o aacpsdsp_float.o cbrt_data.o
OBJS-$(CONFIG_AAC_FIXED_DECODER) += aacdec_fixed.o aactab.o aacsbr_fixed.o aacps_common.o aacps_fixed.o \ OBJS-$(CONFIG_AAC_FIXED_DECODER) += aacdec_fixed.o aactab.o aacsbr_fixed.o aacps_fixed.o \
mpeg4audio.o kbdwin.o \ mpeg4audio.o kbdwin.o \
sbrdsp_fixed.o aacpsdsp_fixed.o cbrt_data_fixed.o sbrdsp_fixed.o aacpsdsp_fixed.o cbrt_data_fixed.o
OBJS-$(CONFIG_AAC_ENCODER) += aacenc.o aaccoder.o aacenctab.o \ OBJS-$(CONFIG_AAC_ENCODER) += aacenc.o aaccoder.o aacenctab.o \
@ -174,14 +172,14 @@ OBJS-$(CONFIG_AAC_ENCODER) += aacenc.o aaccoder.o aacenctab.o \
aacenc_tns.o \ aacenc_tns.o \
aacenc_ltp.o \ aacenc_ltp.o \
aacenc_pred.o \ aacenc_pred.o \
psymodel.o mpeg4audio.o kbdwin.o psymodel.o mpeg4audio.o kbdwin.o cbrt_data.o
OBJS-$(CONFIG_AAC_MF_ENCODER) += mfenc.o mf_utils.o OBJS-$(CONFIG_AAC_MF_ENCODER) += mfenc.o mf_utils.o
OBJS-$(CONFIG_AASC_DECODER) += aasc.o msrledec.o OBJS-$(CONFIG_AASC_DECODER) += aasc.o msrledec.o
OBJS-$(CONFIG_AC3_DECODER) += ac3dec_float.o ac3dec_data.o ac3.o kbdwin.o ac3tab.o OBJS-$(CONFIG_AC3_DECODER) += ac3dec_float.o ac3dec_data.o ac3.o kbdwin.o ac3tab.o
OBJS-$(CONFIG_AC3_FIXED_DECODER) += ac3dec_fixed.o ac3dec_data.o ac3.o kbdwin.o ac3tab.o OBJS-$(CONFIG_AC3_FIXED_DECODER) += ac3dec_fixed.o ac3dec_data.o ac3.o kbdwin.o ac3tab.o
OBJS-$(CONFIG_AC3_ENCODER) += ac3enc_float.o ac3enc.o ac3tab.o \ OBJS-$(CONFIG_AC3_ENCODER) += ac3enc_float.o ac3enc.o ac3tab.o \
ac3.o kbdwin.o ac3.o kbdwin.o
OBJS-$(CONFIG_AC3_FIXED_ENCODER) += ac3enc_fixed.o ac3enc.o ac3tab.o ac3.o kbdwin.o OBJS-$(CONFIG_AC3_FIXED_ENCODER) += ac3enc_fixed.o ac3enc.o ac3tab.o ac3.o
OBJS-$(CONFIG_AC3_MF_ENCODER) += mfenc.o mf_utils.o OBJS-$(CONFIG_AC3_MF_ENCODER) += mfenc.o mf_utils.o
OBJS-$(CONFIG_ACELP_KELVIN_DECODER) += g729dec.o lsp.o celp_math.o celp_filters.o acelp_filters.o acelp_pitch_delay.o acelp_vectors.o g729postfilter.o OBJS-$(CONFIG_ACELP_KELVIN_DECODER) += g729dec.o lsp.o celp_math.o celp_filters.o acelp_filters.o acelp_pitch_delay.o acelp_vectors.o g729postfilter.o
OBJS-$(CONFIG_AGM_DECODER) += agm.o OBJS-$(CONFIG_AGM_DECODER) += agm.o
@ -211,7 +209,6 @@ OBJS-$(CONFIG_APTX_HD_ENCODER) += aptxenc.o aptx.o
OBJS-$(CONFIG_APNG_DECODER) += png.o pngdec.o pngdsp.o OBJS-$(CONFIG_APNG_DECODER) += png.o pngdec.o pngdsp.o
OBJS-$(CONFIG_APNG_ENCODER) += png.o pngenc.o OBJS-$(CONFIG_APNG_ENCODER) += png.o pngenc.o
OBJS-$(CONFIG_ARBC_DECODER) += arbc.o OBJS-$(CONFIG_ARBC_DECODER) += arbc.o
OBJS-$(CONFIG_ARGO_DECODER) += argo.o
OBJS-$(CONFIG_SSA_DECODER) += assdec.o ass.o OBJS-$(CONFIG_SSA_DECODER) += assdec.o ass.o
OBJS-$(CONFIG_SSA_ENCODER) += assenc.o ass.o OBJS-$(CONFIG_SSA_ENCODER) += assenc.o ass.o
OBJS-$(CONFIG_ASS_DECODER) += assdec.o ass.o OBJS-$(CONFIG_ASS_DECODER) += assdec.o ass.o
@ -230,9 +227,7 @@ OBJS-$(CONFIG_ATRAC3PAL_DECODER) += atrac3plusdec.o atrac3plus.o \
OBJS-$(CONFIG_ATRAC9_DECODER) += atrac9dec.o OBJS-$(CONFIG_ATRAC9_DECODER) += atrac9dec.o
OBJS-$(CONFIG_AURA_DECODER) += cyuv.o OBJS-$(CONFIG_AURA_DECODER) += cyuv.o
OBJS-$(CONFIG_AURA2_DECODER) += aura.o OBJS-$(CONFIG_AURA2_DECODER) += aura.o
OBJS-$(CONFIG_AV1_DECODER) += av1dec.o OBJS-$(CONFIG_AVRN_DECODER) += avrndec.o mjpegdec.o
OBJS-$(CONFIG_AV1_CUVID_DECODER) += cuviddec.o
OBJS-$(CONFIG_AVRN_DECODER) += avrndec.o
OBJS-$(CONFIG_AVRP_DECODER) += r210dec.o OBJS-$(CONFIG_AVRP_DECODER) += r210dec.o
OBJS-$(CONFIG_AVRP_ENCODER) += r210enc.o OBJS-$(CONFIG_AVRP_ENCODER) += r210enc.o
OBJS-$(CONFIG_AVS_DECODER) += avs.o OBJS-$(CONFIG_AVS_DECODER) += avs.o
@ -259,8 +254,7 @@ OBJS-$(CONFIG_CCAPTION_DECODER) += ccaption_dec.o ass.o
OBJS-$(CONFIG_CDGRAPHICS_DECODER) += cdgraphics.o OBJS-$(CONFIG_CDGRAPHICS_DECODER) += cdgraphics.o
OBJS-$(CONFIG_CDTOONS_DECODER) += cdtoons.o OBJS-$(CONFIG_CDTOONS_DECODER) += cdtoons.o
OBJS-$(CONFIG_CDXL_DECODER) += cdxl.o OBJS-$(CONFIG_CDXL_DECODER) += cdxl.o
OBJS-$(CONFIG_CFHD_DECODER) += cfhd.o cfhddata.o cfhddsp.o OBJS-$(CONFIG_CFHD_DECODER) += cfhd.o cfhddata.o
OBJS-$(CONFIG_CFHD_ENCODER) += cfhdenc.o cfhddata.o cfhdencdsp.o
OBJS-$(CONFIG_CINEPAK_DECODER) += cinepak.o OBJS-$(CONFIG_CINEPAK_DECODER) += cinepak.o
OBJS-$(CONFIG_CINEPAK_ENCODER) += cinepakenc.o elbg.o OBJS-$(CONFIG_CINEPAK_ENCODER) += cinepakenc.o elbg.o
OBJS-$(CONFIG_CLEARVIDEO_DECODER) += clearvideo.o OBJS-$(CONFIG_CLEARVIDEO_DECODER) += clearvideo.o
@ -271,13 +265,12 @@ OBJS-$(CONFIG_COMFORTNOISE_DECODER) += cngdec.o celp_filters.o
OBJS-$(CONFIG_COMFORTNOISE_ENCODER) += cngenc.o OBJS-$(CONFIG_COMFORTNOISE_ENCODER) += cngenc.o
OBJS-$(CONFIG_COOK_DECODER) += cook.o OBJS-$(CONFIG_COOK_DECODER) += cook.o
OBJS-$(CONFIG_CPIA_DECODER) += cpia.o OBJS-$(CONFIG_CPIA_DECODER) += cpia.o
OBJS-$(CONFIG_CRI_DECODER) += cri.o
OBJS-$(CONFIG_CSCD_DECODER) += cscd.o OBJS-$(CONFIG_CSCD_DECODER) += cscd.o
OBJS-$(CONFIG_CYUV_DECODER) += cyuv.o OBJS-$(CONFIG_CYUV_DECODER) += cyuv.o
OBJS-$(CONFIG_DCA_DECODER) += dcadec.o dca.o dcadata.o dcahuff.o \ OBJS-$(CONFIG_DCA_DECODER) += dcadec.o dca.o dcadata.o dcahuff.o \
dca_core.o dca_exss.o dca_xll.o dca_lbr.o \ dca_core.o dca_exss.o dca_xll.o dca_lbr.o \
dcadsp.o dcadct.o synth_filter.o dcadsp.o dcadct.o synth_filter.o
OBJS-$(CONFIG_DCA_ENCODER) += dcaenc.o dcadata.o dcahuff.o \ OBJS-$(CONFIG_DCA_ENCODER) += dcaenc.o dca.o dcadata.o dcahuff.o \
dcaadpcm.o dcaadpcm.o
OBJS-$(CONFIG_DDS_DECODER) += dds.o OBJS-$(CONFIG_DDS_DECODER) += dds.o
OBJS-$(CONFIG_DERF_DPCM_DECODER) += dpcm.o OBJS-$(CONFIG_DERF_DPCM_DECODER) += dpcm.o
@ -286,7 +279,7 @@ OBJS-$(CONFIG_DIRAC_DECODER) += diracdec.o dirac.o diracdsp.o diractab
OBJS-$(CONFIG_DFA_DECODER) += dfa.o OBJS-$(CONFIG_DFA_DECODER) += dfa.o
OBJS-$(CONFIG_DNXHD_DECODER) += dnxhddec.o dnxhddata.o OBJS-$(CONFIG_DNXHD_DECODER) += dnxhddec.o dnxhddata.o
OBJS-$(CONFIG_DNXHD_ENCODER) += dnxhdenc.o dnxhddata.o OBJS-$(CONFIG_DNXHD_ENCODER) += dnxhdenc.o dnxhddata.o
OBJS-$(CONFIG_DOLBY_E_DECODER) += dolby_e.o dolby_e_parse.o kbdwin.o OBJS-$(CONFIG_DOLBY_E_DECODER) += dolby_e.o kbdwin.o
OBJS-$(CONFIG_DPX_DECODER) += dpx.o OBJS-$(CONFIG_DPX_DECODER) += dpx.o
OBJS-$(CONFIG_DPX_ENCODER) += dpxenc.o OBJS-$(CONFIG_DPX_ENCODER) += dpxenc.o
OBJS-$(CONFIG_DSD_LSBF_DECODER) += dsddec.o dsd.o OBJS-$(CONFIG_DSD_LSBF_DECODER) += dsddec.o dsd.o
@ -298,7 +291,7 @@ OBJS-$(CONFIG_DSICINVIDEO_DECODER) += dsicinvideo.o
OBJS-$(CONFIG_DSS_SP_DECODER) += dss_sp.o OBJS-$(CONFIG_DSS_SP_DECODER) += dss_sp.o
OBJS-$(CONFIG_DST_DECODER) += dstdec.o dsd.o OBJS-$(CONFIG_DST_DECODER) += dstdec.o dsd.o
OBJS-$(CONFIG_DVBSUB_DECODER) += dvbsubdec.o OBJS-$(CONFIG_DVBSUB_DECODER) += dvbsubdec.o
OBJS-$(CONFIG_DVBSUB_ENCODER) += dvbsubenc.o OBJS-$(CONFIG_DVBSUB_ENCODER) += dvbsub.o
OBJS-$(CONFIG_DVDSUB_DECODER) += dvdsubdec.o dvdsub.o OBJS-$(CONFIG_DVDSUB_DECODER) += dvdsubdec.o dvdsub.o
OBJS-$(CONFIG_DVDSUB_ENCODER) += dvdsubenc.o dvdsub.o OBJS-$(CONFIG_DVDSUB_ENCODER) += dvdsubenc.o dvdsub.o
OBJS-$(CONFIG_DVAUDIO_DECODER) += dvaudiodec.o OBJS-$(CONFIG_DVAUDIO_DECODER) += dvaudiodec.o
@ -322,8 +315,6 @@ OBJS-$(CONFIG_ESCAPE124_DECODER) += escape124.o
OBJS-$(CONFIG_ESCAPE130_DECODER) += escape130.o OBJS-$(CONFIG_ESCAPE130_DECODER) += escape130.o
OBJS-$(CONFIG_EVRC_DECODER) += evrcdec.o acelp_vectors.o lsp.o OBJS-$(CONFIG_EVRC_DECODER) += evrcdec.o acelp_vectors.o lsp.o
OBJS-$(CONFIG_EXR_DECODER) += exr.o exrdsp.o OBJS-$(CONFIG_EXR_DECODER) += exr.o exrdsp.o
OBJS-$(CONFIG_EXR_ENCODER) += exrenc.o
OBJS-$(CONFIG_FASTAUDIO_DECODER) += fastaudio.o
OBJS-$(CONFIG_FFV1_DECODER) += ffv1dec.o ffv1.o OBJS-$(CONFIG_FFV1_DECODER) += ffv1dec.o ffv1.o
OBJS-$(CONFIG_FFV1_ENCODER) += ffv1enc.o ffv1.o OBJS-$(CONFIG_FFV1_ENCODER) += ffv1enc.o ffv1.o
OBJS-$(CONFIG_FFWAVESYNTH_DECODER) += ffwavesynth.o OBJS-$(CONFIG_FFWAVESYNTH_DECODER) += ffwavesynth.o
@ -331,19 +322,17 @@ OBJS-$(CONFIG_FIC_DECODER) += fic.o
OBJS-$(CONFIG_FITS_DECODER) += fitsdec.o fits.o OBJS-$(CONFIG_FITS_DECODER) += fitsdec.o fits.o
OBJS-$(CONFIG_FITS_ENCODER) += fitsenc.o OBJS-$(CONFIG_FITS_ENCODER) += fitsenc.o
OBJS-$(CONFIG_FLAC_DECODER) += flacdec.o flacdata.o flac.o OBJS-$(CONFIG_FLAC_DECODER) += flacdec.o flacdata.o flac.o
OBJS-$(CONFIG_FLAC_ENCODER) += flacenc.o flacdata.o flac.o OBJS-$(CONFIG_FLAC_ENCODER) += flacenc.o flacdata.o flac.o vorbis_data.o
OBJS-$(CONFIG_FLASHSV_DECODER) += flashsv.o OBJS-$(CONFIG_FLASHSV_DECODER) += flashsv.o
OBJS-$(CONFIG_FLASHSV_ENCODER) += flashsvenc.o OBJS-$(CONFIG_FLASHSV_ENCODER) += flashsvenc.o
OBJS-$(CONFIG_FLASHSV2_ENCODER) += flashsv2enc.o OBJS-$(CONFIG_FLASHSV2_ENCODER) += flashsv2enc.o
OBJS-$(CONFIG_FLASHSV2_DECODER) += flashsv.o OBJS-$(CONFIG_FLASHSV2_DECODER) += flashsv.o
OBJS-$(CONFIG_FLIC_DECODER) += flicvideo.o OBJS-$(CONFIG_FLIC_DECODER) += flicvideo.o
OBJS-$(CONFIG_FLV_DECODER) += flvdec.o
OBJS-$(CONFIG_FLV_ENCODER) += flvenc.o
OBJS-$(CONFIG_FMVC_DECODER) += fmvc.o OBJS-$(CONFIG_FMVC_DECODER) += fmvc.o
OBJS-$(CONFIG_FOURXM_DECODER) += 4xm.o OBJS-$(CONFIG_FOURXM_DECODER) += 4xm.o
OBJS-$(CONFIG_FRAPS_DECODER) += fraps.o OBJS-$(CONFIG_FRAPS_DECODER) += fraps.o
OBJS-$(CONFIG_FRWU_DECODER) += frwu.o OBJS-$(CONFIG_FRWU_DECODER) += frwu.o
OBJS-$(CONFIG_G2M_DECODER) += g2meet.o elsdec.o mjpegdec_common.o OBJS-$(CONFIG_G2M_DECODER) += g2meet.o elsdec.o
OBJS-$(CONFIG_G723_1_DECODER) += g723_1dec.o g723_1.o \ OBJS-$(CONFIG_G723_1_DECODER) += g723_1dec.o g723_1.o \
acelp_vectors.o celp_filters.o celp_math.o acelp_vectors.o celp_filters.o celp_math.o
OBJS-$(CONFIG_G723_1_ENCODER) += g723_1enc.o g723_1.o \ OBJS-$(CONFIG_G723_1_ENCODER) += g723_1enc.o g723_1.o \
@ -358,11 +347,10 @@ OBJS-$(CONFIG_GSM_MS_DECODER) += gsmdec.o gsmdec_data.o msgsmdec.o
OBJS-$(CONFIG_H261_DECODER) += h261dec.o h261data.o h261.o OBJS-$(CONFIG_H261_DECODER) += h261dec.o h261data.o h261.o
OBJS-$(CONFIG_H261_ENCODER) += h261enc.o h261data.o h261.o OBJS-$(CONFIG_H261_ENCODER) += h261enc.o h261data.o h261.o
OBJS-$(CONFIG_H263_DECODER) += h263dec.o h263.o ituh263dec.o \ OBJS-$(CONFIG_H263_DECODER) += h263dec.o h263.o ituh263dec.o \
mpeg4video.o mpeg4videodec.o \ mpeg4video.o mpeg4videodec.o flvdec.o\
h263data.o intelh263dec.o h263data.o
OBJS-$(CONFIG_H263I_DECODER) += intelh263dec.o OBJS-$(CONFIG_H263_ENCODER) += mpeg4videoenc.o mpeg4video.o \
OBJS-$(CONFIG_H263_ENCODER) += mpeg4video.o \ h263.o ituh263enc.o flvenc.o h263data.o
h263.o ituh263enc.o h263data.o
OBJS-$(CONFIG_H263_V4L2M2M_DECODER) += v4l2_m2m_dec.o OBJS-$(CONFIG_H263_V4L2M2M_DECODER) += v4l2_m2m_dec.o
OBJS-$(CONFIG_H263_V4L2M2M_ENCODER) += v4l2_m2m_enc.o OBJS-$(CONFIG_H263_V4L2M2M_ENCODER) += v4l2_m2m_enc.o
OBJS-$(CONFIG_H264_DECODER) += h264dec.o h264_cabac.o h264_cavlc.o \ OBJS-$(CONFIG_H264_DECODER) += h264dec.o h264_cabac.o h264_cavlc.o \
@ -379,7 +367,7 @@ OBJS-$(CONFIG_H264_NVENC_ENCODER) += nvenc_h264.o
OBJS-$(CONFIG_NVENC_ENCODER) += nvenc_h264.o OBJS-$(CONFIG_NVENC_ENCODER) += nvenc_h264.o
OBJS-$(CONFIG_NVENC_H264_ENCODER) += nvenc_h264.o OBJS-$(CONFIG_NVENC_H264_ENCODER) += nvenc_h264.o
OBJS-$(CONFIG_H264_OMX_ENCODER) += omx.o OBJS-$(CONFIG_H264_OMX_ENCODER) += omx.o
OBJS-$(CONFIG_H264_QSV_DECODER) += qsvdec.o OBJS-$(CONFIG_H264_QSV_DECODER) += qsvdec_h2645.o
OBJS-$(CONFIG_H264_QSV_ENCODER) += qsvenc_h264.o OBJS-$(CONFIG_H264_QSV_ENCODER) += qsvenc_h264.o
OBJS-$(CONFIG_H264_RKMPP_DECODER) += rkmppdec.o OBJS-$(CONFIG_H264_RKMPP_DECODER) += rkmppdec.o
OBJS-$(CONFIG_H264_VAAPI_ENCODER) += vaapi_encode_h264.o h264_levels.o OBJS-$(CONFIG_H264_VAAPI_ENCODER) += vaapi_encode_h264.o h264_levels.o
@ -399,7 +387,7 @@ OBJS-$(CONFIG_HEVC_MEDIACODEC_DECODER) += mediacodecdec.o
OBJS-$(CONFIG_HEVC_MF_ENCODER) += mfenc.o mf_utils.o OBJS-$(CONFIG_HEVC_MF_ENCODER) += mfenc.o mf_utils.o
OBJS-$(CONFIG_HEVC_NVENC_ENCODER) += nvenc_hevc.o OBJS-$(CONFIG_HEVC_NVENC_ENCODER) += nvenc_hevc.o
OBJS-$(CONFIG_NVENC_HEVC_ENCODER) += nvenc_hevc.o OBJS-$(CONFIG_NVENC_HEVC_ENCODER) += nvenc_hevc.o
OBJS-$(CONFIG_HEVC_QSV_DECODER) += qsvdec.o OBJS-$(CONFIG_HEVC_QSV_DECODER) += qsvdec_h2645.o
OBJS-$(CONFIG_HEVC_QSV_ENCODER) += qsvenc_hevc.o hevc_ps_enc.o \ OBJS-$(CONFIG_HEVC_QSV_ENCODER) += qsvenc_hevc.o hevc_ps_enc.o \
hevc_data.o hevc_data.o
OBJS-$(CONFIG_HEVC_RKMPP_DECODER) += rkmppdec.o OBJS-$(CONFIG_HEVC_RKMPP_DECODER) += rkmppdec.o
@ -427,7 +415,6 @@ OBJS-$(CONFIG_INDEO5_DECODER) += indeo5.o ivi.o
OBJS-$(CONFIG_INTERPLAY_ACM_DECODER) += interplayacm.o OBJS-$(CONFIG_INTERPLAY_ACM_DECODER) += interplayacm.o
OBJS-$(CONFIG_INTERPLAY_DPCM_DECODER) += dpcm.o OBJS-$(CONFIG_INTERPLAY_DPCM_DECODER) += dpcm.o
OBJS-$(CONFIG_INTERPLAY_VIDEO_DECODER) += interplayvideo.o OBJS-$(CONFIG_INTERPLAY_VIDEO_DECODER) += interplayvideo.o
OBJS-$(CONFIG_IPU_DECODER) += mpeg12dec.o mpeg12.o mpeg12data.o
OBJS-$(CONFIG_JACOSUB_DECODER) += jacosubdec.o ass.o OBJS-$(CONFIG_JACOSUB_DECODER) += jacosubdec.o ass.o
OBJS-$(CONFIG_JPEG2000_ENCODER) += j2kenc.o mqcenc.o mqc.o jpeg2000.o \ OBJS-$(CONFIG_JPEG2000_ENCODER) += j2kenc.o mqcenc.o mqc.o jpeg2000.o \
jpeg2000dwt.o jpeg2000dwt.o
@ -441,7 +428,7 @@ OBJS-$(CONFIG_KMVC_DECODER) += kmvc.o
OBJS-$(CONFIG_LAGARITH_DECODER) += lagarith.o lagarithrac.o OBJS-$(CONFIG_LAGARITH_DECODER) += lagarith.o lagarithrac.o
OBJS-$(CONFIG_LJPEG_ENCODER) += ljpegenc.o mjpegenc_common.o OBJS-$(CONFIG_LJPEG_ENCODER) += ljpegenc.o mjpegenc_common.o
OBJS-$(CONFIG_LOCO_DECODER) += loco.o OBJS-$(CONFIG_LOCO_DECODER) += loco.o
OBJS-$(CONFIG_LSCR_DECODER) += lscrdec.o png.o pngdec.o pngdsp.o OBJS-$(CONFIG_LSCR_DECODER) += png.o pngdec.o pngdsp.o
OBJS-$(CONFIG_M101_DECODER) += m101.o OBJS-$(CONFIG_M101_DECODER) += m101.o
OBJS-$(CONFIG_MACE3_DECODER) += mace.o OBJS-$(CONFIG_MACE3_DECODER) += mace.o
OBJS-$(CONFIG_MACE6_DECODER) += mace.o OBJS-$(CONFIG_MACE6_DECODER) += mace.o
@ -452,8 +439,8 @@ OBJS-$(CONFIG_METASOUND_DECODER) += metasound.o metasound_data.o \
twinvq.o twinvq.o
OBJS-$(CONFIG_MICRODVD_DECODER) += microdvddec.o ass.o OBJS-$(CONFIG_MICRODVD_DECODER) += microdvddec.o ass.o
OBJS-$(CONFIG_MIMIC_DECODER) += mimic.o OBJS-$(CONFIG_MIMIC_DECODER) += mimic.o
OBJS-$(CONFIG_MJPEG_DECODER) += mjpegdec.o mjpegdec_common.o OBJS-$(CONFIG_MJPEG_DECODER) += mjpegdec.o
OBJS-$(CONFIG_MJPEG_QSV_DECODER) += qsvdec.o OBJS-$(CONFIG_MJPEG_QSV_DECODER) += qsvdec_other.o
OBJS-$(CONFIG_MJPEG_ENCODER) += mjpegenc.o mjpegenc_common.o \ OBJS-$(CONFIG_MJPEG_ENCODER) += mjpegenc.o mjpegenc_common.o \
mjpegenc_huffman.o mjpegenc_huffman.o
OBJS-$(CONFIG_MJPEGB_DECODER) += mjpegbdec.o OBJS-$(CONFIG_MJPEGB_DECODER) += mjpegbdec.o
@ -463,7 +450,6 @@ OBJS-$(CONFIG_MJPEG_VAAPI_ENCODER) += vaapi_encode_mjpeg.o
OBJS-$(CONFIG_MLP_DECODER) += mlpdec.o mlpdsp.o OBJS-$(CONFIG_MLP_DECODER) += mlpdec.o mlpdsp.o
OBJS-$(CONFIG_MLP_ENCODER) += mlpenc.o mlp.o OBJS-$(CONFIG_MLP_ENCODER) += mlpenc.o mlp.o
OBJS-$(CONFIG_MMVIDEO_DECODER) += mmvideo.o OBJS-$(CONFIG_MMVIDEO_DECODER) += mmvideo.o
OBJS-$(CONFIG_MOBICLIP_DECODER) += mobiclip.o
OBJS-$(CONFIG_MOTIONPIXELS_DECODER) += motionpixels.o OBJS-$(CONFIG_MOTIONPIXELS_DECODER) += motionpixels.o
OBJS-$(CONFIG_MOVTEXT_DECODER) += movtextdec.o ass.o OBJS-$(CONFIG_MOVTEXT_DECODER) += movtextdec.o ass.o
OBJS-$(CONFIG_MOVTEXT_ENCODER) += movtextenc.o ass_split.o OBJS-$(CONFIG_MOVTEXT_ENCODER) += movtextenc.o ass_split.o
@ -490,7 +476,7 @@ OBJS-$(CONFIG_MPEG1VIDEO_ENCODER) += mpeg12enc.o mpeg12.o
OBJS-$(CONFIG_MPEG1_CUVID_DECODER) += cuviddec.o OBJS-$(CONFIG_MPEG1_CUVID_DECODER) += cuviddec.o
OBJS-$(CONFIG_MPEG1_V4L2M2M_DECODER) += v4l2_m2m_dec.o OBJS-$(CONFIG_MPEG1_V4L2M2M_DECODER) += v4l2_m2m_dec.o
OBJS-$(CONFIG_MPEG2_MMAL_DECODER) += mmaldec.o OBJS-$(CONFIG_MPEG2_MMAL_DECODER) += mmaldec.o
OBJS-$(CONFIG_MPEG2_QSV_DECODER) += qsvdec.o OBJS-$(CONFIG_MPEG2_QSV_DECODER) += qsvdec_other.o
OBJS-$(CONFIG_MPEG2_QSV_ENCODER) += qsvenc_mpeg2.o OBJS-$(CONFIG_MPEG2_QSV_ENCODER) += qsvenc_mpeg2.o
OBJS-$(CONFIG_MPEG2VIDEO_DECODER) += mpeg12dec.o mpeg12.o mpeg12data.o OBJS-$(CONFIG_MPEG2VIDEO_DECODER) += mpeg12dec.o mpeg12.o mpeg12data.o
OBJS-$(CONFIG_MPEG2VIDEO_ENCODER) += mpeg12enc.o mpeg12.o OBJS-$(CONFIG_MPEG2VIDEO_ENCODER) += mpeg12enc.o mpeg12.o
@ -499,7 +485,6 @@ OBJS-$(CONFIG_MPEG2_MEDIACODEC_DECODER) += mediacodecdec.o
OBJS-$(CONFIG_MPEG2_VAAPI_ENCODER) += vaapi_encode_mpeg2.o OBJS-$(CONFIG_MPEG2_VAAPI_ENCODER) += vaapi_encode_mpeg2.o
OBJS-$(CONFIG_MPEG2_V4L2M2M_DECODER) += v4l2_m2m_dec.o OBJS-$(CONFIG_MPEG2_V4L2M2M_DECODER) += v4l2_m2m_dec.o
OBJS-$(CONFIG_MPEG4_DECODER) += xvididct.o OBJS-$(CONFIG_MPEG4_DECODER) += xvididct.o
OBJS-$(CONFIG_MPEG4_ENCODER) += mpeg4videoenc.o
OBJS-$(CONFIG_MPEG4_CUVID_DECODER) += cuviddec.o OBJS-$(CONFIG_MPEG4_CUVID_DECODER) += cuviddec.o
OBJS-$(CONFIG_MPEG4_MEDIACODEC_DECODER) += mediacodecdec.o OBJS-$(CONFIG_MPEG4_MEDIACODEC_DECODER) += mediacodecdec.o
OBJS-$(CONFIG_MPEG4_OMX_ENCODER) += omx.o OBJS-$(CONFIG_MPEG4_OMX_ENCODER) += omx.o
@ -513,7 +498,6 @@ OBJS-$(CONFIG_MSMPEG4V2_DECODER) += msmpeg4dec.o msmpeg4.o msmpeg4data.o
OBJS-$(CONFIG_MSMPEG4V2_ENCODER) += msmpeg4enc.o msmpeg4.o msmpeg4data.o OBJS-$(CONFIG_MSMPEG4V2_ENCODER) += msmpeg4enc.o msmpeg4.o msmpeg4data.o
OBJS-$(CONFIG_MSMPEG4V3_DECODER) += msmpeg4dec.o msmpeg4.o msmpeg4data.o OBJS-$(CONFIG_MSMPEG4V3_DECODER) += msmpeg4dec.o msmpeg4.o msmpeg4data.o
OBJS-$(CONFIG_MSMPEG4V3_ENCODER) += msmpeg4enc.o msmpeg4.o msmpeg4data.o OBJS-$(CONFIG_MSMPEG4V3_ENCODER) += msmpeg4enc.o msmpeg4.o msmpeg4data.o
OBJS-$(CONFIG_MSP2_DECODER) += msp2dec.o
OBJS-$(CONFIG_MSRLE_DECODER) += msrle.o msrledec.o OBJS-$(CONFIG_MSRLE_DECODER) += msrle.o msrledec.o
OBJS-$(CONFIG_MSS1_DECODER) += mss1.o mss12.o OBJS-$(CONFIG_MSS1_DECODER) += mss1.o mss12.o
OBJS-$(CONFIG_MSS2_DECODER) += mss2.o mss12.o mss2dsp.o wmv2data.o OBJS-$(CONFIG_MSS2_DECODER) += mss2.o mss12.o mss2dsp.o wmv2data.o
@ -547,14 +531,11 @@ OBJS-$(CONFIG_PBM_ENCODER) += pnmenc.o
OBJS-$(CONFIG_PCX_DECODER) += pcx.o OBJS-$(CONFIG_PCX_DECODER) += pcx.o
OBJS-$(CONFIG_PCX_ENCODER) += pcxenc.o OBJS-$(CONFIG_PCX_ENCODER) += pcxenc.o
OBJS-$(CONFIG_PFM_DECODER) += pnmdec.o pnm.o OBJS-$(CONFIG_PFM_DECODER) += pnmdec.o pnm.o
OBJS-$(CONFIG_PFM_ENCODER) += pnmenc.o
OBJS-$(CONFIG_PGM_DECODER) += pnmdec.o pnm.o OBJS-$(CONFIG_PGM_DECODER) += pnmdec.o pnm.o
OBJS-$(CONFIG_PGM_ENCODER) += pnmenc.o OBJS-$(CONFIG_PGM_ENCODER) += pnmenc.o
OBJS-$(CONFIG_PGMYUV_DECODER) += pnmdec.o pnm.o OBJS-$(CONFIG_PGMYUV_DECODER) += pnmdec.o pnm.o
OBJS-$(CONFIG_PGMYUV_ENCODER) += pnmenc.o OBJS-$(CONFIG_PGMYUV_ENCODER) += pnmenc.o
OBJS-$(CONFIG_PGSSUB_DECODER) += pgssubdec.o OBJS-$(CONFIG_PGSSUB_DECODER) += pgssubdec.o
OBJS-$(CONFIG_PGX_DECODER) += pgxdec.o
OBJS-$(CONFIG_PHOTOCD_DECODER) += photocd.o
OBJS-$(CONFIG_PICTOR_DECODER) += pictordec.o cga_data.o OBJS-$(CONFIG_PICTOR_DECODER) += pictordec.o cga_data.o
OBJS-$(CONFIG_PIXLET_DECODER) += pixlet.o OBJS-$(CONFIG_PIXLET_DECODER) += pixlet.o
OBJS-$(CONFIG_PJS_DECODER) += textdec.o ass.o OBJS-$(CONFIG_PJS_DECODER) += textdec.o ass.o
@ -596,7 +577,6 @@ OBJS-$(CONFIG_ROQ_ENCODER) += roqvideoenc.o roqvideo.o elbg.o
OBJS-$(CONFIG_ROQ_DPCM_DECODER) += dpcm.o OBJS-$(CONFIG_ROQ_DPCM_DECODER) += dpcm.o
OBJS-$(CONFIG_ROQ_DPCM_ENCODER) += roqaudioenc.o OBJS-$(CONFIG_ROQ_DPCM_ENCODER) += roqaudioenc.o
OBJS-$(CONFIG_RPZA_DECODER) += rpza.o OBJS-$(CONFIG_RPZA_DECODER) += rpza.o
OBJS-$(CONFIG_RPZA_ENCODER) += rpzaenc.o
OBJS-$(CONFIG_RSCC_DECODER) += rscc.o OBJS-$(CONFIG_RSCC_DECODER) += rscc.o
OBJS-$(CONFIG_RV10_DECODER) += rv10.o OBJS-$(CONFIG_RV10_DECODER) += rv10.o
OBJS-$(CONFIG_RV10_ENCODER) += rv10enc.o OBJS-$(CONFIG_RV10_ENCODER) += rv10enc.o
@ -611,7 +591,6 @@ OBJS-$(CONFIG_SANM_DECODER) += sanm.o
OBJS-$(CONFIG_SCPR_DECODER) += scpr.o OBJS-$(CONFIG_SCPR_DECODER) += scpr.o
OBJS-$(CONFIG_SCREENPRESSO_DECODER) += screenpresso.o OBJS-$(CONFIG_SCREENPRESSO_DECODER) += screenpresso.o
OBJS-$(CONFIG_SDX2_DPCM_DECODER) += dpcm.o OBJS-$(CONFIG_SDX2_DPCM_DECODER) += dpcm.o
OBJS-$(CONFIG_SGA_DECODER) += sga.o
OBJS-$(CONFIG_SGI_DECODER) += sgidec.o OBJS-$(CONFIG_SGI_DECODER) += sgidec.o
OBJS-$(CONFIG_SGI_ENCODER) += sgienc.o rle.o OBJS-$(CONFIG_SGI_ENCODER) += sgienc.o rle.o
OBJS-$(CONFIG_SGIRLE_DECODER) += sgirledec.o OBJS-$(CONFIG_SGIRLE_DECODER) += sgirledec.o
@ -622,10 +601,10 @@ OBJS-$(CONFIG_SIPR_DECODER) += sipr.o acelp_pitch_delay.o \
acelp_filters.o celp_filters.o \ acelp_filters.o celp_filters.o \
sipr16k.o sipr16k.o
OBJS-$(CONFIG_SIREN_DECODER) += siren.o OBJS-$(CONFIG_SIREN_DECODER) += siren.o
OBJS-$(CONFIG_SIMBIOSIS_IMX_DECODER) += imx.o
OBJS-$(CONFIG_SMACKAUD_DECODER) += smacker.o OBJS-$(CONFIG_SMACKAUD_DECODER) += smacker.o
OBJS-$(CONFIG_SMACKER_DECODER) += smacker.o OBJS-$(CONFIG_SMACKER_DECODER) += smacker.o
OBJS-$(CONFIG_SMC_DECODER) += smc.o OBJS-$(CONFIG_SMC_DECODER) += smc.o
OBJS-$(CONFIG_SMVJPEG_DECODER) += smvjpegdec.o
OBJS-$(CONFIG_SNOW_DECODER) += snowdec.o snow.o snow_dwt.o OBJS-$(CONFIG_SNOW_DECODER) += snowdec.o snow.o snow_dwt.o
OBJS-$(CONFIG_SNOW_ENCODER) += snowenc.o snow.o snow_dwt.o \ OBJS-$(CONFIG_SNOW_ENCODER) += snowenc.o snow.o snow_dwt.o \
h263.o h263data.o ituh263enc.o h263.o h263data.o ituh263enc.o
@ -634,7 +613,6 @@ OBJS-$(CONFIG_SONIC_DECODER) += sonic.o
OBJS-$(CONFIG_SONIC_ENCODER) += sonic.o OBJS-$(CONFIG_SONIC_ENCODER) += sonic.o
OBJS-$(CONFIG_SONIC_LS_ENCODER) += sonic.o OBJS-$(CONFIG_SONIC_LS_ENCODER) += sonic.o
OBJS-$(CONFIG_SPEEDHQ_DECODER) += speedhq.o mpeg12.o mpeg12data.o simple_idct.o OBJS-$(CONFIG_SPEEDHQ_DECODER) += speedhq.o mpeg12.o mpeg12data.o simple_idct.o
OBJS-$(CONFIG_SPEEDHQ_ENCODER) += speedhq.o mpeg12data.o mpeg12enc.o speedhqenc.o
OBJS-$(CONFIG_SP5X_DECODER) += sp5xdec.o OBJS-$(CONFIG_SP5X_DECODER) += sp5xdec.o
OBJS-$(CONFIG_SRGC_DECODER) += mscc.o OBJS-$(CONFIG_SRGC_DECODER) += mscc.o
OBJS-$(CONFIG_SRT_DECODER) += srtdec.o ass.o htmlsubtitles.o OBJS-$(CONFIG_SRT_DECODER) += srtdec.o ass.o htmlsubtitles.o
@ -661,8 +639,8 @@ OBJS-$(CONFIG_TARGA_ENCODER) += targaenc.o rle.o
OBJS-$(CONFIG_TARGA_Y216_DECODER) += targa_y216dec.o OBJS-$(CONFIG_TARGA_Y216_DECODER) += targa_y216dec.o
OBJS-$(CONFIG_TDSC_DECODER) += tdsc.o OBJS-$(CONFIG_TDSC_DECODER) += tdsc.o
OBJS-$(CONFIG_TIERTEXSEQVIDEO_DECODER) += tiertexseqv.o OBJS-$(CONFIG_TIERTEXSEQVIDEO_DECODER) += tiertexseqv.o
OBJS-$(CONFIG_TIFF_DECODER) += tiff.o lzw.o faxcompr.o tiff_common.o OBJS-$(CONFIG_TIFF_DECODER) += tiff.o lzw.o faxcompr.o tiff_data.o tiff_common.o mjpegdec.o
OBJS-$(CONFIG_TIFF_ENCODER) += tiffenc.o rle.o lzwenc.o OBJS-$(CONFIG_TIFF_ENCODER) += tiffenc.o rle.o lzwenc.o tiff_data.o
OBJS-$(CONFIG_TMV_DECODER) += tmv.o cga_data.o OBJS-$(CONFIG_TMV_DECODER) += tmv.o cga_data.o
OBJS-$(CONFIG_TRUEHD_DECODER) += mlpdec.o mlpdsp.o OBJS-$(CONFIG_TRUEHD_DECODER) += mlpdec.o mlpdsp.o
OBJS-$(CONFIG_TRUEHD_ENCODER) += mlpenc.o mlp.o OBJS-$(CONFIG_TRUEHD_ENCODER) += mlpenc.o mlp.o
@ -674,12 +652,11 @@ OBJS-$(CONFIG_TSCC_DECODER) += tscc.o msrledec.o
OBJS-$(CONFIG_TSCC2_DECODER) += tscc2.o OBJS-$(CONFIG_TSCC2_DECODER) += tscc2.o
OBJS-$(CONFIG_TTA_DECODER) += tta.o ttadata.o ttadsp.o OBJS-$(CONFIG_TTA_DECODER) += tta.o ttadata.o ttadsp.o
OBJS-$(CONFIG_TTA_ENCODER) += ttaenc.o ttaencdsp.o ttadata.o OBJS-$(CONFIG_TTA_ENCODER) += ttaenc.o ttaencdsp.o ttadata.o
OBJS-$(CONFIG_TTML_ENCODER) += ttmlenc.o ass_split.o OBJS-$(CONFIG_TWINVQ_DECODER) += twinvqdec.o twinvq.o
OBJS-$(CONFIG_TWINVQ_DECODER) += twinvqdec.o twinvq.o metasound_data.o
OBJS-$(CONFIG_TXD_DECODER) += txd.o OBJS-$(CONFIG_TXD_DECODER) += txd.o
OBJS-$(CONFIG_ULTI_DECODER) += ulti.o OBJS-$(CONFIG_ULTI_DECODER) += ulti.o
OBJS-$(CONFIG_UTVIDEO_DECODER) += utvideodec.o utvideodsp.o OBJS-$(CONFIG_UTVIDEO_DECODER) += utvideodec.o utvideo.o utvideodsp.o
OBJS-$(CONFIG_UTVIDEO_ENCODER) += utvideoenc.o OBJS-$(CONFIG_UTVIDEO_ENCODER) += utvideoenc.o utvideo.o
OBJS-$(CONFIG_V210_DECODER) += v210dec.o OBJS-$(CONFIG_V210_DECODER) += v210dec.o
OBJS-$(CONFIG_V210_ENCODER) += v210enc.o OBJS-$(CONFIG_V210_ENCODER) += v210enc.o
OBJS-$(CONFIG_V210X_DECODER) += v210x.o OBJS-$(CONFIG_V210X_DECODER) += v210x.o
@ -697,7 +674,7 @@ OBJS-$(CONFIG_VC1_DECODER) += vc1dec.o vc1_block.o vc1_loopfilter.o
wmv2dsp.o wmv2data.o wmv2dsp.o wmv2data.o
OBJS-$(CONFIG_VC1_CUVID_DECODER) += cuviddec.o OBJS-$(CONFIG_VC1_CUVID_DECODER) += cuviddec.o
OBJS-$(CONFIG_VC1_MMAL_DECODER) += mmaldec.o OBJS-$(CONFIG_VC1_MMAL_DECODER) += mmaldec.o
OBJS-$(CONFIG_VC1_QSV_DECODER) += qsvdec.o OBJS-$(CONFIG_VC1_QSV_DECODER) += qsvdec_other.o
OBJS-$(CONFIG_VC1_V4L2M2M_DECODER) += v4l2_m2m_dec.o OBJS-$(CONFIG_VC1_V4L2M2M_DECODER) += v4l2_m2m_dec.o
OBJS-$(CONFIG_VC2_ENCODER) += vc2enc.o vc2enc_dwt.o diractab.o OBJS-$(CONFIG_VC2_ENCODER) += vc2enc.o vc2enc_dwt.o diractab.o
OBJS-$(CONFIG_VCR1_DECODER) += vcr1.o OBJS-$(CONFIG_VCR1_DECODER) += vcr1.o
@ -716,7 +693,7 @@ OBJS-$(CONFIG_VP7_DECODER) += vp8.o vp56rac.o
OBJS-$(CONFIG_VP8_DECODER) += vp8.o vp56rac.o OBJS-$(CONFIG_VP8_DECODER) += vp8.o vp56rac.o
OBJS-$(CONFIG_VP8_CUVID_DECODER) += cuviddec.o OBJS-$(CONFIG_VP8_CUVID_DECODER) += cuviddec.o
OBJS-$(CONFIG_VP8_MEDIACODEC_DECODER) += mediacodecdec.o OBJS-$(CONFIG_VP8_MEDIACODEC_DECODER) += mediacodecdec.o
OBJS-$(CONFIG_VP8_QSV_DECODER) += qsvdec.o OBJS-$(CONFIG_VP8_QSV_DECODER) += qsvdec_other.o
OBJS-$(CONFIG_VP8_RKMPP_DECODER) += rkmppdec.o OBJS-$(CONFIG_VP8_RKMPP_DECODER) += rkmppdec.o
OBJS-$(CONFIG_VP8_VAAPI_ENCODER) += vaapi_encode_vp8.o OBJS-$(CONFIG_VP8_VAAPI_ENCODER) += vaapi_encode_vp8.o
OBJS-$(CONFIG_VP8_V4L2M2M_DECODER) += v4l2_m2m_dec.o OBJS-$(CONFIG_VP8_V4L2M2M_DECODER) += v4l2_m2m_dec.o
@ -732,8 +709,8 @@ OBJS-$(CONFIG_VP9_QSV_ENCODER) += qsvenc_vp9.o
OBJS-$(CONFIG_VPLAYER_DECODER) += textdec.o ass.o OBJS-$(CONFIG_VPLAYER_DECODER) += textdec.o ass.o
OBJS-$(CONFIG_VP9_V4L2M2M_DECODER) += v4l2_m2m_dec.o OBJS-$(CONFIG_VP9_V4L2M2M_DECODER) += v4l2_m2m_dec.o
OBJS-$(CONFIG_VQA_DECODER) += vqavideo.o OBJS-$(CONFIG_VQA_DECODER) += vqavideo.o
OBJS-$(CONFIG_WAVPACK_DECODER) += wavpack.o wavpackdata.o dsd.o OBJS-$(CONFIG_WAVPACK_DECODER) += wavpack.o dsd.o
OBJS-$(CONFIG_WAVPACK_ENCODER) += wavpackdata.o wavpackenc.o OBJS-$(CONFIG_WAVPACK_ENCODER) += wavpackenc.o
OBJS-$(CONFIG_WCMV_DECODER) += wcmv.o OBJS-$(CONFIG_WCMV_DECODER) += wcmv.o
OBJS-$(CONFIG_WEBP_DECODER) += webp.o OBJS-$(CONFIG_WEBP_DECODER) += webp.o
OBJS-$(CONFIG_WEBVTT_DECODER) += webvttdec.o ass.o OBJS-$(CONFIG_WEBVTT_DECODER) += webvttdec.o ass.o
@ -834,7 +811,6 @@ OBJS-$(CONFIG_PCM_S64BE_DECODER) += pcm.o
OBJS-$(CONFIG_PCM_S64BE_ENCODER) += pcm.o OBJS-$(CONFIG_PCM_S64BE_ENCODER) += pcm.o
OBJS-$(CONFIG_PCM_S64LE_DECODER) += pcm.o OBJS-$(CONFIG_PCM_S64LE_DECODER) += pcm.o
OBJS-$(CONFIG_PCM_S64LE_ENCODER) += pcm.o OBJS-$(CONFIG_PCM_S64LE_ENCODER) += pcm.o
OBJS-$(CONFIG_PCM_SGA_DECODER) += pcm.o
OBJS-$(CONFIG_PCM_U8_DECODER) += pcm.o OBJS-$(CONFIG_PCM_U8_DECODER) += pcm.o
OBJS-$(CONFIG_PCM_U8_ENCODER) += pcm.o OBJS-$(CONFIG_PCM_U8_ENCODER) += pcm.o
OBJS-$(CONFIG_PCM_U16BE_DECODER) += pcm.o OBJS-$(CONFIG_PCM_U16BE_DECODER) += pcm.o
@ -859,7 +835,6 @@ OBJS-$(CONFIG_ADPCM_AFC_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_AGM_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_AGM_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_AICA_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_AICA_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_ARGO_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_ARGO_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_ARGO_ENCODER) += adpcm.o adpcmenc.o
OBJS-$(CONFIG_ADPCM_CT_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_CT_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_DTK_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_DTK_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_EA_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_EA_DECODER) += adpcm.o adpcm_data.o
@ -876,10 +851,8 @@ OBJS-$(CONFIG_ADPCM_G726LE_DECODER) += g726.o
OBJS-$(CONFIG_ADPCM_G726LE_ENCODER) += g726.o OBJS-$(CONFIG_ADPCM_G726LE_ENCODER) += g726.o
OBJS-$(CONFIG_ADPCM_IMA_AMV_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_IMA_AMV_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_IMA_ALP_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_IMA_ALP_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_IMA_ALP_ENCODER) += adpcmenc.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_IMA_APC_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_IMA_APC_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_IMA_APM_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_IMA_APM_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_IMA_APM_ENCODER) += adpcmenc.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_IMA_CUNNING_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_IMA_CUNNING_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_IMA_DAT4_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_IMA_DAT4_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_IMA_DK3_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_IMA_DK3_DECODER) += adpcm.o adpcm_data.o
@ -887,7 +860,6 @@ OBJS-$(CONFIG_ADPCM_IMA_DK4_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_IMA_EA_EACS_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_IMA_EA_EACS_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_IMA_EA_SEAD_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_IMA_EA_SEAD_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_IMA_ISS_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_IMA_ISS_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_IMA_MOFLEX_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_IMA_MTF_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_IMA_MTF_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_IMA_OKI_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_IMA_OKI_DECODER) += adpcm.o adpcm_data.o
OBJS-$(CONFIG_ADPCM_IMA_QT_DECODER) += adpcm.o adpcm_data.o OBJS-$(CONFIG_ADPCM_IMA_QT_DECODER) += adpcm.o adpcm_data.o
@ -924,25 +896,21 @@ OBJS-$(CONFIG_VAAPI) += vaapi_decode.o
OBJS-$(CONFIG_VIDEOTOOLBOX) += videotoolbox.o OBJS-$(CONFIG_VIDEOTOOLBOX) += videotoolbox.o
OBJS-$(CONFIG_VDPAU) += vdpau.o OBJS-$(CONFIG_VDPAU) += vdpau.o
OBJS-$(CONFIG_AV1_D3D11VA_HWACCEL) += dxva2_av1.o
OBJS-$(CONFIG_AV1_DXVA2_HWACCEL) += dxva2_av1.o
OBJS-$(CONFIG_AV1_NVDEC_HWACCEL) += nvdec_av1.o
OBJS-$(CONFIG_AV1_VAAPI_HWACCEL) += vaapi_av1.o
OBJS-$(CONFIG_H263_VAAPI_HWACCEL) += vaapi_mpeg4.o OBJS-$(CONFIG_H263_VAAPI_HWACCEL) += vaapi_mpeg4.o
OBJS-$(CONFIG_H263_VIDEOTOOLBOX_HWACCEL) += videotoolbox.o OBJS-$(CONFIG_H263_VIDEOTOOLBOX_HWACCEL) += videotoolbox.o
OBJS-$(CONFIG_H264_D3D11VA_HWACCEL) += dxva2_h264.o OBJS-$(CONFIG_H264_D3D11VA_HWACCEL) += dxva2_h264.o
OBJS-$(CONFIG_H264_DXVA2_HWACCEL) += dxva2_h264.o OBJS-$(CONFIG_H264_DXVA2_HWACCEL) += dxva2_h264.o
OBJS-$(CONFIG_H264_NVDEC_HWACCEL) += nvdec_h264.o OBJS-$(CONFIG_H264_NVDEC_HWACCEL) += nvdec_h264.o
OBJS-$(CONFIG_H264_QSV_HWACCEL) += qsvdec.o OBJS-$(CONFIG_H264_QSV_HWACCEL) += qsvdec_h2645.o
OBJS-$(CONFIG_H264_VAAPI_HWACCEL) += vaapi_h264.o OBJS-$(CONFIG_H264_VAAPI_HWACCEL) += vaapi_h264.o
OBJS-$(CONFIG_H264_VDPAU_HWACCEL) += vdpau_h264.o OBJS-$(CONFIG_H264_VDPAU_HWACCEL) += vdpau_h264.o
OBJS-$(CONFIG_H264_VIDEOTOOLBOX_HWACCEL) += videotoolbox.o OBJS-$(CONFIG_H264_VIDEOTOOLBOX_HWACCEL) += videotoolbox.o
OBJS-$(CONFIG_HEVC_D3D11VA_HWACCEL) += dxva2_hevc.o OBJS-$(CONFIG_HEVC_D3D11VA_HWACCEL) += dxva2_hevc.o
OBJS-$(CONFIG_HEVC_DXVA2_HWACCEL) += dxva2_hevc.o OBJS-$(CONFIG_HEVC_DXVA2_HWACCEL) += dxva2_hevc.o
OBJS-$(CONFIG_HEVC_NVDEC_HWACCEL) += nvdec_hevc.o OBJS-$(CONFIG_HEVC_NVDEC_HWACCEL) += nvdec_hevc.o
OBJS-$(CONFIG_HEVC_QSV_HWACCEL) += qsvdec.o OBJS-$(CONFIG_HEVC_QSV_HWACCEL) += qsvdec_h2645.o
OBJS-$(CONFIG_HEVC_VAAPI_HWACCEL) += vaapi_hevc.o h265_profile_level.o OBJS-$(CONFIG_HEVC_VAAPI_HWACCEL) += vaapi_hevc.o h265_profile_level.o
OBJS-$(CONFIG_HEVC_VDPAU_HWACCEL) += vdpau_hevc.o h265_profile_level.o OBJS-$(CONFIG_HEVC_VDPAU_HWACCEL) += vdpau_hevc.o
OBJS-$(CONFIG_MJPEG_NVDEC_HWACCEL) += nvdec_mjpeg.o OBJS-$(CONFIG_MJPEG_NVDEC_HWACCEL) += nvdec_mjpeg.o
OBJS-$(CONFIG_MJPEG_VAAPI_HWACCEL) += vaapi_mjpeg.o OBJS-$(CONFIG_MJPEG_VAAPI_HWACCEL) += vaapi_mjpeg.o
OBJS-$(CONFIG_MPEG1_NVDEC_HWACCEL) += nvdec_mpeg12.o OBJS-$(CONFIG_MPEG1_NVDEC_HWACCEL) += nvdec_mpeg12.o
@ -952,7 +920,7 @@ OBJS-$(CONFIG_MPEG1_XVMC_HWACCEL) += mpegvideo_xvmc.o
OBJS-$(CONFIG_MPEG2_D3D11VA_HWACCEL) += dxva2_mpeg2.o OBJS-$(CONFIG_MPEG2_D3D11VA_HWACCEL) += dxva2_mpeg2.o
OBJS-$(CONFIG_MPEG2_DXVA2_HWACCEL) += dxva2_mpeg2.o OBJS-$(CONFIG_MPEG2_DXVA2_HWACCEL) += dxva2_mpeg2.o
OBJS-$(CONFIG_MPEG2_NVDEC_HWACCEL) += nvdec_mpeg12.o OBJS-$(CONFIG_MPEG2_NVDEC_HWACCEL) += nvdec_mpeg12.o
OBJS-$(CONFIG_MPEG2_QSV_HWACCEL) += qsvdec.o OBJS-$(CONFIG_MPEG2_QSV_HWACCEL) += qsvdec_other.o
OBJS-$(CONFIG_MPEG2_VAAPI_HWACCEL) += vaapi_mpeg2.o OBJS-$(CONFIG_MPEG2_VAAPI_HWACCEL) += vaapi_mpeg2.o
OBJS-$(CONFIG_MPEG2_VDPAU_HWACCEL) += vdpau_mpeg12.o OBJS-$(CONFIG_MPEG2_VDPAU_HWACCEL) += vdpau_mpeg12.o
OBJS-$(CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL) += videotoolbox.o OBJS-$(CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL) += videotoolbox.o
@ -964,7 +932,7 @@ OBJS-$(CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL) += videotoolbox.o
OBJS-$(CONFIG_VC1_D3D11VA_HWACCEL) += dxva2_vc1.o OBJS-$(CONFIG_VC1_D3D11VA_HWACCEL) += dxva2_vc1.o
OBJS-$(CONFIG_VC1_DXVA2_HWACCEL) += dxva2_vc1.o OBJS-$(CONFIG_VC1_DXVA2_HWACCEL) += dxva2_vc1.o
OBJS-$(CONFIG_VC1_NVDEC_HWACCEL) += nvdec_vc1.o OBJS-$(CONFIG_VC1_NVDEC_HWACCEL) += nvdec_vc1.o
OBJS-$(CONFIG_VC1_QSV_HWACCEL) += qsvdec.o OBJS-$(CONFIG_VC1_QSV_HWACCEL) += qsvdec_other.o
OBJS-$(CONFIG_VC1_VAAPI_HWACCEL) += vaapi_vc1.o OBJS-$(CONFIG_VC1_VAAPI_HWACCEL) += vaapi_vc1.o
OBJS-$(CONFIG_VC1_VDPAU_HWACCEL) += vdpau_vc1.o OBJS-$(CONFIG_VC1_VDPAU_HWACCEL) += vdpau_vc1.o
OBJS-$(CONFIG_VP8_NVDEC_HWACCEL) += nvdec_vp8.o OBJS-$(CONFIG_VP8_NVDEC_HWACCEL) += nvdec_vp8.o
@ -974,24 +942,26 @@ OBJS-$(CONFIG_VP9_DXVA2_HWACCEL) += dxva2_vp9.o
OBJS-$(CONFIG_VP9_NVDEC_HWACCEL) += nvdec_vp9.o OBJS-$(CONFIG_VP9_NVDEC_HWACCEL) += nvdec_vp9.o
OBJS-$(CONFIG_VP9_VAAPI_HWACCEL) += vaapi_vp9.o OBJS-$(CONFIG_VP9_VAAPI_HWACCEL) += vaapi_vp9.o
OBJS-$(CONFIG_VP9_VDPAU_HWACCEL) += vdpau_vp9.o OBJS-$(CONFIG_VP9_VDPAU_HWACCEL) += vdpau_vp9.o
OBJS-$(CONFIG_VP8_QSV_HWACCEL) += qsvdec.o OBJS-$(CONFIG_VP8_QSV_HWACCEL) += qsvdec_other.o
# libavformat dependencies # libavformat dependencies
OBJS-$(CONFIG_ISO_MEDIA) += mpeg4audio.o mpegaudiodata.o OBJS-$(CONFIG_ISO_MEDIA) += mpeg4audio.o mpegaudiodata.o
OBJS-$(CONFIG_ADTS_MUXER) += mpeg4audio.o OBJS-$(CONFIG_ADTS_MUXER) += mpeg4audio.o
OBJS-$(CONFIG_CAF_DEMUXER) += ac3tab.o
OBJS-$(CONFIG_CODEC2_DEMUXER) += codec2utils.o OBJS-$(CONFIG_CODEC2_DEMUXER) += codec2utils.o
OBJS-$(CONFIG_CODEC2_MUXER) += codec2utils.o OBJS-$(CONFIG_CODEC2_MUXER) += codec2utils.o
OBJS-$(CONFIG_CODEC2RAW_DEMUXER) += codec2utils.o OBJS-$(CONFIG_CODEC2RAW_DEMUXER) += codec2utils.o
OBJS-$(CONFIG_DNXHD_DEMUXER) += dnxhddata.o OBJS-$(CONFIG_DNXHD_DEMUXER) += dnxhddata.o
OBJS-$(CONFIG_FITS_DEMUXER) += fits.o OBJS-$(CONFIG_FITS_DEMUXER) += fits.o
OBJS-$(CONFIG_FLV_DEMUXER) += mpeg4audio.o
OBJS-$(CONFIG_LATM_MUXER) += mpeg4audio.o OBJS-$(CONFIG_LATM_MUXER) += mpeg4audio.o
OBJS-$(CONFIG_MATROSKA_AUDIO_MUXER) += mpeg4audio.o OBJS-$(CONFIG_MATROSKA_AUDIO_MUXER) += mpeg4audio.o
OBJS-$(CONFIG_MATROSKA_MUXER) += mpeg4audio.o OBJS-$(CONFIG_MATROSKA_MUXER) += mpeg4audio.o
OBJS-$(CONFIG_MOV_DEMUXER) += ac3tab.o OBJS-$(CONFIG_MOV_DEMUXER) += ac3tab.o
OBJS-$(CONFIG_MATROSKA_DEMUXER) += mpeg4audio.o
OBJS-$(CONFIG_MXF_MUXER) += dnxhddata.o OBJS-$(CONFIG_MXF_MUXER) += dnxhddata.o
OBJS-$(CONFIG_NUT_MUXER) += mpegaudiodata.o OBJS-$(CONFIG_NUT_MUXER) += mpegaudiodata.o
OBJS-$(CONFIG_NUT_DEMUXER) += mpegaudiodata.o mpeg4audio.o
OBJS-$(CONFIG_RTP_MUXER) += mpeg4audio.o OBJS-$(CONFIG_RTP_MUXER) += mpeg4audio.o
OBJS-$(CONFIG_SPDIF_MUXER) += dca.o OBJS-$(CONFIG_SPDIF_MUXER) += dca.o
OBJS-$(CONFIG_TAK_DEMUXER) += tak.o OBJS-$(CONFIG_TAK_DEMUXER) += tak.o
@ -1054,10 +1024,8 @@ OBJS-$(CONFIG_LIBRAV1E_ENCODER) += librav1e.o
OBJS-$(CONFIG_LIBSHINE_ENCODER) += libshine.o OBJS-$(CONFIG_LIBSHINE_ENCODER) += libshine.o
OBJS-$(CONFIG_LIBSPEEX_DECODER) += libspeexdec.o OBJS-$(CONFIG_LIBSPEEX_DECODER) += libspeexdec.o
OBJS-$(CONFIG_LIBSPEEX_ENCODER) += libspeexenc.o OBJS-$(CONFIG_LIBSPEEX_ENCODER) += libspeexenc.o
OBJS-$(CONFIG_LIBSVTAV1_ENCODER) += libsvtav1.o
OBJS-$(CONFIG_LIBTHEORA_ENCODER) += libtheoraenc.o OBJS-$(CONFIG_LIBTHEORA_ENCODER) += libtheoraenc.o
OBJS-$(CONFIG_LIBTWOLAME_ENCODER) += libtwolame.o OBJS-$(CONFIG_LIBTWOLAME_ENCODER) += libtwolame.o
OBJS-$(CONFIG_LIBUAVS3D_DECODER) += libuavs3d.o
OBJS-$(CONFIG_LIBVO_AMRWBENC_ENCODER) += libvo-amrwbenc.o OBJS-$(CONFIG_LIBVO_AMRWBENC_ENCODER) += libvo-amrwbenc.o
OBJS-$(CONFIG_LIBVORBIS_DECODER) += libvorbisdec.o OBJS-$(CONFIG_LIBVORBIS_DECODER) += libvorbisdec.o
OBJS-$(CONFIG_LIBVORBIS_ENCODER) += libvorbisenc.o \ OBJS-$(CONFIG_LIBVORBIS_ENCODER) += libvorbisenc.o \
@ -1066,6 +1034,7 @@ OBJS-$(CONFIG_LIBVPX_VP8_DECODER) += libvpxdec.o
OBJS-$(CONFIG_LIBVPX_VP8_ENCODER) += libvpxenc.o OBJS-$(CONFIG_LIBVPX_VP8_ENCODER) += libvpxenc.o
OBJS-$(CONFIG_LIBVPX_VP9_DECODER) += libvpxdec.o libvpx.o OBJS-$(CONFIG_LIBVPX_VP9_DECODER) += libvpxdec.o libvpx.o
OBJS-$(CONFIG_LIBVPX_VP9_ENCODER) += libvpxenc.o libvpx.o OBJS-$(CONFIG_LIBVPX_VP9_ENCODER) += libvpxenc.o libvpx.o
OBJS-$(CONFIG_LIBWAVPACK_ENCODER) += libwavpackenc.o
OBJS-$(CONFIG_LIBWEBP_ENCODER) += libwebpenc_common.o libwebpenc.o OBJS-$(CONFIG_LIBWEBP_ENCODER) += libwebpenc_common.o libwebpenc.o
OBJS-$(CONFIG_LIBWEBP_ANIM_ENCODER) += libwebpenc_common.o libwebpenc_animencoder.o OBJS-$(CONFIG_LIBWEBP_ANIM_ENCODER) += libwebpenc_common.o libwebpenc_animencoder.o
OBJS-$(CONFIG_LIBX262_ENCODER) += libx264.o OBJS-$(CONFIG_LIBX262_ENCODER) += libx264.o
@ -1084,21 +1053,19 @@ OBJS-$(CONFIG_AC3_PARSER) += ac3tab.o aac_ac3_parser.o
OBJS-$(CONFIG_ADX_PARSER) += adx_parser.o adx.o OBJS-$(CONFIG_ADX_PARSER) += adx_parser.o adx.o
OBJS-$(CONFIG_AV1_PARSER) += av1_parser.o av1_parse.o OBJS-$(CONFIG_AV1_PARSER) += av1_parser.o av1_parse.o
OBJS-$(CONFIG_AVS2_PARSER) += avs2_parser.o OBJS-$(CONFIG_AVS2_PARSER) += avs2_parser.o
OBJS-$(CONFIG_AVS3_PARSER) += avs3_parser.o
OBJS-$(CONFIG_BMP_PARSER) += bmp_parser.o OBJS-$(CONFIG_BMP_PARSER) += bmp_parser.o
OBJS-$(CONFIG_CAVSVIDEO_PARSER) += cavs_parser.o OBJS-$(CONFIG_CAVSVIDEO_PARSER) += cavs_parser.o
OBJS-$(CONFIG_COOK_PARSER) += cook_parser.o OBJS-$(CONFIG_COOK_PARSER) += cook_parser.o
OBJS-$(CONFIG_CRI_PARSER) += cri_parser.o
OBJS-$(CONFIG_DCA_PARSER) += dca_parser.o dca_exss.o dca.o OBJS-$(CONFIG_DCA_PARSER) += dca_parser.o dca_exss.o dca.o
OBJS-$(CONFIG_DIRAC_PARSER) += dirac_parser.o OBJS-$(CONFIG_DIRAC_PARSER) += dirac_parser.o
OBJS-$(CONFIG_DNXHD_PARSER) += dnxhd_parser.o dnxhddata.o OBJS-$(CONFIG_DNXHD_PARSER) += dnxhd_parser.o dnxhddata.o
OBJS-$(CONFIG_DOLBY_E_PARSER) += dolby_e_parser.o dolby_e_parse.o
OBJS-$(CONFIG_DPX_PARSER) += dpx_parser.o OBJS-$(CONFIG_DPX_PARSER) += dpx_parser.o
OBJS-$(CONFIG_DVAUDIO_PARSER) += dvaudio_parser.o OBJS-$(CONFIG_DVAUDIO_PARSER) += dvaudio_parser.o
OBJS-$(CONFIG_DVBSUB_PARSER) += dvbsub_parser.o OBJS-$(CONFIG_DVBSUB_PARSER) += dvbsub_parser.o
OBJS-$(CONFIG_DVD_NAV_PARSER) += dvd_nav_parser.o OBJS-$(CONFIG_DVD_NAV_PARSER) += dvd_nav_parser.o
OBJS-$(CONFIG_DVDSUB_PARSER) += dvdsub_parser.o OBJS-$(CONFIG_DVDSUB_PARSER) += dvdsub_parser.o
OBJS-$(CONFIG_FLAC_PARSER) += flac_parser.o flacdata.o flac.o OBJS-$(CONFIG_FLAC_PARSER) += flac_parser.o flacdata.o flac.o \
vorbis_data.o
OBJS-$(CONFIG_G723_1_PARSER) += g723_1_parser.o OBJS-$(CONFIG_G723_1_PARSER) += g723_1_parser.o
OBJS-$(CONFIG_G729_PARSER) += g729_parser.o OBJS-$(CONFIG_G729_PARSER) += g729_parser.o
OBJS-$(CONFIG_GIF_PARSER) += gif_parser.o OBJS-$(CONFIG_GIF_PARSER) += gif_parser.o
@ -1107,7 +1074,6 @@ OBJS-$(CONFIG_H261_PARSER) += h261_parser.o
OBJS-$(CONFIG_H263_PARSER) += h263_parser.o OBJS-$(CONFIG_H263_PARSER) += h263_parser.o
OBJS-$(CONFIG_H264_PARSER) += h264_parser.o h264_sei.o h264data.o OBJS-$(CONFIG_H264_PARSER) += h264_parser.o h264_sei.o h264data.o
OBJS-$(CONFIG_HEVC_PARSER) += hevc_parser.o hevc_data.o OBJS-$(CONFIG_HEVC_PARSER) += hevc_parser.o hevc_data.o
OBJS-$(CONFIG_IPU_PARSER) += ipu_parser.o
OBJS-$(CONFIG_JPEG2000_PARSER) += jpeg2000_parser.o OBJS-$(CONFIG_JPEG2000_PARSER) += jpeg2000_parser.o
OBJS-$(CONFIG_MJPEG_PARSER) += mjpeg_parser.o OBJS-$(CONFIG_MJPEG_PARSER) += mjpeg_parser.o
OBJS-$(CONFIG_MLP_PARSER) += mlp_parse.o mlp_parser.o mlp.o OBJS-$(CONFIG_MLP_PARSER) += mlp_parse.o mlp_parser.o mlp.o
@ -1132,7 +1098,6 @@ OBJS-$(CONFIG_VP3_PARSER) += vp3_parser.o
OBJS-$(CONFIG_VP8_PARSER) += vp8_parser.o OBJS-$(CONFIG_VP8_PARSER) += vp8_parser.o
OBJS-$(CONFIG_VP9_PARSER) += vp9_parser.o OBJS-$(CONFIG_VP9_PARSER) += vp9_parser.o
OBJS-$(CONFIG_WEBP_PARSER) += webp_parser.o OBJS-$(CONFIG_WEBP_PARSER) += webp_parser.o
OBJS-$(CONFIG_XBM_PARSER) += xbm_parser.o
OBJS-$(CONFIG_XMA_PARSER) += xma_parser.o OBJS-$(CONFIG_XMA_PARSER) += xma_parser.o
# bitstream filters # bitstream filters
@ -1167,7 +1132,6 @@ OBJS-$(CONFIG_OPUS_METADATA_BSF) += opus_metadata_bsf.o
OBJS-$(CONFIG_PCM_RECHUNK_BSF) += pcm_rechunk_bsf.o OBJS-$(CONFIG_PCM_RECHUNK_BSF) += pcm_rechunk_bsf.o
OBJS-$(CONFIG_PRORES_METADATA_BSF) += prores_metadata_bsf.o OBJS-$(CONFIG_PRORES_METADATA_BSF) += prores_metadata_bsf.o
OBJS-$(CONFIG_REMOVE_EXTRADATA_BSF) += remove_extradata_bsf.o OBJS-$(CONFIG_REMOVE_EXTRADATA_BSF) += remove_extradata_bsf.o
OBJS-$(CONFIG_SETTS_BSF) += setts_bsf.o
OBJS-$(CONFIG_TEXT2MOVSUB_BSF) += movsub_bsf.o OBJS-$(CONFIG_TEXT2MOVSUB_BSF) += movsub_bsf.o
OBJS-$(CONFIG_TRACE_HEADERS_BSF) += trace_headers_bsf.o OBJS-$(CONFIG_TRACE_HEADERS_BSF) += trace_headers_bsf.o
OBJS-$(CONFIG_TRUEHD_CORE_BSF) += truehd_core_bsf.o mlp_parse.o mlp.o OBJS-$(CONFIG_TRUEHD_CORE_BSF) += truehd_core_bsf.o mlp_parse.o mlp.o
@ -1207,9 +1171,10 @@ SKIPHEADERS-$(CONFIG_MEDIAFOUNDATION) += mf_utils.h
SKIPHEADERS-$(CONFIG_NVDEC) += nvdec.h SKIPHEADERS-$(CONFIG_NVDEC) += nvdec.h
SKIPHEADERS-$(CONFIG_NVENC) += nvenc.h SKIPHEADERS-$(CONFIG_NVENC) += nvenc.h
SKIPHEADERS-$(CONFIG_QSV) += qsv.h qsv_internal.h SKIPHEADERS-$(CONFIG_QSV) += qsv.h qsv_internal.h
SKIPHEADERS-$(CONFIG_QSVDEC) += qsvdec.h
SKIPHEADERS-$(CONFIG_QSVENC) += qsvenc.h SKIPHEADERS-$(CONFIG_QSVENC) += qsvenc.h
SKIPHEADERS-$(CONFIG_XVMC) += xvmc.h SKIPHEADERS-$(CONFIG_XVMC) += xvmc.h
SKIPHEADERS-$(CONFIG_VAAPI) += vaapi_decode.h vaapi_hevc.h vaapi_encode.h SKIPHEADERS-$(CONFIG_VAAPI) += vaapi_decode.h vaapi_encode.h
SKIPHEADERS-$(CONFIG_VDPAU) += vdpau.h vdpau_internal.h SKIPHEADERS-$(CONFIG_VDPAU) += vdpau.h vdpau_internal.h
SKIPHEADERS-$(CONFIG_VIDEOTOOLBOX) += videotoolbox.h vt_internal.h SKIPHEADERS-$(CONFIG_VIDEOTOOLBOX) += videotoolbox.h vt_internal.h
SKIPHEADERS-$(CONFIG_V4L2_M2M) += v4l2_buffers.h v4l2_context.h v4l2_m2m.h SKIPHEADERS-$(CONFIG_V4L2_M2M) += v4l2_buffers.h v4l2_context.h v4l2_m2m.h
@ -1221,15 +1186,16 @@ TESTPROGS = avpacket \
imgconvert \ imgconvert \
jpeg2000dwt \ jpeg2000dwt \
mathops \ mathops \
options \
mjpegenc_huffman \
utils \ utils \
TESTPROGS-$(CONFIG_CABAC) += cabac TESTPROGS-$(CONFIG_CABAC) += cabac
TESTPROGS-$(CONFIG_DCT) += avfft TESTPROGS-$(CONFIG_DCT) += avfft
TESTPROGS-$(CONFIG_FFT) += fft fft-fixed32 TESTPROGS-$(CONFIG_FFT) += fft fft-fixed fft-fixed32
TESTPROGS-$(CONFIG_GOLOMB) += golomb TESTPROGS-$(CONFIG_GOLOMB) += golomb
TESTPROGS-$(CONFIG_IDCTDSP) += dct TESTPROGS-$(CONFIG_IDCTDSP) += dct
TESTPROGS-$(CONFIG_IIRFILTER) += iirfilter TESTPROGS-$(CONFIG_IIRFILTER) += iirfilter
TESTPROGS-$(CONFIG_MJPEG_ENCODER) += mjpegenc_huffman
TESTPROGS-$(HAVE_MMX) += motion TESTPROGS-$(HAVE_MMX) += motion
TESTPROGS-$(CONFIG_MPEGVIDEO) += mpeg12framerate TESTPROGS-$(CONFIG_MPEGVIDEO) += mpeg12framerate
TESTPROGS-$(CONFIG_H264_METADATA_BSF) += h264_levels TESTPROGS-$(CONFIG_H264_METADATA_BSF) += h264_levels
@ -1249,7 +1215,6 @@ HOSTPROGS = aacps_tablegen \
dv_tablegen \ dv_tablegen \
motionpixels_tablegen \ motionpixels_tablegen \
mpegaudio_tablegen \ mpegaudio_tablegen \
mpegaudiodec_common_tablegen \
pcm_tablegen \ pcm_tablegen \
qdm2_tablegen \ qdm2_tablegen \
sinewin_tablegen \ sinewin_tablegen \
@ -1274,8 +1239,7 @@ endif
GEN_HEADERS = cbrt_tables.h cbrt_fixed_tables.h aacps_tables.h aacps_fixed_tables.h \ GEN_HEADERS = cbrt_tables.h cbrt_fixed_tables.h aacps_tables.h aacps_fixed_tables.h \
dv_tables.h \ dv_tables.h \
sinewin_tables.h sinewin_fixed_tables.h mpegaudio_tables.h \ sinewin_tables.h sinewin_fixed_tables.h mpegaudio_tables.h motionpixels_tables.h \
mpegaudiodec_common_tables.h motionpixels_tables.h \
pcm_tables.h qdm2_tables.h pcm_tables.h qdm2_tables.h
GEN_HEADERS := $(addprefix $(SUBDIR), $(GEN_HEADERS)) GEN_HEADERS := $(addprefix $(SUBDIR), $(GEN_HEADERS))
@ -1285,15 +1249,15 @@ $(GEN_HEADERS): $(SUBDIR)%_tables.h: $(SUBDIR)%_tablegen$(HOSTEXESUF)
ifdef CONFIG_HARDCODED_TABLES ifdef CONFIG_HARDCODED_TABLES
$(SUBDIR)cbrt_data.o: $(SUBDIR)cbrt_tables.h $(SUBDIR)cbrt_data.o: $(SUBDIR)cbrt_tables.h
$(SUBDIR)cbrt_data_fixed.o: $(SUBDIR)cbrt_fixed_tables.h $(SUBDIR)cbrt_data_fixed.o: $(SUBDIR)cbrt_fixed_tables.h
$(SUBDIR)aacdec_fixed.o: $(SUBDIR)sinewin_fixed_tables.h
$(SUBDIR)aacps_float.o: $(SUBDIR)aacps_tables.h $(SUBDIR)aacps_float.o: $(SUBDIR)aacps_tables.h
$(SUBDIR)aacps_fixed.o: $(SUBDIR)aacps_fixed_tables.h $(SUBDIR)aacps_fixed.o: $(SUBDIR)aacps_fixed_tables.h
$(SUBDIR)aactab_fixed.o: $(SUBDIR)aac_fixed_tables.h
$(SUBDIR)dvenc.o: $(SUBDIR)dv_tables.h $(SUBDIR)dvenc.o: $(SUBDIR)dv_tables.h
$(SUBDIR)motionpixels.o: $(SUBDIR)motionpixels_tables.h $(SUBDIR)motionpixels.o: $(SUBDIR)motionpixels_tables.h
$(SUBDIR)mpegaudiodec_common.o: $(SUBDIR)mpegaudiodec_common_tables.h
$(SUBDIR)mpegaudiodec_fixed.o: $(SUBDIR)mpegaudio_tables.h $(SUBDIR)mpegaudiodec_fixed.o: $(SUBDIR)mpegaudio_tables.h
$(SUBDIR)mpegaudiodec_float.o: $(SUBDIR)mpegaudio_tables.h $(SUBDIR)mpegaudiodec_float.o: $(SUBDIR)mpegaudio_tables.h
$(SUBDIR)pcm.o: $(SUBDIR)pcm_tables.h $(SUBDIR)pcm.o: $(SUBDIR)pcm_tables.h
$(SUBDIR)qdm2.o: $(SUBDIR)qdm2_tables.h $(SUBDIR)qdm2.o: $(SUBDIR)qdm2_tables.h
$(SUBDIR)sinewin.o: $(SUBDIR)sinewin_tables.h $(SUBDIR)sinewin.o: $(SUBDIR)sinewin_tables.h
$(SUBDIR)sinewin_fixed.o: $(SUBDIR)sinewin_fixed_tables.h
endif endif

View file

@ -107,16 +107,13 @@ static void render_charset(AVCodecContext *avctx, uint8_t *charset,
uint8_t pix; uint8_t pix;
int lowdiff, highdiff; int lowdiff, highdiff;
int *best_cb = c->mc_best_cb; int *best_cb = c->mc_best_cb;
uint8_t index1[256]; static uint8_t index1[256];
uint8_t index2[256]; static uint8_t index2[256];
uint8_t dither[256]; static uint8_t dither[256];
int i; int i;
int distance; int distance;
/* Generate lookup-tables for dither and index before looping. /* generate lookup-tables for dither and index before looping */
* This code relies on c->mc_luma_vals[c->mc_pal_size - 1] being
* the maximum of all the mc_luma_vals values and on the minimum
* being zero; this ensures that dither is properly initialized. */
i = 0; i = 0;
for (a=0; a < 256; a++) { for (a=0; a < 256; a++) {
if(i < c->mc_pal_size -1 && a == c->mc_luma_vals[i + 1]) { if(i < c->mc_pal_size -1 && a == c->mc_luma_vals[i + 1]) {
@ -410,7 +407,6 @@ AVCodec ff_a64multi_encoder = {
.close = a64multi_close_encoder, .close = a64multi_close_encoder,
.pix_fmts = (const enum AVPixelFormat[]) {AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE}, .pix_fmts = (const enum AVPixelFormat[]) {AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE},
.capabilities = AV_CODEC_CAP_DELAY, .capabilities = AV_CODEC_CAP_DELAY,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_INIT_THREADSAFE,
}; };
#endif #endif
#if CONFIG_A64MULTI5_ENCODER #if CONFIG_A64MULTI5_ENCODER
@ -425,6 +421,5 @@ AVCodec ff_a64multi5_encoder = {
.close = a64multi_close_encoder, .close = a64multi_close_encoder,
.pix_fmts = (const enum AVPixelFormat[]) {AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE}, .pix_fmts = (const enum AVPixelFormat[]) {AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE},
.capabilities = AV_CODEC_CAP_DELAY, .capabilities = AV_CODEC_CAP_DELAY,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_INIT_THREADSAFE,
}; };
#endif #endif

View file

@ -34,7 +34,6 @@
#include "aac_defines.h" #include "aac_defines.h"
#include "libavutil/float_dsp.h" #include "libavutil/float_dsp.h"
#include "libavutil/fixed_dsp.h" #include "libavutil/fixed_dsp.h"
#include "libavutil/mem_internal.h"
#include "avcodec.h" #include "avcodec.h"
#if !USE_FIXED #if !USE_FIXED
#include "mdct15.h" #include "mdct15.h"

View file

@ -89,7 +89,7 @@ get_next:
the frame). */ the frame). */
if (avctx->codec_id != AV_CODEC_ID_AAC) { if (avctx->codec_id != AV_CODEC_ID_AAC) {
avctx->sample_rate = s->sample_rate; avctx->sample_rate = s->sample_rate;
if (!CONFIG_EAC3_DECODER || avctx->codec_id != AV_CODEC_ID_EAC3) { if (avctx->codec_id != AV_CODEC_ID_EAC3) {
avctx->channels = s->channels; avctx->channels = s->channels;
avctx->channel_layout = s->channel_layout; avctx->channel_layout = s->channel_layout;
} }
@ -97,12 +97,8 @@ get_next:
avctx->audio_service_type = s->service_type; avctx->audio_service_type = s->service_type;
} }
/* Calculate the average bit rate */ if (avctx->codec_id != AV_CODEC_ID_EAC3)
s->frame_number++; avctx->bit_rate = s->bit_rate;
if (!CONFIG_EAC3_DECODER || avctx->codec_id != AV_CODEC_ID_EAC3) {
avctx->bit_rate +=
(s->bit_rate - avctx->bit_rate) / s->frame_number;
}
} }
return i; return i;

View file

@ -55,7 +55,6 @@ typedef struct AACAC3ParseContext {
uint64_t state; uint64_t state;
int need_next_header; int need_next_header;
int frame_number;
enum AVCodecID codec_id; enum AVCodecID codec_id;
} AACAC3ParseContext; } AACAC3ParseContext;

View file

@ -34,7 +34,6 @@
#define AAC_RENAME(x) x ## _fixed #define AAC_RENAME(x) x ## _fixed
#define AAC_RENAME_32(x) x ## _fixed_32 #define AAC_RENAME_32(x) x ## _fixed_32
#define AAC_RENAME2(x) x ## _fixed
typedef int INTFLOAT; typedef int INTFLOAT;
typedef unsigned UINTFLOAT; ///< Equivalent to INTFLOAT, Used as temporal cast to avoid undefined sign overflow operations. typedef unsigned UINTFLOAT; ///< Equivalent to INTFLOAT, Used as temporal cast to avoid undefined sign overflow operations.
typedef int64_t INT64FLOAT; typedef int64_t INT64FLOAT;
@ -84,7 +83,6 @@ typedef int AAC_SIGNE;
#define AAC_RENAME(x) x #define AAC_RENAME(x) x
#define AAC_RENAME_32(x) x #define AAC_RENAME_32(x) x
#define AAC_RENAME2(x) ff_ ## x
typedef float INTFLOAT; typedef float INTFLOAT;
typedef float UINTFLOAT; typedef float UINTFLOAT;
typedef float INT64FLOAT; typedef float INT64FLOAT;

View file

@ -69,11 +69,6 @@
# include "mips/aacdec_mips.h" # include "mips/aacdec_mips.h"
#endif #endif
DECLARE_ALIGNED(32, static INTFLOAT, AAC_RENAME(sine_120))[120];
DECLARE_ALIGNED(32, static INTFLOAT, AAC_RENAME(sine_960))[960];
DECLARE_ALIGNED(32, static INTFLOAT, AAC_RENAME(aac_kbd_long_960))[960];
DECLARE_ALIGNED(32, static INTFLOAT, AAC_RENAME(aac_kbd_short_120))[120];
static av_always_inline void reset_predict_state(PredictorState *ps) static av_always_inline void reset_predict_state(PredictorState *ps)
{ {
ps->r0 = 0.0f; ps->r0 = 0.0f;

View file

@ -70,7 +70,7 @@
#include "fft.h" #include "fft.h"
#include "lpc.h" #include "lpc.h"
#include "kbdwin.h" #include "kbdwin.h"
#include "sinewin_fixed_tablegen.h" #include "sinewin.h"
#include "aac.h" #include "aac.h"
#include "aactab.h" #include "aactab.h"
@ -86,9 +86,6 @@
#include <math.h> #include <math.h>
#include <string.h> #include <string.h>
DECLARE_ALIGNED(32, static int, AAC_RENAME2(aac_kbd_long_1024))[1024];
DECLARE_ALIGNED(32, static int, AAC_RENAME2(aac_kbd_short_128))[128];
static av_always_inline void reset_predict_state(PredictorState *ps) static av_always_inline void reset_predict_state(PredictorState *ps)
{ {
ps->r0.mant = 0; ps->r0.mant = 0;
@ -158,9 +155,9 @@ static void vector_pow43(int *coefs, int len)
for (i=0; i<len; i++) { for (i=0; i<len; i++) {
coef = coefs[i]; coef = coefs[i];
if (coef < 0) if (coef < 0)
coef = -(int)ff_cbrt_tab_fixed[(-coef) & 8191]; coef = -(int)ff_cbrt_tab_fixed[-coef];
else else
coef = (int)ff_cbrt_tab_fixed[ coef & 8191]; coef = (int)ff_cbrt_tab_fixed[coef];
coefs[i] = coef; coefs[i] = coef;
} }
} }

View file

@ -198,7 +198,7 @@ struct elem_to_channel {
static int assign_pair(struct elem_to_channel e2c_vec[MAX_ELEM_ID], static int assign_pair(struct elem_to_channel e2c_vec[MAX_ELEM_ID],
uint8_t (*layout_map)[3], int offset, uint64_t left, uint8_t (*layout_map)[3], int offset, uint64_t left,
uint64_t right, int pos, uint64_t *layout) uint64_t right, int pos)
{ {
if (layout_map[offset][0] == TYPE_CPE) { if (layout_map[offset][0] == TYPE_CPE) {
e2c_vec[offset] = (struct elem_to_channel) { e2c_vec[offset] = (struct elem_to_channel) {
@ -207,9 +207,6 @@ static int assign_pair(struct elem_to_channel e2c_vec[MAX_ELEM_ID],
.elem_id = layout_map[offset][1], .elem_id = layout_map[offset][1],
.aac_position = pos .aac_position = pos
}; };
if (e2c_vec[offset].av_position != UINT64_MAX)
*layout |= e2c_vec[offset].av_position;
return 1; return 1;
} else { } else {
e2c_vec[offset] = (struct elem_to_channel) { e2c_vec[offset] = (struct elem_to_channel) {
@ -224,12 +221,6 @@ static int assign_pair(struct elem_to_channel e2c_vec[MAX_ELEM_ID],
.elem_id = layout_map[offset + 1][1], .elem_id = layout_map[offset + 1][1],
.aac_position = pos .aac_position = pos
}; };
if (left != UINT64_MAX)
*layout |= left;
if (right != UINT64_MAX)
*layout |= right;
return 2; return 2;
} }
} }
@ -266,13 +257,12 @@ static int count_paired_channels(uint8_t (*layout_map)[3], int tags, int pos,
return num_pos_channels; return num_pos_channels;
} }
#define PREFIX_FOR_22POINT2 (AV_CH_LAYOUT_7POINT1_WIDE_BACK|AV_CH_BACK_CENTER|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_LOW_FREQUENCY_2)
static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags) static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
{ {
int i, n, total_non_cc_elements; int i, n, total_non_cc_elements;
struct elem_to_channel e2c_vec[4 * MAX_ELEM_ID] = { { 0 } }; struct elem_to_channel e2c_vec[4 * MAX_ELEM_ID] = { { 0 } };
int num_front_channels, num_side_channels, num_back_channels; int num_front_channels, num_side_channels, num_back_channels;
uint64_t layout = 0; uint64_t layout;
if (FF_ARRAY_ELEMS(e2c_vec) < tags) if (FF_ARRAY_ELEMS(e2c_vec) < tags)
return 0; return 0;
@ -304,7 +294,6 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
.elem_id = layout_map[i][1], .elem_id = layout_map[i][1],
.aac_position = AAC_CHANNEL_FRONT .aac_position = AAC_CHANNEL_FRONT
}; };
layout |= e2c_vec[i].av_position;
i++; i++;
num_front_channels--; num_front_channels--;
} }
@ -312,21 +301,21 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
i += assign_pair(e2c_vec, layout_map, i, i += assign_pair(e2c_vec, layout_map, i,
AV_CH_FRONT_LEFT_OF_CENTER, AV_CH_FRONT_LEFT_OF_CENTER,
AV_CH_FRONT_RIGHT_OF_CENTER, AV_CH_FRONT_RIGHT_OF_CENTER,
AAC_CHANNEL_FRONT, &layout); AAC_CHANNEL_FRONT);
num_front_channels -= 2; num_front_channels -= 2;
} }
if (num_front_channels >= 2) { if (num_front_channels >= 2) {
i += assign_pair(e2c_vec, layout_map, i, i += assign_pair(e2c_vec, layout_map, i,
AV_CH_FRONT_LEFT, AV_CH_FRONT_LEFT,
AV_CH_FRONT_RIGHT, AV_CH_FRONT_RIGHT,
AAC_CHANNEL_FRONT, &layout); AAC_CHANNEL_FRONT);
num_front_channels -= 2; num_front_channels -= 2;
} }
while (num_front_channels >= 2) { while (num_front_channels >= 2) {
i += assign_pair(e2c_vec, layout_map, i, i += assign_pair(e2c_vec, layout_map, i,
UINT64_MAX, UINT64_MAX,
UINT64_MAX, UINT64_MAX,
AAC_CHANNEL_FRONT, &layout); AAC_CHANNEL_FRONT);
num_front_channels -= 2; num_front_channels -= 2;
} }
@ -334,14 +323,14 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
i += assign_pair(e2c_vec, layout_map, i, i += assign_pair(e2c_vec, layout_map, i,
AV_CH_SIDE_LEFT, AV_CH_SIDE_LEFT,
AV_CH_SIDE_RIGHT, AV_CH_SIDE_RIGHT,
AAC_CHANNEL_FRONT, &layout); AAC_CHANNEL_FRONT);
num_side_channels -= 2; num_side_channels -= 2;
} }
while (num_side_channels >= 2) { while (num_side_channels >= 2) {
i += assign_pair(e2c_vec, layout_map, i, i += assign_pair(e2c_vec, layout_map, i,
UINT64_MAX, UINT64_MAX,
UINT64_MAX, UINT64_MAX,
AAC_CHANNEL_SIDE, &layout); AAC_CHANNEL_SIDE);
num_side_channels -= 2; num_side_channels -= 2;
} }
@ -349,14 +338,14 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
i += assign_pair(e2c_vec, layout_map, i, i += assign_pair(e2c_vec, layout_map, i,
UINT64_MAX, UINT64_MAX,
UINT64_MAX, UINT64_MAX,
AAC_CHANNEL_BACK, &layout); AAC_CHANNEL_BACK);
num_back_channels -= 2; num_back_channels -= 2;
} }
if (num_back_channels >= 2) { if (num_back_channels >= 2) {
i += assign_pair(e2c_vec, layout_map, i, i += assign_pair(e2c_vec, layout_map, i,
AV_CH_BACK_LEFT, AV_CH_BACK_LEFT,
AV_CH_BACK_RIGHT, AV_CH_BACK_RIGHT,
AAC_CHANNEL_BACK, &layout); AAC_CHANNEL_BACK);
num_back_channels -= 2; num_back_channels -= 2;
} }
if (num_back_channels) { if (num_back_channels) {
@ -366,7 +355,6 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
.elem_id = layout_map[i][1], .elem_id = layout_map[i][1],
.aac_position = AAC_CHANNEL_BACK .aac_position = AAC_CHANNEL_BACK
}; };
layout |= e2c_vec[i].av_position;
i++; i++;
num_back_channels--; num_back_channels--;
} }
@ -378,17 +366,6 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
.elem_id = layout_map[i][1], .elem_id = layout_map[i][1],
.aac_position = AAC_CHANNEL_LFE .aac_position = AAC_CHANNEL_LFE
}; };
layout |= e2c_vec[i].av_position;
i++;
}
if (i < tags && layout_map[i][2] == AAC_CHANNEL_LFE) {
e2c_vec[i] = (struct elem_to_channel) {
.av_position = AV_CH_LOW_FREQUENCY_2,
.syn_ele = TYPE_LFE,
.elem_id = layout_map[i][1],
.aac_position = AAC_CHANNEL_LFE
};
layout |= e2c_vec[i].av_position;
i++; i++;
} }
while (i < tags && layout_map[i][2] == AAC_CHANNEL_LFE) { while (i < tags && layout_map[i][2] == AAC_CHANNEL_LFE) {
@ -401,79 +378,8 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags)
i++; i++;
} }
// The previous checks would end up at 8 at this point for 22.2 // Must choose a stable sort
if (layout == PREFIX_FOR_22POINT2 && tags == 16 && i == 8) {
const uint8_t (*reference_layout_map)[3] = aac_channel_layout_map[12];
for (int j = 0; j < tags; j++) {
if (layout_map[j][0] != reference_layout_map[j][0] ||
layout_map[j][2] != reference_layout_map[j][2])
goto end_of_layout_definition;
}
e2c_vec[i] = (struct elem_to_channel) {
.av_position = AV_CH_TOP_FRONT_CENTER,
.syn_ele = layout_map[i][0],
.elem_id = layout_map[i][1],
.aac_position = layout_map[i][2]
}; layout |= e2c_vec[i].av_position; i++;
i += assign_pair(e2c_vec, layout_map, i,
AV_CH_TOP_FRONT_LEFT,
AV_CH_TOP_FRONT_RIGHT,
AAC_CHANNEL_FRONT,
&layout);
i += assign_pair(e2c_vec, layout_map, i,
AV_CH_TOP_SIDE_LEFT,
AV_CH_TOP_SIDE_RIGHT,
AAC_CHANNEL_SIDE,
&layout);
e2c_vec[i] = (struct elem_to_channel) {
.av_position = AV_CH_TOP_CENTER,
.syn_ele = layout_map[i][0],
.elem_id = layout_map[i][1],
.aac_position = layout_map[i][2]
}; layout |= e2c_vec[i].av_position; i++;
i += assign_pair(e2c_vec, layout_map, i,
AV_CH_TOP_BACK_LEFT,
AV_CH_TOP_BACK_RIGHT,
AAC_CHANNEL_BACK,
&layout);
e2c_vec[i] = (struct elem_to_channel) {
.av_position = AV_CH_TOP_BACK_CENTER,
.syn_ele = layout_map[i][0],
.elem_id = layout_map[i][1],
.aac_position = layout_map[i][2]
}; layout |= e2c_vec[i].av_position; i++;
e2c_vec[i] = (struct elem_to_channel) {
.av_position = AV_CH_BOTTOM_FRONT_CENTER,
.syn_ele = layout_map[i][0],
.elem_id = layout_map[i][1],
.aac_position = layout_map[i][2]
}; layout |= e2c_vec[i].av_position; i++;
i += assign_pair(e2c_vec, layout_map, i,
AV_CH_BOTTOM_FRONT_LEFT,
AV_CH_BOTTOM_FRONT_RIGHT,
AAC_CHANNEL_FRONT,
&layout);
}
end_of_layout_definition:
total_non_cc_elements = n = i; total_non_cc_elements = n = i;
if (layout == AV_CH_LAYOUT_22POINT2) {
// For 22.2 reorder the result as needed
FFSWAP(struct elem_to_channel, e2c_vec[2], e2c_vec[0]); // FL & FR first (final), FC third
FFSWAP(struct elem_to_channel, e2c_vec[2], e2c_vec[1]); // FC second (final), FLc & FRc third
FFSWAP(struct elem_to_channel, e2c_vec[6], e2c_vec[2]); // LFE1 third (final), FLc & FRc seventh
FFSWAP(struct elem_to_channel, e2c_vec[4], e2c_vec[3]); // BL & BR fourth (final), SiL & SiR fifth
FFSWAP(struct elem_to_channel, e2c_vec[6], e2c_vec[4]); // FLc & FRc fifth (final), SiL & SiR seventh
FFSWAP(struct elem_to_channel, e2c_vec[7], e2c_vec[6]); // LFE2 seventh (final), SiL & SiR eight (final)
FFSWAP(struct elem_to_channel, e2c_vec[9], e2c_vec[8]); // TpFL & TpFR ninth (final), TFC tenth (final)
FFSWAP(struct elem_to_channel, e2c_vec[11], e2c_vec[10]); // TC eleventh (final), TpSiL & TpSiR twelth
FFSWAP(struct elem_to_channel, e2c_vec[12], e2c_vec[11]); // TpBL & TpBR twelth (final), TpSiL & TpSiR thirteenth (final)
} else {
// For everything else, utilize the AV channel position define as a
// stable sort.
do { do {
int next_n = 0; int next_n = 0;
for (i = 1; i < n; i++) for (i = 1; i < n; i++)
@ -484,12 +390,14 @@ end_of_layout_definition:
n = next_n; n = next_n;
} while (n > 0); } while (n > 0);
} layout = 0;
for (i = 0; i < total_non_cc_elements; i++) { for (i = 0; i < total_non_cc_elements; i++) {
layout_map[i][0] = e2c_vec[i].syn_ele; layout_map[i][0] = e2c_vec[i].syn_ele;
layout_map[i][1] = e2c_vec[i].elem_id; layout_map[i][1] = e2c_vec[i].elem_id;
layout_map[i][2] = e2c_vec[i].aac_position; layout_map[i][2] = e2c_vec[i].aac_position;
if (e2c_vec[i].av_position != UINT64_MAX) {
layout |= e2c_vec[i].av_position;
}
} }
return layout; return layout;
@ -618,7 +526,7 @@ static int set_default_channel_config(AACContext *ac, AVCodecContext *avctx,
int channel_config) int channel_config)
{ {
if (channel_config < 1 || (channel_config > 7 && channel_config < 11) || if (channel_config < 1 || (channel_config > 7 && channel_config < 11) ||
channel_config > 13) { channel_config > 12) {
av_log(avctx, AV_LOG_ERROR, av_log(avctx, AV_LOG_ERROR,
"invalid default channel configuration (%d)\n", "invalid default channel configuration (%d)\n",
channel_config); channel_config);
@ -639,14 +547,11 @@ static int set_default_channel_config(AACContext *ac, AVCodecContext *avctx,
* As actual intended 7.1(wide) streams are very rare, default to assuming a * As actual intended 7.1(wide) streams are very rare, default to assuming a
* 7.1 layout was intended. * 7.1 layout was intended.
*/ */
if (channel_config == 7 && avctx->strict_std_compliance < FF_COMPLIANCE_STRICT) { if (channel_config == 7 && avctx->strict_std_compliance < FF_COMPLIANCE_STRICT && (!ac || !ac->warned_71_wide++)) {
layout_map[2][2] = AAC_CHANNEL_SIDE;
if (!ac || !ac->warned_71_wide++) {
av_log(avctx, AV_LOG_INFO, "Assuming an incorrectly encoded 7.1 channel layout" av_log(avctx, AV_LOG_INFO, "Assuming an incorrectly encoded 7.1 channel layout"
" instead of a spec-compliant 7.1(wide) layout, use -strict %d to decode" " instead of a spec-compliant 7.1(wide) layout, use -strict %d to decode"
" according to the specification instead.\n", FF_COMPLIANCE_STRICT); " according to the specification instead.\n", FF_COMPLIANCE_STRICT);
} layout_map[2][2] = AAC_CHANNEL_SIDE;
} }
return 0; return 0;
@ -701,13 +606,6 @@ static ChannelElement *get_che(AACContext *ac, int type, int elem_id)
/* For indexed channel configurations map the channels solely based /* For indexed channel configurations map the channels solely based
* on position. */ * on position. */
switch (ac->oc[1].m4ac.chan_config) { switch (ac->oc[1].m4ac.chan_config) {
case 13:
if (ac->tags_mapped > 3 && ((type == TYPE_CPE && elem_id < 8) ||
(type == TYPE_SCE && elem_id < 6) ||
(type == TYPE_LFE && elem_id < 2))) {
ac->tags_mapped++;
return ac->tag_che_map[type][elem_id] = ac->che[type][elem_id];
}
case 12: case 12:
case 7: case 7:
if (ac->tags_mapped == 3 && type == TYPE_CPE) { if (ac->tags_mapped == 3 && type == TYPE_CPE) {
@ -1198,25 +1096,29 @@ static void reset_predictor_group(PredictorState *ps, int group_num)
reset_predict_state(&ps[i]); reset_predict_state(&ps[i]);
} }
#define AAC_INIT_VLC_STATIC(num, size) \
INIT_VLC_STATIC(&vlc_spectral[num], 8, ff_aac_spectral_sizes[num], \
ff_aac_spectral_bits[num], sizeof(ff_aac_spectral_bits[num][0]), \
sizeof(ff_aac_spectral_bits[num][0]), \
ff_aac_spectral_codes[num], sizeof(ff_aac_spectral_codes[num][0]), \
sizeof(ff_aac_spectral_codes[num][0]), \
size);
static void aacdec_init(AACContext *ac); static void aacdec_init(AACContext *ac);
static av_cold void aac_static_table_init(void) static av_cold void aac_static_table_init(void)
{ {
static VLC_TYPE vlc_buf[304 + 270 + 550 + 300 + 328 + AAC_INIT_VLC_STATIC( 0, 304);
294 + 306 + 268 + 510 + 366 + 462][2]; AAC_INIT_VLC_STATIC( 1, 270);
for (unsigned i = 0, offset = 0; i < 11; i++) { AAC_INIT_VLC_STATIC( 2, 550);
vlc_spectral[i].table = &vlc_buf[offset]; AAC_INIT_VLC_STATIC( 3, 300);
vlc_spectral[i].table_allocated = FF_ARRAY_ELEMS(vlc_buf) - offset; AAC_INIT_VLC_STATIC( 4, 328);
ff_init_vlc_sparse(&vlc_spectral[i], 8, ff_aac_spectral_sizes[i], AAC_INIT_VLC_STATIC( 5, 294);
ff_aac_spectral_bits[i], sizeof(ff_aac_spectral_bits[i][0]), AAC_INIT_VLC_STATIC( 6, 306);
sizeof(ff_aac_spectral_bits[i][0]), AAC_INIT_VLC_STATIC( 7, 268);
ff_aac_spectral_codes[i], sizeof(ff_aac_spectral_codes[i][0]), AAC_INIT_VLC_STATIC( 8, 510);
sizeof(ff_aac_spectral_codes[i][0]), AAC_INIT_VLC_STATIC( 9, 366);
ff_aac_codebook_vector_idx[i], sizeof(ff_aac_codebook_vector_idx[i][0]), AAC_INIT_VLC_STATIC(10, 462);
sizeof(ff_aac_codebook_vector_idx[i][0]),
INIT_VLC_STATIC_OVERLONG);
offset += vlc_spectral[i].table_size;
}
AAC_RENAME(ff_aac_sbr_init)(); AAC_RENAME(ff_aac_sbr_init)();
@ -1233,18 +1135,17 @@ static av_cold void aac_static_table_init(void)
352); 352);
// window initialization // window initialization
AAC_RENAME(ff_kbd_window_init)(AAC_RENAME(ff_aac_kbd_long_1024), 4.0, 1024);
AAC_RENAME(ff_kbd_window_init)(AAC_RENAME(ff_aac_kbd_short_128), 6.0, 128);
#if !USE_FIXED #if !USE_FIXED
AAC_RENAME(ff_kbd_window_init)(AAC_RENAME(aac_kbd_long_960), 4.0, 960); AAC_RENAME(ff_kbd_window_init)(AAC_RENAME(ff_aac_kbd_long_960), 4.0, 960);
AAC_RENAME(ff_kbd_window_init)(AAC_RENAME(aac_kbd_short_120), 6.0, 120); AAC_RENAME(ff_kbd_window_init)(AAC_RENAME(ff_aac_kbd_short_120), 6.0, 120);
AAC_RENAME(ff_sine_window_init)(AAC_RENAME(sine_960), 960); AAC_RENAME(ff_sine_window_init)(AAC_RENAME(ff_sine_960), 960);
AAC_RENAME(ff_sine_window_init)(AAC_RENAME(sine_120), 120); AAC_RENAME(ff_sine_window_init)(AAC_RENAME(ff_sine_120), 120);
AAC_RENAME(ff_init_ff_sine_windows)(9);
ff_aac_float_common_init();
#else
AAC_RENAME(ff_kbd_window_init)(AAC_RENAME2(aac_kbd_long_1024), 4.0, 1024);
AAC_RENAME(ff_kbd_window_init)(AAC_RENAME2(aac_kbd_short_128), 6.0, 128);
init_sine_windows_fixed();
#endif #endif
AAC_RENAME(ff_init_ff_sine_windows)(10);
AAC_RENAME(ff_init_ff_sine_windows)( 9);
AAC_RENAME(ff_init_ff_sine_windows)( 7);
AAC_RENAME(ff_cbrt_tableinit)(); AAC_RENAME(ff_cbrt_tableinit)();
} }
@ -1802,6 +1703,7 @@ static int decode_spectrum_and_dequant(AACContext *ac, INTFLOAT coef[1024],
#if !USE_FIXED #if !USE_FIXED
const float *vq = ff_aac_codebook_vector_vals[cbt_m1]; const float *vq = ff_aac_codebook_vector_vals[cbt_m1];
#endif /* !USE_FIXED */ #endif /* !USE_FIXED */
const uint16_t *cb_vector_idx = ff_aac_codebook_vector_idx[cbt_m1];
VLC_TYPE (*vlc_tab)[2] = vlc_spectral[cbt_m1].table; VLC_TYPE (*vlc_tab)[2] = vlc_spectral[cbt_m1].table;
OPEN_READER(re, gb); OPEN_READER(re, gb);
@ -1817,7 +1719,7 @@ static int decode_spectrum_and_dequant(AACContext *ac, INTFLOAT coef[1024],
UPDATE_CACHE(re, gb); UPDATE_CACHE(re, gb);
GET_VLC(code, re, gb, vlc_tab, 8, 2); GET_VLC(code, re, gb, vlc_tab, 8, 2);
cb_idx = code; cb_idx = cb_vector_idx[code];
#if USE_FIXED #if USE_FIXED
cf = DEC_SQUAD(cf, cb_idx); cf = DEC_SQUAD(cf, cb_idx);
#else #else
@ -1840,7 +1742,7 @@ static int decode_spectrum_and_dequant(AACContext *ac, INTFLOAT coef[1024],
UPDATE_CACHE(re, gb); UPDATE_CACHE(re, gb);
GET_VLC(code, re, gb, vlc_tab, 8, 2); GET_VLC(code, re, gb, vlc_tab, 8, 2);
cb_idx = code; cb_idx = cb_vector_idx[code];
nnz = cb_idx >> 8 & 15; nnz = cb_idx >> 8 & 15;
bits = nnz ? GET_CACHE(re, gb) : 0; bits = nnz ? GET_CACHE(re, gb) : 0;
LAST_SKIP_BITS(re, gb, nnz); LAST_SKIP_BITS(re, gb, nnz);
@ -1864,7 +1766,7 @@ static int decode_spectrum_and_dequant(AACContext *ac, INTFLOAT coef[1024],
UPDATE_CACHE(re, gb); UPDATE_CACHE(re, gb);
GET_VLC(code, re, gb, vlc_tab, 8, 2); GET_VLC(code, re, gb, vlc_tab, 8, 2);
cb_idx = code; cb_idx = cb_vector_idx[code];
#if USE_FIXED #if USE_FIXED
cf = DEC_SPAIR(cf, cb_idx); cf = DEC_SPAIR(cf, cb_idx);
#else #else
@ -1888,7 +1790,7 @@ static int decode_spectrum_and_dequant(AACContext *ac, INTFLOAT coef[1024],
UPDATE_CACHE(re, gb); UPDATE_CACHE(re, gb);
GET_VLC(code, re, gb, vlc_tab, 8, 2); GET_VLC(code, re, gb, vlc_tab, 8, 2);
cb_idx = code; cb_idx = cb_vector_idx[code];
nnz = cb_idx >> 8 & 15; nnz = cb_idx >> 8 & 15;
sign = nnz ? SHOW_UBITS(re, gb, nnz) << (cb_idx >> 12) : 0; sign = nnz ? SHOW_UBITS(re, gb, nnz) << (cb_idx >> 12) : 0;
LAST_SKIP_BITS(re, gb, nnz); LAST_SKIP_BITS(re, gb, nnz);
@ -1921,14 +1823,14 @@ static int decode_spectrum_and_dequant(AACContext *ac, INTFLOAT coef[1024],
UPDATE_CACHE(re, gb); UPDATE_CACHE(re, gb);
GET_VLC(code, re, gb, vlc_tab, 8, 2); GET_VLC(code, re, gb, vlc_tab, 8, 2);
cb_idx = code;
if (cb_idx == 0x0000) { if (!code) {
*icf++ = 0; *icf++ = 0;
*icf++ = 0; *icf++ = 0;
continue; continue;
} }
cb_idx = cb_vector_idx[code];
nnz = cb_idx >> 12; nnz = cb_idx >> 12;
nzt = cb_idx >> 8; nzt = cb_idx >> 8;
bits = SHOW_UBITS(re, gb, nnz) << (32-nnz); bits = SHOW_UBITS(re, gb, nnz) << (32-nnz);
@ -2646,10 +2548,10 @@ static void apply_tns(INTFLOAT coef_param[1024], TemporalNoiseShaping *tns,
static void windowing_and_mdct_ltp(AACContext *ac, INTFLOAT *out, static void windowing_and_mdct_ltp(AACContext *ac, INTFLOAT *out,
INTFLOAT *in, IndividualChannelStream *ics) INTFLOAT *in, IndividualChannelStream *ics)
{ {
const INTFLOAT *lwindow = ics->use_kb_window[0] ? AAC_RENAME2(aac_kbd_long_1024) : AAC_RENAME2(sine_1024); const INTFLOAT *lwindow = ics->use_kb_window[0] ? AAC_RENAME(ff_aac_kbd_long_1024) : AAC_RENAME(ff_sine_1024);
const INTFLOAT *swindow = ics->use_kb_window[0] ? AAC_RENAME2(aac_kbd_short_128) : AAC_RENAME2(sine_128); const INTFLOAT *swindow = ics->use_kb_window[0] ? AAC_RENAME(ff_aac_kbd_short_128) : AAC_RENAME(ff_sine_128);
const INTFLOAT *lwindow_prev = ics->use_kb_window[1] ? AAC_RENAME2(aac_kbd_long_1024) : AAC_RENAME2(sine_1024); const INTFLOAT *lwindow_prev = ics->use_kb_window[1] ? AAC_RENAME(ff_aac_kbd_long_1024) : AAC_RENAME(ff_sine_1024);
const INTFLOAT *swindow_prev = ics->use_kb_window[1] ? AAC_RENAME2(aac_kbd_short_128) : AAC_RENAME2(sine_128); const INTFLOAT *swindow_prev = ics->use_kb_window[1] ? AAC_RENAME(ff_aac_kbd_short_128) : AAC_RENAME(ff_sine_128);
if (ics->window_sequence[0] != LONG_STOP_SEQUENCE) { if (ics->window_sequence[0] != LONG_STOP_SEQUENCE) {
ac->fdsp->vector_fmul(in, in, lwindow_prev, 1024); ac->fdsp->vector_fmul(in, in, lwindow_prev, 1024);
@ -2706,8 +2608,8 @@ static void update_ltp(AACContext *ac, SingleChannelElement *sce)
IndividualChannelStream *ics = &sce->ics; IndividualChannelStream *ics = &sce->ics;
INTFLOAT *saved = sce->saved; INTFLOAT *saved = sce->saved;
INTFLOAT *saved_ltp = sce->coeffs; INTFLOAT *saved_ltp = sce->coeffs;
const INTFLOAT *lwindow = ics->use_kb_window[0] ? AAC_RENAME2(aac_kbd_long_1024) : AAC_RENAME2(sine_1024); const INTFLOAT *lwindow = ics->use_kb_window[0] ? AAC_RENAME(ff_aac_kbd_long_1024) : AAC_RENAME(ff_sine_1024);
const INTFLOAT *swindow = ics->use_kb_window[0] ? AAC_RENAME2(aac_kbd_short_128) : AAC_RENAME2(sine_128); const INTFLOAT *swindow = ics->use_kb_window[0] ? AAC_RENAME(ff_aac_kbd_short_128) : AAC_RENAME(ff_sine_128);
int i; int i;
if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) { if (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE) {
@ -2745,9 +2647,9 @@ static void imdct_and_windowing(AACContext *ac, SingleChannelElement *sce)
INTFLOAT *in = sce->coeffs; INTFLOAT *in = sce->coeffs;
INTFLOAT *out = sce->ret; INTFLOAT *out = sce->ret;
INTFLOAT *saved = sce->saved; INTFLOAT *saved = sce->saved;
const INTFLOAT *swindow = ics->use_kb_window[0] ? AAC_RENAME2(aac_kbd_short_128) : AAC_RENAME2(sine_128); const INTFLOAT *swindow = ics->use_kb_window[0] ? AAC_RENAME(ff_aac_kbd_short_128) : AAC_RENAME(ff_sine_128);
const INTFLOAT *lwindow_prev = ics->use_kb_window[1] ? AAC_RENAME2(aac_kbd_long_1024) : AAC_RENAME2(sine_1024); const INTFLOAT *lwindow_prev = ics->use_kb_window[1] ? AAC_RENAME(ff_aac_kbd_long_1024) : AAC_RENAME(ff_sine_1024);
const INTFLOAT *swindow_prev = ics->use_kb_window[1] ? AAC_RENAME2(aac_kbd_short_128) : AAC_RENAME2(sine_128); const INTFLOAT *swindow_prev = ics->use_kb_window[1] ? AAC_RENAME(ff_aac_kbd_short_128) : AAC_RENAME(ff_sine_128);
INTFLOAT *buf = ac->buf_mdct; INTFLOAT *buf = ac->buf_mdct;
INTFLOAT *temp = ac->temp; INTFLOAT *temp = ac->temp;
int i; int i;
@ -2814,9 +2716,9 @@ static void imdct_and_windowing_960(AACContext *ac, SingleChannelElement *sce)
INTFLOAT *in = sce->coeffs; INTFLOAT *in = sce->coeffs;
INTFLOAT *out = sce->ret; INTFLOAT *out = sce->ret;
INTFLOAT *saved = sce->saved; INTFLOAT *saved = sce->saved;
const INTFLOAT *swindow = ics->use_kb_window[0] ? AAC_RENAME(aac_kbd_short_120) : AAC_RENAME(sine_120); const INTFLOAT *swindow = ics->use_kb_window[0] ? AAC_RENAME(ff_aac_kbd_short_120) : AAC_RENAME(ff_sine_120);
const INTFLOAT *lwindow_prev = ics->use_kb_window[1] ? AAC_RENAME(aac_kbd_long_960) : AAC_RENAME(sine_960); const INTFLOAT *lwindow_prev = ics->use_kb_window[1] ? AAC_RENAME(ff_aac_kbd_long_960) : AAC_RENAME(ff_sine_960);
const INTFLOAT *swindow_prev = ics->use_kb_window[1] ? AAC_RENAME(aac_kbd_short_120) : AAC_RENAME(sine_120); const INTFLOAT *swindow_prev = ics->use_kb_window[1] ? AAC_RENAME(ff_aac_kbd_short_120) : AAC_RENAME(ff_sine_120);
INTFLOAT *buf = ac->buf_mdct; INTFLOAT *buf = ac->buf_mdct;
INTFLOAT *temp = ac->temp; INTFLOAT *temp = ac->temp;
int i; int i;
@ -2893,10 +2795,10 @@ static void imdct_and_windowing_ld(AACContext *ac, SingleChannelElement *sce)
if (ics->use_kb_window[1]) { if (ics->use_kb_window[1]) {
// AAC LD uses a low overlap sine window instead of a KBD window // AAC LD uses a low overlap sine window instead of a KBD window
memcpy(out, saved, 192 * sizeof(*out)); memcpy(out, saved, 192 * sizeof(*out));
ac->fdsp->vector_fmul_window(out + 192, saved + 192, buf, AAC_RENAME2(sine_128), 64); ac->fdsp->vector_fmul_window(out + 192, saved + 192, buf, AAC_RENAME(ff_sine_128), 64);
memcpy( out + 320, buf + 64, 192 * sizeof(*out)); memcpy( out + 320, buf + 64, 192 * sizeof(*out));
} else { } else {
ac->fdsp->vector_fmul_window(out, saved, buf, AAC_RENAME2(sine_512), 256); ac->fdsp->vector_fmul_window(out, saved, buf, AAC_RENAME(ff_sine_512), 256);
} }
// buffer update // buffer update
@ -2905,7 +2807,7 @@ static void imdct_and_windowing_ld(AACContext *ac, SingleChannelElement *sce)
static void imdct_and_windowing_eld(AACContext *ac, SingleChannelElement *sce) static void imdct_and_windowing_eld(AACContext *ac, SingleChannelElement *sce)
{ {
UINTFLOAT *in = sce->coeffs; INTFLOAT *in = sce->coeffs;
INTFLOAT *out = sce->ret; INTFLOAT *out = sce->ret;
INTFLOAT *saved = sce->saved; INTFLOAT *saved = sce->saved;
INTFLOAT *buf = ac->buf_mdct; INTFLOAT *buf = ac->buf_mdct;
@ -3216,8 +3118,7 @@ static int aac_decode_er_frame(AVCodecContext *avctx, void *data,
} }
static int aac_decode_frame_int(AVCodecContext *avctx, void *data, static int aac_decode_frame_int(AVCodecContext *avctx, void *data,
int *got_frame_ptr, GetBitContext *gb, int *got_frame_ptr, GetBitContext *gb, AVPacket *avpkt)
const AVPacket *avpkt)
{ {
AACContext *ac = avctx->priv_data; AACContext *ac = avctx->priv_data;
ChannelElement *che = NULL, *che_prev = NULL; ChannelElement *che = NULL, *che_prev = NULL;
@ -3312,7 +3213,7 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data,
break; break;
case TYPE_PCE: { case TYPE_PCE: {
uint8_t layout_map[MAX_ELEM_ID*4][3] = {{0}}; uint8_t layout_map[MAX_ELEM_ID*4][3];
int tags; int tags;
int pushed = push_output_configuration(ac); int pushed = push_output_configuration(ac);
@ -3437,11 +3338,11 @@ static int aac_decode_frame(AVCodecContext *avctx, void *data,
int buf_consumed; int buf_consumed;
int buf_offset; int buf_offset;
int err; int err;
buffer_size_t new_extradata_size; int new_extradata_size;
const uint8_t *new_extradata = av_packet_get_side_data(avpkt, const uint8_t *new_extradata = av_packet_get_side_data(avpkt,
AV_PKT_DATA_NEW_EXTRADATA, AV_PKT_DATA_NEW_EXTRADATA,
&new_extradata_size); &new_extradata_size);
buffer_size_t jp_dualmono_size; int jp_dualmono_size;
const uint8_t *jp_dualmono = av_packet_get_side_data(avpkt, const uint8_t *jp_dualmono = av_packet_get_side_data(avpkt,
AV_PKT_DATA_JP_DUALMONO, AV_PKT_DATA_JP_DUALMONO,
&jp_dualmono_size); &jp_dualmono_size);

View file

@ -35,9 +35,9 @@
#include <stdint.h> #include <stdint.h>
static const int8_t tags_per_config[16] = { 0, 1, 1, 2, 3, 3, 4, 5, 0, 0, 0, 4, 5, 16, 5, 0 }; static const int8_t tags_per_config[16] = { 0, 1, 1, 2, 3, 3, 4, 5, 0, 0, 0, 4, 5, 0, 5, 0 };
static const uint8_t aac_channel_layout_map[16][16][3] = { static const uint8_t aac_channel_layout_map[16][5][3] = {
{ { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, }, { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, },
{ { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, }, { { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, },
{ { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, }, { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, },
@ -50,24 +50,6 @@ static const uint8_t aac_channel_layout_map[16][16][3] = {
{ { 0, } }, { { 0, } },
{ { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_BACK }, { TYPE_SCE, 1, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, }, { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_BACK }, { TYPE_SCE, 1, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, },
{ { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_SIDE }, { TYPE_CPE, 2, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, }, { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_SIDE }, { TYPE_CPE, 2, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, },
{
{ TYPE_SCE, 0, AAC_CHANNEL_FRONT }, // SCE1 = FC,
{ TYPE_CPE, 0, AAC_CHANNEL_FRONT }, // CPE1 = FLc and FRc,
{ TYPE_CPE, 1, AAC_CHANNEL_FRONT }, // CPE2 = FL and FR,
{ TYPE_CPE, 2, AAC_CHANNEL_SIDE }, // CPE3 = SiL and SiR,
{ TYPE_CPE, 3, AAC_CHANNEL_BACK }, // CPE4 = BL and BR,
{ TYPE_SCE, 1, AAC_CHANNEL_BACK }, // SCE2 = BC,
{ TYPE_LFE, 0, AAC_CHANNEL_LFE }, // LFE1 = LFE1,
{ TYPE_LFE, 1, AAC_CHANNEL_LFE }, // LFE2 = LFE2,
{ TYPE_SCE, 2, AAC_CHANNEL_FRONT }, // SCE3 = TpFC,
{ TYPE_CPE, 4, AAC_CHANNEL_FRONT }, // CPE5 = TpFL and TpFR,
{ TYPE_CPE, 5, AAC_CHANNEL_SIDE }, // CPE6 = TpSiL and TpSiR,
{ TYPE_SCE, 3, AAC_CHANNEL_FRONT }, // SCE4 = TpC,
{ TYPE_CPE, 6, AAC_CHANNEL_BACK }, // CPE7 = TpBL and TpBR,
{ TYPE_SCE, 4, AAC_CHANNEL_BACK }, // SCE5 = TpBC,
{ TYPE_SCE, 5, AAC_CHANNEL_FRONT }, // SCE6 = BtFC,
{ TYPE_CPE, 7, AAC_CHANNEL_FRONT }, // CPE8 = BtFL and BtFR
},
{ { 0, } }, { { 0, } },
/* TODO: Add 7+1 TOP configuration */ /* TODO: Add 7+1 TOP configuration */
}; };
@ -85,7 +67,6 @@ static const uint64_t aac_channel_layout[16] = {
0, 0,
AV_CH_LAYOUT_6POINT1, AV_CH_LAYOUT_6POINT1,
AV_CH_LAYOUT_7POINT1, AV_CH_LAYOUT_7POINT1,
AV_CH_LAYOUT_22POINT2,
0, 0,
/* AV_CH_LAYOUT_7POINT1_TOP, */ /* AV_CH_LAYOUT_7POINT1_TOP, */
}; };

View file

@ -30,12 +30,14 @@
***********************************/ ***********************************/
#include "libavutil/libm.h" #include "libavutil/libm.h"
#include "libavutil/thread.h"
#include "libavutil/float_dsp.h" #include "libavutil/float_dsp.h"
#include "libavutil/opt.h" #include "libavutil/opt.h"
#include "avcodec.h" #include "avcodec.h"
#include "put_bits.h" #include "put_bits.h"
#include "internal.h" #include "internal.h"
#include "mpeg4audio.h" #include "mpeg4audio.h"
#include "kbdwin.h"
#include "sinewin.h" #include "sinewin.h"
#include "profiles.h" #include "profiles.h"
@ -47,6 +49,8 @@
#include "psymodel.h" #include "psymodel.h"
static AVOnce aac_table_init = AV_ONCE_INIT;
static void put_pce(PutBitContext *pb, AVCodecContext *avctx) static void put_pce(PutBitContext *pb, AVCodecContext *avctx)
{ {
int i, j; int i, j;
@ -79,9 +83,9 @@ static void put_pce(PutBitContext *pb, AVCodecContext *avctx)
} }
} }
align_put_bits(pb); avpriv_align_put_bits(pb);
put_bits(pb, 8, strlen(aux_data)); put_bits(pb, 8, strlen(aux_data));
ff_put_string(pb, aux_data, 0); avpriv_put_string(pb, aux_data, 0);
} }
/** /**
@ -518,7 +522,7 @@ static void put_bitstream_info(AACEncContext *s, const char *name)
put_bits(&s->pb, 8, namelen - 14); put_bits(&s->pb, 8, namelen - 14);
put_bits(&s->pb, 4, 0); //extension type - filler put_bits(&s->pb, 4, 0); //extension type - filler
padbits = -put_bits_count(&s->pb) & 7; padbits = -put_bits_count(&s->pb) & 7;
align_put_bits(&s->pb); avpriv_align_put_bits(&s->pb);
for (i = 0; i < namelen - 2; i++) for (i = 0; i < namelen - 2; i++)
put_bits(&s->pb, 8, name[i]); put_bits(&s->pb, 8, name[i]);
put_bits(&s->pb, 12 - padbits, 0); put_bits(&s->pb, 12 - padbits, 0);
@ -921,7 +925,10 @@ static av_cold int dsp_init(AVCodecContext *avctx, AACEncContext *s)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
// window init // window init
ff_aac_float_common_init(); ff_kbd_window_init(ff_aac_kbd_long_1024, 4.0, 1024);
ff_kbd_window_init(ff_aac_kbd_short_128, 6.0, 128);
ff_init_ff_sine_windows(10);
ff_init_ff_sine_windows(7);
if ((ret = ff_mdct_init(&s->mdct1024, 11, 0, 32768.0)) < 0) if ((ret = ff_mdct_init(&s->mdct1024, 11, 0, 32768.0)) < 0)
return ret; return ret;
@ -934,14 +941,20 @@ static av_cold int dsp_init(AVCodecContext *avctx, AACEncContext *s)
static av_cold int alloc_buffers(AVCodecContext *avctx, AACEncContext *s) static av_cold int alloc_buffers(AVCodecContext *avctx, AACEncContext *s)
{ {
int ch; int ch;
if (!FF_ALLOCZ_TYPED_ARRAY(s->buffer.samples, s->channels * 3 * 1024) || FF_ALLOCZ_ARRAY_OR_GOTO(avctx, s->buffer.samples, s->channels, 3 * 1024 * sizeof(s->buffer.samples[0]), alloc_fail);
!FF_ALLOCZ_TYPED_ARRAY(s->cpe, s->chan_map[0])) FF_ALLOCZ_ARRAY_OR_GOTO(avctx, s->cpe, s->chan_map[0], sizeof(ChannelElement), alloc_fail);
return AVERROR(ENOMEM);
for(ch = 0; ch < s->channels; ch++) for(ch = 0; ch < s->channels; ch++)
s->planar_samples[ch] = s->buffer.samples + 3 * 1024 * ch; s->planar_samples[ch] = s->buffer.samples + 3 * 1024 * ch;
return 0; return 0;
alloc_fail:
return AVERROR(ENOMEM);
}
static av_cold void aac_encode_init_tables(void)
{
ff_aac_tableinit();
} }
static av_cold int aac_encode_init(AVCodecContext *avctx) static av_cold int aac_encode_init(AVCodecContext *avctx)
@ -1065,13 +1078,13 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
s->options.mid_side = 0; s->options.mid_side = 0;
if ((ret = dsp_init(avctx, s)) < 0) if ((ret = dsp_init(avctx, s)) < 0)
return ret; goto fail;
if ((ret = alloc_buffers(avctx, s)) < 0) if ((ret = alloc_buffers(avctx, s)) < 0)
return ret; goto fail;
if ((ret = put_audio_specific_config(avctx))) if ((ret = put_audio_specific_config(avctx)))
return ret; goto fail;
sizes[0] = ff_aac_swb_size_1024[s->samplerate_index]; sizes[0] = ff_aac_swb_size_1024[s->samplerate_index];
sizes[1] = ff_aac_swb_size_128[s->samplerate_index]; sizes[1] = ff_aac_swb_size_128[s->samplerate_index];
@ -1081,7 +1094,7 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
grouping[i] = s->chan_map[i + 1] == TYPE_CPE; grouping[i] = s->chan_map[i + 1] == TYPE_CPE;
if ((ret = ff_psy_init(&s->psy, avctx, 2, sizes, lengths, if ((ret = ff_psy_init(&s->psy, avctx, 2, sizes, lengths,
s->chan_map[0], grouping)) < 0) s->chan_map[0], grouping)) < 0)
return ret; goto fail;
s->psypp = ff_psy_preprocess_init(avctx); s->psypp = ff_psy_preprocess_init(avctx);
ff_lpc_init(&s->lpc, 2*avctx->frame_size, TNS_MAX_ORDER, FF_LPC_TYPE_LEVINSON); ff_lpc_init(&s->lpc, 2*avctx->frame_size, TNS_MAX_ORDER, FF_LPC_TYPE_LEVINSON);
s->random_state = 0x1f2e3d4c; s->random_state = 0x1f2e3d4c;
@ -1095,10 +1108,15 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
if (HAVE_MIPSDSP) if (HAVE_MIPSDSP)
ff_aac_coder_init_mips(s); ff_aac_coder_init_mips(s);
if ((ret = ff_thread_once(&aac_table_init, &aac_encode_init_tables)) != 0)
return AVERROR_UNKNOWN;
ff_af_queue_init(avctx, &s->afq); ff_af_queue_init(avctx, &s->afq);
ff_aac_tableinit();
return 0; return 0;
fail:
aac_encode_end(avctx);
return ret;
} }
#define AACENC_FLAGS AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM #define AACENC_FLAGS AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
@ -1141,7 +1159,7 @@ AVCodec ff_aac_encoder = {
.close = aac_encode_end, .close = aac_encode_end,
.defaults = aac_encode_defaults, .defaults = aac_encode_defaults,
.supported_samplerates = mpeg4audio_sample_rates, .supported_samplerates = mpeg4audio_sample_rates,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
.capabilities = AV_CODEC_CAP_SMALL_LAST_FRAME | AV_CODEC_CAP_DELAY, .capabilities = AV_CODEC_CAP_SMALL_LAST_FRAME | AV_CODEC_CAP_DELAY,
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLTP, .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLTP,
AV_SAMPLE_FMT_NONE }, AV_SAMPLE_FMT_NONE },

View file

@ -23,8 +23,6 @@
#define AVCODEC_AACENC_H #define AVCODEC_AACENC_H
#include "libavutil/float_dsp.h" #include "libavutil/float_dsp.h"
#include "libavutil/mem_internal.h"
#include "avcodec.h" #include "avcodec.h"
#include "put_bits.h" #include "put_bits.h"

View file

@ -88,7 +88,7 @@ static const uint8_t swb_size_1024_8[] = {
32, 36, 36, 40, 44, 48, 52, 56, 60, 64, 80 32, 36, 36, 40, 44, 48, 52, 56, 60, 64, 80
}; };
const uint8_t *const ff_aac_swb_size_128[] = { const uint8_t *ff_aac_swb_size_128[] = {
swb_size_128_96, swb_size_128_96, swb_size_128_64, swb_size_128_96, swb_size_128_96, swb_size_128_64,
swb_size_128_48, swb_size_128_48, swb_size_128_48, swb_size_128_48, swb_size_128_48, swb_size_128_48,
swb_size_128_24, swb_size_128_24, swb_size_128_16, swb_size_128_24, swb_size_128_24, swb_size_128_16,
@ -96,7 +96,7 @@ const uint8_t *const ff_aac_swb_size_128[] = {
swb_size_128_8 swb_size_128_8
}; };
const uint8_t *const ff_aac_swb_size_1024[] = { const uint8_t *ff_aac_swb_size_1024[] = {
swb_size_1024_96, swb_size_1024_96, swb_size_1024_64, swb_size_1024_96, swb_size_1024_96, swb_size_1024_64,
swb_size_1024_48, swb_size_1024_48, swb_size_1024_32, swb_size_1024_48, swb_size_1024_48, swb_size_1024_32,
swb_size_1024_24, swb_size_1024_24, swb_size_1024_16, swb_size_1024_24, swb_size_1024_24, swb_size_1024_16,

View file

@ -38,9 +38,9 @@
#define AAC_MAX_CHANNELS 16 #define AAC_MAX_CHANNELS 16
extern const uint8_t *const ff_aac_swb_size_1024[]; extern const uint8_t *ff_aac_swb_size_1024[];
extern const int ff_aac_swb_size_1024_len; extern const int ff_aac_swb_size_1024_len;
extern const uint8_t *const ff_aac_swb_size_128[]; extern const uint8_t *ff_aac_swb_size_128[];
extern const int ff_aac_swb_size_128_len; extern const int ff_aac_swb_size_128_len;
/* Supported layouts without using a PCE */ /* Supported layouts without using a PCE */

View file

@ -25,8 +25,8 @@
#include <stdint.h> #include <stdint.h>
#include "libavutil/common.h" #include "libavutil/common.h"
#include "libavutil/mathematics.h" #include "libavutil/mathematics.h"
#include "libavutil/mem_internal.h"
#include "avcodec.h" #include "avcodec.h"
#include "get_bits.h"
#include "aacps.h" #include "aacps.h"
#if USE_FIXED #if USE_FIXED
#include "aacps_fixed_tablegen.h" #include "aacps_fixed_tablegen.h"
@ -34,12 +34,118 @@
#include "libavutil/internal.h" #include "libavutil/internal.h"
#include "aacps_tablegen.h" #include "aacps_tablegen.h"
#endif /* USE_FIXED */ #endif /* USE_FIXED */
#include "aacpsdata.c"
static const INTFLOAT g1_Q2[] = { #define PS_BASELINE 0 ///< Operate in Baseline PS mode
Q31(0.0f), Q31(0.01899487526049f), Q31(0.0f), Q31(-0.07293139167538f), ///< Baseline implies 10 or 20 stereo bands,
Q31(0.0f), Q31(0.30596630545168f), Q31(0.5f) ///< mixing mode A, and no ipd/opd
#define numQMFSlots 32 //numTimeSlots * RATE
static const int8_t num_env_tab[2][4] = {
{ 0, 1, 2, 4, },
{ 1, 2, 3, 4, },
}; };
static const int8_t nr_iidicc_par_tab[] = {
10, 20, 34, 10, 20, 34,
};
static const int8_t nr_iidopd_par_tab[] = {
5, 11, 17, 5, 11, 17,
};
enum {
huff_iid_df1,
huff_iid_dt1,
huff_iid_df0,
huff_iid_dt0,
huff_icc_df,
huff_icc_dt,
huff_ipd_df,
huff_ipd_dt,
huff_opd_df,
huff_opd_dt,
};
static const int huff_iid[] = {
huff_iid_df0,
huff_iid_df1,
huff_iid_dt0,
huff_iid_dt1,
};
static VLC vlc_ps[10];
#define READ_PAR_DATA(PAR, OFFSET, MASK, ERR_CONDITION) \
/** \
* Read Inter-channel Intensity Difference/Inter-Channel Coherence/ \
* Inter-channel Phase Difference/Overall Phase Difference parameters from the \
* bitstream. \
* \
* @param avctx contains the current codec context \
* @param gb pointer to the input bitstream \
* @param ps pointer to the Parametric Stereo context \
* @param PAR pointer to the parameter to be read \
* @param e envelope to decode \
* @param dt 1: time delta-coded, 0: frequency delta-coded \
*/ \
static int read_ ## PAR ## _data(AVCodecContext *avctx, GetBitContext *gb, PSContext *ps, \
int8_t (*PAR)[PS_MAX_NR_IIDICC], int table_idx, int e, int dt) \
{ \
int b, num = ps->nr_ ## PAR ## _par; \
VLC_TYPE (*vlc_table)[2] = vlc_ps[table_idx].table; \
if (dt) { \
int e_prev = e ? e - 1 : ps->num_env_old - 1; \
e_prev = FFMAX(e_prev, 0); \
for (b = 0; b < num; b++) { \
int val = PAR[e_prev][b] + get_vlc2(gb, vlc_table, 9, 3) - OFFSET; \
if (MASK) val &= MASK; \
PAR[e][b] = val; \
if (ERR_CONDITION) \
goto err; \
} \
} else { \
int val = 0; \
for (b = 0; b < num; b++) { \
val += get_vlc2(gb, vlc_table, 9, 3) - OFFSET; \
if (MASK) val &= MASK; \
PAR[e][b] = val; \
if (ERR_CONDITION) \
goto err; \
} \
} \
return 0; \
err: \
av_log(avctx, AV_LOG_ERROR, "illegal "#PAR"\n"); \
return AVERROR_INVALIDDATA; \
}
READ_PAR_DATA(iid, huff_offset[table_idx], 0, FFABS(ps->iid_par[e][b]) > 7 + 8 * ps->iid_quant)
READ_PAR_DATA(icc, huff_offset[table_idx], 0, ps->icc_par[e][b] > 7U)
READ_PAR_DATA(ipdopd, 0, 0x07, 0)
static int ps_read_extension_data(GetBitContext *gb, PSContext *ps, int ps_extension_id)
{
int e;
int count = get_bits_count(gb);
if (ps_extension_id)
return 0;
ps->enable_ipdopd = get_bits1(gb);
if (ps->enable_ipdopd) {
for (e = 0; e < ps->num_env; e++) {
int dt = get_bits1(gb);
read_ipdopd_data(NULL, gb, ps, ps->ipd_par, dt ? huff_ipd_dt : huff_ipd_df, e, dt);
dt = get_bits1(gb);
read_ipdopd_data(NULL, gb, ps, ps->opd_par, dt ? huff_opd_dt : huff_opd_df, e, dt);
}
}
skip_bits1(gb); //reserved_ps
return get_bits_count(gb) - count;
}
static void ipdopd_reset(int8_t *ipd_hist, int8_t *opd_hist) static void ipdopd_reset(int8_t *ipd_hist, int8_t *opd_hist)
{ {
int i; int i;
@ -49,6 +155,163 @@ static void ipdopd_reset(int8_t *ipd_hist, int8_t *opd_hist)
} }
} }
int AAC_RENAME(ff_ps_read_data)(AVCodecContext *avctx, GetBitContext *gb_host, PSContext *ps, int bits_left)
{
int e;
int bit_count_start = get_bits_count(gb_host);
int header;
int bits_consumed;
GetBitContext gbc = *gb_host, *gb = &gbc;
header = get_bits1(gb);
if (header) { //enable_ps_header
ps->enable_iid = get_bits1(gb);
if (ps->enable_iid) {
int iid_mode = get_bits(gb, 3);
if (iid_mode > 5) {
av_log(avctx, AV_LOG_ERROR, "iid_mode %d is reserved.\n",
iid_mode);
goto err;
}
ps->nr_iid_par = nr_iidicc_par_tab[iid_mode];
ps->iid_quant = iid_mode > 2;
ps->nr_ipdopd_par = nr_iidopd_par_tab[iid_mode];
}
ps->enable_icc = get_bits1(gb);
if (ps->enable_icc) {
ps->icc_mode = get_bits(gb, 3);
if (ps->icc_mode > 5) {
av_log(avctx, AV_LOG_ERROR, "icc_mode %d is reserved.\n",
ps->icc_mode);
goto err;
}
ps->nr_icc_par = nr_iidicc_par_tab[ps->icc_mode];
}
ps->enable_ext = get_bits1(gb);
}
ps->frame_class = get_bits1(gb);
ps->num_env_old = ps->num_env;
ps->num_env = num_env_tab[ps->frame_class][get_bits(gb, 2)];
ps->border_position[0] = -1;
if (ps->frame_class) {
for (e = 1; e <= ps->num_env; e++) {
ps->border_position[e] = get_bits(gb, 5);
if (ps->border_position[e] < ps->border_position[e-1]) {
av_log(avctx, AV_LOG_ERROR, "border_position non monotone.\n");
goto err;
}
}
} else
for (e = 1; e <= ps->num_env; e++)
ps->border_position[e] = (e * numQMFSlots >> ff_log2_tab[ps->num_env]) - 1;
if (ps->enable_iid) {
for (e = 0; e < ps->num_env; e++) {
int dt = get_bits1(gb);
if (read_iid_data(avctx, gb, ps, ps->iid_par, huff_iid[2*dt+ps->iid_quant], e, dt))
goto err;
}
} else
memset(ps->iid_par, 0, sizeof(ps->iid_par));
if (ps->enable_icc)
for (e = 0; e < ps->num_env; e++) {
int dt = get_bits1(gb);
if (read_icc_data(avctx, gb, ps, ps->icc_par, dt ? huff_icc_dt : huff_icc_df, e, dt))
goto err;
}
else
memset(ps->icc_par, 0, sizeof(ps->icc_par));
if (ps->enable_ext) {
int cnt = get_bits(gb, 4);
if (cnt == 15) {
cnt += get_bits(gb, 8);
}
cnt *= 8;
while (cnt > 7) {
int ps_extension_id = get_bits(gb, 2);
cnt -= 2 + ps_read_extension_data(gb, ps, ps_extension_id);
}
if (cnt < 0) {
av_log(avctx, AV_LOG_ERROR, "ps extension overflow %d\n", cnt);
goto err;
}
skip_bits(gb, cnt);
}
ps->enable_ipdopd &= !PS_BASELINE;
//Fix up envelopes
if (!ps->num_env || ps->border_position[ps->num_env] < numQMFSlots - 1) {
//Create a fake envelope
int source = ps->num_env ? ps->num_env - 1 : ps->num_env_old - 1;
int b;
if (source >= 0 && source != ps->num_env) {
if (ps->enable_iid) {
memcpy(ps->iid_par+ps->num_env, ps->iid_par+source, sizeof(ps->iid_par[0]));
}
if (ps->enable_icc) {
memcpy(ps->icc_par+ps->num_env, ps->icc_par+source, sizeof(ps->icc_par[0]));
}
if (ps->enable_ipdopd) {
memcpy(ps->ipd_par+ps->num_env, ps->ipd_par+source, sizeof(ps->ipd_par[0]));
memcpy(ps->opd_par+ps->num_env, ps->opd_par+source, sizeof(ps->opd_par[0]));
}
}
if (ps->enable_iid){
for (b = 0; b < ps->nr_iid_par; b++) {
if (FFABS(ps->iid_par[ps->num_env][b]) > 7 + 8 * ps->iid_quant) {
av_log(avctx, AV_LOG_ERROR, "iid_par invalid\n");
goto err;
}
}
}
if (ps->enable_icc){
for (b = 0; b < ps->nr_iid_par; b++) {
if (ps->icc_par[ps->num_env][b] > 7U) {
av_log(avctx, AV_LOG_ERROR, "icc_par invalid\n");
goto err;
}
}
}
ps->num_env++;
ps->border_position[ps->num_env] = numQMFSlots - 1;
}
ps->is34bands_old = ps->is34bands;
if (!PS_BASELINE && (ps->enable_iid || ps->enable_icc))
ps->is34bands = (ps->enable_iid && ps->nr_iid_par == 34) ||
(ps->enable_icc && ps->nr_icc_par == 34);
//Baseline
if (!ps->enable_ipdopd) {
memset(ps->ipd_par, 0, sizeof(ps->ipd_par));
memset(ps->opd_par, 0, sizeof(ps->opd_par));
}
if (header)
ps->start = 1;
bits_consumed = get_bits_count(gb) - bit_count_start;
if (bits_consumed <= bits_left) {
skip_bits_long(gb_host, bits_consumed);
return bits_consumed;
}
av_log(avctx, AV_LOG_ERROR, "Expected to read %d PS bits actually read %d.\n", bits_left, bits_consumed);
err:
ps->start = 0;
skip_bits_long(gb_host, bits_left);
memset(ps->iid_par, 0, sizeof(ps->iid_par));
memset(ps->icc_par, 0, sizeof(ps->icc_par));
memset(ps->ipd_par, 0, sizeof(ps->ipd_par));
memset(ps->opd_par, 0, sizeof(ps->opd_par));
return bits_left;
}
/** Split one subband into 2 subsubbands with a symmetric real filter. /** Split one subband into 2 subsubbands with a symmetric real filter.
* The filter must have its non-center even coefficients equal to zero. */ * The filter must have its non-center even coefficients equal to zero. */
static void hybrid2_re(INTFLOAT (*in)[2], INTFLOAT (*out)[32][2], const INTFLOAT filter[8], int len, int reverse) static void hybrid2_re(INTFLOAT (*in)[2], INTFLOAT (*out)[32][2], const INTFLOAT filter[8], int len, int reverse)
@ -409,14 +672,14 @@ static void decorrelation(PSContext *ps, INTFLOAT (*out)[32][2], const INTFLOAT
const float transient_impact = 1.5f; const float transient_impact = 1.5f;
const float a_smooth = 0.25f; ///< Smoothing coefficient const float a_smooth = 0.25f; ///< Smoothing coefficient
#endif /* USE_FIXED */ #endif /* USE_FIXED */
const int8_t *const k_to_i = is34 ? ff_k_to_i_34 : ff_k_to_i_20; const int8_t *k_to_i = is34 ? k_to_i_34 : k_to_i_20;
int i, k, m, n; int i, k, m, n;
int n0 = 0, nL = 32; int n0 = 0, nL = 32;
const INTFLOAT peak_decay_factor = Q31(0.76592833836465f); const INTFLOAT peak_decay_factor = Q31(0.76592833836465f);
memset(power, 0, 34 * sizeof(*power)); memset(power, 0, 34 * sizeof(*power));
if (is34 != ps->common.is34bands_old) { if (is34 != ps->is34bands_old) {
memset(ps->peak_decay_nrg, 0, sizeof(ps->peak_decay_nrg)); memset(ps->peak_decay_nrg, 0, sizeof(ps->peak_decay_nrg));
memset(ps->power_smooth, 0, sizeof(ps->power_smooth)); memset(ps->power_smooth, 0, sizeof(ps->power_smooth));
memset(ps->peak_decay_diff_smooth, 0, sizeof(ps->peak_decay_diff_smooth)); memset(ps->peak_decay_diff_smooth, 0, sizeof(ps->peak_decay_diff_smooth));
@ -558,7 +821,6 @@ static void stereo_processing(PSContext *ps, INTFLOAT (*l)[32][2], INTFLOAT (*r)
{ {
int e, b, k; int e, b, k;
PSCommonContext *const ps2 = &ps->common;
INTFLOAT (*H11)[PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC] = ps->H11; INTFLOAT (*H11)[PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC] = ps->H11;
INTFLOAT (*H12)[PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC] = ps->H12; INTFLOAT (*H12)[PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC] = ps->H12;
INTFLOAT (*H21)[PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC] = ps->H21; INTFLOAT (*H21)[PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC] = ps->H21;
@ -573,29 +835,29 @@ static void stereo_processing(PSContext *ps, INTFLOAT (*l)[32][2], INTFLOAT (*r)
int8_t (*icc_mapped)[PS_MAX_NR_IIDICC] = icc_mapped_buf; int8_t (*icc_mapped)[PS_MAX_NR_IIDICC] = icc_mapped_buf;
int8_t (*ipd_mapped)[PS_MAX_NR_IIDICC] = ipd_mapped_buf; int8_t (*ipd_mapped)[PS_MAX_NR_IIDICC] = ipd_mapped_buf;
int8_t (*opd_mapped)[PS_MAX_NR_IIDICC] = opd_mapped_buf; int8_t (*opd_mapped)[PS_MAX_NR_IIDICC] = opd_mapped_buf;
const int8_t *const k_to_i = is34 ? ff_k_to_i_34 : ff_k_to_i_20; const int8_t *k_to_i = is34 ? k_to_i_34 : k_to_i_20;
TABLE_CONST INTFLOAT (*H_LUT)[8][4] = (PS_BASELINE || ps2->icc_mode < 3) ? HA : HB; TABLE_CONST INTFLOAT (*H_LUT)[8][4] = (PS_BASELINE || ps->icc_mode < 3) ? HA : HB;
//Remapping //Remapping
if (ps2->num_env_old) { if (ps->num_env_old) {
memcpy(H11[0][0], H11[0][ps2->num_env_old], sizeof(H11[0][0])); memcpy(H11[0][0], H11[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H11[0][0][0]));
memcpy(H11[1][0], H11[1][ps2->num_env_old], sizeof(H11[1][0])); memcpy(H11[1][0], H11[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H11[1][0][0]));
memcpy(H12[0][0], H12[0][ps2->num_env_old], sizeof(H12[0][0])); memcpy(H12[0][0], H12[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H12[0][0][0]));
memcpy(H12[1][0], H12[1][ps2->num_env_old], sizeof(H12[1][0])); memcpy(H12[1][0], H12[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H12[1][0][0]));
memcpy(H21[0][0], H21[0][ps2->num_env_old], sizeof(H21[0][0])); memcpy(H21[0][0], H21[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H21[0][0][0]));
memcpy(H21[1][0], H21[1][ps2->num_env_old], sizeof(H21[1][0])); memcpy(H21[1][0], H21[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H21[1][0][0]));
memcpy(H22[0][0], H22[0][ps2->num_env_old], sizeof(H22[0][0])); memcpy(H22[0][0], H22[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H22[0][0][0]));
memcpy(H22[1][0], H22[1][ps2->num_env_old], sizeof(H22[1][0])); memcpy(H22[1][0], H22[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H22[1][0][0]));
} }
if (is34) { if (is34) {
remap34(&iid_mapped, ps2->iid_par, ps2->nr_iid_par, ps2->num_env, 1); remap34(&iid_mapped, ps->iid_par, ps->nr_iid_par, ps->num_env, 1);
remap34(&icc_mapped, ps2->icc_par, ps2->nr_icc_par, ps2->num_env, 1); remap34(&icc_mapped, ps->icc_par, ps->nr_icc_par, ps->num_env, 1);
if (ps2->enable_ipdopd) { if (ps->enable_ipdopd) {
remap34(&ipd_mapped, ps2->ipd_par, ps2->nr_ipdopd_par, ps2->num_env, 0); remap34(&ipd_mapped, ps->ipd_par, ps->nr_ipdopd_par, ps->num_env, 0);
remap34(&opd_mapped, ps2->opd_par, ps2->nr_ipdopd_par, ps2->num_env, 0); remap34(&opd_mapped, ps->opd_par, ps->nr_ipdopd_par, ps->num_env, 0);
} }
if (!ps2->is34bands_old) { if (!ps->is34bands_old) {
map_val_20_to_34(H11[0][0]); map_val_20_to_34(H11[0][0]);
map_val_20_to_34(H11[1][0]); map_val_20_to_34(H11[1][0]);
map_val_20_to_34(H12[0][0]); map_val_20_to_34(H12[0][0]);
@ -607,13 +869,13 @@ static void stereo_processing(PSContext *ps, INTFLOAT (*l)[32][2], INTFLOAT (*r)
ipdopd_reset(ipd_hist, opd_hist); ipdopd_reset(ipd_hist, opd_hist);
} }
} else { } else {
remap20(&iid_mapped, ps2->iid_par, ps2->nr_iid_par, ps2->num_env, 1); remap20(&iid_mapped, ps->iid_par, ps->nr_iid_par, ps->num_env, 1);
remap20(&icc_mapped, ps2->icc_par, ps2->nr_icc_par, ps2->num_env, 1); remap20(&icc_mapped, ps->icc_par, ps->nr_icc_par, ps->num_env, 1);
if (ps2->enable_ipdopd) { if (ps->enable_ipdopd) {
remap20(&ipd_mapped, ps2->ipd_par, ps2->nr_ipdopd_par, ps2->num_env, 0); remap20(&ipd_mapped, ps->ipd_par, ps->nr_ipdopd_par, ps->num_env, 0);
remap20(&opd_mapped, ps2->opd_par, ps2->nr_ipdopd_par, ps2->num_env, 0); remap20(&opd_mapped, ps->opd_par, ps->nr_ipdopd_par, ps->num_env, 0);
} }
if (ps2->is34bands_old) { if (ps->is34bands_old) {
map_val_34_to_20(H11[0][0]); map_val_34_to_20(H11[0][0]);
map_val_34_to_20(H11[1][0]); map_val_34_to_20(H11[1][0]);
map_val_34_to_20(H12[0][0]); map_val_34_to_20(H12[0][0]);
@ -627,15 +889,15 @@ static void stereo_processing(PSContext *ps, INTFLOAT (*l)[32][2], INTFLOAT (*r)
} }
//Mixing //Mixing
for (e = 0; e < ps2->num_env; e++) { for (e = 0; e < ps->num_env; e++) {
for (b = 0; b < NR_PAR_BANDS[is34]; b++) { for (b = 0; b < NR_PAR_BANDS[is34]; b++) {
INTFLOAT h11, h12, h21, h22; INTFLOAT h11, h12, h21, h22;
h11 = H_LUT[iid_mapped[e][b] + 7 + 23 * ps2->iid_quant][icc_mapped[e][b]][0]; h11 = H_LUT[iid_mapped[e][b] + 7 + 23 * ps->iid_quant][icc_mapped[e][b]][0];
h12 = H_LUT[iid_mapped[e][b] + 7 + 23 * ps2->iid_quant][icc_mapped[e][b]][1]; h12 = H_LUT[iid_mapped[e][b] + 7 + 23 * ps->iid_quant][icc_mapped[e][b]][1];
h21 = H_LUT[iid_mapped[e][b] + 7 + 23 * ps2->iid_quant][icc_mapped[e][b]][2]; h21 = H_LUT[iid_mapped[e][b] + 7 + 23 * ps->iid_quant][icc_mapped[e][b]][2];
h22 = H_LUT[iid_mapped[e][b] + 7 + 23 * ps2->iid_quant][icc_mapped[e][b]][3]; h22 = H_LUT[iid_mapped[e][b] + 7 + 23 * ps->iid_quant][icc_mapped[e][b]][3];
if (!PS_BASELINE && ps2->enable_ipdopd && b < NR_IPDOPD_BANDS[is34]) { if (!PS_BASELINE && ps->enable_ipdopd && b < NR_IPDOPD_BANDS[is34]) {
//The spec say says to only run this smoother when enable_ipdopd //The spec say says to only run this smoother when enable_ipdopd
//is set but the reference decoder appears to run it constantly //is set but the reference decoder appears to run it constantly
INTFLOAT h11i, h12i, h21i, h22i; INTFLOAT h11i, h12i, h21i, h22i;
@ -672,8 +934,8 @@ static void stereo_processing(PSContext *ps, INTFLOAT (*l)[32][2], INTFLOAT (*r)
for (k = 0; k < NR_BANDS[is34]; k++) { for (k = 0; k < NR_BANDS[is34]; k++) {
LOCAL_ALIGNED_16(INTFLOAT, h, [2], [4]); LOCAL_ALIGNED_16(INTFLOAT, h, [2], [4]);
LOCAL_ALIGNED_16(INTFLOAT, h_step, [2], [4]); LOCAL_ALIGNED_16(INTFLOAT, h_step, [2], [4]);
int start = ps2->border_position[e]; int start = ps->border_position[e];
int stop = ps2->border_position[e+1]; int stop = ps->border_position[e+1];
INTFLOAT width = Q30(1.f) / ((stop - start) ? (stop - start) : 1); INTFLOAT width = Q30(1.f) / ((stop - start) ? (stop - start) : 1);
#if USE_FIXED #if USE_FIXED
width = FFMIN(2U*width, INT_MAX); width = FFMIN(2U*width, INT_MAX);
@ -683,7 +945,7 @@ static void stereo_processing(PSContext *ps, INTFLOAT (*l)[32][2], INTFLOAT (*r)
h[0][1] = H12[0][e][b]; h[0][1] = H12[0][e][b];
h[0][2] = H21[0][e][b]; h[0][2] = H21[0][e][b];
h[0][3] = H22[0][e][b]; h[0][3] = H22[0][e][b];
if (!PS_BASELINE && ps2->enable_ipdopd) { if (!PS_BASELINE && ps->enable_ipdopd) {
//Is this necessary? ps_04_new seems unchanged //Is this necessary? ps_04_new seems unchanged
if ((is34 && k <= 13 && k >= 9) || (!is34 && k <= 1)) { if ((is34 && k <= 13 && k >= 9) || (!is34 && k <= 1)) {
h[1][0] = -H11[1][e][b]; h[1][0] = -H11[1][e][b];
@ -702,14 +964,14 @@ static void stereo_processing(PSContext *ps, INTFLOAT (*l)[32][2], INTFLOAT (*r)
h_step[0][1] = AAC_MSUB31_V3(H12[0][e+1][b], h[0][1], width); h_step[0][1] = AAC_MSUB31_V3(H12[0][e+1][b], h[0][1], width);
h_step[0][2] = AAC_MSUB31_V3(H21[0][e+1][b], h[0][2], width); h_step[0][2] = AAC_MSUB31_V3(H21[0][e+1][b], h[0][2], width);
h_step[0][3] = AAC_MSUB31_V3(H22[0][e+1][b], h[0][3], width); h_step[0][3] = AAC_MSUB31_V3(H22[0][e+1][b], h[0][3], width);
if (!PS_BASELINE && ps2->enable_ipdopd) { if (!PS_BASELINE && ps->enable_ipdopd) {
h_step[1][0] = AAC_MSUB31_V3(H11[1][e+1][b], h[1][0], width); h_step[1][0] = AAC_MSUB31_V3(H11[1][e+1][b], h[1][0], width);
h_step[1][1] = AAC_MSUB31_V3(H12[1][e+1][b], h[1][1], width); h_step[1][1] = AAC_MSUB31_V3(H12[1][e+1][b], h[1][1], width);
h_step[1][2] = AAC_MSUB31_V3(H21[1][e+1][b], h[1][2], width); h_step[1][2] = AAC_MSUB31_V3(H21[1][e+1][b], h[1][2], width);
h_step[1][3] = AAC_MSUB31_V3(H22[1][e+1][b], h[1][3], width); h_step[1][3] = AAC_MSUB31_V3(H22[1][e+1][b], h[1][3], width);
} }
if (stop - start) if (stop - start)
ps->dsp.stereo_interpolate[!PS_BASELINE && ps2->enable_ipdopd]( ps->dsp.stereo_interpolate[!PS_BASELINE && ps->enable_ipdopd](
l[k] + 1 + start, r[k] + 1 + start, l[k] + 1 + start, r[k] + 1 + start,
h, h_step, stop - start); h, h_step, stop - start);
} }
@ -721,7 +983,7 @@ int AAC_RENAME(ff_ps_apply)(AVCodecContext *avctx, PSContext *ps, INTFLOAT L[2][
INTFLOAT (*Lbuf)[32][2] = ps->Lbuf; INTFLOAT (*Lbuf)[32][2] = ps->Lbuf;
INTFLOAT (*Rbuf)[32][2] = ps->Rbuf; INTFLOAT (*Rbuf)[32][2] = ps->Rbuf;
const int len = 32; const int len = 32;
int is34 = ps->common.is34bands; int is34 = ps->is34bands;
top += NR_BANDS[is34] - 64; top += NR_BANDS[is34] - 64;
memset(ps->delay+top, 0, (NR_BANDS[is34] - top)*sizeof(ps->delay[0])); memset(ps->delay+top, 0, (NR_BANDS[is34] - top)*sizeof(ps->delay[0]));
@ -737,9 +999,45 @@ int AAC_RENAME(ff_ps_apply)(AVCodecContext *avctx, PSContext *ps, INTFLOAT L[2][
return 0; return 0;
} }
#define PS_INIT_VLC_STATIC(num, size) \
INIT_VLC_STATIC(&vlc_ps[num], 9, ps_tmp[num].table_size / ps_tmp[num].elem_size, \
ps_tmp[num].ps_bits, 1, 1, \
ps_tmp[num].ps_codes, ps_tmp[num].elem_size, ps_tmp[num].elem_size, \
size);
#define PS_VLC_ROW(name) \
{ name ## _codes, name ## _bits, sizeof(name ## _codes), sizeof(name ## _codes[0]) }
av_cold void AAC_RENAME(ff_ps_init)(void) { av_cold void AAC_RENAME(ff_ps_init)(void) {
// Syntax initialization
static const struct {
const void *ps_codes, *ps_bits;
const unsigned int table_size, elem_size;
} ps_tmp[] = {
PS_VLC_ROW(huff_iid_df1),
PS_VLC_ROW(huff_iid_dt1),
PS_VLC_ROW(huff_iid_df0),
PS_VLC_ROW(huff_iid_dt0),
PS_VLC_ROW(huff_icc_df),
PS_VLC_ROW(huff_icc_dt),
PS_VLC_ROW(huff_ipd_df),
PS_VLC_ROW(huff_ipd_dt),
PS_VLC_ROW(huff_opd_df),
PS_VLC_ROW(huff_opd_dt),
};
PS_INIT_VLC_STATIC(0, 1544);
PS_INIT_VLC_STATIC(1, 832);
PS_INIT_VLC_STATIC(2, 1024);
PS_INIT_VLC_STATIC(3, 1036);
PS_INIT_VLC_STATIC(4, 544);
PS_INIT_VLC_STATIC(5, 544);
PS_INIT_VLC_STATIC(6, 512);
PS_INIT_VLC_STATIC(7, 512);
PS_INIT_VLC_STATIC(8, 512);
PS_INIT_VLC_STATIC(9, 512);
ps_tableinit(); ps_tableinit();
ff_ps_init_common();
} }
av_cold void AAC_RENAME(ff_ps_ctx_init)(PSContext *ps) av_cold void AAC_RENAME(ff_ps_ctx_init)(PSContext *ps)

View file

@ -24,8 +24,6 @@
#include <stdint.h> #include <stdint.h>
#include "libavutil/mem_internal.h"
#include "aacpsdsp.h" #include "aacpsdsp.h"
#include "avcodec.h" #include "avcodec.h"
#include "get_bits.h" #include "get_bits.h"
@ -39,13 +37,8 @@
#define PS_MAX_DELAY 14 #define PS_MAX_DELAY 14
#define PS_AP_LINKS 3 #define PS_AP_LINKS 3
#define PS_MAX_AP_DELAY 5 #define PS_MAX_AP_DELAY 5
#define PS_BASELINE 0 ///< Operate in Baseline PS mode
///< Baseline implies 10 or 20 stereo bands,
///< mixing mode A, and no ipd/opd
#define numQMFSlots 32 //numTimeSlots * RATE typedef struct PSContext {
typedef struct PSCommonContext {
int start; int start;
int enable_iid; int enable_iid;
int iid_quant; int iid_quant;
@ -67,10 +60,6 @@ typedef struct PSCommonContext {
int8_t opd_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Overall Phase Difference Parameters int8_t opd_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Overall Phase Difference Parameters
int is34bands; int is34bands;
int is34bands_old; int is34bands_old;
} PSCommonContext;
typedef struct PSContext {
PSCommonContext common;
DECLARE_ALIGNED(16, INTFLOAT, in_buf)[5][44][2]; DECLARE_ALIGNED(16, INTFLOAT, in_buf)[5][44][2];
DECLARE_ALIGNED(16, INTFLOAT, delay)[PS_MAX_SSB][PS_QMF_TIME_SLOTS + PS_MAX_DELAY][2]; DECLARE_ALIGNED(16, INTFLOAT, delay)[PS_MAX_SSB][PS_QMF_TIME_SLOTS + PS_MAX_DELAY][2];
@ -89,14 +78,9 @@ typedef struct PSContext {
PSDSPContext dsp; PSDSPContext dsp;
} PSContext; } PSContext;
extern const int8_t ff_k_to_i_20[];
extern const int8_t ff_k_to_i_34[];
void ff_ps_init_common(void);
void AAC_RENAME(ff_ps_init)(void); void AAC_RENAME(ff_ps_init)(void);
void AAC_RENAME(ff_ps_ctx_init)(PSContext *ps); void AAC_RENAME(ff_ps_ctx_init)(PSContext *ps);
int ff_ps_read_data(AVCodecContext *avctx, GetBitContext *gb, int AAC_RENAME(ff_ps_read_data)(AVCodecContext *avctx, GetBitContext *gb, PSContext *ps, int bits_left);
PSCommonContext *ps, int bits_left);
int AAC_RENAME(ff_ps_apply)(AVCodecContext *avctx, PSContext *ps, INTFLOAT L[2][38][64], INTFLOAT R[2][38][64], int top); int AAC_RENAME(ff_ps_apply)(AVCodecContext *avctx, PSContext *ps, INTFLOAT L[2][38][64], INTFLOAT R[2][38][64], int top);
#endif /* AVCODEC_AACPS_H */ #endif /* AVCODEC_AACPS_H */

View file

@ -36,12 +36,7 @@
#else #else
#include "libavutil/common.h" #include "libavutil/common.h"
#include "libavutil/mathematics.h" #include "libavutil/mathematics.h"
#ifdef BUILD_TABLES #include "libavutil/mem.h"
#undef DECLARE_ALIGNED
#define DECLARE_ALIGNED(align, type, variable) type variable
#else
#include "libavutil/mem_internal.h"
#endif
#include "aac_defines.h" #include "aac_defines.h"
#include "libavutil/softfloat.h" #include "libavutil/softfloat.h"

View file

@ -21,7 +21,6 @@
*/ */
#include <stdlib.h> #include <stdlib.h>
#define BUILD_TABLES
#define CONFIG_HARDCODED_TABLES 0 #define CONFIG_HARDCODED_TABLES 0
#include "aac_defines.h" #include "aac_defines.h"

View file

@ -142,17 +142,22 @@ static const int8_t huff_offset[] = {
}; };
///Table 8.48 ///Table 8.48
const int8_t ff_k_to_i_20[] = { static const int8_t k_to_i_20[] = {
1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 14, 15, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 14, 15,
15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18,
18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19
}; };
///Table 8.49 ///Table 8.49
const int8_t ff_k_to_i_34[] = { static const int8_t k_to_i_34[] = {
0, 1, 2, 3, 4, 5, 6, 6, 7, 2, 1, 0, 10, 10, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 6, 7, 2, 1, 0, 10, 10, 4, 5, 6, 7, 8,
9, 10, 11, 12, 9, 14, 11, 12, 13, 14, 15, 16, 13, 16, 17, 18, 19, 20, 21, 9, 10, 11, 12, 9, 14, 11, 12, 13, 14, 15, 16, 13, 16, 17, 18, 19, 20, 21,
22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29,
30, 30, 30, 31, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, 30, 30, 30, 31, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33,
33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33
}; };
static const INTFLOAT g1_Q2[] = {
Q31(0.0f), Q31(0.01899487526049f), Q31(0.0f), Q31(-0.07293139167538f),
Q31(0.0f), Q31(0.30596630545168f), Q31(0.5f)
};

View file

@ -31,6 +31,7 @@
#include "sbr.h" #include "sbr.h"
#include "aacsbr.h" #include "aacsbr.h"
#include "aacsbrdata.h" #include "aacsbrdata.h"
#include "aacsbr_tablegen.h"
#include "fft.h" #include "fft.h"
#include "internal.h" #include "internal.h"
#include "aacps.h" #include "aacps.h"
@ -38,7 +39,6 @@
#include "libavutil/internal.h" #include "libavutil/internal.h"
#include "libavutil/libm.h" #include "libavutil/libm.h"
#include "libavutil/avassert.h" #include "libavutil/avassert.h"
#include "libavutil/mem_internal.h"
#include <stdint.h> #include <stdint.h>
#include <float.h> #include <float.h>

View file

@ -60,6 +60,7 @@
#include "sbr.h" #include "sbr.h"
#include "aacsbr.h" #include "aacsbr.h"
#include "aacsbrdata.h" #include "aacsbrdata.h"
#include "aacsbr_fixed_tablegen.h"
#include "fft.h" #include "fft.h"
#include "aacps.h" #include "aacps.h"
#include "sbrdsp.h" #include "sbrdsp.h"

View file

@ -0,0 +1,28 @@
/*
* Header file for hardcoded AAC SBR windows
*
* Copyright (c) 2014 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
*
* 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_AACSBR_FIXED_TABLEGEN_H
#define AVCODEC_AACSBR_FIXED_TABLEGEN_H
#include "aacsbr_tablegen_common.h"
#endif /* AVCODEC_AACSBR_FIXED_TABLEGEN_H */

View file

@ -0,0 +1,28 @@
/*
* Header file for hardcoded AAC SBR windows
*
* Copyright (c) 2014 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
*
* 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_AACSBR_TABLEGEN_H
#define AVCODEC_AACSBR_TABLEGEN_H
#include "aacsbr_tablegen_common.h"
#endif /* AVCODEC_AACSBR_TABLEGEN_H */

View file

@ -0,0 +1,114 @@
/*
* Header file for hardcoded AAC SBR windows
*
* Copyright (c) 2014 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
*
* 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_AACSBR_TABLEGEN_COMMON_H
#define AVCODEC_AACSBR_TABLEGEN_COMMON_H
#include "aac_defines.h"
#include "libavutil/mem.h"
///< window coefficients for analysis/synthesis QMF banks
static DECLARE_ALIGNED(32, INTFLOAT, sbr_qmf_window_ds)[320];
static DECLARE_ALIGNED(32, INTFLOAT, sbr_qmf_window_us)[640] = {
Q31( 0.0000000000f), Q31(-0.0005525286f), Q31(-0.0005617692f), Q31(-0.0004947518f),
Q31(-0.0004875227f), Q31(-0.0004893791f), Q31(-0.0005040714f), Q31(-0.0005226564f),
Q31(-0.0005466565f), Q31(-0.0005677802f), Q31(-0.0005870930f), Q31(-0.0006132747f),
Q31(-0.0006312493f), Q31(-0.0006540333f), Q31(-0.0006777690f), Q31(-0.0006941614f),
Q31(-0.0007157736f), Q31(-0.0007255043f), Q31(-0.0007440941f), Q31(-0.0007490598f),
Q31(-0.0007681371f), Q31(-0.0007724848f), Q31(-0.0007834332f), Q31(-0.0007779869f),
Q31(-0.0007803664f), Q31(-0.0007801449f), Q31(-0.0007757977f), Q31(-0.0007630793f),
Q31(-0.0007530001f), Q31(-0.0007319357f), Q31(-0.0007215391f), Q31(-0.0006917937f),
Q31(-0.0006650415f), Q31(-0.0006341594f), Q31(-0.0005946118f), Q31(-0.0005564576f),
Q31(-0.0005145572f), Q31(-0.0004606325f), Q31(-0.0004095121f), Q31(-0.0003501175f),
Q31(-0.0002896981f), Q31(-0.0002098337f), Q31(-0.0001446380f), Q31(-0.0000617334f),
Q31( 0.0000134949f), Q31( 0.0001094383f), Q31( 0.0002043017f), Q31( 0.0002949531f),
Q31( 0.0004026540f), Q31( 0.0005107388f), Q31( 0.0006239376f), Q31( 0.0007458025f),
Q31( 0.0008608443f), Q31( 0.0009885988f), Q31( 0.0011250155f), Q31( 0.0012577884f),
Q31( 0.0013902494f), Q31( 0.0015443219f), Q31( 0.0016868083f), Q31( 0.0018348265f),
Q31( 0.0019841140f), Q31( 0.0021461583f), Q31( 0.0023017254f), Q31( 0.0024625616f),
Q31( 0.0026201758f), Q31( 0.0027870464f), Q31( 0.0029469447f), Q31( 0.0031125420f),
Q31( 0.0032739613f), Q31( 0.0034418874f), Q31( 0.0036008268f), Q31( 0.0037603922f),
Q31( 0.0039207432f), Q31( 0.0040819753f), Q31( 0.0042264269f), Q31( 0.0043730719f),
Q31( 0.0045209852f), Q31( 0.0046606460f), Q31( 0.0047932560f), Q31( 0.0049137603f),
Q31( 0.0050393022f), Q31( 0.0051407353f), Q31( 0.0052461166f), Q31( 0.0053471681f),
Q31( 0.0054196775f), Q31( 0.0054876040f), Q31( 0.0055475714f), Q31( 0.0055938023f),
Q31( 0.0056220643f), Q31( 0.0056455196f), Q31( 0.0056389199f), Q31( 0.0056266114f),
Q31( 0.0055917128f), Q31( 0.0055404363f), Q31( 0.0054753783f), Q31( 0.0053838975f),
Q31( 0.0052715758f), Q31( 0.0051382275f), Q31( 0.0049839687f), Q31( 0.0048109469f),
Q31( 0.0046039530f), Q31( 0.0043801861f), Q31( 0.0041251642f), Q31( 0.0038456408f),
Q31( 0.0035401246f), Q31( 0.0032091885f), Q31( 0.0028446757f), Q31( 0.0024508540f),
Q31( 0.0020274176f), Q31( 0.0015784682f), Q31( 0.0010902329f), Q31( 0.0005832264f),
Q31( 0.0000276045f), Q31(-0.0005464280f), Q31(-0.0011568135f), Q31(-0.0018039472f),
Q31(-0.0024826723f), Q31(-0.0031933778f), Q31(-0.0039401124f), Q31(-0.0047222596f),
Q31(-0.0055337211f), Q31(-0.0063792293f), Q31(-0.0072615816f), Q31(-0.0081798233f),
Q31(-0.0091325329f), Q31(-0.0101150215f), Q31(-0.0111315548f), Q31(-0.0121849995f),
Q31( 0.0132718220f), Q31( 0.0143904666f), Q31( 0.0155405553f), Q31( 0.0167324712f),
Q31( 0.0179433381f), Q31( 0.0191872431f), Q31( 0.0204531793f), Q31( 0.0217467550f),
Q31( 0.0230680169f), Q31( 0.0244160992f), Q31( 0.0257875847f), Q31( 0.0271859429f),
Q31( 0.0286072173f), Q31( 0.0300502657f), Q31( 0.0315017608f), Q31( 0.0329754081f),
Q31( 0.0344620948f), Q31( 0.0359697560f), Q31( 0.0374812850f), Q31( 0.0390053679f),
Q31( 0.0405349170f), Q31( 0.0420649094f), Q31( 0.0436097542f), Q31( 0.0451488405f),
Q31( 0.0466843027f), Q31( 0.0482165720f), Q31( 0.0497385755f), Q31( 0.0512556155f),
Q31( 0.0527630746f), Q31( 0.0542452768f), Q31( 0.0557173648f), Q31( 0.0571616450f),
Q31( 0.0585915683f), Q31( 0.0599837480f), Q31( 0.0613455171f), Q31( 0.0626857808f),
Q31( 0.0639715898f), Q31( 0.0652247106f), Q31( 0.0664367512f), Q31( 0.0676075985f),
Q31( 0.0687043828f), Q31( 0.0697630244f), Q31( 0.0707628710f), Q31( 0.0717002673f),
Q31( 0.0725682583f), Q31( 0.0733620255f), Q31( 0.0741003642f), Q31( 0.0747452558f),
Q31( 0.0753137336f), Q31( 0.0758008358f), Q31( 0.0761992479f), Q31( 0.0764992170f),
Q31( 0.0767093490f), Q31( 0.0768173975f), Q31( 0.0768230011f), Q31( 0.0767204924f),
Q31( 0.0765050718f), Q31( 0.0761748321f), Q31( 0.0757305756f), Q31( 0.0751576255f),
Q31( 0.0744664394f), Q31( 0.0736406005f), Q31( 0.0726774642f), Q31( 0.0715826364f),
Q31( 0.0703533073f), Q31( 0.0689664013f), Q31( 0.0674525021f), Q31( 0.0657690668f),
Q31( 0.0639444805f), Q31( 0.0619602779f), Q31( 0.0598166570f), Q31( 0.0575152691f),
Q31( 0.0550460034f), Q31( 0.0524093821f), Q31( 0.0495978676f), Q31( 0.0466303305f),
Q31( 0.0434768782f), Q31( 0.0401458278f), Q31( 0.0366418116f), Q31( 0.0329583930f),
Q31( 0.0290824006f), Q31( 0.0250307561f), Q31( 0.0207997072f), Q31( 0.0163701258f),
Q31( 0.0117623832f), Q31( 0.0069636862f), Q31( 0.0019765601f), Q31(-0.0032086896f),
Q31(-0.0085711749f), Q31(-0.0141288827f), Q31(-0.0198834129f), Q31(-0.0258227288f),
Q31(-0.0319531274f), Q31(-0.0382776572f), Q31(-0.0447806821f), Q31(-0.0514804176f),
Q31(-0.0583705326f), Q31(-0.0654409853f), Q31(-0.0726943300f), Q31(-0.0801372934f),
Q31(-0.0877547536f), Q31(-0.0955533352f), Q31(-0.1035329531f), Q31(-0.1116826931f),
Q31(-0.1200077984f), Q31(-0.1285002850f), Q31(-0.1371551761f), Q31(-0.1459766491f),
Q31(-0.1549607071f), Q31(-0.1640958855f), Q31(-0.1733808172f), Q31(-0.1828172548f),
Q31(-0.1923966745f), Q31(-0.2021250176f), Q31(-0.2119735853f), Q31(-0.2219652696f),
Q31(-0.2320690870f), Q31(-0.2423016884f), Q31(-0.2526480309f), Q31(-0.2631053299f),
Q31(-0.2736634040f), Q31(-0.2843214189f), Q31(-0.2950716717f), Q31(-0.3059098575f),
Q31(-0.3168278913f), Q31(-0.3278113727f), Q31(-0.3388722693f), Q31(-0.3499914122f),
Q31( 0.3611589903f), Q31( 0.3723795546f), Q31( 0.3836350013f), Q31( 0.3949211761f),
Q31( 0.4062317676f), Q31( 0.4175696896f), Q31( 0.4289119920f), Q31( 0.4402553754f),
Q31( 0.4515996535f), Q31( 0.4629308085f), Q31( 0.4742453214f), Q31( 0.4855253091f),
Q31( 0.4967708254f), Q31( 0.5079817500f), Q31( 0.5191234970f), Q31( 0.5302240895f),
Q31( 0.5412553448f), Q31( 0.5522051258f), Q31( 0.5630789140f), Q31( 0.5738524131f),
Q31( 0.5845403235f), Q31( 0.5951123086f), Q31( 0.6055783538f), Q31( 0.6159109932f),
Q31( 0.6261242695f), Q31( 0.6361980107f), Q31( 0.6461269695f), Q31( 0.6559016302f),
Q31( 0.6655139880f), Q31( 0.6749663190f), Q31( 0.6842353293f), Q31( 0.6933282376f),
Q31( 0.7022388719f), Q31( 0.7109410426f), Q31( 0.7194462634f), Q31( 0.7277448900f),
Q31( 0.7358211758f), Q31( 0.7436827863f), Q31( 0.7513137456f), Q31( 0.7587080760f),
Q31( 0.7658674865f), Q31( 0.7727780881f), Q31( 0.7794287519f), Q31( 0.7858353120f),
Q31( 0.7919735841f), Q31( 0.7978466413f), Q31( 0.8034485751f), Q31( 0.8087695004f),
Q31( 0.8138191270f), Q31( 0.8185776004f), Q31( 0.8230419890f), Q31( 0.8272275347f),
Q31( 0.8311038457f), Q31( 0.8346937361f), Q31( 0.8379717337f), Q31( 0.8409541392f),
Q31( 0.8436238281f), Q31( 0.8459818469f), Q31( 0.8480315777f), Q31( 0.8497805198f),
Q31( 0.8511971524f), Q31( 0.8523047035f), Q31( 0.8531020949f), Q31( 0.8535720573f),
Q31( 0.8537385600f),
};
#endif /* AVCODEC_AACSBR_TABLEGEN_COMMON_H */

View file

@ -37,6 +37,10 @@
static av_cold void aacsbr_tableinit(void) static av_cold void aacsbr_tableinit(void)
{ {
int n; int n;
for (n = 1; n < 320; n++)
sbr_qmf_window_us[320 + n] = sbr_qmf_window_us[320 - n];
sbr_qmf_window_us[384] = -sbr_qmf_window_us[384];
sbr_qmf_window_us[512] = -sbr_qmf_window_us[512];
for (n = 0; n < 320; n++) for (n = 0; n < 320; n++)
sbr_qmf_window_ds[n] = sbr_qmf_window_us[2*n]; sbr_qmf_window_ds[n] = sbr_qmf_window_us[2*n];
@ -953,7 +957,7 @@ static void read_sbr_extension(AACContext *ac, SpectralBandReplication *sbr,
skip_bits_long(gb, *num_bits_left); // bs_fill_bits skip_bits_long(gb, *num_bits_left); // bs_fill_bits
*num_bits_left = 0; *num_bits_left = 0;
} else { } else {
*num_bits_left -= ff_ps_read_data(ac->avctx, gb, &sbr->ps.common, *num_bits_left); *num_bits_left -= AAC_RENAME(ff_ps_read_data)(ac->avctx, gb, &sbr->ps, *num_bits_left);
ac->avctx->profile = FF_PROFILE_AAC_HE_V2; ac->avctx->profile = FF_PROFILE_AAC_HE_V2;
} }
break; break;
@ -1544,7 +1548,7 @@ void AAC_RENAME(ff_sbr_apply)(AACContext *ac, SpectralBandReplication *sbr, int
} }
if (ac->oc[1].m4ac.ps == 1) { if (ac->oc[1].m4ac.ps == 1) {
if (sbr->ps.common.start) { if (sbr->ps.start) {
AAC_RENAME(ff_ps_apply)(ac->avctx, &sbr->ps, sbr->X[0], sbr->X[1], sbr->kx[1] + sbr->m[1]); AAC_RENAME(ff_ps_apply)(ac->avctx, &sbr->ps, sbr->X[0], sbr->X[1], sbr->kx[1] + sbr->m[1]);
} else { } else {
memcpy(sbr->X[1], sbr->X[0], sizeof(sbr->X[0])); memcpy(sbr->X[1], sbr->X[0], sizeof(sbr->X[0]));

View file

@ -29,7 +29,7 @@
#define AVCODEC_AACSBRDATA_H #define AVCODEC_AACSBRDATA_H
#include <stdint.h> #include <stdint.h>
#include "libavutil/mem_internal.h" #include "libavutil/mem.h"
#include "aac_defines.h" #include "aac_defines.h"
///< Huffman tables for SBR ///< Huffman tables for SBR
@ -532,171 +532,4 @@ const DECLARE_ALIGNED(16, INTFLOAT, AAC_RENAME(ff_sbr_noise_table))[][2] = {
{Q31(-0.01053049862020f), Q31(-0.66959058036166f)}, {Q31(-0.91266367957293f), Q31(-0.11522938140034f)}, {Q31(-0.01053049862020f), Q31(-0.66959058036166f)}, {Q31(-0.91266367957293f), Q31(-0.11522938140034f)},
}; };
///< window coefficients for analysis/synthesis QMF banks
static DECLARE_ALIGNED(32, INTFLOAT, sbr_qmf_window_ds)[320];
/* This table contains redundancy: It is symmetric about the entry #320
* with the exception of entries 384 and 512 which are negated. */
static const DECLARE_ALIGNED(32, INTFLOAT, sbr_qmf_window_us)[640] = {
Q31( 0.0000000000f), Q31(-0.0005525286f), Q31(-0.0005617692f), Q31(-0.0004947518f),
Q31(-0.0004875227f), Q31(-0.0004893791f), Q31(-0.0005040714f), Q31(-0.0005226564f),
Q31(-0.0005466565f), Q31(-0.0005677802f), Q31(-0.0005870930f), Q31(-0.0006132747f),
Q31(-0.0006312493f), Q31(-0.0006540333f), Q31(-0.0006777690f), Q31(-0.0006941614f),
Q31(-0.0007157736f), Q31(-0.0007255043f), Q31(-0.0007440941f), Q31(-0.0007490598f),
Q31(-0.0007681371f), Q31(-0.0007724848f), Q31(-0.0007834332f), Q31(-0.0007779869f),
Q31(-0.0007803664f), Q31(-0.0007801449f), Q31(-0.0007757977f), Q31(-0.0007630793f),
Q31(-0.0007530001f), Q31(-0.0007319357f), Q31(-0.0007215391f), Q31(-0.0006917937f),
Q31(-0.0006650415f), Q31(-0.0006341594f), Q31(-0.0005946118f), Q31(-0.0005564576f),
Q31(-0.0005145572f), Q31(-0.0004606325f), Q31(-0.0004095121f), Q31(-0.0003501175f),
Q31(-0.0002896981f), Q31(-0.0002098337f), Q31(-0.0001446380f), Q31(-0.0000617334f),
Q31( 0.0000134949f), Q31( 0.0001094383f), Q31( 0.0002043017f), Q31( 0.0002949531f),
Q31( 0.0004026540f), Q31( 0.0005107388f), Q31( 0.0006239376f), Q31( 0.0007458025f),
Q31( 0.0008608443f), Q31( 0.0009885988f), Q31( 0.0011250155f), Q31( 0.0012577884f),
Q31( 0.0013902494f), Q31( 0.0015443219f), Q31( 0.0016868083f), Q31( 0.0018348265f),
Q31( 0.0019841140f), Q31( 0.0021461583f), Q31( 0.0023017254f), Q31( 0.0024625616f),
Q31( 0.0026201758f), Q31( 0.0027870464f), Q31( 0.0029469447f), Q31( 0.0031125420f),
Q31( 0.0032739613f), Q31( 0.0034418874f), Q31( 0.0036008268f), Q31( 0.0037603922f),
Q31( 0.0039207432f), Q31( 0.0040819753f), Q31( 0.0042264269f), Q31( 0.0043730719f),
Q31( 0.0045209852f), Q31( 0.0046606460f), Q31( 0.0047932560f), Q31( 0.0049137603f),
Q31( 0.0050393022f), Q31( 0.0051407353f), Q31( 0.0052461166f), Q31( 0.0053471681f),
Q31( 0.0054196775f), Q31( 0.0054876040f), Q31( 0.0055475714f), Q31( 0.0055938023f),
Q31( 0.0056220643f), Q31( 0.0056455196f), Q31( 0.0056389199f), Q31( 0.0056266114f),
Q31( 0.0055917128f), Q31( 0.0055404363f), Q31( 0.0054753783f), Q31( 0.0053838975f),
Q31( 0.0052715758f), Q31( 0.0051382275f), Q31( 0.0049839687f), Q31( 0.0048109469f),
Q31( 0.0046039530f), Q31( 0.0043801861f), Q31( 0.0041251642f), Q31( 0.0038456408f),
Q31( 0.0035401246f), Q31( 0.0032091885f), Q31( 0.0028446757f), Q31( 0.0024508540f),
Q31( 0.0020274176f), Q31( 0.0015784682f), Q31( 0.0010902329f), Q31( 0.0005832264f),
Q31( 0.0000276045f), Q31(-0.0005464280f), Q31(-0.0011568135f), Q31(-0.0018039472f),
Q31(-0.0024826723f), Q31(-0.0031933778f), Q31(-0.0039401124f), Q31(-0.0047222596f),
Q31(-0.0055337211f), Q31(-0.0063792293f), Q31(-0.0072615816f), Q31(-0.0081798233f),
Q31(-0.0091325329f), Q31(-0.0101150215f), Q31(-0.0111315548f), Q31(-0.0121849995f),
Q31( 0.0132718220f), Q31( 0.0143904666f), Q31( 0.0155405553f), Q31( 0.0167324712f),
Q31( 0.0179433381f), Q31( 0.0191872431f), Q31( 0.0204531793f), Q31( 0.0217467550f),
Q31( 0.0230680169f), Q31( 0.0244160992f), Q31( 0.0257875847f), Q31( 0.0271859429f),
Q31( 0.0286072173f), Q31( 0.0300502657f), Q31( 0.0315017608f), Q31( 0.0329754081f),
Q31( 0.0344620948f), Q31( 0.0359697560f), Q31( 0.0374812850f), Q31( 0.0390053679f),
Q31( 0.0405349170f), Q31( 0.0420649094f), Q31( 0.0436097542f), Q31( 0.0451488405f),
Q31( 0.0466843027f), Q31( 0.0482165720f), Q31( 0.0497385755f), Q31( 0.0512556155f),
Q31( 0.0527630746f), Q31( 0.0542452768f), Q31( 0.0557173648f), Q31( 0.0571616450f),
Q31( 0.0585915683f), Q31( 0.0599837480f), Q31( 0.0613455171f), Q31( 0.0626857808f),
Q31( 0.0639715898f), Q31( 0.0652247106f), Q31( 0.0664367512f), Q31( 0.0676075985f),
Q31( 0.0687043828f), Q31( 0.0697630244f), Q31( 0.0707628710f), Q31( 0.0717002673f),
Q31( 0.0725682583f), Q31( 0.0733620255f), Q31( 0.0741003642f), Q31( 0.0747452558f),
Q31( 0.0753137336f), Q31( 0.0758008358f), Q31( 0.0761992479f), Q31( 0.0764992170f),
Q31( 0.0767093490f), Q31( 0.0768173975f), Q31( 0.0768230011f), Q31( 0.0767204924f),
Q31( 0.0765050718f), Q31( 0.0761748321f), Q31( 0.0757305756f), Q31( 0.0751576255f),
Q31( 0.0744664394f), Q31( 0.0736406005f), Q31( 0.0726774642f), Q31( 0.0715826364f),
Q31( 0.0703533073f), Q31( 0.0689664013f), Q31( 0.0674525021f), Q31( 0.0657690668f),
Q31( 0.0639444805f), Q31( 0.0619602779f), Q31( 0.0598166570f), Q31( 0.0575152691f),
Q31( 0.0550460034f), Q31( 0.0524093821f), Q31( 0.0495978676f), Q31( 0.0466303305f),
Q31( 0.0434768782f), Q31( 0.0401458278f), Q31( 0.0366418116f), Q31( 0.0329583930f),
Q31( 0.0290824006f), Q31( 0.0250307561f), Q31( 0.0207997072f), Q31( 0.0163701258f),
Q31( 0.0117623832f), Q31( 0.0069636862f), Q31( 0.0019765601f), Q31(-0.0032086896f),
Q31(-0.0085711749f), Q31(-0.0141288827f), Q31(-0.0198834129f), Q31(-0.0258227288f),
Q31(-0.0319531274f), Q31(-0.0382776572f), Q31(-0.0447806821f), Q31(-0.0514804176f),
Q31(-0.0583705326f), Q31(-0.0654409853f), Q31(-0.0726943300f), Q31(-0.0801372934f),
Q31(-0.0877547536f), Q31(-0.0955533352f), Q31(-0.1035329531f), Q31(-0.1116826931f),
Q31(-0.1200077984f), Q31(-0.1285002850f), Q31(-0.1371551761f), Q31(-0.1459766491f),
Q31(-0.1549607071f), Q31(-0.1640958855f), Q31(-0.1733808172f), Q31(-0.1828172548f),
Q31(-0.1923966745f), Q31(-0.2021250176f), Q31(-0.2119735853f), Q31(-0.2219652696f),
Q31(-0.2320690870f), Q31(-0.2423016884f), Q31(-0.2526480309f), Q31(-0.2631053299f),
Q31(-0.2736634040f), Q31(-0.2843214189f), Q31(-0.2950716717f), Q31(-0.3059098575f),
Q31(-0.3168278913f), Q31(-0.3278113727f), Q31(-0.3388722693f), Q31(-0.3499914122f),
Q31( 0.3611589903f), Q31( 0.3723795546f), Q31( 0.3836350013f), Q31( 0.3949211761f),
Q31( 0.4062317676f), Q31( 0.4175696896f), Q31( 0.4289119920f), Q31( 0.4402553754f),
Q31( 0.4515996535f), Q31( 0.4629308085f), Q31( 0.4742453214f), Q31( 0.4855253091f),
Q31( 0.4967708254f), Q31( 0.5079817500f), Q31( 0.5191234970f), Q31( 0.5302240895f),
Q31( 0.5412553448f), Q31( 0.5522051258f), Q31( 0.5630789140f), Q31( 0.5738524131f),
Q31( 0.5845403235f), Q31( 0.5951123086f), Q31( 0.6055783538f), Q31( 0.6159109932f),
Q31( 0.6261242695f), Q31( 0.6361980107f), Q31( 0.6461269695f), Q31( 0.6559016302f),
Q31( 0.6655139880f), Q31( 0.6749663190f), Q31( 0.6842353293f), Q31( 0.6933282376f),
Q31( 0.7022388719f), Q31( 0.7109410426f), Q31( 0.7194462634f), Q31( 0.7277448900f),
Q31( 0.7358211758f), Q31( 0.7436827863f), Q31( 0.7513137456f), Q31( 0.7587080760f),
Q31( 0.7658674865f), Q31( 0.7727780881f), Q31( 0.7794287519f), Q31( 0.7858353120f),
Q31( 0.7919735841f), Q31( 0.7978466413f), Q31( 0.8034485751f), Q31( 0.8087695004f),
Q31( 0.8138191270f), Q31( 0.8185776004f), Q31( 0.8230419890f), Q31( 0.8272275347f),
Q31( 0.8311038457f), Q31( 0.8346937361f), Q31( 0.8379717337f), Q31( 0.8409541392f),
Q31( 0.8436238281f), Q31( 0.8459818469f), Q31( 0.8480315777f), Q31( 0.8497805198f),
Q31( 0.8511971524f), Q31( 0.8523047035f), Q31( 0.8531020949f), Q31( 0.8535720573f),
Q31( 0.8537385600f), Q31( 0.8535720573f), Q31( 0.8531020949f), Q31( 0.8523047035f),
Q31( 0.8511971524f), Q31( 0.8497805198f), Q31( 0.8480315777f), Q31( 0.8459818469f),
Q31( 0.8436238281f), Q31( 0.8409541392f), Q31( 0.8379717337f), Q31( 0.8346937361f),
Q31( 0.8311038457f), Q31( 0.8272275347f), Q31( 0.8230419890f), Q31( 0.8185776004f),
Q31( 0.8138191270f), Q31( 0.8087695004f), Q31( 0.8034485751f), Q31( 0.7978466413f),
Q31( 0.7919735841f), Q31( 0.7858353120f), Q31( 0.7794287519f), Q31( 0.7727780881f),
Q31( 0.7658674865f), Q31( 0.7587080760f), Q31( 0.7513137456f), Q31( 0.7436827863f),
Q31( 0.7358211758f), Q31( 0.7277448900f), Q31( 0.7194462634f), Q31( 0.7109410426f),
Q31( 0.7022388719f), Q31( 0.6933282376f), Q31( 0.6842353293f), Q31( 0.6749663190f),
Q31( 0.6655139880f), Q31( 0.6559016302f), Q31( 0.6461269695f), Q31( 0.6361980107f),
Q31( 0.6261242695f), Q31( 0.6159109932f), Q31( 0.6055783538f), Q31( 0.5951123086f),
Q31( 0.5845403235f), Q31( 0.5738524131f), Q31( 0.5630789140f), Q31( 0.5522051258f),
Q31( 0.5412553448f), Q31( 0.5302240895f), Q31( 0.5191234970f), Q31( 0.5079817500f),
Q31( 0.4967708254f), Q31( 0.4855253091f), Q31( 0.4742453214f), Q31( 0.4629308085f),
Q31( 0.4515996535f), Q31( 0.4402553754f), Q31( 0.4289119920f), Q31( 0.4175696896f),
Q31( 0.4062317676f), Q31( 0.3949211761f), Q31( 0.3836350013f), Q31( 0.3723795546f),
-Q31( 0.3611589903f), Q31(-0.3499914122f), Q31(-0.3388722693f), Q31(-0.3278113727f),
Q31(-0.3168278913f), Q31(-0.3059098575f), Q31(-0.2950716717f), Q31(-0.2843214189f),
Q31(-0.2736634040f), Q31(-0.2631053299f), Q31(-0.2526480309f), Q31(-0.2423016884f),
Q31(-0.2320690870f), Q31(-0.2219652696f), Q31(-0.2119735853f), Q31(-0.2021250176f),
Q31(-0.1923966745f), Q31(-0.1828172548f), Q31(-0.1733808172f), Q31(-0.1640958855f),
Q31(-0.1549607071f), Q31(-0.1459766491f), Q31(-0.1371551761f), Q31(-0.1285002850f),
Q31(-0.1200077984f), Q31(-0.1116826931f), Q31(-0.1035329531f), Q31(-0.0955533352f),
Q31(-0.0877547536f), Q31(-0.0801372934f), Q31(-0.0726943300f), Q31(-0.0654409853f),
Q31(-0.0583705326f), Q31(-0.0514804176f), Q31(-0.0447806821f), Q31(-0.0382776572f),
Q31(-0.0319531274f), Q31(-0.0258227288f), Q31(-0.0198834129f), Q31(-0.0141288827f),
Q31(-0.0085711749f), Q31(-0.0032086896f), Q31( 0.0019765601f), Q31( 0.0069636862f),
Q31( 0.0117623832f), Q31( 0.0163701258f), Q31( 0.0207997072f), Q31( 0.0250307561f),
Q31( 0.0290824006f), Q31( 0.0329583930f), Q31( 0.0366418116f), Q31( 0.0401458278f),
Q31( 0.0434768782f), Q31( 0.0466303305f), Q31( 0.0495978676f), Q31( 0.0524093821f),
Q31( 0.0550460034f), Q31( 0.0575152691f), Q31( 0.0598166570f), Q31( 0.0619602779f),
Q31( 0.0639444805f), Q31( 0.0657690668f), Q31( 0.0674525021f), Q31( 0.0689664013f),
Q31( 0.0703533073f), Q31( 0.0715826364f), Q31( 0.0726774642f), Q31( 0.0736406005f),
Q31( 0.0744664394f), Q31( 0.0751576255f), Q31( 0.0757305756f), Q31( 0.0761748321f),
Q31( 0.0765050718f), Q31( 0.0767204924f), Q31( 0.0768230011f), Q31( 0.0768173975f),
Q31( 0.0767093490f), Q31( 0.0764992170f), Q31( 0.0761992479f), Q31( 0.0758008358f),
Q31( 0.0753137336f), Q31( 0.0747452558f), Q31( 0.0741003642f), Q31( 0.0733620255f),
Q31( 0.0725682583f), Q31( 0.0717002673f), Q31( 0.0707628710f), Q31( 0.0697630244f),
Q31( 0.0687043828f), Q31( 0.0676075985f), Q31( 0.0664367512f), Q31( 0.0652247106f),
Q31( 0.0639715898f), Q31( 0.0626857808f), Q31( 0.0613455171f), Q31( 0.0599837480f),
Q31( 0.0585915683f), Q31( 0.0571616450f), Q31( 0.0557173648f), Q31( 0.0542452768f),
Q31( 0.0527630746f), Q31( 0.0512556155f), Q31( 0.0497385755f), Q31( 0.0482165720f),
Q31( 0.0466843027f), Q31( 0.0451488405f), Q31( 0.0436097542f), Q31( 0.0420649094f),
Q31( 0.0405349170f), Q31( 0.0390053679f), Q31( 0.0374812850f), Q31( 0.0359697560f),
Q31( 0.0344620948f), Q31( 0.0329754081f), Q31( 0.0315017608f), Q31( 0.0300502657f),
Q31( 0.0286072173f), Q31( 0.0271859429f), Q31( 0.0257875847f), Q31( 0.0244160992f),
Q31( 0.0230680169f), Q31( 0.0217467550f), Q31( 0.0204531793f), Q31( 0.0191872431f),
Q31( 0.0179433381f), Q31( 0.0167324712f), Q31( 0.0155405553f), Q31( 0.0143904666f),
-Q31( 0.0132718220f), Q31(-0.0121849995f), Q31(-0.0111315548f), Q31(-0.0101150215f),
Q31(-0.0091325329f), Q31(-0.0081798233f), Q31(-0.0072615816f), Q31(-0.0063792293f),
Q31(-0.0055337211f), Q31(-0.0047222596f), Q31(-0.0039401124f), Q31(-0.0031933778f),
Q31(-0.0024826723f), Q31(-0.0018039472f), Q31(-0.0011568135f), Q31(-0.0005464280f),
Q31( 0.0000276045f), Q31( 0.0005832264f), Q31( 0.0010902329f), Q31( 0.0015784682f),
Q31( 0.0020274176f), Q31( 0.0024508540f), Q31( 0.0028446757f), Q31( 0.0032091885f),
Q31( 0.0035401246f), Q31( 0.0038456408f), Q31( 0.0041251642f), Q31( 0.0043801861f),
Q31( 0.0046039530f), Q31( 0.0048109469f), Q31( 0.0049839687f), Q31( 0.0051382275f),
Q31( 0.0052715758f), Q31( 0.0053838975f), Q31( 0.0054753783f), Q31( 0.0055404363f),
Q31( 0.0055917128f), Q31( 0.0056266114f), Q31( 0.0056389199f), Q31( 0.0056455196f),
Q31( 0.0056220643f), Q31( 0.0055938023f), Q31( 0.0055475714f), Q31( 0.0054876040f),
Q31( 0.0054196775f), Q31( 0.0053471681f), Q31( 0.0052461166f), Q31( 0.0051407353f),
Q31( 0.0050393022f), Q31( 0.0049137603f), Q31( 0.0047932560f), Q31( 0.0046606460f),
Q31( 0.0045209852f), Q31( 0.0043730719f), Q31( 0.0042264269f), Q31( 0.0040819753f),
Q31( 0.0039207432f), Q31( 0.0037603922f), Q31( 0.0036008268f), Q31( 0.0034418874f),
Q31( 0.0032739613f), Q31( 0.0031125420f), Q31( 0.0029469447f), Q31( 0.0027870464f),
Q31( 0.0026201758f), Q31( 0.0024625616f), Q31( 0.0023017254f), Q31( 0.0021461583f),
Q31( 0.0019841140f), Q31( 0.0018348265f), Q31( 0.0016868083f), Q31( 0.0015443219f),
Q31( 0.0013902494f), Q31( 0.0012577884f), Q31( 0.0011250155f), Q31( 0.0009885988f),
Q31( 0.0008608443f), Q31( 0.0007458025f), Q31( 0.0006239376f), Q31( 0.0005107388f),
Q31( 0.0004026540f), Q31( 0.0002949531f), Q31( 0.0002043017f), Q31( 0.0001094383f),
Q31( 0.0000134949f), Q31(-0.0000617334f), Q31(-0.0001446380f), Q31(-0.0002098337f),
Q31(-0.0002896981f), Q31(-0.0003501175f), Q31(-0.0004095121f), Q31(-0.0004606325f),
Q31(-0.0005145572f), Q31(-0.0005564576f), Q31(-0.0005946118f), Q31(-0.0006341594f),
Q31(-0.0006650415f), Q31(-0.0006917937f), Q31(-0.0007215391f), Q31(-0.0007319357f),
Q31(-0.0007530001f), Q31(-0.0007630793f), Q31(-0.0007757977f), Q31(-0.0007801449f),
Q31(-0.0007803664f), Q31(-0.0007779869f), Q31(-0.0007834332f), Q31(-0.0007724848f),
Q31(-0.0007681371f), Q31(-0.0007490598f), Q31(-0.0007440941f), Q31(-0.0007255043f),
Q31(-0.0007157736f), Q31(-0.0006941614f), Q31(-0.0006777690f), Q31(-0.0006540333f),
Q31(-0.0006312493f), Q31(-0.0006132747f), Q31(-0.0005870930f), Q31(-0.0005677802f),
Q31(-0.0005466565f), Q31(-0.0005226564f), Q31(-0.0005040714f), Q31(-0.0004893791f),
Q31(-0.0004875227f), Q31(-0.0004947518f), Q31(-0.0005617692f), Q31(-0.0005525286f),
};
#endif /* AVCODEC_AACSBRDATA_H */ #endif /* AVCODEC_AACSBRDATA_H */

Some files were not shown because too many files have changed in this diff Show more