diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..551ef3b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,60 @@
+# Built application files
+*.apk
+*.ap_
+
+# Files for the ART/Dalvik VM
+*.dex
+
+# Java class files
+*.class
+
+# Generated files
+bin/
+gen/
+out/
+
+# Gradle files
+.gradle/
+build/
+
+# Local configuration file (sdk path, etc)
+local.properties
+
+# Proguard folder generated by Eclipse
+proguard/
+
+# Log Files
+*.log
+
+# Android Studio Navigation editor temp files
+.navigation/
+
+# Android Studio captures folder
+captures/
+
+# Intellij
+*.iml
+.idea/workspace.xml
+.idea/tasks.xml
+.idea/gradle.xml
+.idea/misc.xml
+.idea/vcs.xml
+.idea/dictionaries
+.idea/libraries
+
+# Keystore files
+*.jks
+
+# External native build folder generated in Android Studio 2.2 and later
+.externalNativeBuild
+
+# Google Services (e.g. APIs or Firebase)
+google-services.json
+
+# Freeline
+freeline.py
+freeline/
+freeline_project_description.json
+
+# Keys
+app/src/main/res/values/keys.xml
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..3bee7ff
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..7f68460
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..9cecc1d
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ {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 .
+
+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:
+
+ {project} Copyright (C) {year} {fullname}
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..567609b
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+build/
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..6dfbd79
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,64 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 25
+ buildToolsVersion '26.0.2'
+ defaultConfig {
+ applicationId "sq.rogue.rosettadrone"
+ minSdkVersion 23
+ targetSdkVersion 25
+ versionCode 1
+ versionName "1.0"
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ multiDexEnabled true
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ sourceSets {
+ main {
+ jniLibs.srcDir 'libs'
+ }
+ }
+
+ packagingOptions {
+ doNotStrip "*/*/libdjivideo.so"
+ doNotStrip "*/*/libSDKRelativeJNI.so"
+ doNotStrip "*/*/libFlyForbid.so"
+ doNotStrip "*/*/libduml_vision_bokeh.so"
+ doNotStrip "*/*/libyuv2.so"
+ doNotStrip "*/*/libGroudStation.so"
+ doNotStrip "*/*/libFRCorkscrew.so"
+ doNotStrip "*/*/libUpgradeVerify.so"
+ doNotStrip "*/*/libFR.so"
+ }
+ externalNativeBuild {
+ ndkBuild {
+ path 'src/main/cpp/Android.mk'
+ }
+ }
+ defaultConfig {
+ ndk {
+ abiFilters 'x86', 'armeabi-v7a' // more could be added
+ }
+ }
+
+}
+
+dependencies {
+ compile fileTree(include: ['*.jar'], dir: 'libs')
+ androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
+ exclude group: 'com.android.support', module: 'support-annotations'
+ })
+ compile 'com.android.support:appcompat-v7:25.4.0'
+ compile 'com.android.support.constraint:constraint-layout:1.0.2'
+ compile 'com.android.support:design:25.4.0'
+ testCompile 'junit:junit:4.12'
+ compile 'com.dji:dji-sdk:4.4.1'
+ provided 'com.dji:dji-sdk-provided:4.4.1'
+ compile 'com.android.support:multidex:1.0.2'
+}
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..2cfb2f2
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,25 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /Users/markjacobsen/Library/Android/sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/app/src/androidTest/java/sq/rogue/rosettadrone/ExampleInstrumentedTest.java b/app/src/androidTest/java/sq/rogue/rosettadrone/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..0025769
--- /dev/null
+++ b/app/src/androidTest/java/sq/rogue/rosettadrone/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package sq.rogue.rosettadrone;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumentation test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() throws Exception {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getTargetContext();
+
+ assertEquals("io.diux.rogue.rosettadrone", appContext.getPackageName());
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..fd085f4
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/assets/APMArduCopterMockLink.txt b/app/src/main/assets/APMArduCopterMockLink.txt
new file mode 100644
index 0000000..4e63597
--- /dev/null
+++ b/app/src/main/assets/APMArduCopterMockLink.txt
@@ -0,0 +1,776 @@
+# Onboard parameters for Vehicle 1
+#
+# Stack: ArduPilot
+# Vehicle: Multi-Rotor
+# Version: 3.5.0 rc
+# Git Revision: efab409b
+#
+# Vehicle-Id Component-Id Name Value Type
+1 1 ACCEL_Z_D 0.000000000000000000 9
+1 1 ACCEL_Z_FF 0.000000000000000000 9
+1 1 ACCEL_Z_FILT 20.000000000000000000 9
+1 1 ACCEL_Z_I 1.000000000000000000 9
+1 1 ACCEL_Z_IMAX 800.000000000000000000 9
+1 1 ACCEL_Z_P 0.500000000000000000 9
+1 1 ACRO_BAL_PITCH 1.000000000000000000 9
+1 1 ACRO_BAL_ROLL 1.000000000000000000 9
+1 1 ACRO_RP_EXPO 0.300000011920928955 9
+1 1 ACRO_RP_P 4.500000000000000000 9
+1 1 ACRO_THR_MID 0.000000000000000000 9
+1 1 ACRO_TRAINER 2 2
+1 1 ACRO_YAW_P 3.000000000000000000 9
+1 1 ACRO_Y_EXPO 0.000000000000000000 9
+1 1 ADSB_ENABLE 0 2
+1 1 AHRS_COMP_BETA 0.100000001490116119 9
+1 1 AHRS_EKF_TYPE 2 2
+1 1 AHRS_GPS_GAIN 1.000000000000000000 9
+1 1 AHRS_GPS_MINSATS 6 2
+1 1 AHRS_GPS_USE 1 2
+1 1 AHRS_ORIENTATION 0 2
+1 1 AHRS_RP_P 0.200000002980232239 9
+1 1 AHRS_TRIM_X -0.005487891845405102 9
+1 1 AHRS_TRIM_Y 0.009387995116412640 9
+1 1 AHRS_TRIM_Z 0.000000000000000000 9
+1 1 AHRS_WIND_MAX 0 2
+1 1 AHRS_YAW_P 0.200000002980232239 9
+1 1 ANGLE_MAX 3000 4
+1 1 ARMING_ACCTHRESH 0.750000000000000000 9
+1 1 ARMING_CHECK 0 4
+1 1 ATC_ACCEL_P_MAX 110000.000000000000000000 9
+1 1 ATC_ACCEL_R_MAX 110000.000000000000000000 9
+1 1 ATC_ACCEL_Y_MAX 18000.000000000000000000 9
+1 1 ATC_ANGLE_BOOST 1 2
+1 1 ATC_ANG_LIM_TC 1.000000000000000000 9
+1 1 ATC_ANG_PIT_P 11.250000000000000000 9
+1 1 ATC_ANG_RLL_P 11.250000000000000000 9
+1 1 ATC_ANG_YAW_P 6.000000000000000000 9
+1 1 ATC_RATE_FF_ENAB 1 2
+1 1 ATC_RAT_PIT_D 0.008325000293552876 9
+1 1 ATC_RAT_PIT_FF 0.000000000000000000 9
+1 1 ATC_RAT_PIT_FILT 20.000000000000000000 9
+1 1 ATC_RAT_PIT_I 0.126000002026557922 9
+1 1 ATC_RAT_PIT_IMAX 0.222222223877906799 9
+1 1 ATC_RAT_PIT_P 0.126000002026557922 9
+1 1 ATC_RAT_RLL_D 0.011249999515712261 9
+1 1 ATC_RAT_RLL_FF 0.000000000000000000 9
+1 1 ATC_RAT_RLL_FILT 20.000000000000000000 9
+1 1 ATC_RAT_RLL_I 0.182249993085861206 9
+1 1 ATC_RAT_RLL_IMAX 0.222222223877906799 9
+1 1 ATC_RAT_RLL_P 0.182249993085861206 9
+1 1 ATC_RAT_YAW_D 0.003600000170990825 9
+1 1 ATC_RAT_YAW_FF 0.000000000000000000 9
+1 1 ATC_RAT_YAW_FILT 5.000000000000000000 9
+1 1 ATC_RAT_YAW_I 0.035999998450279236 9
+1 1 ATC_RAT_YAW_IMAX 0.222000002861022949 9
+1 1 ATC_RAT_YAW_P 0.359999984502792358 9
+1 1 ATC_SLEW_YAW 1000.000000000000000000 9
+1 1 ATC_THR_MIX_MAN 0.500000000000000000 9
+1 1 ATC_THR_MIX_MAX 0.500000000000000000 9
+1 1 ATC_THR_MIX_MIN 0.100000001490116119 9
+1 1 AUTOTUNE_AGGR 0.100000001490116119 9
+1 1 AUTOTUNE_AXES 7 2
+1 1 AUTOTUNE_MIN_D 0.001000000047497451 9
+1 1 AVD_ENABLE 0 2
+1 1 AVOID_ANGLE_MAX 1000 4
+1 1 AVOID_DIST_MAX 10.000000000000000000 9
+1 1 AVOID_ENABLE 3 2
+1 1 AVOID_MARGIN 2.000000000000000000 9
+1 1 BATT2_AMP_OFFSET 0.000000000000000000 9
+1 1 BATT2_AMP_PERVOL 17.000000000000000000 9
+1 1 BATT2_CAPACITY 3300 6
+1 1 BATT2_CURR_PIN 3 2
+1 1 BATT2_MONITOR 0 2
+1 1 BATT2_SERIAL_NUM -1 6
+1 1 BATT2_VOLT_MULT 10.100000381469726563 9
+1 1 BATT2_VOLT_PIN 2 2
+1 1 BATT_AMP_OFFSET 0.000000000000000000 9
+1 1 BATT_AMP_PERVOLT 17.000000000000000000 9
+1 1 BATT_CAPACITY 5100 6
+1 1 BATT_CURR_PIN 3 2
+1 1 BATT_MONITOR 4 2
+1 1 BATT_SERIAL_NUM -1 6
+1 1 BATT_VOLT_MULT 12.020000457763671875 9
+1 1 BATT_VOLT_PIN 2 2
+1 1 BATT_VOLT_TIMER 10 2
+1 1 BCN_ALT 0.000000000000000000 9
+1 1 BCN_LATITUDE 0.000000000000000000 9
+1 1 BCN_LONGITUDE 0.000000000000000000 9
+1 1 BCN_ORIENT_YAW 0 4
+1 1 BCN_TYPE 0 2
+1 1 BRD_CAN_ENABLE 0 2
+1 1 BRD_IMU_TARGTEMP -1 2
+1 1 BRD_IO_ENABLE 1 2
+1 1 BRD_PWM_COUNT 4 2
+1 1 BRD_SAFETYENABLE 1 2
+1 1 BRD_SAFETY_MASK 16368 6
+1 1 BRD_SBUS_OUT 0 2
+1 1 BRD_SER1_RTSCTS 2 2
+1 1 BRD_SER2_RTSCTS 2 2
+1 1 BRD_SERIAL_NUM 0 4
+1 1 BRD_TYPE 2 2
+1 1 BTN_ENABLE 0 2
+1 1 CAM_DURATION 10 2
+1 1 CAM_FEEDBACK_PIN -1 2
+1 1 CAM_FEEDBACK_POL 1 2
+1 1 CAM_MAX_ROLL 0 4
+1 1 CAM_MIN_INTERVAL 0 4
+1 1 CAM_RELAY_ON 1 2
+1 1 CAM_SERVO_OFF 1100 4
+1 1 CAM_SERVO_ON 1300 4
+1 1 CAM_TRIGG_DIST 0.000000000000000000 9
+1 1 CAM_TRIGG_TYPE 0 2
+1 1 CH10_OPT 0 2
+1 1 CH11_OPT 0 2
+1 1 CH12_OPT 0 2
+1 1 CH7_OPT 4 2
+1 1 CH8_OPT 0 2
+1 1 CH9_OPT 0 2
+1 1 CHUTE_ENABLED 0 2
+1 1 CIRCLE_RADIUS 1000.000000000000000000 9
+1 1 CIRCLE_RATE 20.000000000000000000 9
+1 1 CLI_ENABLED 0 2
+1 1 COMPASS_AUTODEC 1 2
+1 1 COMPASS_CAL_FIT 16.000000000000000000 9
+1 1 COMPASS_DEC 0.000000000000000000 9
+1 1 COMPASS_DEV_ID 466441 6
+1 1 COMPASS_DEV_ID2 131594 6
+1 1 COMPASS_DEV_ID3 0 6
+1 1 COMPASS_DIA2_X 0.990296721458435059 9
+1 1 COMPASS_DIA2_Y 0.971784174442291260 9
+1 1 COMPASS_DIA2_Z 1.007365465164184570 9
+1 1 COMPASS_DIA3_X 0.000000000000000000 9
+1 1 COMPASS_DIA3_Y 0.000000000000000000 9
+1 1 COMPASS_DIA3_Z 0.000000000000000000 9
+1 1 COMPASS_DIA_X 0.947009563446044922 9
+1 1 COMPASS_DIA_Y 0.937935292720794678 9
+1 1 COMPASS_DIA_Z 1.060336470603942871 9
+1 1 COMPASS_EXTERN2 0 2
+1 1 COMPASS_EXTERN3 0 2
+1 1 COMPASS_EXTERNAL 1 2
+1 1 COMPASS_LEARN 0 2
+1 1 COMPASS_MOT2_X 0.000000000000000000 9
+1 1 COMPASS_MOT2_Y 0.000000000000000000 9
+1 1 COMPASS_MOT2_Z 0.000000000000000000 9
+1 1 COMPASS_MOT3_X 0.000000000000000000 9
+1 1 COMPASS_MOT3_Y 0.000000000000000000 9
+1 1 COMPASS_MOT3_Z 0.000000000000000000 9
+1 1 COMPASS_MOTCT 0 2
+1 1 COMPASS_MOT_X 0.000000000000000000 9
+1 1 COMPASS_MOT_Y 0.000000000000000000 9
+1 1 COMPASS_MOT_Z 0.000000000000000000 9
+1 1 COMPASS_ODI2_X -0.006166019476950169 9
+1 1 COMPASS_ODI2_Y 0.001182210398837924 9
+1 1 COMPASS_ODI2_Z 0.018183957785367966 9
+1 1 COMPASS_ODI3_X 0.000000000000000000 9
+1 1 COMPASS_ODI3_Y 0.000000000000000000 9
+1 1 COMPASS_ODI3_Z 0.000000000000000000 9
+1 1 COMPASS_ODI_X -0.013673859648406506 9
+1 1 COMPASS_ODI_Y 0.001898076618090272 9
+1 1 COMPASS_ODI_Z -0.007604577112942934 9
+1 1 COMPASS_OFFS_MAX 600 4
+1 1 COMPASS_OFS2_X 280.823242187500000000 9
+1 1 COMPASS_OFS2_Y 87.670928955078125000 9
+1 1 COMPASS_OFS2_Z -469.461639404296875000 9
+1 1 COMPASS_OFS3_X 0.000000000000000000 9
+1 1 COMPASS_OFS3_Y 0.000000000000000000 9
+1 1 COMPASS_OFS3_Z 0.000000000000000000 9
+1 1 COMPASS_OFS_X -112.272964477539062500 9
+1 1 COMPASS_OFS_Y -5.009645462036132813 9
+1 1 COMPASS_OFS_Z 34.276287078857421875 9
+1 1 COMPASS_ORIENT 0 2
+1 1 COMPASS_ORIENT2 0 2
+1 1 COMPASS_ORIENT3 0 2
+1 1 COMPASS_PRIMARY 0 2
+1 1 COMPASS_USE 1 2
+1 1 COMPASS_USE2 1 2
+1 1 COMPASS_USE3 1 2
+1 1 DEV_OPTIONS 0 6
+1 1 DISARM_DELAY 10 2
+1 1 EK2_ABIAS_P_NSE 0.004999999888241291 9
+1 1 EK2_ACC_P_NSE 0.600000023841857910 9
+1 1 EK2_ALT_M_NSE 3.000000000000000000 9
+1 1 EK2_ALT_SOURCE 0 2
+1 1 EK2_BCN_DELAY 50 2
+1 1 EK2_BCN_I_GTE 500 4
+1 1 EK2_BCN_M_NSE 1.000000000000000000 9
+1 1 EK2_CHECK_SCALE 100 4
+1 1 EK2_EAS_I_GATE 400 4
+1 1 EK2_EAS_M_NSE 1.399999976158142090 9
+1 1 EK2_ENABLE 1 2
+1 1 EK2_FLOW_DELAY 10 2
+1 1 EK2_FLOW_I_GATE 300 4
+1 1 EK2_FLOW_M_NSE 0.250000000000000000 9
+1 1 EK2_GBIAS_P_NSE 0.000099999997473788 9
+1 1 EK2_GLITCH_RAD 25 2
+1 1 EK2_GPS_CHECK 31 2
+1 1 EK2_GPS_DELAY 220 4
+1 1 EK2_GPS_TYPE 0 2
+1 1 EK2_GSCL_P_NSE 0.000500000023748726 9
+1 1 EK2_GYRO_P_NSE 0.029999999329447746 9
+1 1 EK2_HGT_DELAY 60 4
+1 1 EK2_HGT_I_GATE 500 4
+1 1 EK2_IMU_MASK 3 2
+1 1 EK2_LOG_MASK 1 2
+1 1 EK2_MAGB_P_NSE 0.000099999997473788 9
+1 1 EK2_MAGE_P_NSE 0.001000000047497451 9
+1 1 EK2_MAG_CAL 3 2
+1 1 EK2_MAG_I_GATE 300 4
+1 1 EK2_MAG_MASK 0 2
+1 1 EK2_MAG_M_NSE 0.050000000745058060 9
+1 1 EK2_MAX_FLOW 2.500000000000000000 9
+1 1 EK2_NOAID_M_NSE 10.000000000000000000 9
+1 1 EK2_POSNE_M_NSE 1.000000000000000000 9
+1 1 EK2_POS_I_GATE 500 4
+1 1 EK2_RNG_I_GATE 500 4
+1 1 EK2_RNG_M_NSE 0.500000000000000000 9
+1 1 EK2_RNG_USE_HGT -1 2
+1 1 EK2_RNG_USE_SPD 2.000000000000000000 9
+1 1 EK2_TAU_OUTPUT 25 2
+1 1 EK2_TERR_GRAD 0.100000001490116119 9
+1 1 EK2_VELD_M_NSE 0.699999988079071045 9
+1 1 EK2_VELNE_M_NSE 0.500000000000000000 9
+1 1 EK2_VEL_I_GATE 500 4
+1 1 EK2_WIND_PSCALE 0.500000000000000000 9
+1 1 EK2_WIND_P_NSE 0.100000001490116119 9
+1 1 EK2_YAW_I_GATE 300 4
+1 1 EK2_YAW_M_NSE 0.500000000000000000 9
+1 1 EK3_ENABLE 0 2
+1 1 ESC_CALIBRATION 0 2
+1 1 FENCE_ACTION 1 2
+1 1 FENCE_ALT_MAX 100.000000000000000000 9
+1 1 FENCE_ENABLE 1 2
+1 1 FENCE_MARGIN 2.000000000000000000 9
+1 1 FENCE_RADIUS 300.000000000000000000 9
+1 1 FENCE_TOTAL 0 2
+1 1 FENCE_TYPE 3 2
+1 1 FLOW_BUS_ID 0 2
+1 1 FLOW_ENABLE 0 2
+1 1 FLOW_FXSCALER 0 4
+1 1 FLOW_FYSCALER 0 4
+1 1 FLOW_ORIENT_YAW 0 4
+1 1 FLOW_POS_X 0.000000000000000000 9
+1 1 FLOW_POS_Y 0.000000000000000000 9
+1 1 FLOW_POS_Z 0.000000000000000000 9
+1 1 FLTMODE1 0 2
+1 1 FLTMODE2 5 2
+1 1 FLTMODE3 3 2
+1 1 FLTMODE4 6 2
+1 1 FLTMODE5 6 2
+1 1 FLTMODE6 6 2
+1 1 FRAME_CLASS 1 2
+1 1 FRAME_TYPE 2 2
+1 1 FS_BATT_ENABLE 1 2
+1 1 FS_BATT_MAH 0.000000000000000000 9
+1 1 FS_BATT_VOLTAGE 10.500000000000000000 9
+1 1 FS_CRASH_CHECK 1 2
+1 1 FS_EKF_ACTION 1 2
+1 1 FS_EKF_THRESH 0.800000011920928955 9
+1 1 FS_GCS_ENABLE 1 2
+1 1 FS_THR_ENABLE 1 2
+1 1 FS_THR_VALUE 975 4
+1 1 GCS_PID_MASK 0 4
+1 1 GND_ABS_PRESS 101975.898437500000000000 9
+1 1 GND_ABS_PRESS2 0.000000000000000000 9
+1 1 GND_ABS_PRESS3 0.000000000000000000 9
+1 1 GND_ALT_OFFSET 0.000000000000000000 9
+1 1 GND_EFFECT_COMP 0 2
+1 1 GND_EXT_BUS -1 2
+1 1 GND_PRIMARY 0 2
+1 1 GND_TEMP 0.000000000000000000 9
+1 1 GPS_AUTO_CONFIG 1 2
+1 1 GPS_AUTO_SWITCH 1 2
+1 1 GPS_BLEND_MASK 5 2
+1 1 GPS_BLEND_TC 10.000000000000000000 9
+1 1 GPS_DELAY_MS 0 4
+1 1 GPS_DELAY_MS2 0 4
+1 1 GPS_GNSS_MODE 0 2
+1 1 GPS_GNSS_MODE2 0 2
+1 1 GPS_HDOP_GOOD 250 4
+1 1 GPS_INJECT_TO 127 2
+1 1 GPS_MIN_DGPS 100 2
+1 1 GPS_MIN_ELEV -100 2
+1 1 GPS_NAVFILTER 8 2
+1 1 GPS_POS1_X 0.000000000000000000 9
+1 1 GPS_POS1_Y 0.000000000000000000 9
+1 1 GPS_POS1_Z 0.000000000000000000 9
+1 1 GPS_POS2_X 0.000000000000000000 9
+1 1 GPS_POS2_Y 0.000000000000000000 9
+1 1 GPS_POS2_Z 0.000000000000000000 9
+1 1 GPS_RATE_MS 200 4
+1 1 GPS_RATE_MS2 200 4
+1 1 GPS_RAW_DATA 0 2
+1 1 GPS_SAVE_CFG 0 2
+1 1 GPS_SBAS_MODE 2 2
+1 1 GPS_SBP_LOGMASK -256 4
+1 1 GPS_TYPE 1 2
+1 1 GPS_TYPE2 0 2
+1 1 GRIP_ENABLE 0 2
+1 1 INS_ACC2OFFS_X 0.465681284666061401 9
+1 1 INS_ACC2OFFS_Y -0.163094490766525269 9
+1 1 INS_ACC2OFFS_Z 0.841708540916442871 9
+1 1 INS_ACC2SCAL_X 1.025157928466796875 9
+1 1 INS_ACC2SCAL_Y 1.017194271087646484 9
+1 1 INS_ACC2SCAL_Z 1.034052014350891113 9
+1 1 INS_ACC2_ID 1114634 6
+1 1 INS_ACC3OFFS_X 0.000000000000000000 9
+1 1 INS_ACC3OFFS_Y 0.000000000000000000 9
+1 1 INS_ACC3OFFS_Z 0.000000000000000000 9
+1 1 INS_ACC3SCAL_X 0.000000000000000000 9
+1 1 INS_ACC3SCAL_Y 0.000000000000000000 9
+1 1 INS_ACC3SCAL_Z 0.000000000000000000 9
+1 1 INS_ACC3_ID 0 6
+1 1 INS_ACCEL_FILTER 20 2
+1 1 INS_ACCOFFS_X -0.064211823046207428 9
+1 1 INS_ACCOFFS_Y -0.180485680699348450 9
+1 1 INS_ACCOFFS_Z -0.311422348022460938 9
+1 1 INS_ACCSCAL_X 0.995959579944610596 9
+1 1 INS_ACCSCAL_Y 1.004220247268676758 9
+1 1 INS_ACCSCAL_Z 0.992680013179779053 9
+1 1 INS_ACC_BODYFIX 2 2
+1 1 INS_ACC_ID 1246218 6
+1 1 INS_FAST_SAMPLE 0 2
+1 1 INS_GYR2OFFS_X 0.033170118927955627 9
+1 1 INS_GYR2OFFS_Y -0.008167488500475883 9
+1 1 INS_GYR2OFFS_Z -0.009966009296476841 9
+1 1 INS_GYR2_ID 2228490 6
+1 1 INS_GYR3OFFS_X 0.000000000000000000 9
+1 1 INS_GYR3OFFS_Y 0.000000000000000000 9
+1 1 INS_GYR3OFFS_Z 0.000000000000000000 9
+1 1 INS_GYR3_ID 0 6
+1 1 INS_GYROFFS_X -0.020668458193540573 9
+1 1 INS_GYROFFS_Y 0.071772724390029907 9
+1 1 INS_GYROFFS_Z -0.002931264694780111 9
+1 1 INS_GYRO_FILTER 20 2
+1 1 INS_GYR_CAL 1 2
+1 1 INS_GYR_ID 2163722 6
+1 1 INS_POS1_X 0.000000000000000000 9
+1 1 INS_POS1_Y 0.000000000000000000 9
+1 1 INS_POS1_Z 0.000000000000000000 9
+1 1 INS_POS2_X 0.000000000000000000 9
+1 1 INS_POS2_Y 0.000000000000000000 9
+1 1 INS_POS2_Z 0.000000000000000000 9
+1 1 INS_POS3_X 0.000000000000000000 9
+1 1 INS_POS3_Y 0.000000000000000000 9
+1 1 INS_POS3_Z 0.000000000000000000 9
+1 1 INS_PRODUCT_ID 5 4
+1 1 INS_STILL_THRESH 2.500000000000000000 9
+1 1 INS_TRIM_OPTION 1 2
+1 1 INS_USE 1 2
+1 1 INS_USE2 1 2
+1 1 INS_USE3 0 2
+1 1 LAND_REPOSITION 1 2
+1 1 LAND_SPEED 50 4
+1 1 LAND_SPEED_HIGH 0 4
+1 1 LGR_SERVO_DEPLOY 1750 4
+1 1 LGR_SERVO_RTRACT 1250 4
+1 1 LOG_BACKEND_TYPE 1 2
+1 1 LOG_BITMASK 176126 6
+1 1 LOG_DISARMED 0 2
+1 1 LOG_FILE_BUFSIZE 16 2
+1 1 LOG_FILE_DSRMROT 0 2
+1 1 LOG_REPLAY 0 2
+1 1 MAG_ENABLE 1 2
+1 1 MIS_RESTART 0 2
+1 1 MIS_TOTAL 0 4
+1 1 MNT_ANGMAX_PAN 4500 4
+1 1 MNT_ANGMAX_ROL 4500 4
+1 1 MNT_ANGMAX_TIL 0 4
+1 1 MNT_ANGMIN_PAN -4500 4
+1 1 MNT_ANGMIN_ROL -4500 4
+1 1 MNT_ANGMIN_TIL -9000 4
+1 1 MNT_DEFLT_MODE 3 2
+1 1 MNT_JSTICK_SPD 0 2
+1 1 MNT_LEAD_PTCH 0.000000000000000000 9
+1 1 MNT_LEAD_RLL 0.000000000000000000 9
+1 1 MNT_NEUTRAL_X 0.000000000000000000 9
+1 1 MNT_NEUTRAL_Y 0.000000000000000000 9
+1 1 MNT_NEUTRAL_Z 0.000000000000000000 9
+1 1 MNT_RC_IN_PAN 0 2
+1 1 MNT_RC_IN_ROLL 0 2
+1 1 MNT_RC_IN_TILT 6 2
+1 1 MNT_RETRACT_X 0.000000000000000000 9
+1 1 MNT_RETRACT_Y 0.000000000000000000 9
+1 1 MNT_RETRACT_Z 0.000000000000000000 9
+1 1 MNT_STAB_PAN 0 2
+1 1 MNT_STAB_ROLL 0 2
+1 1 MNT_STAB_TILT 0 2
+1 1 MNT_TYPE 1 2
+1 1 MOT_BAT_CURR_MAX 0.000000000000000000 9
+1 1 MOT_BAT_CURR_TC 5.000000000000000000 9
+1 1 MOT_BAT_VOLT_MAX 0.000000000000000000 9
+1 1 MOT_BAT_VOLT_MIN 0.000000000000000000 9
+1 1 MOT_HOVER_LEARN 2 2
+1 1 MOT_PWM_MAX 0 4
+1 1 MOT_PWM_MIN 0 4
+1 1 MOT_PWM_TYPE 0 2
+1 1 MOT_SAFE_DISARM 0 2
+1 1 MOT_SPIN_ARM 0.100000001490116119 9
+1 1 MOT_SPIN_MAX 0.949999988079071045 9
+1 1 MOT_SPIN_MIN 0.150000005960464478 9
+1 1 MOT_SPOOL_TIME 0.500000000000000000 9
+1 1 MOT_THST_EXPO 0.649999976158142090 9
+1 1 MOT_THST_HOVER 0.472181797027587891 9
+1 1 MOT_YAW_HEADROOM 200 4
+1 1 NTF_BUZZ_ENABLE 1 2
+1 1 NTF_DISPLAY_TYPE 0 2
+1 1 NTF_LED_BRIGHT 3 2
+1 1 NTF_LED_OVERRIDE 0 2
+1 1 PHLD_BRAKE_ANGLE 3000 4
+1 1 PHLD_BRAKE_RATE 8 4
+1 1 PILOT_ACCEL_Z 250 4
+1 1 PILOT_THR_BHV 0 4
+1 1 PILOT_THR_FILT 0.000000000000000000 9
+1 1 PILOT_TKOFF_ALT 0.000000000000000000 9
+1 1 PILOT_TKOFF_DZ 100 4
+1 1 PILOT_VELZ_MAX 250 4
+1 1 PLND_ENABLED 0 2
+1 1 POS_XY_P 1.000000000000000000 9
+1 1 POS_Z_P 1.000000000000000000 9
+1 1 PRX_IGN_ANG1 0 4
+1 1 PRX_IGN_ANG2 0 4
+1 1 PRX_IGN_ANG3 0 4
+1 1 PRX_IGN_ANG4 0 4
+1 1 PRX_IGN_ANG5 0 4
+1 1 PRX_IGN_ANG6 0 4
+1 1 PRX_IGN_WID1 0 2
+1 1 PRX_IGN_WID2 0 2
+1 1 PRX_IGN_WID3 0 2
+1 1 PRX_IGN_WID4 0 2
+1 1 PRX_IGN_WID5 0 2
+1 1 PRX_IGN_WID6 0 2
+1 1 PRX_ORIENT 0 2
+1 1 PRX_TYPE 0 2
+1 1 PRX_YAW_CORR 22 4
+1 1 PSC_ACC_XY_FILT 2.000000000000000000 9
+1 1 RALLY_INCL_HOME 1 2
+1 1 RALLY_LIMIT_KM 0.300000011920928955 9
+1 1 RALLY_TOTAL 0 2
+1 1 RC10_DZ 0 4
+1 1 RC10_MAX 2000 4
+1 1 RC10_MIN 1000 4
+1 1 RC10_REVERSED 0 2
+1 1 RC10_TRIM 1500 4
+1 1 RC11_DZ 0 4
+1 1 RC11_MAX 2000 4
+1 1 RC11_MIN 1000 4
+1 1 RC11_REVERSED 0 2
+1 1 RC11_TRIM 1500 4
+1 1 RC12_DZ 0 4
+1 1 RC12_MAX 2000 4
+1 1 RC12_MIN 1000 4
+1 1 RC12_REVERSED 0 2
+1 1 RC12_TRIM 1500 4
+1 1 RC13_DZ 0 4
+1 1 RC13_MAX 2000 4
+1 1 RC13_MIN 1000 4
+1 1 RC13_REVERSED 0 2
+1 1 RC13_TRIM 1500 4
+1 1 RC14_DZ 0 4
+1 1 RC14_MAX 2000 4
+1 1 RC14_MIN 1000 4
+1 1 RC14_REVERSED 0 2
+1 1 RC14_TRIM 1500 4
+1 1 RC15_DZ 0 4
+1 1 RC15_MAX 1900 4
+1 1 RC15_MIN 1100 4
+1 1 RC15_REVERSED 0 2
+1 1 RC15_TRIM 1500 4
+1 1 RC16_DZ 0 4
+1 1 RC16_MAX 1900 4
+1 1 RC16_MIN 1100 4
+1 1 RC16_REVERSED 0 2
+1 1 RC16_TRIM 1500 4
+1 1 RC1_DZ 10 4
+1 1 RC1_MAX 2014 4
+1 1 RC1_MIN 990 4
+1 1 RC1_REVERSED 0 2
+1 1 RC1_TRIM 1503 4
+1 1 RC2_DZ 10 4
+1 1 RC2_MAX 2015 4
+1 1 RC2_MIN 991 4
+1 1 RC2_REVERSED 0 2
+1 1 RC2_TRIM 1504 4
+1 1 RC3_DZ 30 4
+1 1 RC3_MAX 2016 4
+1 1 RC3_MIN 992 4
+1 1 RC3_REVERSED 0 2
+1 1 RC3_TRIM 992 4
+1 1 RC4_DZ 10 4
+1 1 RC4_MAX 2015 4
+1 1 RC4_MIN 992 4
+1 1 RC4_REVERSED 0 2
+1 1 RC4_TRIM 1501 4
+1 1 RC5_DZ 0 4
+1 1 RC5_MAX 2016 4
+1 1 RC5_MIN 991 4
+1 1 RC5_REVERSED 0 2
+1 1 RC5_TRIM 1503 4
+1 1 RC6_DZ 0 4
+1 1 RC6_MAX 2016 4
+1 1 RC6_MIN 991 4
+1 1 RC6_REVERSED 0 2
+1 1 RC6_TRIM 1503 4
+1 1 RC7_DZ 0 4
+1 1 RC7_MAX 2016 4
+1 1 RC7_MIN 991 4
+1 1 RC7_REVERSED 0 2
+1 1 RC7_TRIM 1503 4
+1 1 RC8_DZ 0 4
+1 1 RC8_MAX 2015 4
+1 1 RC8_MIN 991 4
+1 1 RC8_REVERSED 0 2
+1 1 RC8_TRIM 1503 4
+1 1 RC9_DZ 0 4
+1 1 RC9_MAX 2000 4
+1 1 RC9_MIN 1000 4
+1 1 RC9_REVERSED 0 2
+1 1 RC9_TRIM 1500 4
+1 1 RCMAP_PITCH 2 2
+1 1 RCMAP_ROLL 1 2
+1 1 RCMAP_THROTTLE 3 2
+1 1 RCMAP_YAW 4 2
+1 1 RC_FEEL_RP 25 2
+1 1 RC_SPEED 490 4
+1 1 RELAY_DEFAULT 0 2
+1 1 RELAY_PIN 54 2
+1 1 RELAY_PIN2 55 2
+1 1 RELAY_PIN3 -1 2
+1 1 RELAY_PIN4 -1 2
+1 1 RNGFND2_ADDR 0 2
+1 1 RNGFND2_FUNCTION 0 2
+1 1 RNGFND2_GNDCLEAR 10 2
+1 1 RNGFND2_MAX_CM 700 4
+1 1 RNGFND2_MIN_CM 20 4
+1 1 RNGFND2_OFFSET 0.000000000000000000 9
+1 1 RNGFND2_ORIENT 25 2
+1 1 RNGFND2_PIN -1 2
+1 1 RNGFND2_POS_X 0.000000000000000000 9
+1 1 RNGFND2_POS_Y 0.000000000000000000 9
+1 1 RNGFND2_POS_Z 0.000000000000000000 9
+1 1 RNGFND2_RMETRIC 1 2
+1 1 RNGFND2_SCALING 3.000000000000000000 9
+1 1 RNGFND2_SETTLE 0 4
+1 1 RNGFND2_STOP_PIN -1 2
+1 1 RNGFND2_TYPE 0 2
+1 1 RNGFND_ADDR 0 2
+1 1 RNGFND_FUNCTION 0 2
+1 1 RNGFND_GAIN 0.800000011920928955 9
+1 1 RNGFND_GNDCLEAR 10 2
+1 1 RNGFND_MAX_CM 700 4
+1 1 RNGFND_MIN_CM 20 4
+1 1 RNGFND_OFFSET 0.000000000000000000 9
+1 1 RNGFND_ORIENT 25 2
+1 1 RNGFND_PIN -1 2
+1 1 RNGFND_POS_X 0.000000000000000000 9
+1 1 RNGFND_POS_Y 0.000000000000000000 9
+1 1 RNGFND_POS_Z 0.000000000000000000 9
+1 1 RNGFND_PWRRNG 0 4
+1 1 RNGFND_RMETRIC 1 2
+1 1 RNGFND_SCALING 3.000000000000000000 9
+1 1 RNGFND_SETTLE 0 4
+1 1 RNGFND_STOP_PIN -1 2
+1 1 RNGFND_TYPE 0 2
+1 1 RPM2_PIN -1 2
+1 1 RPM2_SCALING 1.000000000000000000 9
+1 1 RPM2_TYPE 0 2
+1 1 RPM_MAX 100000.000000000000000000 9
+1 1 RPM_MIN 10.000000000000000000 9
+1 1 RPM_MIN_QUAL 0.500000000000000000 9
+1 1 RPM_PIN 54 2
+1 1 RPM_SCALING 1.000000000000000000 9
+1 1 RPM_TYPE 0 2
+1 1 RSSI_ANA_PIN 0 2
+1 1 RSSI_CHANNEL 0 2
+1 1 RSSI_CHAN_HIGH 2000 4
+1 1 RSSI_CHAN_LOW 1000 4
+1 1 RSSI_PIN_HIGH 5.000000000000000000 9
+1 1 RSSI_PIN_LOW 0.000000000000000000 9
+1 1 RSSI_TYPE 0 2
+1 1 RTL_ALT 100 4
+1 1 RTL_ALT_FINAL 0 4
+1 1 RTL_CLIMB_MIN 0 4
+1 1 RTL_CONE_SLOPE 3.000000000000000000 9
+1 1 RTL_LOIT_TIME 5000 6
+1 1 RTL_SPEED 0 4
+1 1 SCHED_DEBUG 0 2
+1 1 SCHED_LOOP_RATE 400 4
+1 1 SERIAL0_BAUD 115 6
+1 1 SERIAL0_PROTOCOL 1 2
+1 1 SERIAL1_BAUD 57 6
+1 1 SERIAL1_PROTOCOL 1 2
+1 1 SERIAL2_BAUD 9 6
+1 1 SERIAL2_PROTOCOL 3 2
+1 1 SERIAL3_BAUD 38 6
+1 1 SERIAL3_PROTOCOL 5 2
+1 1 SERIAL4_BAUD 38 6
+1 1 SERIAL4_PROTOCOL 5 2
+1 1 SERIAL5_BAUD 57 6
+1 1 SERIAL5_PROTOCOL -1 2
+1 1 SERVO10_FUNCTION 0 2
+1 1 SERVO10_MAX 2000 4
+1 1 SERVO10_MIN 1000 4
+1 1 SERVO10_REVERSED 0 2
+1 1 SERVO10_TRIM 1500 4
+1 1 SERVO11_FUNCTION 0 2
+1 1 SERVO11_MAX 2000 4
+1 1 SERVO11_MIN 1000 4
+1 1 SERVO11_REVERSED 0 2
+1 1 SERVO11_TRIM 1500 4
+1 1 SERVO12_FUNCTION 0 2
+1 1 SERVO12_MAX 2000 4
+1 1 SERVO12_MIN 1000 4
+1 1 SERVO12_REVERSED 0 2
+1 1 SERVO12_TRIM 1500 4
+1 1 SERVO13_FUNCTION 0 2
+1 1 SERVO13_MAX 2000 4
+1 1 SERVO13_MIN 1000 4
+1 1 SERVO13_REVERSED 0 2
+1 1 SERVO13_TRIM 1500 4
+1 1 SERVO14_FUNCTION 0 2
+1 1 SERVO14_MAX 2000 4
+1 1 SERVO14_MIN 1000 4
+1 1 SERVO14_REVERSED 0 2
+1 1 SERVO14_TRIM 1500 4
+1 1 SERVO15_FUNCTION 0 2
+1 1 SERVO15_MAX 1900 4
+1 1 SERVO15_MIN 1100 4
+1 1 SERVO15_REVERSED 0 2
+1 1 SERVO15_TRIM 1500 4
+1 1 SERVO16_FUNCTION 0 2
+1 1 SERVO16_MAX 1900 4
+1 1 SERVO16_MIN 1100 4
+1 1 SERVO16_REVERSED 0 2
+1 1 SERVO16_TRIM 1500 4
+1 1 SERVO1_FUNCTION 33 2
+1 1 SERVO1_MAX 2015 4
+1 1 SERVO1_MIN 991 4
+1 1 SERVO1_REVERSED 0 2
+1 1 SERVO1_TRIM 1503 4
+1 1 SERVO2_FUNCTION 34 2
+1 1 SERVO2_MAX 2016 4
+1 1 SERVO2_MIN 991 4
+1 1 SERVO2_REVERSED 0 2
+1 1 SERVO2_TRIM 1503 4
+1 1 SERVO3_FUNCTION 35 2
+1 1 SERVO3_MAX 2016 4
+1 1 SERVO3_MIN 992 4
+1 1 SERVO3_REVERSED 0 2
+1 1 SERVO3_TRIM 992 4
+1 1 SERVO4_FUNCTION 36 2
+1 1 SERVO4_MAX 2015 4
+1 1 SERVO4_MIN 991 4
+1 1 SERVO4_REVERSED 0 2
+1 1 SERVO4_TRIM 1503 4
+1 1 SERVO5_FUNCTION 0 2
+1 1 SERVO5_MAX 2016 4
+1 1 SERVO5_MIN 991 4
+1 1 SERVO5_REVERSED 0 2
+1 1 SERVO5_TRIM 1503 4
+1 1 SERVO6_FUNCTION 0 2
+1 1 SERVO6_MAX 2016 4
+1 1 SERVO6_MIN 991 4
+1 1 SERVO6_REVERSED 0 2
+1 1 SERVO6_TRIM 1503 4
+1 1 SERVO7_FUNCTION 0 2
+1 1 SERVO7_MAX 2016 4
+1 1 SERVO7_MIN 991 4
+1 1 SERVO7_REVERSED 0 2
+1 1 SERVO7_TRIM 1503 4
+1 1 SERVO8_FUNCTION 0 2
+1 1 SERVO8_MAX 2000 4
+1 1 SERVO8_MIN 1000 4
+1 1 SERVO8_REVERSED 0 2
+1 1 SERVO8_TRIM 1500 4
+1 1 SERVO9_FUNCTION 7 2
+1 1 SERVO9_MAX 2000 4
+1 1 SERVO9_MIN 1000 4
+1 1 SERVO9_REVERSED 0 2
+1 1 SERVO9_TRIM 1500 4
+1 1 SERVO_CANESC_BM 0 6
+1 1 SERVO_CANSRV_BM 0 6
+1 1 SIMPLE 0 2
+1 1 SPRAY_ENABLE 0 2
+1 1 SR0_ADSB 5 4
+1 1 SR0_EXTRA1 0 4
+1 1 SR0_EXTRA2 0 4
+1 1 SR0_EXTRA3 0 4
+1 1 SR0_EXT_STAT 0 4
+1 1 SR0_PARAMS 0 4
+1 1 SR0_POSITION 0 4
+1 1 SR0_RAW_CTRL 0 4
+1 1 SR0_RAW_SENS 0 4
+1 1 SR0_RC_CHAN 0 4
+1 1 SR1_ADSB 5 4
+1 1 SR1_EXTRA1 10 4
+1 1 SR1_EXTRA2 10 4
+1 1 SR1_EXTRA3 3 4
+1 1 SR1_EXT_STAT 2 4
+1 1 SR1_PARAMS 10 4
+1 1 SR1_POSITION 3 4
+1 1 SR1_RAW_CTRL 0 4
+1 1 SR1_RAW_SENS 2 4
+1 1 SR1_RC_CHAN 2 4
+1 1 SR2_ADSB 5 4
+1 1 SR2_EXTRA1 0 4
+1 1 SR2_EXTRA2 0 4
+1 1 SR2_EXTRA3 0 4
+1 1 SR2_EXT_STAT 0 4
+1 1 SR2_PARAMS 0 4
+1 1 SR2_POSITION 0 4
+1 1 SR2_RAW_CTRL 0 4
+1 1 SR2_RAW_SENS 0 4
+1 1 SR2_RC_CHAN 0 4
+1 1 SR3_ADSB 5 4
+1 1 SR3_EXTRA1 0 4
+1 1 SR3_EXTRA2 0 4
+1 1 SR3_EXTRA3 0 4
+1 1 SR3_EXT_STAT 0 4
+1 1 SR3_PARAMS 0 4
+1 1 SR3_POSITION 0 4
+1 1 SR3_RAW_CTRL 0 4
+1 1 SR3_RAW_SENS 0 4
+1 1 SR3_RC_CHAN 0 4
+1 1 STAT_BOOTCNT 16 4
+1 1 STAT_FLTTIME 623 6
+1 1 STAT_RESET 20034978 6
+1 1 STAT_RUNTIME 3525 6
+1 1 SUPER_SIMPLE 0 2
+1 1 SYSID_ENFORCE 0 2
+1 1 SYSID_MYGCS 255 4
+1 1 SYSID_SW_MREV 120 4
+1 1 SYSID_SW_TYPE 10 2
+1 1 SYSID_THISMAV 1 4
+1 1 TELEM_DELAY 0 2
+1 1 TERRAIN_ENABLE 1 2
+1 1 TERRAIN_FOLLOW 0 2
+1 1 TERRAIN_SPACING 100 4
+1 1 THROW_MOT_START 0 2
+1 1 THROW_NEXTMODE 18 2
+1 1 THROW_TYPE 0 2
+1 1 THR_DZ 50 4
+1 1 TUNE 0 2
+1 1 TUNE_HIGH 1000 4
+1 1 TUNE_LOW 0 4
+1 1 VEL_XY_FILT_HZ 5.000000000000000000 9
+1 1 VEL_XY_I 0.500000000000000000 9
+1 1 VEL_XY_IMAX 1000.000000000000000000 9
+1 1 VEL_XY_P 1.000000000000000000 9
+1 1 VEL_Z_P 5.000000000000000000 9
+1 1 VISO_ORIENT 0 2
+1 1 VISO_POS_X 0.000000000000000000 9
+1 1 VISO_POS_Y 0.000000000000000000 9
+1 1 VISO_POS_Z 0.000000000000000000 9
+1 1 VISO_TYPE 0 2
+1 1 WPNAV_ACCEL 250.000000000000000000 9
+1 1 WPNAV_ACCEL_Z 100.000000000000000000 9
+1 1 WPNAV_LOIT_JERK 1000.000000000000000000 9
+1 1 WPNAV_LOIT_MAXA 250.000000000000000000 9
+1 1 WPNAV_LOIT_MINA 25.000000000000000000 9
+1 1 WPNAV_LOIT_SPEED 1000.000000000000000000 9
+1 1 WPNAV_RADIUS 200.000000000000000000 9
+1 1 WPNAV_RFND_USE 1 2
+1 1 WPNAV_SPEED 650.000000000000000000 9
+1 1 WPNAV_SPEED_DN 150.000000000000000000 9
+1 1 WPNAV_SPEED_UP 250.000000000000000000 9
+1 1 WP_NAVALT_MIN 0.000000000000000000 9
+1 1 WP_YAW_BEHAVIOR 2 2
diff --git a/app/src/main/assets/DJIMock.txt b/app/src/main/assets/DJIMock.txt
new file mode 100644
index 0000000..67b36d1
--- /dev/null
+++ b/app/src/main/assets/DJIMock.txt
@@ -0,0 +1,807 @@
+# Onboard parameters for Vehicle 1
+#
+# Parameters DJI_* are implemented
+#
+# The rest are mock ArduCopter parameters lifted from QGroundControl
+#
+# Note that entries are tab-delimited. Android Studio defaults to using spaces. You can copy-paste a tab from another text editor.
+#
+# Vehicle-Id Component-Id Name Value Type Desc
+#
+# FlightController
+1 1 DJI_CTRL_MODE 2 2 MANUAL=0,SMART=2,UNKNOWN=255
+1 1 DJI_ENBL_LEDS 1 2 Turns on/off the forward LEDs, which are used to indicate aircraft status. [0,1]
+1 1 DJI_ENBL_QSPIN 1 2 Enable/disable Auto Quick Spin. When the gimbal reaches a yaw movement limit, the aircraft will automatically rotate 360 degrees to unwind the gimbal, allowing it to continue moving in the yaw direction. This method is only available when the aircraft is flying at least 3m above the ground. [0,1]
+1 1 DJI_ENBL_RADIUS 1 2 Sets whether the maximum flight radius limitation is enabled. If enabled is false, there is no maximum flight radius limitation. [0,1]
+1 1 DJI_ENBL_TFOLLOW 0 2 Enable/disable terrain follow mode. [0,1]
+1 1 DJI_ENBL_TRIPOD 0 2 Enables/disables tripod mode. [0,1]
+1 1 DJI_FAILSAFE 1 2 HOVER=0,LANDING=1,GO_HOME=2,UNKNOWN=255
+1 1 DJI_LOW_BAT 1 4 Sets the low battery warning threshold as a percentage. The percentage must be in the range of [15, 50].
+1 1 DJI_MAX_HEIGHT 500 4 Sets the maximum flight height limitation of the aircraft. [20,500 m]
+1 1 DJI_MAX_RADIUS 500 4 Sets the maximum flight radius limitation of the aircraft. The radius is calculated from the home point. The maxRadius value must be in the range [15, 500] m.
+1 1 DJI_RLPCH_MODE 1 2 Sets whether roll/pitch virtual controllers change aircraft's angle relative to level orientation, or aircraft's velocity on horizontal axes. 0=ANGLE,1=VELOCITY.
+1 1 DJI_RTL_HEIGHT 40 4 Return to home height (m)
+1 1 DJI_SERIOUS_BAT 1 4 Sets the serious low battery warning threshold as a percentage. The minimum value is 10. The maximum value is value from getLowBatteryWarningThreshold minus 5.
+1 1 DJI_SMART_RTH 1 2 Enables/disables Smart Return-To-Home (RTH) feature. When it is enabled, aircraft will request to go home when remaining battery is only enough for completing the go-home action. [0,1]
+1 1 DJI_VERT_MODE 1 2 Sets whether virtual stick vertical controller changes aircraft's altitude or vertical velocity. 0=VELOCITY,1=POSITION.
+1 1 DJI_YAW_MODE 1 2 Sets whether virtual stick yaw controller changes aircraft's heading by angle or by angular velocity. 0=ANGLE,1=ANGULAR_VELOCITY.
+# IntelligentFlightAssistant
+#1 1 DJI_COL_AVOID 1 2 TBD
+#1 1 DJI_UP_AVOID 1 2 TBD
+#1 1 DJI_ADV_GEST 1 2 TBD
+#1 1 DJI_VIS_ASSIST 1 2 TBD
+#1 1 DJI_NOVICE_MODE 1 2 TBD
+#1 1 DJI_MULTIPLE 1 2 TBD
+#1 1 DJI_PRECLAND 1 2 TBD
+#1 1 DJI_LAND_PRTCT 1 2 TBD
+# Camera
+#1 1 DJI_CAM_MODE 1 2 TBD
+#1 1 DJI_GBL_MODE 1 2 TBD
+1 1 ACCEL_Z_D 0.000000000000000000 9
+1 1 ACCEL_Z_FF 0.000000000000000000 9
+1 1 ACCEL_Z_FILT 20.000000000000000000 9
+1 1 ACCEL_Z_I 1.000000000000000000 9
+1 1 ACCEL_Z_IMAX 800.000000000000000000 9
+1 1 ACCEL_Z_P 0.500000000000000000 9
+1 1 ACRO_BAL_PITCH 1.000000000000000000 9
+1 1 ACRO_BAL_ROLL 1.000000000000000000 9
+1 1 ACRO_RP_EXPO 0.300000011920928955 9
+1 1 ACRO_RP_P 4.500000000000000000 9
+1 1 ACRO_THR_MID 0.000000000000000000 9
+1 1 ACRO_TRAINER 2 2
+1 1 ACRO_YAW_P 3.000000000000000000 9
+1 1 ACRO_Y_EXPO 0.000000000000000000 9
+1 1 ADSB_ENABLE 0 2
+1 1 AHRS_COMP_BETA 0.100000001490116119 9
+1 1 AHRS_EKF_TYPE 2 2
+1 1 AHRS_GPS_GAIN 1.000000000000000000 9
+1 1 AHRS_GPS_MINSATS 6 2
+1 1 AHRS_GPS_USE 1 2
+1 1 AHRS_ORIENTATION 0 2
+1 1 AHRS_RP_P 0.200000002980232239 9
+1 1 AHRS_TRIM_X -0.005487891845405102 9
+1 1 AHRS_TRIM_Y 0.009387995116412640 9
+1 1 AHRS_TRIM_Z 0.000000000000000000 9
+1 1 AHRS_WIND_MAX 0 2
+1 1 AHRS_YAW_P 0.200000002980232239 9
+1 1 ANGLE_MAX 3000 4
+1 1 ARMING_ACCTHRESH 0.750000000000000000 9
+1 1 ARMING_CHECK 0 4
+1 1 ATC_ACCEL_P_MAX 110000.000000000000000000 9
+1 1 ATC_ACCEL_R_MAX 110000.000000000000000000 9
+1 1 ATC_ACCEL_Y_MAX 18000.000000000000000000 9
+1 1 ATC_ANGLE_BOOST 1 2
+1 1 ATC_ANG_LIM_TC 1.000000000000000000 9
+1 1 ATC_ANG_PIT_P 11.250000000000000000 9
+1 1 ATC_ANG_RLL_P 11.250000000000000000 9
+1 1 ATC_ANG_YAW_P 6.000000000000000000 9
+1 1 ATC_RATE_FF_ENAB 1 2
+1 1 ATC_RAT_PIT_D 0.008325000293552876 9
+1 1 ATC_RAT_PIT_FF 0.000000000000000000 9
+1 1 ATC_RAT_PIT_FILT 20.000000000000000000 9
+1 1 ATC_RAT_PIT_I 0.126000002026557922 9
+1 1 ATC_RAT_PIT_IMAX 0.222222223877906799 9
+1 1 ATC_RAT_PIT_P 0.126000002026557922 9
+1 1 ATC_RAT_RLL_D 0.011249999515712261 9
+1 1 ATC_RAT_RLL_FF 0.000000000000000000 9
+1 1 ATC_RAT_RLL_FILT 20.000000000000000000 9
+1 1 ATC_RAT_RLL_I 0.182249993085861206 9
+1 1 ATC_RAT_RLL_IMAX 0.222222223877906799 9
+1 1 ATC_RAT_RLL_P 0.182249993085861206 9
+1 1 ATC_RAT_YAW_D 0.003600000170990825 9
+1 1 ATC_RAT_YAW_FF 0.000000000000000000 9
+1 1 ATC_RAT_YAW_FILT 5.000000000000000000 9
+1 1 ATC_RAT_YAW_I 0.035999998450279236 9
+1 1 ATC_RAT_YAW_IMAX 0.222000002861022949 9
+1 1 ATC_RAT_YAW_P 0.359999984502792358 9
+1 1 ATC_SLEW_YAW 1000.000000000000000000 9
+1 1 ATC_THR_MIX_MAN 0.500000000000000000 9
+1 1 ATC_THR_MIX_MAX 0.500000000000000000 9
+1 1 ATC_THR_MIX_MIN 0.100000001490116119 9
+1 1 AUTOTUNE_AGGR 0.100000001490116119 9
+1 1 AUTOTUNE_AXES 7 2
+1 1 AUTOTUNE_MIN_D 0.001000000047497451 9
+1 1 AVD_ENABLE 0 2
+1 1 AVOID_ANGLE_MAX 1000 4
+1 1 AVOID_DIST_MAX 10.000000000000000000 9
+1 1 AVOID_ENABLE 3 2
+1 1 AVOID_MARGIN 2.000000000000000000 9
+1 1 BATT2_AMP_OFFSET 0.000000000000000000 9
+1 1 BATT2_AMP_PERVOL 17.000000000000000000 9
+1 1 BATT2_CAPACITY 3300 6
+1 1 BATT2_CURR_PIN 3 2
+1 1 BATT2_MONITOR 0 2
+1 1 BATT2_SERIAL_NUM -1 6
+1 1 BATT2_VOLT_MULT 10.100000381469726563 9
+1 1 BATT2_VOLT_PIN 2 2
+1 1 BATT_AMP_OFFSET 0.000000000000000000 9
+1 1 BATT_AMP_PERVOLT 17.000000000000000000 9
+1 1 BATT_CAPACITY 5100 6
+1 1 BATT_CURR_PIN 3 2
+1 1 BATT_MONITOR 4 2
+1 1 BATT_SERIAL_NUM -1 6
+1 1 BATT_VOLT_MULT 12.020000457763671875 9
+1 1 BATT_VOLT_PIN 2 2
+1 1 BATT_VOLT_TIMER 10 2
+1 1 BCN_ALT 0.000000000000000000 9
+1 1 BCN_LATITUDE 0.000000000000000000 9
+1 1 BCN_LONGITUDE 0.000000000000000000 9
+1 1 BCN_ORIENT_YAW 0 4
+1 1 BCN_TYPE 0 2
+1 1 BRD_CAN_ENABLE 0 2
+1 1 BRD_IMU_TARGTEMP -1 2
+1 1 BRD_IO_ENABLE 1 2
+1 1 BRD_PWM_COUNT 4 2
+1 1 BRD_SAFETYENABLE 1 2
+1 1 BRD_SAFETY_MASK 16368 6
+1 1 BRD_SBUS_OUT 0 2
+1 1 BRD_SER1_RTSCTS 2 2
+1 1 BRD_SER2_RTSCTS 2 2
+1 1 BRD_SERIAL_NUM 0 4
+1 1 BRD_TYPE 2 2
+1 1 BTN_ENABLE 0 2
+1 1 CAM_DURATION 10 2
+1 1 CAM_FEEDBACK_PIN -1 2
+1 1 CAM_FEEDBACK_POL 1 2
+1 1 CAM_MAX_ROLL 0 4
+1 1 CAM_MIN_INTERVAL 0 4
+1 1 CAM_RELAY_ON 1 2
+1 1 CAM_SERVO_OFF 1100 4
+1 1 CAM_SERVO_ON 1300 4
+1 1 CAM_TRIGG_DIST 0.000000000000000000 9
+1 1 CAM_TRIGG_TYPE 0 2
+1 1 CH10_OPT 0 2
+1 1 CH11_OPT 0 2
+1 1 CH12_OPT 0 2
+1 1 CH7_OPT 4 2
+1 1 CH8_OPT 0 2
+1 1 CH9_OPT 0 2
+1 1 CHUTE_ENABLED 0 2
+1 1 CIRCLE_RADIUS 1000.000000000000000000 9
+1 1 CIRCLE_RATE 20.000000000000000000 9
+1 1 CLI_ENABLED 0 2
+1 1 COMPASS_AUTODEC 1 2
+1 1 COMPASS_CAL_FIT 16.000000000000000000 9
+1 1 COMPASS_DEC 0.000000000000000000 9
+1 1 COMPASS_DEV_ID 466441 6
+1 1 COMPASS_DEV_ID2 131594 6
+1 1 COMPASS_DEV_ID3 0 6
+1 1 COMPASS_DIA2_X 0.990296721458435059 9
+1 1 COMPASS_DIA2_Y 0.971784174442291260 9
+1 1 COMPASS_DIA2_Z 1.007365465164184570 9
+1 1 COMPASS_DIA3_X 0.000000000000000000 9
+1 1 COMPASS_DIA3_Y 0.000000000000000000 9
+1 1 COMPASS_DIA3_Z 0.000000000000000000 9
+1 1 COMPASS_DIA_X 0.947009563446044922 9
+1 1 COMPASS_DIA_Y 0.937935292720794678 9
+1 1 COMPASS_DIA_Z 1.060336470603942871 9
+1 1 COMPASS_EXTERN2 0 2
+1 1 COMPASS_EXTERN3 0 2
+1 1 COMPASS_EXTERNAL 1 2
+1 1 COMPASS_LEARN 0 2
+1 1 COMPASS_MOT2_X 0.000000000000000000 9
+1 1 COMPASS_MOT2_Y 0.000000000000000000 9
+1 1 COMPASS_MOT2_Z 0.000000000000000000 9
+1 1 COMPASS_MOT3_X 0.000000000000000000 9
+1 1 COMPASS_MOT3_Y 0.000000000000000000 9
+1 1 COMPASS_MOT3_Z 0.000000000000000000 9
+1 1 COMPASS_MOTCT 0 2
+1 1 COMPASS_MOT_X 0.000000000000000000 9
+1 1 COMPASS_MOT_Y 0.000000000000000000 9
+1 1 COMPASS_MOT_Z 0.000000000000000000 9
+1 1 COMPASS_ODI2_X -0.006166019476950169 9
+1 1 COMPASS_ODI2_Y 0.001182210398837924 9
+1 1 COMPASS_ODI2_Z 0.018183957785367966 9
+1 1 COMPASS_ODI3_X 0.000000000000000000 9
+1 1 COMPASS_ODI3_Y 0.000000000000000000 9
+1 1 COMPASS_ODI3_Z 0.000000000000000000 9
+1 1 COMPASS_ODI_X -0.013673859648406506 9
+1 1 COMPASS_ODI_Y 0.001898076618090272 9
+1 1 COMPASS_ODI_Z -0.007604577112942934 9
+1 1 COMPASS_OFFS_MAX 600 4
+1 1 COMPASS_OFS2_X 280.823242187500000000 9
+1 1 COMPASS_OFS2_Y 87.670928955078125000 9
+1 1 COMPASS_OFS2_Z -469.461639404296875000 9
+1 1 COMPASS_OFS3_X 0.000000000000000000 9
+1 1 COMPASS_OFS3_Y 0.000000000000000000 9
+1 1 COMPASS_OFS3_Z 0.000000000000000000 9
+1 1 COMPASS_OFS_X -112.272964477539062500 9
+1 1 COMPASS_OFS_Y -5.009645462036132813 9
+1 1 COMPASS_OFS_Z 34.276287078857421875 9
+1 1 COMPASS_ORIENT 0 2
+1 1 COMPASS_ORIENT2 0 2
+1 1 COMPASS_ORIENT3 0 2
+1 1 COMPASS_PRIMARY 0 2
+1 1 COMPASS_USE 1 2
+1 1 COMPASS_USE2 1 2
+1 1 COMPASS_USE3 1 2
+1 1 DEV_OPTIONS 0 6
+1 1 DISARM_DELAY 10 2
+1 1 EK2_ABIAS_P_NSE 0.004999999888241291 9
+1 1 EK2_ACC_P_NSE 0.600000023841857910 9
+1 1 EK2_ALT_M_NSE 3.000000000000000000 9
+1 1 EK2_ALT_SOURCE 0 2
+1 1 EK2_BCN_DELAY 50 2
+1 1 EK2_BCN_I_GTE 500 4
+1 1 EK2_BCN_M_NSE 1.000000000000000000 9
+1 1 EK2_CHECK_SCALE 100 4
+1 1 EK2_EAS_I_GATE 400 4
+1 1 EK2_EAS_M_NSE 1.399999976158142090 9
+1 1 EK2_ENABLE 1 2
+1 1 EK2_FLOW_DELAY 10 2
+1 1 EK2_FLOW_I_GATE 300 4
+1 1 EK2_FLOW_M_NSE 0.250000000000000000 9
+1 1 EK2_GBIAS_P_NSE 0.000099999997473788 9
+1 1 EK2_GLITCH_RAD 25 2
+1 1 EK2_GPS_CHECK 31 2
+1 1 EK2_GPS_DELAY 220 4
+1 1 EK2_GPS_TYPE 0 2
+1 1 EK2_GSCL_P_NSE 0.000500000023748726 9
+1 1 EK2_GYRO_P_NSE 0.029999999329447746 9
+1 1 EK2_HGT_DELAY 60 4
+1 1 EK2_HGT_I_GATE 500 4
+1 1 EK2_IMU_MASK 3 2
+1 1 EK2_LOG_MASK 1 2
+1 1 EK2_MAGB_P_NSE 0.000099999997473788 9
+1 1 EK2_MAGE_P_NSE 0.001000000047497451 9
+1 1 EK2_MAG_CAL 3 2
+1 1 EK2_MAG_I_GATE 300 4
+1 1 EK2_MAG_MASK 0 2
+1 1 EK2_MAG_M_NSE 0.050000000745058060 9
+1 1 EK2_MAX_FLOW 2.500000000000000000 9
+1 1 EK2_NOAID_M_NSE 10.000000000000000000 9
+1 1 EK2_POSNE_M_NSE 1.000000000000000000 9
+1 1 EK2_POS_I_GATE 500 4
+1 1 EK2_RNG_I_GATE 500 4
+1 1 EK2_RNG_M_NSE 0.500000000000000000 9
+1 1 EK2_RNG_USE_HGT -1 2
+1 1 EK2_RNG_USE_SPD 2.000000000000000000 9
+1 1 EK2_TAU_OUTPUT 25 2
+1 1 EK2_TERR_GRAD 0.100000001490116119 9
+1 1 EK2_VELD_M_NSE 0.699999988079071045 9
+1 1 EK2_VELNE_M_NSE 0.500000000000000000 9
+1 1 EK2_VEL_I_GATE 500 4
+1 1 EK2_WIND_PSCALE 0.500000000000000000 9
+1 1 EK2_WIND_P_NSE 0.100000001490116119 9
+1 1 EK2_YAW_I_GATE 300 4
+1 1 EK2_YAW_M_NSE 0.500000000000000000 9
+1 1 EK3_ENABLE 0 2
+1 1 ESC_CALIBRATION 0 2
+1 1 FENCE_ACTION 1 2
+1 1 FENCE_ALT_MAX 100.000000000000000000 9
+1 1 FENCE_ENABLE 1 2
+1 1 FENCE_MARGIN 2.000000000000000000 9
+1 1 FENCE_RADIUS 300.000000000000000000 9
+1 1 FENCE_TOTAL 0 2
+1 1 FENCE_TYPE 3 2
+1 1 FLOW_BUS_ID 0 2
+1 1 FLOW_ENABLE 0 2
+1 1 FLOW_FXSCALER 0 4
+1 1 FLOW_FYSCALER 0 4
+1 1 FLOW_ORIENT_YAW 0 4
+1 1 FLOW_POS_X 0.000000000000000000 9
+1 1 FLOW_POS_Y 0.000000000000000000 9
+1 1 FLOW_POS_Z 0.000000000000000000 9
+1 1 FLTMODE1 0 2
+1 1 FLTMODE2 5 2
+1 1 FLTMODE3 3 2
+1 1 FLTMODE4 6 2
+1 1 FLTMODE5 6 2
+1 1 FLTMODE6 6 2
+1 1 FRAME_CLASS 1 2
+1 1 FRAME_TYPE 2 2
+1 1 FS_BATT_ENABLE 1 2
+1 1 FS_BATT_MAH 0.000000000000000000 9
+1 1 FS_BATT_VOLTAGE 10.500000000000000000 9
+1 1 FS_CRASH_CHECK 1 2
+1 1 FS_EKF_ACTION 1 2
+1 1 FS_EKF_THRESH 0.800000011920928955 9
+1 1 FS_GCS_ENABLE 1 2
+1 1 FS_THR_ENABLE 1 2
+1 1 FS_THR_VALUE 975 4
+1 1 GCS_PID_MASK 0 4
+1 1 GND_ABS_PRESS 101975.898437500000000000 9
+1 1 GND_ABS_PRESS2 0.000000000000000000 9
+1 1 GND_ABS_PRESS3 0.000000000000000000 9
+1 1 GND_ALT_OFFSET 0.000000000000000000 9
+1 1 GND_EFFECT_COMP 0 2
+1 1 GND_EXT_BUS -1 2
+1 1 GND_PRIMARY 0 2
+1 1 GND_TEMP 0.000000000000000000 9
+1 1 GPS_AUTO_CONFIG 1 2
+1 1 GPS_AUTO_SWITCH 1 2
+1 1 GPS_BLEND_MASK 5 2
+1 1 GPS_BLEND_TC 10.000000000000000000 9
+1 1 GPS_DELAY_MS 0 4
+1 1 GPS_DELAY_MS2 0 4
+1 1 GPS_GNSS_MODE 0 2
+1 1 GPS_GNSS_MODE2 0 2
+1 1 GPS_HDOP_GOOD 250 4
+1 1 GPS_INJECT_TO 127 2
+1 1 GPS_MIN_DGPS 100 2
+1 1 GPS_MIN_ELEV -100 2
+1 1 GPS_NAVFILTER 8 2
+1 1 GPS_POS1_X 0.000000000000000000 9
+1 1 GPS_POS1_Y 0.000000000000000000 9
+1 1 GPS_POS1_Z 0.000000000000000000 9
+1 1 GPS_POS2_X 0.000000000000000000 9
+1 1 GPS_POS2_Y 0.000000000000000000 9
+1 1 GPS_POS2_Z 0.000000000000000000 9
+1 1 GPS_RATE_MS 200 4
+1 1 GPS_RATE_MS2 200 4
+1 1 GPS_RAW_DATA 0 2
+1 1 GPS_SAVE_CFG 0 2
+1 1 GPS_SBAS_MODE 2 2
+1 1 GPS_SBP_LOGMASK -256 4
+1 1 GPS_TYPE 1 2
+1 1 GPS_TYPE2 0 2
+1 1 GRIP_ENABLE 0 2
+1 1 INS_ACC2OFFS_X 0.465681284666061401 9
+1 1 INS_ACC2OFFS_Y -0.163094490766525269 9
+1 1 INS_ACC2OFFS_Z 0.841708540916442871 9
+1 1 INS_ACC2SCAL_X 1.025157928466796875 9
+1 1 INS_ACC2SCAL_Y 1.017194271087646484 9
+1 1 INS_ACC2SCAL_Z 1.034052014350891113 9
+1 1 INS_ACC2_ID 1114634 6
+1 1 INS_ACC3OFFS_X 0.000000000000000000 9
+1 1 INS_ACC3OFFS_Y 0.000000000000000000 9
+1 1 INS_ACC3OFFS_Z 0.000000000000000000 9
+1 1 INS_ACC3SCAL_X 0.000000000000000000 9
+1 1 INS_ACC3SCAL_Y 0.000000000000000000 9
+1 1 INS_ACC3SCAL_Z 0.000000000000000000 9
+1 1 INS_ACC3_ID 0 6
+1 1 INS_ACCEL_FILTER 20 2
+1 1 INS_ACCOFFS_X -0.064211823046207428 9
+1 1 INS_ACCOFFS_Y -0.180485680699348450 9
+1 1 INS_ACCOFFS_Z -0.311422348022460938 9
+1 1 INS_ACCSCAL_X 0.995959579944610596 9
+1 1 INS_ACCSCAL_Y 1.004220247268676758 9
+1 1 INS_ACCSCAL_Z 0.992680013179779053 9
+1 1 INS_ACC_BODYFIX 2 2
+1 1 INS_ACC_ID 1246218 6
+1 1 INS_FAST_SAMPLE 0 2
+1 1 INS_GYR2OFFS_X 0.033170118927955627 9
+1 1 INS_GYR2OFFS_Y -0.008167488500475883 9
+1 1 INS_GYR2OFFS_Z -0.009966009296476841 9
+1 1 INS_GYR2_ID 2228490 6
+1 1 INS_GYR3OFFS_X 0.000000000000000000 9
+1 1 INS_GYR3OFFS_Y 0.000000000000000000 9
+1 1 INS_GYR3OFFS_Z 0.000000000000000000 9
+1 1 INS_GYR3_ID 0 6
+1 1 INS_GYROFFS_X -0.020668458193540573 9
+1 1 INS_GYROFFS_Y 0.071772724390029907 9
+1 1 INS_GYROFFS_Z -0.002931264694780111 9
+1 1 INS_GYRO_FILTER 20 2
+1 1 INS_GYR_CAL 1 2
+1 1 INS_GYR_ID 2163722 6
+1 1 INS_POS1_X 0.000000000000000000 9
+1 1 INS_POS1_Y 0.000000000000000000 9
+1 1 INS_POS1_Z 0.000000000000000000 9
+1 1 INS_POS2_X 0.000000000000000000 9
+1 1 INS_POS2_Y 0.000000000000000000 9
+1 1 INS_POS2_Z 0.000000000000000000 9
+1 1 INS_POS3_X 0.000000000000000000 9
+1 1 INS_POS3_Y 0.000000000000000000 9
+1 1 INS_POS3_Z 0.000000000000000000 9
+1 1 INS_PRODUCT_ID 5 4
+1 1 INS_STILL_THRESH 2.500000000000000000 9
+1 1 INS_TRIM_OPTION 1 2
+1 1 INS_USE 1 2
+1 1 INS_USE2 1 2
+1 1 INS_USE3 0 2
+1 1 LAND_REPOSITION 1 2
+1 1 LAND_SPEED 50 4
+1 1 LAND_SPEED_HIGH 0 4
+1 1 LGR_SERVO_DEPLOY 1750 4
+1 1 LGR_SERVO_RTRACT 1250 4
+1 1 LOG_BACKEND_TYPE 1 2
+1 1 LOG_BITMASK 176126 6
+1 1 LOG_DISARMED 0 2
+1 1 LOG_FILE_BUFSIZE 16 2
+1 1 LOG_FILE_DSRMROT 0 2
+1 1 LOG_REPLAY 0 2
+1 1 MAG_ENABLE 1 2
+1 1 MIS_RESTART 0 2
+1 1 MIS_TOTAL 0 4
+1 1 MNT_ANGMAX_PAN 4500 4
+1 1 MNT_ANGMAX_ROL 4500 4
+1 1 MNT_ANGMAX_TIL 0 4
+1 1 MNT_ANGMIN_PAN -4500 4
+1 1 MNT_ANGMIN_ROL -4500 4
+1 1 MNT_ANGMIN_TIL -9000 4
+1 1 MNT_DEFLT_MODE 3 2
+1 1 MNT_JSTICK_SPD 0 2
+1 1 MNT_LEAD_PTCH 0.000000000000000000 9
+1 1 MNT_LEAD_RLL 0.000000000000000000 9
+1 1 MNT_NEUTRAL_X 0.000000000000000000 9
+1 1 MNT_NEUTRAL_Y 0.000000000000000000 9
+1 1 MNT_NEUTRAL_Z 0.000000000000000000 9
+1 1 MNT_RC_IN_PAN 0 2
+1 1 MNT_RC_IN_ROLL 0 2
+1 1 MNT_RC_IN_TILT 6 2
+1 1 MNT_RETRACT_X 0.000000000000000000 9
+1 1 MNT_RETRACT_Y 0.000000000000000000 9
+1 1 MNT_RETRACT_Z 0.000000000000000000 9
+1 1 MNT_STAB_PAN 0 2
+1 1 MNT_STAB_ROLL 0 2
+1 1 MNT_STAB_TILT 0 2
+1 1 MNT_TYPE 1 2
+1 1 MOT_BAT_CURR_MAX 0.000000000000000000 9
+1 1 MOT_BAT_CURR_TC 5.000000000000000000 9
+1 1 MOT_BAT_VOLT_MAX 0.000000000000000000 9
+1 1 MOT_BAT_VOLT_MIN 0.000000000000000000 9
+1 1 MOT_HOVER_LEARN 2 2
+1 1 MOT_PWM_MAX 0 4
+1 1 MOT_PWM_MIN 0 4
+1 1 MOT_PWM_TYPE 0 2
+1 1 MOT_SAFE_DISARM 0 2
+1 1 MOT_SPIN_ARM 0.100000001490116119 9
+1 1 MOT_SPIN_MAX 0.949999988079071045 9
+1 1 MOT_SPIN_MIN 0.150000005960464478 9
+1 1 MOT_SPOOL_TIME 0.500000000000000000 9
+1 1 MOT_THST_EXPO 0.649999976158142090 9
+1 1 MOT_THST_HOVER 0.472181797027587891 9
+1 1 MOT_YAW_HEADROOM 200 4
+1 1 NTF_BUZZ_ENABLE 1 2
+1 1 NTF_DISPLAY_TYPE 0 2
+1 1 NTF_LED_BRIGHT 3 2
+1 1 NTF_LED_OVERRIDE 0 2
+1 1 PHLD_BRAKE_ANGLE 3000 4
+1 1 PHLD_BRAKE_RATE 8 4
+1 1 PILOT_ACCEL_Z 250 4
+1 1 PILOT_THR_BHV 0 4
+1 1 PILOT_THR_FILT 0.000000000000000000 9
+1 1 PILOT_TKOFF_ALT 0.000000000000000000 9
+1 1 PILOT_TKOFF_DZ 100 4
+1 1 PILOT_VELZ_MAX 250 4
+1 1 PLND_ENABLED 0 2
+1 1 POS_XY_P 1.000000000000000000 9
+1 1 POS_Z_P 1.000000000000000000 9
+1 1 PRX_IGN_ANG1 0 4
+1 1 PRX_IGN_ANG2 0 4
+1 1 PRX_IGN_ANG3 0 4
+1 1 PRX_IGN_ANG4 0 4
+1 1 PRX_IGN_ANG5 0 4
+1 1 PRX_IGN_ANG6 0 4
+1 1 PRX_IGN_WID1 0 2
+1 1 PRX_IGN_WID2 0 2
+1 1 PRX_IGN_WID3 0 2
+1 1 PRX_IGN_WID4 0 2
+1 1 PRX_IGN_WID5 0 2
+1 1 PRX_IGN_WID6 0 2
+1 1 PRX_ORIENT 0 2
+1 1 PRX_TYPE 0 2
+1 1 PRX_YAW_CORR 22 4
+1 1 PSC_ACC_XY_FILT 2.000000000000000000 9
+1 1 RALLY_INCL_HOME 1 2
+1 1 RALLY_LIMIT_KM 0.300000011920928955 9
+1 1 RALLY_TOTAL 0 2
+1 1 RC10_DZ 0 4
+1 1 RC10_MAX 2000 4
+1 1 RC10_MIN 1000 4
+1 1 RC10_REVERSED 0 2
+1 1 RC10_TRIM 1500 4
+1 1 RC11_DZ 0 4
+1 1 RC11_MAX 2000 4
+1 1 RC11_MIN 1000 4
+1 1 RC11_REVERSED 0 2
+1 1 RC11_TRIM 1500 4
+1 1 RC12_DZ 0 4
+1 1 RC12_MAX 2000 4
+1 1 RC12_MIN 1000 4
+1 1 RC12_REVERSED 0 2
+1 1 RC12_TRIM 1500 4
+1 1 RC13_DZ 0 4
+1 1 RC13_MAX 2000 4
+1 1 RC13_MIN 1000 4
+1 1 RC13_REVERSED 0 2
+1 1 RC13_TRIM 1500 4
+1 1 RC14_DZ 0 4
+1 1 RC14_MAX 2000 4
+1 1 RC14_MIN 1000 4
+1 1 RC14_REVERSED 0 2
+1 1 RC14_TRIM 1500 4
+1 1 RC15_DZ 0 4
+1 1 RC15_MAX 1900 4
+1 1 RC15_MIN 1100 4
+1 1 RC15_REVERSED 0 2
+1 1 RC15_TRIM 1500 4
+1 1 RC16_DZ 0 4
+1 1 RC16_MAX 1900 4
+1 1 RC16_MIN 1100 4
+1 1 RC16_REVERSED 0 2
+1 1 RC16_TRIM 1500 4
+1 1 RC1_DZ 10 4
+1 1 RC1_MAX 2014 4
+1 1 RC1_MIN 990 4
+1 1 RC1_REVERSED 0 2
+1 1 RC1_TRIM 1503 4
+1 1 RC2_DZ 10 4
+1 1 RC2_MAX 2015 4
+1 1 RC2_MIN 991 4
+1 1 RC2_REVERSED 0 2
+1 1 RC2_TRIM 1504 4
+1 1 RC3_DZ 30 4
+1 1 RC3_MAX 2016 4
+1 1 RC3_MIN 992 4
+1 1 RC3_REVERSED 0 2
+1 1 RC3_TRIM 992 4
+1 1 RC4_DZ 10 4
+1 1 RC4_MAX 2015 4
+1 1 RC4_MIN 992 4
+1 1 RC4_REVERSED 0 2
+1 1 RC4_TRIM 1501 4
+1 1 RC5_DZ 0 4
+1 1 RC5_MAX 2016 4
+1 1 RC5_MIN 991 4
+1 1 RC5_REVERSED 0 2
+1 1 RC5_TRIM 1503 4
+1 1 RC6_DZ 0 4
+1 1 RC6_MAX 2016 4
+1 1 RC6_MIN 991 4
+1 1 RC6_REVERSED 0 2
+1 1 RC6_TRIM 1503 4
+1 1 RC7_DZ 0 4
+1 1 RC7_MAX 2016 4
+1 1 RC7_MIN 991 4
+1 1 RC7_REVERSED 0 2
+1 1 RC7_TRIM 1503 4
+1 1 RC8_DZ 0 4
+1 1 RC8_MAX 2015 4
+1 1 RC8_MIN 991 4
+1 1 RC8_REVERSED 0 2
+1 1 RC8_TRIM 1503 4
+1 1 RC9_DZ 0 4
+1 1 RC9_MAX 2000 4
+1 1 RC9_MIN 1000 4
+1 1 RC9_REVERSED 0 2
+1 1 RC9_TRIM 1500 4
+1 1 RCMAP_PITCH 2 2
+1 1 RCMAP_ROLL 1 2
+1 1 RCMAP_THROTTLE 3 2
+1 1 RCMAP_YAW 4 2
+1 1 RC_FEEL_RP 25 2
+1 1 RC_SPEED 490 4
+1 1 RELAY_DEFAULT 0 2
+1 1 RELAY_PIN 54 2
+1 1 RELAY_PIN2 55 2
+1 1 RELAY_PIN3 -1 2
+1 1 RELAY_PIN4 -1 2
+1 1 RNGFND2_ADDR 0 2
+1 1 RNGFND2_FUNCTION 0 2
+1 1 RNGFND2_GNDCLEAR 10 2
+1 1 RNGFND2_MAX_CM 700 4
+1 1 RNGFND2_MIN_CM 20 4
+1 1 RNGFND2_OFFSET 0.000000000000000000 9
+1 1 RNGFND2_ORIENT 25 2
+1 1 RNGFND2_PIN -1 2
+1 1 RNGFND2_POS_X 0.000000000000000000 9
+1 1 RNGFND2_POS_Y 0.000000000000000000 9
+1 1 RNGFND2_POS_Z 0.000000000000000000 9
+1 1 RNGFND2_RMETRIC 1 2
+1 1 RNGFND2_SCALING 3.000000000000000000 9
+1 1 RNGFND2_SETTLE 0 4
+1 1 RNGFND2_STOP_PIN -1 2
+1 1 RNGFND2_TYPE 0 2
+1 1 RNGFND_ADDR 0 2
+1 1 RNGFND_FUNCTION 0 2
+1 1 RNGFND_GAIN 0.800000011920928955 9
+1 1 RNGFND_GNDCLEAR 10 2
+1 1 RNGFND_MAX_CM 700 4
+1 1 RNGFND_MIN_CM 20 4
+1 1 RNGFND_OFFSET 0.000000000000000000 9
+1 1 RNGFND_ORIENT 25 2
+1 1 RNGFND_PIN -1 2
+1 1 RNGFND_POS_X 0.000000000000000000 9
+1 1 RNGFND_POS_Y 0.000000000000000000 9
+1 1 RNGFND_POS_Z 0.000000000000000000 9
+1 1 RNGFND_PWRRNG 0 4
+1 1 RNGFND_RMETRIC 1 2
+1 1 RNGFND_SCALING 3.000000000000000000 9
+1 1 RNGFND_SETTLE 0 4
+1 1 RNGFND_STOP_PIN -1 2
+1 1 RNGFND_TYPE 0 2
+1 1 RPM2_PIN -1 2
+1 1 RPM2_SCALING 1.000000000000000000 9
+1 1 RPM2_TYPE 0 2
+1 1 RPM_MAX 100000.000000000000000000 9
+1 1 RPM_MIN 10.000000000000000000 9
+1 1 RPM_MIN_QUAL 0.500000000000000000 9
+1 1 RPM_PIN 54 2
+1 1 RPM_SCALING 1.000000000000000000 9
+1 1 RPM_TYPE 0 2
+1 1 RSSI_ANA_PIN 0 2
+1 1 RSSI_CHANNEL 0 2
+1 1 RSSI_CHAN_HIGH 2000 4
+1 1 RSSI_CHAN_LOW 1000 4
+1 1 RSSI_PIN_HIGH 5.000000000000000000 9
+1 1 RSSI_PIN_LOW 0.000000000000000000 9
+1 1 RSSI_TYPE 0 2
+1 1 RTL_ALT 100 4
+1 1 RTL_ALT_FINAL 0 4
+1 1 RTL_CLIMB_MIN 0 4
+1 1 RTL_CONE_SLOPE 3.000000000000000000 9
+1 1 RTL_LOIT_TIME 5000 6
+1 1 RTL_SPEED 0 4
+1 1 SCHED_DEBUG 0 2
+1 1 SCHED_LOOP_RATE 400 4
+1 1 SERIAL0_BAUD 115 6
+1 1 SERIAL0_PROTOCOL 1 2
+1 1 SERIAL1_BAUD 57 6
+1 1 SERIAL1_PROTOCOL 1 2
+1 1 SERIAL2_BAUD 9 6
+1 1 SERIAL2_PROTOCOL 3 2
+1 1 SERIAL3_BAUD 38 6
+1 1 SERIAL3_PROTOCOL 5 2
+1 1 SERIAL4_BAUD 38 6
+1 1 SERIAL4_PROTOCOL 5 2
+1 1 SERIAL5_BAUD 57 6
+1 1 SERIAL5_PROTOCOL -1 2
+1 1 SERVO10_FUNCTION 0 2
+1 1 SERVO10_MAX 2000 4
+1 1 SERVO10_MIN 1000 4
+1 1 SERVO10_REVERSED 0 2
+1 1 SERVO10_TRIM 1500 4
+1 1 SERVO11_FUNCTION 0 2
+1 1 SERVO11_MAX 2000 4
+1 1 SERVO11_MIN 1000 4
+1 1 SERVO11_REVERSED 0 2
+1 1 SERVO11_TRIM 1500 4
+1 1 SERVO12_FUNCTION 0 2
+1 1 SERVO12_MAX 2000 4
+1 1 SERVO12_MIN 1000 4
+1 1 SERVO12_REVERSED 0 2
+1 1 SERVO12_TRIM 1500 4
+1 1 SERVO13_FUNCTION 0 2
+1 1 SERVO13_MAX 2000 4
+1 1 SERVO13_MIN 1000 4
+1 1 SERVO13_REVERSED 0 2
+1 1 SERVO13_TRIM 1500 4
+1 1 SERVO14_FUNCTION 0 2
+1 1 SERVO14_MAX 2000 4
+1 1 SERVO14_MIN 1000 4
+1 1 SERVO14_REVERSED 0 2
+1 1 SERVO14_TRIM 1500 4
+1 1 SERVO15_FUNCTION 0 2
+1 1 SERVO15_MAX 1900 4
+1 1 SERVO15_MIN 1100 4
+1 1 SERVO15_REVERSED 0 2
+1 1 SERVO15_TRIM 1500 4
+1 1 SERVO16_FUNCTION 0 2
+1 1 SERVO16_MAX 1900 4
+1 1 SERVO16_MIN 1100 4
+1 1 SERVO16_REVERSED 0 2
+1 1 SERVO16_TRIM 1500 4
+1 1 SERVO1_FUNCTION 33 2
+1 1 SERVO1_MAX 2015 4
+1 1 SERVO1_MIN 991 4
+1 1 SERVO1_REVERSED 0 2
+1 1 SERVO1_TRIM 1503 4
+1 1 SERVO2_FUNCTION 34 2
+1 1 SERVO2_MAX 2016 4
+1 1 SERVO2_MIN 991 4
+1 1 SERVO2_REVERSED 0 2
+1 1 SERVO2_TRIM 1503 4
+1 1 SERVO3_FUNCTION 35 2
+1 1 SERVO3_MAX 2016 4
+1 1 SERVO3_MIN 992 4
+1 1 SERVO3_REVERSED 0 2
+1 1 SERVO3_TRIM 992 4
+1 1 SERVO4_FUNCTION 36 2
+1 1 SERVO4_MAX 2015 4
+1 1 SERVO4_MIN 991 4
+1 1 SERVO4_REVERSED 0 2
+1 1 SERVO4_TRIM 1503 4
+1 1 SERVO5_FUNCTION 0 2
+1 1 SERVO5_MAX 2016 4
+1 1 SERVO5_MIN 991 4
+1 1 SERVO5_REVERSED 0 2
+1 1 SERVO5_TRIM 1503 4
+1 1 SERVO6_FUNCTION 0 2
+1 1 SERVO6_MAX 2016 4
+1 1 SERVO6_MIN 991 4
+1 1 SERVO6_REVERSED 0 2
+1 1 SERVO6_TRIM 1503 4
+1 1 SERVO7_FUNCTION 0 2
+1 1 SERVO7_MAX 2016 4
+1 1 SERVO7_MIN 991 4
+1 1 SERVO7_REVERSED 0 2
+1 1 SERVO7_TRIM 1503 4
+1 1 SERVO8_FUNCTION 0 2
+1 1 SERVO8_MAX 2000 4
+1 1 SERVO8_MIN 1000 4
+1 1 SERVO8_REVERSED 0 2
+1 1 SERVO8_TRIM 1500 4
+1 1 SERVO9_FUNCTION 7 2
+1 1 SERVO9_MAX 2000 4
+1 1 SERVO9_MIN 1000 4
+1 1 SERVO9_REVERSED 0 2
+1 1 SERVO9_TRIM 1500 4
+1 1 SERVO_CANESC_BM 0 6
+1 1 SERVO_CANSRV_BM 0 6
+1 1 SIMPLE 0 2
+1 1 SPRAY_ENABLE 0 2
+1 1 SR0_ADSB 5 4
+1 1 SR0_EXTRA1 0 4
+1 1 SR0_EXTRA2 0 4
+1 1 SR0_EXTRA3 0 4
+1 1 SR0_EXT_STAT 0 4
+1 1 SR0_PARAMS 0 4
+1 1 SR0_POSITION 0 4
+1 1 SR0_RAW_CTRL 0 4
+1 1 SR0_RAW_SENS 0 4
+1 1 SR0_RC_CHAN 0 4
+1 1 SR1_ADSB 5 4
+1 1 SR1_EXTRA1 10 4
+1 1 SR1_EXTRA2 10 4
+1 1 SR1_EXTRA3 3 4
+1 1 SR1_EXT_STAT 2 4
+1 1 SR1_PARAMS 10 4
+1 1 SR1_POSITION 3 4
+1 1 SR1_RAW_CTRL 0 4
+1 1 SR1_RAW_SENS 2 4
+1 1 SR1_RC_CHAN 2 4
+1 1 SR2_ADSB 5 4
+1 1 SR2_EXTRA1 0 4
+1 1 SR2_EXTRA2 0 4
+1 1 SR2_EXTRA3 0 4
+1 1 SR2_EXT_STAT 0 4
+1 1 SR2_PARAMS 0 4
+1 1 SR2_POSITION 0 4
+1 1 SR2_RAW_CTRL 0 4
+1 1 SR2_RAW_SENS 0 4
+1 1 SR2_RC_CHAN 0 4
+1 1 SR3_ADSB 5 4
+1 1 SR3_EXTRA1 0 4
+1 1 SR3_EXTRA2 0 4
+1 1 SR3_EXTRA3 0 4
+1 1 SR3_EXT_STAT 0 4
+1 1 SR3_PARAMS 0 4
+1 1 SR3_POSITION 0 4
+1 1 SR3_RAW_CTRL 0 4
+1 1 SR3_RAW_SENS 0 4
+1 1 SR3_RC_CHAN 0 4
+1 1 STAT_BOOTCNT 16 4
+1 1 STAT_FLTTIME 623 6
+1 1 STAT_RESET 20034978 6
+1 1 STAT_RUNTIME 3525 6
+1 1 SUPER_SIMPLE 0 2
+1 1 SYSID_ENFORCE 0 2
+1 1 SYSID_MYGCS 255 4
+1 1 SYSID_SW_MREV 120 4
+1 1 SYSID_SW_TYPE 10 2
+1 1 SYSID_THISMAV 1 4
+1 1 TELEM_DELAY 0 2
+1 1 TERRAIN_ENABLE 1 2
+1 1 TERRAIN_FOLLOW 0 2
+1 1 TERRAIN_SPACING 100 4
+1 1 THROW_MOT_START 0 2
+1 1 THROW_NEXTMODE 18 2
+1 1 THROW_TYPE 0 2
+1 1 THR_DZ 50 4
+1 1 TUNE 0 2
+1 1 TUNE_HIGH 1000 4
+1 1 TUNE_LOW 0 4
+1 1 VEL_XY_FILT_HZ 5.000000000000000000 9
+1 1 VEL_XY_I 0.500000000000000000 9
+1 1 VEL_XY_IMAX 1000.000000000000000000 9
+1 1 VEL_XY_P 1.000000000000000000 9
+1 1 VEL_Z_P 5.000000000000000000 9
+1 1 VISO_ORIENT 0 2
+1 1 VISO_POS_X 0.000000000000000000 9
+1 1 VISO_POS_Y 0.000000000000000000 9
+1 1 VISO_POS_Z 0.000000000000000000 9
+1 1 VISO_TYPE 0 2
+1 1 WPNAV_ACCEL 250.000000000000000000 9
+1 1 WPNAV_ACCEL_Z 100.000000000000000000 9
+1 1 WPNAV_LOIT_JERK 1000.000000000000000000 9
+1 1 WPNAV_LOIT_MAXA 250.000000000000000000 9
+1 1 WPNAV_LOIT_MINA 25.000000000000000000 9
+1 1 WPNAV_LOIT_SPEED 1000.000000000000000000 9
+1 1 WPNAV_RADIUS 200.000000000000000000 9
+1 1 WPNAV_RFND_USE 1 2
+1 1 WPNAV_SPEED 650.000000000000000000 9
+1 1 WPNAV_SPEED_DN 150.000000000000000000 9
+1 1 WPNAV_SPEED_UP 250.000000000000000000 9
+1 1 WP_NAVALT_MIN 0.000000000000000000 9
+1 1 WP_YAW_BEHAVIOR 2 2
diff --git a/app/src/main/cpp/Android.mk b/app/src/main/cpp/Android.mk
new file mode 100644
index 0000000..6dbcacb
--- /dev/null
+++ b/app/src/main/cpp/Android.mk
@@ -0,0 +1,22 @@
+CUR_LOCAL_PATH := $(call my-dir)
+include $(all-subdir-makefiles)
+
+
+# FFmpeg library
+include $(CLEAR_VARS)
+LOCAL_MODULE := ffmpegjni
+LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libffmpeg.so
+include $(PREBUILT_SHARED_LIBRARY)
+
+
+
+# Program
+include $(CLEAR_VARS)
+LOCAL_PATH := $(CUR_LOCAL_PATH)
+PATH_TO_LIBFFMPEG_SO=$(LOCAL_PATH)
+LOCAL_MODULE := djivideojni
+LOCAL_SRC_FILES :=dji_video_jni.c
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/include
+LOCAL_LDLIBS := -llog -lz
+LOCAL_SHARED_LIBRARIES := ffmpegjni
+include $(BUILD_SHARED_LIBRARY)
diff --git a/app/src/main/cpp/Application.mk b/app/src/main/cpp/Application.mk
new file mode 100644
index 0000000..2be9f56
--- /dev/null
+++ b/app/src/main/cpp/Application.mk
@@ -0,0 +1,3 @@
+NDK_TOOLCHAIN_VERSION = 4.9
+APP_ABI := armeabi-v7a x86
+APP_PLATFORM := android-16
\ No newline at end of file
diff --git a/app/src/main/cpp/Application64.mk b/app/src/main/cpp/Application64.mk
new file mode 100644
index 0000000..37e1421
--- /dev/null
+++ b/app/src/main/cpp/Application64.mk
@@ -0,0 +1,3 @@
+NDK_TOOLCHAIN_VERSION = 4.9
+APP_ABI := arm64-v8a
+APP_PLATFORM := android-21
\ No newline at end of file
diff --git a/app/src/main/cpp/cmdutils.h b/app/src/main/cpp/cmdutils.h
new file mode 100644
index 0000000..eb049a3
--- /dev/null
+++ b/app/src/main/cpp/cmdutils.h
@@ -0,0 +1,609 @@
+/*
+ * Various utilities for command line tools
+ * copyright (c) 2003 Fabrice Bellard
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef FFMPEG_CMDUTILS_H
+#define FFMPEG_CMDUTILS_H
+
+#include
+
+#include "config.h"
+#include "libavcodec/avcodec.h"
+#include "libavfilter/avfilter.h"
+#include "libavformat/avformat.h"
+#include "libswscale/swscale.h"
+
+#ifdef _WIN32
+#undef main /* We don't want SDL to override our main() */
+#endif
+
+/**
+ * program name, defined by the program for show_version().
+ */
+extern const char program_name[];
+
+/**
+ * program birth year, defined by the program for show_banner()
+ */
+extern const int program_birth_year;
+
+extern AVCodecContext *avcodec_opts[AVMEDIA_TYPE_NB];
+extern AVFormatContext *avformat_opts;
+extern struct SwsContext *sws_opts;
+extern AVDictionary *swr_opts;
+extern AVDictionary *format_opts, *codec_opts, *resample_opts;
+extern int hide_banner;
+
+/**
+ * Register a program-specific cleanup routine.
+ */
+void register_exit(void (*cb)(int ret));
+
+/**
+ * Wraps exit with a program-specific cleanup routine.
+ */
+void exit_program(int ret)
+
+av_noreturn;
+
+/**
+ * Initialize the cmdutils option system, in particular
+ * allocate the *_opts contexts.
+ */
+void init_opts(void);
+
+/**
+ * Uninitialize the cmdutils option system, in particular
+ * free the *_opts contexts and their contents.
+ */
+void uninit_opts(void);
+
+/**
+ * Trivial log callback.
+ * Only suitable for opt_help and similar since it lacks prefix handling.
+ */
+void log_callback_help(void *ptr, int level, const char *fmt, va_list vl);
+
+/**
+ * Override the cpuflags.
+ */
+int opt_cpuflags(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Fallback for options that are not explicitly handled, these will be
+ * parsed through AVOptions.
+ */
+int opt_default(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Set the libav* libraries log level.
+ */
+int opt_loglevel(void *optctx, const char *opt, const char *arg);
+
+int opt_report(const char *opt);
+
+int opt_max_alloc(void *optctx, const char *opt, const char *arg);
+
+int opt_codec_debug(void *optctx, const char *opt, const char *arg);
+
+#if CONFIG_OPENCL
+int opt_opencl(void *optctx, const char *opt, const char *arg);
+
+int opt_opencl_bench(void *optctx, const char *opt, const char *arg);
+#endif
+
+/**
+ * Limit the execution time.
+ */
+int opt_timelimit(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Parse a string and return its corresponding value as a double.
+ * Exit from the application if the string cannot be correctly
+ * parsed or the corresponding value is invalid.
+ *
+ * @param context the context of the value to be set (e.g. the
+ * corresponding command line option name)
+ * @param numstr the string to be parsed
+ * @param type the type (OPT_INT64 or OPT_FLOAT) as which the
+ * string should be parsed
+ * @param min the minimum valid accepted value
+ * @param max the maximum valid accepted value
+ */
+double parse_number_or_die(const char *context, const char *numstr, int type,
+ double min, double max);
+
+/**
+ * Parse a string specifying a time and return its corresponding
+ * value as a number of microseconds. Exit from the application if
+ * the string cannot be correctly parsed.
+ *
+ * @param context the context of the value to be set (e.g. the
+ * corresponding command line option name)
+ * @param timestr the string to be parsed
+ * @param is_duration a flag which tells how to interpret timestr, if
+ * not zero timestr is interpreted as a duration, otherwise as a
+ * date
+ *
+ * @see av_parse_time()
+ */
+int64_t parse_time_or_die(const char *context, const char *timestr,
+ int is_duration);
+
+typedef struct SpecifierOpt {
+ char *specifier; /**< stream/chapter/program/... specifier */
+ union {
+ uint8_t *str;
+ int i;
+ int64_t i64;
+ float f;
+ double dbl;
+ } u;
+} SpecifierOpt;
+
+typedef struct OptionDef {
+ const char *name;
+ int flags;
+#define HAS_ARG 0x0001
+#define OPT_BOOL 0x0002
+#define OPT_EXPERT 0x0004
+#define OPT_STRING 0x0008
+#define OPT_VIDEO 0x0010
+#define OPT_AUDIO 0x0020
+#define OPT_INT 0x0080
+#define OPT_FLOAT 0x0100
+#define OPT_SUBTITLE 0x0200
+#define OPT_INT64 0x0400
+#define OPT_EXIT 0x0800
+#define OPT_DATA 0x1000
+#define OPT_PERFILE 0x2000 /* the option is per-file (currently ffmpeg-only).
+ implied by OPT_OFFSET or OPT_SPEC */
+#define OPT_OFFSET 0x4000 /* option is specified as an offset in a passed optctx */
+#define OPT_SPEC 0x8000 /* option is to be stored in an array of SpecifierOpt.
+ Implies OPT_OFFSET. Next element after the offset is
+ an int containing element count in the array. */
+#define OPT_TIME 0x10000
+#define OPT_DOUBLE 0x20000
+#define OPT_INPUT 0x40000
+#define OPT_OUTPUT 0x80000
+
+ union {
+ void *dst_ptr;
+
+ int (*func_arg)(void *, const char *, const char *);
+
+ size_t off;
+ } u;
+
+ const char *help;
+ const char *argname;
+} OptionDef;
+
+/**
+ * Print help for all options matching specified flags.
+ *
+ * @param options a list of options
+ * @param msg title of this group. Only printed if at least one option matches.
+ * @param req_flags print only options which have all those flags set.
+ * @param rej_flags don't print options which have any of those flags set.
+ * @param alt_flags print only options that have at least one of those flags set
+ */
+void show_help_options(const OptionDef *options, const char *msg, int req_flags,
+ int rej_flags, int alt_flags);
+
+/**
+ * Show help for all options with given flags in class and all its
+ * children.
+ */
+void show_help_children(const AVClass *class, int flags);
+
+/**
+ * Per-fftool specific help handler. Implemented in each
+ * fftool, called by show_help().
+ */
+void show_help_default(const char *opt, const char *arg);
+
+/**
+ * Generic -h handler common to all fftools.
+ */
+int show_help(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Parse the command line arguments.
+ *
+ * @param optctx an opaque options context
+ * @param argc number of command line arguments
+ * @param argv values of command line arguments
+ * @param options Array with the definitions required to interpret every
+ * option of the form: -option_name [argument]
+ * @param parse_arg_function Name of the function called to process every
+ * argument without a leading option name flag. NULL if such arguments do
+ * not have to be processed.
+ */
+void parse_options(void *optctx, int argc, char **argv, const OptionDef *options,
+ void (*parse_arg_function)(void *optctx, const char *));
+
+/**
+ * Parse one given option.
+ *
+ * @return on success 1 if arg was consumed, 0 otherwise; negative number on error
+ */
+int parse_option(void *optctx, const char *opt, const char *arg,
+ const OptionDef *options);
+
+/**
+ * An option extracted from the commandline.
+ * Cannot use AVDictionary because of options like -map which can be
+ * used multiple times.
+ */
+typedef struct Option {
+ const OptionDef *opt;
+ const char *key;
+ const char *val;
+} Option;
+
+typedef struct OptionGroupDef {
+ /**< group name */
+ const char *name;
+ /**
+ * Option to be used as group separator. Can be NULL for groups which
+ * are terminated by a non-option argument (e.g. ffmpeg output files)
+ */
+ const char *sep;
+ /**
+ * Option flags that must be set on each option that is
+ * applied to this group
+ */
+ int flags;
+} OptionGroupDef;
+
+typedef struct OptionGroup {
+ const OptionGroupDef *group_def;
+ const char *arg;
+
+ Option *opts;
+ int nb_opts;
+
+ AVDictionary *codec_opts;
+ AVDictionary *format_opts;
+ AVDictionary *resample_opts;
+ struct SwsContext *sws_opts;
+ AVDictionary *swr_opts;
+} OptionGroup;
+
+/**
+ * A list of option groups that all have the same group type
+ * (e.g. input files or output files)
+ */
+typedef struct OptionGroupList {
+ const OptionGroupDef *group_def;
+
+ OptionGroup *groups;
+ int nb_groups;
+} OptionGroupList;
+
+typedef struct OptionParseContext {
+ OptionGroup global_opts;
+
+ OptionGroupList *groups;
+ int nb_groups;
+
+ /* parsing state */
+ OptionGroup cur_group;
+} OptionParseContext;
+
+/**
+ * Parse an options group and write results into optctx.
+ *
+ * @param optctx an app-specific options context. NULL for global options group
+ */
+int parse_optgroup(void *optctx, OptionGroup *g);
+
+/**
+ * Split the commandline into an intermediate form convenient for further
+ * processing.
+ *
+ * The commandline is assumed to be composed of options which either belong to a
+ * group (those with OPT_SPEC, OPT_OFFSET or OPT_PERFILE) or are global
+ * (everything else).
+ *
+ * A group (defined by an OptionGroupDef struct) is a sequence of options
+ * terminated by either a group separator option (e.g. -i) or a parameter that
+ * is not an option (doesn't start with -). A group without a separator option
+ * must always be first in the supplied groups list.
+ *
+ * All options within the same group are stored in one OptionGroup struct in an
+ * OptionGroupList, all groups with the same group definition are stored in one
+ * OptionGroupList in OptionParseContext.groups. The order of group lists is the
+ * same as the order of group definitions.
+ */
+int split_commandline(OptionParseContext *octx, int argc, char *argv[],
+ const OptionDef *options,
+ const OptionGroupDef *groups, int nb_groups);
+
+/**
+ * Free all allocated memory in an OptionParseContext.
+ */
+void uninit_parse_context(OptionParseContext *octx);
+
+/**
+ * Find the '-loglevel' option in the command line args and apply it.
+ */
+void parse_loglevel(int argc, char **argv, const OptionDef *options);
+
+/**
+ * Return index of option opt in argv or 0 if not found.
+ */
+int locate_option(int argc, char **argv, const OptionDef *options,
+ const char *optname);
+
+/**
+ * Check if the given stream matches a stream specifier.
+ *
+ * @param s Corresponding format context.
+ * @param st Stream from s to be checked.
+ * @param spec A stream specifier of the [v|a|s|d]:[\] form.
+ *
+ * @return 1 if the stream matches, 0 if it doesn't, <0 on error
+ */
+int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec);
+
+/**
+ * Filter out options for given codec.
+ *
+ * Create a new options dictionary containing only the options from
+ * opts which apply to the codec with ID codec_id.
+ *
+ * @param opts dictionary to place options in
+ * @param codec_id ID of the codec that should be filtered for
+ * @param s Corresponding format context.
+ * @param st A stream from s for which the options should be filtered.
+ * @param codec The particular codec for which the options should be filtered.
+ * If null, the default one is looked up according to the codec id.
+ * @return a pointer to the created dictionary
+ */
+AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id,
+ AVFormatContext *s, AVStream *st, AVCodec *codec);
+
+/**
+ * Setup AVCodecContext options for avformat_find_stream_info().
+ *
+ * Create an array of dictionaries, one dictionary for each stream
+ * contained in s.
+ * Each dictionary will contain the options from codec_opts which can
+ * be applied to the corresponding stream codec context.
+ *
+ * @return pointer to the created array of dictionaries, NULL if it
+ * cannot be created
+ */
+AVDictionary **setup_find_stream_info_opts(AVFormatContext *s,
+ AVDictionary *codec_opts);
+
+/**
+ * Print an error message to stderr, indicating filename and a human
+ * readable description of the error code err.
+ *
+ * If strerror_r() is not available the use of this function in a
+ * multithreaded application may be unsafe.
+ *
+ * @see av_strerror()
+ */
+void print_error(const char *filename, int err);
+
+/**
+ * Print the program banner to stderr. The banner contents depend on the
+ * current version of the repository and of the libav* libraries used by
+ * the program.
+ */
+void show_banner(int argc, char **argv, const OptionDef *options);
+
+/**
+ * Print the version of the program to stdout. The version message
+ * depends on the current versions of the repository and of the libav*
+ * libraries.
+ * This option processing function does not utilize the arguments.
+ */
+int show_version(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Print the build configuration of the program to stdout. The contents
+ * depend on the definition of FFMPEG_CONFIGURATION.
+ * This option processing function does not utilize the arguments.
+ */
+int show_buildconf(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Print the license of the program to stdout. The license depends on
+ * the license of the libraries compiled into the program.
+ * This option processing function does not utilize the arguments.
+ */
+int show_license(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Print a listing containing all the formats supported by the
+ * program (including devices).
+ * This option processing function does not utilize the arguments.
+ */
+int show_formats(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Print a listing containing all the devices supported by the
+ * program.
+ * This option processing function does not utilize the arguments.
+ */
+int show_devices(void *optctx, const char *opt, const char *arg);
+
+#if CONFIG_AVDEVICE
+
+/**
+ * Print a listing containing audodetected sinks of the output device.
+ * Device name with options may be passed as an argument to limit results.
+ */
+int show_sinks(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Print a listing containing audodetected sources of the input device.
+ * Device name with options may be passed as an argument to limit results.
+ */
+int show_sources(void *optctx, const char *opt, const char *arg);
+
+#endif
+
+/**
+ * Print a listing containing all the codecs supported by the
+ * program.
+ * This option processing function does not utilize the arguments.
+ */
+int show_codecs(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Print a listing containing all the decoders supported by the
+ * program.
+ */
+int show_decoders(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Print a listing containing all the encoders supported by the
+ * program.
+ */
+int show_encoders(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Print a listing containing all the filters supported by the
+ * program.
+ * This option processing function does not utilize the arguments.
+ */
+int show_filters(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Print a listing containing all the bit stream filters supported by the
+ * program.
+ * This option processing function does not utilize the arguments.
+ */
+int show_bsfs(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Print a listing containing all the protocols supported by the
+ * program.
+ * This option processing function does not utilize the arguments.
+ */
+int show_protocols(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Print a listing containing all the pixel formats supported by the
+ * program.
+ * This option processing function does not utilize the arguments.
+ */
+int show_pix_fmts(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Print a listing containing all the standard channel layouts supported by
+ * the program.
+ * This option processing function does not utilize the arguments.
+ */
+int show_layouts(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Print a listing containing all the sample formats supported by the
+ * program.
+ */
+int show_sample_fmts(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Print a listing containing all the color names and values recognized
+ * by the program.
+ */
+int show_colors(void *optctx, const char *opt, const char *arg);
+
+/**
+ * Return a positive value if a line read from standard input
+ * starts with [yY], otherwise return 0.
+ */
+int read_yesno(void);
+
+/**
+ * Read the file with name filename, and put its content in a newly
+ * allocated 0-terminated buffer.
+ *
+ * @param filename file to read from
+ * @param bufptr location where pointer to buffer is returned
+ * @param size location where size of buffer is returned
+ * @return >= 0 in case of success, a negative value corresponding to an
+ * AVERROR error code in case of failure.
+ */
+int cmdutils_read_file(const char *filename, char **bufptr, size_t *size);
+
+/**
+ * Get a file corresponding to a preset file.
+ *
+ * If is_path is non-zero, look for the file in the path preset_name.
+ * Otherwise search for a file named arg.ffpreset in the directories
+ * $FFMPEG_DATADIR (if set), $HOME/.ffmpeg, and in the datadir defined
+ * at configuration time or in a "ffpresets" folder along the executable
+ * on win32, in that order. If no such file is found and
+ * codec_name is defined, then search for a file named
+ * codec_name-preset_name.avpreset in the above-mentioned directories.
+ *
+ * @param filename buffer where the name of the found filename is written
+ * @param filename_size size in bytes of the filename buffer
+ * @param preset_name name of the preset to search
+ * @param is_path tell if preset_name is a filename path
+ * @param codec_name name of the codec for which to look for the
+ * preset, may be NULL
+ */
+FILE *get_preset_file(char *filename, size_t filename_size,
+ const char *preset_name, int is_path, const char *codec_name);
+
+/**
+ * Realloc array to hold new_size elements of elem_size.
+ * Calls exit() on failure.
+ *
+ * @param array array to reallocate
+ * @param elem_size size in bytes of each element
+ * @param size new element count will be written here
+ * @param new_size number of elements to place in reallocated array
+ * @return reallocated array
+ */
+void *grow_array(void *array, int elem_size, int *size, int new_size);
+
+#define media_type_string av_get_media_type_string
+
+#define GROW_ARRAY(array, nb_elems)\
+ array = grow_array(array, sizeof(*array), &nb_elems, nb_elems + 1)
+
+#define GET_PIX_FMT_NAME(pix_fmt)\
+ const char *name = av_get_pix_fmt_name(pix_fmt);
+
+#define GET_SAMPLE_FMT_NAME(sample_fmt)\
+ const char *name = av_get_sample_fmt_name(sample_fmt)
+
+#define GET_SAMPLE_RATE_NAME(rate)\
+ char name[16];\
+ snprintf(name, sizeof(name), "%d", rate);
+
+#define GET_CH_LAYOUT_NAME(ch_layout)\
+ char name[16];\
+ snprintf(name, sizeof(name), "0x%"PRIx64, ch_layout);
+
+#define GET_CH_LAYOUT_DESC(ch_layout)\
+ char name[128];\
+ av_get_channel_layout_string(name, sizeof(name), 0, ch_layout);
+
+#endif /* CMDUTILS_H */
diff --git a/app/src/main/cpp/config.h b/app/src/main/cpp/config.h
new file mode 100644
index 0000000..6b83546
--- /dev/null
+++ b/app/src/main/cpp/config.h
@@ -0,0 +1,1858 @@
+/* Automatically generated by configure - do not modify! */
+#ifndef FFMPEG_CONFIG_H
+#define FFMPEG_CONFIG_H
+#define FFMPEG_CONFIGURATION "--target-os=linux --prefix=../android-lib-ff-full --enable-cross-compile --enable-runtime-cpudetect --disable-asm --arch=arm --cc=/home/leixiaohua1020/cdtworkspace/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --cross-prefix=/home/leixiaohua1020/cdtworkspace/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --disable-stripping --nm=/home/leixiaohua1020/cdtworkspace/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-nm --sysroot=/home/leixiaohua1020/cdtworkspace/android-ndk-r9d/platforms/android-8/arch-arm --enable-gpl --enable-shared --disable-static --enable-nonfree --enable-version3 --enable-small --disable-vda --disable-iconv --enable-libx264 --enable-libfaac --enable-encoder=libx264 --enable-encoder=libfaac --enable-zlib --disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug --extra-cflags='-I ../android-lib/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a' --extra-ldflags='-L ../android-lib/lib'"
+#define FFMPEG_LICENSE "nonfree and unredistributable"
+#define CONFIG_THIS_YEAR 2015
+#define FFMPEG_DATADIR "../android-lib-ff-full/share/ffmpeg"
+#define AVCONV_DATADIR "../android-lib-ff-full/share/ffmpeg"
+#define CC_IDENT "gcc 4.6 (GCC) 20120106 (prerelease)"
+#define av_restrict restrict
+#define EXTERN_PREFIX ""
+#define EXTERN_ASM
+#define BUILDSUF ""
+#define SLIBSUF ".so"
+#define HAVE_MMX2 HAVE_MMXEXT
+#define SWS_MAX_FILTER_SIZE 256
+#define ARCH_AARCH64 0
+#define ARCH_ALPHA 0
+#define ARCH_ARM 0
+#define ARCH_AVR32 0
+#define ARCH_AVR32_AP 0
+#define ARCH_AVR32_UC 0
+#define ARCH_BFIN 0
+#define ARCH_IA64 0
+#define ARCH_M68K 0
+#define ARCH_MIPS 0
+#define ARCH_MIPS64 0
+#define ARCH_PARISC 0
+#define ARCH_PPC 0
+#define ARCH_PPC64 0
+#define ARCH_S390 0
+#define ARCH_SH4 0
+#define ARCH_SPARC 0
+#define ARCH_SPARC64 0
+#define ARCH_TILEGX 0
+#define ARCH_TILEPRO 0
+#define ARCH_TOMI 0
+#define ARCH_X86 0
+#define ARCH_X86_32 0
+#define ARCH_X86_64 0
+#define HAVE_ARMV5TE 0
+#define HAVE_ARMV6 0
+#define HAVE_ARMV6T2 0
+#define HAVE_ARMV8 0
+#define HAVE_NEON 0
+#define HAVE_VFP 0
+#define HAVE_VFPV3 0
+#define HAVE_SETEND 0
+#define HAVE_ALTIVEC 0
+#define HAVE_DCBZL 0
+#define HAVE_LDBRX 0
+#define HAVE_PPC4XX 0
+#define HAVE_VSX 0
+#define HAVE_AMD3DNOW 0
+#define HAVE_AMD3DNOWEXT 0
+#define HAVE_AVX 0
+#define HAVE_AVX2 0
+#define HAVE_FMA3 0
+#define HAVE_FMA4 0
+#define HAVE_MMX 0
+#define HAVE_MMXEXT 0
+#define HAVE_SSE 0
+#define HAVE_SSE2 0
+#define HAVE_SSE3 0
+#define HAVE_SSE4 0
+#define HAVE_SSE42 0
+#define HAVE_SSSE3 0
+#define HAVE_XOP 0
+#define HAVE_CPUNOP 0
+#define HAVE_I686 0
+#define HAVE_MIPSFPU 0
+#define HAVE_MIPS32R2 0
+#define HAVE_MIPSDSPR1 0
+#define HAVE_MIPSDSPR2 0
+#define HAVE_LOONGSON 0
+#define HAVE_ARMV5TE_EXTERNAL 1
+#define HAVE_ARMV6_EXTERNAL 1
+#define HAVE_ARMV6T2_EXTERNAL 1
+#define HAVE_ARMV8_EXTERNAL 0
+#define HAVE_NEON_EXTERNAL 0
+#define HAVE_VFP_EXTERNAL 1
+#define HAVE_VFPV3_EXTERNAL 0
+#define HAVE_SETEND_EXTERNAL 1
+#define HAVE_ALTIVEC_EXTERNAL 0
+#define HAVE_DCBZL_EXTERNAL 0
+#define HAVE_LDBRX_EXTERNAL 0
+#define HAVE_PPC4XX_EXTERNAL 0
+#define HAVE_VSX_EXTERNAL 0
+#define HAVE_AMD3DNOW_EXTERNAL 0
+#define HAVE_AMD3DNOWEXT_EXTERNAL 0
+#define HAVE_AVX_EXTERNAL 0
+#define HAVE_AVX2_EXTERNAL 0
+#define HAVE_FMA3_EXTERNAL 0
+#define HAVE_FMA4_EXTERNAL 0
+#define HAVE_MMX_EXTERNAL 0
+#define HAVE_MMXEXT_EXTERNAL 0
+#define HAVE_SSE_EXTERNAL 0
+#define HAVE_SSE2_EXTERNAL 0
+#define HAVE_SSE3_EXTERNAL 0
+#define HAVE_SSE4_EXTERNAL 0
+#define HAVE_SSE42_EXTERNAL 0
+#define HAVE_SSSE3_EXTERNAL 0
+#define HAVE_XOP_EXTERNAL 0
+#define HAVE_CPUNOP_EXTERNAL 0
+#define HAVE_I686_EXTERNAL 0
+#define HAVE_MIPSFPU_EXTERNAL 0
+#define HAVE_MIPS32R2_EXTERNAL 0
+#define HAVE_MIPSDSPR1_EXTERNAL 0
+#define HAVE_MIPSDSPR2_EXTERNAL 0
+#define HAVE_LOONGSON_EXTERNAL 0
+#define HAVE_ARMV5TE_INLINE 1
+#define HAVE_ARMV6_INLINE 1
+#define HAVE_ARMV6T2_INLINE 1
+#define HAVE_ARMV8_INLINE 0
+#define HAVE_NEON_INLINE 0
+#define HAVE_VFP_INLINE 1
+#define HAVE_VFPV3_INLINE 0
+#define HAVE_SETEND_INLINE 1
+#define HAVE_ALTIVEC_INLINE 0
+#define HAVE_DCBZL_INLINE 0
+#define HAVE_LDBRX_INLINE 0
+#define HAVE_PPC4XX_INLINE 0
+#define HAVE_VSX_INLINE 0
+#define HAVE_AMD3DNOW_INLINE 0
+#define HAVE_AMD3DNOWEXT_INLINE 0
+#define HAVE_AVX_INLINE 0
+#define HAVE_AVX2_INLINE 0
+#define HAVE_FMA3_INLINE 0
+#define HAVE_FMA4_INLINE 0
+#define HAVE_MMX_INLINE 0
+#define HAVE_MMXEXT_INLINE 0
+#define HAVE_SSE_INLINE 0
+#define HAVE_SSE2_INLINE 0
+#define HAVE_SSE3_INLINE 0
+#define HAVE_SSE4_INLINE 0
+#define HAVE_SSE42_INLINE 0
+#define HAVE_SSSE3_INLINE 0
+#define HAVE_XOP_INLINE 0
+#define HAVE_CPUNOP_INLINE 0
+#define HAVE_I686_INLINE 0
+#define HAVE_MIPSFPU_INLINE 0
+#define HAVE_MIPS32R2_INLINE 0
+#define HAVE_MIPSDSPR1_INLINE 0
+#define HAVE_MIPSDSPR2_INLINE 0
+#define HAVE_LOONGSON_INLINE 0
+#define HAVE_ALIGNED_STACK 0
+#define HAVE_FAST_64BIT 0
+#define HAVE_FAST_CLZ 1
+#define HAVE_FAST_CMOV 0
+#define HAVE_LOCAL_ALIGNED_8 0
+#define HAVE_LOCAL_ALIGNED_16 0
+#define HAVE_LOCAL_ALIGNED_32 0
+#define HAVE_SIMD_ALIGN_16 0
+#define HAVE_ATOMICS_GCC 1
+#define HAVE_ATOMICS_SUNCC 0
+#define HAVE_ATOMICS_WIN32 0
+#define HAVE_ATOMIC_CAS_PTR 0
+#define HAVE_ATOMIC_COMPARE_EXCHANGE 0
+#define HAVE_MACHINE_RW_BARRIER 0
+#define HAVE_MEMORYBARRIER 0
+#define HAVE_MM_EMPTY 0
+#define HAVE_RDTSC 0
+#define HAVE_SARESTART 1
+#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1
+#define HAVE_INLINE_ASM 1
+#define HAVE_SYMVER 1
+#define HAVE_YASM 0
+#define HAVE_BIGENDIAN 0
+#define HAVE_FAST_UNALIGNED 1
+#define HAVE_INCOMPATIBLE_LIBAV_ABI 0
+#define HAVE_ALSA_ASOUNDLIB_H 0
+#define HAVE_ALTIVEC_H 0
+#define HAVE_ARPA_INET_H 1
+#define HAVE_ASM_TYPES_H 1
+#define HAVE_CDIO_PARANOIA_H 0
+#define HAVE_CDIO_PARANOIA_PARANOIA_H 0
+#define HAVE_DEV_BKTR_IOCTL_BT848_H 0
+#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
+#define HAVE_DEV_IC_BT8XX_H 0
+#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0
+#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0
+#define HAVE_DIRECT_H 0
+#define HAVE_DLFCN_H 1
+#define HAVE_DXVA_H 0
+#define HAVE_ES2_GL_H 0
+#define HAVE_GSM_H 0
+#define HAVE_IO_H 0
+#define HAVE_MACH_MACH_TIME_H 0
+#define HAVE_MACHINE_IOCTL_BT848_H 0
+#define HAVE_MACHINE_IOCTL_METEOR_H 0
+#define HAVE_MALLOC_H 1
+#define HAVE_OPENJPEG_1_5_OPENJPEG_H 0
+#define HAVE_OPENGL_GL3_H 0
+#define HAVE_POLL_H 1
+#define HAVE_SNDIO_H 0
+#define HAVE_SOUNDCARD_H 0
+#define HAVE_SYS_MMAN_H 1
+#define HAVE_SYS_PARAM_H 1
+#define HAVE_SYS_RESOURCE_H 1
+#define HAVE_SYS_SELECT_H 1
+#define HAVE_SYS_SOUNDCARD_H 0
+#define HAVE_SYS_TIME_H 1
+#define HAVE_SYS_UN_H 1
+#define HAVE_SYS_VIDEOIO_H 0
+#define HAVE_TERMIOS_H 1
+#define HAVE_UDPLITE_H 0
+#define HAVE_UNISTD_H 1
+#define HAVE_WINDOWS_H 0
+#define HAVE_WINSOCK2_H 0
+#define HAVE_INTRINSICS_NEON 0
+#define HAVE_ATANF 1
+#define HAVE_ATAN2F 1
+#define HAVE_CBRT 1
+#define HAVE_CBRTF 1
+#define HAVE_COSF 1
+#define HAVE_EXP2 1
+#define HAVE_EXP2F 1
+#define HAVE_EXPF 1
+#define HAVE_ISINF 1
+#define HAVE_ISNAN 1
+#define HAVE_LDEXPF 1
+#define HAVE_LLRINT 1
+#define HAVE_LLRINTF 1
+#define HAVE_LOG2 0
+#define HAVE_LOG2F 0
+#define HAVE_LOG10F 1
+#define HAVE_LRINT 1
+#define HAVE_LRINTF 1
+#define HAVE_POWF 1
+#define HAVE_RINT 1
+#define HAVE_ROUND 1
+#define HAVE_ROUNDF 1
+#define HAVE_SINF 1
+#define HAVE_TRUNC 1
+#define HAVE_TRUNCF 1
+#define HAVE_ACCESS 1
+#define HAVE_ALIGNED_MALLOC 0
+#define HAVE_CLOCK_GETTIME 1
+#define HAVE_CLOSESOCKET 0
+#define HAVE_COMMANDLINETOARGVW 0
+#define HAVE_COTASKMEMFREE 0
+#define HAVE_CRYPTGENRANDOM 0
+#define HAVE_DLOPEN 1
+#define HAVE_FCNTL 1
+#define HAVE_FLT_LIM 1
+#define HAVE_FORK 1
+#define HAVE_GETADDRINFO 1
+#define HAVE_GETHRTIME 0
+#define HAVE_GETOPT 1
+#define HAVE_GETPROCESSAFFINITYMASK 0
+#define HAVE_GETPROCESSMEMORYINFO 0
+#define HAVE_GETPROCESSTIMES 0
+#define HAVE_GETRUSAGE 1
+#define HAVE_GETSERVBYPORT 1
+#define HAVE_GETSYSTEMTIMEASFILETIME 0
+#define HAVE_GETTIMEOFDAY 1
+#define HAVE_GLOB 0
+#define HAVE_GLXGETPROCADDRESS 0
+#define HAVE_GMTIME_R 1
+#define HAVE_INET_ATON 1
+#define HAVE_ISATTY 1
+#define HAVE_JACK_PORT_GET_LATENCY_RANGE 0
+#define HAVE_KBHIT 0
+#define HAVE_LOCALTIME_R 1
+#define HAVE_LZO1X_999_COMPRESS 0
+#define HAVE_MACH_ABSOLUTE_TIME 0
+#define HAVE_MAPVIEWOFFILE 0
+#define HAVE_MEMALIGN 1
+#define HAVE_MKSTEMP 1
+#define HAVE_MMAP 1
+#define HAVE_MPROTECT 1
+#define HAVE_NANOSLEEP 1
+#define HAVE_PEEKNAMEDPIPE 0
+#define HAVE_POSIX_MEMALIGN 0
+#define HAVE_PTHREAD_CANCEL 0
+#define HAVE_SCHED_GETAFFINITY 0
+#define HAVE_SETCONSOLETEXTATTRIBUTE 0
+#define HAVE_SETMODE 0
+#define HAVE_SETRLIMIT 1
+#define HAVE_SLEEP 0
+#define HAVE_STRERROR_R 1
+#define HAVE_SYSCONF 1
+#define HAVE_SYSCTL 0
+#define HAVE_USLEEP 1
+#define HAVE_VIRTUALALLOC 0
+#define HAVE_WGLGETPROCADDRESS 0
+#define HAVE_PTHREADS 1
+#define HAVE_OS2THREADS 0
+#define HAVE_W32THREADS 0
+#define HAVE_AS_DN_DIRECTIVE 1
+#define HAVE_AS_FUNC 0
+#define HAVE_AS_OBJECT_ARCH 1
+#define HAVE_ASM_MOD_Q 1
+#define HAVE_ATTRIBUTE_MAY_ALIAS 1
+#define HAVE_ATTRIBUTE_PACKED 1
+#define HAVE_EBP_AVAILABLE 0
+#define HAVE_EBX_AVAILABLE 0
+#define HAVE_GNU_AS 0
+#define HAVE_GNU_WINDRES 0
+#define HAVE_IBM_ASM 0
+#define HAVE_INLINE_ASM_LABELS 1
+#define HAVE_INLINE_ASM_NONLOCAL_LABELS 1
+#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0
+#define HAVE_PRAGMA_DEPRECATED 1
+#define HAVE_RSYNC_CONTIMEOUT 1
+#define HAVE_SYMVER_ASM_LABEL 0
+#define HAVE_SYMVER_GNU_ASM 1
+#define HAVE_VFP_ARGS 0
+#define HAVE_XFORM_ASM 0
+#define HAVE_XMM_CLOBBERS 0
+#define HAVE_CONDITION_VARIABLE_PTR 0
+#define HAVE_DXVA_PICPARAMS_HEVC 0
+#define HAVE_SOCKLEN_T 1
+#define HAVE_STRUCT_ADDRINFO 1
+#define HAVE_STRUCT_GROUP_SOURCE_REQ 1
+#define HAVE_STRUCT_IP_MREQ_SOURCE 1
+#define HAVE_STRUCT_IPV6_MREQ 1
+#define HAVE_STRUCT_POLLFD 1
+#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1
+#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0
+#define HAVE_STRUCT_SOCKADDR_IN6 1
+#define HAVE_STRUCT_SOCKADDR_SA_LEN 0
+#define HAVE_STRUCT_SOCKADDR_STORAGE 1
+#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0
+#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
+#define HAVE_ATOMICS_NATIVE 1
+#define HAVE_DOS_PATHS 0
+#define HAVE_DXVA2API_COBJ 0
+#define HAVE_DXVA2_LIB 0
+#define HAVE_LIBC_MSVCRT 0
+#define HAVE_LIBDC1394_1 0
+#define HAVE_LIBDC1394_2 0
+#define HAVE_MAKEINFO 1
+#define HAVE_MAKEINFO_HTML 1
+#define HAVE_PERL 1
+#define HAVE_POD2MAN 1
+#define HAVE_SDL 0
+#define HAVE_SECTION_DATA_REL_RO 1
+#define HAVE_TEXI2HTML 0
+#define HAVE_THREADS 1
+#define HAVE_VAAPI_X11 0
+#define HAVE_VDPAU_X11 0
+#define HAVE_XLIB 0
+#define CONFIG_BSFS 1
+#define CONFIG_DECODERS 1
+#define CONFIG_DEMUXERS 1
+#define CONFIG_ENCODERS 1
+#define CONFIG_FILTERS 1
+#define CONFIG_HWACCELS 0
+#define CONFIG_INDEVS 1
+#define CONFIG_MUXERS 1
+#define CONFIG_OUTDEVS 1
+#define CONFIG_PARSERS 1
+#define CONFIG_PROTOCOLS 1
+#define CONFIG_DOC 1
+#define CONFIG_HTMLPAGES 1
+#define CONFIG_MANPAGES 1
+#define CONFIG_PODPAGES 1
+#define CONFIG_TXTPAGES 1
+#define CONFIG_AVIO_READING_EXAMPLE 1
+#define CONFIG_DECODING_ENCODING_EXAMPLE 1
+#define CONFIG_DEMUXING_DECODING_EXAMPLE 1
+#define CONFIG_EXTRACT_MVS_EXAMPLE 1
+#define CONFIG_FILTER_AUDIO_EXAMPLE 1
+#define CONFIG_FILTERING_AUDIO_EXAMPLE 1
+#define CONFIG_FILTERING_VIDEO_EXAMPLE 1
+#define CONFIG_METADATA_EXAMPLE 1
+#define CONFIG_MUXING_EXAMPLE 1
+#define CONFIG_QSVDEC_EXAMPLE 0
+#define CONFIG_REMUXING_EXAMPLE 1
+#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 1
+#define CONFIG_SCALING_VIDEO_EXAMPLE 1
+#define CONFIG_TRANSCODE_AAC_EXAMPLE 1
+#define CONFIG_TRANSCODING_EXAMPLE 1
+#define CONFIG_AVISYNTH 0
+#define CONFIG_BZLIB 0
+#define CONFIG_CRYSTALHD 0
+#define CONFIG_DECKLINK 0
+#define CONFIG_FREI0R 0
+#define CONFIG_GNUTLS 0
+#define CONFIG_ICONV 0
+#define CONFIG_LADSPA 0
+#define CONFIG_LIBAACPLUS 0
+#define CONFIG_LIBASS 0
+#define CONFIG_LIBBLURAY 0
+#define CONFIG_LIBBS2B 0
+#define CONFIG_LIBCACA 0
+#define CONFIG_LIBCDIO 0
+#define CONFIG_LIBCELT 0
+#define CONFIG_LIBDC1394 0
+#define CONFIG_LIBFAAC 1
+#define CONFIG_LIBFDK_AAC 0
+#define CONFIG_LIBFLITE 0
+#define CONFIG_LIBFONTCONFIG 0
+#define CONFIG_LIBFREETYPE 0
+#define CONFIG_LIBFRIBIDI 0
+#define CONFIG_LIBGME 0
+#define CONFIG_LIBGSM 0
+#define CONFIG_LIBIEC61883 0
+#define CONFIG_LIBILBC 0
+#define CONFIG_LIBMFX 0
+#define CONFIG_LIBMODPLUG 0
+#define CONFIG_LIBMP3LAME 0
+#define CONFIG_LIBNUT 0
+#define CONFIG_LIBOPENCORE_AMRNB 0
+#define CONFIG_LIBOPENCORE_AMRWB 0
+#define CONFIG_LIBOPENCV 0
+#define CONFIG_LIBOPENH264 0
+#define CONFIG_LIBOPENJPEG 0
+#define CONFIG_LIBOPUS 0
+#define CONFIG_LIBPULSE 0
+#define CONFIG_LIBQUVI 0
+#define CONFIG_LIBRTMP 0
+#define CONFIG_LIBSCHROEDINGER 0
+#define CONFIG_LIBSHINE 0
+#define CONFIG_LIBSMBCLIENT 0
+#define CONFIG_LIBSOXR 0
+#define CONFIG_LIBSPEEX 0
+#define CONFIG_LIBSSH 0
+#define CONFIG_LIBSTAGEFRIGHT_H264 0
+#define CONFIG_LIBTHEORA 0
+#define CONFIG_LIBTWOLAME 0
+#define CONFIG_LIBUTVIDEO 0
+#define CONFIG_LIBV4L2 0
+#define CONFIG_LIBVIDSTAB 0
+#define CONFIG_LIBVO_AACENC 0
+#define CONFIG_LIBVO_AMRWBENC 0
+#define CONFIG_LIBVORBIS 0
+#define CONFIG_LIBVPX 0
+#define CONFIG_LIBWAVPACK 0
+#define CONFIG_LIBWEBP 0
+#define CONFIG_LIBX264 1
+#define CONFIG_LIBX265 0
+#define CONFIG_LIBXAVS 0
+#define CONFIG_LIBXCB 0
+#define CONFIG_LIBXCB_SHM 0
+#define CONFIG_LIBXCB_SHAPE 0
+#define CONFIG_LIBXCB_XFIXES 0
+#define CONFIG_LIBXVID 0
+#define CONFIG_LIBZMQ 0
+#define CONFIG_LIBZVBI 0
+#define CONFIG_LZMA 0
+#define CONFIG_NVENC 0
+#define CONFIG_OPENAL 0
+#define CONFIG_OPENCL 0
+#define CONFIG_OPENGL 0
+#define CONFIG_OPENSSL 0
+#define CONFIG_SDL 0
+#define CONFIG_X11GRAB 0
+#define CONFIG_XLIB 0
+#define CONFIG_ZLIB 1
+#define CONFIG_FTRAPV 0
+#define CONFIG_GRAY 0
+#define CONFIG_HARDCODED_TABLES 0
+#define CONFIG_RUNTIME_CPUDETECT 1
+#define CONFIG_SAFE_BITSTREAM_READER 1
+#define CONFIG_SHARED 1
+#define CONFIG_SMALL 1
+#define CONFIG_STATIC 0
+#define CONFIG_SWSCALE_ALPHA 1
+#define CONFIG_DXVA2 0
+#define CONFIG_VAAPI 0
+#define CONFIG_VDA 0
+#define CONFIG_VDPAU 0
+#define CONFIG_XVMC 0
+#define CONFIG_GPL 1
+#define CONFIG_NONFREE 1
+#define CONFIG_VERSION3 1
+#define CONFIG_AVCODEC 1
+#define CONFIG_AVDEVICE 1
+#define CONFIG_AVFILTER 1
+#define CONFIG_AVFORMAT 1
+#define CONFIG_AVRESAMPLE 0
+#define CONFIG_AVUTIL 1
+#define CONFIG_POSTPROC 1
+#define CONFIG_SWRESAMPLE 1
+#define CONFIG_SWSCALE 1
+#define CONFIG_FFPLAY 0
+#define CONFIG_FFPROBE 0
+#define CONFIG_FFSERVER 0
+#define CONFIG_FFMPEG 0
+#define CONFIG_DCT 1
+#define CONFIG_DWT 1
+#define CONFIG_ERROR_RESILIENCE 1
+#define CONFIG_FAAN 1
+#define CONFIG_FAST_UNALIGNED 1
+#define CONFIG_FFT 1
+#define CONFIG_LSP 1
+#define CONFIG_LZO 1
+#define CONFIG_MDCT 1
+#define CONFIG_PIXELUTILS 1
+#define CONFIG_NETWORK 1
+#define CONFIG_QSV 0
+#define CONFIG_RDFT 1
+#define CONFIG_FONTCONFIG 0
+#define CONFIG_INCOMPATIBLE_LIBAV_ABI 0
+#define CONFIG_MEMALIGN_HACK 0
+#define CONFIG_MEMORY_POISONING 0
+#define CONFIG_NEON_CLOBBER_TEST 0
+#define CONFIG_PIC 1
+#define CONFIG_POD2MAN 1
+#define CONFIG_RAISE_MAJOR 0
+#define CONFIG_THUMB 1
+#define CONFIG_XMM_CLOBBER_TEST 0
+#define CONFIG_AANDCTTABLES 1
+#define CONFIG_AC3DSP 1
+#define CONFIG_AUDIO_FRAME_QUEUE 1
+#define CONFIG_AUDIODSP 1
+#define CONFIG_BLOCKDSP 1
+#define CONFIG_BSWAPDSP 1
+#define CONFIG_CABAC 1
+#define CONFIG_DVPROFILE 1
+#define CONFIG_EXIF 1
+#define CONFIG_FAANDCT 1
+#define CONFIG_FAANIDCT 1
+#define CONFIG_FDCTDSP 1
+#define CONFIG_FMTCONVERT 1
+#define CONFIG_FRAME_THREAD_ENCODER 1
+#define CONFIG_GCRYPT 0
+#define CONFIG_GOLOMB 1
+#define CONFIG_GPLV3 1
+#define CONFIG_H263DSP 1
+#define CONFIG_H264CHROMA 1
+#define CONFIG_H264DSP 1
+#define CONFIG_H264PRED 1
+#define CONFIG_H264QPEL 1
+#define CONFIG_HPELDSP 1
+#define CONFIG_HUFFMAN 1
+#define CONFIG_HUFFYUVDSP 1
+#define CONFIG_HUFFYUVENCDSP 1
+#define CONFIG_IDCTDSP 1
+#define CONFIG_IIRFILTER 1
+#define CONFIG_IMDCT15 1
+#define CONFIG_INTRAX8 1
+#define CONFIG_LGPLV3 0
+#define CONFIG_LLAUDDSP 1
+#define CONFIG_LLVIDDSP 1
+#define CONFIG_LPC 1
+#define CONFIG_ME_CMP 1
+#define CONFIG_MPEG_ER 1
+#define CONFIG_MPEGAUDIO 1
+#define CONFIG_MPEGAUDIODSP 1
+#define CONFIG_MPEGVIDEO 1
+#define CONFIG_MPEGVIDEOENC 1
+#define CONFIG_NETTLE 0
+#define CONFIG_PIXBLOCKDSP 1
+#define CONFIG_QPELDSP 1
+#define CONFIG_RANGECODER 1
+#define CONFIG_RIFFDEC 1
+#define CONFIG_RIFFENC 1
+#define CONFIG_RTPDEC 1
+#define CONFIG_RTPENC_CHAIN 1
+#define CONFIG_SINEWIN 1
+#define CONFIG_STARTCODE 1
+#define CONFIG_TPELDSP 1
+#define CONFIG_VIDEODSP 1
+#define CONFIG_VP3DSP 1
+#define CONFIG_WMA_FREQS 1
+#define CONFIG_AAC_ADTSTOASC_BSF 1
+#define CONFIG_CHOMP_BSF 1
+#define CONFIG_DUMP_EXTRADATA_BSF 1
+#define CONFIG_H264_MP4TOANNEXB_BSF 1
+#define CONFIG_IMX_DUMP_HEADER_BSF 1
+#define CONFIG_MJPEG2JPEG_BSF 1
+#define CONFIG_MJPEGA_DUMP_HEADER_BSF 1
+#define CONFIG_MP3_HEADER_DECOMPRESS_BSF 1
+#define CONFIG_MOV2TEXTSUB_BSF 1
+#define CONFIG_NOISE_BSF 1
+#define CONFIG_REMOVE_EXTRADATA_BSF 1
+#define CONFIG_TEXT2MOVSUB_BSF 1
+#define CONFIG_AASC_DECODER 1
+#define CONFIG_AIC_DECODER 1
+#define CONFIG_ALIAS_PIX_DECODER 1
+#define CONFIG_AMV_DECODER 1
+#define CONFIG_ANM_DECODER 1
+#define CONFIG_ANSI_DECODER 1
+#define CONFIG_APNG_DECODER 1
+#define CONFIG_ASV1_DECODER 1
+#define CONFIG_ASV2_DECODER 1
+#define CONFIG_AURA_DECODER 1
+#define CONFIG_AURA2_DECODER 1
+#define CONFIG_AVRP_DECODER 1
+#define CONFIG_AVRN_DECODER 1
+#define CONFIG_AVS_DECODER 1
+#define CONFIG_AVUI_DECODER 1
+#define CONFIG_AYUV_DECODER 1
+#define CONFIG_BETHSOFTVID_DECODER 1
+#define CONFIG_BFI_DECODER 1
+#define CONFIG_BINK_DECODER 1
+#define CONFIG_BMP_DECODER 1
+#define CONFIG_BMV_VIDEO_DECODER 1
+#define CONFIG_BRENDER_PIX_DECODER 1
+#define CONFIG_C93_DECODER 1
+#define CONFIG_CAVS_DECODER 1
+#define CONFIG_CDGRAPHICS_DECODER 1
+#define CONFIG_CDXL_DECODER 1
+#define CONFIG_CINEPAK_DECODER 1
+#define CONFIG_CLJR_DECODER 1
+#define CONFIG_CLLC_DECODER 1
+#define CONFIG_COMFORTNOISE_DECODER 1
+#define CONFIG_CPIA_DECODER 1
+#define CONFIG_CSCD_DECODER 1
+#define CONFIG_CYUV_DECODER 1
+#define CONFIG_DFA_DECODER 1
+#define CONFIG_DIRAC_DECODER 1
+#define CONFIG_DNXHD_DECODER 1
+#define CONFIG_DPX_DECODER 1
+#define CONFIG_DSICINVIDEO_DECODER 1
+#define CONFIG_DVVIDEO_DECODER 1
+#define CONFIG_DXA_DECODER 1
+#define CONFIG_DXTORY_DECODER 1
+#define CONFIG_EACMV_DECODER 1
+#define CONFIG_EAMAD_DECODER 1
+#define CONFIG_EATGQ_DECODER 1
+#define CONFIG_EATGV_DECODER 1
+#define CONFIG_EATQI_DECODER 1
+#define CONFIG_EIGHTBPS_DECODER 1
+#define CONFIG_EIGHTSVX_EXP_DECODER 1
+#define CONFIG_EIGHTSVX_FIB_DECODER 1
+#define CONFIG_ESCAPE124_DECODER 1
+#define CONFIG_ESCAPE130_DECODER 1
+#define CONFIG_EXR_DECODER 1
+#define CONFIG_FFV1_DECODER 1
+#define CONFIG_FFVHUFF_DECODER 1
+#define CONFIG_FIC_DECODER 1
+#define CONFIG_FLASHSV_DECODER 1
+#define CONFIG_FLASHSV2_DECODER 1
+#define CONFIG_FLIC_DECODER 1
+#define CONFIG_FLV_DECODER 1
+#define CONFIG_FOURXM_DECODER 1
+#define CONFIG_FRAPS_DECODER 1
+#define CONFIG_FRWU_DECODER 1
+#define CONFIG_G2M_DECODER 1
+#define CONFIG_GIF_DECODER 1
+#define CONFIG_H261_DECODER 1
+#define CONFIG_H263_DECODER 1
+#define CONFIG_H263I_DECODER 1
+#define CONFIG_H263P_DECODER 1
+#define CONFIG_H264_DECODER 1
+#define CONFIG_H264_CRYSTALHD_DECODER 0
+#define CONFIG_H264_QSV_DECODER 0
+#define CONFIG_H264_VDA_DECODER 0
+#define CONFIG_H264_VDPAU_DECODER 0
+#define CONFIG_HEVC_DECODER 1
+#define CONFIG_HNM4_VIDEO_DECODER 1
+#define CONFIG_HQX_DECODER 1
+#define CONFIG_HUFFYUV_DECODER 1
+#define CONFIG_IDCIN_DECODER 1
+#define CONFIG_IFF_BYTERUN1_DECODER 1
+#define CONFIG_IFF_ILBM_DECODER 1
+#define CONFIG_INDEO2_DECODER 1
+#define CONFIG_INDEO3_DECODER 1
+#define CONFIG_INDEO4_DECODER 1
+#define CONFIG_INDEO5_DECODER 1
+#define CONFIG_INTERPLAY_VIDEO_DECODER 1
+#define CONFIG_JPEG2000_DECODER 1
+#define CONFIG_JPEGLS_DECODER 1
+#define CONFIG_JV_DECODER 1
+#define CONFIG_KGV1_DECODER 1
+#define CONFIG_KMVC_DECODER 1
+#define CONFIG_LAGARITH_DECODER 1
+#define CONFIG_LOCO_DECODER 1
+#define CONFIG_MDEC_DECODER 1
+#define CONFIG_MIMIC_DECODER 1
+#define CONFIG_MJPEG_DECODER 1
+#define CONFIG_MJPEGB_DECODER 1
+#define CONFIG_MMVIDEO_DECODER 1
+#define CONFIG_MOTIONPIXELS_DECODER 1
+#define CONFIG_MPEG_XVMC_DECODER 0
+#define CONFIG_MPEG1VIDEO_DECODER 1
+#define CONFIG_MPEG2VIDEO_DECODER 1
+#define CONFIG_MPEG4_DECODER 1
+#define CONFIG_MPEG4_CRYSTALHD_DECODER 0
+#define CONFIG_MPEG4_VDPAU_DECODER 0
+#define CONFIG_MPEGVIDEO_DECODER 1
+#define CONFIG_MPEG_VDPAU_DECODER 0
+#define CONFIG_MPEG1_VDPAU_DECODER 0
+#define CONFIG_MPEG2_CRYSTALHD_DECODER 0
+#define CONFIG_MSA1_DECODER 1
+#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0
+#define CONFIG_MSMPEG4V1_DECODER 1
+#define CONFIG_MSMPEG4V2_DECODER 1
+#define CONFIG_MSMPEG4V3_DECODER 1
+#define CONFIG_MSRLE_DECODER 1
+#define CONFIG_MSS1_DECODER 1
+#define CONFIG_MSS2_DECODER 1
+#define CONFIG_MSVIDEO1_DECODER 1
+#define CONFIG_MSZH_DECODER 1
+#define CONFIG_MTS2_DECODER 1
+#define CONFIG_MVC1_DECODER 1
+#define CONFIG_MVC2_DECODER 1
+#define CONFIG_MXPEG_DECODER 1
+#define CONFIG_NUV_DECODER 1
+#define CONFIG_PAF_VIDEO_DECODER 1
+#define CONFIG_PAM_DECODER 1
+#define CONFIG_PBM_DECODER 1
+#define CONFIG_PCX_DECODER 1
+#define CONFIG_PGM_DECODER 1
+#define CONFIG_PGMYUV_DECODER 1
+#define CONFIG_PICTOR_DECODER 1
+#define CONFIG_PNG_DECODER 1
+#define CONFIG_PPM_DECODER 1
+#define CONFIG_PRORES_DECODER 1
+#define CONFIG_PRORES_LGPL_DECODER 1
+#define CONFIG_PTX_DECODER 1
+#define CONFIG_QDRAW_DECODER 1
+#define CONFIG_QPEG_DECODER 1
+#define CONFIG_QTRLE_DECODER 1
+#define CONFIG_R10K_DECODER 1
+#define CONFIG_R210_DECODER 1
+#define CONFIG_RAWVIDEO_DECODER 1
+#define CONFIG_RL2_DECODER 1
+#define CONFIG_ROQ_DECODER 1
+#define CONFIG_RPZA_DECODER 1
+#define CONFIG_RV10_DECODER 1
+#define CONFIG_RV20_DECODER 1
+#define CONFIG_RV30_DECODER 1
+#define CONFIG_RV40_DECODER 1
+#define CONFIG_S302M_DECODER 1
+#define CONFIG_SANM_DECODER 1
+#define CONFIG_SGI_DECODER 1
+#define CONFIG_SGIRLE_DECODER 1
+#define CONFIG_SMACKER_DECODER 1
+#define CONFIG_SMC_DECODER 1
+#define CONFIG_SMVJPEG_DECODER 1
+#define CONFIG_SNOW_DECODER 1
+#define CONFIG_SP5X_DECODER 1
+#define CONFIG_SUNRAST_DECODER 1
+#define CONFIG_SVQ1_DECODER 1
+#define CONFIG_SVQ3_DECODER 1
+#define CONFIG_TARGA_DECODER 1
+#define CONFIG_TARGA_Y216_DECODER 1
+#define CONFIG_THEORA_DECODER 1
+#define CONFIG_THP_DECODER 1
+#define CONFIG_TIERTEXSEQVIDEO_DECODER 1
+#define CONFIG_TIFF_DECODER 1
+#define CONFIG_TMV_DECODER 1
+#define CONFIG_TRUEMOTION1_DECODER 1
+#define CONFIG_TRUEMOTION2_DECODER 1
+#define CONFIG_TSCC_DECODER 1
+#define CONFIG_TSCC2_DECODER 1
+#define CONFIG_TXD_DECODER 1
+#define CONFIG_ULTI_DECODER 1
+#define CONFIG_UTVIDEO_DECODER 1
+#define CONFIG_V210_DECODER 1
+#define CONFIG_V210X_DECODER 1
+#define CONFIG_V308_DECODER 1
+#define CONFIG_V408_DECODER 1
+#define CONFIG_V410_DECODER 1
+#define CONFIG_VB_DECODER 1
+#define CONFIG_VBLE_DECODER 1
+#define CONFIG_VC1_DECODER 1
+#define CONFIG_VC1_CRYSTALHD_DECODER 0
+#define CONFIG_VC1_VDPAU_DECODER 0
+#define CONFIG_VC1IMAGE_DECODER 1
+#define CONFIG_VCR1_DECODER 1
+#define CONFIG_VMDVIDEO_DECODER 1
+#define CONFIG_VMNC_DECODER 1
+#define CONFIG_VP3_DECODER 1
+#define CONFIG_VP5_DECODER 1
+#define CONFIG_VP6_DECODER 1
+#define CONFIG_VP6A_DECODER 1
+#define CONFIG_VP6F_DECODER 1
+#define CONFIG_VP7_DECODER 1
+#define CONFIG_VP8_DECODER 1
+#define CONFIG_VP9_DECODER 1
+#define CONFIG_VQA_DECODER 1
+#define CONFIG_WEBP_DECODER 1
+#define CONFIG_WMV1_DECODER 1
+#define CONFIG_WMV2_DECODER 1
+#define CONFIG_WMV3_DECODER 1
+#define CONFIG_WMV3_CRYSTALHD_DECODER 0
+#define CONFIG_WMV3_VDPAU_DECODER 0
+#define CONFIG_WMV3IMAGE_DECODER 1
+#define CONFIG_WNV1_DECODER 1
+#define CONFIG_XAN_WC3_DECODER 1
+#define CONFIG_XAN_WC4_DECODER 1
+#define CONFIG_XBM_DECODER 1
+#define CONFIG_XFACE_DECODER 1
+#define CONFIG_XL_DECODER 1
+#define CONFIG_XWD_DECODER 1
+#define CONFIG_Y41P_DECODER 1
+#define CONFIG_YOP_DECODER 1
+#define CONFIG_YUV4_DECODER 1
+#define CONFIG_ZERO12V_DECODER 1
+#define CONFIG_ZEROCODEC_DECODER 1
+#define CONFIG_ZLIB_DECODER 1
+#define CONFIG_ZMBV_DECODER 1
+#define CONFIG_AAC_DECODER 1
+#define CONFIG_AAC_LATM_DECODER 1
+#define CONFIG_AC3_DECODER 1
+#define CONFIG_AC3_FIXED_DECODER 1
+#define CONFIG_ALAC_DECODER 1
+#define CONFIG_ALS_DECODER 1
+#define CONFIG_AMRNB_DECODER 1
+#define CONFIG_AMRWB_DECODER 1
+#define CONFIG_APE_DECODER 1
+#define CONFIG_ATRAC1_DECODER 1
+#define CONFIG_ATRAC3_DECODER 1
+#define CONFIG_ATRAC3P_DECODER 1
+#define CONFIG_BINKAUDIO_DCT_DECODER 1
+#define CONFIG_BINKAUDIO_RDFT_DECODER 1
+#define CONFIG_BMV_AUDIO_DECODER 1
+#define CONFIG_COOK_DECODER 1
+#define CONFIG_DCA_DECODER 1
+#define CONFIG_DSD_LSBF_DECODER 1
+#define CONFIG_DSD_MSBF_DECODER 1
+#define CONFIG_DSD_LSBF_PLANAR_DECODER 1
+#define CONFIG_DSD_MSBF_PLANAR_DECODER 1
+#define CONFIG_DSICINAUDIO_DECODER 1
+#define CONFIG_DSS_SP_DECODER 1
+#define CONFIG_EAC3_DECODER 1
+#define CONFIG_EVRC_DECODER 1
+#define CONFIG_FFWAVESYNTH_DECODER 1
+#define CONFIG_FLAC_DECODER 1
+#define CONFIG_G723_1_DECODER 1
+#define CONFIG_G729_DECODER 1
+#define CONFIG_GSM_DECODER 1
+#define CONFIG_GSM_MS_DECODER 1
+#define CONFIG_IAC_DECODER 1
+#define CONFIG_IMC_DECODER 1
+#define CONFIG_MACE3_DECODER 1
+#define CONFIG_MACE6_DECODER 1
+#define CONFIG_METASOUND_DECODER 1
+#define CONFIG_MLP_DECODER 1
+#define CONFIG_MP1_DECODER 1
+#define CONFIG_MP1FLOAT_DECODER 1
+#define CONFIG_MP2_DECODER 1
+#define CONFIG_MP2FLOAT_DECODER 1
+#define CONFIG_MP3_DECODER 1
+#define CONFIG_MP3FLOAT_DECODER 1
+#define CONFIG_MP3ADU_DECODER 1
+#define CONFIG_MP3ADUFLOAT_DECODER 1
+#define CONFIG_MP3ON4_DECODER 1
+#define CONFIG_MP3ON4FLOAT_DECODER 1
+#define CONFIG_MPC7_DECODER 1
+#define CONFIG_MPC8_DECODER 1
+#define CONFIG_NELLYMOSER_DECODER 1
+#define CONFIG_ON2AVC_DECODER 1
+#define CONFIG_OPUS_DECODER 1
+#define CONFIG_PAF_AUDIO_DECODER 1
+#define CONFIG_QCELP_DECODER 1
+#define CONFIG_QDM2_DECODER 1
+#define CONFIG_RA_144_DECODER 1
+#define CONFIG_RA_288_DECODER 1
+#define CONFIG_RALF_DECODER 1
+#define CONFIG_SHORTEN_DECODER 1
+#define CONFIG_SIPR_DECODER 1
+#define CONFIG_SMACKAUD_DECODER 1
+#define CONFIG_SONIC_DECODER 1
+#define CONFIG_TAK_DECODER 1
+#define CONFIG_TRUEHD_DECODER 1
+#define CONFIG_TRUESPEECH_DECODER 1
+#define CONFIG_TTA_DECODER 1
+#define CONFIG_TWINVQ_DECODER 1
+#define CONFIG_VMDAUDIO_DECODER 1
+#define CONFIG_VORBIS_DECODER 1
+#define CONFIG_WAVPACK_DECODER 1
+#define CONFIG_WMALOSSLESS_DECODER 1
+#define CONFIG_WMAPRO_DECODER 1
+#define CONFIG_WMAV1_DECODER 1
+#define CONFIG_WMAV2_DECODER 1
+#define CONFIG_WMAVOICE_DECODER 1
+#define CONFIG_WS_SND1_DECODER 1
+#define CONFIG_PCM_ALAW_DECODER 1
+#define CONFIG_PCM_BLURAY_DECODER 1
+#define CONFIG_PCM_DVD_DECODER 1
+#define CONFIG_PCM_F32BE_DECODER 1
+#define CONFIG_PCM_F32LE_DECODER 1
+#define CONFIG_PCM_F64BE_DECODER 1
+#define CONFIG_PCM_F64LE_DECODER 1
+#define CONFIG_PCM_LXF_DECODER 1
+#define CONFIG_PCM_MULAW_DECODER 1
+#define CONFIG_PCM_S8_DECODER 1
+#define CONFIG_PCM_S8_PLANAR_DECODER 1
+#define CONFIG_PCM_S16BE_DECODER 1
+#define CONFIG_PCM_S16BE_PLANAR_DECODER 1
+#define CONFIG_PCM_S16LE_DECODER 1
+#define CONFIG_PCM_S16LE_PLANAR_DECODER 1
+#define CONFIG_PCM_S24BE_DECODER 1
+#define CONFIG_PCM_S24DAUD_DECODER 1
+#define CONFIG_PCM_S24LE_DECODER 1
+#define CONFIG_PCM_S24LE_PLANAR_DECODER 1
+#define CONFIG_PCM_S32BE_DECODER 1
+#define CONFIG_PCM_S32LE_DECODER 1
+#define CONFIG_PCM_S32LE_PLANAR_DECODER 1
+#define CONFIG_PCM_U8_DECODER 1
+#define CONFIG_PCM_U16BE_DECODER 1
+#define CONFIG_PCM_U16LE_DECODER 1
+#define CONFIG_PCM_U24BE_DECODER 1
+#define CONFIG_PCM_U24LE_DECODER 1
+#define CONFIG_PCM_U32BE_DECODER 1
+#define CONFIG_PCM_U32LE_DECODER 1
+#define CONFIG_PCM_ZORK_DECODER 1
+#define CONFIG_INTERPLAY_DPCM_DECODER 1
+#define CONFIG_ROQ_DPCM_DECODER 1
+#define CONFIG_SOL_DPCM_DECODER 1
+#define CONFIG_XAN_DPCM_DECODER 1
+#define CONFIG_ADPCM_4XM_DECODER 1
+#define CONFIG_ADPCM_ADX_DECODER 1
+#define CONFIG_ADPCM_AFC_DECODER 1
+#define CONFIG_ADPCM_CT_DECODER 1
+#define CONFIG_ADPCM_DTK_DECODER 1
+#define CONFIG_ADPCM_EA_DECODER 1
+#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 1
+#define CONFIG_ADPCM_EA_R1_DECODER 1
+#define CONFIG_ADPCM_EA_R2_DECODER 1
+#define CONFIG_ADPCM_EA_R3_DECODER 1
+#define CONFIG_ADPCM_EA_XAS_DECODER 1
+#define CONFIG_ADPCM_G722_DECODER 1
+#define CONFIG_ADPCM_G726_DECODER 1
+#define CONFIG_ADPCM_G726LE_DECODER 1
+#define CONFIG_ADPCM_IMA_AMV_DECODER 1
+#define CONFIG_ADPCM_IMA_APC_DECODER 1
+#define CONFIG_ADPCM_IMA_DK3_DECODER 1
+#define CONFIG_ADPCM_IMA_DK4_DECODER 1
+#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 1
+#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 1
+#define CONFIG_ADPCM_IMA_ISS_DECODER 1
+#define CONFIG_ADPCM_IMA_OKI_DECODER 1
+#define CONFIG_ADPCM_IMA_QT_DECODER 1
+#define CONFIG_ADPCM_IMA_RAD_DECODER 1
+#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 1
+#define CONFIG_ADPCM_IMA_WAV_DECODER 1
+#define CONFIG_ADPCM_IMA_WS_DECODER 1
+#define CONFIG_ADPCM_MS_DECODER 1
+#define CONFIG_ADPCM_SBPRO_2_DECODER 1
+#define CONFIG_ADPCM_SBPRO_3_DECODER 1
+#define CONFIG_ADPCM_SBPRO_4_DECODER 1
+#define CONFIG_ADPCM_SWF_DECODER 1
+#define CONFIG_ADPCM_THP_DECODER 1
+#define CONFIG_ADPCM_VIMA_DECODER 1
+#define CONFIG_ADPCM_XA_DECODER 1
+#define CONFIG_ADPCM_YAMAHA_DECODER 1
+#define CONFIG_VIMA_DECODER 1
+#define CONFIG_SSA_DECODER 1
+#define CONFIG_ASS_DECODER 1
+#define CONFIG_CCAPTION_DECODER 1
+#define CONFIG_DVBSUB_DECODER 1
+#define CONFIG_DVDSUB_DECODER 1
+#define CONFIG_JACOSUB_DECODER 1
+#define CONFIG_MICRODVD_DECODER 1
+#define CONFIG_MOVTEXT_DECODER 1
+#define CONFIG_MPL2_DECODER 1
+#define CONFIG_PGSSUB_DECODER 1
+#define CONFIG_PJS_DECODER 1
+#define CONFIG_REALTEXT_DECODER 1
+#define CONFIG_SAMI_DECODER 1
+#define CONFIG_SRT_DECODER 1
+#define CONFIG_STL_DECODER 1
+#define CONFIG_SUBRIP_DECODER 1
+#define CONFIG_SUBVIEWER_DECODER 1
+#define CONFIG_SUBVIEWER1_DECODER 1
+#define CONFIG_TEXT_DECODER 1
+#define CONFIG_VPLAYER_DECODER 1
+#define CONFIG_WEBVTT_DECODER 1
+#define CONFIG_XSUB_DECODER 1
+#define CONFIG_LIBCELT_DECODER 0
+#define CONFIG_LIBFDK_AAC_DECODER 0
+#define CONFIG_LIBGSM_DECODER 0
+#define CONFIG_LIBGSM_MS_DECODER 0
+#define CONFIG_LIBILBC_DECODER 0
+#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0
+#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0
+#define CONFIG_LIBOPENJPEG_DECODER 0
+#define CONFIG_LIBOPUS_DECODER 0
+#define CONFIG_LIBSCHROEDINGER_DECODER 0
+#define CONFIG_LIBSPEEX_DECODER 0
+#define CONFIG_LIBSTAGEFRIGHT_H264_DECODER 0
+#define CONFIG_LIBUTVIDEO_DECODER 0
+#define CONFIG_LIBVORBIS_DECODER 0
+#define CONFIG_LIBVPX_VP8_DECODER 0
+#define CONFIG_LIBVPX_VP9_DECODER 0
+#define CONFIG_LIBZVBI_TELETEXT_DECODER 0
+#define CONFIG_BINTEXT_DECODER 1
+#define CONFIG_XBIN_DECODER 1
+#define CONFIG_IDF_DECODER 1
+#define CONFIG_AAC_DEMUXER 1
+#define CONFIG_AC3_DEMUXER 1
+#define CONFIG_ACT_DEMUXER 1
+#define CONFIG_ADF_DEMUXER 1
+#define CONFIG_ADP_DEMUXER 1
+#define CONFIG_ADX_DEMUXER 1
+#define CONFIG_AEA_DEMUXER 1
+#define CONFIG_AFC_DEMUXER 1
+#define CONFIG_AIFF_DEMUXER 1
+#define CONFIG_AMR_DEMUXER 1
+#define CONFIG_ANM_DEMUXER 1
+#define CONFIG_APC_DEMUXER 1
+#define CONFIG_APE_DEMUXER 1
+#define CONFIG_APNG_DEMUXER 1
+#define CONFIG_AQTITLE_DEMUXER 1
+#define CONFIG_ASF_DEMUXER 1
+#define CONFIG_ASS_DEMUXER 1
+#define CONFIG_AST_DEMUXER 1
+#define CONFIG_AU_DEMUXER 1
+#define CONFIG_AVI_DEMUXER 1
+#define CONFIG_AVISYNTH_DEMUXER 0
+#define CONFIG_AVR_DEMUXER 1
+#define CONFIG_AVS_DEMUXER 1
+#define CONFIG_BETHSOFTVID_DEMUXER 1
+#define CONFIG_BFI_DEMUXER 1
+#define CONFIG_BINTEXT_DEMUXER 1
+#define CONFIG_BINK_DEMUXER 1
+#define CONFIG_BIT_DEMUXER 1
+#define CONFIG_BMV_DEMUXER 1
+#define CONFIG_BRSTM_DEMUXER 1
+#define CONFIG_BOA_DEMUXER 1
+#define CONFIG_C93_DEMUXER 1
+#define CONFIG_CAF_DEMUXER 1
+#define CONFIG_CAVSVIDEO_DEMUXER 1
+#define CONFIG_CDG_DEMUXER 1
+#define CONFIG_CDXL_DEMUXER 1
+#define CONFIG_CINE_DEMUXER 1
+#define CONFIG_CONCAT_DEMUXER 1
+#define CONFIG_DATA_DEMUXER 1
+#define CONFIG_DAUD_DEMUXER 1
+#define CONFIG_DFA_DEMUXER 1
+#define CONFIG_DIRAC_DEMUXER 1
+#define CONFIG_DNXHD_DEMUXER 1
+#define CONFIG_DSF_DEMUXER 1
+#define CONFIG_DSICIN_DEMUXER 1
+#define CONFIG_DSS_DEMUXER 1
+#define CONFIG_DTS_DEMUXER 1
+#define CONFIG_DTSHD_DEMUXER 1
+#define CONFIG_DV_DEMUXER 1
+#define CONFIG_DVBSUB_DEMUXER 1
+#define CONFIG_DXA_DEMUXER 1
+#define CONFIG_EA_DEMUXER 1
+#define CONFIG_EA_CDATA_DEMUXER 1
+#define CONFIG_EAC3_DEMUXER 1
+#define CONFIG_EPAF_DEMUXER 1
+#define CONFIG_FFM_DEMUXER 1
+#define CONFIG_FFMETADATA_DEMUXER 1
+#define CONFIG_FILMSTRIP_DEMUXER 1
+#define CONFIG_FLAC_DEMUXER 1
+#define CONFIG_FLIC_DEMUXER 1
+#define CONFIG_FLV_DEMUXER 1
+#define CONFIG_LIVE_FLV_DEMUXER 1
+#define CONFIG_FOURXM_DEMUXER 1
+#define CONFIG_FRM_DEMUXER 1
+#define CONFIG_G722_DEMUXER 1
+#define CONFIG_G723_1_DEMUXER 1
+#define CONFIG_G729_DEMUXER 1
+#define CONFIG_GIF_DEMUXER 1
+#define CONFIG_GSM_DEMUXER 1
+#define CONFIG_GXF_DEMUXER 1
+#define CONFIG_H261_DEMUXER 1
+#define CONFIG_H263_DEMUXER 1
+#define CONFIG_H264_DEMUXER 1
+#define CONFIG_HEVC_DEMUXER 1
+#define CONFIG_HLS_DEMUXER 1
+#define CONFIG_HNM_DEMUXER 1
+#define CONFIG_ICO_DEMUXER 1
+#define CONFIG_IDCIN_DEMUXER 1
+#define CONFIG_IDF_DEMUXER 1
+#define CONFIG_IFF_DEMUXER 1
+#define CONFIG_ILBC_DEMUXER 1
+#define CONFIG_IMAGE2_DEMUXER 1
+#define CONFIG_IMAGE2PIPE_DEMUXER 1
+#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 1
+#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 1
+#define CONFIG_INGENIENT_DEMUXER 1
+#define CONFIG_IPMOVIE_DEMUXER 1
+#define CONFIG_IRCAM_DEMUXER 1
+#define CONFIG_ISS_DEMUXER 1
+#define CONFIG_IV8_DEMUXER 1
+#define CONFIG_IVF_DEMUXER 1
+#define CONFIG_JACOSUB_DEMUXER 1
+#define CONFIG_JV_DEMUXER 1
+#define CONFIG_LATM_DEMUXER 1
+#define CONFIG_LMLM4_DEMUXER 1
+#define CONFIG_LOAS_DEMUXER 1
+#define CONFIG_LRC_DEMUXER 1
+#define CONFIG_LVF_DEMUXER 1
+#define CONFIG_LXF_DEMUXER 1
+#define CONFIG_M4V_DEMUXER 1
+#define CONFIG_MATROSKA_DEMUXER 1
+#define CONFIG_MGSTS_DEMUXER 1
+#define CONFIG_MICRODVD_DEMUXER 1
+#define CONFIG_MJPEG_DEMUXER 1
+#define CONFIG_MLP_DEMUXER 1
+#define CONFIG_MLV_DEMUXER 1
+#define CONFIG_MM_DEMUXER 1
+#define CONFIG_MMF_DEMUXER 1
+#define CONFIG_MOV_DEMUXER 1
+#define CONFIG_MP3_DEMUXER 1
+#define CONFIG_MPC_DEMUXER 1
+#define CONFIG_MPC8_DEMUXER 1
+#define CONFIG_MPEGPS_DEMUXER 1
+#define CONFIG_MPEGTS_DEMUXER 1
+#define CONFIG_MPEGTSRAW_DEMUXER 1
+#define CONFIG_MPEGVIDEO_DEMUXER 1
+#define CONFIG_MPL2_DEMUXER 1
+#define CONFIG_MPSUB_DEMUXER 1
+#define CONFIG_MSNWC_TCP_DEMUXER 1
+#define CONFIG_MTV_DEMUXER 1
+#define CONFIG_MV_DEMUXER 1
+#define CONFIG_MVI_DEMUXER 1
+#define CONFIG_MXF_DEMUXER 1
+#define CONFIG_MXG_DEMUXER 1
+#define CONFIG_NC_DEMUXER 1
+#define CONFIG_NISTSPHERE_DEMUXER 1
+#define CONFIG_NSV_DEMUXER 1
+#define CONFIG_NUT_DEMUXER 1
+#define CONFIG_NUV_DEMUXER 1
+#define CONFIG_OGG_DEMUXER 1
+#define CONFIG_OMA_DEMUXER 1
+#define CONFIG_PAF_DEMUXER 1
+#define CONFIG_PCM_ALAW_DEMUXER 1
+#define CONFIG_PCM_MULAW_DEMUXER 1
+#define CONFIG_PCM_F64BE_DEMUXER 1
+#define CONFIG_PCM_F64LE_DEMUXER 1
+#define CONFIG_PCM_F32BE_DEMUXER 1
+#define CONFIG_PCM_F32LE_DEMUXER 1
+#define CONFIG_PCM_S32BE_DEMUXER 1
+#define CONFIG_PCM_S32LE_DEMUXER 1
+#define CONFIG_PCM_S24BE_DEMUXER 1
+#define CONFIG_PCM_S24LE_DEMUXER 1
+#define CONFIG_PCM_S16BE_DEMUXER 1
+#define CONFIG_PCM_S16LE_DEMUXER 1
+#define CONFIG_PCM_S8_DEMUXER 1
+#define CONFIG_PCM_U32BE_DEMUXER 1
+#define CONFIG_PCM_U32LE_DEMUXER 1
+#define CONFIG_PCM_U24BE_DEMUXER 1
+#define CONFIG_PCM_U24LE_DEMUXER 1
+#define CONFIG_PCM_U16BE_DEMUXER 1
+#define CONFIG_PCM_U16LE_DEMUXER 1
+#define CONFIG_PCM_U8_DEMUXER 1
+#define CONFIG_PJS_DEMUXER 1
+#define CONFIG_PMP_DEMUXER 1
+#define CONFIG_PVA_DEMUXER 1
+#define CONFIG_PVF_DEMUXER 1
+#define CONFIG_QCP_DEMUXER 1
+#define CONFIG_R3D_DEMUXER 1
+#define CONFIG_RAWVIDEO_DEMUXER 1
+#define CONFIG_REALTEXT_DEMUXER 1
+#define CONFIG_REDSPARK_DEMUXER 1
+#define CONFIG_RL2_DEMUXER 1
+#define CONFIG_RM_DEMUXER 1
+#define CONFIG_ROQ_DEMUXER 1
+#define CONFIG_RPL_DEMUXER 1
+#define CONFIG_RSD_DEMUXER 1
+#define CONFIG_RSO_DEMUXER 1
+#define CONFIG_RTP_DEMUXER 1
+#define CONFIG_RTSP_DEMUXER 1
+#define CONFIG_SAMI_DEMUXER 1
+#define CONFIG_SAP_DEMUXER 1
+#define CONFIG_SBG_DEMUXER 1
+#define CONFIG_SDP_DEMUXER 1
+#define CONFIG_SDR2_DEMUXER 1
+#define CONFIG_SEGAFILM_DEMUXER 1
+#define CONFIG_SHORTEN_DEMUXER 1
+#define CONFIG_SIFF_DEMUXER 1
+#define CONFIG_SLN_DEMUXER 1
+#define CONFIG_SMACKER_DEMUXER 1
+#define CONFIG_SMJPEG_DEMUXER 1
+#define CONFIG_SMUSH_DEMUXER 1
+#define CONFIG_SOL_DEMUXER 1
+#define CONFIG_SOX_DEMUXER 1
+#define CONFIG_SPDIF_DEMUXER 1
+#define CONFIG_SRT_DEMUXER 1
+#define CONFIG_STR_DEMUXER 1
+#define CONFIG_STL_DEMUXER 1
+#define CONFIG_SUBVIEWER1_DEMUXER 1
+#define CONFIG_SUBVIEWER_DEMUXER 1
+#define CONFIG_SUP_DEMUXER 1
+#define CONFIG_SWF_DEMUXER 1
+#define CONFIG_TAK_DEMUXER 1
+#define CONFIG_TEDCAPTIONS_DEMUXER 1
+#define CONFIG_THP_DEMUXER 1
+#define CONFIG_TIERTEXSEQ_DEMUXER 1
+#define CONFIG_TMV_DEMUXER 1
+#define CONFIG_TRUEHD_DEMUXER 1
+#define CONFIG_TTA_DEMUXER 1
+#define CONFIG_TXD_DEMUXER 1
+#define CONFIG_TTY_DEMUXER 1
+#define CONFIG_VC1_DEMUXER 1
+#define CONFIG_VC1T_DEMUXER 1
+#define CONFIG_VIVO_DEMUXER 1
+#define CONFIG_VMD_DEMUXER 1
+#define CONFIG_VOBSUB_DEMUXER 1
+#define CONFIG_VOC_DEMUXER 1
+#define CONFIG_VPLAYER_DEMUXER 1
+#define CONFIG_VQF_DEMUXER 1
+#define CONFIG_W64_DEMUXER 1
+#define CONFIG_WAV_DEMUXER 1
+#define CONFIG_WC3_DEMUXER 1
+#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 1
+#define CONFIG_WEBVTT_DEMUXER 1
+#define CONFIG_WSAUD_DEMUXER 1
+#define CONFIG_WSVQA_DEMUXER 1
+#define CONFIG_WTV_DEMUXER 1
+#define CONFIG_WV_DEMUXER 1
+#define CONFIG_XA_DEMUXER 1
+#define CONFIG_XBIN_DEMUXER 1
+#define CONFIG_XMV_DEMUXER 1
+#define CONFIG_XWMA_DEMUXER 1
+#define CONFIG_YOP_DEMUXER 1
+#define CONFIG_YUV4MPEGPIPE_DEMUXER 1
+#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 1
+#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 1
+#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 1
+#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 1
+#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 1
+#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 1
+#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 1
+#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 1
+#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 1
+#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 1
+#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 1
+#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 1
+#define CONFIG_LIBGME_DEMUXER 0
+#define CONFIG_LIBMODPLUG_DEMUXER 0
+#define CONFIG_LIBNUT_DEMUXER 0
+#define CONFIG_LIBQUVI_DEMUXER 0
+#define CONFIG_A64MULTI_ENCODER 1
+#define CONFIG_A64MULTI5_ENCODER 1
+#define CONFIG_ALIAS_PIX_ENCODER 1
+#define CONFIG_AMV_ENCODER 1
+#define CONFIG_ASV1_ENCODER 1
+#define CONFIG_ASV2_ENCODER 1
+#define CONFIG_AVRP_ENCODER 1
+#define CONFIG_AVUI_ENCODER 1
+#define CONFIG_AYUV_ENCODER 1
+#define CONFIG_BMP_ENCODER 1
+#define CONFIG_CINEPAK_ENCODER 1
+#define CONFIG_CLJR_ENCODER 1
+#define CONFIG_COMFORTNOISE_ENCODER 1
+#define CONFIG_DNXHD_ENCODER 1
+#define CONFIG_DPX_ENCODER 1
+#define CONFIG_DVVIDEO_ENCODER 1
+#define CONFIG_FFV1_ENCODER 1
+#define CONFIG_FFVHUFF_ENCODER 1
+#define CONFIG_FLASHSV_ENCODER 1
+#define CONFIG_FLASHSV2_ENCODER 1
+#define CONFIG_FLV_ENCODER 1
+#define CONFIG_GIF_ENCODER 1
+#define CONFIG_H261_ENCODER 1
+#define CONFIG_H263_ENCODER 1
+#define CONFIG_H263P_ENCODER 1
+#define CONFIG_HUFFYUV_ENCODER 1
+#define CONFIG_JPEG2000_ENCODER 1
+#define CONFIG_JPEGLS_ENCODER 1
+#define CONFIG_LJPEG_ENCODER 1
+#define CONFIG_MJPEG_ENCODER 1
+#define CONFIG_MPEG1VIDEO_ENCODER 1
+#define CONFIG_MPEG2VIDEO_ENCODER 1
+#define CONFIG_MPEG4_ENCODER 1
+#define CONFIG_MSMPEG4V2_ENCODER 1
+#define CONFIG_MSMPEG4V3_ENCODER 1
+#define CONFIG_MSVIDEO1_ENCODER 1
+#define CONFIG_NVENC_ENCODER 0
+#define CONFIG_PAM_ENCODER 1
+#define CONFIG_PBM_ENCODER 1
+#define CONFIG_PCX_ENCODER 1
+#define CONFIG_PGM_ENCODER 1
+#define CONFIG_PGMYUV_ENCODER 1
+#define CONFIG_PNG_ENCODER 1
+#define CONFIG_PPM_ENCODER 1
+#define CONFIG_PRORES_ENCODER 1
+#define CONFIG_PRORES_AW_ENCODER 1
+#define CONFIG_PRORES_KS_ENCODER 1
+#define CONFIG_QTRLE_ENCODER 1
+#define CONFIG_R10K_ENCODER 1
+#define CONFIG_R210_ENCODER 1
+#define CONFIG_RAWVIDEO_ENCODER 1
+#define CONFIG_ROQ_ENCODER 1
+#define CONFIG_RV10_ENCODER 1
+#define CONFIG_RV20_ENCODER 1
+#define CONFIG_S302M_ENCODER 1
+#define CONFIG_SGI_ENCODER 1
+#define CONFIG_SNOW_ENCODER 1
+#define CONFIG_SUNRAST_ENCODER 1
+#define CONFIG_SVQ1_ENCODER 1
+#define CONFIG_TARGA_ENCODER 1
+#define CONFIG_TIFF_ENCODER 1
+#define CONFIG_UTVIDEO_ENCODER 1
+#define CONFIG_V210_ENCODER 1
+#define CONFIG_V308_ENCODER 1
+#define CONFIG_V408_ENCODER 1
+#define CONFIG_V410_ENCODER 1
+#define CONFIG_WMV1_ENCODER 1
+#define CONFIG_WMV2_ENCODER 1
+#define CONFIG_XBM_ENCODER 1
+#define CONFIG_XFACE_ENCODER 1
+#define CONFIG_XWD_ENCODER 1
+#define CONFIG_Y41P_ENCODER 1
+#define CONFIG_YUV4_ENCODER 1
+#define CONFIG_ZLIB_ENCODER 1
+#define CONFIG_ZMBV_ENCODER 1
+#define CONFIG_AAC_ENCODER 1
+#define CONFIG_AC3_ENCODER 1
+#define CONFIG_AC3_FIXED_ENCODER 1
+#define CONFIG_ALAC_ENCODER 1
+#define CONFIG_DCA_ENCODER 1
+#define CONFIG_EAC3_ENCODER 1
+#define CONFIG_FLAC_ENCODER 1
+#define CONFIG_G723_1_ENCODER 1
+#define CONFIG_MP2_ENCODER 1
+#define CONFIG_MP2FIXED_ENCODER 1
+#define CONFIG_NELLYMOSER_ENCODER 1
+#define CONFIG_RA_144_ENCODER 1
+#define CONFIG_SONIC_ENCODER 1
+#define CONFIG_SONIC_LS_ENCODER 1
+#define CONFIG_TTA_ENCODER 1
+#define CONFIG_VORBIS_ENCODER 1
+#define CONFIG_WAVPACK_ENCODER 1
+#define CONFIG_WMAV1_ENCODER 1
+#define CONFIG_WMAV2_ENCODER 1
+#define CONFIG_PCM_ALAW_ENCODER 1
+#define CONFIG_PCM_F32BE_ENCODER 1
+#define CONFIG_PCM_F32LE_ENCODER 1
+#define CONFIG_PCM_F64BE_ENCODER 1
+#define CONFIG_PCM_F64LE_ENCODER 1
+#define CONFIG_PCM_MULAW_ENCODER 1
+#define CONFIG_PCM_S8_ENCODER 1
+#define CONFIG_PCM_S8_PLANAR_ENCODER 1
+#define CONFIG_PCM_S16BE_ENCODER 1
+#define CONFIG_PCM_S16BE_PLANAR_ENCODER 1
+#define CONFIG_PCM_S16LE_ENCODER 1
+#define CONFIG_PCM_S16LE_PLANAR_ENCODER 1
+#define CONFIG_PCM_S24BE_ENCODER 1
+#define CONFIG_PCM_S24DAUD_ENCODER 1
+#define CONFIG_PCM_S24LE_ENCODER 1
+#define CONFIG_PCM_S24LE_PLANAR_ENCODER 1
+#define CONFIG_PCM_S32BE_ENCODER 1
+#define CONFIG_PCM_S32LE_ENCODER 1
+#define CONFIG_PCM_S32LE_PLANAR_ENCODER 1
+#define CONFIG_PCM_U8_ENCODER 1
+#define CONFIG_PCM_U16BE_ENCODER 1
+#define CONFIG_PCM_U16LE_ENCODER 1
+#define CONFIG_PCM_U24BE_ENCODER 1
+#define CONFIG_PCM_U24LE_ENCODER 1
+#define CONFIG_PCM_U32BE_ENCODER 1
+#define CONFIG_PCM_U32LE_ENCODER 1
+#define CONFIG_ROQ_DPCM_ENCODER 1
+#define CONFIG_ADPCM_ADX_ENCODER 1
+#define CONFIG_ADPCM_G722_ENCODER 1
+#define CONFIG_ADPCM_G726_ENCODER 1
+#define CONFIG_ADPCM_IMA_QT_ENCODER 1
+#define CONFIG_ADPCM_IMA_WAV_ENCODER 1
+#define CONFIG_ADPCM_MS_ENCODER 1
+#define CONFIG_ADPCM_SWF_ENCODER 1
+#define CONFIG_ADPCM_YAMAHA_ENCODER 1
+#define CONFIG_SSA_ENCODER 1
+#define CONFIG_ASS_ENCODER 1
+#define CONFIG_DVBSUB_ENCODER 1
+#define CONFIG_DVDSUB_ENCODER 1
+#define CONFIG_MOVTEXT_ENCODER 1
+#define CONFIG_SRT_ENCODER 1
+#define CONFIG_SUBRIP_ENCODER 1
+#define CONFIG_WEBVTT_ENCODER 1
+#define CONFIG_XSUB_ENCODER 1
+#define CONFIG_LIBFAAC_ENCODER 1
+#define CONFIG_LIBFDK_AAC_ENCODER 0
+#define CONFIG_LIBGSM_ENCODER 0
+#define CONFIG_LIBGSM_MS_ENCODER 0
+#define CONFIG_LIBILBC_ENCODER 0
+#define CONFIG_LIBMP3LAME_ENCODER 0
+#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0
+#define CONFIG_LIBOPENJPEG_ENCODER 0
+#define CONFIG_LIBOPUS_ENCODER 0
+#define CONFIG_LIBSCHROEDINGER_ENCODER 0
+#define CONFIG_LIBSHINE_ENCODER 0
+#define CONFIG_LIBSPEEX_ENCODER 0
+#define CONFIG_LIBTHEORA_ENCODER 0
+#define CONFIG_LIBTWOLAME_ENCODER 0
+#define CONFIG_LIBUTVIDEO_ENCODER 0
+#define CONFIG_LIBVO_AACENC_ENCODER 0
+#define CONFIG_LIBVO_AMRWBENC_ENCODER 0
+#define CONFIG_LIBVORBIS_ENCODER 0
+#define CONFIG_LIBVPX_VP8_ENCODER 0
+#define CONFIG_LIBVPX_VP9_ENCODER 0
+#define CONFIG_LIBWAVPACK_ENCODER 0
+#define CONFIG_LIBWEBP_ENCODER 0
+#define CONFIG_LIBX264_ENCODER 1
+#define CONFIG_LIBX264RGB_ENCODER 1
+#define CONFIG_LIBX265_ENCODER 0
+#define CONFIG_LIBXAVS_ENCODER 0
+#define CONFIG_LIBXVID_ENCODER 0
+#define CONFIG_LIBAACPLUS_ENCODER 0
+#define CONFIG_LIBOPENH264_ENCODER 0
+#define CONFIG_ADELAY_FILTER 1
+#define CONFIG_AECHO_FILTER 1
+#define CONFIG_AEVAL_FILTER 1
+#define CONFIG_AFADE_FILTER 1
+#define CONFIG_AFORMAT_FILTER 1
+#define CONFIG_AINTERLEAVE_FILTER 1
+#define CONFIG_ALLPASS_FILTER 1
+#define CONFIG_AMERGE_FILTER 1
+#define CONFIG_AMIX_FILTER 1
+#define CONFIG_ANULL_FILTER 1
+#define CONFIG_APAD_FILTER 1
+#define CONFIG_APERMS_FILTER 1
+#define CONFIG_APHASER_FILTER 1
+#define CONFIG_ARESAMPLE_FILTER 1
+#define CONFIG_ASELECT_FILTER 1
+#define CONFIG_ASENDCMD_FILTER 1
+#define CONFIG_ASETNSAMPLES_FILTER 1
+#define CONFIG_ASETPTS_FILTER 1
+#define CONFIG_ASETRATE_FILTER 1
+#define CONFIG_ASETTB_FILTER 1
+#define CONFIG_ASHOWINFO_FILTER 1
+#define CONFIG_ASPLIT_FILTER 1
+#define CONFIG_ASTATS_FILTER 1
+#define CONFIG_ASTREAMSYNC_FILTER 1
+#define CONFIG_ASYNCTS_FILTER 0
+#define CONFIG_ATEMPO_FILTER 1
+#define CONFIG_ATRIM_FILTER 1
+#define CONFIG_AZMQ_FILTER 0
+#define CONFIG_BANDPASS_FILTER 1
+#define CONFIG_BANDREJECT_FILTER 1
+#define CONFIG_BASS_FILTER 1
+#define CONFIG_BIQUAD_FILTER 1
+#define CONFIG_BS2B_FILTER 0
+#define CONFIG_CHANNELMAP_FILTER 1
+#define CONFIG_CHANNELSPLIT_FILTER 1
+#define CONFIG_COMPAND_FILTER 1
+#define CONFIG_DCSHIFT_FILTER 1
+#define CONFIG_EARWAX_FILTER 1
+#define CONFIG_EBUR128_FILTER 1
+#define CONFIG_EQUALIZER_FILTER 1
+#define CONFIG_FLANGER_FILTER 1
+#define CONFIG_HIGHPASS_FILTER 1
+#define CONFIG_JOIN_FILTER 1
+#define CONFIG_LADSPA_FILTER 0
+#define CONFIG_LOWPASS_FILTER 1
+#define CONFIG_PAN_FILTER 1
+#define CONFIG_REPLAYGAIN_FILTER 1
+#define CONFIG_RESAMPLE_FILTER 0
+#define CONFIG_SILENCEDETECT_FILTER 1
+#define CONFIG_SILENCEREMOVE_FILTER 1
+#define CONFIG_TREBLE_FILTER 1
+#define CONFIG_VOLUME_FILTER 1
+#define CONFIG_VOLUMEDETECT_FILTER 1
+#define CONFIG_AEVALSRC_FILTER 1
+#define CONFIG_ANULLSRC_FILTER 1
+#define CONFIG_FLITE_FILTER 0
+#define CONFIG_SINE_FILTER 1
+#define CONFIG_ANULLSINK_FILTER 1
+#define CONFIG_ALPHAEXTRACT_FILTER 1
+#define CONFIG_ALPHAMERGE_FILTER 1
+#define CONFIG_ASS_FILTER 0
+#define CONFIG_BBOX_FILTER 1
+#define CONFIG_BLACKDETECT_FILTER 1
+#define CONFIG_BLACKFRAME_FILTER 1
+#define CONFIG_BLEND_FILTER 1
+#define CONFIG_BOXBLUR_FILTER 1
+#define CONFIG_CODECVIEW_FILTER 1
+#define CONFIG_COLORBALANCE_FILTER 1
+#define CONFIG_COLORCHANNELMIXER_FILTER 1
+#define CONFIG_COLORLEVELS_FILTER 1
+#define CONFIG_COLORMATRIX_FILTER 1
+#define CONFIG_COPY_FILTER 1
+#define CONFIG_CROP_FILTER 1
+#define CONFIG_CROPDETECT_FILTER 1
+#define CONFIG_CURVES_FILTER 1
+#define CONFIG_DCTDNOIZ_FILTER 1
+#define CONFIG_DECIMATE_FILTER 1
+#define CONFIG_DEJUDDER_FILTER 1
+#define CONFIG_DELOGO_FILTER 1
+#define CONFIG_DESHAKE_FILTER 1
+#define CONFIG_DRAWBOX_FILTER 1
+#define CONFIG_DRAWGRID_FILTER 1
+#define CONFIG_DRAWTEXT_FILTER 0
+#define CONFIG_EDGEDETECT_FILTER 1
+#define CONFIG_ELBG_FILTER 1
+#define CONFIG_EQ_FILTER 1
+#define CONFIG_EXTRACTPLANES_FILTER 1
+#define CONFIG_FADE_FILTER 1
+#define CONFIG_FIELD_FILTER 1
+#define CONFIG_FIELDMATCH_FILTER 1
+#define CONFIG_FIELDORDER_FILTER 1
+#define CONFIG_FORMAT_FILTER 1
+#define CONFIG_FPS_FILTER 1
+#define CONFIG_FRAMEPACK_FILTER 1
+#define CONFIG_FRAMESTEP_FILTER 1
+#define CONFIG_FREI0R_FILTER 0
+#define CONFIG_FSPP_FILTER 1
+#define CONFIG_GEQ_FILTER 1
+#define CONFIG_GRADFUN_FILTER 1
+#define CONFIG_HALDCLUT_FILTER 1
+#define CONFIG_HFLIP_FILTER 1
+#define CONFIG_HISTEQ_FILTER 1
+#define CONFIG_HISTOGRAM_FILTER 1
+#define CONFIG_HQDN3D_FILTER 1
+#define CONFIG_HQX_FILTER 1
+#define CONFIG_HUE_FILTER 1
+#define CONFIG_IDET_FILTER 1
+#define CONFIG_IL_FILTER 1
+#define CONFIG_INTERLACE_FILTER 1
+#define CONFIG_INTERLEAVE_FILTER 1
+#define CONFIG_KERNDEINT_FILTER 1
+#define CONFIG_LENSCORRECTION_FILTER 1
+#define CONFIG_LUT3D_FILTER 1
+#define CONFIG_LUT_FILTER 1
+#define CONFIG_LUTRGB_FILTER 1
+#define CONFIG_LUTYUV_FILTER 1
+#define CONFIG_MCDEINT_FILTER 1
+#define CONFIG_MERGEPLANES_FILTER 1
+#define CONFIG_MPDECIMATE_FILTER 1
+#define CONFIG_NEGATE_FILTER 1
+#define CONFIG_NOFORMAT_FILTER 1
+#define CONFIG_NOISE_FILTER 1
+#define CONFIG_NULL_FILTER 1
+#define CONFIG_OCV_FILTER 0
+#define CONFIG_OVERLAY_FILTER 1
+#define CONFIG_OWDENOISE_FILTER 1
+#define CONFIG_PAD_FILTER 1
+#define CONFIG_PALETTEGEN_FILTER 1
+#define CONFIG_PALETTEUSE_FILTER 1
+#define CONFIG_PERMS_FILTER 1
+#define CONFIG_PERSPECTIVE_FILTER 1
+#define CONFIG_PHASE_FILTER 1
+#define CONFIG_PIXDESCTEST_FILTER 1
+#define CONFIG_PP_FILTER 1
+#define CONFIG_PP7_FILTER 1
+#define CONFIG_PSNR_FILTER 1
+#define CONFIG_PULLUP_FILTER 1
+#define CONFIG_QP_FILTER 1
+#define CONFIG_REMOVELOGO_FILTER 1
+#define CONFIG_REPEATFIELDS_FILTER 1
+#define CONFIG_ROTATE_FILTER 1
+#define CONFIG_SAB_FILTER 1
+#define CONFIG_SCALE_FILTER 1
+#define CONFIG_SELECT_FILTER 1
+#define CONFIG_SENDCMD_FILTER 1
+#define CONFIG_SEPARATEFIELDS_FILTER 1
+#define CONFIG_SETDAR_FILTER 1
+#define CONFIG_SETFIELD_FILTER 1
+#define CONFIG_SETPTS_FILTER 1
+#define CONFIG_SETSAR_FILTER 1
+#define CONFIG_SETTB_FILTER 1
+#define CONFIG_SHOWINFO_FILTER 1
+#define CONFIG_SHOWPALETTE_FILTER 1
+#define CONFIG_SHUFFLEPLANES_FILTER 1
+#define CONFIG_SIGNALSTATS_FILTER 1
+#define CONFIG_SMARTBLUR_FILTER 1
+#define CONFIG_SPLIT_FILTER 1
+#define CONFIG_SPP_FILTER 1
+#define CONFIG_STEREO3D_FILTER 1
+#define CONFIG_SUBTITLES_FILTER 0
+#define CONFIG_SUPER2XSAI_FILTER 1
+#define CONFIG_SWAPUV_FILTER 1
+#define CONFIG_TBLEND_FILTER 1
+#define CONFIG_TELECINE_FILTER 1
+#define CONFIG_THUMBNAIL_FILTER 1
+#define CONFIG_TILE_FILTER 1
+#define CONFIG_TINTERLACE_FILTER 1
+#define CONFIG_TRANSPOSE_FILTER 1
+#define CONFIG_TRIM_FILTER 1
+#define CONFIG_UNSHARP_FILTER 1
+#define CONFIG_USPP_FILTER 1
+#define CONFIG_VFLIP_FILTER 1
+#define CONFIG_VIDSTABDETECT_FILTER 0
+#define CONFIG_VIDSTABTRANSFORM_FILTER 0
+#define CONFIG_VIGNETTE_FILTER 1
+#define CONFIG_W3FDIF_FILTER 1
+#define CONFIG_XBR_FILTER 1
+#define CONFIG_YADIF_FILTER 1
+#define CONFIG_ZMQ_FILTER 0
+#define CONFIG_ZOOMPAN_FILTER 1
+#define CONFIG_CELLAUTO_FILTER 1
+#define CONFIG_COLOR_FILTER 1
+#define CONFIG_FREI0R_SRC_FILTER 0
+#define CONFIG_HALDCLUTSRC_FILTER 1
+#define CONFIG_LIFE_FILTER 1
+#define CONFIG_MANDELBROT_FILTER 1
+#define CONFIG_MPTESTSRC_FILTER 1
+#define CONFIG_NULLSRC_FILTER 1
+#define CONFIG_RGBTESTSRC_FILTER 1
+#define CONFIG_SMPTEBARS_FILTER 1
+#define CONFIG_SMPTEHDBARS_FILTER 1
+#define CONFIG_TESTSRC_FILTER 1
+#define CONFIG_NULLSINK_FILTER 1
+#define CONFIG_AVECTORSCOPE_FILTER 1
+#define CONFIG_CONCAT_FILTER 1
+#define CONFIG_SHOWCQT_FILTER 1
+#define CONFIG_SHOWSPECTRUM_FILTER 1
+#define CONFIG_SHOWWAVES_FILTER 1
+#define CONFIG_AMOVIE_FILTER 1
+#define CONFIG_MOVIE_FILTER 1
+#define CONFIG_H263_VAAPI_HWACCEL 0
+#define CONFIG_H263_VDPAU_HWACCEL 0
+#define CONFIG_H264_DXVA2_HWACCEL 0
+#define CONFIG_H264_QSV_HWACCEL 0
+#define CONFIG_H264_VAAPI_HWACCEL 0
+#define CONFIG_H264_VDA_HWACCEL 0
+#define CONFIG_H264_VDA_OLD_HWACCEL 0
+#define CONFIG_H264_VDPAU_HWACCEL 0
+#define CONFIG_HEVC_DXVA2_HWACCEL 0
+#define CONFIG_MPEG1_XVMC_HWACCEL 0
+#define CONFIG_MPEG1_VDPAU_HWACCEL 0
+#define CONFIG_MPEG2_XVMC_HWACCEL 0
+#define CONFIG_MPEG2_DXVA2_HWACCEL 0
+#define CONFIG_MPEG2_VAAPI_HWACCEL 0
+#define CONFIG_MPEG2_VDPAU_HWACCEL 0
+#define CONFIG_MPEG4_VAAPI_HWACCEL 0
+#define CONFIG_MPEG4_VDPAU_HWACCEL 0
+#define CONFIG_VC1_DXVA2_HWACCEL 0
+#define CONFIG_VC1_VAAPI_HWACCEL 0
+#define CONFIG_VC1_VDPAU_HWACCEL 0
+#define CONFIG_WMV3_DXVA2_HWACCEL 0
+#define CONFIG_WMV3_VAAPI_HWACCEL 0
+#define CONFIG_WMV3_VDPAU_HWACCEL 0
+#define CONFIG_ALSA_INDEV 0
+#define CONFIG_AVFOUNDATION_INDEV 0
+#define CONFIG_BKTR_INDEV 0
+#define CONFIG_DECKLINK_INDEV 0
+#define CONFIG_DSHOW_INDEV 0
+#define CONFIG_DV1394_INDEV 1
+#define CONFIG_FBDEV_INDEV 1
+#define CONFIG_GDIGRAB_INDEV 0
+#define CONFIG_IEC61883_INDEV 0
+#define CONFIG_JACK_INDEV 0
+#define CONFIG_LAVFI_INDEV 1
+#define CONFIG_OPENAL_INDEV 0
+#define CONFIG_OSS_INDEV 0
+#define CONFIG_PULSE_INDEV 0
+#define CONFIG_QTKIT_INDEV 0
+#define CONFIG_SNDIO_INDEV 0
+#define CONFIG_V4L2_INDEV 1
+#define CONFIG_VFWCAP_INDEV 0
+#define CONFIG_X11GRAB_INDEV 0
+#define CONFIG_X11GRAB_XCB_INDEV 0
+#define CONFIG_LIBCDIO_INDEV 0
+#define CONFIG_LIBDC1394_INDEV 0
+#define CONFIG_A64_MUXER 1
+#define CONFIG_AC3_MUXER 1
+#define CONFIG_ADTS_MUXER 1
+#define CONFIG_ADX_MUXER 1
+#define CONFIG_AIFF_MUXER 1
+#define CONFIG_AMR_MUXER 1
+#define CONFIG_ASF_MUXER 1
+#define CONFIG_ASS_MUXER 1
+#define CONFIG_AST_MUXER 1
+#define CONFIG_ASF_STREAM_MUXER 1
+#define CONFIG_AU_MUXER 1
+#define CONFIG_AVI_MUXER 1
+#define CONFIG_AVM2_MUXER 1
+#define CONFIG_BIT_MUXER 1
+#define CONFIG_CAF_MUXER 1
+#define CONFIG_CAVSVIDEO_MUXER 1
+#define CONFIG_CRC_MUXER 1
+#define CONFIG_DASH_MUXER 1
+#define CONFIG_DATA_MUXER 1
+#define CONFIG_DAUD_MUXER 1
+#define CONFIG_DIRAC_MUXER 1
+#define CONFIG_DNXHD_MUXER 1
+#define CONFIG_DTS_MUXER 1
+#define CONFIG_DV_MUXER 1
+#define CONFIG_EAC3_MUXER 1
+#define CONFIG_F4V_MUXER 1
+#define CONFIG_FFM_MUXER 1
+#define CONFIG_FFMETADATA_MUXER 1
+#define CONFIG_FILMSTRIP_MUXER 1
+#define CONFIG_FLAC_MUXER 1
+#define CONFIG_FLV_MUXER 1
+#define CONFIG_FRAMECRC_MUXER 1
+#define CONFIG_FRAMEMD5_MUXER 1
+#define CONFIG_G722_MUXER 1
+#define CONFIG_G723_1_MUXER 1
+#define CONFIG_GIF_MUXER 1
+#define CONFIG_GXF_MUXER 1
+#define CONFIG_H261_MUXER 1
+#define CONFIG_H263_MUXER 1
+#define CONFIG_H264_MUXER 1
+#define CONFIG_HDS_MUXER 1
+#define CONFIG_HEVC_MUXER 1
+#define CONFIG_HLS_MUXER 1
+#define CONFIG_ICO_MUXER 1
+#define CONFIG_ILBC_MUXER 1
+#define CONFIG_IMAGE2_MUXER 1
+#define CONFIG_IMAGE2PIPE_MUXER 1
+#define CONFIG_IPOD_MUXER 1
+#define CONFIG_IRCAM_MUXER 1
+#define CONFIG_ISMV_MUXER 1
+#define CONFIG_IVF_MUXER 1
+#define CONFIG_JACOSUB_MUXER 1
+#define CONFIG_LATM_MUXER 1
+#define CONFIG_LRC_MUXER 1
+#define CONFIG_M4V_MUXER 1
+#define CONFIG_MD5_MUXER 1
+#define CONFIG_MATROSKA_MUXER 1
+#define CONFIG_MATROSKA_AUDIO_MUXER 1
+#define CONFIG_MICRODVD_MUXER 1
+#define CONFIG_MJPEG_MUXER 1
+#define CONFIG_MLP_MUXER 1
+#define CONFIG_MMF_MUXER 1
+#define CONFIG_MOV_MUXER 1
+#define CONFIG_MP2_MUXER 1
+#define CONFIG_MP3_MUXER 1
+#define CONFIG_MP4_MUXER 1
+#define CONFIG_MPEG1SYSTEM_MUXER 1
+#define CONFIG_MPEG1VCD_MUXER 1
+#define CONFIG_MPEG1VIDEO_MUXER 1
+#define CONFIG_MPEG2DVD_MUXER 1
+#define CONFIG_MPEG2SVCD_MUXER 1
+#define CONFIG_MPEG2VIDEO_MUXER 1
+#define CONFIG_MPEG2VOB_MUXER 1
+#define CONFIG_MPEGTS_MUXER 1
+#define CONFIG_MPJPEG_MUXER 1
+#define CONFIG_MXF_MUXER 1
+#define CONFIG_MXF_D10_MUXER 1
+#define CONFIG_MXF_OPATOM_MUXER 1
+#define CONFIG_NULL_MUXER 1
+#define CONFIG_NUT_MUXER 1
+#define CONFIG_OGA_MUXER 1
+#define CONFIG_OGG_MUXER 1
+#define CONFIG_OMA_MUXER 1
+#define CONFIG_OPUS_MUXER 1
+#define CONFIG_PCM_ALAW_MUXER 1
+#define CONFIG_PCM_MULAW_MUXER 1
+#define CONFIG_PCM_F64BE_MUXER 1
+#define CONFIG_PCM_F64LE_MUXER 1
+#define CONFIG_PCM_F32BE_MUXER 1
+#define CONFIG_PCM_F32LE_MUXER 1
+#define CONFIG_PCM_S32BE_MUXER 1
+#define CONFIG_PCM_S32LE_MUXER 1
+#define CONFIG_PCM_S24BE_MUXER 1
+#define CONFIG_PCM_S24LE_MUXER 1
+#define CONFIG_PCM_S16BE_MUXER 1
+#define CONFIG_PCM_S16LE_MUXER 1
+#define CONFIG_PCM_S8_MUXER 1
+#define CONFIG_PCM_U32BE_MUXER 1
+#define CONFIG_PCM_U32LE_MUXER 1
+#define CONFIG_PCM_U24BE_MUXER 1
+#define CONFIG_PCM_U24LE_MUXER 1
+#define CONFIG_PCM_U16BE_MUXER 1
+#define CONFIG_PCM_U16LE_MUXER 1
+#define CONFIG_PCM_U8_MUXER 1
+#define CONFIG_PSP_MUXER 1
+#define CONFIG_RAWVIDEO_MUXER 1
+#define CONFIG_RM_MUXER 1
+#define CONFIG_ROQ_MUXER 1
+#define CONFIG_RSO_MUXER 1
+#define CONFIG_RTP_MUXER 1
+#define CONFIG_RTP_MPEGTS_MUXER 1
+#define CONFIG_RTSP_MUXER 1
+#define CONFIG_SAP_MUXER 1
+#define CONFIG_SEGMENT_MUXER 1
+#define CONFIG_STREAM_SEGMENT_MUXER 1
+#define CONFIG_SMJPEG_MUXER 1
+#define CONFIG_SMOOTHSTREAMING_MUXER 1
+#define CONFIG_SOX_MUXER 1
+#define CONFIG_SPX_MUXER 1
+#define CONFIG_SPDIF_MUXER 1
+#define CONFIG_SRT_MUXER 1
+#define CONFIG_SWF_MUXER 1
+#define CONFIG_TEE_MUXER 1
+#define CONFIG_TG2_MUXER 1
+#define CONFIG_TGP_MUXER 1
+#define CONFIG_MKVTIMESTAMP_V2_MUXER 1
+#define CONFIG_TRUEHD_MUXER 1
+#define CONFIG_UNCODEDFRAMECRC_MUXER 1
+#define CONFIG_VC1_MUXER 1
+#define CONFIG_VC1T_MUXER 1
+#define CONFIG_VOC_MUXER 1
+#define CONFIG_W64_MUXER 1
+#define CONFIG_WAV_MUXER 1
+#define CONFIG_WEBM_MUXER 1
+#define CONFIG_WEBM_DASH_MANIFEST_MUXER 1
+#define CONFIG_WEBP_MUXER 1
+#define CONFIG_WEBVTT_MUXER 1
+#define CONFIG_WTV_MUXER 1
+#define CONFIG_WV_MUXER 1
+#define CONFIG_YUV4MPEGPIPE_MUXER 1
+#define CONFIG_LIBNUT_MUXER 0
+#define CONFIG_ALSA_OUTDEV 0
+#define CONFIG_CACA_OUTDEV 0
+#define CONFIG_DECKLINK_OUTDEV 0
+#define CONFIG_FBDEV_OUTDEV 1
+#define CONFIG_OPENGL_OUTDEV 0
+#define CONFIG_OSS_OUTDEV 0
+#define CONFIG_PULSE_OUTDEV 0
+#define CONFIG_SDL_OUTDEV 0
+#define CONFIG_SNDIO_OUTDEV 0
+#define CONFIG_V4L2_OUTDEV 1
+#define CONFIG_XV_OUTDEV 0
+#define CONFIG_AAC_PARSER 1
+#define CONFIG_AAC_LATM_PARSER 1
+#define CONFIG_AC3_PARSER 1
+#define CONFIG_ADX_PARSER 1
+#define CONFIG_BMP_PARSER 1
+#define CONFIG_CAVSVIDEO_PARSER 1
+#define CONFIG_COOK_PARSER 1
+#define CONFIG_DCA_PARSER 1
+#define CONFIG_DIRAC_PARSER 1
+#define CONFIG_DNXHD_PARSER 1
+#define CONFIG_DPX_PARSER 1
+#define CONFIG_DVBSUB_PARSER 1
+#define CONFIG_DVDSUB_PARSER 1
+#define CONFIG_DVD_NAV_PARSER 1
+#define CONFIG_FLAC_PARSER 1
+#define CONFIG_GSM_PARSER 1
+#define CONFIG_H261_PARSER 1
+#define CONFIG_H263_PARSER 1
+#define CONFIG_H264_PARSER 1
+#define CONFIG_HEVC_PARSER 1
+#define CONFIG_MJPEG_PARSER 1
+#define CONFIG_MLP_PARSER 1
+#define CONFIG_MPEG4VIDEO_PARSER 1
+#define CONFIG_MPEGAUDIO_PARSER 1
+#define CONFIG_MPEGVIDEO_PARSER 1
+#define CONFIG_OPUS_PARSER 1
+#define CONFIG_PNG_PARSER 1
+#define CONFIG_PNM_PARSER 1
+#define CONFIG_RV30_PARSER 1
+#define CONFIG_RV40_PARSER 1
+#define CONFIG_TAK_PARSER 1
+#define CONFIG_VC1_PARSER 1
+#define CONFIG_VORBIS_PARSER 1
+#define CONFIG_VP3_PARSER 1
+#define CONFIG_VP8_PARSER 1
+#define CONFIG_VP9_PARSER 1
+#define CONFIG_BLURAY_PROTOCOL 0
+#define CONFIG_CACHE_PROTOCOL 1
+#define CONFIG_CONCAT_PROTOCOL 1
+#define CONFIG_CRYPTO_PROTOCOL 1
+#define CONFIG_DATA_PROTOCOL 1
+#define CONFIG_FFRTMPCRYPT_PROTOCOL 0
+#define CONFIG_FFRTMPHTTP_PROTOCOL 1
+#define CONFIG_FILE_PROTOCOL 1
+#define CONFIG_FTP_PROTOCOL 1
+#define CONFIG_GOPHER_PROTOCOL 1
+#define CONFIG_HLS_PROTOCOL 1
+#define CONFIG_HTTP_PROTOCOL 1
+#define CONFIG_HTTPPROXY_PROTOCOL 1
+#define CONFIG_HTTPS_PROTOCOL 0
+#define CONFIG_ICECAST_PROTOCOL 1
+#define CONFIG_MMSH_PROTOCOL 1
+#define CONFIG_MMST_PROTOCOL 1
+#define CONFIG_MD5_PROTOCOL 1
+#define CONFIG_PIPE_PROTOCOL 1
+#define CONFIG_RTMP_PROTOCOL 1
+#define CONFIG_RTMPE_PROTOCOL 0
+#define CONFIG_RTMPS_PROTOCOL 0
+#define CONFIG_RTMPT_PROTOCOL 1
+#define CONFIG_RTMPTE_PROTOCOL 0
+#define CONFIG_RTMPTS_PROTOCOL 0
+#define CONFIG_RTP_PROTOCOL 1
+#define CONFIG_SCTP_PROTOCOL 0
+#define CONFIG_SRTP_PROTOCOL 1
+#define CONFIG_SUBFILE_PROTOCOL 1
+#define CONFIG_TCP_PROTOCOL 1
+#define CONFIG_TLS_PROTOCOL 0
+#define CONFIG_UDP_PROTOCOL 1
+#define CONFIG_UDPLITE_PROTOCOL 1
+#define CONFIG_UNIX_PROTOCOL 1
+#define CONFIG_LIBRTMP_PROTOCOL 0
+#define CONFIG_LIBRTMPE_PROTOCOL 0
+#define CONFIG_LIBRTMPS_PROTOCOL 0
+#define CONFIG_LIBRTMPT_PROTOCOL 0
+#define CONFIG_LIBRTMPTE_PROTOCOL 0
+#define CONFIG_LIBSSH_PROTOCOL 0
+#define CONFIG_LIBSMBCLIENT_PROTOCOL 0
+#endif /* FFMPEG_CONFIG_H */
diff --git a/app/src/main/cpp/dji_video_jni.c b/app/src/main/cpp/dji_video_jni.c
new file mode 100755
index 0000000..d58ccd5
--- /dev/null
+++ b/app/src/main/cpp/dji_video_jni.c
@@ -0,0 +1,223 @@
+#include
+#include
+#include
+#include
+
+#include "libavcodec/avcodec.h"
+#include "libavformat/avformat.h"
+#include "libavfilter/avfilter.h"
+
+// Log
+#ifdef ANDROID
+
+#include
+#include
+
+#define LOGE(format, ...) __android_log_print(ANDROID_LOG_ERROR, "DJI", format, ##__VA_ARGS__)
+#define LOGD(format, ...) __android_log_print(ANDROID_LOG_DEBUG, "DJI", format, ##__VA_ARGS__)
+#else
+#define LOGE(format, ...) printf("DJI" format "\n", ##__VA_ARGS__)
+#define LOGD(format, ...) printf("DJI" format "\n", ##__VA_ARGS__)
+#endif
+
+int isFFmpegInitialized;
+
+AVFrame *m_pYUVFrame;
+AVCodecContext *m_pCodecCtx;
+AVCodec *m_pAVCodec;
+AVCodecParserContext *m_pCodecPaser;
+
+jmethodID dataCallbackMID;
+
+//FIX
+struct URLProtocol;
+
+/**
+ * Codec information
+ */
+JNIEXPORT jstring
+Java_io_diux_rogue_rosettadrone_video_NativeHelper_codecinfotest(JNIEnv *env, jobject obj) {
+ char info[40000] = {0};
+
+ av_register_all();
+
+ AVCodec *codec_head = av_codec_next(NULL);
+
+ while (codec_head != NULL) {
+
+ sprintf(info, "%s\n", codec_head->name);
+ codec_head = codec_head->next;
+ }
+ LOGE("%s", info);
+
+ return (*env)->NewStringUTF(env, info);
+}
+
+/**
+ * Invoke the java callback method
+ */
+void invokeFrameDataCallback(JNIEnv *env, jobject obj, uint8_t *buf, int size, int frameNum,
+ int isKeyFrame, int width, int height) {
+ jbyte *buff = (jbyte *) buf;
+ jbyteArray jarray = (*env)->NewByteArray(env, size);
+ (*env)->SetByteArrayRegion(env, jarray, 0, size, buf);
+ (*env)->CallVoidMethod(env, obj, dataCallbackMID, jarray, size, frameNum, isKeyFrame != 0,
+ width, height);
+}
+
+/**
+ * Initialize the ffmpeg and software decoder.
+ */
+JNIEXPORT jboolean
+Java_io_diux_rogue_rosettadrone_video_NativeHelper_init(JNIEnv *env, jobject obj) {
+ jclass clazz = (*env)->GetObjectClass(env, obj);
+ dataCallbackMID = (*env)->GetMethodID(env, clazz, "onFrameDataRecv", "([BIIZII)V");
+ if (isFFmpegInitialized == 0) {
+ avcodec_register_all();
+ av_register_all();
+ isFFmpegInitialized = 1;
+ }
+ m_pAVCodec = avcodec_find_decoder(AV_CODEC_ID_H264);
+ m_pCodecCtx = avcodec_alloc_context3(m_pAVCodec);
+ m_pCodecPaser = av_parser_init(AV_CODEC_ID_H264);
+ if (m_pAVCodec == NULL || m_pCodecCtx == NULL) {
+ LOGD("m_pAVCodec == NULL||m_pCodecCtx == NULL");
+ return 0;
+ }
+
+ if (m_pAVCodec->capabilities & CODEC_CAP_TRUNCATED)
+ m_pCodecCtx->flags |= CODEC_FLAG_TRUNCATED;
+
+ m_pCodecCtx->thread_count = 4;
+ m_pCodecCtx->thread_type = FF_THREAD_FRAME;
+
+ if (avcodec_open2(m_pCodecCtx, m_pAVCodec, NULL) < 0) {
+ m_pAVCodec = NULL;
+ return 0;
+ }
+
+ m_pYUVFrame = av_frame_alloc();
+
+ if (m_pYUVFrame == NULL) {
+ LOGD(" CDecoder avcodec_alloc_frame() == NULL ");
+ return 0;
+ }
+ LOGD("CDecoder::prepare()2");
+ return 1;
+}
+
+/**
+ * Framing the raw data from camera using the av parser.
+ */
+int parse(JNIEnv *env, jobject obj, uint8_t *pBuff, int videosize, uint64_t pts) {
+ int paserLength_In = videosize;
+ int paserLen;
+ int decode_data_length;
+ int got_picture = 0;
+ uint8_t *pFrameBuff = (uint8_t *) pBuff;
+ while (paserLength_In > 0) {
+ AVPacket packet;
+ av_init_packet(&packet);
+ if (m_pCodecPaser == NULL) {
+ LOGE("m_pCodecPaser == NULL");
+ Java_io_diux_rogue_rosettadrone_video_NativeHelper_init(env, obj);
+ }
+ if (m_pCodecCtx == NULL) {
+ LOGE("m_pCodecCtx == NULL");
+ Java_io_diux_rogue_rosettadrone_video_NativeHelper_init(env, obj);
+ }
+ paserLen = av_parser_parse2(m_pCodecPaser, m_pCodecCtx, &packet.data, &packet.size,
+ pFrameBuff,
+ paserLength_In, AV_NOPTS_VALUE, AV_NOPTS_VALUE, AV_NOPTS_VALUE);
+
+ //LOGD("paserLen = %d",paserLen);
+ paserLength_In -= paserLen;
+ pFrameBuff += paserLen;
+
+ if (packet.size > 0) {
+
+ // LOGD(
+ // "packet size=%d, pts=%lld, width_in_pixel=%d, height_in_pixel=%d, key_frame=%d, frame_has_sps=%d, frame_has_pps=%d, frame_num=%d",
+ // packet.size,
+ // pts,
+ // m_pCodecPaser->width_in_pixel,
+ // m_pCodecPaser->height_in_pixel,
+ // m_pCodecPaser->key_frame,
+ // m_pCodecPaser->frame_has_sps,
+ // m_pCodecPaser->frame_has_pps,
+ // m_pCodecPaser->frame_num
+ // );
+ invokeFrameDataCallback(
+ env,
+ obj,
+ packet.data,
+ packet.size,
+ m_pCodecPaser->frame_num,
+ m_pCodecPaser->key_frame,
+ m_pCodecPaser->width_in_pixel,
+ m_pCodecPaser->height_in_pixel
+ );
+
+ }
+ av_free_packet(&packet);
+ }
+
+ return 0;
+}
+
+uint8_t audbuffer2[] = {0x00, 0x00, 0x00, 0x01, 0x09, 0x10};
+uint8_t audsize2 = 6;
+uint8_t fillerbuffer2[] = {0x00, 0x00, 0x00, 0x01, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x09, 0x10};
+uint8_t fillersize2 = 11;
+uint8_t audaudbuffer2[] = {0x00, 0x00, 0x00, 0x01, 0x09, 0x10, 0x00, 0x00, 0x00, 0x01, 0x09, 0x10};
+uint8_t audaudsize2 = 12;
+/**
+ * Framing the raw data from camera.
+ */
+JNIEXPORT jboolean
+Java_io_diux_rogue_rosettadrone_video_NativeHelper_parse(JNIEnv *env, jobject obj, jbyteArray pBuff,
+ int size) {
+ jbyte *jBuff = (jbyte *) ((*env)->GetByteArrayElements(env, pBuff, 0));
+ uint8_t *buff = (uint8_t *) jBuff;
+ uint64_t pts = 0;
+ jbyte *jBuff2;
+
+ // LOGD("pts=%llu", pts);
+
+ // Removing the aud bytes.
+ if (size >= fillersize2 && memcmp(fillerbuffer2, buff + size - fillersize2, fillersize2) == 0) {
+ LOGD("Remove filler+AUD");
+ parse(env, obj, buff, size - fillersize2, pts);
+ } else if (size >= audaudsize2 &&
+ memcmp(audaudbuffer2, buff + size - audaudsize2, audaudsize2) == 0) {
+ LOGD("Remove AUD+AUD");
+ parse(env, obj, buff, size - audaudsize2, pts);
+ } else if (size >= audsize2 && memcmp(audbuffer2, buff + size - audsize2, audsize2) == 0) {
+ LOGD("Remove AUD");
+ parse(env, obj, buff, size - audsize2, pts);
+ } else {
+ // LOGD("Remove Nothing");
+ parse(env, obj, buff, size, pts);
+ }
+ (*env)->ReleaseByteArrayElements(env, pBuff, jBuff, 0);
+
+ return 1;
+}
+
+
+/**
+ * Release the ffmpeg.
+ */
+JNIEXPORT jboolean
+Java_io_diux_rogue_rosettadrone_video_NativeHelper_release(JNIEnv *env, jobject obj) {
+ if (m_pCodecCtx) {
+ avcodec_close(m_pCodecCtx);
+ m_pCodecCtx = NULL;
+ }
+
+ av_free(m_pYUVFrame);
+ av_free(m_pCodecCtx);
+ av_parser_close(m_pCodecPaser);
+
+ return 1;
+}
\ No newline at end of file
diff --git a/app/src/main/cpp/ffmpeg.h b/app/src/main/cpp/ffmpeg.h
new file mode 100644
index 0000000..e9f177a
--- /dev/null
+++ b/app/src/main/cpp/ffmpeg.h
@@ -0,0 +1,557 @@
+/*
+ * 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 FFMPEG_H
+#define FFMPEG_H
+
+#include "config.h"
+
+#include
+#include
+#include
+
+#if HAVE_PTHREADS
+
+#include
+
+#endif
+
+#include "cmdutils.h"
+
+#include "libavformat/avformat.h"
+#include "libavformat/avio.h"
+
+#include "libavcodec/avcodec.h"
+
+#include "libavfilter/avfilter.h"
+
+#include "libavutil/avutil.h"
+#include "libavutil/dict.h"
+#include "libavutil/eval.h"
+#include "libavutil/fifo.h"
+#include "libavutil/pixfmt.h"
+#include "libavutil/rational.h"
+#include "libavutil/threadmessage.h"
+
+#include "libswresample/swresample.h"
+
+#define VSYNC_AUTO -1
+#define VSYNC_PASSTHROUGH 0
+#define VSYNC_CFR 1
+#define VSYNC_VFR 2
+#define VSYNC_VSCFR 0xfe
+#define VSYNC_DROP 0xff
+
+#define MAX_STREAMS 1024 /* arbitrary sanity check value */
+
+enum HWAccelID {
+ HWACCEL_NONE = 0,
+ HWACCEL_AUTO,
+ HWACCEL_VDPAU,
+ HWACCEL_DXVA2,
+ HWACCEL_VDA,
+};
+
+typedef struct HWAccel {
+ const char *name;
+
+ int (*init)(AVCodecContext *s);
+
+ enum HWAccelID id;
+ enum AVPixelFormat pix_fmt;
+} HWAccel;
+
+/* select an input stream for an output stream */
+typedef struct StreamMap {
+ int disabled; /* 1 is this mapping is disabled by a negative map */
+ int file_index;
+ int stream_index;
+ int sync_file_index;
+ int sync_stream_index;
+ char *linklabel; /* name of an output link, for mapping lavfi outputs */
+} StreamMap;
+
+typedef struct {
+ int file_idx, stream_idx, channel_idx; // input
+ int ofile_idx, ostream_idx; // output
+} AudioChannelMap;
+
+typedef struct OptionsContext {
+ OptionGroup *g;
+
+ /* input/output options */
+ int64_t start_time;
+ const char *format;
+
+ SpecifierOpt *codec_names;
+ int nb_codec_names;
+ SpecifierOpt *audio_channels;
+ int nb_audio_channels;
+ SpecifierOpt *audio_sample_rate;
+ int nb_audio_sample_rate;
+ SpecifierOpt *frame_rates;
+ int nb_frame_rates;
+ SpecifierOpt *frame_sizes;
+ int nb_frame_sizes;
+ SpecifierOpt *frame_pix_fmts;
+ int nb_frame_pix_fmts;
+
+ /* input options */
+ int64_t input_ts_offset;
+ int rate_emu;
+ int accurate_seek;
+ int thread_queue_size;
+
+ SpecifierOpt *ts_scale;
+ int nb_ts_scale;
+ SpecifierOpt *dump_attachment;
+ int nb_dump_attachment;
+ SpecifierOpt *hwaccels;
+ int nb_hwaccels;
+ SpecifierOpt *hwaccel_devices;
+ int nb_hwaccel_devices;
+
+ /* output options */
+ StreamMap *stream_maps;
+ int nb_stream_maps;
+ AudioChannelMap *audio_channel_maps; /* one info entry per -map_channel */
+ int nb_audio_channel_maps; /* number of (valid) -map_channel settings */
+ int metadata_global_manual;
+ int metadata_streams_manual;
+ int metadata_chapters_manual;
+ const char **attachments;
+ int nb_attachments;
+
+ int chapters_input_file;
+
+ int64_t recording_time;
+ int64_t stop_time;
+ uint64_t limit_filesize;
+ float mux_preload;
+ float mux_max_delay;
+ int shortest;
+
+ int video_disable;
+ int audio_disable;
+ int subtitle_disable;
+ int data_disable;
+
+ /* indexed by output file stream index */
+ int *streamid_map;
+ int nb_streamid_map;
+
+ SpecifierOpt *metadata;
+ int nb_metadata;
+ SpecifierOpt *max_frames;
+ int nb_max_frames;
+ SpecifierOpt *bitstream_filters;
+ int nb_bitstream_filters;
+ SpecifierOpt *codec_tags;
+ int nb_codec_tags;
+ SpecifierOpt *sample_fmts;
+ int nb_sample_fmts;
+ SpecifierOpt *qscale;
+ int nb_qscale;
+ SpecifierOpt *forced_key_frames;
+ int nb_forced_key_frames;
+ SpecifierOpt *force_fps;
+ int nb_force_fps;
+ SpecifierOpt *frame_aspect_ratios;
+ int nb_frame_aspect_ratios;
+ SpecifierOpt *rc_overrides;
+ int nb_rc_overrides;
+ SpecifierOpt *intra_matrices;
+ int nb_intra_matrices;
+ SpecifierOpt *inter_matrices;
+ int nb_inter_matrices;
+ SpecifierOpt *chroma_intra_matrices;
+ int nb_chroma_intra_matrices;
+ SpecifierOpt *top_field_first;
+ int nb_top_field_first;
+ SpecifierOpt *metadata_map;
+ int nb_metadata_map;
+ SpecifierOpt *presets;
+ int nb_presets;
+ SpecifierOpt *copy_initial_nonkeyframes;
+ int nb_copy_initial_nonkeyframes;
+ SpecifierOpt *copy_prior_start;
+ int nb_copy_prior_start;
+ SpecifierOpt *filters;
+ int nb_filters;
+ SpecifierOpt *filter_scripts;
+ int nb_filter_scripts;
+ SpecifierOpt *reinit_filters;
+ int nb_reinit_filters;
+ SpecifierOpt *fix_sub_duration;
+ int nb_fix_sub_duration;
+ SpecifierOpt *canvas_sizes;
+ int nb_canvas_sizes;
+ SpecifierOpt *pass;
+ int nb_pass;
+ SpecifierOpt *passlogfiles;
+ int nb_passlogfiles;
+ SpecifierOpt *guess_layout_max;
+ int nb_guess_layout_max;
+ SpecifierOpt *apad;
+ int nb_apad;
+ SpecifierOpt *discard;
+ int nb_discard;
+ SpecifierOpt *disposition;
+ int nb_disposition;
+} OptionsContext;
+
+typedef struct InputFilter {
+ AVFilterContext *filter;
+ struct InputStream *ist;
+ struct FilterGraph *graph;
+ uint8_t *name;
+} InputFilter;
+
+typedef struct OutputFilter {
+ AVFilterContext *filter;
+ struct OutputStream *ost;
+ struct FilterGraph *graph;
+ uint8_t *name;
+
+ /* temporary storage until stream maps are processed */
+ AVFilterInOut *out_tmp;
+} OutputFilter;
+
+typedef struct FilterGraph {
+ int index;
+ const char *graph_desc;
+
+ AVFilterGraph *graph;
+ int reconfiguration;
+
+ InputFilter **inputs;
+ int nb_inputs;
+ OutputFilter **outputs;
+ int nb_outputs;
+} FilterGraph;
+
+typedef struct InputStream {
+ int file_index;
+ AVStream *st;
+ int discard; /* true if stream data should be discarded */
+ int user_set_discard;
+ int decoding_needed; /* non zero if the packets must be decoded in 'raw_fifo', see DECODING_FOR_* */
+#define DECODING_FOR_OST 1
+#define DECODING_FOR_FILTER 2
+
+ AVCodecContext *dec_ctx;
+ AVCodec *dec;
+ AVFrame *decoded_frame;
+ AVFrame *filter_frame; /* a ref of decoded_frame, to be sent to filters */
+
+ int64_t start; /* time when read started */
+ /* predicted dts of the next packet read for this stream or (when there are
+ * several frames in a packet) of the next frame in current packet (in AV_TIME_BASE units) */
+ int64_t next_dts;
+ int64_t dts; ///< dts of the last packet read for this stream (in AV_TIME_BASE units)
+
+ int64_t next_pts; ///< synthetic pts for the next decode frame (in AV_TIME_BASE units)
+ int64_t pts; ///< current pts of the decoded frame (in AV_TIME_BASE units)
+ int wrap_correction_done;
+
+ int64_t filter_in_rescale_delta_last;
+
+ double ts_scale;
+ int saw_first_ts;
+ int showed_multi_packet_warning;
+ AVDictionary *decoder_opts;
+ AVRational framerate; /* framerate forced with -r */
+ int top_field_first;
+ int guess_layout_max;
+
+ int resample_height;
+ int resample_width;
+ int resample_pix_fmt;
+
+ int resample_sample_fmt;
+ int resample_sample_rate;
+ int resample_channels;
+ uint64_t resample_channel_layout;
+
+ int fix_sub_duration;
+ struct { /* previous decoded subtitle and related variables */
+ int got_output;
+ int ret;
+ AVSubtitle subtitle;
+ } prev_sub;
+
+ struct sub2video {
+ int64_t last_pts;
+ int64_t end_pts;
+ AVFrame *frame;
+ int w, h;
+ } sub2video;
+
+ int dr1;
+
+ /* decoded data from this stream goes into all those filters
+ * currently video and audio only */
+ InputFilter **filters;
+ int nb_filters;
+
+ int reinit_filters;
+
+ /* hwaccel options */
+ enum HWAccelID hwaccel_id;
+ char *hwaccel_device;
+
+ /* hwaccel context */
+ enum HWAccelID active_hwaccel_id;
+ void *hwaccel_ctx;
+
+ void (*hwaccel_uninit)(AVCodecContext *s);
+
+ int (*hwaccel_get_buffer)(AVCodecContext *s, AVFrame *frame, int flags);
+
+ int (*hwaccel_retrieve_data)(AVCodecContext *s, AVFrame *frame);
+
+ enum AVPixelFormat hwaccel_pix_fmt;
+ enum AVPixelFormat hwaccel_retrieved_pix_fmt;
+
+ /* stats */
+ // combined size of all the packets read
+ uint64_t data_size;
+ /* number of packets successfully read for this stream */
+ uint64_t nb_packets;
+ // number of frames/samples retrieved from the decoder
+ uint64_t frames_decoded;
+ uint64_t samples_decoded;
+} InputStream;
+
+typedef struct InputFile {
+ AVFormatContext *ctx;
+ int eof_reached; /* true if eof reached */
+ int eagain; /* true if last read attempt returned EAGAIN */
+ int ist_index; /* index of first stream in input_streams */
+ int64_t input_ts_offset;
+ int64_t ts_offset;
+ int64_t last_ts;
+ int64_t start_time; /* user-specified start time in AV_TIME_BASE or AV_NOPTS_VALUE */
+ int64_t recording_time;
+ int nb_streams; /* number of stream that ffmpeg is aware of; may be different
+ from ctx.nb_streams if new streams appear during av_read_frame() */
+ int nb_streams_warn; /* number of streams that the user was warned of */
+ int rate_emu;
+ int accurate_seek;
+
+#if HAVE_PTHREADS
+ AVThreadMessageQueue *in_thread_queue;
+ pthread_t thread; /* thread reading from this file */
+ int non_blocking; /* reading packets from the thread should not block */
+ int joined; /* the thread has been joined */
+ int thread_queue_size; /* maximum number of queued packets */
+#endif
+} InputFile;
+
+enum forced_keyframes_const {
+ FKF_N,
+ FKF_N_FORCED,
+ FKF_PREV_FORCED_N,
+ FKF_PREV_FORCED_T,
+ FKF_T,
+ FKF_NB
+};
+
+extern const char *const forced_keyframes_const_names[];
+
+typedef enum {
+ ENCODER_FINISHED = 1,
+ MUXER_FINISHED = 2,
+} OSTFinished;
+
+typedef struct OutputStream {
+ int file_index; /* file index */
+ int index; /* stream index in the output file */
+ int source_index; /* InputStream index */
+ AVStream *st; /* stream in the output file */
+ int encoding_needed; /* true if encoding needed for this stream */
+ int frame_number;
+ /* input pts and corresponding output pts
+ for A/V sync */
+ struct InputStream *sync_ist; /* input stream to sync against */
+ int64_t sync_opts; /* output frame counter, could be changed to some true timestamp */ // FIXME look at frame_number
+ /* pts of the first frame encoded for this stream, used for limiting
+ * recording time */
+ int64_t first_pts;
+ /* dts of the last packet sent to the muxer */
+ int64_t last_mux_dts;
+ AVBitStreamFilterContext *bitstream_filters;
+ AVCodecContext *enc_ctx;
+ AVCodec *enc;
+ int64_t max_frames;
+ AVFrame *filtered_frame;
+ AVFrame *last_frame;
+ int last_droped;
+
+ /* video only */
+ AVRational frame_rate;
+ int force_fps;
+ int top_field_first;
+
+ AVRational frame_aspect_ratio;
+
+ /* forced key frames */
+ int64_t *forced_kf_pts;
+ int forced_kf_count;
+ int forced_kf_index;
+ char *forced_keyframes;
+ AVExpr *forced_keyframes_pexpr;
+ double forced_keyframes_expr_const_values[FKF_NB];
+
+ /* audio only */
+ int *audio_channels_map; /* list of the channels id to pick from the source stream */
+ int audio_channels_mapped; /* number of channels in audio_channels_map */
+
+ char *logfile_prefix;
+ FILE *logfile;
+
+ OutputFilter *filter;
+ char *avfilter;
+ char *filters; ///< filtergraph associated to the -filter option
+ char *filters_script; ///< filtergraph script associated to the -filter_script option
+
+ int64_t sws_flags;
+ AVDictionary *encoder_opts;
+ AVDictionary *swr_opts;
+ AVDictionary *resample_opts;
+ AVDictionary *bsf_args;
+ char *apad;
+ OSTFinished finished; /* no more packets should be written for this stream */
+ int unavailable; /* true if the steram is unavailable (possibly temporarily) */
+ int stream_copy;
+ const char *attachment_filename;
+ int copy_initial_nonkeyframes;
+ int copy_prior_start;
+ char *disposition;
+
+ int keep_pix_fmt;
+
+ AVCodecParserContext *parser;
+
+ /* stats */
+ // combined size of all the packets written
+ uint64_t data_size;
+ // number of packets send to the muxer
+ uint64_t packets_written;
+ // number of frames/samples sent to the encoder
+ uint64_t frames_encoded;
+ uint64_t samples_encoded;
+} OutputStream;
+
+typedef struct OutputFile {
+ AVFormatContext *ctx;
+ AVDictionary *opts;
+ int ost_index; /* index of the first stream in output_streams */
+ int64_t recording_time; ///< desired length of the resulting file in microseconds == AV_TIME_BASE units
+ int64_t start_time; ///< start time in microseconds == AV_TIME_BASE units
+ uint64_t limit_filesize; /* filesize limit expressed in bytes */
+
+ int shortest;
+} OutputFile;
+
+extern InputStream **input_streams;
+extern int nb_input_streams;
+extern InputFile **input_files;
+extern int nb_input_files;
+
+extern OutputStream **output_streams;
+extern int nb_output_streams;
+extern OutputFile **output_files;
+extern int nb_output_files;
+
+extern FilterGraph **filtergraphs;
+extern int nb_filtergraphs;
+
+extern char *vstats_filename;
+extern char *sdp_filename;
+
+extern float audio_drift_threshold;
+extern float dts_delta_threshold;
+extern float dts_error_threshold;
+
+extern int audio_volume;
+extern int audio_sync_method;
+extern int video_sync_method;
+extern float frame_drop_threshold;
+extern int do_benchmark;
+extern int do_benchmark_all;
+extern int do_deinterlace;
+extern int do_hex_dump;
+extern int do_pkt_dump;
+extern int copy_ts;
+extern int start_at_zero;
+extern int copy_tb;
+extern int debug_ts;
+extern int exit_on_error;
+extern int print_stats;
+extern int qp_hist;
+extern int stdin_interaction;
+extern int frame_bits_per_raw_sample;
+extern AVIOContext *progress_avio;
+extern float max_error_rate;
+extern int vdpau_api_ver;
+
+extern const AVIOInterruptCB int_cb;
+
+extern const OptionDef options[];
+extern const HWAccel hwaccels[];
+
+
+void term_init(void);
+
+void term_exit(void);
+
+void reset_options(OptionsContext *o, int is_input);
+
+void show_usage(void);
+
+void opt_output_file(void *optctx, const char *filename);
+
+void remove_avoptions(AVDictionary **a, AVDictionary *b);
+
+void assert_avoptions(AVDictionary *m);
+
+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_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOut *out);
+
+int ist_in_filtergraph(FilterGraph *fg, InputStream *ist);
+
+FilterGraph *init_simple_filtergraph(InputStream *ist, OutputStream *ost);
+
+int ffmpeg_parse_options(int argc, char **argv);
+
+int vdpau_init(AVCodecContext *s);
+
+int dxva2_init(AVCodecContext *s);
+
+int vda_init(AVCodecContext *s);
+
+#endif /* FFMPEG_H */
diff --git a/app/src/main/cpp/include/ass/ass.h b/app/src/main/cpp/include/ass/ass.h
new file mode 100644
index 0000000..5ef3c05
--- /dev/null
+++ b/app/src/main/cpp/include/ass/ass.h
@@ -0,0 +1,404 @@
+/*
+ * Copyright (C) 2006 Evgeniy Stepanov
+ *
+ * This file is part of libass.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef LIBASS_ASS_H
+#define LIBASS_ASS_H
+
+#include
+#include
+#include "ass_types.h"
+
+#define LIBASS_VERSION 0x01000000
+
+/*
+ * A linked list of images produced by an ass renderer.
+ *
+ * These images have to be rendered in-order for the correct screen
+ * composition. The libass renderer clips these bitmaps to the frame size.
+ * w/h can be zero, in this case the bitmap should not be rendered at all.
+ * The last bitmap row is not guaranteed to be padded up to stride size,
+ * e.g. in the worst case a bitmap has the size stride * (h - 1) + w.
+ */
+typedef struct ass_image {
+ int w, h; // Bitmap width/height
+ int stride; // Bitmap stride
+ unsigned char *bitmap; // 1bpp stride*h alpha buffer
+ // Note: the last row may not be padded to
+ // bitmap stride!
+ uint32_t color; // Bitmap color and alpha, RGBA
+ int dst_x, dst_y; // Bitmap placement inside the video frame
+
+ struct ass_image *next; // Next image, or NULL
+} ASS_Image;
+
+/*
+ * Hinting type. (see ass_set_hinting below)
+ *
+ * FreeType's native hinter is still buggy sometimes and it is recommended
+ * to use the light autohinter, ASS_HINTING_LIGHT, instead. For best
+ * compatibility with problematic fonts, disable hinting.
+ */
+typedef enum {
+ ASS_HINTING_NONE = 0,
+ ASS_HINTING_LIGHT,
+ ASS_HINTING_NORMAL,
+ ASS_HINTING_NATIVE
+} ASS_Hinting;
+
+/**
+ * \brief Text shaping levels.
+ *
+ * SIMPLE is a fast, font-agnostic shaper that can do only substitutions.
+ * COMPLEX is a slower shaper using OpenType for substitutions and positioning.
+ *
+ * libass uses the best shaper available by default.
+ */
+typedef enum {
+ ASS_SHAPING_SIMPLE = 0,
+ ASS_SHAPING_COMPLEX
+} ASS_ShapingLevel;
+
+/**
+ * \brief Initialize the library.
+ * \return library handle or NULL if failed
+ */
+ASS_Library *ass_library_init(void);
+
+/**
+ * \brief Finalize the library
+ * \param priv library handle
+ */
+void ass_library_done(ASS_Library *priv);
+
+/**
+ * \brief Set additional fonts directory.
+ * Optional directory that will be scanned for fonts recursively. The fonts
+ * found are used for font lookup.
+ * NOTE: A valid font directory is not needed to support embedded fonts.
+ *
+ * \param priv library handle
+ * \param fonts_dir directory with additional fonts
+ */
+void ass_set_fonts_dir(ASS_Library *priv, const char *fonts_dir);
+
+/**
+ * \brief Whether fonts should be extracted from track data.
+ * \param priv library handle
+ * \param extract whether to extract fonts
+ */
+void ass_set_extract_fonts(ASS_Library *priv, int extract);
+
+/**
+ * \brief Register style overrides with a library instance.
+ * The overrides should have the form [Style.]Param=Value, e.g.
+ * SomeStyle.Font=Arial
+ * ScaledBorderAndShadow=yes
+ *
+ * \param priv library handle
+ * \param list NULL-terminated list of strings
+ */
+void ass_set_style_overrides(ASS_Library *priv, char **list);
+
+/**
+ * \brief Explicitly process style overrides for a track.
+ * \param track track handle
+ */
+void ass_process_force_style(ASS_Track *track);
+
+/**
+ * \brief Register a callback for debug/info messages.
+ * If a callback is registered, it is called for every message emitted by
+ * libass. The callback receives a format string and a list of arguments,
+ * to be used for the printf family of functions. Additionally, a log level
+ * from 0 (FATAL errors) to 7 (verbose DEBUG) is passed. Usually, level 5
+ * should be used by applications.
+ * If no callback is set, all messages level < 5 are printed to stderr,
+ * prefixed with [ass].
+ *
+ * \param priv library handle
+ * \param msg_cb pointer to callback function
+ * \param data additional data, will be passed to callback
+ */
+void ass_set_message_cb(ASS_Library *priv, void (*msg_cb)
+ (int level, const char *fmt, va_list args, void *data),
+ void *data);
+
+/**
+ * \brief Initialize the renderer.
+ * \param priv library handle
+ * \return renderer handle or NULL if failed
+ */
+ASS_Renderer *ass_renderer_init(ASS_Library *);
+
+/**
+ * \brief Finalize the renderer.
+ * \param priv renderer handle
+ */
+void ass_renderer_done(ASS_Renderer *priv);
+
+/**
+ * \brief Set the frame size in pixels, including margins.
+ * \param priv renderer handle
+ * \param w width
+ * \param h height
+ */
+void ass_set_frame_size(ASS_Renderer *priv, int w, int h);
+
+/**
+ * \brief Set shaping level. This is merely a hint, the renderer will use
+ * whatever is available if the request cannot be fulfilled.
+ * \param level shaping level
+ */
+void ass_set_shaper(ASS_Renderer *priv, ASS_ShapingLevel level);
+
+/**
+ * \brief Set frame margins. These values may be negative if pan-and-scan
+ * is used.
+ * \param priv renderer handle
+ * \param t top margin
+ * \param b bottom margin
+ * \param l left margin
+ * \param r right margin
+ */
+void ass_set_margins(ASS_Renderer *priv, int t, int b, int l, int r);
+
+/**
+ * \brief Whether margins should be used for placing regular events.
+ * \param priv renderer handle
+ * \param use whether to use the margins
+ */
+void ass_set_use_margins(ASS_Renderer *priv, int use);
+
+/**
+ * \brief Set aspect ratio parameters.
+ * \param priv renderer handle
+ * \param dar display aspect ratio (DAR), prescaled for output PAR
+ * \param sar storage aspect ratio (SAR)
+ */
+void ass_set_aspect_ratio(ASS_Renderer *priv, double dar, double sar);
+
+/**
+ * \brief Set a fixed font scaling factor.
+ * \param priv renderer handle
+ * \param font_scale scaling factor, default is 1.0
+ */
+void ass_set_font_scale(ASS_Renderer *priv, double font_scale);
+
+/**
+ * \brief Set font hinting method.
+ * \param priv renderer handle
+ * \param ht hinting method
+ */
+void ass_set_hinting(ASS_Renderer *priv, ASS_Hinting ht);
+
+/**
+ * \brief Set line spacing. Will not be scaled with frame size.
+ * \param priv renderer handle
+ * \param line_spacing line spacing in pixels
+ */
+void ass_set_line_spacing(ASS_Renderer *priv, double line_spacing);
+
+/**
+ * \brief Set font lookup defaults.
+ * \param default_font path to default font to use. Must be supplied if
+ * fontconfig is disabled or unavailable.
+ * \param default_family fallback font family for fontconfig, or NULL
+ * \param fc whether to use fontconfig
+ * \param config path to fontconfig configuration file, or NULL. Only relevant
+ * if fontconfig is used.
+ * \param update whether fontconfig cache should be built/updated now. Only
+ * relevant if fontconfig is used.
+ *
+ * NOTE: font lookup must be configured before an ASS_Renderer can be used.
+ */
+void ass_set_fonts(ASS_Renderer *priv, const char *default_font,
+ const char *default_family, int fc, const char *config,
+ int update);
+
+/**
+ * \brief Update/build font cache. This needs to be called if it was
+ * disabled when ass_set_fonts was set.
+ *
+ * \param priv renderer handle
+ * \return success
+ */
+int ass_fonts_update(ASS_Renderer *priv);
+
+/**
+ * \brief Set hard cache limits. Do not set, or set to zero, for reasonable
+ * defaults.
+ *
+ * \param priv renderer handle
+ * \param glyph_max maximum number of cached glyphs
+ * \param bitmap_max_size maximum bitmap cache size (in MB)
+ */
+void ass_set_cache_limits(ASS_Renderer *priv, int glyph_max,
+ int bitmap_max_size);
+
+/**
+ * \brief Render a frame, producing a list of ASS_Image.
+ * \param priv renderer handle
+ * \param track subtitle track
+ * \param now video timestamp in milliseconds
+ * \param detect_change will be set to 1 if a change occured compared
+ * to the last invocation
+ */
+ASS_Image *ass_render_frame(ASS_Renderer *priv, ASS_Track *track,
+ long long now, int *detect_change);
+
+
+/*
+ * The following functions operate on track objects and do not need
+ * an ass_renderer
+ */
+
+/**
+ * \brief Allocate a new empty track object.
+ * \param library handle
+ * \return pointer to empty track
+ */
+ASS_Track *ass_new_track(ASS_Library *);
+
+/**
+ * \brief Deallocate track and all its child objects (styles and events).
+ * \param track track to deallocate
+ */
+void ass_free_track(ASS_Track *track);
+
+/**
+ * \brief Allocate new style.
+ * \param track track
+ * \return newly allocated style id
+ */
+int ass_alloc_style(ASS_Track *track);
+
+/**
+ * \brief Allocate new event.
+ * \param track track
+ * \return newly allocated event id
+ */
+int ass_alloc_event(ASS_Track *track);
+
+/**
+ * \brief Delete a style.
+ * \param track track
+ * \param sid style id
+ * Deallocates style data. Does not modify track->n_styles.
+ */
+void ass_free_style(ASS_Track *track, int sid);
+
+/**
+ * \brief Delete an event.
+ * \param track track
+ * \param eid event id
+ * Deallocates event data. Does not modify track->n_events.
+ */
+void ass_free_event(ASS_Track *track, int eid);
+
+/**
+ * \brief Parse a chunk of subtitle stream data.
+ * \param track track
+ * \param data string to parse
+ * \param size length of data
+ */
+void ass_process_data(ASS_Track *track, char *data, int size);
+
+/**
+ * \brief Parse Codec Private section of the subtitle stream, in Matroska
+ * format. See the Matroska specification for details.
+ * \param track target track
+ * \param data string to parse
+ * \param size length of data
+ */
+void ass_process_codec_private(ASS_Track *track, char *data, int size);
+
+/**
+ * \brief Parse a chunk of subtitle stream data. A chunk contains exactly one
+ * event in Matroska format. See the Matroska specification for details.
+ * \param track track
+ * \param data string to parse
+ * \param size length of data
+ * \param timecode starting time of the event (milliseconds)
+ * \param duration duration of the event (milliseconds)
+ */
+void ass_process_chunk(ASS_Track *track, char *data, int size,
+ long long timecode, long long duration);
+
+/**
+ * \brief Flush buffered events.
+ * \param track track
+*/
+void ass_flush_events(ASS_Track *track);
+
+/**
+ * \brief Read subtitles from file.
+ * \param library library handle
+ * \param fname file name
+ * \param codepage encoding (iconv format)
+ * \return newly allocated track
+*/
+ASS_Track *ass_read_file(ASS_Library *library, char *fname,
+ char *codepage);
+
+/**
+ * \brief Read subtitles from memory.
+ * \param library library handle
+ * \param buf pointer to subtitles text
+ * \param bufsize size of buffer
+ * \param codepage encoding (iconv format)
+ * \return newly allocated track
+*/
+ASS_Track *ass_read_memory(ASS_Library *library, char *buf,
+ size_t bufsize, char *codepage);
+
+/**
+ * \brief Read styles from file into already initialized track.
+ * \param fname file name
+ * \param codepage encoding (iconv format)
+ * \return 0 on success
+ */
+int ass_read_styles(ASS_Track *track, char *fname, char *codepage);
+
+/**
+ * \brief Add a memory font.
+ * \param library library handle
+ * \param name attachment name
+ * \param data binary font data
+ * \param data_size data size
+*/
+void ass_add_font(ASS_Library *library, char *name, char *data,
+ int data_size);
+
+/**
+ * \brief Remove all fonts stored in an ass_library object.
+ * \param library library handle
+ */
+void ass_clear_fonts(ASS_Library *library);
+
+/**
+ * \brief Calculates timeshift from now to the start of some other subtitle
+ * event, depending on movement parameter.
+ * \param track subtitle track
+ * \param now current time in milliseconds
+ * \param movement how many events to skip from the one currently displayed
+ * +2 means "the one after the next", -1 means "previous"
+ * \return timeshift in milliseconds
+ */
+long long ass_step_sub(ASS_Track *track, long long now, int movement);
+
+#endif /* LIBASS_ASS_H */
diff --git a/app/src/main/cpp/include/ass/ass_types.h b/app/src/main/cpp/include/ass/ass_types.h
new file mode 100644
index 0000000..20fd825
--- /dev/null
+++ b/app/src/main/cpp/include/ass/ass_types.h
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2006 Evgeniy Stepanov
+ *
+ * This file is part of libass.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef LIBASS_TYPES_H
+#define LIBASS_TYPES_H
+
+#include
+
+#define VALIGN_SUB 0
+#define VALIGN_CENTER 8
+#define VALIGN_TOP 4
+#define HALIGN_LEFT 1
+#define HALIGN_CENTER 2
+#define HALIGN_RIGHT 3
+
+/* Opaque objects internally used by libass. Contents are private. */
+typedef struct ass_renderer ASS_Renderer;
+typedef struct render_priv ASS_RenderPriv;
+typedef struct parser_priv ASS_ParserPriv;
+typedef struct ass_library ASS_Library;
+
+/* ASS Style: line */
+typedef struct ass_style {
+ char *Name;
+ char *FontName;
+ double FontSize;
+ uint32_t PrimaryColour;
+ uint32_t SecondaryColour;
+ uint32_t OutlineColour;
+ uint32_t BackColour;
+ int Bold;
+ int Italic;
+ int Underline;
+ int StrikeOut;
+ double ScaleX;
+ double ScaleY;
+ double Spacing;
+ int Angle;
+ int BorderStyle;
+ double Outline;
+ double Shadow;
+ int Alignment;
+ int MarginL;
+ int MarginR;
+ int MarginV;
+ int Encoding;
+ int treat_fontname_as_pattern;
+} ASS_Style;
+
+/*
+ * ASS_Event corresponds to a single Dialogue line;
+ * text is stored as-is, style overrides will be parsed later.
+ */
+typedef struct ass_event {
+ long long Start; // ms
+ long long Duration; // ms
+
+ int ReadOrder;
+ int Layer;
+ int Style;
+ char *Name;
+ int MarginL;
+ int MarginR;
+ int MarginV;
+ char *Effect;
+ char *Text;
+
+ ASS_RenderPriv *render_priv;
+} ASS_Event;
+
+/*
+ * ass track represent either an external script or a matroska subtitle stream
+ * (no real difference between them); it can be used in rendering after the
+ * headers are parsed (i.e. events format line read).
+ */
+typedef struct ass_track {
+ int n_styles; // amount used
+ int max_styles; // amount allocated
+ int n_events;
+ int max_events;
+ ASS_Style *styles; // array of styles, max_styles length, n_styles used
+ ASS_Event *events; // the same as styles
+
+ char *style_format; // style format line (everything after "Format: ")
+ char *event_format; // event format line
+
+ enum {
+ TRACK_TYPE_UNKNOWN = 0,
+ TRACK_TYPE_ASS,
+ TRACK_TYPE_SSA
+ } track_type;
+
+ // Script header fields
+ int PlayResX;
+ int PlayResY;
+ double Timer;
+ int WrapStyle;
+ int ScaledBorderAndShadow;
+ int Kerning;
+ char *Language;
+
+ int default_style; // index of default style
+ char *name; // file name in case of external subs, 0 for streams
+
+ ASS_Library *library;
+ ASS_ParserPriv *parser_priv;
+} ASS_Track;
+
+#endif /* LIBASS_TYPES_H */
diff --git a/app/src/main/cpp/include/freetype2/freetype/config/ftconfig.h b/app/src/main/cpp/include/freetype2/freetype/config/ftconfig.h
new file mode 100644
index 0000000..e991a0c
--- /dev/null
+++ b/app/src/main/cpp/include/freetype2/freetype/config/ftconfig.h
@@ -0,0 +1,545 @@
+/* ftconfig.h. Generated from ftconfig.in by configure. */
+/***************************************************************************/
+/* */
+/* ftconfig.in */
+/* */
+/* UNIX-specific configuration file (specification only). */
+/* */
+/* Copyright 1996-2004, 2006-2009, 2011 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+/*************************************************************************/
+/* */
+/* This header file contains a number of macro definitions that are used */
+/* by the rest of the engine. Most of the macros here are automatically */
+/* determined at compile time, and you should not need to change it to */
+/* port FreeType, except to compile the library with a non-ANSI */
+/* compiler. */
+/* */
+/* Note however that if some specific modifications are needed, we */
+/* advise you to place a modified copy in your build directory. */
+/* */
+/* The build directory is usually `freetype/builds/', and */
+/* contains system-specific files that are always included first when */
+/* building the library. */
+/* */
+/*************************************************************************/
+
+
+#ifndef __FTCONFIG_H__
+#define __FTCONFIG_H__
+
+#include
+#include FT_CONFIG_OPTIONS_H
+#include FT_CONFIG_STANDARD_LIBRARY_H
+
+
+FT_BEGIN_HEADER
+
+
+/*************************************************************************/
+/* */
+/* PLATFORM-SPECIFIC CONFIGURATION MACROS */
+/* */
+/* These macros can be toggled to suit a specific system. The current */
+/* ones are defaults used to compile FreeType in an ANSI C environment */
+/* (16bit compilers are also supported). Copy this file to your own */
+/* `freetype/builds/' directory, and edit it to port the engine. */
+/* */
+/*************************************************************************/
+
+
+#define HAVE_UNISTD_H 1
+#define HAVE_FCNTL_H 1
+#define HAVE_STDINT_H 1
+
+
+/* There are systems (like the Texas Instruments 'C54x) where a `char' */
+/* has 16 bits. ANSI C says that sizeof(char) is always 1. Since an */
+/* `int' has 16 bits also for this system, sizeof(int) gives 1 which */
+/* is probably unexpected. */
+/* */
+/* `CHAR_BIT' (defined in limits.h) gives the number of bits in a */
+/* `char' type. */
+
+#ifndef FT_CHAR_BIT
+#define FT_CHAR_BIT CHAR_BIT
+#endif
+
+
+/* #undef FT_USE_AUTOCONF_SIZEOF_TYPES */
+#ifdef FT_USE_AUTOCONF_SIZEOF_TYPES
+
+#define SIZEOF_INT 4
+#define SIZEOF_LONG 4
+#define FT_SIZEOF_INT SIZEOF_INT
+#define FT_SIZEOF_LONG SIZEOF_LONG
+
+#else /* !FT_USE_AUTOCONF_SIZEOF_TYPES */
+
+/* Following cpp computation of the bit length of int and long */
+/* is copied from default include/freetype/config/ftconfig.h. */
+/* If any improvement is required for this file, it should be */
+/* applied to the original header file for the builders that */
+/* does not use configure script. */
+
+/* The size of an `int' type. */
+#if FT_UINT_MAX == 0xFFFFUL
+#define FT_SIZEOF_INT (16 / FT_CHAR_BIT)
+#elif FT_UINT_MAX == 0xFFFFFFFFUL
+#define FT_SIZEOF_INT (32 / FT_CHAR_BIT)
+#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL
+#define FT_SIZEOF_INT (64 / FT_CHAR_BIT)
+#else
+#error "Unsupported size of `int' type!"
+#endif
+
+/* The size of a `long' type. A five-byte `long' (as used e.g. on the */
+/* DM642) is recognized but avoided. */
+#if FT_ULONG_MAX == 0xFFFFFFFFUL
+#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
+#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL
+#define FT_SIZEOF_LONG (32 / FT_CHAR_BIT)
+#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL
+#define FT_SIZEOF_LONG (64 / FT_CHAR_BIT)
+#else
+#error "Unsupported size of `long' type!"
+#endif
+
+#endif /* !FT_USE_AUTOCONF_SIZEOF_TYPES */
+
+
+/* FT_UNUSED is a macro used to indicate that a given parameter is not */
+/* used -- this is only used to get rid of unpleasant compiler warnings */
+#ifndef FT_UNUSED
+#define FT_UNUSED(arg) ( (arg) = (arg) )
+#endif
+
+
+/*************************************************************************/
+/* */
+/* AUTOMATIC CONFIGURATION MACROS */
+/* */
+/* These macros are computed from the ones defined above. Don't touch */
+/* their definition, unless you know precisely what you are doing. No */
+/* porter should need to mess with them. */
+/* */
+/*************************************************************************/
+
+
+/*************************************************************************/
+/* */
+/* Mac support */
+/* */
+/* This is the only necessary change, so it is defined here instead */
+/* providing a new configuration file. */
+/* */
+#if defined( __APPLE__ ) || (defined( __MWERKS__ ) && defined( macintosh ))
+/* no Carbon frameworks for 64bit 10.4.x */
+/* AvailabilityMacros.h is available since Mac OS X 10.2, */
+/* so guess the system version by maximum errno before inclusion */
+#include
+#ifdef ECANCELED /* defined since 10.2 */
+#include "AvailabilityMacros.h"
+#endif
+#if defined( __LP64__ ) && \
+ ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
+#undef FT_MACINTOSH
+#endif
+
+#elif defined( __SC__ ) || defined( __MRC__ )
+/* Classic MacOS compilers */
+#include "ConditionalMacros.h"
+#if TARGET_OS_MAC
+#define FT_MACINTOSH 1
+#endif
+
+#endif
+
+
+/* Fix compiler warning with sgi compiler */
+#if defined( __sgi ) && !defined( __GNUC__ )
+#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
+#pragma set woff 3505
+#endif
+#endif
+
+
+/*************************************************************************/
+/* */
+/* IntN types */
+/* */
+/* Used to guarantee the size of some specific integers. */
+/* */
+typedef signed short FT_Int16;
+typedef unsigned short FT_UInt16;
+
+#if FT_SIZEOF_INT == 4
+
+typedef signed int FT_Int32;
+typedef unsigned int FT_UInt32;
+
+#elif FT_SIZEOF_LONG == 4
+
+typedef signed long FT_Int32;
+typedef unsigned long FT_UInt32;
+
+#else
+#error "no 32bit type found -- please check your configuration files"
+#endif
+
+
+/* look up an integer type that is at least 32 bits */
+#if FT_SIZEOF_INT >= 4
+
+typedef int FT_Fast;
+typedef unsigned int FT_UFast;
+
+#elif FT_SIZEOF_LONG >= 4
+
+typedef long FT_Fast;
+typedef unsigned long FT_UFast;
+
+#endif
+
+
+/* determine whether we have a 64-bit int type for platforms without */
+/* Autoconf */
+#if FT_SIZEOF_LONG == 8
+
+/* FT_LONG64 must be defined if a 64-bit type is available */
+#define FT_LONG64
+#define FT_INT64 long
+
+#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
+
+/* this compiler provides the __int64 type */
+#define FT_LONG64
+#define FT_INT64 __int64
+
+#elif defined( __BORLANDC__ ) /* Borland C++ */
+
+/* XXXX: We should probably check the value of __BORLANDC__ in order */
+/* to test the compiler version. */
+
+/* this compiler provides the __int64 type */
+#define FT_LONG64
+#define FT_INT64 __int64
+
+#elif defined( __WATCOMC__ ) /* Watcom C++ */
+
+/* Watcom doesn't provide 64-bit data types */
+
+#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
+
+#define FT_LONG64
+#define FT_INT64 long long int
+
+#elif defined( __GNUC__ )
+
+/* GCC provides the `long long' type */
+#define FT_LONG64
+#define FT_INT64 long long int
+
+#endif /* FT_SIZEOF_LONG == 8 */
+
+
+/*************************************************************************/
+/* */
+/* A 64-bit data type will create compilation problems if you compile */
+/* in strict ANSI mode. To avoid them, we disable its use if __STDC__ */
+/* is defined. You can however ignore this rule by defining the */
+/* FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
+/* */
+#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 )
+
+#ifdef __STDC__
+
+/* Undefine the 64-bit macros in strict ANSI compilation mode. */
+/* Since `#undef' doesn't survive in configuration header files */
+/* we use the postprocessing facility of AC_CONFIG_HEADERS to */
+/* replace the leading `/' with `#'. */
+#undef FT_LONG64
+#undef FT_INT64
+
+#endif /* __STDC__ */
+
+#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */
+
+
+#define FT_BEGIN_STMNT do {
+#define FT_END_STMNT } while ( 0 )
+#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
+
+
+#ifndef FT_CONFIG_OPTION_NO_ASSEMBLER
+/* Provide assembler fragments for performance-critical functions. */
+/* These must be defined `static __inline__' with GCC. */
+
+#if defined( __CC_ARM ) || defined( __ARMCC__ ) /* RVCT */
+#define FT_MULFIX_ASSEMBLER FT_MulFix_arm
+
+/* documentation is in freetype.h */
+
+static __inline FT_Int32
+FT_MulFix_arm( FT_Int32 a,
+ FT_Int32 b )
+{
+ register FT_Int32 t, t2;
+
+
+ __asm
+ {
+ smull t2, t, b, a /* (lo=t2,hi=t) = a*b */
+ mov a, t, asr #31 /* a = (hi >> 31) */
+ add a, a, #0x8000 /* a += 0x8000 */
+ adds t2, t2, a /* t2 += a */
+ adc t, t, #0 /* t += carry */
+ mov a, t2, lsr #16 /* a = t2 >> 16 */
+ orr a, a, t, lsl #16 /* a |= t << 16 */
+ }
+ return a;
+}
+
+#endif /* __CC_ARM || __ARMCC__ */
+
+
+#ifdef __GNUC__
+
+#if defined( __arm__ ) && !defined( __thumb__ ) && \
+ !( defined( __CC_ARM ) || defined( __ARMCC__ ) )
+#define FT_MULFIX_ASSEMBLER FT_MulFix_arm
+
+/* documentation is in freetype.h */
+
+static __inline__ FT_Int32
+FT_MulFix_arm( FT_Int32 a,
+ FT_Int32 b )
+{
+ register FT_Int32 t, t2;
+
+
+ __asm__ __volatile__ (
+ "smull %1, %2, %4, %3\n\t" /* (lo=%1,hi=%2) = a*b */
+ "mov %0, %2, asr #31\n\t" /* %0 = (hi >> 31) */
+ "add %0, %0, #0x8000\n\t" /* %0 += 0x8000 */
+ "adds %1, %1, %0\n\t" /* %1 += %0 */
+ "adc %2, %2, #0\n\t" /* %2 += carry */
+ "mov %0, %1, lsr #16\n\t" /* %0 = %1 >> 16 */
+ "orr %0, %0, %2, lsl #16\n\t" /* %0 |= %2 << 16 */
+ : "=r"(a), "=&r"(t2), "=&r"(t)
+ : "r"(a), "r"(b) );
+ return a;
+}
+
+#endif /* __arm__ && !__thumb__ && !( __CC_ARM || __ARMCC__ ) */
+
+#if defined( __i386__ )
+#define FT_MULFIX_ASSEMBLER FT_MulFix_i386
+
+/* documentation is in freetype.h */
+
+static __inline__ FT_Int32
+FT_MulFix_i386( FT_Int32 a,
+ FT_Int32 b )
+{
+ register FT_Int32 result;
+
+
+ __asm__ __volatile__ (
+ "imul %%edx\n"
+ "movl %%edx, %%ecx\n"
+ "sarl $31, %%ecx\n"
+ "addl $0x8000, %%ecx\n"
+ "addl %%ecx, %%eax\n"
+ "adcl $0, %%edx\n"
+ "shrl $16, %%eax\n"
+ "shll $16, %%edx\n"
+ "addl %%edx, %%eax\n"
+ : "=a"(result), "=d"(b)
+ : "a"(a), "d"(b)
+ : "%ecx", "cc" );
+ return result;
+}
+
+#endif /* i386 */
+
+#endif /* __GNUC__ */
+
+
+#ifdef _MSC_VER /* Visual C++ */
+
+#ifdef _M_IX86
+
+#define FT_MULFIX_ASSEMBLER FT_MulFix_i386
+
+/* documentation is in freetype.h */
+
+static __inline FT_Int32
+FT_MulFix_i386( FT_Int32 a,
+ FT_Int32 b )
+{
+ register FT_Int32 result;
+
+ __asm
+ {
+ mov eax, a
+ mov edx, b
+ imul edx
+ mov ecx, edx
+ sar ecx, 31
+ add ecx, 8000h
+ add eax, ecx
+ adc edx, 0
+ shr eax, 16
+ shl edx, 16
+ add eax, edx
+ mov result, eax
+ }
+ return result;
+}
+
+#endif /* _M_IX86 */
+
+#endif /* _MSC_VER */
+
+#endif /* !FT_CONFIG_OPTION_NO_ASSEMBLER */
+
+
+#ifdef FT_CONFIG_OPTION_INLINE_MULFIX
+#ifdef FT_MULFIX_ASSEMBLER
+#define FT_MULFIX_INLINED FT_MULFIX_ASSEMBLER
+#endif
+#endif
+
+
+#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
+
+#define FT_LOCAL( x ) static x
+#define FT_LOCAL_DEF( x ) static x
+
+#else
+
+#ifdef __cplusplus
+#define FT_LOCAL( x ) extern "C" x
+#define FT_LOCAL_DEF( x ) extern "C" x
+#else
+#define FT_LOCAL(x) extern x
+#define FT_LOCAL_DEF(x) x
+#endif
+
+#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
+
+
+#ifndef FT_BASE
+
+#ifdef __cplusplus
+#define FT_BASE( x ) extern "C" x
+#else
+#define FT_BASE(x) extern x
+#endif
+
+#endif /* !FT_BASE */
+
+
+#ifndef FT_BASE_DEF
+
+#ifdef __cplusplus
+#define FT_BASE_DEF( x ) x
+#else
+#define FT_BASE_DEF(x) x
+#endif
+
+#endif /* !FT_BASE_DEF */
+
+
+#ifndef FT_EXPORT
+
+#ifdef __cplusplus
+#define FT_EXPORT( x ) extern "C" x
+#else
+#define FT_EXPORT(x) extern x
+#endif
+
+#endif /* !FT_EXPORT */
+
+
+#ifndef FT_EXPORT_DEF
+
+#ifdef __cplusplus
+#define FT_EXPORT_DEF( x ) extern "C" x
+#else
+#define FT_EXPORT_DEF(x) extern x
+#endif
+
+#endif /* !FT_EXPORT_DEF */
+
+
+#ifndef FT_EXPORT_VAR
+
+#ifdef __cplusplus
+#define FT_EXPORT_VAR( x ) extern "C" x
+#else
+#define FT_EXPORT_VAR(x) extern x
+#endif
+
+#endif /* !FT_EXPORT_VAR */
+
+/* The following macros are needed to compile the library with a */
+/* C++ compiler and with 16bit compilers. */
+/* */
+
+/* This is special. Within C++, you must specify `extern "C"' for */
+/* functions which are used via function pointers, and you also */
+/* must do that for structures which contain function pointers to */
+/* assure C linkage -- it's not possible to have (local) anonymous */
+/* functions which are accessed by (global) function pointers. */
+/* */
+/* */
+/* FT_CALLBACK_DEF is used to _define_ a callback function. */
+/* */
+/* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
+/* contains pointers to callback functions. */
+/* */
+/* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
+/* that contains pointers to callback functions. */
+/* */
+/* */
+/* Some 16bit compilers have to redefine these macros to insert */
+/* the infamous `_cdecl' or `__fastcall' declarations. */
+/* */
+#ifndef FT_CALLBACK_DEF
+#ifdef __cplusplus
+#define FT_CALLBACK_DEF( x ) extern "C" x
+#else
+#define FT_CALLBACK_DEF(x) static x
+#endif
+#endif /* FT_CALLBACK_DEF */
+
+#ifndef FT_CALLBACK_TABLE
+#ifdef __cplusplus
+#define FT_CALLBACK_TABLE extern "C"
+#define FT_CALLBACK_TABLE_DEF extern "C"
+#else
+#define FT_CALLBACK_TABLE extern
+#define FT_CALLBACK_TABLE_DEF /* nothing */
+#endif
+#endif /* FT_CALLBACK_TABLE */
+
+
+FT_END_HEADER
+
+
+#endif /* __FTCONFIG_H__ */
+
+
+/* END */
diff --git a/app/src/main/cpp/include/freetype2/freetype/config/ftheader.h b/app/src/main/cpp/include/freetype2/freetype/config/ftheader.h
new file mode 100644
index 0000000..9b93ed8
--- /dev/null
+++ b/app/src/main/cpp/include/freetype2/freetype/config/ftheader.h
@@ -0,0 +1,793 @@
+/***************************************************************************/
+/* */
+/* ftheader.h */
+/* */
+/* Build macros of the FreeType 2 library. */
+/* */
+/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+#ifndef __FT_HEADER_H__
+#define __FT_HEADER_H__
+
+
+/*@***********************************************************************/
+/* */
+/* */
+/* FT_BEGIN_HEADER */
+/* */
+/* */
+/* This macro is used in association with @FT_END_HEADER in header */
+/* files to ensure that the declarations within are properly */
+/* encapsulated in an `extern "C" { .. }' block when included from a */
+/* C++ compiler. */
+/* */
+#ifdef __cplusplus
+#define FT_BEGIN_HEADER extern "C" {
+#else
+#define FT_BEGIN_HEADER /* nothing */
+#endif
+
+
+/*@***********************************************************************/
+/* */
+/* */
+/* FT_END_HEADER */
+/* */
+/* */
+/* This macro is used in association with @FT_BEGIN_HEADER in header */
+/* files to ensure that the declarations within are properly */
+/* encapsulated in an `extern "C" { .. }' block when included from a */
+/* C++ compiler. */
+/* */
+#ifdef __cplusplus
+#define FT_END_HEADER }
+#else
+#define FT_END_HEADER /* nothing */
+#endif
+
+
+/*************************************************************************/
+/* */
+/* Aliases for the FreeType 2 public and configuration files. */
+/* */
+/*************************************************************************/
+
+/*************************************************************************/
+/* */
+/* */
+/* header_file_macros */
+/* */
+/* */
+/* Header File Macros */
+/* */
+/* */
+/* Macro definitions used to #include specific header files. */
+/* */
+/* */
+/* The following macros are defined to the name of specific */
+/* FreeType~2 header files. They can be used directly in #include */
+/* statements as in: */
+/* */
+/* { */
+/* #include FT_FREETYPE_H */
+/* #include FT_MULTIPLE_MASTERS_H */
+/* #include FT_GLYPH_H */
+/* } */
+/* */
+/* There are several reasons why we are now using macros to name */
+/* public header files. The first one is that such macros are not */
+/* limited to the infamous 8.3~naming rule required by DOS (and */
+/* `FT_MULTIPLE_MASTERS_H' is a lot more meaningful than `ftmm.h'). */
+/* */
+/* The second reason is that it allows for more flexibility in the */
+/* way FreeType~2 is installed on a given system. */
+/* */
+/*************************************************************************/
+
+
+/* configuration files */
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_CONFIG_CONFIG_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing
+ * FreeType~2 configuration data.
+ *
+ */
+#ifndef FT_CONFIG_CONFIG_H
+#define FT_CONFIG_CONFIG_H
+#endif
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_CONFIG_STANDARD_LIBRARY_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing
+ * FreeType~2 interface to the standard C library functions.
+ *
+ */
+#ifndef FT_CONFIG_STANDARD_LIBRARY_H
+#define FT_CONFIG_STANDARD_LIBRARY_H
+#endif
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_CONFIG_OPTIONS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing
+ * FreeType~2 project-specific configuration options.
+ *
+ */
+#ifndef FT_CONFIG_OPTIONS_H
+#define FT_CONFIG_OPTIONS_H
+#endif
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_CONFIG_MODULES_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * list of FreeType~2 modules that are statically linked to new library
+ * instances in @FT_Init_FreeType.
+ *
+ */
+#ifndef FT_CONFIG_MODULES_H
+#define FT_CONFIG_MODULES_H
+#endif
+
+/* */
+
+/* public headers */
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_FREETYPE_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * base FreeType~2 API.
+ *
+ */
+#define FT_FREETYPE_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_ERRORS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * list of FreeType~2 error codes (and messages).
+ *
+ * It is included by @FT_FREETYPE_H.
+ *
+ */
+#define FT_ERRORS_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_MODULE_ERRORS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * list of FreeType~2 module error offsets (and messages).
+ *
+ */
+#define FT_MODULE_ERRORS_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_SYSTEM_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType~2 interface to low-level operations (i.e., memory management
+ * and stream i/o).
+ *
+ * It is included by @FT_FREETYPE_H.
+ *
+ */
+#define FT_SYSTEM_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_IMAGE_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing type
+ * definitions related to glyph images (i.e., bitmaps, outlines,
+ * scan-converter parameters).
+ *
+ * It is included by @FT_FREETYPE_H.
+ *
+ */
+#define FT_IMAGE_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_TYPES_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * basic data types defined by FreeType~2.
+ *
+ * It is included by @FT_FREETYPE_H.
+ *
+ */
+#define FT_TYPES_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_LIST_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * list management API of FreeType~2.
+ *
+ * (Most applications will never need to include this file.)
+ *
+ */
+#define FT_LIST_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_OUTLINE_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * scalable outline management API of FreeType~2.
+ *
+ */
+#define FT_OUTLINE_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_SIZES_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * API which manages multiple @FT_Size objects per face.
+ *
+ */
+#define FT_SIZES_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_MODULE_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * module management API of FreeType~2.
+ *
+ */
+#define FT_MODULE_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_RENDER_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * renderer module management API of FreeType~2.
+ *
+ */
+#define FT_RENDER_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_TYPE1_TABLES_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * types and API specific to the Type~1 format.
+ *
+ */
+#define FT_TYPE1_TABLES_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_TRUETYPE_IDS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * enumeration values which identify name strings, languages, encodings,
+ * etc. This file really contains a _large_ set of constant macro
+ * definitions, taken from the TrueType and OpenType specifications.
+ *
+ */
+#define FT_TRUETYPE_IDS_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_TRUETYPE_TABLES_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * types and API specific to the TrueType (as well as OpenType) format.
+ *
+ */
+#define FT_TRUETYPE_TABLES_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_TRUETYPE_TAGS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * definitions of TrueType four-byte `tags' which identify blocks in
+ * SFNT-based font formats (i.e., TrueType and OpenType).
+ *
+ */
+#define FT_TRUETYPE_TAGS_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_BDF_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * definitions of an API which accesses BDF-specific strings from a
+ * face.
+ *
+ */
+#define FT_BDF_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_CID_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * definitions of an API which access CID font information from a
+ * face.
+ *
+ */
+#define FT_CID_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_GZIP_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * definitions of an API which supports gzip-compressed files.
+ *
+ */
+#define FT_GZIP_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_LZW_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * definitions of an API which supports LZW-compressed files.
+ *
+ */
+#define FT_LZW_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_BZIP2_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * definitions of an API which supports bzip2-compressed files.
+ *
+ */
+#define FT_BZIP2_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_WINFONTS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * definitions of an API which supports Windows FNT files.
+ *
+ */
+#define FT_WINFONTS_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_GLYPH_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * API of the optional glyph management component.
+ *
+ */
+#define FT_GLYPH_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_BITMAP_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * API of the optional bitmap conversion component.
+ *
+ */
+#define FT_BITMAP_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_BBOX_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * API of the optional exact bounding box computation routines.
+ *
+ */
+#define FT_BBOX_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_CACHE_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * API of the optional FreeType~2 cache sub-system.
+ *
+ */
+#define FT_CACHE_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_CACHE_IMAGE_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * `glyph image' API of the FreeType~2 cache sub-system.
+ *
+ * It is used to define a cache for @FT_Glyph elements. You can also
+ * use the API defined in @FT_CACHE_SMALL_BITMAPS_H if you only need to
+ * store small glyph bitmaps, as it will use less memory.
+ *
+ * This macro is deprecated. Simply include @FT_CACHE_H to have all
+ * glyph image-related cache declarations.
+ *
+ */
+#define FT_CACHE_IMAGE_H FT_CACHE_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_CACHE_SMALL_BITMAPS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * `small bitmaps' API of the FreeType~2 cache sub-system.
+ *
+ * It is used to define a cache for small glyph bitmaps in a relatively
+ * memory-efficient way. You can also use the API defined in
+ * @FT_CACHE_IMAGE_H if you want to cache arbitrary glyph images,
+ * including scalable outlines.
+ *
+ * This macro is deprecated. Simply include @FT_CACHE_H to have all
+ * small bitmaps-related cache declarations.
+ *
+ */
+#define FT_CACHE_SMALL_BITMAPS_H FT_CACHE_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_CACHE_CHARMAP_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * `charmap' API of the FreeType~2 cache sub-system.
+ *
+ * This macro is deprecated. Simply include @FT_CACHE_H to have all
+ * charmap-based cache declarations.
+ *
+ */
+#define FT_CACHE_CHARMAP_H FT_CACHE_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_MAC_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * Macintosh-specific FreeType~2 API. The latter is used to access
+ * fonts embedded in resource forks.
+ *
+ * This header file must be explicitly included by client applications
+ * compiled on the Mac (note that the base API still works though).
+ *
+ */
+#define FT_MAC_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_MULTIPLE_MASTERS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * optional multiple-masters management API of FreeType~2.
+ *
+ */
+#define FT_MULTIPLE_MASTERS_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_SFNT_NAMES_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * optional FreeType~2 API which accesses embedded `name' strings in
+ * SFNT-based font formats (i.e., TrueType and OpenType).
+ *
+ */
+#define FT_SFNT_NAMES_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_OPENTYPE_VALIDATE_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * optional FreeType~2 API which validates OpenType tables (BASE, GDEF,
+ * GPOS, GSUB, JSTF).
+ *
+ */
+#define FT_OPENTYPE_VALIDATE_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_GX_VALIDATE_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * optional FreeType~2 API which validates TrueTypeGX/AAT tables (feat,
+ * mort, morx, bsln, just, kern, opbd, trak, prop).
+ *
+ */
+#define FT_GX_VALIDATE_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_PFR_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType~2 API which accesses PFR-specific data.
+ *
+ */
+#define FT_PFR_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_STROKER_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType~2 API which provides functions to stroke outline paths.
+ */
+#define FT_STROKER_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_SYNTHESIS_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType~2 API which performs artificial obliquing and emboldening.
+ */
+#define FT_SYNTHESIS_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_XFREE86_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType~2 API which provides functions specific to the XFree86 and
+ * X.Org X11 servers.
+ */
+#define FT_XFREE86_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_TRIGONOMETRY_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType~2 API which performs trigonometric computations (e.g.,
+ * cosines and arc tangents).
+ */
+#define FT_TRIGONOMETRY_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_LCD_FILTER_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType~2 API which performs color filtering for subpixel rendering.
+ */
+#define FT_LCD_FILTER_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_UNPATENTED_HINTING_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType~2 API which performs color filtering for subpixel rendering.
+ */
+#define FT_UNPATENTED_HINTING_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_INCREMENTAL_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType~2 API which performs color filtering for subpixel rendering.
+ */
+#define FT_INCREMENTAL_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_GASP_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType~2 API which returns entries from the TrueType GASP table.
+ */
+#define FT_GASP_H
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_ADVANCES_H
+ *
+ * @description:
+ * A macro used in #include statements to name the file containing the
+ * FreeType~2 API which returns individual and ranged glyph advances.
+ */
+#define FT_ADVANCES_H
+
+
+/* */
+
+#define FT_ERROR_DEFINITIONS_H
+
+
+/* The internals of the cache sub-system are no longer exposed. We */
+/* default to FT_CACHE_H at the moment just in case, but we know of */
+/* no rogue client that uses them. */
+/* */
+#define FT_CACHE_MANAGER_H
+#define FT_CACHE_INTERNAL_MRU_H
+#define FT_CACHE_INTERNAL_MANAGER_H
+#define FT_CACHE_INTERNAL_CACHE_H
+#define FT_CACHE_INTERNAL_GLYPH_H
+#define FT_CACHE_INTERNAL_IMAGE_H
+#define FT_CACHE_INTERNAL_SBITS_H
+
+
+#define FT_INCREMENTAL_H
+
+#define FT_TRUETYPE_UNPATENTED_H
+
+
+/*
+ * Include internal headers definitions from
+ * only when building the library.
+ */
+#ifdef FT2_BUILD_LIBRARY
+#define FT_INTERNAL_INTERNAL_H
+#include FT_INTERNAL_INTERNAL_H
+#endif /* FT2_BUILD_LIBRARY */
+
+
+#endif /* __FT2_BUILD_H__ */
+
+
+/* END */
diff --git a/app/src/main/cpp/include/freetype2/freetype/config/ftmodule.h b/app/src/main/cpp/include/freetype2/freetype/config/ftmodule.h
new file mode 100644
index 0000000..3b1f68f
--- /dev/null
+++ b/app/src/main/cpp/include/freetype2/freetype/config/ftmodule.h
@@ -0,0 +1,38 @@
+/* This is a generated file. */
+FT_USE_MODULE( FT_Driver_ClassRec, tt_driver_class
+)
+FT_USE_MODULE( FT_Driver_ClassRec, t1_driver_class
+)
+FT_USE_MODULE( FT_Driver_ClassRec, cff_driver_class
+)
+FT_USE_MODULE( FT_Driver_ClassRec, t1cid_driver_class
+)
+FT_USE_MODULE( FT_Driver_ClassRec, pfr_driver_class
+)
+FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class
+)
+FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class
+)
+FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class
+)
+FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class
+)
+FT_USE_MODULE( FT_Module_Class, sfnt_module_class
+)
+FT_USE_MODULE( FT_Module_Class, autofit_module_class
+)
+FT_USE_MODULE( FT_Module_Class, pshinter_module_class
+)
+FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class
+)
+FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class
+)
+FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcd_renderer_class
+)
+FT_USE_MODULE( FT_Renderer_Class, ft_smooth_lcdv_renderer_class
+)
+FT_USE_MODULE( FT_Module_Class, psaux_module_class
+)
+FT_USE_MODULE( FT_Module_Class, psnames_module_class
+)
+/* EOF */
diff --git a/app/src/main/cpp/include/freetype2/freetype/config/ftoption.h b/app/src/main/cpp/include/freetype2/freetype/config/ftoption.h
new file mode 100644
index 0000000..76ddd6d
--- /dev/null
+++ b/app/src/main/cpp/include/freetype2/freetype/config/ftoption.h
@@ -0,0 +1,805 @@
+/***************************************************************************/
+/* */
+/* ftoption.h */
+/* */
+/* User-selectable configuration macros (specification only). */
+/* */
+/* Copyright 1996-2012 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FTOPTION_H__
+#define __FTOPTION_H__
+
+
+#include
+
+
+FT_BEGIN_HEADER
+
+/*************************************************************************/
+/* */
+/* USER-SELECTABLE CONFIGURATION MACROS */
+/* */
+/* This file contains the default configuration macro definitions for */
+/* a standard build of the FreeType library. There are three ways to */
+/* use this file to build project-specific versions of the library: */
+/* */
+/* - You can modify this file by hand, but this is not recommended in */
+/* cases where you would like to build several versions of the */
+/* library from a single source directory. */
+/* */
+/* - You can put a copy of this file in your build directory, more */
+/* precisely in `$BUILD/freetype/config/ftoption.h', where `$BUILD' */
+/* is the name of a directory that is included _before_ the FreeType */
+/* include path during compilation. */
+/* */
+/* The default FreeType Makefiles and Jamfiles use the build */
+/* directory `builds/' by default, but you can easily change */
+/* that for your own projects. */
+/* */
+/* - Copy the file to `$BUILD/ft2build.h' and modify it */
+/* slightly to pre-define the macro FT_CONFIG_OPTIONS_H used to */
+/* locate this file during the build. For example, */
+/* */
+/* #define FT_CONFIG_OPTIONS_H */
+/* #include */
+/* */
+/* will use `$BUILD/myftoptions.h' instead of this file for macro */
+/* definitions. */
+/* */
+/* Note also that you can similarly pre-define the macro */
+/* FT_CONFIG_MODULES_H used to locate the file listing of the modules */
+/* that are statically linked to the library at compile time. By */
+/* default, this file is . */
+/* */
+/* We highly recommend using the third method whenever possible. */
+/* */
+/*************************************************************************/
+
+
+/*************************************************************************/
+/*************************************************************************/
+/**** ****/
+/**** G E N E R A L F R E E T Y P E 2 C O N F I G U R A T I O N ****/
+/**** ****/
+/*************************************************************************/
+/*************************************************************************/
+
+
+/*************************************************************************/
+/* */
+/* Uncomment the line below if you want to activate sub-pixel rendering */
+/* (a.k.a. LCD rendering, or ClearType) in this build of the library. */
+/* */
+/* Note that this feature is covered by several Microsoft patents */
+/* and should not be activated in any default build of the library. */
+/* */
+/* This macro has no impact on the FreeType API, only on its */
+/* _implementation_. For example, using FT_RENDER_MODE_LCD when calling */
+/* FT_Render_Glyph still generates a bitmap that is 3 times wider than */
+/* the original size in case this macro isn't defined; however, each */
+/* triplet of subpixels has R=G=B. */
+/* */
+/* This is done to allow FreeType clients to run unmodified, forcing */
+/* them to display normal gray-level anti-aliased glyphs. */
+/* */
+/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
+
+
+/*************************************************************************/
+/* */
+/* Many compilers provide a non-ANSI 64-bit data type that can be used */
+/* by FreeType to speed up some computations. However, this will create */
+/* some problems when compiling the library in strict ANSI mode. */
+/* */
+/* For this reason, the use of 64-bit integers is normally disabled when */
+/* the __STDC__ macro is defined. You can however disable this by */
+/* defining the macro FT_CONFIG_OPTION_FORCE_INT64 here. */
+/* */
+/* For most compilers, this will only create compilation warnings when */
+/* building the library. */
+/* */
+/* ObNote: The compiler-specific 64-bit integers are detected in the */
+/* file `ftconfig.h' either statically or through the */
+/* `configure' script on supported platforms. */
+/* */
+#undef FT_CONFIG_OPTION_FORCE_INT64
+
+
+/*************************************************************************/
+/* */
+/* If this macro is defined, do not try to use an assembler version of */
+/* performance-critical functions (e.g. FT_MulFix). You should only do */
+/* that to verify that the assembler function works properly, or to */
+/* execute benchmark tests of the various implementations. */
+/* #define FT_CONFIG_OPTION_NO_ASSEMBLER */
+
+
+/*************************************************************************/
+/* */
+/* If this macro is defined, try to use an inlined assembler version of */
+/* the `FT_MulFix' function, which is a `hotspot' when loading and */
+/* hinting glyphs, and which should be executed as fast as possible. */
+/* */
+/* Note that if your compiler or CPU is not supported, this will default */
+/* to the standard and portable implementation found in `ftcalc.c'. */
+/* */
+#define FT_CONFIG_OPTION_INLINE_MULFIX
+
+
+/*************************************************************************/
+/* */
+/* LZW-compressed file support. */
+/* */
+/* FreeType now handles font files that have been compressed with the */
+/* `compress' program. This is mostly used to parse many of the PCF */
+/* files that come with various X11 distributions. The implementation */
+/* uses NetBSD's `zopen' to partially uncompress the file on the fly */
+/* (see src/lzw/ftgzip.c). */
+/* */
+/* Define this macro if you want to enable this `feature'. */
+/* */
+#define FT_CONFIG_OPTION_USE_LZW
+
+
+/*************************************************************************/
+/* */
+/* Gzip-compressed file support. */
+/* */
+/* FreeType now handles font files that have been compressed with the */
+/* `gzip' program. This is mostly used to parse many of the PCF files */
+/* that come with XFree86. The implementation uses `zlib' to */
+/* partially uncompress the file on the fly (see src/gzip/ftgzip.c). */
+/* */
+/* Define this macro if you want to enable this `feature'. See also */
+/* the macro FT_CONFIG_OPTION_SYSTEM_ZLIB below. */
+/* */
+#define FT_CONFIG_OPTION_USE_ZLIB
+
+
+/*************************************************************************/
+/* */
+/* ZLib library selection */
+/* */
+/* This macro is only used when FT_CONFIG_OPTION_USE_ZLIB is defined. */
+/* It allows FreeType's `ftgzip' component to link to the system's */
+/* installation of the ZLib library. This is useful on systems like */
+/* Unix or VMS where it generally is already available. */
+/* */
+/* If you let it undefined, the component will use its own copy */
+/* of the zlib sources instead. These have been modified to be */
+/* included directly within the component and *not* export external */
+/* function names. This allows you to link any program with FreeType */
+/* _and_ ZLib without linking conflicts. */
+/* */
+/* Do not #undef this macro here since the build system might define */
+/* it for certain configurations only. */
+/* */
+/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
+
+
+/*************************************************************************/
+/* */
+/* Bzip2-compressed file support. */
+/* */
+/* FreeType now handles font files that have been compressed with the */
+/* `bzip2' program. This is mostly used to parse many of the PCF */
+/* files that come with XFree86. The implementation uses `libbz2' to */
+/* partially uncompress the file on the fly (see src/bzip2/ftbzip2.c). */
+/* Contrary to gzip, bzip2 currently is not included and need to use */
+/* the system available bzip2 implementation. */
+/* */
+/* Define this macro if you want to enable this `feature'. */
+/* */
+/* #define FT_CONFIG_OPTION_USE_BZIP2 */
+
+
+/*************************************************************************/
+/* */
+/* Define to disable the use of file stream functions and types, FILE, */
+/* fopen() etc. Enables the use of smaller system libraries on embedded */
+/* systems that have multiple system libraries, some with or without */
+/* file stream support, in the cases where file stream support is not */
+/* necessary such as memory loading of font files. */
+/* */
+/* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */
+
+
+/*************************************************************************/
+/* */
+/* DLL export compilation */
+/* */
+/* When compiling FreeType as a DLL, some systems/compilers need a */
+/* special keyword in front OR after the return type of function */
+/* declarations. */
+/* */
+/* Two macros are used within the FreeType source code to define */
+/* exported library functions: FT_EXPORT and FT_EXPORT_DEF. */
+/* */
+/* FT_EXPORT( return_type ) */
+/* */
+/* is used in a function declaration, as in */
+/* */
+/* FT_EXPORT( FT_Error ) */
+/* FT_Init_FreeType( FT_Library* alibrary ); */
+/* */
+/* */
+/* FT_EXPORT_DEF( return_type ) */
+/* */
+/* is used in a function definition, as in */
+/* */
+/* FT_EXPORT_DEF( FT_Error ) */
+/* FT_Init_FreeType( FT_Library* alibrary ) */
+/* { */
+/* ... some code ... */
+/* return FT_Err_Ok; */
+/* } */
+/* */
+/* You can provide your own implementation of FT_EXPORT and */
+/* FT_EXPORT_DEF here if you want. If you leave them undefined, they */
+/* will be later automatically defined as `extern return_type' to */
+/* allow normal compilation. */
+/* */
+/* Do not #undef these macros here since the build system might define */
+/* them for certain configurations only. */
+/* */
+/* #define FT_EXPORT(x) extern x */
+/* #define FT_EXPORT_DEF(x) x */
+
+
+/*************************************************************************/
+/* */
+/* Glyph Postscript Names handling */
+/* */
+/* By default, FreeType 2 is compiled with the `psnames' module. This */
+/* module is in charge of converting a glyph name string into a */
+/* Unicode value, or return a Macintosh standard glyph name for the */
+/* use with the TrueType `post' table. */
+/* */
+/* Undefine this macro if you do not want `psnames' compiled in your */
+/* build of FreeType. This has the following effects: */
+/* */
+/* - The TrueType driver will provide its own set of glyph names, */
+/* if you build it to support postscript names in the TrueType */
+/* `post' table. */
+/* */
+/* - The Type 1 driver will not be able to synthesize a Unicode */
+/* charmap out of the glyphs found in the fonts. */
+/* */
+/* You would normally undefine this configuration macro when building */
+/* a version of FreeType that doesn't contain a Type 1 or CFF driver. */
+/* */
+#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES
+
+
+/*************************************************************************/
+/* */
+/* Postscript Names to Unicode Values support */
+/* */
+/* By default, FreeType 2 is built with the `PSNames' module compiled */
+/* in. Among other things, the module is used to convert a glyph name */
+/* into a Unicode value. This is especially useful in order to */
+/* synthesize on the fly a Unicode charmap from the CFF/Type 1 driver */
+/* through a big table named the `Adobe Glyph List' (AGL). */
+/* */
+/* Undefine this macro if you do not want the Adobe Glyph List */
+/* compiled in your `PSNames' module. The Type 1 driver will not be */
+/* able to synthesize a Unicode charmap out of the glyphs found in the */
+/* fonts. */
+/* */
+#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
+
+
+/*************************************************************************/
+/* */
+/* Support for Mac fonts */
+/* */
+/* Define this macro if you want support for outline fonts in Mac */
+/* format (mac dfont, mac resource, macbinary containing a mac */
+/* resource) on non-Mac platforms. */
+/* */
+/* Note that the `FOND' resource isn't checked. */
+/* */
+#define FT_CONFIG_OPTION_MAC_FONTS
+
+
+/*************************************************************************/
+/* */
+/* Guessing methods to access embedded resource forks */
+/* */
+/* Enable extra Mac fonts support on non-Mac platforms (e.g. */
+/* GNU/Linux). */
+/* */
+/* Resource forks which include fonts data are stored sometimes in */
+/* locations which users or developers don't expected. In some cases, */
+/* resource forks start with some offset from the head of a file. In */
+/* other cases, the actual resource fork is stored in file different */
+/* from what the user specifies. If this option is activated, */
+/* FreeType tries to guess whether such offsets or different file */
+/* names must be used. */
+/* */
+/* Note that normal, direct access of resource forks is controlled via */
+/* the FT_CONFIG_OPTION_MAC_FONTS option. */
+/* */
+#ifdef FT_CONFIG_OPTION_MAC_FONTS
+#define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
+#endif
+
+
+/*************************************************************************/
+/* */
+/* Allow the use of FT_Incremental_Interface to load typefaces that */
+/* contain no glyph data, but supply it via a callback function. */
+/* This is required by clients supporting document formats which */
+/* supply font data incrementally as the document is parsed, such */
+/* as the Ghostscript interpreter for the PostScript language. */
+/* */
+#define FT_CONFIG_OPTION_INCREMENTAL
+
+
+/*************************************************************************/
+/* */
+/* The size in bytes of the render pool used by the scan-line converter */
+/* to do all of its work. */
+/* */
+/* This must be greater than 4KByte if you use FreeType to rasterize */
+/* glyphs; otherwise, you may set it to zero to avoid unnecessary */
+/* allocation of the render pool. */
+/* */
+#define FT_RENDER_POOL_SIZE 16384L
+
+
+/*************************************************************************/
+/* */
+/* FT_MAX_MODULES */
+/* */
+/* The maximum number of modules that can be registered in a single */
+/* FreeType library object. 32 is the default. */
+/* */
+#define FT_MAX_MODULES 32
+
+
+/*************************************************************************/
+/* */
+/* Debug level */
+/* */
+/* FreeType can be compiled in debug or trace mode. In debug mode, */
+/* errors are reported through the `ftdebug' component. In trace */
+/* mode, additional messages are sent to the standard output during */
+/* execution. */
+/* */
+/* Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode. */
+/* Define FT_DEBUG_LEVEL_TRACE to build it in trace mode. */
+/* */
+/* Don't define any of these macros to compile in `release' mode! */
+/* */
+/* Do not #undef these macros here since the build system might define */
+/* them for certain configurations only. */
+/* */
+/* #define FT_DEBUG_LEVEL_ERROR */
+/* #define FT_DEBUG_LEVEL_TRACE */
+
+
+/*************************************************************************/
+/* */
+/* Autofitter debugging */
+/* */
+/* If FT_DEBUG_AUTOFIT is defined, FreeType provides some means to */
+/* control the autofitter behaviour for debugging purposes with global */
+/* boolean variables (consequently, you should *never* enable this */
+/* while compiling in `release' mode): */
+/* */
+/* _af_debug_disable_horz_hints */
+/* _af_debug_disable_vert_hints */
+/* _af_debug_disable_blue_hints */
+/* */
+/* Additionally, the following functions provide dumps of various */
+/* internal autofit structures to stdout (using `printf'): */
+/* */
+/* af_glyph_hints_dump_points */
+/* af_glyph_hints_dump_segments */
+/* af_glyph_hints_dump_edges */
+/* */
+/* As an argument, they use another global variable: */
+/* */
+/* _af_debug_hints */
+/* */
+/* Please have a look at the `ftgrid' demo program to see how those */
+/* variables and macros should be used. */
+/* */
+/* Do not #undef these macros here since the build system might define */
+/* them for certain configurations only. */
+/* */
+/* #define FT_DEBUG_AUTOFIT */
+
+
+/*************************************************************************/
+/* */
+/* Memory Debugging */
+/* */
+/* FreeType now comes with an integrated memory debugger that is */
+/* capable of detecting simple errors like memory leaks or double */
+/* deletes. To compile it within your build of the library, you */
+/* should define FT_DEBUG_MEMORY here. */
+/* */
+/* Note that the memory debugger is only activated at runtime when */
+/* when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also! */
+/* */
+/* Do not #undef this macro here since the build system might define */
+/* it for certain configurations only. */
+/* */
+/* #define FT_DEBUG_MEMORY */
+
+
+/*************************************************************************/
+/* */
+/* Module errors */
+/* */
+/* If this macro is set (which is _not_ the default), the higher byte */
+/* of an error code gives the module in which the error has occurred, */
+/* while the lower byte is the real error code. */
+/* */
+/* Setting this macro makes sense for debugging purposes only, since */
+/* it would break source compatibility of certain programs that use */
+/* FreeType 2. */
+/* */
+/* More details can be found in the files ftmoderr.h and fterrors.h. */
+/* */
+#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
+
+
+/*************************************************************************/
+/* */
+/* Position Independent Code */
+/* */
+/* If this macro is set (which is _not_ the default), FreeType2 will */
+/* avoid creating constants that require address fixups. Instead the */
+/* constants will be moved into a struct and additional intialization */
+/* code will be used. */
+/* */
+/* Setting this macro is needed for systems that prohibit address */
+/* fixups, such as BREW. */
+/* */
+/* #define FT_CONFIG_OPTION_PIC */
+
+
+/*************************************************************************/
+/*************************************************************************/
+/**** ****/
+/**** S F N T D R I V E R C O N F I G U R A T I O N ****/
+/**** ****/
+/*************************************************************************/
+/*************************************************************************/
+
+
+/*************************************************************************/
+/* */
+/* Define TT_CONFIG_OPTION_EMBEDDED_BITMAPS if you want to support */
+/* embedded bitmaps in all formats using the SFNT module (namely */
+/* TrueType & OpenType). */
+/* */
+#define TT_CONFIG_OPTION_EMBEDDED_BITMAPS
+
+
+/*************************************************************************/
+/* */
+/* Define TT_CONFIG_OPTION_POSTSCRIPT_NAMES if you want to be able to */
+/* load and enumerate the glyph Postscript names in a TrueType or */
+/* OpenType file. */
+/* */
+/* Note that when you do not compile the `PSNames' module by undefining */
+/* the above FT_CONFIG_OPTION_POSTSCRIPT_NAMES, the `sfnt' module will */
+/* contain additional code used to read the PS Names table from a font. */
+/* */
+/* (By default, the module uses `PSNames' to extract glyph names.) */
+/* */
+#define TT_CONFIG_OPTION_POSTSCRIPT_NAMES
+
+
+/*************************************************************************/
+/* */
+/* Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to */
+/* access the internal name table in a SFNT-based format like TrueType */
+/* or OpenType. The name table contains various strings used to */
+/* describe the font, like family name, copyright, version, etc. It */
+/* does not contain any glyph name though. */
+/* */
+/* Accessing SFNT names is done through the functions declared in */
+/* `freetype/ftsnames.h'. */
+/* */
+#define TT_CONFIG_OPTION_SFNT_NAMES
+
+
+/*************************************************************************/
+/* */
+/* TrueType CMap support */
+/* */
+/* Here you can fine-tune which TrueType CMap table format shall be */
+/* supported. */
+#define TT_CONFIG_CMAP_FORMAT_0
+#define TT_CONFIG_CMAP_FORMAT_2
+#define TT_CONFIG_CMAP_FORMAT_4
+#define TT_CONFIG_CMAP_FORMAT_6
+#define TT_CONFIG_CMAP_FORMAT_8
+#define TT_CONFIG_CMAP_FORMAT_10
+#define TT_CONFIG_CMAP_FORMAT_12
+#define TT_CONFIG_CMAP_FORMAT_13
+#define TT_CONFIG_CMAP_FORMAT_14
+
+
+/*************************************************************************/
+/*************************************************************************/
+/**** ****/
+/**** T R U E T Y P E D R I V E R C O N F I G U R A T I O N ****/
+/**** ****/
+/*************************************************************************/
+/*************************************************************************/
+
+/*************************************************************************/
+/* */
+/* Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile */
+/* a bytecode interpreter in the TrueType driver. */
+/* */
+/* By undefining this, you will only compile the code necessary to load */
+/* TrueType glyphs without hinting. */
+/* */
+/* Do not #undef this macro here, since the build system might */
+/* define it for certain configurations only. */
+/* */
+#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
+
+
+/*************************************************************************/
+/* */
+/* If you define TT_CONFIG_OPTION_UNPATENTED_HINTING, a special version */
+/* of the TrueType bytecode interpreter is used that doesn't implement */
+/* any of the patented opcodes and algorithms. The patents related to */
+/* TrueType hinting have expired worldwide since May 2010; this option */
+/* is now deprecated. */
+/* */
+/* Note that the TT_CONFIG_OPTION_UNPATENTED_HINTING macro is *ignored* */
+/* if you define TT_CONFIG_OPTION_BYTECODE_INTERPRETER; in other words, */
+/* either define TT_CONFIG_OPTION_BYTECODE_INTERPRETER or */
+/* TT_CONFIG_OPTION_UNPATENTED_HINTING but not both at the same time. */
+/* */
+/* This macro is only useful for a small number of font files (mostly */
+/* for Asian scripts) that require bytecode interpretation to properly */
+/* load glyphs. For all other fonts, this produces unpleasant results, */
+/* thus the unpatented interpreter is never used to load glyphs from */
+/* TrueType fonts unless one of the following two options is used. */
+/* */
+/* - The unpatented interpreter is explicitly activated by the user */
+/* through the FT_PARAM_TAG_UNPATENTED_HINTING parameter tag */
+/* when opening the FT_Face. */
+/* */
+/* - FreeType detects that the FT_Face corresponds to one of the */
+/* `trick' fonts (e.g., `Mingliu') it knows about. The font engine */
+/* contains a hard-coded list of font names and other matching */
+/* parameters (see function `tt_face_init' in file */
+/* `src/truetype/ttobjs.c'). */
+/* */
+/* Here a sample code snippet for using FT_PARAM_TAG_UNPATENTED_HINTING. */
+/* */
+/* { */
+/* FT_Parameter parameter; */
+/* FT_Open_Args open_args; */
+/* */
+/* */
+/* parameter.tag = FT_PARAM_TAG_UNPATENTED_HINTING; */
+/* */
+/* open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; */
+/* open_args.pathname = my_font_pathname; */
+/* open_args.num_params = 1; */
+/* open_args.params = ¶meter; */
+/* */
+/* error = FT_Open_Face( library, &open_args, index, &face ); */
+/* ... */
+/* } */
+/* */
+/* #define TT_CONFIG_OPTION_UNPATENTED_HINTING */
+
+
+/*************************************************************************/
+/* */
+/* Define TT_CONFIG_OPTION_INTERPRETER_SWITCH to compile the TrueType */
+/* bytecode interpreter with a huge switch statement, rather than a call */
+/* table. This results in smaller and faster code for a number of */
+/* architectures. */
+/* */
+/* Note however that on some compiler/processor combinations, undefining */
+/* this macro will generate faster, though larger, code. */
+/* */
+#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
+
+
+/*************************************************************************/
+/* */
+/* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */
+/* TrueType glyph loader to use Apple's definition of how to handle */
+/* component offsets in composite glyphs. */
+/* */
+/* Apple and MS disagree on the default behavior of component offsets */
+/* in composites. Apple says that they should be scaled by the scaling */
+/* factors in the transformation matrix (roughly, it's more complex) */
+/* while MS says they should not. OpenType defines two bits in the */
+/* composite flags array which can be used to disambiguate, but old */
+/* fonts will not have them. */
+/* */
+/* http://www.microsoft.com/typography/otspec/glyf.htm */
+/* http://fonts.apple.com/TTRefMan/RM06/Chap6glyf.html */
+/* */
+#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
+
+
+/*************************************************************************/
+/* */
+/* Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include */
+/* support for Apple's distortable font technology (fvar, gvar, cvar, */
+/* and avar tables). This has many similarities to Type 1 Multiple */
+/* Masters support. */
+/* */
+#define TT_CONFIG_OPTION_GX_VAR_SUPPORT
+
+
+/*************************************************************************/
+/* */
+/* Define TT_CONFIG_OPTION_BDF if you want to include support for */
+/* an embedded `BDF ' table within SFNT-based bitmap formats. */
+/* */
+#define TT_CONFIG_OPTION_BDF
+
+
+/*************************************************************************/
+/*************************************************************************/
+/**** ****/
+/**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/
+/**** ****/
+/*************************************************************************/
+/*************************************************************************/
+
+
+/*************************************************************************/
+/* */
+/* T1_MAX_DICT_DEPTH is the maximum depth of nest dictionaries and */
+/* arrays in the Type 1 stream (see t1load.c). A minimum of 4 is */
+/* required. */
+/* */
+#define T1_MAX_DICT_DEPTH 5
+
+
+/*************************************************************************/
+/* */
+/* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine */
+/* calls during glyph loading. */
+/* */
+#define T1_MAX_SUBRS_CALLS 16
+
+
+/*************************************************************************/
+/* */
+/* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity. A */
+/* minimum of 16 is required. */
+/* */
+/* The Chinese font MingTiEG-Medium (CNS 11643 character set) needs 256. */
+/* */
+#define T1_MAX_CHARSTRINGS_OPERANDS 256
+
+
+/*************************************************************************/
+/* */
+/* Define this configuration macro if you want to prevent the */
+/* compilation of `t1afm', which is in charge of reading Type 1 AFM */
+/* files into an existing face. Note that if set, the T1 driver will be */
+/* unable to produce kerning distances. */
+/* */
+#undef T1_CONFIG_OPTION_NO_AFM
+
+
+/*************************************************************************/
+/* */
+/* Define this configuration macro if you want to prevent the */
+/* compilation of the Multiple Masters font support in the Type 1 */
+/* driver. */
+/* */
+#undef T1_CONFIG_OPTION_NO_MM_SUPPORT
+
+
+/*************************************************************************/
+/*************************************************************************/
+/**** ****/
+/**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/
+/**** ****/
+/*************************************************************************/
+/*************************************************************************/
+
+
+/*************************************************************************/
+/* */
+/* Compile autofit module with CJK (Chinese, Japanese, Korean) script */
+/* support. */
+/* */
+#define AF_CONFIG_OPTION_CJK
+
+/*************************************************************************/
+/* */
+/* Compile autofit module with Indic script support. */
+/* */
+#define AF_CONFIG_OPTION_INDIC
+
+/*************************************************************************/
+/* */
+/* Compile autofit module with warp hinting. The idea of the warping */
+/* code is to slightly scale and shift a glyph within a single dimension */
+/* so that as much of its segments are aligned (more or less) on the */
+/* grid. To find out the optimal scaling and shifting value, various */
+/* parameter combinations are tried and scored. */
+/* */
+/* This experimental option is only active if the render mode is */
+/* FT_RENDER_MODE_LIGHT. */
+/* */
+/* #define AF_CONFIG_OPTION_USE_WARPER */
+
+/* */
+
+
+/*
+ * Define this variable if you want to keep the layout of internal
+ * structures that was used prior to FreeType 2.2. This also compiles in
+ * a few obsolete functions to avoid linking problems on typical Unix
+ * distributions.
+ *
+ * For embedded systems or building a new distribution from scratch, it
+ * is recommended to disable the macro since it reduces the library's code
+ * size and activates a few memory-saving optimizations as well.
+ */
+#define FT_CONFIG_OPTION_OLD_INTERNALS
+
+
+/*
+ * To detect legacy cache-lookup call from a rogue client (<= 2.1.7),
+ * we restrict the number of charmaps in a font. The current API of
+ * FTC_CMapCache_Lookup() takes cmap_index & charcode, but old API
+ * takes charcode only. To determine the passed value is for cmap_index
+ * or charcode, the possible cmap_index is restricted not to exceed
+ * the minimum possible charcode by a rogue client. It is also very
+ * unlikely that a rogue client is interested in Unicode values 0 to 15.
+ *
+ * NOTE: The original threshold was 4 deduced from popular number of
+ * cmap subtables in UCS-4 TrueType fonts, but now it is not
+ * irregular for OpenType fonts to have more than 4 subtables,
+ * because variation selector subtables are available for Apple
+ * and Microsoft platforms.
+ */
+
+#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
+#define FT_MAX_CHARMAP_CACHEABLE 15
+#endif
+
+
+/*
+ * This macro is defined if either unpatented or native TrueType
+ * hinting is requested by the definitions above.
+ */
+#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
+#define TT_USE_BYTECODE_INTERPRETER
+#undef TT_CONFIG_OPTION_UNPATENTED_HINTING
+#elif defined TT_CONFIG_OPTION_UNPATENTED_HINTING
+#define TT_USE_BYTECODE_INTERPRETER
+#endif
+
+ FT_END_HEADER
+
+
+#endif /* __FTOPTION_H__ */
+
+
+/* END */
diff --git a/app/src/main/cpp/include/freetype2/freetype/config/ftstdlib.h b/app/src/main/cpp/include/freetype2/freetype/config/ftstdlib.h
new file mode 100644
index 0000000..658ac66
--- /dev/null
+++ b/app/src/main/cpp/include/freetype2/freetype/config/ftstdlib.h
@@ -0,0 +1,174 @@
+/***************************************************************************/
+/* */
+/* ftstdlib.h */
+/* */
+/* ANSI-specific library and header configuration file (specification */
+/* only). */
+/* */
+/* Copyright 2002-2007, 2009, 2011 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+/*************************************************************************/
+/* */
+/* This file is used to group all #includes to the ANSI C library that */
+/* FreeType normally requires. It also defines macros to rename the */
+/* standard functions within the FreeType source code. */
+/* */
+/* Load a file which defines __FTSTDLIB_H__ before this one to override */
+/* it. */
+/* */
+/*************************************************************************/
+
+
+#ifndef __FTSTDLIB_H__
+#define __FTSTDLIB_H__
+
+
+#include
+
+#define ft_ptrdiff_t ptrdiff_t
+
+
+/**********************************************************************/
+/* */
+/* integer limits */
+/* */
+/* UINT_MAX and ULONG_MAX are used to automatically compute the size */
+/* of `int' and `long' in bytes at compile-time. So far, this works */
+/* for all platforms the library has been tested on. */
+/* */
+/* Note that on the extremely rare platforms that do not provide */
+/* integer types that are _exactly_ 16 and 32 bits wide (e.g. some */
+/* old Crays where `int' is 36 bits), we do not make any guarantee */
+/* about the correct behaviour of FT2 with all fonts. */
+/* */
+/* In these case, `ftconfig.h' will refuse to compile anyway with a */
+/* message like `couldn't find 32-bit type' or something similar. */
+/* */
+/**********************************************************************/
+
+
+#include
+
+#define FT_CHAR_BIT CHAR_BIT
+#define FT_USHORT_MAX USHRT_MAX
+#define FT_INT_MAX INT_MAX
+#define FT_INT_MIN INT_MIN
+#define FT_UINT_MAX UINT_MAX
+#define FT_ULONG_MAX ULONG_MAX
+
+
+/**********************************************************************/
+/* */
+/* character and string processing */
+/* */
+/**********************************************************************/
+
+
+#include
+
+#define ft_memchr memchr
+#define ft_memcmp memcmp
+#define ft_memcpy memcpy
+#define ft_memmove memmove
+#define ft_memset memset
+#define ft_strcat strcat
+#define ft_strcmp strcmp
+#define ft_strcpy strcpy
+#define ft_strlen strlen
+#define ft_strncmp strncmp
+#define ft_strncpy strncpy
+#define ft_strrchr strrchr
+#define ft_strstr strstr
+
+
+/**********************************************************************/
+/* */
+/* file handling */
+/* */
+/**********************************************************************/
+
+
+#include
+
+#define FT_FILE FILE
+#define ft_fclose fclose
+#define ft_fopen fopen
+#define ft_fread fread
+#define ft_fseek fseek
+#define ft_ftell ftell
+#define ft_sprintf sprintf
+
+
+/**********************************************************************/
+/* */
+/* sorting */
+/* */
+/**********************************************************************/
+
+
+#include
+
+#define ft_qsort qsort
+
+
+/**********************************************************************/
+/* */
+/* memory allocation */
+/* */
+/**********************************************************************/
+
+
+#define ft_scalloc calloc
+#define ft_sfree free
+#define ft_smalloc malloc
+#define ft_srealloc realloc
+
+
+/**********************************************************************/
+/* */
+/* miscellaneous */
+/* */
+/**********************************************************************/
+
+
+#define ft_atol atol
+#define ft_labs labs
+
+
+/**********************************************************************/
+/* */
+/* execution control */
+/* */
+/**********************************************************************/
+
+
+#include
+
+#define ft_jmp_buf jmp_buf /* note: this cannot be a typedef since */
+/* jmp_buf is defined as a macro */
+/* on certain platforms */
+
+#define ft_longjmp longjmp
+#define ft_setjmp(b) setjmp( *(jmp_buf*) &(b) ) /* same thing here */
+
+
+/* the following is only used for debugging purposes, i.e., if */
+/* FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined */
+
+#include
+
+
+#endif /* __FTSTDLIB_H__ */
+
+
+/* END */
diff --git a/app/src/main/cpp/include/freetype2/freetype/freetype.h b/app/src/main/cpp/include/freetype2/freetype/freetype.h
new file mode 100644
index 0000000..4e5d2ec
--- /dev/null
+++ b/app/src/main/cpp/include/freetype2/freetype/freetype.h
@@ -0,0 +1,4044 @@
+/***************************************************************************/
+/* */
+/* freetype.h */
+/* */
+/* FreeType high-level API and common types (specification only). */
+/* */
+/* Copyright 1996-2012 by */
+/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* */
+/* This file is part of the FreeType project, and may only be used, */
+/* modified, and distributed under the terms of the FreeType project */
+/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
+/* this file you indicate that you have read the license and */
+/* understand and accept it fully. */
+/* */
+/***************************************************************************/
+
+
+#ifndef __FREETYPE_H__
+#define __FREETYPE_H__
+
+
+#ifndef FT_FREETYPE_H
+#error "`ft2build.h' hasn't been included yet!"
+#error "Please always use macros to include FreeType header files."
+#error "Example:"
+#error " #include "
+#error " #include FT_FREETYPE_H"
+#endif
+
+
+#include
+#include FT_CONFIG_CONFIG_H
+#include FT_ERRORS_H
+#include FT_TYPES_H
+
+
+FT_BEGIN_HEADER
+
+
+
+/*************************************************************************/
+/* */
+/* */
+/* user_allocation */
+/* */
+/* */
+/* User allocation */
+/* */
+/* */
+/* How client applications should allocate FreeType data structures. */
+/* */
+/* */
+/* FreeType assumes that structures allocated by the user and passed */
+/* as arguments are zeroed out except for the actual data. In other */
+/* words, it is recommended to use `calloc' (or variants of it) */
+/* instead of `malloc' for allocation. */
+/* */
+/*************************************************************************/
+
+
+
+/*************************************************************************/
+/*************************************************************************/
+/* */
+/* B A S I C T Y P E S */
+/* */
+/*************************************************************************/
+/*************************************************************************/
+
+
+/*************************************************************************/
+/* */
+/* */
+/* base_interface */
+/* */
+/* */
+/* Base Interface */
+/* */
+/* */
+/* The FreeType~2 base font interface. */
+/* */
+/* */
+/* This section describes the public high-level API of FreeType~2. */
+/* */
+/* */
+/* FT_Library */
+/* FT_Face */
+/* FT_Size */
+/* FT_GlyphSlot */
+/* FT_CharMap */
+/* FT_Encoding */
+/* */
+/* FT_FaceRec */
+/* */
+/* FT_FACE_FLAG_SCALABLE */
+/* FT_FACE_FLAG_FIXED_SIZES */
+/* FT_FACE_FLAG_FIXED_WIDTH */
+/* FT_FACE_FLAG_HORIZONTAL */
+/* FT_FACE_FLAG_VERTICAL */
+/* FT_FACE_FLAG_SFNT */
+/* FT_FACE_FLAG_KERNING */
+/* FT_FACE_FLAG_MULTIPLE_MASTERS */
+/* FT_FACE_FLAG_GLYPH_NAMES */
+/* FT_FACE_FLAG_EXTERNAL_STREAM */
+/* FT_FACE_FLAG_FAST_GLYPHS */
+/* FT_FACE_FLAG_HINTER */
+/* */
+/* FT_STYLE_FLAG_BOLD */
+/* FT_STYLE_FLAG_ITALIC */
+/* */
+/* FT_SizeRec */
+/* FT_Size_Metrics */
+/* */
+/* FT_GlyphSlotRec */
+/* FT_Glyph_Metrics */
+/* FT_SubGlyph */
+/* */
+/* FT_Bitmap_Size */
+/* */
+/* FT_Init_FreeType */
+/* FT_Done_FreeType */
+/* */
+/* FT_New_Face */
+/* FT_Done_Face */
+/* FT_New_Memory_Face */
+/* FT_Open_Face */
+/* FT_Open_Args */
+/* FT_Parameter */
+/* FT_Attach_File */
+/* FT_Attach_Stream */
+/* */
+/* FT_Set_Char_Size */
+/* FT_Set_Pixel_Sizes */
+/* FT_Request_Size */
+/* FT_Select_Size */
+/* FT_Size_Request_Type */
+/* FT_Size_Request */
+/* FT_Set_Transform */
+/* FT_Load_Glyph */
+/* FT_Get_Char_Index */
+/* FT_Get_Name_Index */
+/* FT_Load_Char */
+/* */
+/* FT_OPEN_MEMORY */
+/* FT_OPEN_STREAM */
+/* FT_OPEN_PATHNAME */
+/* FT_OPEN_DRIVER */
+/* FT_OPEN_PARAMS */
+/* */
+/* FT_LOAD_DEFAULT */
+/* FT_LOAD_RENDER */
+/* FT_LOAD_MONOCHROME */
+/* FT_LOAD_LINEAR_DESIGN */
+/* FT_LOAD_NO_SCALE */
+/* FT_LOAD_NO_HINTING */
+/* FT_LOAD_NO_BITMAP */
+/* FT_LOAD_CROP_BITMAP */
+/* */
+/* FT_LOAD_VERTICAL_LAYOUT */
+/* FT_LOAD_IGNORE_TRANSFORM */
+/* FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH */
+/* FT_LOAD_FORCE_AUTOHINT */
+/* FT_LOAD_NO_RECURSE */
+/* FT_LOAD_PEDANTIC */
+/* */
+/* FT_LOAD_TARGET_NORMAL */
+/* FT_LOAD_TARGET_LIGHT */
+/* FT_LOAD_TARGET_MONO */
+/* FT_LOAD_TARGET_LCD */
+/* FT_LOAD_TARGET_LCD_V */
+/* */
+/* FT_Render_Glyph */
+/* FT_Render_Mode */
+/* FT_Get_Kerning */
+/* FT_Kerning_Mode */
+/* FT_Get_Track_Kerning */
+/* FT_Get_Glyph_Name */
+/* FT_Get_Postscript_Name */
+/* */
+/* FT_CharMapRec */
+/* FT_Select_Charmap */
+/* FT_Set_Charmap */
+/* FT_Get_Charmap_Index */
+/* */
+/* FT_FSTYPE_INSTALLABLE_EMBEDDING */
+/* FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING */
+/* FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING */
+/* FT_FSTYPE_EDITABLE_EMBEDDING */
+/* FT_FSTYPE_NO_SUBSETTING */
+/* FT_FSTYPE_BITMAP_EMBEDDING_ONLY */
+/* */
+/* FT_Get_FSType_Flags */
+/* */
+/*************************************************************************/
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_Glyph_Metrics */
+/* */
+/* */
+/* A structure used to model the metrics of a single glyph. The */
+/* values are expressed in 26.6 fractional pixel format; if the flag */
+/* @FT_LOAD_NO_SCALE has been used while loading the glyph, values */
+/* are expressed in font units instead. */
+/* */
+/* */
+/* width :: */
+/* The glyph's width. */
+/* */
+/* height :: */
+/* The glyph's height. */
+/* */
+/* horiBearingX :: */
+/* Left side bearing for horizontal layout. */
+/* */
+/* horiBearingY :: */
+/* Top side bearing for horizontal layout. */
+/* */
+/* horiAdvance :: */
+/* Advance width for horizontal layout. */
+/* */
+/* vertBearingX :: */
+/* Left side bearing for vertical layout. */
+/* */
+/* vertBearingY :: */
+/* Top side bearing for vertical layout. Larger positive values */
+/* mean further below the vertical glyph origin. */
+/* */
+/* vertAdvance :: */
+/* Advance height for vertical layout. Positive values mean the */
+/* glyph has a positive advance downward. */
+/* */
+/* */
+/* If not disabled with @FT_LOAD_NO_HINTING, the values represent */
+/* dimensions of the hinted glyph (in case hinting is applicable). */
+/* */
+/* Stroking a glyph with an outside border does not increase */
+/* `horiAdvance' or `vertAdvance'; you have to manually adjust these */
+/* values to account for the added width and height. */
+/* */
+typedef struct FT_Glyph_Metrics_ {
+ FT_Pos width;
+ FT_Pos height;
+
+ FT_Pos horiBearingX;
+ FT_Pos horiBearingY;
+ FT_Pos horiAdvance;
+
+ FT_Pos vertBearingX;
+ FT_Pos vertBearingY;
+ FT_Pos vertAdvance;
+
+} FT_Glyph_Metrics;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_Bitmap_Size */
+/* */
+/* */
+/* This structure models the metrics of a bitmap strike (i.e., a set */
+/* of glyphs for a given point size and resolution) in a bitmap font. */
+/* It is used for the `available_sizes' field of @FT_Face. */
+/* */
+/* */
+/* height :: The vertical distance, in pixels, between two */
+/* consecutive baselines. It is always positive. */
+/* */
+/* width :: The average width, in pixels, of all glyphs in the */
+/* strike. */
+/* */
+/* size :: The nominal size of the strike in 26.6 fractional */
+/* points. This field is not very useful. */
+/* */
+/* x_ppem :: The horizontal ppem (nominal width) in 26.6 fractional */
+/* pixels. */
+/* */
+/* y_ppem :: The vertical ppem (nominal height) in 26.6 fractional */
+/* pixels. */
+/* */
+/* */
+/* Windows FNT: */
+/* The nominal size given in a FNT font is not reliable. Thus when */
+/* the driver finds it incorrect, it sets `size' to some calculated */
+/* values and sets `x_ppem' and `y_ppem' to the pixel width and */
+/* height given in the font, respectively. */
+/* */
+/* TrueType embedded bitmaps: */
+/* `size', `width', and `height' values are not contained in the */
+/* bitmap strike itself. They are computed from the global font */
+/* parameters. */
+/* */
+typedef struct FT_Bitmap_Size_ {
+ FT_Short height;
+ FT_Short width;
+
+ FT_Pos size;
+
+ FT_Pos x_ppem;
+ FT_Pos y_ppem;
+
+} FT_Bitmap_Size;
+
+
+/*************************************************************************/
+/*************************************************************************/
+/* */
+/* O B J E C T C L A S S E S */
+/* */
+/*************************************************************************/
+/*************************************************************************/
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_Library */
+/* */
+/* */
+/* A handle to a FreeType library instance. Each `library' is */
+/* completely independent from the others; it is the `root' of a set */
+/* of objects like fonts, faces, sizes, etc. */
+/* */
+/* It also embeds a memory manager (see @FT_Memory), as well as a */
+/* scan-line converter object (see @FT_Raster). */
+/* */
+/* For multi-threading applications each thread should have its own */
+/* FT_Library object. */
+/* */
+/* */
+/* Library objects are normally created by @FT_Init_FreeType, and */
+/* destroyed with @FT_Done_FreeType. */
+/* */
+typedef struct FT_LibraryRec_ *FT_Library;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_Module */
+/* */
+/* */
+/* A handle to a given FreeType module object. Each module can be a */
+/* font driver, a renderer, or anything else that provides services */
+/* to the formers. */
+/* */
+typedef struct FT_ModuleRec_ *FT_Module;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_Driver */
+/* */
+/* */
+/* A handle to a given FreeType font driver object. Each font driver */
+/* is a special module capable of creating faces from font files. */
+/* */
+typedef struct FT_DriverRec_ *FT_Driver;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_Renderer */
+/* */
+/* */
+/* A handle to a given FreeType renderer. A renderer is a special */
+/* module in charge of converting a glyph image to a bitmap, when */
+/* necessary. Each renderer supports a given glyph image format, and */
+/* one or more target surface depths. */
+/* */
+typedef struct FT_RendererRec_ *FT_Renderer;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_Face */
+/* */
+/* */
+/* A handle to a given typographic face object. A face object models */
+/* a given typeface, in a given style. */
+/* */
+/* */
+/* Each face object also owns a single @FT_GlyphSlot object, as well */
+/* as one or more @FT_Size objects. */
+/* */
+/* Use @FT_New_Face or @FT_Open_Face to create a new face object from */
+/* a given filepathname or a custom input stream. */
+/* */
+/* Use @FT_Done_Face to destroy it (along with its slot and sizes). */
+/* */
+/* */
+/* See @FT_FaceRec for the publicly accessible fields of a given face */
+/* object. */
+/* */
+typedef struct FT_FaceRec_ *FT_Face;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_Size */
+/* */
+/* */
+/* A handle to an object used to model a face scaled to a given */
+/* character size. */
+/* */
+/* */
+/* Each @FT_Face has an _active_ @FT_Size object that is used by */
+/* functions like @FT_Load_Glyph to determine the scaling */
+/* transformation which is used to load and hint glyphs and metrics. */
+/* */
+/* You can use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes, */
+/* @FT_Request_Size or even @FT_Select_Size to change the content */
+/* (i.e., the scaling values) of the active @FT_Size. */
+/* */
+/* You can use @FT_New_Size to create additional size objects for a */
+/* given @FT_Face, but they won't be used by other functions until */
+/* you activate it through @FT_Activate_Size. Only one size can be */
+/* activated at any given time per face. */
+/* */
+/* */
+/* See @FT_SizeRec for the publicly accessible fields of a given size */
+/* object. */
+/* */
+typedef struct FT_SizeRec_ *FT_Size;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_GlyphSlot */
+/* */
+/* */
+/* A handle to a given `glyph slot'. A slot is a container where it */
+/* is possible to load any of the glyphs contained in its parent */
+/* face. */
+/* */
+/* In other words, each time you call @FT_Load_Glyph or */
+/* @FT_Load_Char, the slot's content is erased by the new glyph data, */
+/* i.e., the glyph's metrics, its image (bitmap or outline), and */
+/* other control information. */
+/* */
+/* */
+/* See @FT_GlyphSlotRec for the publicly accessible glyph fields. */
+/* */
+typedef struct FT_GlyphSlotRec_ *FT_GlyphSlot;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_CharMap */
+/* */
+/* */
+/* A handle to a given character map. A charmap is used to translate */
+/* character codes in a given encoding into glyph indexes for its */
+/* parent's face. Some font formats may provide several charmaps per */
+/* font. */
+/* */
+/* Each face object owns zero or more charmaps, but only one of them */
+/* can be `active' and used by @FT_Get_Char_Index or @FT_Load_Char. */
+/* */
+/* The list of available charmaps in a face is available through the */
+/* `face->num_charmaps' and `face->charmaps' fields of @FT_FaceRec. */
+/* */
+/* The currently active charmap is available as `face->charmap'. */
+/* You should call @FT_Set_Charmap to change it. */
+/* */
+/* */
+/* When a new face is created (either through @FT_New_Face or */
+/* @FT_Open_Face), the library looks for a Unicode charmap within */
+/* the list and automatically activates it. */
+/* */
+/* */
+/* See @FT_CharMapRec for the publicly accessible fields of a given */
+/* character map. */
+/* */
+typedef struct FT_CharMapRec_ *FT_CharMap;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_ENC_TAG */
+/* */
+/* */
+/* This macro converts four-letter tags into an unsigned long. It is */
+/* used to define `encoding' identifiers (see @FT_Encoding). */
+/* */
+/* */
+/* Since many 16-bit compilers don't like 32-bit enumerations, you */
+/* should redefine this macro in case of problems to something like */
+/* this: */
+/* */
+/* { */
+/* #define FT_ENC_TAG( value, a, b, c, d ) value */
+/* } */
+/* */
+/* to get a simple enumeration without assigning special numbers. */
+/* */
+
+#ifndef FT_ENC_TAG
+#define FT_ENC_TAG(value, a, b, c, d) \
+ value = ( ( (FT_UInt32)(a) << 24 ) | \
+ ( (FT_UInt32)(b) << 16 ) | \
+ ( (FT_UInt32)(c) << 8 ) | \
+ (FT_UInt32)(d) )
+
+#endif /* FT_ENC_TAG */
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_Encoding */
+/* */
+/* */
+/* An enumeration used to specify character sets supported by */
+/* charmaps. Used in the @FT_Select_Charmap API function. */
+/* */
+/* */
+/* Despite the name, this enumeration lists specific character */
+/* repertories (i.e., charsets), and not text encoding methods (e.g., */
+/* UTF-8, UTF-16, etc.). */
+/* */
+/* Other encodings might be defined in the future. */
+/* */
+/* */
+/* FT_ENCODING_NONE :: */
+/* The encoding value~0 is reserved. */
+/* */
+/* FT_ENCODING_UNICODE :: */
+/* Corresponds to the Unicode character set. This value covers */
+/* all versions of the Unicode repertoire, including ASCII and */
+/* Latin-1. Most fonts include a Unicode charmap, but not all */
+/* of them. */
+/* */
+/* For example, if you want to access Unicode value U+1F028 (and */
+/* the font contains it), use value 0x1F028 as the input value for */
+/* @FT_Get_Char_Index. */
+/* */
+/* FT_ENCODING_MS_SYMBOL :: */
+/* Corresponds to the Microsoft Symbol encoding, used to encode */
+/* mathematical symbols in the 32..255 character code range. For */
+/* more information, see `http://www.ceviz.net/symbol.htm'. */
+/* */
+/* FT_ENCODING_SJIS :: */
+/* Corresponds to Japanese SJIS encoding. More info at */
+/* at `http://langsupport.japanreference.com/encoding.shtml'. */
+/* See note on multi-byte encodings below. */
+/* */
+/* FT_ENCODING_GB2312 :: */
+/* Corresponds to an encoding system for Simplified Chinese as used */
+/* used in mainland China. */
+/* */
+/* FT_ENCODING_BIG5 :: */
+/* Corresponds to an encoding system for Traditional Chinese as */
+/* used in Taiwan and Hong Kong. */
+/* */
+/* FT_ENCODING_WANSUNG :: */
+/* Corresponds to the Korean encoding system known as Wansung. */
+/* For more information see */
+/* `http://www.microsoft.com/typography/unicode/949.txt'. */
+/* */
+/* FT_ENCODING_JOHAB :: */
+/* The Korean standard character set (KS~C 5601-1992), which */
+/* corresponds to MS Windows code page 1361. This character set */
+/* includes all possible Hangeul character combinations. */
+/* */
+/* FT_ENCODING_ADOBE_LATIN_1 :: */
+/* Corresponds to a Latin-1 encoding as defined in a Type~1 */
+/* PostScript font. It is limited to 256 character codes. */
+/* */
+/* FT_ENCODING_ADOBE_STANDARD :: */
+/* Corresponds to the Adobe Standard encoding, as found in Type~1, */
+/* CFF, and OpenType/CFF fonts. It is limited to 256 character */
+/* codes. */
+/* */
+/* FT_ENCODING_ADOBE_EXPERT :: */
+/* Corresponds to the Adobe Expert encoding, as found in Type~1, */
+/* CFF, and OpenType/CFF fonts. It is limited to 256 character */
+/* codes. */
+/* */
+/* FT_ENCODING_ADOBE_CUSTOM :: */
+/* Corresponds to a custom encoding, as found in Type~1, CFF, and */
+/* OpenType/CFF fonts. It is limited to 256 character codes. */
+/* */
+/* FT_ENCODING_APPLE_ROMAN :: */
+/* Corresponds to the 8-bit Apple roman encoding. Many TrueType */
+/* and OpenType fonts contain a charmap for this encoding, since */
+/* older versions of Mac OS are able to use it. */
+/* */
+/* FT_ENCODING_OLD_LATIN_2 :: */
+/* This value is deprecated and was never used nor reported by */
+/* FreeType. Don't use or test for it. */
+/* */
+/* FT_ENCODING_MS_SJIS :: */
+/* Same as FT_ENCODING_SJIS. Deprecated. */
+/* */
+/* FT_ENCODING_MS_GB2312 :: */
+/* Same as FT_ENCODING_GB2312. Deprecated. */
+/* */
+/* FT_ENCODING_MS_BIG5 :: */
+/* Same as FT_ENCODING_BIG5. Deprecated. */
+/* */
+/* FT_ENCODING_MS_WANSUNG :: */
+/* Same as FT_ENCODING_WANSUNG. Deprecated. */
+/* */
+/* FT_ENCODING_MS_JOHAB :: */
+/* Same as FT_ENCODING_JOHAB. Deprecated. */
+/* */
+/* */
+/* By default, FreeType automatically synthesizes a Unicode charmap */
+/* for PostScript fonts, using their glyph names dictionaries. */
+/* However, it also reports the encodings defined explicitly in the */
+/* font file, for the cases when they are needed, with the Adobe */
+/* values as well. */
+/* */
+/* FT_ENCODING_NONE is set by the BDF and PCF drivers if the charmap */
+/* is neither Unicode nor ISO-8859-1 (otherwise it is set to */
+/* FT_ENCODING_UNICODE). Use @FT_Get_BDF_Charset_ID to find out */
+/* which encoding is really present. If, for example, the */
+/* `cs_registry' field is `KOI8' and the `cs_encoding' field is `R', */
+/* the font is encoded in KOI8-R. */
+/* */
+/* FT_ENCODING_NONE is always set (with a single exception) by the */
+/* winfonts driver. Use @FT_Get_WinFNT_Header and examine the */
+/* `charset' field of the @FT_WinFNT_HeaderRec structure to find out */
+/* which encoding is really present. For example, */
+/* @FT_WinFNT_ID_CP1251 (204) means Windows code page 1251 (for */
+/* Russian). */
+/* */
+/* FT_ENCODING_NONE is set if `platform_id' is @TT_PLATFORM_MACINTOSH */
+/* and `encoding_id' is not @TT_MAC_ID_ROMAN (otherwise it is set to */
+/* FT_ENCODING_APPLE_ROMAN). */
+/* */
+/* If `platform_id' is @TT_PLATFORM_MACINTOSH, use the function */
+/* @FT_Get_CMap_Language_ID to query the Mac language ID which may */
+/* be needed to be able to distinguish Apple encoding variants. See */
+/* */
+/* http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/README.TXT */
+/* */
+/* to get an idea how to do that. Basically, if the language ID */
+/* is~0, don't use it, otherwise subtract 1 from the language ID. */
+/* Then examine `encoding_id'. If, for example, `encoding_id' is */
+/* @TT_MAC_ID_ROMAN and the language ID (minus~1) is */
+/* `TT_MAC_LANGID_GREEK', it is the Greek encoding, not Roman. */
+/* @TT_MAC_ID_ARABIC with `TT_MAC_LANGID_FARSI' means the Farsi */
+/* variant the Arabic encoding. */
+/* */
+typedef enum FT_Encoding_ {
+ FT_ENC_TAG(FT_ENCODING_NONE, 0, 0, 0, 0),
+
+ FT_ENC_TAG(FT_ENCODING_MS_SYMBOL, 's', 'y', 'm', 'b'),
+ FT_ENC_TAG(FT_ENCODING_UNICODE, 'u', 'n', 'i', 'c'),
+
+ FT_ENC_TAG(FT_ENCODING_SJIS, 's', 'j', 'i', 's'),
+ FT_ENC_TAG(FT_ENCODING_GB2312, 'g', 'b', ' ', ' '),
+ FT_ENC_TAG(FT_ENCODING_BIG5, 'b', 'i', 'g', '5'),
+ FT_ENC_TAG(FT_ENCODING_WANSUNG, 'w', 'a', 'n', 's'),
+ FT_ENC_TAG(FT_ENCODING_JOHAB, 'j', 'o', 'h', 'a'),
+
+ /* for backwards compatibility */
+ FT_ENCODING_MS_SJIS = FT_ENCODING_SJIS,
+ FT_ENCODING_MS_GB2312 = FT_ENCODING_GB2312,
+ FT_ENCODING_MS_BIG5 = FT_ENCODING_BIG5,
+ FT_ENCODING_MS_WANSUNG = FT_ENCODING_WANSUNG,
+ FT_ENCODING_MS_JOHAB = FT_ENCODING_JOHAB,
+
+ FT_ENC_TAG(FT_ENCODING_ADOBE_STANDARD, 'A', 'D', 'O', 'B'),
+ FT_ENC_TAG(FT_ENCODING_ADOBE_EXPERT, 'A', 'D', 'B', 'E'),
+ FT_ENC_TAG(FT_ENCODING_ADOBE_CUSTOM, 'A', 'D', 'B', 'C'),
+ FT_ENC_TAG(FT_ENCODING_ADOBE_LATIN_1, 'l', 'a', 't', '1'),
+
+ FT_ENC_TAG(FT_ENCODING_OLD_LATIN_2, 'l', 'a', 't', '2'),
+
+ FT_ENC_TAG(FT_ENCODING_APPLE_ROMAN, 'a', 'r', 'm', 'n')
+
+} FT_Encoding;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* ft_encoding_xxx */
+/* */
+/* */
+/* These constants are deprecated; use the corresponding @FT_Encoding */
+/* values instead. */
+/* */
+#define ft_encoding_none FT_ENCODING_NONE
+#define ft_encoding_unicode FT_ENCODING_UNICODE
+#define ft_encoding_symbol FT_ENCODING_MS_SYMBOL
+#define ft_encoding_latin_1 FT_ENCODING_ADOBE_LATIN_1
+#define ft_encoding_latin_2 FT_ENCODING_OLD_LATIN_2
+#define ft_encoding_sjis FT_ENCODING_SJIS
+#define ft_encoding_gb2312 FT_ENCODING_GB2312
+#define ft_encoding_big5 FT_ENCODING_BIG5
+#define ft_encoding_wansung FT_ENCODING_WANSUNG
+#define ft_encoding_johab FT_ENCODING_JOHAB
+
+#define ft_encoding_adobe_standard FT_ENCODING_ADOBE_STANDARD
+#define ft_encoding_adobe_expert FT_ENCODING_ADOBE_EXPERT
+#define ft_encoding_adobe_custom FT_ENCODING_ADOBE_CUSTOM
+#define ft_encoding_apple_roman FT_ENCODING_APPLE_ROMAN
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_CharMapRec */
+/* */
+/* */
+/* The base charmap structure. */
+/* */
+/* */
+/* face :: A handle to the parent face object. */
+/* */
+/* encoding :: An @FT_Encoding tag identifying the charmap. Use */
+/* this with @FT_Select_Charmap. */
+/* */
+/* platform_id :: An ID number describing the platform for the */
+/* following encoding ID. This comes directly from */
+/* the TrueType specification and should be emulated */
+/* for other formats. */
+/* */
+/* encoding_id :: A platform specific encoding number. This also */
+/* comes from the TrueType specification and should be */
+/* emulated similarly. */
+/* */
+typedef struct FT_CharMapRec_ {
+ FT_Face face;
+ FT_Encoding encoding;
+ FT_UShort platform_id;
+ FT_UShort encoding_id;
+
+} FT_CharMapRec;
+
+
+/*************************************************************************/
+/*************************************************************************/
+/* */
+/* B A S E O B J E C T C L A S S E S */
+/* */
+/*************************************************************************/
+/*************************************************************************/
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_Face_Internal */
+/* */
+/* */
+/* An opaque handle to an `FT_Face_InternalRec' structure, used to */
+/* model private data of a given @FT_Face object. */
+/* */
+/* This structure might change between releases of FreeType~2 and is */
+/* not generally available to client applications. */
+/* */
+typedef struct FT_Face_InternalRec_ *FT_Face_Internal;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_FaceRec */
+/* */
+/* */
+/* FreeType root face class structure. A face object models a */
+/* typeface in a font file. */
+/* */
+/* */
+/* num_faces :: The number of faces in the font file. Some */
+/* font formats can have multiple faces in */
+/* a font file. */
+/* */
+/* face_index :: The index of the face in the font file. It */
+/* is set to~0 if there is only one face in */
+/* the font file. */
+/* */
+/* face_flags :: A set of bit flags that give important */
+/* information about the face; see */
+/* @FT_FACE_FLAG_XXX for the details. */
+/* */
+/* style_flags :: A set of bit flags indicating the style of */
+/* the face; see @FT_STYLE_FLAG_XXX for the */
+/* details. */
+/* */
+/* num_glyphs :: The number of glyphs in the face. If the */
+/* face is scalable and has sbits (see */
+/* `num_fixed_sizes'), it is set to the number */
+/* of outline glyphs. */
+/* */
+/* For CID-keyed fonts, this value gives the */
+/* highest CID used in the font. */
+/* */
+/* family_name :: The face's family name. This is an ASCII */
+/* string, usually in English, which describes */
+/* the typeface's family (like `Times New */
+/* Roman', `Bodoni', `Garamond', etc). This */
+/* is a least common denominator used to list */
+/* fonts. Some formats (TrueType & OpenType) */
+/* provide localized and Unicode versions of */
+/* this string. Applications should use the */
+/* format specific interface to access them. */
+/* Can be NULL (e.g., in fonts embedded in a */
+/* PDF file). */
+/* */
+/* style_name :: The face's style name. This is an ASCII */
+/* string, usually in English, which describes */
+/* the typeface's style (like `Italic', */
+/* `Bold', `Condensed', etc). Not all font */
+/* formats provide a style name, so this field */
+/* is optional, and can be set to NULL. As */
+/* for `family_name', some formats provide */
+/* localized and Unicode versions of this */
+/* string. Applications should use the format */
+/* specific interface to access them. */
+/* */
+/* num_fixed_sizes :: The number of bitmap strikes in the face. */
+/* Even if the face is scalable, there might */
+/* still be bitmap strikes, which are called */
+/* `sbits' in that case. */
+/* */
+/* available_sizes :: An array of @FT_Bitmap_Size for all bitmap */
+/* strikes in the face. It is set to NULL if */
+/* there is no bitmap strike. */
+/* */
+/* num_charmaps :: The number of charmaps in the face. */
+/* */
+/* charmaps :: An array of the charmaps of the face. */
+/* */
+/* generic :: A field reserved for client uses. See the */
+/* @FT_Generic type description. */
+/* */
+/* bbox :: The font bounding box. Coordinates are */
+/* expressed in font units (see */
+/* `units_per_EM'). The box is large enough */
+/* to contain any glyph from the font. Thus, */
+/* `bbox.yMax' can be seen as the `maximum */
+/* ascender', and `bbox.yMin' as the `minimum */
+/* descender'. Only relevant for scalable */
+/* formats. */
+/* */
+/* Note that the bounding box might be off by */
+/* (at least) one pixel for hinted fonts. See */
+/* @FT_Size_Metrics for further discussion. */
+/* */
+/* units_per_EM :: The number of font units per EM square for */
+/* this face. This is typically 2048 for */
+/* TrueType fonts, and 1000 for Type~1 fonts. */
+/* Only relevant for scalable formats. */
+/* */
+/* ascender :: The typographic ascender of the face, */
+/* expressed in font units. For font formats */
+/* not having this information, it is set to */
+/* `bbox.yMax'. Only relevant for scalable */
+/* formats. */
+/* */
+/* descender :: The typographic descender of the face, */
+/* expressed in font units. For font formats */
+/* not having this information, it is set to */
+/* `bbox.yMin'. Note that this field is */
+/* usually negative. Only relevant for */
+/* scalable formats. */
+/* */
+/* height :: The height is the vertical distance */
+/* between two consecutive baselines, */
+/* expressed in font units. It is always */
+/* positive. Only relevant for scalable */
+/* formats. */
+/* */
+/* max_advance_width :: The maximum advance width, in font units, */
+/* for all glyphs in this face. This can be */
+/* used to make word wrapping computations */
+/* faster. Only relevant for scalable */
+/* formats. */
+/* */
+/* max_advance_height :: The maximum advance height, in font units, */
+/* for all glyphs in this face. This is only */
+/* relevant for vertical layouts, and is set */
+/* to `height' for fonts that do not provide */
+/* vertical metrics. Only relevant for */
+/* scalable formats. */
+/* */
+/* underline_position :: The position, in font units, of the */
+/* underline line for this face. It is the */
+/* center of the underlining stem. Only */
+/* relevant for scalable formats. */
+/* */
+/* underline_thickness :: The thickness, in font units, of the */
+/* underline for this face. Only relevant for */
+/* scalable formats. */
+/* */
+/* glyph :: The face's associated glyph slot(s). */
+/* */
+/* size :: The current active size for this face. */
+/* */
+/* charmap :: The current active charmap for this face. */
+/* */
+/* */
+/* Fields may be changed after a call to @FT_Attach_File or */
+/* @FT_Attach_Stream. */
+/* */
+typedef struct FT_FaceRec_ {
+ FT_Long num_faces;
+ FT_Long face_index;
+
+ FT_Long face_flags;
+ FT_Long style_flags;
+
+ FT_Long num_glyphs;
+
+ FT_String *family_name;
+ FT_String *style_name;
+
+ FT_Int num_fixed_sizes;
+ FT_Bitmap_Size *available_sizes;
+
+ FT_Int num_charmaps;
+ FT_CharMap *charmaps;
+
+ FT_Generic generic;
+
+ /*# The following member variables (down to `underline_thickness') */
+ /*# are only relevant to scalable outlines; cf. @FT_Bitmap_Size */
+ /*# for bitmap fonts. */
+ FT_BBox bbox;
+
+ FT_UShort units_per_EM;
+ FT_Short ascender;
+ FT_Short descender;
+ FT_Short height;
+
+ FT_Short max_advance_width;
+ FT_Short max_advance_height;
+
+ FT_Short underline_position;
+ FT_Short underline_thickness;
+
+ FT_GlyphSlot glyph;
+ FT_Size size;
+ FT_CharMap charmap;
+
+ /*@private begin */
+
+ FT_Driver driver;
+ FT_Memory memory;
+ FT_Stream stream;
+
+ FT_ListRec sizes_list;
+
+ FT_Generic autohint; /* face-specific auto-hinter data */
+ void *extensions; /* unused */
+
+ FT_Face_Internal internal;
+
+ /*@private end */
+
+} FT_FaceRec;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_FACE_FLAG_XXX */
+/* */
+/* */
+/* A list of bit flags used in the `face_flags' field of the */
+/* @FT_FaceRec structure. They inform client applications of */
+/* properties of the corresponding face. */
+/* */
+/* */
+/* FT_FACE_FLAG_SCALABLE :: */
+/* Indicates that the face contains outline glyphs. This doesn't */
+/* prevent bitmap strikes, i.e., a face can have both this and */
+/* and @FT_FACE_FLAG_FIXED_SIZES set. */
+/* */
+/* FT_FACE_FLAG_FIXED_SIZES :: */
+/* Indicates that the face contains bitmap strikes. See also the */
+/* `num_fixed_sizes' and `available_sizes' fields of @FT_FaceRec. */
+/* */
+/* FT_FACE_FLAG_FIXED_WIDTH :: */
+/* Indicates that the face contains fixed-width characters (like */
+/* Courier, Lucido, MonoType, etc.). */
+/* */
+/* FT_FACE_FLAG_SFNT :: */
+/* Indicates that the face uses the `sfnt' storage scheme. For */
+/* now, this means TrueType and OpenType. */
+/* */
+/* FT_FACE_FLAG_HORIZONTAL :: */
+/* Indicates that the face contains horizontal glyph metrics. This */
+/* should be set for all common formats. */
+/* */
+/* FT_FACE_FLAG_VERTICAL :: */
+/* Indicates that the face contains vertical glyph metrics. This */
+/* is only available in some formats, not all of them. */
+/* */
+/* FT_FACE_FLAG_KERNING :: */
+/* Indicates that the face contains kerning information. If set, */
+/* the kerning distance can be retrieved through the function */
+/* @FT_Get_Kerning. Otherwise the function always return the */
+/* vector (0,0). Note that FreeType doesn't handle kerning data */
+/* from the `GPOS' table (as present in some OpenType fonts). */
+/* */
+/* FT_FACE_FLAG_FAST_GLYPHS :: */
+/* THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT. */
+/* */
+/* FT_FACE_FLAG_MULTIPLE_MASTERS :: */
+/* Indicates that the font contains multiple masters and is capable */
+/* of interpolating between them. See the multiple-masters */
+/* specific API for details. */
+/* */
+/* FT_FACE_FLAG_GLYPH_NAMES :: */
+/* Indicates that the font contains glyph names that can be */
+/* retrieved through @FT_Get_Glyph_Name. Note that some TrueType */
+/* fonts contain broken glyph name tables. Use the function */
+/* @FT_Has_PS_Glyph_Names when needed. */
+/* */
+/* FT_FACE_FLAG_EXTERNAL_STREAM :: */
+/* Used internally by FreeType to indicate that a face's stream was */
+/* provided by the client application and should not be destroyed */
+/* when @FT_Done_Face is called. Don't read or test this flag. */
+/* */
+/* FT_FACE_FLAG_HINTER :: */
+/* Set if the font driver has a hinting machine of its own. For */
+/* example, with TrueType fonts, it makes sense to use data from */
+/* the SFNT `gasp' table only if the native TrueType hinting engine */
+/* (with the bytecode interpreter) is available and active. */
+/* */
+/* FT_FACE_FLAG_CID_KEYED :: */
+/* Set if the font is CID-keyed. In that case, the font is not */
+/* accessed by glyph indices but by CID values. For subsetted */
+/* CID-keyed fonts this has the consequence that not all index */
+/* values are a valid argument to FT_Load_Glyph. Only the CID */
+/* values for which corresponding glyphs in the subsetted font */
+/* exist make FT_Load_Glyph return successfully; in all other cases */
+/* you get an `FT_Err_Invalid_Argument' error. */
+/* */
+/* Note that CID-keyed fonts which are in an SFNT wrapper don't */
+/* have this flag set since the glyphs are accessed in the normal */
+/* way (using contiguous indices); the `CID-ness' isn't visible to */
+/* the application. */
+/* */
+/* FT_FACE_FLAG_TRICKY :: */
+/* Set if the font is `tricky', this is, it always needs the */
+/* font format's native hinting engine to get a reasonable result. */
+/* A typical example is the Chinese font `mingli.ttf' which uses */
+/* TrueType bytecode instructions to move and scale all of its */
+/* subglyphs. */
+/* */
+/* It is not possible to autohint such fonts using */
+/* @FT_LOAD_FORCE_AUTOHINT; it will also ignore */
+/* @FT_LOAD_NO_HINTING. You have to set both @FT_LOAD_NO_HINTING */
+/* and @FT_LOAD_NO_AUTOHINT to really disable hinting; however, you */
+/* probably never want this except for demonstration purposes. */
+/* */
+/* Currently, there are about a dozen TrueType fonts in the list of */
+/* tricky fonts; they are hard-coded in file `ttobjs.c'. */
+/* */
+#define FT_FACE_FLAG_SCALABLE ( 1L << 0 )
+#define FT_FACE_FLAG_FIXED_SIZES ( 1L << 1 )
+#define FT_FACE_FLAG_FIXED_WIDTH ( 1L << 2 )
+#define FT_FACE_FLAG_SFNT ( 1L << 3 )
+#define FT_FACE_FLAG_HORIZONTAL ( 1L << 4 )
+#define FT_FACE_FLAG_VERTICAL ( 1L << 5 )
+#define FT_FACE_FLAG_KERNING ( 1L << 6 )
+#define FT_FACE_FLAG_FAST_GLYPHS ( 1L << 7 )
+#define FT_FACE_FLAG_MULTIPLE_MASTERS ( 1L << 8 )
+#define FT_FACE_FLAG_GLYPH_NAMES ( 1L << 9 )
+#define FT_FACE_FLAG_EXTERNAL_STREAM ( 1L << 10 )
+#define FT_FACE_FLAG_HINTER ( 1L << 11 )
+#define FT_FACE_FLAG_CID_KEYED ( 1L << 12 )
+#define FT_FACE_FLAG_TRICKY ( 1L << 13 )
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_HAS_HORIZONTAL( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains
+ * horizontal metrics (this is true for all font formats though).
+ *
+ * @also:
+ * @FT_HAS_VERTICAL can be used to check for vertical metrics.
+ *
+ */
+#define FT_HAS_HORIZONTAL(face) \
+ ( face->face_flags & FT_FACE_FLAG_HORIZONTAL )
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_HAS_VERTICAL( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains vertical
+ * metrics.
+ *
+ */
+#define FT_HAS_VERTICAL(face) \
+ ( face->face_flags & FT_FACE_FLAG_VERTICAL )
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_HAS_KERNING( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains kerning
+ * data that can be accessed with @FT_Get_Kerning.
+ *
+ */
+#define FT_HAS_KERNING(face) \
+ ( face->face_flags & FT_FACE_FLAG_KERNING )
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_IS_SCALABLE( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains a scalable
+ * font face (true for TrueType, Type~1, Type~42, CID, OpenType/CFF,
+ * and PFR font formats.
+ *
+ */
+#define FT_IS_SCALABLE(face) \
+ ( face->face_flags & FT_FACE_FLAG_SCALABLE )
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_IS_SFNT( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains a font
+ * whose format is based on the SFNT storage scheme. This usually
+ * means: TrueType fonts, OpenType fonts, as well as SFNT-based embedded
+ * bitmap fonts.
+ *
+ * If this macro is true, all functions defined in @FT_SFNT_NAMES_H and
+ * @FT_TRUETYPE_TABLES_H are available.
+ *
+ */
+#define FT_IS_SFNT(face) \
+ ( face->face_flags & FT_FACE_FLAG_SFNT )
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_IS_FIXED_WIDTH( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains a font face
+ * that contains fixed-width (or `monospace', `fixed-pitch', etc.)
+ * glyphs.
+ *
+ */
+#define FT_IS_FIXED_WIDTH(face) \
+ ( face->face_flags & FT_FACE_FLAG_FIXED_WIDTH )
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_HAS_FIXED_SIZES( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains some
+ * embedded bitmaps. See the `available_sizes' field of the
+ * @FT_FaceRec structure.
+ *
+ */
+#define FT_HAS_FIXED_SIZES(face) \
+ ( face->face_flags & FT_FACE_FLAG_FIXED_SIZES )
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_HAS_FAST_GLYPHS( face )
+ *
+ * @description:
+ * Deprecated.
+ *
+ */
+#define FT_HAS_FAST_GLYPHS(face) 0
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_HAS_GLYPH_NAMES( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains some glyph
+ * names that can be accessed through @FT_Get_Glyph_Name.
+ *
+ */
+#define FT_HAS_GLYPH_NAMES(face) \
+ ( face->face_flags & FT_FACE_FLAG_GLYPH_NAMES )
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_HAS_MULTIPLE_MASTERS( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains some
+ * multiple masters. The functions provided by @FT_MULTIPLE_MASTERS_H
+ * are then available to choose the exact design you want.
+ *
+ */
+#define FT_HAS_MULTIPLE_MASTERS(face) \
+ ( face->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS )
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_IS_CID_KEYED( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face object contains a CID-keyed
+ * font. See the discussion of @FT_FACE_FLAG_CID_KEYED for more
+ * details.
+ *
+ * If this macro is true, all functions defined in @FT_CID_H are
+ * available.
+ *
+ */
+#define FT_IS_CID_KEYED(face) \
+ ( face->face_flags & FT_FACE_FLAG_CID_KEYED )
+
+
+/*************************************************************************
+ *
+ * @macro:
+ * FT_IS_TRICKY( face )
+ *
+ * @description:
+ * A macro that returns true whenever a face represents a `tricky' font.
+ * See the discussion of @FT_FACE_FLAG_TRICKY for more details.
+ *
+ */
+#define FT_IS_TRICKY(face) \
+ ( face->face_flags & FT_FACE_FLAG_TRICKY )
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_STYLE_FLAG_XXX */
+/* */
+/* */
+/* A list of bit-flags used to indicate the style of a given face. */
+/* These are used in the `style_flags' field of @FT_FaceRec. */
+/* */
+/* */
+/* FT_STYLE_FLAG_ITALIC :: */
+/* Indicates that a given face style is italic or oblique. */
+/* */
+/* FT_STYLE_FLAG_BOLD :: */
+/* Indicates that a given face is bold. */
+/* */
+/* */
+/* The style information as provided by FreeType is very basic. More */
+/* details are beyond the scope and should be done on a higher level */
+/* (for example, by analyzing various fields of the `OS/2' table in */
+/* SFNT based fonts). */
+/* */
+#define FT_STYLE_FLAG_ITALIC ( 1 << 0 )
+#define FT_STYLE_FLAG_BOLD ( 1 << 1 )
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_Size_Internal */
+/* */
+/* */
+/* An opaque handle to an `FT_Size_InternalRec' structure, used to */
+/* model private data of a given @FT_Size object. */
+/* */
+typedef struct FT_Size_InternalRec_ *FT_Size_Internal;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_Size_Metrics */
+/* */
+/* */
+/* The size metrics structure gives the metrics of a size object. */
+/* */
+/* */
+/* x_ppem :: The width of the scaled EM square in pixels, hence */
+/* the term `ppem' (pixels per EM). It is also */
+/* referred to as `nominal width'. */
+/* */
+/* y_ppem :: The height of the scaled EM square in pixels, */
+/* hence the term `ppem' (pixels per EM). It is also */
+/* referred to as `nominal height'. */
+/* */
+/* x_scale :: A 16.16 fractional scaling value used to convert */
+/* horizontal metrics from font units to 26.6 */
+/* fractional pixels. Only relevant for scalable */
+/* font formats. */
+/* */
+/* y_scale :: A 16.16 fractional scaling value used to convert */
+/* vertical metrics from font units to 26.6 */
+/* fractional pixels. Only relevant for scalable */
+/* font formats. */
+/* */
+/* ascender :: The ascender in 26.6 fractional pixels. See */
+/* @FT_FaceRec for the details. */
+/* */
+/* descender :: The descender in 26.6 fractional pixels. See */
+/* @FT_FaceRec for the details. */
+/* */
+/* height :: The height in 26.6 fractional pixels. See */
+/* @FT_FaceRec for the details. */
+/* */
+/* max_advance :: The maximum advance width in 26.6 fractional */
+/* pixels. See @FT_FaceRec for the details. */
+/* */
+/* */
+/* The scaling values, if relevant, are determined first during a */
+/* size changing operation. The remaining fields are then set by the */
+/* driver. For scalable formats, they are usually set to scaled */
+/* values of the corresponding fields in @FT_FaceRec. */
+/* */
+/* Note that due to glyph hinting, these values might not be exact */
+/* for certain fonts. Thus they must be treated as unreliable */
+/* with an error margin of at least one pixel! */
+/* */
+/* Indeed, the only way to get the exact metrics is to render _all_ */
+/* glyphs. As this would be a definite performance hit, it is up to */
+/* client applications to perform such computations. */
+/* */
+/* The FT_Size_Metrics structure is valid for bitmap fonts also. */
+/* */
+typedef struct FT_Size_Metrics_ {
+ FT_UShort x_ppem; /* horizontal pixels per EM */
+ FT_UShort y_ppem; /* vertical pixels per EM */
+
+ FT_Fixed x_scale; /* scaling values used to convert font */
+ FT_Fixed y_scale; /* units to 26.6 fractional pixels */
+
+ FT_Pos ascender; /* ascender in 26.6 frac. pixels */
+ FT_Pos descender; /* descender in 26.6 frac. pixels */
+ FT_Pos height; /* text height in 26.6 frac. pixels */
+ FT_Pos max_advance; /* max horizontal advance, in 26.6 pixels */
+
+} FT_Size_Metrics;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_SizeRec */
+/* */
+/* */
+/* FreeType root size class structure. A size object models a face */
+/* object at a given size. */
+/* */
+/* */
+/* face :: Handle to the parent face object. */
+/* */
+/* generic :: A typeless pointer, which is unused by the FreeType */
+/* library or any of its drivers. It can be used by */
+/* client applications to link their own data to each size */
+/* object. */
+/* */
+/* metrics :: Metrics for this size object. This field is read-only. */
+/* */
+typedef struct FT_SizeRec_ {
+ FT_Face face; /* parent face object */
+ FT_Generic generic; /* generic pointer for client uses */
+ FT_Size_Metrics metrics; /* size metrics */
+ FT_Size_Internal internal;
+
+} FT_SizeRec;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_SubGlyph */
+/* */
+/* */
+/* The subglyph structure is an internal object used to describe */
+/* subglyphs (for example, in the case of composites). */
+/* */
+/* */
+/* The subglyph implementation is not part of the high-level API, */
+/* hence the forward structure declaration. */
+/* */
+/* You can however retrieve subglyph information with */
+/* @FT_Get_SubGlyph_Info. */
+/* */
+typedef struct FT_SubGlyphRec_ *FT_SubGlyph;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_Slot_Internal */
+/* */
+/* */
+/* An opaque handle to an `FT_Slot_InternalRec' structure, used to */
+/* model private data of a given @FT_GlyphSlot object. */
+/* */
+typedef struct FT_Slot_InternalRec_ *FT_Slot_Internal;
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_GlyphSlotRec */
+/* */
+/* */
+/* FreeType root glyph slot class structure. A glyph slot is a */
+/* container where individual glyphs can be loaded, be they in */
+/* outline or bitmap format. */
+/* */
+/* */
+/* library :: A handle to the FreeType library instance */
+/* this slot belongs to. */
+/* */
+/* face :: A handle to the parent face object. */
+/* */
+/* next :: In some cases (like some font tools), several */
+/* glyph slots per face object can be a good */
+/* thing. As this is rare, the glyph slots are */
+/* listed through a direct, single-linked list */
+/* using its `next' field. */
+/* */
+/* generic :: A typeless pointer which is unused by the */
+/* FreeType library or any of its drivers. It */
+/* can be used by client applications to link */
+/* their own data to each glyph slot object. */
+/* */
+/* metrics :: The metrics of the last loaded glyph in the */
+/* slot. The returned values depend on the last */
+/* load flags (see the @FT_Load_Glyph API */
+/* function) and can be expressed either in 26.6 */
+/* fractional pixels or font units. */
+/* */
+/* Note that even when the glyph image is */
+/* transformed, the metrics are not. */
+/* */
+/* linearHoriAdvance :: The advance width of the unhinted glyph. */
+/* Its value is expressed in 16.16 fractional */
+/* pixels, unless @FT_LOAD_LINEAR_DESIGN is set */
+/* when loading the glyph. This field can be */
+/* important to perform correct WYSIWYG layout. */
+/* Only relevant for outline glyphs. */
+/* */
+/* linearVertAdvance :: The advance height of the unhinted glyph. */
+/* Its value is expressed in 16.16 fractional */
+/* pixels, unless @FT_LOAD_LINEAR_DESIGN is set */
+/* when loading the glyph. This field can be */
+/* important to perform correct WYSIWYG layout. */
+/* Only relevant for outline glyphs. */
+/* */
+/* advance :: This shorthand is, depending on */
+/* @FT_LOAD_IGNORE_TRANSFORM, the transformed */
+/* advance width for the glyph (in 26.6 */
+/* fractional pixel format). As specified with */
+/* @FT_LOAD_VERTICAL_LAYOUT, it uses either the */
+/* `horiAdvance' or the `vertAdvance' value of */
+/* `metrics' field. */
+/* */
+/* format :: This field indicates the format of the image */
+/* contained in the glyph slot. Typically */
+/* @FT_GLYPH_FORMAT_BITMAP, */
+/* @FT_GLYPH_FORMAT_OUTLINE, or */
+/* @FT_GLYPH_FORMAT_COMPOSITE, but others are */
+/* possible. */
+/* */
+/* bitmap :: This field is used as a bitmap descriptor */
+/* when the slot format is */
+/* @FT_GLYPH_FORMAT_BITMAP. Note that the */
+/* address and content of the bitmap buffer can */
+/* change between calls of @FT_Load_Glyph and a */
+/* few other functions. */
+/* */
+/* bitmap_left :: This is the bitmap's left bearing expressed */
+/* in integer pixels. Of course, this is only */
+/* valid if the format is */
+/* @FT_GLYPH_FORMAT_BITMAP. */
+/* */
+/* bitmap_top :: This is the bitmap's top bearing expressed in */
+/* integer pixels. Remember that this is the */
+/* distance from the baseline to the top-most */
+/* glyph scanline, upwards y~coordinates being */
+/* *positive*. */
+/* */
+/* outline :: The outline descriptor for the current glyph */
+/* image if its format is */
+/* @FT_GLYPH_FORMAT_OUTLINE. Once a glyph is */
+/* loaded, `outline' can be transformed, */
+/* distorted, embolded, etc. However, it must */
+/* not be freed. */
+/* */
+/* num_subglyphs :: The number of subglyphs in a composite glyph. */
+/* This field is only valid for the composite */
+/* glyph format that should normally only be */
+/* loaded with the @FT_LOAD_NO_RECURSE flag. */
+/* For now this is internal to FreeType. */
+/* */
+/* subglyphs :: An array of subglyph descriptors for */
+/* composite glyphs. There are `num_subglyphs' */
+/* elements in there. Currently internal to */
+/* FreeType. */
+/* */
+/* control_data :: Certain font drivers can also return the */
+/* control data for a given glyph image (e.g. */
+/* TrueType bytecode, Type~1 charstrings, etc.). */
+/* This field is a pointer to such data. */
+/* */
+/* control_len :: This is the length in bytes of the control */
+/* data. */
+/* */
+/* other :: Really wicked formats can use this pointer to */
+/* present their own glyph image to client */
+/* applications. Note that the application */
+/* needs to know about the image format. */
+/* */
+/* lsb_delta :: The difference between hinted and unhinted */
+/* left side bearing while autohinting is */
+/* active. Zero otherwise. */
+/* */
+/* rsb_delta :: The difference between hinted and unhinted */
+/* right side bearing while autohinting is */
+/* active. Zero otherwise. */
+/* */
+/* */
+/* If @FT_Load_Glyph is called with default flags (see */
+/* @FT_LOAD_DEFAULT) the glyph image is loaded in the glyph slot in */
+/* its native format (e.g., an outline glyph for TrueType and Type~1 */
+/* formats). */
+/* */
+/* This image can later be converted into a bitmap by calling */
+/* @FT_Render_Glyph. This function finds the current renderer for */
+/* the native image's format, then invokes it. */
+/* */
+/* The renderer is in charge of transforming the native image through */
+/* the slot's face transformation fields, then converting it into a */
+/* bitmap that is returned in `slot->bitmap'. */
+/* */
+/* Note that `slot->bitmap_left' and `slot->bitmap_top' are also used */
+/* to specify the position of the bitmap relative to the current pen */
+/* position (e.g., coordinates (0,0) on the baseline). Of course, */
+/* `slot->format' is also changed to @FT_GLYPH_FORMAT_BITMAP. */
+/* */
+/* */
+/* Here a small pseudo code fragment which shows how to use */
+/* `lsb_delta' and `rsb_delta': */
+/* */
+/* { */
+/* FT_Pos origin_x = 0; */
+/* FT_Pos prev_rsb_delta = 0; */
+/* */
+/* */
+/* for all glyphs do */
+/* */
+/* */
+/* */
+/* */
+/* if ( prev_rsb_delta - face->glyph->lsb_delta >= 32 ) */
+/* origin_x -= 64; */
+/* else if ( prev_rsb_delta - face->glyph->lsb_delta < -32 ) */
+/* origin_x += 64; */
+/* */
+/* prev_rsb_delta = face->glyph->rsb_delta; */
+/* */
+/* */
+/* */
+/* origin_x += face->glyph->advance.x; */
+/* endfor */
+/* } */
+/* */
+typedef struct FT_GlyphSlotRec_ {
+ FT_Library library;
+ FT_Face face;
+ FT_GlyphSlot next;
+ FT_UInt reserved; /* retained for binary compatibility */
+ FT_Generic generic;
+
+ FT_Glyph_Metrics metrics;
+ FT_Fixed linearHoriAdvance;
+ FT_Fixed linearVertAdvance;
+ FT_Vector advance;
+
+ FT_Glyph_Format format;
+
+ FT_Bitmap bitmap;
+ FT_Int bitmap_left;
+ FT_Int bitmap_top;
+
+ FT_Outline outline;
+
+ FT_UInt num_subglyphs;
+ FT_SubGlyph subglyphs;
+
+ void *control_data;
+ long control_len;
+
+ FT_Pos lsb_delta;
+ FT_Pos rsb_delta;
+
+ void *other;
+
+ FT_Slot_Internal internal;
+
+} FT_GlyphSlotRec;
+
+
+/*************************************************************************/
+/*************************************************************************/
+/* */
+/* F U N C T I O N S */
+/* */
+/*************************************************************************/
+/*************************************************************************/
+
+
+/*************************************************************************/
+/* */
+/* */
+/* FT_Init_FreeType */
+/* */
+/* */
+/* Initialize a new FreeType library object. The set of modules */
+/* that are registered by this function is determined at build time. */
+/* */
+/*