Full Code of iodefog/MVideo for AI

master e2883da38619 cached
277 files
113.0 MB
886.1k tokens
1004 symbols
1 requests
Download .txt
Showing preview only (3,545K chars total). Download the full file or copy to clipboard to get everything.
Repository: iodefog/MVideo
Branch: master
Commit: e2883da38619
Files: 277
Total size: 113.0 MB

Directory structure:
gitextract_ujeamsu3/

├── .gitattributes
├── .gitignore
├── 3rParty/
│   ├── FFmpeg/
│   │   ├── include/
│   │   │   ├── libavcodec/
│   │   │   │   ├── avcodec.h
│   │   │   │   ├── avdct.h
│   │   │   │   ├── avfft.h
│   │   │   │   ├── d3d11va.h
│   │   │   │   ├── dirac.h
│   │   │   │   ├── dv_profile.h
│   │   │   │   ├── dxva2.h
│   │   │   │   ├── jni.h
│   │   │   │   ├── mediacodec.h
│   │   │   │   ├── qsv.h
│   │   │   │   ├── vaapi.h
│   │   │   │   ├── vda.h
│   │   │   │   ├── vdpau.h
│   │   │   │   ├── version.h
│   │   │   │   ├── videotoolbox.h
│   │   │   │   ├── vorbis_parser.h
│   │   │   │   └── xvmc.h
│   │   │   ├── libavfilter/
│   │   │   │   ├── avfilter.h
│   │   │   │   ├── avfiltergraph.h
│   │   │   │   ├── buffersink.h
│   │   │   │   ├── buffersrc.h
│   │   │   │   └── version.h
│   │   │   ├── libavformat/
│   │   │   │   ├── avc.h
│   │   │   │   ├── avformat.h
│   │   │   │   ├── avio.h
│   │   │   │   ├── internal.h
│   │   │   │   ├── url.h
│   │   │   │   └── version.h
│   │   │   ├── libavutil/
│   │   │   │   ├── adler32.h
│   │   │   │   ├── aes.h
│   │   │   │   ├── aes_ctr.h
│   │   │   │   ├── application.h
│   │   │   │   ├── arm64/
│   │   │   │   │   ├── avconfig.h
│   │   │   │   │   └── ffversion.h
│   │   │   │   ├── armv7/
│   │   │   │   │   ├── avconfig.h
│   │   │   │   │   └── ffversion.h
│   │   │   │   ├── attributes.h
│   │   │   │   ├── audio_fifo.h
│   │   │   │   ├── avassert.h
│   │   │   │   ├── avconfig.h
│   │   │   │   ├── avstring.h
│   │   │   │   ├── avutil.h
│   │   │   │   ├── base64.h
│   │   │   │   ├── blowfish.h
│   │   │   │   ├── bprint.h
│   │   │   │   ├── bswap.h
│   │   │   │   ├── buffer.h
│   │   │   │   ├── camellia.h
│   │   │   │   ├── cast5.h
│   │   │   │   ├── channel_layout.h
│   │   │   │   ├── common.h
│   │   │   │   ├── cpu.h
│   │   │   │   ├── crc.h
│   │   │   │   ├── des.h
│   │   │   │   ├── dict.h
│   │   │   │   ├── display.h
│   │   │   │   ├── downmix_info.h
│   │   │   │   ├── error.h
│   │   │   │   ├── eval.h
│   │   │   │   ├── ffversion.h
│   │   │   │   ├── fifo.h
│   │   │   │   ├── file.h
│   │   │   │   ├── frame.h
│   │   │   │   ├── hash.h
│   │   │   │   ├── hmac.h
│   │   │   │   ├── hwcontext.h
│   │   │   │   ├── hwcontext_cuda.h
│   │   │   │   ├── hwcontext_dxva2.h
│   │   │   │   ├── hwcontext_qsv.h
│   │   │   │   ├── hwcontext_vaapi.h
│   │   │   │   ├── hwcontext_vdpau.h
│   │   │   │   ├── i386/
│   │   │   │   │   ├── avconfig.h
│   │   │   │   │   └── ffversion.h
│   │   │   │   ├── imgutils.h
│   │   │   │   ├── intfloat.h
│   │   │   │   ├── intreadwrite.h
│   │   │   │   ├── lfg.h
│   │   │   │   ├── log.h
│   │   │   │   ├── macros.h
│   │   │   │   ├── mastering_display_metadata.h
│   │   │   │   ├── mathematics.h
│   │   │   │   ├── md5.h
│   │   │   │   ├── mem.h
│   │   │   │   ├── motion_vector.h
│   │   │   │   ├── murmur3.h
│   │   │   │   ├── opt.h
│   │   │   │   ├── parseutils.h
│   │   │   │   ├── pixdesc.h
│   │   │   │   ├── pixelutils.h
│   │   │   │   ├── pixfmt.h
│   │   │   │   ├── random_seed.h
│   │   │   │   ├── rational.h
│   │   │   │   ├── rc4.h
│   │   │   │   ├── replaygain.h
│   │   │   │   ├── ripemd.h
│   │   │   │   ├── samplefmt.h
│   │   │   │   ├── sha.h
│   │   │   │   ├── sha512.h
│   │   │   │   ├── stereo3d.h
│   │   │   │   ├── tea.h
│   │   │   │   ├── thread.h
│   │   │   │   ├── threadmessage.h
│   │   │   │   ├── time.h
│   │   │   │   ├── timecode.h
│   │   │   │   ├── timestamp.h
│   │   │   │   ├── tree.h
│   │   │   │   ├── twofish.h
│   │   │   │   ├── version.h
│   │   │   │   ├── x86_64/
│   │   │   │   │   ├── avconfig.h
│   │   │   │   │   └── ffversion.h
│   │   │   │   └── xtea.h
│   │   │   ├── libffmpeg/
│   │   │   │   ├── arm64/
│   │   │   │   │   └── config.h
│   │   │   │   ├── armv7/
│   │   │   │   │   └── config.h
│   │   │   │   ├── config.h
│   │   │   │   ├── i386/
│   │   │   │   │   └── config.h
│   │   │   │   └── x86_64/
│   │   │   │       └── config.h
│   │   │   ├── libswresample/
│   │   │   │   ├── swresample.h
│   │   │   │   └── version.h
│   │   │   ├── libswscale/
│   │   │   │   ├── swscale.h
│   │   │   │   └── version.h
│   │   │   └── openssl/
│   │   │       ├── aes.h
│   │   │       ├── asn1.h
│   │   │       ├── asn1_mac.h
│   │   │       ├── asn1t.h
│   │   │       ├── bio.h
│   │   │       ├── blowfish.h
│   │   │       ├── bn.h
│   │   │       ├── buffer.h
│   │   │       ├── camellia.h
│   │   │       ├── cast.h
│   │   │       ├── cmac.h
│   │   │       ├── cms.h
│   │   │       ├── comp.h
│   │   │       ├── conf.h
│   │   │       ├── conf_api.h
│   │   │       ├── crypto.h
│   │   │       ├── des.h
│   │   │       ├── des_old.h
│   │   │       ├── dh.h
│   │   │       ├── dsa.h
│   │   │       ├── dso.h
│   │   │       ├── dtls1.h
│   │   │       ├── e_os2.h
│   │   │       ├── ebcdic.h
│   │   │       ├── ec.h
│   │   │       ├── ecdh.h
│   │   │       ├── ecdsa.h
│   │   │       ├── engine.h
│   │   │       ├── err.h
│   │   │       ├── evp.h
│   │   │       ├── hmac.h
│   │   │       ├── idea.h
│   │   │       ├── krb5_asn.h
│   │   │       ├── kssl.h
│   │   │       ├── lhash.h
│   │   │       ├── md4.h
│   │   │       ├── md5.h
│   │   │       ├── mdc2.h
│   │   │       ├── modes.h
│   │   │       ├── obj_mac.h
│   │   │       ├── objects.h
│   │   │       ├── ocsp.h
│   │   │       ├── opensslconf.h
│   │   │       ├── opensslv.h
│   │   │       ├── ossl_typ.h
│   │   │       ├── pem.h
│   │   │       ├── pem2.h
│   │   │       ├── pkcs12.h
│   │   │       ├── pkcs7.h
│   │   │       ├── pqueue.h
│   │   │       ├── rand.h
│   │   │       ├── rc2.h
│   │   │       ├── rc4.h
│   │   │       ├── ripemd.h
│   │   │       ├── rsa.h
│   │   │       ├── safestack.h
│   │   │       ├── seed.h
│   │   │       ├── sha.h
│   │   │       ├── srp.h
│   │   │       ├── srtp.h
│   │   │       ├── ssl.h
│   │   │       ├── ssl2.h
│   │   │       ├── ssl23.h
│   │   │       ├── ssl3.h
│   │   │       ├── stack.h
│   │   │       ├── symhacks.h
│   │   │       ├── tls1.h
│   │   │       ├── ts.h
│   │   │       ├── txt_db.h
│   │   │       ├── ui.h
│   │   │       ├── ui_compat.h
│   │   │       ├── whrlpool.h
│   │   │       ├── x509.h
│   │   │       ├── x509_vfy.h
│   │   │       └── x509v3.h
│   │   └── lib/
│   │       ├── libavcodec.a
│   │       ├── libavfilter.a
│   │       ├── libavformat.a
│   │       ├── libavutil.a
│   │       ├── libcrypto.a
│   │       ├── libssl.a
│   │       ├── libswresample.a
│   │       └── libswscale.a
│   └── kxmovie/
│       ├── KxAudioManager.h
│       ├── KxAudioManager.m
│       ├── KxLogger.h
│       ├── KxMovieDecoder.h
│       ├── KxMovieDecoder.m
│       ├── KxMovieGLView.h
│       ├── KxMovieGLView.m
│       ├── KxMovieViewController.h
│       ├── KxMovieViewController.m
│       └── kxmovie-Prefix.pch
├── LICENSE
├── MVideo/
│   ├── AppDelegate.h
│   ├── AppDelegate.m
│   ├── Assets.xcassets/
│   │   ├── AppIcon.appiconset/
│   │   │   └── Contents.json
│   │   └── Contents.json
│   ├── Base.lproj/
│   │   ├── LaunchScreen.storyboard
│   │   └── Main.storyboard
│   ├── Class/
│   │   ├── Controller/
│   │   │   ├── ListViewController.h
│   │   │   ├── ListViewController.m
│   │   │   ├── MHomeViewController.h
│   │   │   └── MHomeViewController.m
│   │   ├── Model/
│   │   │   ├── MMovieModel.h
│   │   │   └── MMovieModel.m
│   │   └── View/
│   │       ├── ListTableViewCell.h
│   │       └── ListTableViewCell.m
│   ├── Info.plist
│   ├── MVideo-Pre.pch
│   └── main.m
├── MVideo.xcodeproj/
│   ├── project.pbxproj
│   └── project.xcworkspace/
│       └── contents.xcworkspacedata
├── MVideo.xcworkspace/
│   └── contents.xcworkspacedata
├── Pods/
│   ├── Masonry/
│   │   ├── LICENSE
│   │   ├── Masonry/
│   │   │   ├── MASCompositeConstraint.h
│   │   │   ├── MASCompositeConstraint.m
│   │   │   ├── MASConstraint+Private.h
│   │   │   ├── MASConstraint.h
│   │   │   ├── MASConstraint.m
│   │   │   ├── MASConstraintMaker.h
│   │   │   ├── MASConstraintMaker.m
│   │   │   ├── MASLayoutConstraint.h
│   │   │   ├── MASLayoutConstraint.m
│   │   │   ├── MASUtilities.h
│   │   │   ├── MASViewAttribute.h
│   │   │   ├── MASViewAttribute.m
│   │   │   ├── MASViewConstraint.h
│   │   │   ├── MASViewConstraint.m
│   │   │   ├── Masonry.h
│   │   │   ├── NSArray+MASAdditions.h
│   │   │   ├── NSArray+MASAdditions.m
│   │   │   ├── NSArray+MASShorthandAdditions.h
│   │   │   ├── NSLayoutConstraint+MASDebugAdditions.h
│   │   │   ├── NSLayoutConstraint+MASDebugAdditions.m
│   │   │   ├── View+MASAdditions.h
│   │   │   ├── View+MASAdditions.m
│   │   │   ├── View+MASShorthandAdditions.h
│   │   │   ├── ViewController+MASAdditions.h
│   │   │   └── ViewController+MASAdditions.m
│   │   └── README.md
│   ├── Pods.xcodeproj/
│   │   └── project.pbxproj
│   └── Target Support Files/
│       ├── Masonry/
│       │   ├── Masonry-dummy.m
│       │   ├── Masonry-prefix.pch
│       │   └── Masonry.xcconfig
│       └── Pods-MVideo/
│           ├── Pods-MVideo-acknowledgements.markdown
│           ├── Pods-MVideo-acknowledgements.plist
│           ├── Pods-MVideo-dummy.m
│           ├── Pods-MVideo-frameworks.sh
│           ├── Pods-MVideo-resources.sh
│           ├── Pods-MVideo.debug.xcconfig
│           └── Pods-MVideo.release.xcconfig
├── README.md
├── archive.sh
└── podfile

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
*.swift linguist-language=objective-c
*.c linguist-language=objective-c
*.h linguist-language=objective-c
*.m linguist-language=objective-c
*.a linguist-language=objective-c


================================================
FILE: .gitignore
================================================
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore

## Build generated
build/
DerivedData/

## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata/

## Other
*.moved-aside
*.xcuserstate

.DS_Store
*/.DS_Store

## Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/

# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts

Carthage/Build

# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md

fastlane/report.xml
fastlane/screenshots

#Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode

iOSInjectionProject/


================================================
FILE: 3rParty/FFmpeg/include/libavcodec/avcodec.h
================================================
/*
 * copyright (c) 2001 Fabrice Bellard
 *
 * This file is part of FFmpeg.
 *
 * FFmpeg is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * FFmpeg is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with FFmpeg; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

#ifndef AVCODEC_AVCODEC_H
#define AVCODEC_AVCODEC_H

/**
 * @file
 * @ingroup libavc
 * Libavcodec external API header
 */

#include <errno.h>
#include "libavutil/samplefmt.h"
#include "libavutil/attributes.h"
#include "libavutil/avutil.h"
#include "libavutil/buffer.h"
#include "libavutil/cpu.h"
#include "libavutil/channel_layout.h"
#include "libavutil/dict.h"
#include "libavutil/frame.h"
#include "libavutil/log.h"
#include "libavutil/pixfmt.h"
#include "libavutil/rational.h"

#include "version.h"

/**
 * @defgroup libavc libavcodec
 * Encoding/Decoding Library
 *
 * @{
 *
 * @defgroup lavc_decoding Decoding
 * @{
 * @}
 *
 * @defgroup lavc_encoding Encoding
 * @{
 * @}
 *
 * @defgroup lavc_codec Codecs
 * @{
 * @defgroup lavc_codec_native Native Codecs
 * @{
 * @}
 * @defgroup lavc_codec_wrappers External library wrappers
 * @{
 * @}
 * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge
 * @{
 * @}
 * @}
 * @defgroup lavc_internal Internal
 * @{
 * @}
 * @}
 */

/**
 * @ingroup libavc
 * @defgroup lavc_encdec send/receive encoding and decoding API overview
 * @{
 *
 * The avcodec_send_packet()/avcodec_receive_frame()/avcodec_send_frame()/
 * avcodec_receive_packet() functions provide an encode/decode API, which
 * decouples input and output.
 *
 * The API is very similar for encoding/decoding and audio/video, and works as
 * follows:
 * - Set up and open the AVCodecContext as usual.
 * - Send valid input:
 *   - For decoding, call avcodec_send_packet() to give the decoder raw
 *     compressed data in an AVPacket.
 *   - For encoding, call avcodec_send_frame() to give the decoder an AVFrame
 *     containing uncompressed audio or video.
 *   In both cases, it is recommended that AVPackets and AVFrames are
 *   refcounted, or libavcodec might have to copy the input data. (libavformat
 *   always returns refcounted AVPackets, and av_frame_get_buffer() allocates
 *   refcounted AVFrames.)
 * - Receive output in a loop. Periodically call one of the avcodec_receive_*()
 *   functions and process their output:
 *   - For decoding, call avcodec_receive_frame(). On success, it will return
 *     an AVFrame containing uncompressed audio or video data.
 *   - For encoding, call avcodec_receive_packet(). On success, it will return
 *     an AVPacket with a compressed frame.
 *   Repeat this call until it returns AVERROR(EAGAIN) or an error. The
 *   AVERROR(EAGAIN) return value means that new input data is required to
 *   return new output. In this case, continue with sending input. For each
 *   input frame/packet, the codec will typically return 1 output frame/packet,
 *   but it can also be 0 or more than 1.
 *
 * At the beginning of decoding or encoding, the codec might accept multiple
 * input frames/packets without returning a frame, until its internal buffers
 * are filled. This situation is handled transparently if you follow the steps
 * outlined above.
 *
 * End of stream situations. These require "flushing" (aka draining) the codec,
 * as the codec might buffer multiple frames or packets internally for
 * performance or out of necessity (consider B-frames).
 * This is handled as follows:
 * - Instead of valid input, send NULL to the avcodec_send_packet() (decoding)
 *   or avcodec_send_frame() (encoding) functions. This will enter draining
 *   mode.
 * - Call avcodec_receive_frame() (decoding) or avcodec_receive_packet()
 *   (encoding) in a loop until AVERROR_EOF is returned. The functions will
 *   not return AVERROR(EAGAIN), unless you forgot to enter draining mode.
 * - Before decoding can be resumed again, the codec has to be reset with
 *   avcodec_flush_buffers().
 *
 * Using the API as outlined above is highly recommended. But it is also
 * possible to call functions outside of this rigid schema. For example, you can
 * call avcodec_send_packet() repeatedly without calling
 * avcodec_receive_frame(). In this case, avcodec_send_packet() will succeed
 * until the codec's internal buffer has been filled up (which is typically of
 * size 1 per output frame, after initial input), and then reject input with
 * AVERROR(EAGAIN). Once it starts rejecting input, you have no choice but to
 * read at least some output.
 *
 * Not all codecs will follow a rigid and predictable dataflow; the only
 * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on
 * one end implies that a receive/send call on the other end will succeed. In
 * general, no codec will permit unlimited buffering of input or output.
 *
 * This API replaces the following legacy functions:
 * - avcodec_decode_video2() and avcodec_decode_audio4():
 *   Use avcodec_send_packet() to feed input to the decoder, then use
 *   avcodec_receive_frame() to receive decoded frames after each packet.
 *   Unlike with the old video decoding API, multiple frames might result from
 *   a packet. For audio, splitting the input packet into frames by partially
 *   decoding packets becomes transparent to the API user. You never need to
 *   feed an AVPacket to the API twice.
 *   Additionally, sending a flush/draining packet is required only once.
 * - avcodec_encode_video2()/avcodec_encode_audio2():
 *   Use avcodec_send_frame() to feed input to the encoder, then use
 *   avcodec_receive_packet() to receive encoded packets.
 *   Providing user-allocated buffers for avcodec_receive_packet() is not
 *   possible.
 * - The new API does not handle subtitles yet.
 *
 * Mixing new and old function calls on the same AVCodecContext is not allowed,
 * and will result in undefined behavior.
 *
 * Some codecs might require using the new API; using the old API will return
 * an error when calling it.
 * @}
 */

/**
 * @defgroup lavc_core Core functions/structures.
 * @ingroup libavc
 *
 * Basic definitions, functions for querying libavcodec capabilities,
 * allocating core structures, etc.
 * @{
 */


/**
 * Identify the syntax and semantics of the bitstream.
 * The principle is roughly:
 * Two decoders with the same ID can decode the same streams.
 * Two encoders with the same ID can encode compatible streams.
 * There may be slight deviations from the principle due to implementation
 * details.
 *
 * If you add a codec ID to this list, add it so that
 * 1. no value of an existing codec ID changes (that would break ABI),
 * 2. it is as close as possible to similar codecs
 *
 * After adding new codec IDs, do not forget to add an entry to the codec
 * descriptor list and bump libavcodec minor version.
 */
enum AVCodecID {
    AV_CODEC_ID_NONE,

    /* video codecs */
    AV_CODEC_ID_MPEG1VIDEO,
    AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
#if FF_API_XVMC
    AV_CODEC_ID_MPEG2VIDEO_XVMC,
#endif /* FF_API_XVMC */
    AV_CODEC_ID_H261,
    AV_CODEC_ID_H263,
    AV_CODEC_ID_RV10,
    AV_CODEC_ID_RV20,
    AV_CODEC_ID_MJPEG,
    AV_CODEC_ID_MJPEGB,
    AV_CODEC_ID_LJPEG,
    AV_CODEC_ID_SP5X,
    AV_CODEC_ID_JPEGLS,
    AV_CODEC_ID_MPEG4,
    AV_CODEC_ID_RAWVIDEO,
    AV_CODEC_ID_MSMPEG4V1,
    AV_CODEC_ID_MSMPEG4V2,
    AV_CODEC_ID_MSMPEG4V3,
    AV_CODEC_ID_WMV1,
    AV_CODEC_ID_WMV2,
    AV_CODEC_ID_H263P,
    AV_CODEC_ID_H263I,
    AV_CODEC_ID_FLV1,
    AV_CODEC_ID_SVQ1,
    AV_CODEC_ID_SVQ3,
    AV_CODEC_ID_DVVIDEO,
    AV_CODEC_ID_HUFFYUV,
    AV_CODEC_ID_CYUV,
    AV_CODEC_ID_H264,
    AV_CODEC_ID_INDEO3,
    AV_CODEC_ID_VP3,
    AV_CODEC_ID_THEORA,
    AV_CODEC_ID_ASV1,
    AV_CODEC_ID_ASV2,
    AV_CODEC_ID_FFV1,
    AV_CODEC_ID_4XM,
    AV_CODEC_ID_VCR1,
    AV_CODEC_ID_CLJR,
    AV_CODEC_ID_MDEC,
    AV_CODEC_ID_ROQ,
    AV_CODEC_ID_INTERPLAY_VIDEO,
    AV_CODEC_ID_XAN_WC3,
    AV_CODEC_ID_XAN_WC4,
    AV_CODEC_ID_RPZA,
    AV_CODEC_ID_CINEPAK,
    AV_CODEC_ID_WS_VQA,
    AV_CODEC_ID_MSRLE,
    AV_CODEC_ID_MSVIDEO1,
    AV_CODEC_ID_IDCIN,
    AV_CODEC_ID_8BPS,
    AV_CODEC_ID_SMC,
    AV_CODEC_ID_FLIC,
    AV_CODEC_ID_TRUEMOTION1,
    AV_CODEC_ID_VMDVIDEO,
    AV_CODEC_ID_MSZH,
    AV_CODEC_ID_ZLIB,
    AV_CODEC_ID_QTRLE,
    AV_CODEC_ID_TSCC,
    AV_CODEC_ID_ULTI,
    AV_CODEC_ID_QDRAW,
    AV_CODEC_ID_VIXL,
    AV_CODEC_ID_QPEG,
    AV_CODEC_ID_PNG,
    AV_CODEC_ID_PPM,
    AV_CODEC_ID_PBM,
    AV_CODEC_ID_PGM,
    AV_CODEC_ID_PGMYUV,
    AV_CODEC_ID_PAM,
    AV_CODEC_ID_FFVHUFF,
    AV_CODEC_ID_RV30,
    AV_CODEC_ID_RV40,
    AV_CODEC_ID_VC1,
    AV_CODEC_ID_WMV3,
    AV_CODEC_ID_LOCO,
    AV_CODEC_ID_WNV1,
    AV_CODEC_ID_AASC,
    AV_CODEC_ID_INDEO2,
    AV_CODEC_ID_FRAPS,
    AV_CODEC_ID_TRUEMOTION2,
    AV_CODEC_ID_BMP,
    AV_CODEC_ID_CSCD,
    AV_CODEC_ID_MMVIDEO,
    AV_CODEC_ID_ZMBV,
    AV_CODEC_ID_AVS,
    AV_CODEC_ID_SMACKVIDEO,
    AV_CODEC_ID_NUV,
    AV_CODEC_ID_KMVC,
    AV_CODEC_ID_FLASHSV,
    AV_CODEC_ID_CAVS,
    AV_CODEC_ID_JPEG2000,
    AV_CODEC_ID_VMNC,
    AV_CODEC_ID_VP5,
    AV_CODEC_ID_VP6,
    AV_CODEC_ID_VP6F,
    AV_CODEC_ID_TARGA,
    AV_CODEC_ID_DSICINVIDEO,
    AV_CODEC_ID_TIERTEXSEQVIDEO,
    AV_CODEC_ID_TIFF,
    AV_CODEC_ID_GIF,
    AV_CODEC_ID_DXA,
    AV_CODEC_ID_DNXHD,
    AV_CODEC_ID_THP,
    AV_CODEC_ID_SGI,
    AV_CODEC_ID_C93,
    AV_CODEC_ID_BETHSOFTVID,
    AV_CODEC_ID_PTX,
    AV_CODEC_ID_TXD,
    AV_CODEC_ID_VP6A,
    AV_CODEC_ID_AMV,
    AV_CODEC_ID_VB,
    AV_CODEC_ID_PCX,
    AV_CODEC_ID_SUNRAST,
    AV_CODEC_ID_INDEO4,
    AV_CODEC_ID_INDEO5,
    AV_CODEC_ID_MIMIC,
    AV_CODEC_ID_RL2,
    AV_CODEC_ID_ESCAPE124,
    AV_CODEC_ID_DIRAC,
    AV_CODEC_ID_BFI,
    AV_CODEC_ID_CMV,
    AV_CODEC_ID_MOTIONPIXELS,
    AV_CODEC_ID_TGV,
    AV_CODEC_ID_TGQ,
    AV_CODEC_ID_TQI,
    AV_CODEC_ID_AURA,
    AV_CODEC_ID_AURA2,
    AV_CODEC_ID_V210X,
    AV_CODEC_ID_TMV,
    AV_CODEC_ID_V210,
    AV_CODEC_ID_DPX,
    AV_CODEC_ID_MAD,
    AV_CODEC_ID_FRWU,
    AV_CODEC_ID_FLASHSV2,
    AV_CODEC_ID_CDGRAPHICS,
    AV_CODEC_ID_R210,
    AV_CODEC_ID_ANM,
    AV_CODEC_ID_BINKVIDEO,
    AV_CODEC_ID_IFF_ILBM,
#define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM
    AV_CODEC_ID_KGV1,
    AV_CODEC_ID_YOP,
    AV_CODEC_ID_VP8,
    AV_CODEC_ID_PICTOR,
    AV_CODEC_ID_ANSI,
    AV_CODEC_ID_A64_MULTI,
    AV_CODEC_ID_A64_MULTI5,
    AV_CODEC_ID_R10K,
    AV_CODEC_ID_MXPEG,
    AV_CODEC_ID_LAGARITH,
    AV_CODEC_ID_PRORES,
    AV_CODEC_ID_JV,
    AV_CODEC_ID_DFA,
    AV_CODEC_ID_WMV3IMAGE,
    AV_CODEC_ID_VC1IMAGE,
    AV_CODEC_ID_UTVIDEO,
    AV_CODEC_ID_BMV_VIDEO,
    AV_CODEC_ID_VBLE,
    AV_CODEC_ID_DXTORY,
    AV_CODEC_ID_V410,
    AV_CODEC_ID_XWD,
    AV_CODEC_ID_CDXL,
    AV_CODEC_ID_XBM,
    AV_CODEC_ID_ZEROCODEC,
    AV_CODEC_ID_MSS1,
    AV_CODEC_ID_MSA1,
    AV_CODEC_ID_TSCC2,
    AV_CODEC_ID_MTS2,
    AV_CODEC_ID_CLLC,
    AV_CODEC_ID_MSS2,
    AV_CODEC_ID_VP9,
    AV_CODEC_ID_AIC,
    AV_CODEC_ID_ESCAPE130,
    AV_CODEC_ID_G2M,
    AV_CODEC_ID_WEBP,
    AV_CODEC_ID_HNM4_VIDEO,
    AV_CODEC_ID_HEVC,
#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC
    AV_CODEC_ID_FIC,
    AV_CODEC_ID_ALIAS_PIX,
    AV_CODEC_ID_BRENDER_PIX,
    AV_CODEC_ID_PAF_VIDEO,
    AV_CODEC_ID_EXR,
    AV_CODEC_ID_VP7,
    AV_CODEC_ID_SANM,
    AV_CODEC_ID_SGIRLE,
    AV_CODEC_ID_MVC1,
    AV_CODEC_ID_MVC2,
    AV_CODEC_ID_HQX,
    AV_CODEC_ID_TDSC,
    AV_CODEC_ID_HQ_HQA,
    AV_CODEC_ID_HAP,
    AV_CODEC_ID_DDS,
    AV_CODEC_ID_DXV,
    AV_CODEC_ID_SCREENPRESSO,
    AV_CODEC_ID_RSCC,

    AV_CODEC_ID_Y41P = 0x8000,
    AV_CODEC_ID_AVRP,
    AV_CODEC_ID_012V,
    AV_CODEC_ID_AVUI,
    AV_CODEC_ID_AYUV,
    AV_CODEC_ID_TARGA_Y216,
    AV_CODEC_ID_V308,
    AV_CODEC_ID_V408,
    AV_CODEC_ID_YUV4,
    AV_CODEC_ID_AVRN,
    AV_CODEC_ID_CPIA,
    AV_CODEC_ID_XFACE,
    AV_CODEC_ID_SNOW,
    AV_CODEC_ID_SMVJPEG,
    AV_CODEC_ID_APNG,
    AV_CODEC_ID_DAALA,
    AV_CODEC_ID_CFHD,
    AV_CODEC_ID_TRUEMOTION2RT,
    AV_CODEC_ID_M101,
    AV_CODEC_ID_MAGICYUV,
    AV_CODEC_ID_SHEERVIDEO,
    AV_CODEC_ID_YLC,

    /* various PCM "codecs" */
    AV_CODEC_ID_FIRST_AUDIO = 0x10000,     ///< A dummy id pointing at the start of audio codecs
    AV_CODEC_ID_PCM_S16LE = 0x10000,
    AV_CODEC_ID_PCM_S16BE,
    AV_CODEC_ID_PCM_U16LE,
    AV_CODEC_ID_PCM_U16BE,
    AV_CODEC_ID_PCM_S8,
    AV_CODEC_ID_PCM_U8,
    AV_CODEC_ID_PCM_MULAW,
    AV_CODEC_ID_PCM_ALAW,
    AV_CODEC_ID_PCM_S32LE,
    AV_CODEC_ID_PCM_S32BE,
    AV_CODEC_ID_PCM_U32LE,
    AV_CODEC_ID_PCM_U32BE,
    AV_CODEC_ID_PCM_S24LE,
    AV_CODEC_ID_PCM_S24BE,
    AV_CODEC_ID_PCM_U24LE,
    AV_CODEC_ID_PCM_U24BE,
    AV_CODEC_ID_PCM_S24DAUD,
    AV_CODEC_ID_PCM_ZORK,
    AV_CODEC_ID_PCM_S16LE_PLANAR,
    AV_CODEC_ID_PCM_DVD,
    AV_CODEC_ID_PCM_F32BE,
    AV_CODEC_ID_PCM_F32LE,
    AV_CODEC_ID_PCM_F64BE,
    AV_CODEC_ID_PCM_F64LE,
    AV_CODEC_ID_PCM_BLURAY,
    AV_CODEC_ID_PCM_LXF,
    AV_CODEC_ID_S302M,
    AV_CODEC_ID_PCM_S8_PLANAR,
    AV_CODEC_ID_PCM_S24LE_PLANAR,
    AV_CODEC_ID_PCM_S32LE_PLANAR,
    AV_CODEC_ID_PCM_S16BE_PLANAR,

    AV_CODEC_ID_PCM_S64LE = 0x10800,
    AV_CODEC_ID_PCM_S64BE,

    /* various ADPCM codecs */
    AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
    AV_CODEC_ID_ADPCM_IMA_WAV,
    AV_CODEC_ID_ADPCM_IMA_DK3,
    AV_CODEC_ID_ADPCM_IMA_DK4,
    AV_CODEC_ID_ADPCM_IMA_WS,
    AV_CODEC_ID_ADPCM_IMA_SMJPEG,
    AV_CODEC_ID_ADPCM_MS,
    AV_CODEC_ID_ADPCM_4XM,
    AV_CODEC_ID_ADPCM_XA,
    AV_CODEC_ID_ADPCM_ADX,
    AV_CODEC_ID_ADPCM_EA,
    AV_CODEC_ID_ADPCM_G726,
    AV_CODEC_ID_ADPCM_CT,
    AV_CODEC_ID_ADPCM_SWF,
    AV_CODEC_ID_ADPCM_YAMAHA,
    AV_CODEC_ID_ADPCM_SBPRO_4,
    AV_CODEC_ID_ADPCM_SBPRO_3,
    AV_CODEC_ID_ADPCM_SBPRO_2,
    AV_CODEC_ID_ADPCM_THP,
    AV_CODEC_ID_ADPCM_IMA_AMV,
    AV_CODEC_ID_ADPCM_EA_R1,
    AV_CODEC_ID_ADPCM_EA_R3,
    AV_CODEC_ID_ADPCM_EA_R2,
    AV_CODEC_ID_ADPCM_IMA_EA_SEAD,
    AV_CODEC_ID_ADPCM_IMA_EA_EACS,
    AV_CODEC_ID_ADPCM_EA_XAS,
    AV_CODEC_ID_ADPCM_EA_MAXIS_XA,
    AV_CODEC_ID_ADPCM_IMA_ISS,
    AV_CODEC_ID_ADPCM_G722,
    AV_CODEC_ID_ADPCM_IMA_APC,
    AV_CODEC_ID_ADPCM_VIMA,
#if FF_API_VIMA_DECODER
    AV_CODEC_ID_VIMA = AV_CODEC_ID_ADPCM_VIMA,
#endif

    AV_CODEC_ID_ADPCM_AFC = 0x11800,
    AV_CODEC_ID_ADPCM_IMA_OKI,
    AV_CODEC_ID_ADPCM_DTK,
    AV_CODEC_ID_ADPCM_IMA_RAD,
    AV_CODEC_ID_ADPCM_G726LE,
    AV_CODEC_ID_ADPCM_THP_LE,
    AV_CODEC_ID_ADPCM_PSX,
    AV_CODEC_ID_ADPCM_AICA,
    AV_CODEC_ID_ADPCM_IMA_DAT4,
    AV_CODEC_ID_ADPCM_MTAF,

    /* AMR */
    AV_CODEC_ID_AMR_NB = 0x12000,
    AV_CODEC_ID_AMR_WB,

    /* RealAudio codecs*/
    AV_CODEC_ID_RA_144 = 0x13000,
    AV_CODEC_ID_RA_288,

    /* various DPCM codecs */
    AV_CODEC_ID_ROQ_DPCM = 0x14000,
    AV_CODEC_ID_INTERPLAY_DPCM,
    AV_CODEC_ID_XAN_DPCM,
    AV_CODEC_ID_SOL_DPCM,

    AV_CODEC_ID_SDX2_DPCM = 0x14800,

    /* audio codecs */
    AV_CODEC_ID_MP2 = 0x15000,
    AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
    AV_CODEC_ID_AAC,
    AV_CODEC_ID_AC3,
    AV_CODEC_ID_DTS,
    AV_CODEC_ID_VORBIS,
    AV_CODEC_ID_DVAUDIO,
    AV_CODEC_ID_WMAV1,
    AV_CODEC_ID_WMAV2,
    AV_CODEC_ID_MACE3,
    AV_CODEC_ID_MACE6,
    AV_CODEC_ID_VMDAUDIO,
    AV_CODEC_ID_FLAC,
    AV_CODEC_ID_MP3ADU,
    AV_CODEC_ID_MP3ON4,
    AV_CODEC_ID_SHORTEN,
    AV_CODEC_ID_ALAC,
    AV_CODEC_ID_WESTWOOD_SND1,
    AV_CODEC_ID_GSM, ///< as in Berlin toast format
    AV_CODEC_ID_QDM2,
    AV_CODEC_ID_COOK,
    AV_CODEC_ID_TRUESPEECH,
    AV_CODEC_ID_TTA,
    AV_CODEC_ID_SMACKAUDIO,
    AV_CODEC_ID_QCELP,
    AV_CODEC_ID_WAVPACK,
    AV_CODEC_ID_DSICINAUDIO,
    AV_CODEC_ID_IMC,
    AV_CODEC_ID_MUSEPACK7,
    AV_CODEC_ID_MLP,
    AV_CODEC_ID_GSM_MS, /* as found in WAV */
    AV_CODEC_ID_ATRAC3,
#if FF_API_VOXWARE
    AV_CODEC_ID_VOXWARE,
#endif
    AV_CODEC_ID_APE,
    AV_CODEC_ID_NELLYMOSER,
    AV_CODEC_ID_MUSEPACK8,
    AV_CODEC_ID_SPEEX,
    AV_CODEC_ID_WMAVOICE,
    AV_CODEC_ID_WMAPRO,
    AV_CODEC_ID_WMALOSSLESS,
    AV_CODEC_ID_ATRAC3P,
    AV_CODEC_ID_EAC3,
    AV_CODEC_ID_SIPR,
    AV_CODEC_ID_MP1,
    AV_CODEC_ID_TWINVQ,
    AV_CODEC_ID_TRUEHD,
    AV_CODEC_ID_MP4ALS,
    AV_CODEC_ID_ATRAC1,
    AV_CODEC_ID_BINKAUDIO_RDFT,
    AV_CODEC_ID_BINKAUDIO_DCT,
    AV_CODEC_ID_AAC_LATM,
    AV_CODEC_ID_QDMC,
    AV_CODEC_ID_CELT,
    AV_CODEC_ID_G723_1,
    AV_CODEC_ID_G729,
    AV_CODEC_ID_8SVX_EXP,
    AV_CODEC_ID_8SVX_FIB,
    AV_CODEC_ID_BMV_AUDIO,
    AV_CODEC_ID_RALF,
    AV_CODEC_ID_IAC,
    AV_CODEC_ID_ILBC,
    AV_CODEC_ID_OPUS,
    AV_CODEC_ID_COMFORT_NOISE,
    AV_CODEC_ID_TAK,
    AV_CODEC_ID_METASOUND,
    AV_CODEC_ID_PAF_AUDIO,
    AV_CODEC_ID_ON2AVC,
    AV_CODEC_ID_DSS_SP,

    AV_CODEC_ID_FFWAVESYNTH = 0x15800,
    AV_CODEC_ID_SONIC,
    AV_CODEC_ID_SONIC_LS,
    AV_CODEC_ID_EVRC,
    AV_CODEC_ID_SMV,
    AV_CODEC_ID_DSD_LSBF,
    AV_CODEC_ID_DSD_MSBF,
    AV_CODEC_ID_DSD_LSBF_PLANAR,
    AV_CODEC_ID_DSD_MSBF_PLANAR,
    AV_CODEC_ID_4GV,
    AV_CODEC_ID_INTERPLAY_ACM,
    AV_CODEC_ID_XMA1,
    AV_CODEC_ID_XMA2,
    AV_CODEC_ID_DST,

    /* subtitle codecs */
    AV_CODEC_ID_FIRST_SUBTITLE = 0x17000,          ///< A dummy ID pointing at the start of subtitle codecs.
    AV_CODEC_ID_DVD_SUBTITLE = 0x17000,
    AV_CODEC_ID_DVB_SUBTITLE,
    AV_CODEC_ID_TEXT,  ///< raw UTF-8 text
    AV_CODEC_ID_XSUB,
    AV_CODEC_ID_SSA,
    AV_CODEC_ID_MOV_TEXT,
    AV_CODEC_ID_HDMV_PGS_SUBTITLE,
    AV_CODEC_ID_DVB_TELETEXT,
    AV_CODEC_ID_SRT,

    AV_CODEC_ID_MICRODVD   = 0x17800,
    AV_CODEC_ID_EIA_608,
    AV_CODEC_ID_JACOSUB,
    AV_CODEC_ID_SAMI,
    AV_CODEC_ID_REALTEXT,
    AV_CODEC_ID_STL,
    AV_CODEC_ID_SUBVIEWER1,
    AV_CODEC_ID_SUBVIEWER,
    AV_CODEC_ID_SUBRIP,
    AV_CODEC_ID_WEBVTT,
    AV_CODEC_ID_MPL2,
    AV_CODEC_ID_VPLAYER,
    AV_CODEC_ID_PJS,
    AV_CODEC_ID_ASS,
    AV_CODEC_ID_HDMV_TEXT_SUBTITLE,

    /* other specific kind of codecs (generally used for attachments) */
    AV_CODEC_ID_FIRST_UNKNOWN = 0x18000,           ///< A dummy ID pointing at the start of various fake codecs.
    AV_CODEC_ID_TTF = 0x18000,

    AV_CODEC_ID_SCTE_35, ///< Contain timestamp estimated through PCR of program stream.
    AV_CODEC_ID_BINTEXT    = 0x18800,
    AV_CODEC_ID_XBIN,
    AV_CODEC_ID_IDF,
    AV_CODEC_ID_OTF,
    AV_CODEC_ID_SMPTE_KLV,
    AV_CODEC_ID_DVD_NAV,
    AV_CODEC_ID_TIMED_ID3,
    AV_CODEC_ID_BIN_DATA,


    AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it

    AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
                                * stream (only used by libavformat) */
    AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems
                                * stream (only used by libavformat) */
    AV_CODEC_ID_FFMETADATA = 0x21000,   ///< Dummy codec for streams containing only metadata information.
    AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket
};

/**
 * This struct describes the properties of a single codec described by an
 * AVCodecID.
 * @see avcodec_descriptor_get()
 */
typedef struct AVCodecDescriptor {
    enum AVCodecID     id;
    enum AVMediaType type;
    /**
     * Name of the codec described by this descriptor. It is non-empty and
     * unique for each codec descriptor. It should contain alphanumeric
     * characters and '_' only.
     */
    const char      *name;
    /**
     * A more descriptive name for this codec. May be NULL.
     */
    const char *long_name;
    /**
     * Codec properties, a combination of AV_CODEC_PROP_* flags.
     */
    int             props;
    /**
     * MIME type(s) associated with the codec.
     * May be NULL; if not, a NULL-terminated array of MIME types.
     * The first item is always non-NULL and is the preferred MIME type.
     */
    const char *const *mime_types;
    /**
     * If non-NULL, an array of profiles recognized for this codec.
     * Terminated with FF_PROFILE_UNKNOWN.
     */
    const struct AVProfile *profiles;
} AVCodecDescriptor;

/**
 * Codec uses only intra compression.
 * Video codecs only.
 */
#define AV_CODEC_PROP_INTRA_ONLY    (1 << 0)
/**
 * Codec supports lossy compression. Audio and video codecs only.
 * @note a codec may support both lossy and lossless
 * compression modes
 */
#define AV_CODEC_PROP_LOSSY         (1 << 1)
/**
 * Codec supports lossless compression. Audio and video codecs only.
 */
#define AV_CODEC_PROP_LOSSLESS      (1 << 2)
/**
 * Codec supports frame reordering. That is, the coded order (the order in which
 * the encoded packets are output by the encoders / stored / input to the
 * decoders) may be different from the presentation order of the corresponding
 * frames.
 *
 * For codecs that do not have this property set, PTS and DTS should always be
 * equal.
 */
#define AV_CODEC_PROP_REORDER       (1 << 3)
/**
 * Subtitle codec is bitmap based
 * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field.
 */
#define AV_CODEC_PROP_BITMAP_SUB    (1 << 16)
/**
 * Subtitle codec is text based.
 * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field.
 */
#define AV_CODEC_PROP_TEXT_SUB      (1 << 17)

/**
 * @ingroup lavc_decoding
 * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
 * This is mainly needed because some optimized bitstream readers read
 * 32 or 64 bit at once and could read over the end.<br>
 * Note: If the first 23 bits of the additional bytes are not 0, then damaged
 * MPEG bitstreams could cause overread and segfault.
 */
#define AV_INPUT_BUFFER_PADDING_SIZE 32

/**
 * @ingroup lavc_encoding
 * minimum encoding buffer size
 * Used to avoid some checks during header writing.
 */
#define AV_INPUT_BUFFER_MIN_SIZE 16384

#if FF_API_WITHOUT_PREFIX
/**
 * @deprecated use AV_INPUT_BUFFER_PADDING_SIZE instead
 */
#define FF_INPUT_BUFFER_PADDING_SIZE 32

/**
 * @deprecated use AV_INPUT_BUFFER_MIN_SIZE instead
 */
#define FF_MIN_BUFFER_SIZE 16384
#endif /* FF_API_WITHOUT_PREFIX */

/**
 * @ingroup lavc_encoding
 * motion estimation type.
 * @deprecated use codec private option instead
 */
#if FF_API_MOTION_EST
enum Motion_Est_ID {
    ME_ZERO = 1,    ///< no search, that is use 0,0 vector whenever one is needed
    ME_FULL,
    ME_LOG,
    ME_PHODS,
    ME_EPZS,        ///< enhanced predictive zonal search
    ME_X1,          ///< reserved for experiments
    ME_HEX,         ///< hexagon based search
    ME_UMH,         ///< uneven multi-hexagon search
    ME_TESA,        ///< transformed exhaustive search algorithm
    ME_ITER=50,     ///< iterative search
};
#endif

/**
 * @ingroup lavc_decoding
 */
enum AVDiscard{
    /* We leave some space between them for extensions (drop some
     * keyframes for intra-only or drop just some bidir frames). */
    AVDISCARD_NONE    =-16, ///< discard nothing
    AVDISCARD_DEFAULT =  0, ///< discard useless packets like 0 size packets in avi
    AVDISCARD_NONREF  =  8, ///< discard all non reference
    AVDISCARD_BIDIR   = 16, ///< discard all bidirectional frames
    AVDISCARD_NONINTRA= 24, ///< discard all non intra frames
    AVDISCARD_NONKEY  = 32, ///< discard all frames except keyframes
    AVDISCARD_ALL     = 48, ///< discard all
};

enum AVAudioServiceType {
    AV_AUDIO_SERVICE_TYPE_MAIN              = 0,
    AV_AUDIO_SERVICE_TYPE_EFFECTS           = 1,
    AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2,
    AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED  = 3,
    AV_AUDIO_SERVICE_TYPE_DIALOGUE          = 4,
    AV_AUDIO_SERVICE_TYPE_COMMENTARY        = 5,
    AV_AUDIO_SERVICE_TYPE_EMERGENCY         = 6,
    AV_AUDIO_SERVICE_TYPE_VOICE_OVER        = 7,
    AV_AUDIO_SERVICE_TYPE_KARAOKE           = 8,
    AV_AUDIO_SERVICE_TYPE_NB                   , ///< Not part of ABI
};

/**
 * @ingroup lavc_encoding
 */
typedef struct RcOverride{
    int start_frame;
    int end_frame;
    int qscale; // If this is 0 then quality_factor will be used instead.
    float quality_factor;
} RcOverride;

#if FF_API_MAX_BFRAMES
/**
 * @deprecated there is no libavcodec-wide limit on the number of B-frames
 */
#define FF_MAX_B_FRAMES 16
#endif

/* encoding support
   These flags can be passed in AVCodecContext.flags before initialization.
   Note: Not everything is supported yet.
*/

/**
 * Allow decoders to produce frames with data planes that are not aligned
 * to CPU requirements (e.g. due to cropping).
 */
#define AV_CODEC_FLAG_UNALIGNED       (1 <<  0)
/**
 * Use fixed qscale.
 */
#define AV_CODEC_FLAG_QSCALE          (1 <<  1)
/**
 * 4 MV per MB allowed / advanced prediction for H.263.
 */
#define AV_CODEC_FLAG_4MV             (1 <<  2)
/**
 * Output even those frames that might be corrupted.
 */
#define AV_CODEC_FLAG_OUTPUT_CORRUPT  (1 <<  3)
/**
 * Use qpel MC.
 */
#define AV_CODEC_FLAG_QPEL            (1 <<  4)
/**
 * Use internal 2pass ratecontrol in first pass mode.
 */
#define AV_CODEC_FLAG_PASS1           (1 <<  9)
/**
 * Use internal 2pass ratecontrol in second pass mode.
 */
#define AV_CODEC_FLAG_PASS2           (1 << 10)
/**
 * loop filter.
 */
#define AV_CODEC_FLAG_LOOP_FILTER     (1 << 11)
/**
 * Only decode/encode grayscale.
 */
#define AV_CODEC_FLAG_GRAY            (1 << 13)
/**
 * error[?] variables will be set during encoding.
 */
#define AV_CODEC_FLAG_PSNR            (1 << 15)
/**
 * Input bitstream might be truncated at a random location
 * instead of only at frame boundaries.
 */
#define AV_CODEC_FLAG_TRUNCATED       (1 << 16)
/**
 * Use interlaced DCT.
 */
#define AV_CODEC_FLAG_INTERLACED_DCT  (1 << 18)
/**
 * Force low delay.
 */
#define AV_CODEC_FLAG_LOW_DELAY       (1 << 19)
/**
 * Place global headers in extradata instead of every keyframe.
 */
#define AV_CODEC_FLAG_GLOBAL_HEADER   (1 << 22)
/**
 * Use only bitexact stuff (except (I)DCT).
 */
#define AV_CODEC_FLAG_BITEXACT        (1 << 23)
/* Fx : Flag for H.263+ extra options */
/**
 * H.263 advanced intra coding / MPEG-4 AC prediction
 */
#define AV_CODEC_FLAG_AC_PRED         (1 << 24)
/**
 * interlaced motion estimation
 */
#define AV_CODEC_FLAG_INTERLACED_ME   (1 << 29)
#define AV_CODEC_FLAG_CLOSED_GOP      (1U << 31)

/**
 * Allow non spec compliant speedup tricks.
 */
#define AV_CODEC_FLAG2_FAST           (1 <<  0)
/**
 * Skip bitstream encoding.
 */
#define AV_CODEC_FLAG2_NO_OUTPUT      (1 <<  2)
/**
 * Place global headers at every keyframe instead of in extradata.
 */
#define AV_CODEC_FLAG2_LOCAL_HEADER   (1 <<  3)

/**
 * timecode is in drop frame format. DEPRECATED!!!!
 */
#define AV_CODEC_FLAG2_DROP_FRAME_TIMECODE (1 << 13)

/**
 * Input bitstream might be truncated at a packet boundaries
 * instead of only at frame boundaries.
 */
#define AV_CODEC_FLAG2_CHUNKS         (1 << 15)
/**
 * Discard cropping information from SPS.
 */
#define AV_CODEC_FLAG2_IGNORE_CROP    (1 << 16)

/**
 * Show all frames before the first keyframe
 */
#define AV_CODEC_FLAG2_SHOW_ALL       (1 << 22)
/**
 * Export motion vectors through frame side data
 */
#define AV_CODEC_FLAG2_EXPORT_MVS     (1 << 28)
/**
 * Do not skip samples and export skip information as frame side data
 */
#define AV_CODEC_FLAG2_SKIP_MANUAL    (1 << 29)
/**
 * Do not reset ASS ReadOrder field on flush (subtitles decoding)
 */
#define AV_CODEC_FLAG2_RO_FLUSH_NOOP  (1 << 30)

/* Unsupported options :
 *              Syntax Arithmetic coding (SAC)
 *              Reference Picture Selection
 *              Independent Segment Decoding */
/* /Fx */
/* codec capabilities */

/**
 * Decoder can use draw_horiz_band callback.
 */
#define AV_CODEC_CAP_DRAW_HORIZ_BAND     (1 <<  0)
/**
 * Codec uses get_buffer() for allocating buffers and supports custom allocators.
 * If not set, it might not use get_buffer() at all or use operations that
 * assume the buffer was allocated by avcodec_default_get_buffer.
 */
#define AV_CODEC_CAP_DR1                 (1 <<  1)
#define AV_CODEC_CAP_TRUNCATED           (1 <<  3)
/**
 * Encoder or decoder requires flushing with NULL input at the end in order to
 * give the complete and correct output.
 *
 * NOTE: If this flag is not set, the codec is guaranteed to never be fed with
 *       with NULL data. The user can still send NULL data to the public encode
 *       or decode function, but libavcodec will not pass it along to the codec
 *       unless this flag is set.
 *
 * Decoders:
 * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL,
 * avpkt->size=0 at the end to get the delayed data until the decoder no longer
 * returns frames.
 *
 * Encoders:
 * The encoder needs to be fed with NULL data at the end of encoding until the
 * encoder no longer returns data.
 *
 * NOTE: For encoders implementing the AVCodec.encode2() function, setting this
 *       flag also means that the encoder must set the pts and duration for
 *       each output packet. If this flag is not set, the pts and duration will
 *       be determined by libavcodec from the input frame.
 */
#define AV_CODEC_CAP_DELAY               (1 <<  5)
/**
 * Codec can be fed a final frame with a smaller size.
 * This can be used to prevent truncation of the last audio samples.
 */
#define AV_CODEC_CAP_SMALL_LAST_FRAME    (1 <<  6)

#if FF_API_CAP_VDPAU
/**
 * Codec can export data for HW decoding (VDPAU).
 */
#define AV_CODEC_CAP_HWACCEL_VDPAU       (1 <<  7)
#endif

/**
 * Codec can output multiple frames per AVPacket
 * Normally demuxers return one frame at a time, demuxers which do not do
 * are connected to a parser to split what they return into proper frames.
 * This flag is reserved to the very rare category of codecs which have a
 * bitstream that cannot be split into frames without timeconsuming
 * operations like full decoding. Demuxers carrying such bitstreams thus
 * may return multiple frames in a packet. This has many disadvantages like
 * prohibiting stream copy in many cases thus it should only be considered
 * as a last resort.
 */
#define AV_CODEC_CAP_SUBFRAMES           (1 <<  8)
/**
 * Codec is experimental and is thus avoided in favor of non experimental
 * encoders
 */
#define AV_CODEC_CAP_EXPERIMENTAL        (1 <<  9)
/**
 * Codec should fill in channel configuration and samplerate instead of container
 */
#define AV_CODEC_CAP_CHANNEL_CONF        (1 << 10)
/**
 * Codec supports frame-level multithreading.
 */
#define AV_CODEC_CAP_FRAME_THREADS       (1 << 12)
/**
 * Codec supports slice-based (or partition-based) multithreading.
 */
#define AV_CODEC_CAP_SLICE_THREADS       (1 << 13)
/**
 * Codec supports changed parameters at any point.
 */
#define AV_CODEC_CAP_PARAM_CHANGE        (1 << 14)
/**
 * Codec supports avctx->thread_count == 0 (auto).
 */
#define AV_CODEC_CAP_AUTO_THREADS        (1 << 15)
/**
 * Audio encoder supports receiving a different number of samples in each call.
 */
#define AV_CODEC_CAP_VARIABLE_FRAME_SIZE (1 << 16)
/**
 * Decoder is not a preferred choice for probing.
 * This indicates that the decoder is not a good choice for probing.
 * It could for example be an expensive to spin up hardware decoder,
 * or it could simply not provide a lot of useful information about
 * the stream.
 * A decoder marked with this flag should only be used as last resort
 * choice for probing.
 */
#define AV_CODEC_CAP_AVOID_PROBING       (1 << 17)
/**
 * Codec is intra only.
 */
#define AV_CODEC_CAP_INTRA_ONLY       0x40000000
/**
 * Codec is lossless.
 */
#define AV_CODEC_CAP_LOSSLESS         0x80000000


#if FF_API_WITHOUT_PREFIX
/**
 * Allow decoders to produce frames with data planes that are not aligned
 * to CPU requirements (e.g. due to cropping).
 */
#define CODEC_FLAG_UNALIGNED AV_CODEC_FLAG_UNALIGNED
#define CODEC_FLAG_QSCALE AV_CODEC_FLAG_QSCALE
#define CODEC_FLAG_4MV    AV_CODEC_FLAG_4MV
#define CODEC_FLAG_OUTPUT_CORRUPT AV_CODEC_FLAG_OUTPUT_CORRUPT
#define CODEC_FLAG_QPEL   AV_CODEC_FLAG_QPEL
#if FF_API_GMC
/**
 * @deprecated use the "gmc" private option of the libxvid encoder
 */
#define CODEC_FLAG_GMC    0x0020  ///< Use GMC.
#endif
#if FF_API_MV0
/**
 * @deprecated use the flag "mv0" in the "mpv_flags" private option of the
 * mpegvideo encoders
 */
#define CODEC_FLAG_MV0    0x0040
#endif
#if FF_API_INPUT_PRESERVED
/**
 * @deprecated passing reference-counted frames to the encoders replaces this
 * flag
 */
#define CODEC_FLAG_INPUT_PRESERVED 0x0100
#endif
#define CODEC_FLAG_PASS1           AV_CODEC_FLAG_PASS1
#define CODEC_FLAG_PASS2           AV_CODEC_FLAG_PASS2
#define CODEC_FLAG_GRAY            AV_CODEC_FLAG_GRAY
#if FF_API_EMU_EDGE
/**
 * @deprecated edges are not used/required anymore. I.e. this flag is now always
 * set.
 */
#define CODEC_FLAG_EMU_EDGE        0x4000
#endif
#define CODEC_FLAG_PSNR            AV_CODEC_FLAG_PSNR
#define CODEC_FLAG_TRUNCATED       AV_CODEC_FLAG_TRUNCATED

#if FF_API_NORMALIZE_AQP
/**
 * @deprecated use the flag "naq" in the "mpv_flags" private option of the
 * mpegvideo encoders
 */
#define CODEC_FLAG_NORMALIZE_AQP  0x00020000
#endif
#define CODEC_FLAG_INTERLACED_DCT AV_CODEC_FLAG_INTERLACED_DCT
#define CODEC_FLAG_LOW_DELAY      AV_CODEC_FLAG_LOW_DELAY
#define CODEC_FLAG_GLOBAL_HEADER  AV_CODEC_FLAG_GLOBAL_HEADER
#define CODEC_FLAG_BITEXACT       AV_CODEC_FLAG_BITEXACT
#define CODEC_FLAG_AC_PRED        AV_CODEC_FLAG_AC_PRED
#define CODEC_FLAG_LOOP_FILTER    AV_CODEC_FLAG_LOOP_FILTER
#define CODEC_FLAG_INTERLACED_ME  AV_CODEC_FLAG_INTERLACED_ME
#define CODEC_FLAG_CLOSED_GOP     AV_CODEC_FLAG_CLOSED_GOP
#define CODEC_FLAG2_FAST          AV_CODEC_FLAG2_FAST
#define CODEC_FLAG2_NO_OUTPUT     AV_CODEC_FLAG2_NO_OUTPUT
#define CODEC_FLAG2_LOCAL_HEADER  AV_CODEC_FLAG2_LOCAL_HEADER
#define CODEC_FLAG2_DROP_FRAME_TIMECODE AV_CODEC_FLAG2_DROP_FRAME_TIMECODE
#define CODEC_FLAG2_IGNORE_CROP   AV_CODEC_FLAG2_IGNORE_CROP

#define CODEC_FLAG2_CHUNKS        AV_CODEC_FLAG2_CHUNKS
#define CODEC_FLAG2_SHOW_ALL      AV_CODEC_FLAG2_SHOW_ALL
#define CODEC_FLAG2_EXPORT_MVS    AV_CODEC_FLAG2_EXPORT_MVS
#define CODEC_FLAG2_SKIP_MANUAL   AV_CODEC_FLAG2_SKIP_MANUAL

/* Unsupported options :
 *              Syntax Arithmetic coding (SAC)
 *              Reference Picture Selection
 *              Independent Segment Decoding */
/* /Fx */
/* codec capabilities */

#define CODEC_CAP_DRAW_HORIZ_BAND AV_CODEC_CAP_DRAW_HORIZ_BAND ///< Decoder can use draw_horiz_band callback.
/**
 * Codec uses get_buffer() for allocating buffers and supports custom allocators.
 * If not set, it might not use get_buffer() at all or use operations that
 * assume the buffer was allocated by avcodec_default_get_buffer.
 */
#define CODEC_CAP_DR1             AV_CODEC_CAP_DR1
#define CODEC_CAP_TRUNCATED       AV_CODEC_CAP_TRUNCATED
#if FF_API_XVMC
/* Codec can export data for HW decoding. This flag indicates that
 * the codec would call get_format() with list that might contain HW accelerated
 * pixel formats (XvMC, VDPAU, VAAPI, etc). The application can pick any of them
 * including raw image format.
 * The application can use the passed context to determine bitstream version,
 * chroma format, resolution etc.
 */
#define CODEC_CAP_HWACCEL         0x0010
#endif /* FF_API_XVMC */
/**
 * Encoder or decoder requires flushing with NULL input at the end in order to
 * give the complete and correct output.
 *
 * NOTE: If this flag is not set, the codec is guaranteed to never be fed with
 *       with NULL data. The user can still send NULL data to the public encode
 *       or decode function, but libavcodec will not pass it along to the codec
 *       unless this flag is set.
 *
 * Decoders:
 * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL,
 * avpkt->size=0 at the end to get the delayed data until the decoder no longer
 * returns frames.
 *
 * Encoders:
 * The encoder needs to be fed with NULL data at the end of encoding until the
 * encoder no longer returns data.
 *
 * NOTE: For encoders implementing the AVCodec.encode2() function, setting this
 *       flag also means that the encoder must set the pts and duration for
 *       each output packet. If this flag is not set, the pts and duration will
 *       be determined by libavcodec from the input frame.
 */
#define CODEC_CAP_DELAY           AV_CODEC_CAP_DELAY
/**
 * Codec can be fed a final frame with a smaller size.
 * This can be used to prevent truncation of the last audio samples.
 */
#define CODEC_CAP_SMALL_LAST_FRAME AV_CODEC_CAP_SMALL_LAST_FRAME
#if FF_API_CAP_VDPAU
/**
 * Codec can export data for HW decoding (VDPAU).
 */
#define CODEC_CAP_HWACCEL_VDPAU    AV_CODEC_CAP_HWACCEL_VDPAU
#endif
/**
 * Codec can output multiple frames per AVPacket
 * Normally demuxers return one frame at a time, demuxers which do not do
 * are connected to a parser to split what they return into proper frames.
 * This flag is reserved to the very rare category of codecs which have a
 * bitstream that cannot be split into frames without timeconsuming
 * operations like full decoding. Demuxers carrying such bitstreams thus
 * may return multiple frames in a packet. This has many disadvantages like
 * prohibiting stream copy in many cases thus it should only be considered
 * as a last resort.
 */
#define CODEC_CAP_SUBFRAMES        AV_CODEC_CAP_SUBFRAMES
/**
 * Codec is experimental and is thus avoided in favor of non experimental
 * encoders
 */
#define CODEC_CAP_EXPERIMENTAL     AV_CODEC_CAP_EXPERIMENTAL
/**
 * Codec should fill in channel configuration and samplerate instead of container
 */
#define CODEC_CAP_CHANNEL_CONF     AV_CODEC_CAP_CHANNEL_CONF
#if FF_API_NEG_LINESIZES
/**
 * @deprecated no codecs use this capability
 */
#define CODEC_CAP_NEG_LINESIZES    0x0800
#endif
/**
 * Codec supports frame-level multithreading.
 */
#define CODEC_CAP_FRAME_THREADS    AV_CODEC_CAP_FRAME_THREADS
/**
 * Codec supports slice-based (or partition-based) multithreading.
 */
#define CODEC_CAP_SLICE_THREADS    AV_CODEC_CAP_SLICE_THREADS
/**
 * Codec supports changed parameters at any point.
 */
#define CODEC_CAP_PARAM_CHANGE     AV_CODEC_CAP_PARAM_CHANGE
/**
 * Codec supports avctx->thread_count == 0 (auto).
 */
#define CODEC_CAP_AUTO_THREADS     AV_CODEC_CAP_AUTO_THREADS
/**
 * Audio encoder supports receiving a different number of samples in each call.
 */
#define CODEC_CAP_VARIABLE_FRAME_SIZE AV_CODEC_CAP_VARIABLE_FRAME_SIZE
/**
 * Codec is intra only.
 */
#define CODEC_CAP_INTRA_ONLY       AV_CODEC_CAP_INTRA_ONLY
/**
 * Codec is lossless.
 */
#define CODEC_CAP_LOSSLESS         AV_CODEC_CAP_LOSSLESS

/**
 * HWAccel is experimental and is thus avoided in favor of non experimental
 * codecs
 */
#define HWACCEL_CODEC_CAP_EXPERIMENTAL     0x0200
#endif /* FF_API_WITHOUT_PREFIX */

#if FF_API_MB_TYPE
//The following defines may change, don't expect compatibility if you use them.
#define MB_TYPE_INTRA4x4   0x0001
#define MB_TYPE_INTRA16x16 0x0002 //FIXME H.264-specific
#define MB_TYPE_INTRA_PCM  0x0004 //FIXME H.264-specific
#define MB_TYPE_16x16      0x0008
#define MB_TYPE_16x8       0x0010
#define MB_TYPE_8x16       0x0020
#define MB_TYPE_8x8        0x0040
#define MB_TYPE_INTERLACED 0x0080
#define MB_TYPE_DIRECT2    0x0100 //FIXME
#define MB_TYPE_ACPRED     0x0200
#define MB_TYPE_GMC        0x0400
#define MB_TYPE_SKIP       0x0800
#define MB_TYPE_P0L0       0x1000
#define MB_TYPE_P1L0       0x2000
#define MB_TYPE_P0L1       0x4000
#define MB_TYPE_P1L1       0x8000
#define MB_TYPE_L0         (MB_TYPE_P0L0 | MB_TYPE_P1L0)
#define MB_TYPE_L1         (MB_TYPE_P0L1 | MB_TYPE_P1L1)
#define MB_TYPE_L0L1       (MB_TYPE_L0   | MB_TYPE_L1)
#define MB_TYPE_QUANT      0x00010000
#define MB_TYPE_CBP        0x00020000
// Note bits 24-31 are reserved for codec specific use (H.264 ref0, MPEG-1 0mv, ...)
#endif

/**
 * Pan Scan area.
 * This specifies the area which should be displayed.
 * Note there may be multiple such areas for one frame.
 */
typedef struct AVPanScan{
    /**
     * id
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
     */
    int id;

    /**
     * width and height in 1/16 pel
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
     */
    int width;
    int height;

    /**
     * position of the top left corner in 1/16 pel for up to 3 fields/frames
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
     */
    int16_t position[3][2];
}AVPanScan;

/**
 * This structure describes the bitrate properties of an encoded bitstream. It
 * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD
 * parameters for H.264/HEVC.
 */
typedef struct AVCPBProperties {
    /**
     * Maximum bitrate of the stream, in bits per second.
     * Zero if unknown or unspecified.
     */
    int max_bitrate;
    /**
     * Minimum bitrate of the stream, in bits per second.
     * Zero if unknown or unspecified.
     */
    int min_bitrate;
    /**
     * Average bitrate of the stream, in bits per second.
     * Zero if unknown or unspecified.
     */
    int avg_bitrate;

    /**
     * The size of the buffer to which the ratecontrol is applied, in bits.
     * Zero if unknown or unspecified.
     */
    int buffer_size;

    /**
     * The delay between the time the packet this structure is associated with
     * is received and the time when it should be decoded, in periods of a 27MHz
     * clock.
     *
     * UINT64_MAX when unknown or unspecified.
     */
    uint64_t vbv_delay;
} AVCPBProperties;

#if FF_API_QSCALE_TYPE
#define FF_QSCALE_TYPE_MPEG1 0
#define FF_QSCALE_TYPE_MPEG2 1
#define FF_QSCALE_TYPE_H264  2
#define FF_QSCALE_TYPE_VP56  3
#endif

/**
 * The decoder will keep a reference to the frame and may reuse it later.
 */
#define AV_GET_BUFFER_FLAG_REF (1 << 0)

/**
 * @defgroup lavc_packet AVPacket
 *
 * Types and functions for working with AVPacket.
 * @{
 */
enum AVPacketSideDataType {
    AV_PKT_DATA_PALETTE,

    /**
     * The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format
     * that the extradata buffer was changed and the receiving side should
     * act upon it appropriately. The new extradata is embedded in the side
     * data buffer and should be immediately used for processing the current
     * frame or packet.
     */
    AV_PKT_DATA_NEW_EXTRADATA,

    /**
     * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
     * @code
     * u32le param_flags
     * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT)
     *     s32le channel_count
     * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT)
     *     u64le channel_layout
     * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE)
     *     s32le sample_rate
     * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS)
     *     s32le width
     *     s32le height
     * @endcode
     */
    AV_PKT_DATA_PARAM_CHANGE,

    /**
     * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of
     * structures with info about macroblocks relevant to splitting the
     * packet into smaller packets on macroblock edges (e.g. as for RFC 2190).
     * That is, it does not necessarily contain info about all macroblocks,
     * as long as the distance between macroblocks in the info is smaller
     * than the target payload size.
     * Each MB info structure is 12 bytes, and is laid out as follows:
     * @code
     * u32le bit offset from the start of the packet
     * u8    current quantizer at the start of the macroblock
     * u8    GOB number
     * u16le macroblock address within the GOB
     * u8    horizontal MV predictor
     * u8    vertical MV predictor
     * u8    horizontal MV predictor for block number 3
     * u8    vertical MV predictor for block number 3
     * @endcode
     */
    AV_PKT_DATA_H263_MB_INFO,

    /**
     * This side data should be associated with an audio stream and contains
     * ReplayGain information in form of the AVReplayGain struct.
     */
    AV_PKT_DATA_REPLAYGAIN,

    /**
     * This side data contains a 3x3 transformation matrix describing an affine
     * transformation that needs to be applied to the decoded video frames for
     * correct presentation.
     *
     * See libavutil/display.h for a detailed description of the data.
     */
    AV_PKT_DATA_DISPLAYMATRIX,

    /**
     * This side data should be associated with a video stream and contains
     * Stereoscopic 3D information in form of the AVStereo3D struct.
     */
    AV_PKT_DATA_STEREO3D,

    /**
     * This side data should be associated with an audio stream and corresponds
     * to enum AVAudioServiceType.
     */
    AV_PKT_DATA_AUDIO_SERVICE_TYPE,

    /**
     * This side data contains quality related information from the encoder.
     * @code
     * u32le quality factor of the compressed frame. Allowed range is between 1 (good) and FF_LAMBDA_MAX (bad).
     * u8    picture type
     * u8    error count
     * u16   reserved
     * u64le[error count] sum of squared differences between encoder in and output
     * @endcode
     */
    AV_PKT_DATA_QUALITY_STATS,

    /**
     * This side data contains an integer value representing the stream index
     * of a "fallback" track.  A fallback track indicates an alternate
     * track to use when the current track can not be decoded for some reason.
     * e.g. no decoder available for codec.
     */
    AV_PKT_DATA_FALLBACK_TRACK,

    /**
     * This side data corresponds to the AVCPBProperties struct.
     */
    AV_PKT_DATA_CPB_PROPERTIES,

    /**
     * Recommmends skipping the specified number of samples
     * @code
     * u32le number of samples to skip from start of this packet
     * u32le number of samples to skip from end of this packet
     * u8    reason for start skip
     * u8    reason for end   skip (0=padding silence, 1=convergence)
     * @endcode
     */
    AV_PKT_DATA_SKIP_SAMPLES=70,

    /**
     * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that
     * the packet may contain "dual mono" audio specific to Japanese DTV
     * and if it is true, recommends only the selected channel to be used.
     * @code
     * u8    selected channels (0=mail/left, 1=sub/right, 2=both)
     * @endcode
     */
    AV_PKT_DATA_JP_DUALMONO,

    /**
     * A list of zero terminated key/value strings. There is no end marker for
     * the list, so it is required to rely on the side data size to stop.
     */
    AV_PKT_DATA_STRINGS_METADATA,

    /**
     * Subtitle event position
     * @code
     * u32le x1
     * u32le y1
     * u32le x2
     * u32le y2
     * @endcode
     */
    AV_PKT_DATA_SUBTITLE_POSITION,

    /**
     * Data found in BlockAdditional element of matroska container. There is
     * no end marker for the data, so it is required to rely on the side data
     * size to recognize the end. 8 byte id (as found in BlockAddId) followed
     * by data.
     */
    AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,

    /**
     * The optional first identifier line of a WebVTT cue.
     */
    AV_PKT_DATA_WEBVTT_IDENTIFIER,

    /**
     * The optional settings (rendering instructions) that immediately
     * follow the timestamp specifier of a WebVTT cue.
     */
    AV_PKT_DATA_WEBVTT_SETTINGS,

    /**
     * A list of zero terminated key/value strings. There is no end marker for
     * the list, so it is required to rely on the side data size to stop. This
     * side data includes updated metadata which appeared in the stream.
     */
    AV_PKT_DATA_METADATA_UPDATE,

    /**
     * MPEGTS stream ID, this is required to pass the stream ID
     * information from the demuxer to the corresponding muxer.
     */
    AV_PKT_DATA_MPEGTS_STREAM_ID,

    /**
     * Mastering display metadata (based on SMPTE-2086:2014). This metadata
     * should be associated with a video stream and containts data in the form
     * of the AVMasteringDisplayMetadata struct.
     */
    AV_PKT_DATA_MASTERING_DISPLAY_METADATA
};

#define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED

typedef struct AVPacketSideData {
    uint8_t *data;
    int      size;
    enum AVPacketSideDataType type;
} AVPacketSideData;

/**
 * This structure stores compressed data. It is typically exported by demuxers
 * and then passed as input to decoders, or received as output from encoders and
 * then passed to muxers.
 *
 * For video, it should typically contain one compressed frame. For audio it may
 * contain several compressed frames. Encoders are allowed to output empty
 * packets, with no compressed data, containing only side data
 * (e.g. to update some stream parameters at the end of encoding).
 *
 * AVPacket is one of the few structs in FFmpeg, whose size is a part of public
 * ABI. Thus it may be allocated on stack and no new fields can be added to it
 * without libavcodec and libavformat major bump.
 *
 * The semantics of data ownership depends on the buf field.
 * If it is set, the packet data is dynamically allocated and is
 * valid indefinitely until a call to av_packet_unref() reduces the
 * reference count to 0.
 *
 * If the buf field is not set av_packet_ref() would make a copy instead
 * of increasing the reference count.
 *
 * The side data is always allocated with av_malloc(), copied by
 * av_packet_ref() and freed by av_packet_unref().
 *
 * @see av_packet_ref
 * @see av_packet_unref
 */
typedef struct AVPacket {
    /**
     * A reference to the reference-counted buffer where the packet data is
     * stored.
     * May be NULL, then the packet data is not reference-counted.
     */
    AVBufferRef *buf;
    /**
     * Presentation timestamp in AVStream->time_base units; the time at which
     * the decompressed packet will be presented to the user.
     * Can be AV_NOPTS_VALUE if it is not stored in the file.
     * pts MUST be larger or equal to dts as presentation cannot happen before
     * decompression, unless one wants to view hex dumps. Some formats misuse
     * the terms dts and pts/cts to mean something different. Such timestamps
     * must be converted to true pts/dts before they are stored in AVPacket.
     */
    int64_t pts;
    /**
     * Decompression timestamp in AVStream->time_base units; the time at which
     * the packet is decompressed.
     * Can be AV_NOPTS_VALUE if it is not stored in the file.
     */
    int64_t dts;
    uint8_t *data;
    int   size;
    int   stream_index;
    /**
     * A combination of AV_PKT_FLAG values
     */
    int   flags;
    /**
     * Additional packet data that can be provided by the container.
     * Packet can contain several types of side information.
     */
    AVPacketSideData *side_data;
    int side_data_elems;

    /**
     * Duration of this packet in AVStream->time_base units, 0 if unknown.
     * Equals next_pts - this_pts in presentation order.
     */
    int64_t duration;

    int64_t pos;                            ///< byte position in stream, -1 if unknown

#if FF_API_CONVERGENCE_DURATION
    /**
     * @deprecated Same as the duration field, but as int64_t. This was required
     * for Matroska subtitles, whose duration values could overflow when the
     * duration field was still an int.
     */
    attribute_deprecated
    int64_t convergence_duration;
#endif
} AVPacket;
#define AV_PKT_FLAG_KEY     0x0001 ///< The packet contains a keyframe
#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted
/**
 * Flag is used to discard packets which are required to maintain valid
 * decoder state but are not required for output and should be dropped
 * after decoding.
 **/
#define AV_PKT_FLAG_DISCARD   0x0004
#define AV_PKT_FLAG_NEW_SEG 0x8000 ///< The packet is the first packet from a source in concat

enum AVSideDataParamChangeFlags {
    AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT  = 0x0001,
    AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002,
    AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE    = 0x0004,
    AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS     = 0x0008,
};
/**
 * @}
 */

struct AVCodecInternal;

enum AVFieldOrder {
    AV_FIELD_UNKNOWN,
    AV_FIELD_PROGRESSIVE,
    AV_FIELD_TT,          //< Top coded_first, top displayed first
    AV_FIELD_BB,          //< Bottom coded first, bottom displayed first
    AV_FIELD_TB,          //< Top coded first, bottom displayed first
    AV_FIELD_BT,          //< Bottom coded first, top displayed first
};

/**
 * main external API structure.
 * New fields can be added to the end with minor version bumps.
 * Removal, reordering and changes to existing fields require a major
 * version bump.
 * Please use AVOptions (av_opt* / av_set/get*()) to access these fields from user
 * applications.
 * The name string for AVOptions options matches the associated command line
 * parameter name and can be found in libavcodec/options_table.h
 * The AVOption/command line parameter names differ in some cases from the C
 * structure field names for historic reasons or brevity.
 * sizeof(AVCodecContext) must not be used outside libav*.
 */
typedef struct AVCodecContext {
    /**
     * information on struct for av_log
     * - set by avcodec_alloc_context3
     */
    const AVClass *av_class;
    int log_level_offset;

    enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */
    const struct AVCodec  *codec;
#if FF_API_CODEC_NAME
    /**
     * @deprecated this field is not used for anything in libavcodec
     */
    attribute_deprecated
    char             codec_name[32];
#endif
    enum AVCodecID     codec_id; /* see AV_CODEC_ID_xxx */

    /**
     * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
     * This is used to work around some encoder bugs.
     * A demuxer should set this to what is stored in the field used to identify the codec.
     * If there are multiple such fields in a container then the demuxer should choose the one
     * which maximizes the information about the used codec.
     * If the codec tag field in a container is larger than 32 bits then the demuxer should
     * remap the longer ID to 32 bits with a table or other structure. Alternatively a new
     * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated
     * first.
     * - encoding: Set by user, if not then the default based on codec_id will be used.
     * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
     */
    unsigned int codec_tag;

#if FF_API_STREAM_CODEC_TAG
    /**
     * @deprecated this field is unused
     */
    attribute_deprecated
    unsigned int stream_codec_tag;
#endif

    void *priv_data;

    /**
     * Private context used for internal data.
     *
     * Unlike priv_data, this is not codec-specific. It is used in general
     * libavcodec functions.
     */
    struct AVCodecInternal *internal;

    /**
     * Private data of the user, can be used to carry app specific stuff.
     * - encoding: Set by user.
     * - decoding: Set by user.
     */
    void *opaque;

    /**
     * the average bitrate
     * - encoding: Set by user; unused for constant quantizer encoding.
     * - decoding: Set by user, may be overwritten by libavcodec
     *             if this info is available in the stream
     */
    int64_t bit_rate;

    /**
     * number of bits the bitstream is allowed to diverge from the reference.
     *           the reference can be CBR (for CBR pass1) or VBR (for pass2)
     * - encoding: Set by user; unused for constant quantizer encoding.
     * - decoding: unused
     */
    int bit_rate_tolerance;

    /**
     * Global quality for codecs which cannot change it per frame.
     * This should be proportional to MPEG-1/2/4 qscale.
     * - encoding: Set by user.
     * - decoding: unused
     */
    int global_quality;

    /**
     * - encoding: Set by user.
     * - decoding: unused
     */
    int compression_level;
#define FF_COMPRESSION_DEFAULT -1

    /**
     * AV_CODEC_FLAG_*.
     * - encoding: Set by user.
     * - decoding: Set by user.
     */
    int flags;

    /**
     * AV_CODEC_FLAG2_*
     * - encoding: Set by user.
     * - decoding: Set by user.
     */
    int flags2;

    /**
     * some codecs need / can use extradata like Huffman tables.
     * MJPEG: Huffman tables
     * rv10: additional flags
     * MPEG-4: global headers (they can be in the bitstream or here)
     * The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger
     * than extradata_size to avoid problems if it is read with the bitstream reader.
     * The bytewise contents of extradata must not depend on the architecture or CPU endianness.
     * - encoding: Set/allocated/freed by libavcodec.
     * - decoding: Set/allocated/freed by user.
     */
    uint8_t *extradata;
    int extradata_size;

    /**
     * This is the fundamental unit of time (in seconds) in terms
     * of which frame timestamps are represented. For fixed-fps content,
     * timebase should be 1/framerate and timestamp increments should be
     * identically 1.
     * This often, but not always is the inverse of the frame rate or field rate
     * for video. 1/time_base is not the average frame rate if the frame rate is not
     * constant.
     *
     * Like containers, elementary streams also can store timestamps, 1/time_base
     * is the unit in which these timestamps are specified.
     * As example of such codec time base see ISO/IEC 14496-2:2001(E)
     * vop_time_increment_resolution and fixed_vop_rate
     * (fixed_vop_rate == 0 implies that it is different from the framerate)
     *
     * - encoding: MUST be set by user.
     * - decoding: the use of this field for decoding is deprecated.
     *             Use framerate instead.
     */
    AVRational time_base;

    /**
     * For some codecs, the time base is closer to the field rate than the frame rate.
     * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration
     * if no telecine is used ...
     *
     * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2.
     */
    int ticks_per_frame;

    /**
     * Codec delay.
     *
     * Encoding: Number of frames delay there will be from the encoder input to
     *           the decoder output. (we assume the decoder matches the spec)
     * Decoding: Number of frames delay in addition to what a standard decoder
     *           as specified in the spec would produce.
     *
     * Video:
     *   Number of frames the decoded output will be delayed relative to the
     *   encoded input.
     *
     * Audio:
     *   For encoding, this field is unused (see initial_padding).
     *
     *   For decoding, this is the number of samples the decoder needs to
     *   output before the decoder's output is valid. When seeking, you should
     *   start decoding this many samples prior to your desired seek point.
     *
     * - encoding: Set by libavcodec.
     * - decoding: Set by libavcodec.
     */
    int delay;


    /* video only */
    /**
     * picture width / height.
     *
     * @note Those fields may not match the values of the last
     * AVFrame output by avcodec_decode_video2 due frame
     * reordering.
     *
     * - encoding: MUST be set by user.
     * - decoding: May be set by the user before opening the decoder if known e.g.
     *             from the container. Some decoders will require the dimensions
     *             to be set by the caller. During decoding, the decoder may
     *             overwrite those values as required while parsing the data.
     */
    int width, height;

    /**
     * Bitstream width / height, may be different from width/height e.g. when
     * the decoded frame is cropped before being output or lowres is enabled.
     *
     * @note Those field may not match the value of the last
     * AVFrame output by avcodec_receive_frame() due frame
     * reordering.
     *
     * - encoding: unused
     * - decoding: May be set by the user before opening the decoder if known
     *             e.g. from the container. During decoding, the decoder may
     *             overwrite those values as required while parsing the data.
     */
    int coded_width, coded_height;

#if FF_API_ASPECT_EXTENDED
#define FF_ASPECT_EXTENDED 15
#endif

    /**
     * the number of pictures in a group of pictures, or 0 for intra_only
     * - encoding: Set by user.
     * - decoding: unused
     */
    int gop_size;

    /**
     * Pixel format, see AV_PIX_FMT_xxx.
     * May be set by the demuxer if known from headers.
     * May be overridden by the decoder if it knows better.
     *
     * @note This field may not match the value of the last
     * AVFrame output by avcodec_receive_frame() due frame
     * reordering.
     *
     * - encoding: Set by user.
     * - decoding: Set by user if known, overridden by libavcodec while
     *             parsing the data.
     */
    enum AVPixelFormat pix_fmt;

#if FF_API_MOTION_EST
    /**
     * This option does nothing
     * @deprecated use codec private options instead
     */
    attribute_deprecated int me_method;
#endif

    /**
     * If non NULL, 'draw_horiz_band' is called by the libavcodec
     * decoder to draw a horizontal band. It improves cache usage. Not
     * all codecs can do that. You must check the codec capabilities
     * beforehand.
     * When multithreading is used, it may be called from multiple threads
     * at the same time; threads might draw different parts of the same AVFrame,
     * or multiple AVFrames, and there is no guarantee that slices will be drawn
     * in order.
     * The function is also used by hardware acceleration APIs.
     * It is called at least once during frame decoding to pass
     * the data needed for hardware render.
     * In that mode instead of pixel data, AVFrame points to
     * a structure specific to the acceleration API. The application
     * reads the structure and can change some fields to indicate progress
     * or mark state.
     * - encoding: unused
     * - decoding: Set by user.
     * @param height the height of the slice
     * @param y the y position of the slice
     * @param type 1->top field, 2->bottom field, 3->frame
     * @param offset offset into the AVFrame.data from which the slice should be read
     */
    void (*draw_horiz_band)(struct AVCodecContext *s,
                            const AVFrame *src, int offset[AV_NUM_DATA_POINTERS],
                            int y, int type, int height);

    /**
     * callback to negotiate the pixelFormat
     * @param fmt is the list of formats which are supported by the codec,
     * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality.
     * The first is always the native one.
     * @note The callback may be called again immediately if initialization for
     * the selected (hardware-accelerated) pixel format failed.
     * @warning Behavior is undefined if the callback returns a value not
     * in the fmt list of formats.
     * @return the chosen format
     * - encoding: unused
     * - decoding: Set by user, if not set the native format will be chosen.
     */
    enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt);

    /**
     * maximum number of B-frames between non-B-frames
     * Note: The output will be delayed by max_b_frames+1 relative to the input.
     * - encoding: Set by user.
     * - decoding: unused
     */
    int max_b_frames;

    /**
     * qscale factor between IP and B-frames
     * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset).
     * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
     * - encoding: Set by user.
     * - decoding: unused
     */
    float b_quant_factor;

#if FF_API_RC_STRATEGY
    /** @deprecated use codec private option instead */
    attribute_deprecated int rc_strategy;
#define FF_RC_STRATEGY_XVID 1
#endif

#if FF_API_PRIVATE_OPT
    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int b_frame_strategy;
#endif

    /**
     * qscale offset between IP and B-frames
     * - encoding: Set by user.
     * - decoding: unused
     */
    float b_quant_offset;

    /**
     * Size of the frame reordering buffer in the decoder.
     * For MPEG-2 it is 1 IPB or 0 low delay IP.
     * - encoding: Set by libavcodec.
     * - decoding: Set by libavcodec.
     */
    int has_b_frames;

#if FF_API_PRIVATE_OPT
    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int mpeg_quant;
#endif

    /**
     * qscale factor between P- and I-frames
     * If > 0 then the last P-frame quantizer will be used (q = lastp_q * factor + offset).
     * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
     * - encoding: Set by user.
     * - decoding: unused
     */
    float i_quant_factor;

    /**
     * qscale offset between P and I-frames
     * - encoding: Set by user.
     * - decoding: unused
     */
    float i_quant_offset;

    /**
     * luminance masking (0-> disabled)
     * - encoding: Set by user.
     * - decoding: unused
     */
    float lumi_masking;

    /**
     * temporary complexity masking (0-> disabled)
     * - encoding: Set by user.
     * - decoding: unused
     */
    float temporal_cplx_masking;

    /**
     * spatial complexity masking (0-> disabled)
     * - encoding: Set by user.
     * - decoding: unused
     */
    float spatial_cplx_masking;

    /**
     * p block masking (0-> disabled)
     * - encoding: Set by user.
     * - decoding: unused
     */
    float p_masking;

    /**
     * darkness masking (0-> disabled)
     * - encoding: Set by user.
     * - decoding: unused
     */
    float dark_masking;

    /**
     * slice count
     * - encoding: Set by libavcodec.
     * - decoding: Set by user (or 0).
     */
    int slice_count;

#if FF_API_PRIVATE_OPT
    /** @deprecated use encoder private options instead */
    attribute_deprecated
     int prediction_method;
#define FF_PRED_LEFT   0
#define FF_PRED_PLANE  1
#define FF_PRED_MEDIAN 2
#endif

    /**
     * slice offsets in the frame in bytes
     * - encoding: Set/allocated by libavcodec.
     * - decoding: Set/allocated by user (or NULL).
     */
    int *slice_offset;

    /**
     * sample aspect ratio (0 if unknown)
     * That is the width of a pixel divided by the height of the pixel.
     * Numerator and denominator must be relatively prime and smaller than 256 for some video standards.
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
     */
    AVRational sample_aspect_ratio;

    /**
     * motion estimation comparison function
     * - encoding: Set by user.
     * - decoding: unused
     */
    int me_cmp;
    /**
     * subpixel motion estimation comparison function
     * - encoding: Set by user.
     * - decoding: unused
     */
    int me_sub_cmp;
    /**
     * macroblock comparison function (not supported yet)
     * - encoding: Set by user.
     * - decoding: unused
     */
    int mb_cmp;
    /**
     * interlaced DCT comparison function
     * - encoding: Set by user.
     * - decoding: unused
     */
    int ildct_cmp;
#define FF_CMP_SAD          0
#define FF_CMP_SSE          1
#define FF_CMP_SATD         2
#define FF_CMP_DCT          3
#define FF_CMP_PSNR         4
#define FF_CMP_BIT          5
#define FF_CMP_RD           6
#define FF_CMP_ZERO         7
#define FF_CMP_VSAD         8
#define FF_CMP_VSSE         9
#define FF_CMP_NSSE         10
#define FF_CMP_W53          11
#define FF_CMP_W97          12
#define FF_CMP_DCTMAX       13
#define FF_CMP_DCT264       14
#define FF_CMP_MEDIAN_SAD   15
#define FF_CMP_CHROMA       256

    /**
     * ME diamond size & shape
     * - encoding: Set by user.
     * - decoding: unused
     */
    int dia_size;

    /**
     * amount of previous MV predictors (2a+1 x 2a+1 square)
     * - encoding: Set by user.
     * - decoding: unused
     */
    int last_predictor_count;

#if FF_API_PRIVATE_OPT
    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int pre_me;
#endif

    /**
     * motion estimation prepass comparison function
     * - encoding: Set by user.
     * - decoding: unused
     */
    int me_pre_cmp;

    /**
     * ME prepass diamond size & shape
     * - encoding: Set by user.
     * - decoding: unused
     */
    int pre_dia_size;

    /**
     * subpel ME quality
     * - encoding: Set by user.
     * - decoding: unused
     */
    int me_subpel_quality;

#if FF_API_AFD
    /**
     * DTG active format information (additional aspect ratio
     * information only used in DVB MPEG-2 transport streams)
     * 0 if not set.
     *
     * - encoding: unused
     * - decoding: Set by decoder.
     * @deprecated Deprecated in favor of AVSideData
     */
    attribute_deprecated int dtg_active_format;
#define FF_DTG_AFD_SAME         8
#define FF_DTG_AFD_4_3          9
#define FF_DTG_AFD_16_9         10
#define FF_DTG_AFD_14_9         11
#define FF_DTG_AFD_4_3_SP_14_9  13
#define FF_DTG_AFD_16_9_SP_14_9 14
#define FF_DTG_AFD_SP_4_3       15
#endif /* FF_API_AFD */

    /**
     * maximum motion estimation search range in subpel units
     * If 0 then no limit.
     *
     * - encoding: Set by user.
     * - decoding: unused
     */
    int me_range;

#if FF_API_QUANT_BIAS
    /**
     * @deprecated use encoder private option instead
     */
    attribute_deprecated int intra_quant_bias;
#define FF_DEFAULT_QUANT_BIAS 999999

    /**
     * @deprecated use encoder private option instead
     */
    attribute_deprecated int inter_quant_bias;
#endif

    /**
     * slice flags
     * - encoding: unused
     * - decoding: Set by user.
     */
    int slice_flags;
#define SLICE_FLAG_CODED_ORDER    0x0001 ///< draw_horiz_band() is called in coded order instead of display
#define SLICE_FLAG_ALLOW_FIELD    0x0002 ///< allow draw_horiz_band() with field slices (MPEG-2 field pics)
#define SLICE_FLAG_ALLOW_PLANE    0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)

#if FF_API_XVMC
    /**
     * XVideo Motion Acceleration
     * - encoding: forbidden
     * - decoding: set by decoder
     * @deprecated XvMC doesn't need it anymore.
     */
    attribute_deprecated int xvmc_acceleration;
#endif /* FF_API_XVMC */

    /**
     * macroblock decision mode
     * - encoding: Set by user.
     * - decoding: unused
     */
    int mb_decision;
#define FF_MB_DECISION_SIMPLE 0        ///< uses mb_cmp
#define FF_MB_DECISION_BITS   1        ///< chooses the one which needs the fewest bits
#define FF_MB_DECISION_RD     2        ///< rate distortion

    /**
     * custom intra quantization matrix
     * - encoding: Set by user, can be NULL.
     * - decoding: Set by libavcodec.
     */
    uint16_t *intra_matrix;

    /**
     * custom inter quantization matrix
     * - encoding: Set by user, can be NULL.
     * - decoding: Set by libavcodec.
     */
    uint16_t *inter_matrix;

#if FF_API_PRIVATE_OPT
    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int scenechange_threshold;

    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int noise_reduction;
#endif

#if FF_API_MPV_OPT
    /**
     * @deprecated this field is unused
     */
    attribute_deprecated
    int me_threshold;

    /**
     * @deprecated this field is unused
     */
    attribute_deprecated
    int mb_threshold;
#endif

    /**
     * precision of the intra DC coefficient - 8
     * - encoding: Set by user.
     * - decoding: Set by libavcodec
     */
    int intra_dc_precision;

    /**
     * Number of macroblock rows at the top which are skipped.
     * - encoding: unused
     * - decoding: Set by user.
     */
    int skip_top;

    /**
     * Number of macroblock rows at the bottom which are skipped.
     * - encoding: unused
     * - decoding: Set by user.
     */
    int skip_bottom;

#if FF_API_MPV_OPT
    /**
     * @deprecated use encoder private options instead
     */
    attribute_deprecated
    float border_masking;
#endif

    /**
     * minimum MB Lagrange multiplier
     * - encoding: Set by user.
     * - decoding: unused
     */
    int mb_lmin;

    /**
     * maximum MB Lagrange multiplier
     * - encoding: Set by user.
     * - decoding: unused
     */
    int mb_lmax;

#if FF_API_PRIVATE_OPT
    /**
     * @deprecated use encoder private options instead
     */
    attribute_deprecated
    int me_penalty_compensation;
#endif

    /**
     * - encoding: Set by user.
     * - decoding: unused
     */
    int bidir_refine;

#if FF_API_PRIVATE_OPT
    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int brd_scale;
#endif

    /**
     * minimum GOP size
     * - encoding: Set by user.
     * - decoding: unused
     */
    int keyint_min;

    /**
     * number of reference frames
     * - encoding: Set by user.
     * - decoding: Set by lavc.
     */
    int refs;

#if FF_API_PRIVATE_OPT
    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int chromaoffset;
#endif

#if FF_API_UNUSED_MEMBERS
    /**
     * Multiplied by qscale for each frame and added to scene_change_score.
     * - encoding: Set by user.
     * - decoding: unused
     */
    attribute_deprecated int scenechange_factor;
#endif

    /**
     * Note: Value depends upon the compare function used for fullpel ME.
     * - encoding: Set by user.
     * - decoding: unused
     */
    int mv0_threshold;

#if FF_API_PRIVATE_OPT
    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int b_sensitivity;
#endif

    /**
     * Chromaticity coordinates of the source primaries.
     * - encoding: Set by user
     * - decoding: Set by libavcodec
     */
    enum AVColorPrimaries color_primaries;

    /**
     * Color Transfer Characteristic.
     * - encoding: Set by user
     * - decoding: Set by libavcodec
     */
    enum AVColorTransferCharacteristic color_trc;

    /**
     * YUV colorspace type.
     * - encoding: Set by user
     * - decoding: Set by libavcodec
     */
    enum AVColorSpace colorspace;

    /**
     * MPEG vs JPEG YUV range.
     * - encoding: Set by user
     * - decoding: Set by libavcodec
     */
    enum AVColorRange color_range;

    /**
     * This defines the location of chroma samples.
     * - encoding: Set by user
     * - decoding: Set by libavcodec
     */
    enum AVChromaLocation chroma_sample_location;

    /**
     * Number of slices.
     * Indicates number of picture subdivisions. Used for parallelized
     * decoding.
     * - encoding: Set by user
     * - decoding: unused
     */
    int slices;

    /** Field order
     * - encoding: set by libavcodec
     * - decoding: Set by user.
     */
    enum AVFieldOrder field_order;

    /* audio only */
    int sample_rate; ///< samples per second
    int channels;    ///< number of audio channels

    /**
     * audio sample format
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
     */
    enum AVSampleFormat sample_fmt;  ///< sample format

    /* The following data should not be initialized. */
    /**
     * Number of samples per channel in an audio frame.
     *
     * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame
     *   except the last must contain exactly frame_size samples per channel.
     *   May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then the
     *   frame size is not restricted.
     * - decoding: may be set by some decoders to indicate constant frame size
     */
    int frame_size;

    /**
     * Frame counter, set by libavcodec.
     *
     * - decoding: total number of frames returned from the decoder so far.
     * - encoding: total number of frames passed to the encoder so far.
     *
     *   @note the counter is not incremented if encoding/decoding resulted in
     *   an error.
     */
    int frame_number;

    /**
     * number of bytes per packet if constant and known or 0
     * Used by some WAV based audio codecs.
     */
    int block_align;

    /**
     * Audio cutoff bandwidth (0 means "automatic")
     * - encoding: Set by user.
     * - decoding: unused
     */
    int cutoff;

    /**
     * Audio channel layout.
     * - encoding: set by user.
     * - decoding: set by user, may be overwritten by libavcodec.
     */
    uint64_t channel_layout;

    /**
     * Request decoder to use this channel layout if it can (0 for default)
     * - encoding: unused
     * - decoding: Set by user.
     */
    uint64_t request_channel_layout;

    /**
     * Type of service that the audio stream conveys.
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
     */
    enum AVAudioServiceType audio_service_type;

    /**
     * desired sample format
     * - encoding: Not used.
     * - decoding: Set by user.
     * Decoder will decode to this format if it can.
     */
    enum AVSampleFormat request_sample_fmt;

    /**
     * This callback is called at the beginning of each frame to get data
     * buffer(s) for it. There may be one contiguous buffer for all the data or
     * there may be a buffer per each data plane or anything in between. What
     * this means is, you may set however many entries in buf[] you feel necessary.
     * Each buffer must be reference-counted using the AVBuffer API (see description
     * of buf[] below).
     *
     * The following fields will be set in the frame before this callback is
     * called:
     * - format
     * - width, height (video only)
     * - sample_rate, channel_layout, nb_samples (audio only)
     * Their values may differ from the corresponding values in
     * AVCodecContext. This callback must use the frame values, not the codec
     * context values, to calculate the required buffer size.
     *
     * This callback must fill the following fields in the frame:
     * - data[]
     * - linesize[]
     * - extended_data:
     *   * if the data is planar audio with more than 8 channels, then this
     *     callback must allocate and fill extended_data to contain all pointers
     *     to all data planes. data[] must hold as many pointers as it can.
     *     extended_data must be allocated with av_malloc() and will be freed in
     *     av_frame_unref().
     *   * otherwise extended_data must point to data
     * - buf[] must contain one or more pointers to AVBufferRef structures. Each of
     *   the frame's data and extended_data pointers must be contained in these. That
     *   is, one AVBufferRef for each allocated chunk of memory, not necessarily one
     *   AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(),
     *   and av_buffer_ref().
     * - extended_buf and nb_extended_buf must be allocated with av_malloc() by
     *   this callback and filled with the extra buffers if there are more
     *   buffers than buf[] can hold. extended_buf will be freed in
     *   av_frame_unref().
     *
     * If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call
     * avcodec_default_get_buffer2() instead of providing buffers allocated by
     * some other means.
     *
     * Each data plane must be aligned to the maximum required by the target
     * CPU.
     *
     * @see avcodec_default_get_buffer2()
     *
     * Video:
     *
     * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused
     * (read and/or written to if it is writable) later by libavcodec.
     *
     * avcodec_align_dimensions2() should be used to find the required width and
     * height, as they normally need to be rounded up to the next multiple of 16.
     *
     * Some decoders do not support linesizes changing between frames.
     *
     * If frame multithreading is used and thread_safe_callbacks is set,
     * this callback may be called from a different thread, but not from more
     * than one at once. Does not need to be reentrant.
     *
     * @see avcodec_align_dimensions2()
     *
     * Audio:
     *
     * Decoders request a buffer of a particular size by setting
     * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may,
     * however, utilize only part of the buffer by setting AVFrame.nb_samples
     * to a smaller value in the output frame.
     *
     * As a convenience, av_samples_get_buffer_size() and
     * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2()
     * functions to find the required data size and to fill data pointers and
     * linesize. In AVFrame.linesize, only linesize[0] may be set for audio
     * since all planes must be the same size.
     *
     * @see av_samples_get_buffer_size(), av_samples_fill_arrays()
     *
     * - encoding: unused
     * - decoding: Set by libavcodec, user can override.
     */
    int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags);

    /**
     * If non-zero, the decoded audio and video frames returned from
     * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted
     * and are valid indefinitely. The caller must free them with
     * av_frame_unref() when they are not needed anymore.
     * Otherwise, the decoded frames must not be freed by the caller and are
     * only valid until the next decode call.
     *
     * This is always automatically enabled if avcodec_receive_frame() is used.
     *
     * - encoding: unused
     * - decoding: set by the caller before avcodec_open2().
     */
    int refcounted_frames;

    /* - encoding parameters */
    float qcompress;  ///< amount of qscale change between easy & hard scenes (0.0-1.0)
    float qblur;      ///< amount of qscale smoothing over time (0.0-1.0)

    /**
     * minimum quantizer
     * - encoding: Set by user.
     * - decoding: unused
     */
    int qmin;

    /**
     * maximum quantizer
     * - encoding: Set by user.
     * - decoding: unused
     */
    int qmax;

    /**
     * maximum quantizer difference between frames
     * - encoding: Set by user.
     * - decoding: unused
     */
    int max_qdiff;

#if FF_API_MPV_OPT
    /**
     * @deprecated use encoder private options instead
     */
    attribute_deprecated
    float rc_qsquish;

    attribute_deprecated
    float rc_qmod_amp;
    attribute_deprecated
    int rc_qmod_freq;
#endif

    /**
     * decoder bitstream buffer size
     * - encoding: Set by user.
     * - decoding: unused
     */
    int rc_buffer_size;

    /**
     * ratecontrol override, see RcOverride
     * - encoding: Allocated/set/freed by user.
     * - decoding: unused
     */
    int rc_override_count;
    RcOverride *rc_override;

#if FF_API_MPV_OPT
    /**
     * @deprecated use encoder private options instead
     */
    attribute_deprecated
    const char *rc_eq;
#endif

    /**
     * maximum bitrate
     * - encoding: Set by user.
     * - decoding: Set by user, may be overwritten by libavcodec.
     */
    int64_t rc_max_rate;

    /**
     * minimum bitrate
     * - encoding: Set by user.
     * - decoding: unused
     */
    int64_t rc_min_rate;

#if FF_API_MPV_OPT
    /**
     * @deprecated use encoder private options instead
     */
    attribute_deprecated
    float rc_buffer_aggressivity;

    attribute_deprecated
    float rc_initial_cplx;
#endif

    /**
     * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
     * - encoding: Set by user.
     * - decoding: unused.
     */
    float rc_max_available_vbv_use;

    /**
     * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.
     * - encoding: Set by user.
     * - decoding: unused.
     */
    float rc_min_vbv_overflow_use;

    /**
     * Number of bits which should be loaded into the rc buffer before decoding starts.
     * - encoding: Set by user.
     * - decoding: unused
     */
    int rc_initial_buffer_occupancy;

#if FF_API_CODER_TYPE
#define FF_CODER_TYPE_VLC       0
#define FF_CODER_TYPE_AC        1
#define FF_CODER_TYPE_RAW       2
#define FF_CODER_TYPE_RLE       3
#if FF_API_UNUSED_MEMBERS
#define FF_CODER_TYPE_DEFLATE   4
#endif /* FF_API_UNUSED_MEMBERS */
    /**
     * @deprecated use encoder private options instead
     */
    attribute_deprecated
    int coder_type;
#endif /* FF_API_CODER_TYPE */

#if FF_API_PRIVATE_OPT
    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int context_model;
#endif

#if FF_API_MPV_OPT
    /**
     * @deprecated use encoder private options instead
     */
    attribute_deprecated
    int lmin;

    /**
     * @deprecated use encoder private options instead
     */
    attribute_deprecated
    int lmax;
#endif

#if FF_API_PRIVATE_OPT
    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int frame_skip_threshold;

    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int frame_skip_factor;

    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int frame_skip_exp;

    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int frame_skip_cmp;
#endif /* FF_API_PRIVATE_OPT */

    /**
     * trellis RD quantization
     * - encoding: Set by user.
     * - decoding: unused
     */
    int trellis;

#if FF_API_PRIVATE_OPT
    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int min_prediction_order;

    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int max_prediction_order;

    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int64_t timecode_frame_start;
#endif

#if FF_API_RTP_CALLBACK
    /**
     * @deprecated unused
     */
    /* The RTP callback: This function is called    */
    /* every time the encoder has a packet to send. */
    /* It depends on the encoder if the data starts */
    /* with a Start Code (it should). H.263 does.   */
    /* mb_nb contains the number of macroblocks     */
    /* encoded in the RTP payload.                  */
    attribute_deprecated
    void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);
#endif

#if FF_API_PRIVATE_OPT
    /** @deprecated use encoder private options instead */
    attribute_deprecated
    int rtp_payload_size;   /* The size of the RTP payload: the coder will  */
                            /* do its best to deliver a chunk with size     */
                            /* below rtp_payload_size, the chunk will start */
                            /* with a start code on some codecs like H.263. */
                            /* This doesn't take account of any particular  */
                            /* headers inside the transmitted RTP payload.  */
#endif

#if FF_API_STAT_BITS
    /* statistics, used for 2-pass encoding */
    attribute_deprecated
    int mv_bits;
    attribute_deprecated
    int header_bits;
    attribute_deprecated
    int i_tex_bits;
    attribute_deprecated
    int p_tex_bits;
    attribute_deprecated
    int i_count;
    attribute_deprecated
    int p_count;
    attribute_deprecated
    int skip_count;
    attribute_deprecated
    int misc_bits;

    /** @deprecated this field is unused */
    attribute_deprecated
    int frame_bits;
#endif

    /**
     * pass1 encoding statistics output buffer
     * - encoding: Set by libavcodec.
     * - decoding: unused
     */
    char *stats_out;

    /**
     * pass2 encoding statistics input buffer
     * Concatenated stuff from stats_out of pass1 should be placed here.
     * - encoding: Allocated/set/freed by user.
     * - decoding: unused
     */
    char *stats_in;

    /**
     * Work around bugs in encoders which sometimes cannot be detected automatically.
     * - encoding: Set by user
     * - decoding: Set by user
     */
    int workaround_bugs;
#define FF_BUG_AUTODETECT       1  ///< autodetection
#if FF_API_OLD_MSMPEG4
#define FF_BUG_OLD_MSMPEG4      2
#endif
#define FF_BUG_XVID_ILACE       4
#define FF_BUG_UMP4             8
#define FF_BUG_NO_PADDING       16
#define FF_BUG_AMV              32
#if FF_API_AC_VLC
#define FF_BUG_AC_VLC           0  ///< Will be removed, libavcodec can now handle these non-compliant files by default.
#endif
#define FF_BUG_QPEL_CHROMA      64
#define FF_BUG_STD_QPEL         128
#define FF_BUG_QPEL_CHROMA2     256
#define FF_BUG_DIRECT_BLOCKSIZE 512
#define FF_BUG_EDGE             1024
#define FF_BUG_HPEL_CHROMA      2048
#define FF_BUG_DC_CLIP          4096
#define FF_BUG_MS               8192 ///< Work around various bugs in Microsoft's broken decoders.
#define FF_BUG_TRUNCATED       16384

    /**
     * strictly follow the standard (MPEG-4, ...).
     * - encoding: Set by user.
     * - decoding: Set by user.
     * Setting this to STRICT or higher means the encoder and decoder will
     * generally do stupid things, whereas setting it to unofficial or lower
     * will mean the encoder might produce output that is not supported by all
     * spec-compliant decoders. Decoders don't differentiate between normal,
     * unofficial and experimental (that is, they always try to decode things
     * when they can) unless they are explicitly asked to behave stupidly
     * (=strictly conform to the specs)
     */
    int strict_std_compliance;
#define FF_COMPLIANCE_VERY_STRICT   2 ///< Strictly conform to an older more strict version of the spec or reference software.
#define FF_COMPLIANCE_STRICT        1 ///< Strictly conform to all the things in the spec no matter what consequences.
#define FF_COMPLIANCE_NORMAL        0
#define FF_COMPLIANCE_UNOFFICIAL   -1 ///< Allow unofficial extensions
#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.

    /**
     * error concealment flags
     * - encoding: unused
     * - decoding: Set by user.
     */
    int error_concealment;
#define FF_EC_GUESS_MVS   1
#define FF_EC_DEBLOCK     2
#define FF_EC_FAVOR_INTER 256

    /**
     * debug
     * - encoding: Set by user.
     * - decoding: Set by user.
     */
    int debug;
#define FF_DEBUG_PICT_INFO   1
#define FF_DEBUG_RC          2
#define FF_DEBUG_BITSTREAM   4
#define FF_DEBUG_MB_TYPE     8
#define FF_DEBUG_QP          16
#if FF_API_DEBUG_MV
/**
 * @deprecated this option does nothing
 */
#define FF_DEBUG_MV          32
#endif
#define FF_DEBUG_DCT_COEFF   0x00000040
#define FF_DEBUG_SKIP        0x00000080
#define FF_DEBUG_STARTCODE   0x00000100
#if FF_API_UNUSED_MEMBERS
#define FF_DEBUG_PTS         0x00000200
#endif /* FF_API_UNUSED_MEMBERS */
#define FF_DEBUG_ER          0x00000400
#define FF_DEBUG_MMCO        0x00000800
#define FF_DEBUG_BUGS        0x00001000
#if FF_API_DEBUG_MV
#define FF_DEBUG_VIS_QP      0x00002000 ///< only access through AVOptions from outside libavcodec
#define FF_DEBUG_VIS_MB_TYPE 0x00004000 ///< only access through AVOptions from outside libavcodec
#endif
#define FF_DEBUG_BUFFERS     0x00008000
#define FF_DEBUG_THREADS     0x00010000
#define FF_DEBUG_GREEN_MD    0x00800000
#define FF_DEBUG_NOMC        0x01000000

#if FF_API_DEBUG_MV
    /**
     * debug
     * Code outside libavcodec should access this field using AVOptions
     * - encoding: Set by user.
     * - decoding: Set by user.
     */
    int debug_mv;
#define FF_DEBUG_VIS_MV_P_FOR  0x00000001 // visualize forward predicted MVs of P-frames
#define FF_DEBUG_VIS_MV_B_FOR  0x00000002 // visualize forward predicted MVs of B-frames
#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 // visualize backward predicted MVs of B-frames
#endif

    /**
     * Error recognition; may misdetect some more or less valid parts as errors.
     * - encoding: unused
     * - decoding: Set by user.
     */
    int err_recognition;

/**
 * Verify checksums embedded in the bitstream (could be of either encoded or
 * decoded data, depending on the codec) and print an error message on mismatch.
 * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the
 * decoder returning an error.
 */
#define AV_EF_CRCCHECK  (1<<0)
#define AV_EF_BITSTREAM (1<<1)          ///< detect bitstream specification deviations
#define AV_EF_BUFFER    (1<<2)          ///< detect improper bitstream length
#define AV_EF_EXPLODE   (1<<3)          ///< abort decoding on minor error detection

#define AV_EF_IGNORE_ERR (1<<15)        ///< ignore errors and continue
#define AV_EF_CAREFUL    (1<<16)        ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors
#define AV_EF_COMPLIANT  (1<<17)        ///< consider all spec non compliances as errors
#define AV_EF_AGGRESSIVE (1<<18)        ///< consider things that a sane encoder should not do as an error


    /**
     * opaque 64-bit number (generally a PTS) that will be reordered and
     * output in AVFrame.reordered_opaque
     * - encoding: unused
     * - decoding: Set by user.
     */
    int64_t reordered_opaque;

    /**
     * Hardware accelerator in use
     * - encoding: unused.
     * - decoding: Set by libavcodec
     */
    struct AVHWAccel *hwaccel;

    /**
     * Hardware accelerator context.
     * For some hardware accelerators, a global context needs to be
     * provided by the user. In that case, this holds display-dependent
     * data FFmpeg cannot instantiate itself. Please refer to the
     * FFmpeg HW accelerator documentation to know how to fill this
     * is. e.g. for VA API, this is a struct vaapi_context.
     * - encoding: unused
     * - decoding: Set by user
     */
    void *hwaccel_context;

    /**
     * error
     * - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR.
     * - decoding: unused
     */
    uint64_t error[AV_NUM_DATA_POINTERS];

    /**
     * DCT algorithm, see FF_DCT_* below
     * - encoding: Set by user.
     * - decoding: unused
     */
    int dct_algo;
#define FF_DCT_AUTO    0
#define FF_DCT_FASTINT 1
#define FF_DCT_INT     2
#define FF_DCT_MMX     3
#define FF_DCT_ALTIVEC 5
#define FF_DCT_FAAN    6

    /**
     * IDCT algorithm, see FF_IDCT_* below.
     * - encoding: Set by user.
     * - decoding: Set by user.
     */
    int idct_algo;
#define FF_IDCT_AUTO          0
#define FF_IDCT_INT           1
#define FF_IDCT_SIMPLE        2
#define FF_IDCT_SIMPLEMMX     3
#define FF_IDCT_ARM           7
#define FF_IDCT_ALTIVEC       8
#if FF_API_ARCH_SH4
#define FF_IDCT_SH4           9
#endif
#define FF_IDCT_SIMPLEARM     10
#if FF_API_UNUSED_MEMBERS
#define FF_IDCT_IPP           13
#endif /* FF_API_UNUSED_MEMBERS */
#define FF_IDCT_XVID          14
#if FF_API_IDCT_XVIDMMX
#define FF_IDCT_XVIDMMX       14
#endif /* FF_API_IDCT_XVIDMMX */
#define FF_IDCT_SIMPLEARMV5TE 16
#define FF_IDCT_SIMPLEARMV6   17
#if FF_API_ARCH_SPARC
#define FF_IDCT_SIMPLEVIS     18
#endif
#define FF_IDCT_FAAN          20
#define FF_IDCT_SIMPLENEON    22
#if FF_API_ARCH_ALPHA
#define FF_IDCT_SIMPLEALPHA   23
#endif
#define FF_IDCT_SIMPLEAUTO    128

    /**
     * bits per sample/pixel from the demuxer (needed for huffyuv).
     * - encoding: Set by libavcodec.
     * - decoding: Set by user.
     */
     int bits_per_coded_sample;

    /**
     * Bits per sample/pixel of internal libavcodec pixel/sample format.
     * - encoding: set by user.
     * - decoding: set by libavcodec.
     */
    int bits_per_raw_sample;

#if FF_API_LOWRES
    /**
     * low resolution decoding, 1-> 1/2 size, 2->1/4 size
     * - encoding: unused
     * - decoding: Set by user.
     * Code outside libavcodec should access this field using:
     * av_codec_{get,set}_lowres(avctx)
     */
     int lowres;
#endif

#if FF_API_CODED_FRAME
    /**
     * the picture in the bitstream
     * - encoding: Set by libavcodec.
     * - decoding: unused
     *
     * @deprecated use the quality factor packet side data instead
     */
    attribute_deprecated AVFrame *coded_frame;
#endif

    /**
     * thread count
     * is used to decide how many independent tasks should be passed to execute()
     * - encoding: Set by user.
     * - decoding: Set by user.
     */
    int thread_count;

    /**
     * Which multithreading methods to use.
     * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread,
     * so clients which cannot provide future frames should not use it.
     *
     * - encoding: Set by user, otherwise the default is used.
     * - decoding: Set by user, otherwise the default is used.
     */
    int thread_type;
#define FF_THREAD_FRAME   1 ///< Decode more than one frame at once
#define FF_THREAD_SLICE   2 ///< Decode more than one part of a single frame at once

    /**
     * Which multithreading methods are in use by the codec.
     * - encoding: Set by libavcodec.
     * - decoding: Set by libavcodec.
     */
    int active_thread_type;

    /**
     * Set by the client if its custom get_buffer() callback can be called
     * synchronously from another thread, which allows faster multithreaded decoding.
     * draw_horiz_band() will be called from other threads regardless of this setting.
     * Ignored if the default get_buffer() is used.
     * - encoding: Set by user.
     * - decoding: Set by user.
     */
    int thread_safe_callbacks;

    /**
     * The codec may call this to execute several independent things.
     * It will return only after finishing all tasks.
     * The user may replace this with some multithreaded implementation,
     * the default implementation will execute the parts serially.
     * @param count the number of things to execute
     * - encoding: Set by libavcodec, user can override.
     * - decoding: Set by libavcodec, user can override.
     */
    int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size);

    /**
     * The codec may call this to execute several independent things.
     * It will return only after finishing all tasks.
     * The user may replace this with some multithreaded implementation,
     * the default implementation will execute the parts serially.
     * Also see avcodec_thread_init and e.g. the --enable-pthread configure option.
     * @param c context passed also to func
     * @param count the number of things to execute
     * @param arg2 argument passed unchanged to func
     * @param ret return values of executed functions, must have space for "count" values. May be NULL.
     * @param func function that will be called count times, with jobnr from 0 to count-1.
     *             threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no
     *             two instances of func executing at the same time will have the same threadnr.
     * @return always 0 currently, but code should handle a future improvement where when any call to func
     *         returns < 0 no further calls to func may be done and < 0 is returned.
     * - encoding: Set by libavcodec, user can override.
     * - decoding: Set by libavcodec, user can override.
     */
    int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count);

    /**
     * noise vs. sse weight for the nsse comparison function
     * - encoding: Set by user.
     * - decoding: unused
     */
     int nsse_weight;

    /**
     * profile
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
     */
     int profile;
#define FF_PROFILE_UNKNOWN -99
#define FF_PROFILE_RESERVED -100

#define FF_PROFILE_AAC_MAIN 0
#define FF_PROFILE_AAC_LOW  1
#define FF_PROFILE_AAC_SSR  2
#define FF_PROFILE_AAC_LTP  3
#define FF_PROFILE_AAC_HE   4
#define FF_PROFILE_AAC_HE_V2 28
#define FF_PROFILE_AAC_LD   22
#define FF_PROFILE_AAC_ELD  38
#define FF_PROFILE_MPEG2_AAC_LOW 128
#define FF_PROFILE_MPEG2_AAC_HE  131

#define FF_PROFILE_DNXHD         0
#define FF_PROFILE_DNXHR_LB      1
#define FF_PROFILE_DNXHR_SQ      2
#define FF_PROFILE_DNXHR_HQ      3
#define FF_PROFILE_DNXHR_HQX     4
#define FF_PROFILE_DNXHR_444     5

#define FF_PROFILE_DTS         20
#define FF_PROFILE_DTS_ES      30
#define FF_PROFILE_DTS_96_24   40
#define FF_PROFILE_DTS_HD_HRA  50
#define FF_PROFILE_DTS_HD_MA   60
#define FF_PROFILE_DTS_EXPRESS 70

#define FF_PROFILE_MPEG2_422    0
#define FF_PROFILE_MPEG2_HIGH   1
#define FF_PROFILE_MPEG2_SS     2
#define FF_PROFILE_MPEG2_SNR_SCALABLE  3
#define FF_PROFILE_MPEG2_MAIN   4
#define FF_PROFILE_MPEG2_SIMPLE 5

#define FF_PROFILE_H264_CONSTRAINED  (1<<9)  // 8+1; constraint_set1_flag
#define FF_PROFILE_H264_INTRA        (1<<11) // 8+3; constraint_set3_flag

#define FF_PROFILE_H264_BASELINE             66
#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED)
#define FF_PROFILE_H264_MAIN                 77
#define FF_PROFILE_H264_EXTENDED             88
#define FF_PROFILE_H264_HIGH                 100
#define FF_PROFILE_H264_HIGH_10              110
#define FF_PROFILE_H264_HIGH_10_INTRA        (110|FF_PROFILE_H264_INTRA)
#define FF_PROFILE_H264_MULTIVIEW_HIGH       118
#define FF_PROFILE_H264_HIGH_422             122
#define FF_PROFILE_H264_HIGH_422_INTRA       (122|FF_PROFILE_H264_INTRA)
#define FF_PROFILE_H264_STEREO_HIGH          128
#define FF_PROFILE_H264_HIGH_444             144
#define FF_PROFILE_H264_HIGH_444_PREDICTIVE  244
#define FF_PROFILE_H264_HIGH_444_INTRA       (244|FF_PROFILE_H264_INTRA)
#define FF_PROFILE_H264_CAVLC_444            44

#define FF_PROFILE_VC1_SIMPLE   0
#define FF_PROFILE_VC1_MAIN     1
#define FF_PROFILE_VC1_COMPLEX  2
#define FF_PROFILE_VC1_ADVANCED 3

#define FF_PROFILE_MPEG4_SIMPLE                     0
#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE            1
#define FF_PROFILE_MPEG4_CORE                       2
#define FF_PROFILE_MPEG4_MAIN                       3
#define FF_PROFILE_MPEG4_N_BIT                      4
#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE           5
#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION      6
#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE     7
#define FF_PROFILE_MPEG4_HYBRID                     8
#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME         9
#define FF_PROFILE_MPEG4_CORE_SCALABLE             10
#define FF_PROFILE_MPEG4_ADVANCED_CODING           11
#define FF_PROFILE_MPEG4_ADVANCED_CORE             12
#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13
#define FF_PROFILE_MPEG4_SIMPLE_STUDIO             14
#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE           15

#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0   1
#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1   2
#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION  32768
#define FF_PROFILE_JPEG2000_DCINEMA_2K              3
#define FF_PROFILE_JPEG2000_DCINEMA_4K              4

#define FF_PROFILE_VP9_0                            0
#define FF_PROFILE_VP9_1                            1
#define FF_PROFILE_VP9_2                            2
#define FF_PROFILE_VP9_3                            3

#define FF_PROFILE_HEVC_MAIN                        1
#define FF_PROFILE_HEVC_MAIN_10                     2
#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE          3
#define FF_PROFILE_HEVC_REXT                        4

    /**
     * level
     * - encoding: Set by user.
     * - decoding: Set by libavcodec.
     */
     int level;
#define FF_LEVEL_UNKNOWN -99

    /**
     * Skip loop filtering for selected frames.
     * - encoding: unused
     * - decoding: Set by user.
     */
    enum AVDiscard skip_loop_filter;

    /**
     * Skip IDCT/dequantization for selected frames.
     * - encoding: unused
     * - decoding: Set by user.
     */
    enum AVDiscard skip_idct;

    /**
     * Skip decoding for selected frames.
     * - encoding: unused
     * - decoding: Set by user.
     */
    enum AVDiscard skip_frame;

    /**
     * Header containing style information for text subtitles.
     * For SUBTITLE_ASS subtitle type, it should contain the whole ASS
     * [Script Info] and [V4+ Styles] section, plus the [Events] line and
     * the Format line following. It shouldn't include any Dialogue line.
     * - encoding: Set/allocated/freed by user (before avcodec_open2())
     * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2())
     */
    uint8_t *subtitle_header;
    int subtitle_header_size;

#if FF_API_ERROR_RATE
    /**
     * @deprecated use the 'error_rate' private AVOption of the mpegvideo
     * encoders
     */
    attribute_deprecated
    int error_rate;
#endif

#if FF_API_VBV_DELAY
    /**
     * VBV delay coded in the last frame (in periods of a 27 MHz clock).
     * Used for compliant TS muxing.
     * - encoding: Set by libavcodec.
     * - decoding: unused.
     * @deprecated this value is now exported as a part of
     * AV_PKT_DATA_CPB_PROPERTIES packet side data
     */
    attribute_deprecated
    uint64_t vbv_delay;
#endif

#if FF_API_SIDEDATA_ONLY_PKT
    /**
     * Encoding only and set by default. Allow encoders to output packets
     * that do not contain any encoded data, only side data.
     *
     * Some encoders need to output such packets, e.g. to update some stream
     * parameters at the end of encoding.
     *
     * @deprecated this field disables the default behaviour and
     *             it is kept only for compatibility.
     */
    attribute_deprecated
    int side_data_only_packets;
#endif

    /**
     * Audio only. The number of "priming" samples (padding) inserted by the
     * encoder at the beginning of the audio. I.e. this number of leading
     * decoded samples must be discarded by the caller to get the original audio
     * without leading padding.
     *
     * - decoding: unused
     * - encoding: Set by libavcodec. The timestamps on the output packets are
     *             adjusted by the encoder so that they always refer to the
     *             first sample of the data actually contained in the packet,
     *             including any added padding.  E.g. if the timebase is
     *             1/samplerate and the timestamp of the first input sample is
     *             0, the timestamp of the first output packet will be
     *             -initial_padding.
     */
    int initial_padding;

    /**
     * - decoding: For codecs that store a framerate value in the compressed
     *             bitstream, the decoder may export it here. { 0, 1} when
     *             unknown.
     * - encoding: May be used to signal the framerate of CFR content to an
     *             encoder.
     */
    AVRational framerate;

    /**
     * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx.
     * - encoding: unused.
     * - decoding: Set by libavcodec before calling get_format()
     */
    enum AVPixelFormat sw_pix_fmt;

    /**
     * Timebase in which pkt_dts/pts and AVPacket.dts/pts are.
     * Code outside libavcodec should access this field using:
     * av_codec_{get,set}_pkt_timebase(avctx)
     * - encoding unused.
     * - decoding set by user.
     */
    AVRational pkt_timebase;

    /**
     * AVCodecDescriptor
     * Code outside libavcodec should access this field using:
     * av_codec_{get,set}_codec_descriptor(avctx)
     * - encoding: unused.
     * - decoding: set by libavcodec.
     */
    const AVCodecDescriptor *codec_descriptor;

#if !FF_API_LOWRES
    /**
     * low resolution decoding, 1-> 1/2 size, 2->1/4 size
     * - encoding: unused
     * - decoding: Set by user.
     * Code outside libavcodec should access this field using:
     * av_codec_{get,set}_lowres(avctx)
     */
     int lowres;
#endif

    /**
     * Current statistics for PTS correction.
     * - decoding: maintained and used by libavcodec, not intended to be used by user apps
     * - encoding: unused
     */
    int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far
    int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far
    int64_t pts_correction_last_pts;       /// PTS of the last frame
    int64_t pts_correction_last_dts;       /// DTS of the last frame

    /**
     * Character encoding of the input subtitles file.
     * - decoding: set by user
     * - encoding: unused
     */
    char *sub_charenc;

    /**
     * Subtitles character encoding mode. Formats or codecs might be adjusting
     * this setting (if they are doing the conversion themselves for instance).
     * - decoding: set by libavcodec
     * - encoding: unused
     */
    int sub_charenc_mode;
#define FF_SUB_CHARENC_MODE_DO_NOTHING  -1  ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance)
#define FF_SUB_CHARENC_MODE_AUTOMATIC    0  ///< libavcodec will select the mode itself
#define FF_SUB_CHARENC_MODE_PRE_DECODER  1  ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv

    /**
     * Skip processing alpha if supported by codec.
     * Note that if the format uses pre-multiplied alpha (common with VP6,
     * and recommended due to better video quality/compression)
     * the image will look as if alpha-blended onto a black background.
     * However for formats that do not use pre-multiplied alpha
     * there might be serious artefacts (though e.g. libswscale currently
     * assumes pre-multiplied alpha anyway).
     * Code outside libavcodec should access this field using AVOptions
     *
     * - decoding: set by user
     * - encoding: unused
     */
    int skip_alpha;

    /**
     * Number of samples to skip after a discontinuity
     * - decoding: unused
     * - encoding: set by libavcodec
     */
    int seek_preroll;

#if !FF_API_DEBUG_MV
    /**
     * debug motion vectors
     * Code outside libavcodec should access this field using AVOptions
     * - encoding: Set by user.
     * - decoding: Set by user.
     */
    int debug_mv;
#define FF_DEBUG_VIS_MV_P_FOR  0x00000001 //visualize forward predicted MVs of P frames
#define FF_DEBUG_VIS_MV_B_FOR  0x00000002 //visualize forward predicted MVs of B frames
#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
#endif

    /**
     * custom intra quantization matrix
     * Code outside libavcodec should access this field using av_codec_g/set_chroma_intra_matrix()
     * - encoding: Set by user, can be NULL.
     * - decoding: unused.
     */
    uint16_t *chroma_intra_matrix;

    /**
     * dump format separator.
     * can be ", " or "\n      " or anything else
     * Code outside libavcodec should access this field using AVOptions
     * (NO direct access).
     * - encoding: Set by user.
     * - decoding: Set by user.
     */
    uint8_t *dump_separator;

    /**
     * ',' separated list of allowed decoders.
     * If NULL then all are allowed
     * - encoding: unused
     * - decoding: set by user through AVOPtions (NO direct access)
     */
    char *codec_whitelist;

    /*
     * Properties of the stream that gets decoded
     * To be accessed through av_codec_get_properties() (NO direct access)
     * - encoding: unused
     * - decoding: set by libavcodec
     */
    unsigned properties;
#define FF_CODEC_PROPERTY_LOSSLESS        0x00000001
#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002

    /**
     * Additional data associated with the entire coded stream.
     *
     * - decoding: unused
     * - encoding: may be set by libavcodec after avcodec_open2().
     */
    AVPacketSideData *coded_side_data;
    int            nb_coded_side_data;

    /**
     * A reference to the AVHWFramesContext describing the input (for encoding)
     * or output (decoding) frames. The reference is set by the caller and
     * afterwards owned (and freed) by libavcodec.
     *
     * - decoding: This field should be set by the caller from the get_format()
     *             callback. The previous reference (if any) will always be
     *             unreffed by libavcodec before the get_format() call.
     *
     *             If the default get_buffer2() is used with a hwaccel pixel
     *             format, then this AVHWFramesContext will be used for
     *             allocating the frame buffers.
     *
     * - encoding: For hardware encoders configured to use a hwaccel pixel
     *             format, this field should be set by the caller to a reference
     *             to the AVHWFramesContext describing input frames.
     *             AVHWFramesContext.format must be equal to
     *             AVCodecContext.pix_fmt.
     *
     *             This field should be set before avcodec_open2() is called.
     */
    AVBufferRef *hw_frames_ctx;

    /**
     * Control the form of AVSubtitle.rects[N]->ass
     * - decoding: set by user
     * - encoding: unused
     */
    int sub_text_format;
#define FF_SUB_TEXT_FMT_ASS              0
#if FF_API_ASS_TIMING
#define FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS 1
#endif

    /**
     * Audio only. The amount of padding (in samples) appended by the encoder to
     * the end of the audio. I.e. this number of decoded samples must be
     * discarded by the caller from the end of the stream to get the original
     * audio without any trailing padding.
     *
     * - decoding: unused
     * - encoding: unused
     */
    int trailing_padding;

} AVCodecContext;

AVRational av_codec_get_pkt_timebase         (const AVCodecContext *avctx);
void       av_codec_set_pkt_timebase         (AVCodecContext *avctx, AVRational val);

const AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx);
void                     av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc);

unsigned av_codec_get_codec_properties(const AVCodecContext *avctx);

int  av_codec_get_lowres(const AVCodecContext *avctx);
void av_codec_set_lowres(AVCodecContext *avctx, int val);

int  av_codec_get_seek_preroll(const AVCodecContext *avctx);
void av_codec_set_seek_preroll(AVCodecContext *avctx, int val);

uint16_t *av_codec_get_chroma_intra_matrix(const AVCodecContext *avctx);
void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val);

/**
 * AVProfile.
 */
typedef struct AVProfile {
    int profile;
    const char *name; ///< short name for the profile
} AVProfile;

typedef struct AVCodecDefault AVCodecDefault;

struct AVSubtitle;

/**
 * AVCodec.
 */
typedef struct AVCodec {
    /**
     * Name of the codec implementation.
     * The name is globally unique among encoders and among decoders (but an
     * encoder and a decoder can share the same name).
     * This is the primary way to find a codec from the user perspective.
     */
    const char *name;
    /**
     * Descriptive name for the codec, meant to be more human readable than name.
     * You should use the NULL_IF_CONFIG_SMALL() macro to define it.
     */
    const char *long_name;
    enum AVMediaType type;
    enum AVCodecID id;
    /**
     * Codec capabilities.
     * see AV_CODEC_CAP_*
     */
    int capabilities;
    const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
    const enum AVPixelFormat *pix_fmts;     ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
    const int *supported_samplerates;       ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
    const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
    const uint64_t *channel_layouts;         ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
    uint8_t max_lowres;                     ///< maximum value for lowres supported by the decoder, no direct access, use av_codec_get_max_lowres()
    const AVClass *priv_class;              ///< AVClass for the private context
    const AVProfile *profiles;              ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}

    /*****************************************************************
     * No fields below this line are part of the public API. They
     * may not be used outside of libavcodec and can be changed and
     * removed at will.
     * New public fields should be added right above.
     *****************************************************************
     */
    int priv_data_size;
    struct AVCodec *next;
    /**
     * @name Frame-level threading support functions
     * @{
     */
    /**
     * If defined, called on thread contexts when they are created.
     * If the codec allocates writable tables in init(), re-allocate them here.
     * priv_data will be set to a copy of the original.
     */
    int (*init_thread_copy)(AVCodecContext *);
    /**
     * Copy necessary context variables from a previous thread context to the current one.
     * If not defined, the next thread will start automatically; otherwise, the codec
     * must call ff_thread_finish_setup().
     *
     * dst and src will (rarely) point to the same context, in which case memcpy should be skipped.
     */
    int (*update_thread_context)(AVCodecContext *dst, const AVCodecContext *src);
    /** @} */

    /**
     * Private codec-specific defaults.
     */
    const AVCodecDefault *defaults;

    /**
     * Initialize codec static data, called from avcodec_register().
     */
    void (*init_static_data)(struct AVCodec *codec);

    int (*init)(AVCodecContext *);
    int (*encode_sub)(AVCodecContext *, uint8_t *buf, int buf_size,
                      const struct AVSubtitle *sub);
    /**
     * Encode data to an AVPacket.
     *
     * @param      avctx          codec context
     * @param      avpkt          output AVPacket (may contain a user-provided buffer)
     * @param[in]  frame          AVFrame containing the raw data to be encoded
     * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a
     *                            non-empty packet was returned in avpkt.
     * @return 0 on success, negative error code on failure
     */
    int (*encode2)(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame,
                   int *got_packet_ptr);
    int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt);
    int (*close)(AVCodecContext *);
    /**
     * Decode/encode API with decoupled packet/frame dataflow. The API is the
     * same as the avcodec_ prefixed APIs (avcodec_send_frame() etc.), except
     * that:
     * - never called if the codec is closed or the wrong type,
     * - AVPacket parameter change side data is applied right before calling
     *   AVCodec->send_packet,
     * - if AV_CODEC_CAP_DELAY is not set, drain packets or frames are never sent,
     * - only one drain packet is ever passed down (until the next flush()),
     * - a drain AVPacket is always NULL (no need to check for avpkt->size).
     */
    int (*send_frame)(AVCodecContext *avctx, const AVFrame *frame);
    int (*send_packet)(AVCodecContext *avctx, const AVPacket *avpkt);
    int (*receive_frame)(AVCodecContext *avctx, AVFrame *frame);
    int (*receive_packet)(AVCodecContext *avctx, AVPacket *avpkt);
    /**
     * Flush buffers.
     * Will be called when seeking
     */
    void (*flush)(AVCodecContext *);
    /**
     * Internal codec capabilities.
     * See FF_CODEC_CAP_* in internal.h
     */
    int caps_internal;
} AVCodec;

int av_codec_get_max_lowres(const AVCodec *codec);

struct MpegEncContext;

/**
 * @defgroup lavc_hwaccel AVHWAccel
 * @{
 */
typedef struct AVHWAccel {
    /**
     * Name of the hardware accelerated codec.
     * The name is globally unique among encoders and among decoders (but an
     * encoder and a decoder can share the same name).
     */
    const char *name;

    /**
     * Type of codec implemented by the hardware accelerator.
     *
     * See AVMEDIA_TYPE_xxx
     */
    enum AVMediaType type;

    /**
     * Codec implemented by the hardware accelerator.
     *
     * See AV_CODEC_ID_xxx
     */
    enum AVCodecID id;

    /**
     * Supported pixel format.
     *
     * Only hardware accelerated formats are supported here.
     */
    enum AVPixelFormat pix_fmt;

    /**
     * Hardware accelerated codec capabilities.
     * see HWACCEL_CODEC_CAP_*
     */
    int capabilities;

    /*****************************************************************
     * No fields below this line are part of the public API. They
     * may not be used outside of libavcodec and can be changed and
     * removed at will.
     * New public fields should be added right above.
     *****************************************************************
     */
    struct AVHWAccel *next;

    /**
     * Allocate a custom buffer
     */
    int (*alloc_frame)(AVCodecContext *avctx, AVFrame *frame);

    /**
     * Called at the beginning of each frame or field picture.
     *
     * Meaningful frame information (codec specific) is guaranteed to
     * be parsed at this point. This function is mandatory.
     *
     * Note that buf can be NULL along with buf_size set to 0.
     * Otherwise, this means the whole frame is available at this point.
     *
     * @param avctx the codec context
     * @param buf the frame data buffer base
     * @param buf_size the size of the frame in bytes
     * @return zero if successful, a negative value otherwise
     */
    int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);

    /**
     * Callback for each slice.
     *
     * Meaningful slice information (codec specific) is guaranteed to
     * be parsed at this point. This function is mandatory.
     * The only exception is XvMC, that works on MB level.
     *
     * @param avctx the codec context
     * @param buf the slice data buffer base
     * @param buf_size the size of the slice in bytes
     * @return zero if successful, a negative value otherwise
     */
    int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);

    /**
     * Called at the end of each frame or field picture.
     *
     * The whole picture is parsed at this point and can now be sent
     * to the hardware accelerator. This function is mandatory.
     *
     * @param avctx the codec context
     * @return zero if successful, a negative value otherwise
     */
    int (*end_frame)(AVCodecContext *avctx);

    /**
     * Size of per-frame hardware accelerator private data.
     *
     * Private data is allocated with av_mallocz() before
     * AVCodecContext.get_buffer() and deallocated after
     * AVCodecContext.release_buffer().
     */
    int frame_priv_data_size;

    /**
     * Called for every Macroblock in a slice.
     *
     * XvMC uses it to replace the ff_mpv_decode_mb().
     * Instead of decoding to raw picture, MB parameters are
     * stored in an array provided by the video driver.
     *
     * @param s the mpeg context
     */
    void (*decode_mb)(struct MpegEncContext *s);

    /**
     * Initialize the hwaccel private data.
     *
     * This will be called from ff_get_format(), after hwaccel and
     * hwaccel_context are set and the hwaccel private data in AVCodecInternal
     * is allocated.
     */
    int (*init)(AVCodecContext *avctx);

    /**
     * Uninitialize the hwaccel private data.
     *
     * This will be called from get_format() or avcodec_close(), after hwaccel
     * and hwaccel_context are already uninitialized.
     */
    int (*uninit)(AVCodecContext *avctx);

    /**
     * Size of the private data to allocate in
     * AVCodecInternal.hwaccel_priv_data.
     */
    int priv_data_size;
} AVHWAccel;

/**
 * Hardware acceleration should be used for decoding even if the codec level
 * used is unknown or higher than the maximum supported level reported by the
 * hardware driver.
 *
 * It's generally a good idea to pass this flag unless you have a specific
 * reason not to, as hardware tends to under-report supported levels.
 */
#define AV_HWACCEL_FLAG_IGNORE_LEVEL (1 << 0)

/**
 * Hardware acceleration can output YUV pixel formats with a different chroma
 * sampling than 4:2:0 and/or other than 8 bits per component.
 */
#define AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH (1 << 1)

/**
 * @}
 */

#if FF_API_AVPICTURE
/**
 * @defgroup lavc_picture AVPicture
 *
 * Functions for working with AVPicture
 * @{
 */

/**
 * Picture data structure.
 *
 * Up to four components can be stored into it, the last component is
 * alpha.
 * @deprecated use AVFrame or imgutils functions instead
 */
typedef struct AVPicture {
    attribute_deprecated
    uint8_t *data[AV_NUM_DATA_POINTERS];    ///< pointers to the image data planes
    attribute_deprecated
    int linesize[AV_NUM_DATA_POINTERS];     ///< number of bytes per line
} AVPicture;

/**
 * @}
 */
#endif

enum AVSubtitleType {
    SUBTITLE_NONE,

    SUBTITLE_BITMAP,                ///< A bitmap, pict will be set

    /**
     * Plain text, the text field must be set by the decoder and is
     * authoritative. ass and pict fields may contain approximations.
     */
    SUBTITLE_TEXT,

    /**
     * Formatted text, the ass field must be set by the decoder and is
     * authoritative. pict and text fields may contain approximations.
     */
    SUBTITLE_ASS,
};

#define AV_SUBTITLE_FLAG_FORCED 0x00000001

typedef struct AVSubtitleRect {
    int x;         ///< top left corner  of pict, undefined when pict is not set
    int y;         ///< top left corner  of pict, undefined when pict is not set
    int w;         ///< width            of pict, undefined when pict is not set
    int h;         ///< height           of pict, undefined when pict is not set
    int nb_colors; ///< number of colors in pict, undefined when pict is not set

#if FF_API_AVPICTURE
    /**
     * @deprecated unused
     */
    attribute_deprecated
    AVPicture pict;
#endif
    /**
     * data+linesize for the bitmap of this subtitle.
     * Can be set for text/ass as well once they are rendered.
     */
    uint8_t *data[4];
    int linesize[4];

    enum AVSubtitleType type;

    char *text;                     ///< 0 terminated plain UTF-8 text

    /**
     * 0 terminated ASS/SSA compatible event line.
     * The presentation of this is unaffected by the other values in this
     * struct.
     */
    char *ass;

    int flags;
} AVSubtitleRect;

typedef struct AVSubtitle {
    uint16_t format; /* 0 = graphics */
    uint32_t start_display_time; /* relative to packet pts, in ms */
    uint32_t end_display_time; /* relative to packet pts, in ms */
    unsigned num_rects;
    AVSubtitleRect **rects;
    int64_t pts;    ///< Same as packet pts, in AV_TIME_BASE
} AVSubtitle;

/**
 * This struct describes the properties of an encoded stream.
 *
 * sizeof(AVCodecParameters) is not a part of the public ABI, this struct must
 * be allocated with avcodec_parameters_alloc() and freed with
 * avcodec_parameters_free().
 */
typedef struct AVCodecParameters {
    /**
     * General type of the encoded data.
     */
    enum AVMediaType codec_type;
    /**
     * Specific type of the encoded data (the codec used).
     */
    enum AVCodecID   codec_id;
    /**
     * Additional information about the codec (corresponds to the AVI FOURCC).
     */
    uint32_t         codec_tag;

    /**
     * Extra binary data needed for initializing the decoder, codec-dependent.
     *
     * Must be allocated with av_malloc() and will be freed by
     * avcodec_parameters_free(). The allocated size of extradata must be at
     * least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding
     * bytes zeroed.
     */
    uint8_t *extradata;
    /**
     * Size of the extradata content in bytes.
     */
    int      extradata_size;

    /**
     * - video: the pixel format, the value corresponds to enum AVPixelFormat.
     * - audio: the sample format, the value corresponds to enum AVSampleFormat.
     */
    int format;

    /**
     * The average bitrate of the encoded data (in bits per second).
     */
    int64_t bit_rate;

    /**
     * The number of bits per sample in the codedwords.
     *
     * This is basically the bitrate per sample. It is mandatory for a bunch of
     * formats to actually decode them. It's the number of bits for one sample in
     * the actual coded bitstream.
     *
     * This could be for example 4 for ADPCM
     * For PCM formats this matches bits_per_raw_sample
     * Can be 0
     */
    int bits_per_coded_sample;

    /**
     * This is the number of valid bits in each output sample. If the
     * sample format has more bits, the least significant bits are additional
     * padding bits, which are always 0. Use right shifts to reduce the sample
     * to its actual size. For example, audio formats with 24 bit samples will
     * have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32.
     * To get the original sample use "(int32_t)sample >> 8"."
     *
     * For ADPCM this might be 12 or 16 or similar
     * Can be 0
     */
    int bits_per_raw_sample;

    /**
     * Codec-specific bitstream restrictions that the stream conforms to.
     */
    int profile;
    int level;

    /**
     * Video only. The dimensions of the video frame in pixels.
     */
    int width;
    int height;

    /**
     * Video only. The aspect ratio (width / height) which a single pixel
     * should have when displayed.
     *
     * When the aspect ratio is unknown / undefined, the numerator should be
     * set to 0 (the denominator may have any value).
     */
    AVRational sample_aspect_ratio;

    /**
     * Video only. The order of the fields in interlaced video.
     */
    enum AVFieldOrder                  field_order;

    /**
     * Video only. Additional colorspace characteristics.
     */
    enum AVColorRange                  color_range;
    enum AVColorPrimaries              color_primaries;
    enum AVColorTransferCharacteristic color_trc;
    enum AVColorSpace                  color_space;
    enum AVChromaLocation              chroma_location;

    /**
     * Video only. Number of delayed frames.
     */
    int video_delay;

    /**
     * Audio only. The channel layout bitmask. May be 0 if the channel layout is
     * unknown or unspecified, otherwise the number of bits set must be equal to
     * the channels field.
     */
    uint64_t channel_layout;
    /**
     * Audio only. The number of audio channels.
     */
    int      channels;
    /**
     * Audio only. The number of audio samples per second.
     */
    int      sample_rate;
    /**
     * Audio only. The number of bytes per coded audio frame, required by some
     * formats.
     *
     * Corresponds to nBlockAlign in WAVEFORMATEX.
     */
    int      block_align;
    /**
     * Audio only. Audio frame size, if known. Required by some formats to be static.
     */
    int      frame_size;

    /**
     * Audio only. The amount of padding (in samples) inserted by the encoder at
     * the beginning of the audio. I.e. this number of leading decoded samples
     * must be discarded by the caller to get the original audio without leading
     * padding.
     */
    int initial_padding;
    /**
     * Audio only. The amount of padding (in samples) appended by the encoder to
     * the end of the audio. I.e. this number of decoded samples must be
     * discarded by the caller from the end of the stream to get the original
     * audio without any trailing padding.
     */
    int trailing_padding;
    /**
     * Audio only. Number of samples to skip after a discontinuity.
     */
    int seek_preroll;
} AVCodecParameters;

/**
 * If c is NULL, returns the first registered codec,
 * if c is non-NULL, returns the next registered codec after c,
 * or NULL if c is the last one.
 */
AVCodec *av_codec_next(const AVCodec *c);

/**
 * Return the LIBAVCODEC_VERSION_INT constant.
 */
unsigned avcodec_version(void);

/**
 * Return the libavcodec build-time configuration.
 */
const char *avcodec_configuration(void);

/**
 * Return the libavcodec license.
 */
const char *avcodec_license(void);

/**
 * Register the codec codec and initialize libavcodec.
 *
 * @warning either this function or avcodec_register_all() must be called
 * before any other libavcodec functions.
 *
 * @see avcodec_register_all()
 */
void avcodec_register(AVCodec *codec);

/**
 * Register all the codecs, parsers and bitstream filters which were enabled at
 * configuration time. If you do not call this function you can select exactly
 * which formats you want to support, by using the individual registration
 * functions.
 *
 * @see avcodec_register
 * @see av_register_codec_parser
 * @see av_register_bitstream_filter
 */
void avcodec_register_all(void);

/**
 * Allocate an AVCodecContext and set its fields to default values. The
 * resulting struct should be freed with avcodec_free_context().
 *
 * @param codec if non-NULL, allocate private data and initialize defaults
 *              for the given codec. It is illegal to then call avcodec_open2()
 *              with a different codec.
 *              If NULL, then the codec-specific defaults won't be initialized,
 *              which may result in suboptimal default settings (this is
 *              important mainly for encoders, e.g. libx264).
 *
 * @return An AVCodecContext filled with default values or NULL on failure.
 */
AVCodecContext *avcodec_alloc_context3(const AVCodec *codec);

/**
 * Free the codec context and everything associated with it and write NULL to
 * the provided pointer.
 */
void avcodec_free_context(AVCodecContext **avctx);

#if FF_API_GET_CONTEXT_DEFAULTS
/**
 * @deprecated This function should not be used, as closing and opening a codec
 * context multiple time is not supported. A new codec context should be
 * allocated for each new use.
 */
int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec);
#endif

/**
 * Get the AVClass for AVCodecContext. It can be used in combination with
 * AV_OPT_SEARCH_FAKE_OBJ for examining options.
 *
 * @see av_opt_find().
 */
const AVClass *avcodec_get_class(void);

#if FF_API_COPY_CONTEXT
/**
 * Get the AVClass for AVFrame. It can be used in combination with
 * AV_OPT_SEARCH_FAKE_OBJ for examining options.
 *
 * @see av_opt_find().
 */
const AVClass *avcodec_get_frame_class(void);

/**
 * Get the AVClass for AVSubtitleRect. It can be used in combination with
 * AV_OPT_SEARCH_FAKE_OBJ for examining options.
 *
 * @see av_opt_find().
 */
const AVClass *avcodec_get_subtitle_rect_class(void);

/**
 * Copy the settings of the source AVCodecContext into the destination
 * AVCodecContext. The resulting destination codec context will be
 * unopened, i.e. you are required to call avcodec_open2() before you
 * can use this AVCodecContext to decode/encode video/audio data.
 *
 * @param dest target codec context, should be initialized with
 *             avcodec_alloc_context3(NULL), but otherwise uninitialized
 * @param src source codec context
 * @return AVERROR() on error (e.g. memory allocation error), 0 on success
 *
 * @deprecated The semantics of this function are ill-defined and it should not
 * be used. If you need to transfer the stream parameters from one codec context
 * to another, use an intermediate AVCodecParameters instance and the
 * avcodec_parameters_from_context() / avcodec_parameters_to_context()
 * functions.
 */
attribute_deprecated
int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src);
#endif

/**
 * Allocate a new AVCodecParameters and set its fields to default values
 * (unknown/invalid/0). The returned struct must be freed with
 * avcodec_parameters_free().
 */
AVCodecParameters *avcodec_parameters_alloc(void);

/**
 * Free an AVCodecParameters instance and everything associated with it and
 * write NULL to the supplied pointer.
 */
void avcodec_parameters_free(AVCodecParameters **par);

/**
 * Copy the contents of src to dst. Any allocated fields in dst are freed and
 * replaced with newly allocated duplicates of the corresponding fields in src.
 *
 * @return >= 0 on success, a negative AVERROR code on failure.
 */
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src);

/**
 * Fill the parameters struct based on the values from the supplied codec
 * context. Any allocated fields in par are freed and replaced with duplicates
 * of the corresponding fields in codec.
 *
 * @return >= 0 on success, a negative AVERROR code on failure
 */
int avcodec_parameters_from_context(AVCodecParameters *par,
                                    const AVCodecContext *codec);

/**
 * Fill the codec context based on the values from the supplied codec
 * parameters. Any allocated fields in codec that have a corresponding field in
 * par are freed and replaced with duplicates of the corresponding field in par.
 * Fields in codec that do not have a counterpart in par are not touched.
 *
 * @return >= 0 on success, a negative AVERROR code on failure.
 */
int avcodec_parameters_to_context(AVCodecContext *codec,
                                  const AVCodecParameters *par);

/**
 * Initialize the AVCodecContext to use the given AVCodec. Prior to using this
 * function the context has to be allocated with avcodec_alloc_context3().
 *
 * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),
 * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for
 * retrieving a codec.
 *
 * @warning This function is not thread safe!
 *
 * @note Always call this function before using decoding routines (such as
 * @ref avcodec_receive_frame()).
 *
 * @code
 * avcodec_register_all();
 * av_dict_set(&opts, "b", "2.5M", 0);
 * codec = avcodec_find_decoder(AV_CODEC_ID_H264);
 * if (!codec)
 *     exit(1);
 *
 * context = avcodec_alloc_context3(codec);
 *
 * if (avcodec_open2(context, codec, opts) < 0)
 *     exit(1);
 * @endcode
 *
 * @param avctx The context to initialize.
 * @param codec The codec to open this context for. If a non-NULL codec has been
 *              previously passed to avcodec_alloc_context3() or
 *              for this context, then this parameter MUST be either NULL or
 *              equal to the previously passed codec.
 * @param options A dictionary filled with AVCodecContext and codec-private options.
 *                On return this object will be filled with options that were not found.
 *
 * @return zero on success, a negative value on error
 * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(),
 *      av_dict_set(), av_opt_find().
 */
int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);

/**
 * Close a given AVCodecContext and free all the data associated with it
 * (but not the AVCodecContext itself).
 *
 * Calling this function on an AVCodecContext that hasn't been opened will free
 * the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL
 * codec. Subsequent calls will do nothing.
 *
 * @note Do not use this function. Use avcodec_free_context() to destroy a
 * codec context (either open or closed). Opening and closing a codec context
 * multiple times is not supported anymore -- use multiple codec contexts
 * instead.
 */
int avcodec_close(AVCodecContext *avctx);

/**
 * Free all allocated data in the given subtitle struct.
 *
 * @param sub AVSubtitle to free.
 */
void avsubtitle_free(AVSubtitle *sub);

/**
 * @}
 */

/**
 * @addtogroup lavc_packet
 * @{
 */

/**
 * Allocate an AVPacket and set its fields to default values.  The resulting
 * struct must be freed using av_packet_free().
 *
 * @return An AVPacket filled with default values or NULL on failure.
 *
 * @note this only allocates the AVPacket itself, not the data buffers. Those
 * must be allocated through other means such as av_new_packet.
 *
 * @see av_new_packet
 */
AVPacket *av_packet_alloc(void);

/**
 * Create a new packet that references the same data as src.
 *
 * This is a shortcut for av_packet_alloc()+av_packet_ref().
 *
 * @return newly created AVPacket on success, NULL on error.
 *
 * @see av_packet_alloc
 * @see av_packet_ref
 */
AVPacket *av_packet_clone(AVPacket *src);

/**
 * Free the packet, if the packet is reference counted, it will be
 * unreferenced first.
 *
 * @param packet packet to be freed. The pointer will be set to NULL.
 * @note passing NULL is a no-op.
 */
void av_packet_free(AVPacket **pkt);

/**
 * Initialize optional fields of a packet with default values.
 *
 * Note, this does not touch the data and size members, which have to be
 * initialized separately.
 *
 * @param pkt packet
 */
void av_init_packet(AVPacket *pkt);

/**
 * Allocate the payload of a packet and initialize its fields with
 * default values.
 *
 * @param pkt packet
 * @param size wanted payload size
 * @return 0 if OK, AVERROR_xxx otherwise
 */
int av_new_packet(AVPacket *pkt, int size);

/**
 * Reduce packet size, correctly zeroing padding
 *
 * @param pkt packet
 * @param size new size
 */
void av_shrink_packet(AVPacket *pkt, int size);

/**
 * Increase packet size, correctly zeroing padding
 *
 * @param pkt packet
 * @param grow_by number of bytes by which to increase the size of the packet
 */
int av_grow_packet(AVPacket *pkt, int grow_by);

/**
 * Initialize a reference-counted packet from av_malloc()ed data.
 *
 * @param pkt packet to be initialized. This function will set the data, size,
 *        buf and destruct fields, all others are left untouched.
 * @param data Data allocated by av_malloc() to be used as packet data. If this
 *        function returns successfully, the data is owned by the underlying AVBuffer.
 *        The caller may not access the data through other means.
 * @param size size of data in bytes, without the padding. I.e. the full buffer
 *        size is assumed to be size + AV_INPUT_BUFFER_PADDING_SIZE.
 *
 * @return 0 on success, a negative AVERROR on error
 */
int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size);

#if FF_API_AVPACKET_OLD_API
/**
 * @warning This is a hack - the packet memory allocation stuff is broken. The
 * packet is allocated if it was not really allocated.
 *
 * @deprecated Use av_packet_ref
 */
attribute_deprecated
int av_dup_packet(AVPacket *pkt);
/**
 * Copy packet, including contents
 *
 * @return 0 on success, negative AVERROR on fail
 */
int av_copy_packet(AVPacket *dst, const AVPacket *src);

/**
 * Copy packet side data
 *
 * @return 0 on success, negative AVERROR on fail
 */
int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src);

/**
 * Free a packet.
 *
 * @deprecated Use av_packet_unref
 *
 * @param pkt packet to free
 */
attribute_deprecated
void av_free_packet(AVPacket *pkt);
#endif
/**
 * Allocate new information of a packet.
 *
 * @param pkt packet
 * @param type side information type
 * @param size side information size
 * @return pointer to fresh allocated data or NULL otherwise
 */
uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
                                 int size);

/**
 * Wrap an existing array as a packet side data.
 *
 * @param pkt packet
 * @param type side information type
 * @param data the side data array. It must be allocated with the av_malloc()
 *             family of functions. The ownership of the data is transferred to
 *             pkt.
 * @param size side information size
 * @return a non-negative number on success, a negative AVERROR code on
 *         failure. On failure, the packet is unchanged and the data remains
 *         owned by the caller.
 */
int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
                            uint8_t *data, size_t size);

/**
 * Shrink the already allocated side data buffer
 *
 * @param pkt packet
 * @param type side information type
 * @param size new side information size
 * @return 0 on success, < 0 on failure
 */
int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
                               int size);

/**
 * Get side information from packet.
 *
 * @param pkt packet
 * @param type desired side information type
 * @param size pointer for side information size to store (optional)
 * @return pointer to data if present or NULL otherwise
 */
uint8_t* av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
                                 int *size);

int av_packet_merge_side_data(AVPacket *pkt);

int av_packet_split_side_data(AVPacket *pkt);

const char *av_packet_side_data_name(enum AVPacketSideDataType type);

/**
 * Pack a dictionary for use in side_data.
 *
 * @param dict The dictionary to pack.
 * @param size pointer to store the size of the returned data
 * @return pointer to data if successful, NULL otherwise
 */
uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size);
/**
 * Unpack a dictionary from side_data.
 *
 * @param data data from side_data
 * @param size size of the data
 * @param dict the metadata storage dictionary
 * @return 0 on success, < 0 on failure
 */
int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict);


/**
 * Convenience function to free all the side data stored.
 * All the other fields stay untouched.
 *
 * @param pkt packet
 */
void av_packet_free_side_data(AVPacket *pkt);

/**
 * Setup a new reference to the data described by a given packet
 *
 * If src is reference-counted, setup dst as a new reference to the
 * buffer in src. Otherwise allocate a new buffer in dst and copy the
 * data from src into it.
 *
 * All the other fields are copied from src.
 *
 * @see av_packet_unref
 *
 * @param dst Destination packet
 * @param src Source packet
 *
 * @return 0 on success, a negative AVERROR on error.
 */
int av_packet_ref(AVPacket *dst, const AVPacket *src);

/**
 * Wipe the packet.
 *
 * Unreference the buffer referenced by the packet and reset the
 * remaining packet fields to their default values.
 *
 * @param pkt The packet to be unreferenced.
 */
void av_packet_unref(AVPacket *pkt);

/**
 * Move every field in src to dst and reset src.
 *
 * @see av_packet_unref
 *
 * @param src Source packet, will be reset
 * @param dst Destination packet
 */
void av_packet_move_ref(AVPacket *dst, AVPacket *src);

/**
 * Copy only "properties" fields from src to dst.
 *
 * Properties for the purpose of this function are all the fields
 * beside those related to the packet data (buf, data, size)
 *
 * @param dst Destination packet
 * @param src Source packet
 *
 * @return 0 on success AVERROR on failure.
 */
int av_packet_copy_props(AVPacket *dst, const AVPacket *src);

/**
 * Convert valid timing fields (timestamps / durations) in a packet from one
 * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be
 * ignored.
 *
 * @param pkt packet on which the conversion will be performed
 * @param tb_src source timebase, in which the timing fields in pkt are
 *               expressed
 * @param tb_dst destination timebase, to which the timing fields will be
 *               converted
 */
void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst);

/**
 * @}
 */

/**
 * @addtogroup lavc_decoding
 * @{
 */

/**
 * Find a registered decoder with a matching codec ID.
 *
 * @param id AVCodecID of the requested decoder
 * @return A decoder if one was found, NULL otherwise.
 */
AVCodec *avcodec_find_decoder(enum AVCodecID id);

/**
 * Find a registered decoder with the specified name.
 *
 * @param name name of the requested decoder
 * @return A decoder if one was found, NULL otherwise.
 */
AVCodec *avcodec_find_decoder_by_name(const char *name);

/**
 * The default callback for AVCodecContext.get_buffer2(). It is made public so
 * it can be called by custom get_buffer2() implementations for decoders without
 * AV_CODEC_CAP_DR1 set.
 */
int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags);

#if FF_API_EMU_EDGE
/**
 * Return the amount of padding in pixels which the get_buffer callback must
 * provide around the edge of the image for codecs which do not have the
 * CODEC_FLAG_EMU_EDGE flag.
 *
 * @return Required padding in pixels.
 *
 * @deprecated CODEC_FLAG_EMU_EDGE is deprecated, so this function is no longer
 * needed
 */
attribute_deprecated
unsigned avcodec_get_edge_width(void);
#endif

/**
 * Modify width and height values so that they will result in a memory
 * buffer that is acceptable for the codec if you do not use any horizontal
 * padding.
 *
 * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened.
 */
void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height);

/**
 * Modify width and height values so that they will result in a memory
 * buffer that is acceptable for the codec if you also ensure that all
 * line sizes are a multiple of the respective linesize_align[i].
 *
 * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened.
 */
void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
                               int linesize_align[AV_NUM_DATA_POINTERS]);

/**
 * Converts AVChromaLocation to swscale x/y chroma position.
 *
 * The positions represent the chroma (0,0) position in a coordinates system
 * with luma (0,0) representing the origin and luma(1,1) representing 256,256
 *
 * @param xpos  horizontal chroma sample position
 * @param ypos  vertical   chroma sample position
 */
int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos);

/**
 * Converts swscale x/y chroma position to AVChromaLocation.
 *
 * The positions represent the chroma (0,0) position in a coordinates system
 * with luma (0,0) representing the origin and luma(1,1) representing 256,256
 *
 * @param xpos  horizontal chroma sample position
 * @param ypos  vertical   chroma sample position
 */
enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos);

/**
 * Decode the audio frame of size avpkt->size from avpkt->data into frame.
 *
 * Some decoders may support multiple frames in a single AVPacket. Such
 * decoders would then just decode the first frame and the return value would be
 * less than the packet size. In this case, avcodec_decode_audio4 has to be
 * called again with an AVPacket containing the remaining data in order to
 * decode the second frame, etc...  Even if no frames are returned, the packet
 * needs to be fed to the decoder with remaining data until it is completely
 * consumed or an error occurs.
 *
 * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input
 * and output. This means that for some packets they will not immediately
 * produce decoded output and need to be flushed at the end of decoding to get
 * all the decoded data. Flushing is done by calling this function with packets
 * with avpkt->data set to NULL and avpkt->size set to 0 until it stops
 * returning samples. It is safe to flush even those decoders that are not
 * marked with AV_CODEC_CAP_DELAY, then no samples will be returned.
 *
 * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE
 *          larger than the actual read bytes because some optimized bitstream
 *          readers read 32 or 64 bits at once and could read over the end.
 *
 * @note The AVCodecContext MUST have been opened with @ref avcodec_open2()
 * before packets may be fed to the decoder.
 *
 * @param      avctx the codec context
 * @param[out] frame The AVFrame in which to store decoded audio samples.
 *                   The decoder will allocate a buffer for the decoded frame by
 *                   calling the AVCodecContext.get_buffer2() callback.
 *                   When AVCodecContext.refcounted_frames is set to 1, the frame is
 *                   reference counted and the returned reference belongs to the
 *                   caller. The caller must release the frame using av_frame_unref()
 *                   when the frame is no longer needed. The caller may safely write
 *                   to the frame if av_frame_is_writable() returns 1.
 *                   When AVCodecContext.refcounted_frames is set to 0, the returned
 *                   reference belongs to the decoder and is valid only until the
 *                   next call to this function or until closing or flushing the
 *                   decoder. The caller may not write to it.
 * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is
 *                           non-zero. Note that this field being set to zero
 *                           does not mean that an error has occurred. For
 *                           decoders with AV_CODEC_CAP_DELAY set, no given decode
 *                           call is guaranteed to produce a frame.
 * @param[in]  avpkt The input AVPacket containing the input buffer.
 *                   At least avpkt->data and avpkt->size should be set. Some
 *                   decoders might also require additional fields to be set.
 * @return A negative error code is returned if an error occurred during
 *         decoding, otherwise the number of bytes consumed from the input
 *         AVPacket is returned.
 *
* @deprecated Use avcodec_send_packet() and avcodec_receive_frame().
 */
attribute_deprecated
int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame,
                          int *got_frame_ptr, const AVPacket *avpkt);

/**
 * Decode the video frame of size avpkt->size from avpkt->data into picture.
 * Some decoders may support multiple frames in a single AVPacket, such
 * decoders would then just decode the first frame.
 *
 * @warning The input buffer must be AV_INPUT_BUFFER_PADDING_SIZE larger than
 * the actual read bytes because some optimized bitstream readers read 32 or 64
 * bits at once and could read over the end.
 *
 * @warning The end of the input buffer buf should be set to 0 to ensure that
 * no overreading happens for damaged MPEG streams.
 *
 * @note Codecs which have the AV_CODEC_CAP_DELAY capability set have a delay
 * between input and output, these need to be fed with avpkt->data=NULL,
 * avpkt->size=0 at the end to return the remaining frames.
 *
 * @note The AVCodecContext MUST have been opened with @ref avcodec_open2()
 * before packets may be fed to the decoder.
 *
 * @param avctx the codec context
 * @param[out] picture The AVFrame in which the decoded video frame will be stored.
 *             Use av_frame_alloc() to get an AVFrame. The codec will
 *             allocate memory for the actual bitmap by calling the
 *             AVCodecContext.get_buffer2() callback.
 *             When AVCodecContext.refcounted_frames is set to 1, the frame is
 *             reference counted and the returned reference belongs to the
 *             caller. The caller must release the frame using av_frame_unref()
 *             when the frame is no longer needed. The caller may safely write
 *             to the frame if av_frame_is_writable() returns 1.
 *             When AVCodecContext.refcounted_frames is set to 0, the returned
 *             reference belongs to the decoder and is valid only until the
 *             next call to this function or until closing or flushing the
 *             decoder. The caller may not write to it.
 *
 * @param[in] avpkt The input AVPacket containing the input buffer.
 *            You can create such packet with av_init_packet() and by then setting
 *            data and size, some decoders might in addition need other fields like
 *            flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least
 *            fields possible.
 * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero.
 * @return On error a negative value is returned, otherwise the number of bytes
 * used or zero if no frame could be decompressed.
 *
 * @deprecated Use avcodec_send_packet() and avcodec_receive_frame().
 */
attribute_deprecated
int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
                         int *got_picture_ptr,
                         const AVPacket *avpkt);

/**
 * Decode a subtitle message.
 * Return a negative value on error, otherwise return the number of bytes used.
 * If no subtitle could be decompressed, got_sub_ptr is zero.
 * Otherwise, the subtitle is stored in *sub.
 * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for
 * simplicity, because the performance difference is expect to be negligible
 * and reusing a get_buffer written for video codecs would probably perform badly
 * due to a potentially very different allocation pattern.
 *
 * Some decoders (those marked with CODEC_CAP_DELAY) have a delay between input
 * and output. This means that for some packets they will not immediately
 * produce decoded output and need to be flushed at the end of decoding to get
 * all the decoded data. Flushing is done by calling this function with packets
 * with avpkt->data set to NULL and avpkt->size set to 0 until it stops
 * returning subtitles. It is safe to flush even those decoders that are not
 * marked with CODEC_CAP_DELAY, then no subtitles will be returned.
 *
 * @note The AVCodecContext MUST have been opened with @ref avcodec_open2()
 * before packets may be fed to the decoder.
 *
 * @param avctx the codec context
 * @param[out] sub The Preallocated AVSubtitle in which the decoded subtitle will be stored,
 *                 must be freed with avsubtitle_free if *got_sub_ptr is set.
 * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero.
 * @param[in] avpkt The input AVPacket containing the input buffer.
 */
int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
                            int *got_sub_ptr,
                            AVPacket *avpkt);

/**
 * Supply raw packet data as input to a decoder.
 *
 * Internally, this call will copy relevant AVCodecContext fields, which can
 * influence decoding per-packet, and apply them when the packet is actually
 * decoded. (For example AVCodecContext.skip_frame, which might direct the
 * decoder to drop the frame contained by the packet sent with this function.)
 *
 * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE
 *          larger than the actual read bytes because some optimized bitstream
 *          readers read 32 or 64 bits at once and could read over the end.
 *
 * @warning Do not mix this API with the legacy API (like avcodec_decode_video2())
 *          on the same AVCodecContext. It will return unexpected results now
 *          or in future libavcodec versions.
 *
 * @note The AVCodecContext MUST have been opened with @ref avcodec_open2()
 *       before packets may be fed to the decoder.
 *
 * @param avctx codec context
 * @param[in] avpkt The input AVPacket. Usually, this will be a single video
 *                  frame, or several complete audio frames.
 *                  Ownership of the packet remains with the caller, and the
 *                  decoder will not write to the packet. The decoder may create
 *                  a reference to the packet data (or copy it if the packet is
 *                  not reference-counted).
 *                  Unlike with older APIs, the packet is always fully consumed,
 *                  and if it contains multiple frames (e.g. some audio codecs),
 *                  will require you to call avcodec_receive_frame() multiple
 *                  times afterwards before you can send a new packet.
 *                  It can be NULL (or an AVPacket with data set to NULL and
 *                  size set to 0); in this case, it is considered a flush
 *                  packet, which signals the end of the stream. Sending the
 *                  first flush packet will return success. Subsequent ones are
 *                  unnecessary and will return AVERROR_EOF. If the decoder
 *                  still has frames buffered, it will return them after sending
 *                  a flush packet.
 *
 * @return 0 on success, otherwise negative error code:
 *      AVERROR(EAGAIN):   input is not accepted right now - the packet must be
 *                         resent after trying to read output
 *      AVERROR_EOF:       the decoder has been flushed, and no new packets can
 *                         be sent to it (also returned if more than 1 flush
 *                         packet is sent)
 *      AVERROR(EINVAL):   codec not opened, it is an encoder, or requires flush
 *      AVERROR(ENOMEM):   failed to add packet to internal queue, or similar
 *      other errors: legitimate decoding errors
 */
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt);

/**
 * Return decoded output data from a decoder.
 *
 * @param avctx codec context
 * @param frame This will be set to a reference-counted video or audio
 *              frame (depending on the decoder type) allocated by the
 *              decoder. Note that the function will always call
 *              av_frame_unref(frame) before doing anything else.
 *
 * @return
 *      0:                 success, a frame was returned
 *      AVERROR(EAGAIN):   output is not available right now - user must try
 *                         to send new input
 *      AVERROR_EOF:       the decoder has been fully flushed, and there will be
 *                         no more output frames
 *      AVERROR(EINVAL):   codec not opened, or it is an encoder
 *      other negative values: legitimate decoding errors
 */
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame);

/**
 * Supply a raw video or audio frame to the encoder. Use avcodec_receive_packet()
 * to retrieve buffered output packets.
 *
 * @param avctx     codec context
 * @param[in] frame AVFrame containing the raw audio or video frame to be encoded.
 *                  Ownership of the frame remains with the caller, and the
 *                  encoder will not write to the frame. The encoder may create
 *                  a reference to the frame data (or copy it if the frame is
 *                  not reference-counted).
 *                  It can be NULL, in which case it is considered a flush
 *                  packet.  This signals the end of the stream. If the encoder
 *                  still has packets buffered, it will return them after this
 *                  call. Once flushing mode has been entered, additional flush
 *                  packets are ignored, and sending frames will return
 *                  AVERROR_EOF.
 *
 *                  For audio:
 *                  If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame
 *                  can have any number of samples.
 *                  If it is not set, frame->nb_samples must be equal to
 *                  avctx->frame_size for all frames except the last.
 *                  The final frame may be smaller than avctx->frame_size.
 * @return 0 on success, otherwise negative error code:
 *      AVERROR(EAGAIN):   input is not accepted right now - the frame must be
 *                         resent after trying to read output packets
 *      AVERROR_EOF:       the encoder has been flushed, and no new frames can
 *                         be sent to it
 *      AVERROR(EINVAL):   codec not opened, refcounted_frames not set, it is a
 *                         decoder, or requires flush
 *      AVERROR(ENOMEM):   failed to add packet to internal queue, or similar
 *      other errors: legitimate decoding errors
 */
int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame);

/**
 * Read encoded data from the encoder.
 *
 * @param avctx codec context
 * @param avpkt This will be set to a reference-counted packet allocated by the
 *              encoder. Note that the function will always call
 *              av_frame_unref(frame) before doing anything else.
 * @return 0 on success, otherwise negative error code:
 *      AVERROR(EAGAIN):   output is not available right now - user must try
 *                         to send input
 *      AVERROR_EOF:       the encoder has been fully flushed, and there will be
 *                         no more output packets
 *      AVERROR(EINVAL):   codec not opened, or it is an encoder
 *      other errors: legitimate decoding errors
 */
int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt);


/**
 * @defgroup lavc_parsing Frame parsing
 * @{
 */

enum AVPictureStructure {
    AV_PICTURE_STRUCTURE_UNKNOWN,      //< unknown
    AV_PICTURE_STRUCTURE_TOP_FIELD,    //< coded as top field
    AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field
    AV_PICTURE_STRUCTURE_FRAME,        //< coded as frame
};

typedef struct AVCodecParserContext {
    void *priv_data;
    struct AVCodecParser *parser;
    int64_t frame_offset; /* offset of the current frame */
    int64_t cur_offset; /* current offset
                           (incremented by each av_parser_parse()) */
    int64_t next_frame_offset; /* offset of the next frame */
    /* video info */
    int pict_type; /* XXX: Put it back in AVCodecContext. */
    /**
     * This field is used for proper frame duration computation in lavf.
     * It signals, how much longer the frame duration of the current frame
     * is compared to normal frame duration.
     *
     * frame_duration = (1 + repeat_pict) * time_base
     *
     * It is used by codecs like H.264 to display telecined material.
     */
    int repeat_pict; /* XXX: Put it back in AVCodecContext. */
    int64_t pts;     /* pts of the current frame */
    int64_t dts;     /* dts of the current frame */

    /* private data */
    int64_t last_pts;
    int64_t last_dts;
    int fetch_timestamp;

#define AV_PARSER_PTS_NB 4
    int cur_frame_start_index;
    int64_t cur_frame_offset[AV_PARSER_PTS_NB];
    int64_t cur_frame_pts[AV_PARSER_PTS_NB];
    int64_t cur_frame_dts[AV_PARSER_PTS_NB];

    int flags;
#define PARSER_FLAG_COMPLETE_FRAMES           0x0001
#define PARSER_FLAG_ONCE                      0x0002
/// Set if the parser has a valid file offset
#define PARSER_FLAG_FETCHED_OFFSET            0x0004
#define PARSER_FLAG_USE_CODEC_TS              0x1000

    int64_t offset;      ///< byte offset from starting packet start
    int64_t cur_frame_end[AV_PARSER_PTS_NB];

    /**
     * Set by parser to 1 for key frames and 0 for non-key frames.
     * It is initialized to -1, so if the parser doesn't set this flag,
     * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames
     * will be used.
     */
    int key_frame;

#if FF_API_CONVERGENCE_DURATION
    /**
     * @deprecated unused
     */
    attribute_deprecated
    int64_t convergence_duration;
#endif

    // Timestamp generation support:
    /**
     * Synchronization point for start of timestamp generation.
     *
     * Set to >0 for sync point, 0 for no sync point and <0 for undefined
     * (default).
     *
     * For example, this corresponds to presence of H.264 buffering period
     * SEI message.
     */
    int dts_sync_point;

    /**
     * Offset of the current timestamp against last timestamp sync point in
     * units of AVCodecContext.time_base.
     *
     * Set to INT_MIN when dts_sync_point unused. Otherwise, it must
     * contain a valid timestamp offset.
     *
     * Note that the timestamp of sync point has usually a nonzero
     * dts_ref_dts_delta, which refers to the previous sync point. Offset of
     * the next frame after timestamp sync point will be usually 1.
     *
     * For example, this corresponds to H.264 cpb_removal_delay.
     */
    int dts_ref_dts_delta;

    /**
     * Presentation delay of current frame in units of AVCodecContext.time_base.
     *
     * Set to INT_MIN when dts_sync_point unused. Otherwise, it must
     * contain valid non-negative timestamp delta (presentation time of a frame
     * must not lie in the past).
     *
     * This delay represents the difference between decoding and presentation
     * time of the frame.
     *
     * For example, this corresponds to H.264 dpb_output_delay.
     */
    int pts_dts_delta;

    /**
     * Position of the packet in file.
     *
     * Analogous to cur_frame_pts/dts
     */
    int64_t cur_frame_pos[AV_PARSER_PTS_NB];

    /**
     * Byte position of currently parsed frame in stream.
     */
    int64_t pos;

    /**
     * Previous frame byte position.
     */
    int64_t last_pos;

    /**
     * Duration of the current frame.
     * For audio, this is in units of 1 / AVCodecContext.sample_rate.
     * For all other types, this is in units of AVCodecContext.time_base.
     */
    int duration;

    enum AVFieldOrder field_order;

    /**
     * Indicate whether a picture is coded as a frame, top field or bottom field.
     *
     * For example, H.264 field_pic_flag equal to 0 corresponds to
     * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag
     * equal to 1 and bottom_field_flag equal to 0 corresponds to
     * AV_PICTURE_STRUCTURE_TOP_FIELD.
     */
    enum AVPictureStructure picture_structure;

    /**
     * Picture number incremented in presentation or output order.
     * This field may be reinitialized at the first picture of a new sequence.
     *
     * For example, this corresponds to H.264 PicOrderCnt.
     */
    int output_picture_number;

    /**
     * Dimensions of the decoded video intended for presentation.
     */
    int width;
    int height;

    /**
     * Dimensions of the coded video.
     */
    int coded_width;
    int coded_height;

    /**
     * The format of the coded data, corresponds to enum AVPixelFormat for video
     * and for enum AVSampleFormat for audio.
     *
     * Note that a decoder can have considerable freedom in how exactly it
     * decodes the data, so the format reported here might be different from the
     * one returned by a decoder.
     */
    int format;
} AVCodecParserContext;

typedef struct AVCodecParser {
    int codec_ids[5]; /* several codec IDs are permitted */
    int priv_data_size;
    int (*parser_init)(AVCodecParserContext *s);
    /* This callback never returns an error, a negative value means that
     * the frame start was in a previous packet. */
    int (*parser_parse)(AVCodecParserContext *s,
                        AVCodecContext *avctx,
                        const uint8_t **poutbuf, int *poutbuf_size,
                        const uint8_t *buf, int buf_size);
    void (*parser_close)(AVCodecParserContext *s);
    int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size);
    struct AVCodecParser *next;
} AVCodecParser;

AVCodecParser *av_parser_next(const AVCodecParser *c);

void av_register_codec_parser(AVCodecParser *parser);
AVCodecParserContext *av_parser_init(int codec_id);

/**
 * Parse a packet.
 *
 * @param s             parser context.
 * @param avctx         codec context.
 * @param poutbuf       set to pointer to parsed buffer or NULL if not yet finished.
 * @param poutbuf_size  set to size of parsed buffer or zero if not yet finished.
 * @param buf           input buffer.
 * @param buf_size      buffer size in bytes without the padding. I.e. the full buffer
                        size is assumed to be buf_size + AV_INPUT_BUFFER_PADDING_SIZE.
                        To signal EOF, this should be 0 (so that the last frame
                        can be output).
 * @param pts           input presentation timestamp.
 * @param dts           input decoding timestamp.
 * @param pos           input byte position in stream.
 * @return the number of bytes of the input bitstream used.
 *
 * Example:
 * @code
 *   while(in_len){
 *       len = av_parser_parse2(myparser, AVCodecContext, &data, &size,
 *                                        in_data, in_len,
 *                                        pts, dts, pos);
 *       in_data += len;
 *       in_len  -= len;
 *
 *       if(size)
 *          decode_frame(data, size);
 *   }
 * @endcode
 */
int av_parser_parse2(AVCodecParserContext *s,
                     AVCodecContext *avctx,
                     uint8_t **poutbuf, int *poutbuf_size,
                     const uint8_t *buf, int buf_size,
                     int64_t pts, int64_t dts,
                     int64_t pos);

/**
 * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed
 * @deprecated use AVBitStreamFilter
 */
int av_parser_change(AVCodecParserContext *s,
                     AVCodecContext *avctx,
                     uint8_t **poutbuf, int *poutbuf_size,
                     const uint8_t *buf, int buf_size, int keyframe);
void av_parser_close(AVCodecParserContext *s);

/**
 * @}
 * @}
 */

/**
 * @addtogroup lavc_encoding
 * @{
 */

/**
 * Find a registered encoder with a matching codec ID.
 *
 * @param id AVCodecID of the requested encoder
 * @return An encoder if one was found, NULL otherwise.
 */
AVCodec *avcodec_find_encoder(enum AVCodecID id);

/**
 * Find a registered encoder with the specified name.
 *
 * @param name name of the requested encoder
 * @return An encoder if one was found, NULL otherwise.
 */
AVCodec *avcodec_find_encoder_by_name(const char *name);

/**
 * Encode a frame of audio.
 *
 * Takes input samples from frame and writes the next output packet, if
 * available, to avpkt. The output packet does not necessarily contain data for
 * the most recent frame, as encoders can delay, split, and combine input frames
 * internally as needed.
 *
 * @param avctx     codec context
 * @param avpkt     output AVPacket.
 *                  The user can supply an output buffer by setting
 *                  avpkt->data and avpkt->size prior to calling the
 *                  function, but if the size of the user-provided data is not
 *                  large enough, encoding will fail. If avpkt->data and
 *                  avpkt->size are set, avpkt->destruct must also be set. All
 *                  other AVPacket fields will be reset by the encoder using
 *                  av_init_packet(). If avpkt->data is NULL, the encoder will
 *                  allocate it. The encoder will set avpkt->size to the size
 *                  of the output packet.
 *
 *                  If this function fails or produces no output, avpkt will be
 *                  freed using av_packet_unref().
 * @param[in] frame AVFrame containing the raw audio data to be encoded.
 *                  May be NULL when flushing an encoder that has the
 *                  AV_CODEC_CAP_DELAY capability set.
 *                  If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame
 *                  can have any number of samples.
 *                  If it is not set, frame->nb_samples must be equal to
 *                  avctx->frame_size for all frames except the last.
 *                  The final frame may be smaller than avctx->frame_size.
 * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the
 *                            output packet is non-empty, and to 0 if it is
 *                            empty. If the function returns an error, the
 *                            packet can be assumed to be invalid, and the
 *                            value of got_packet_ptr is undefined and should
 *                            not be used.
 * @return          0 on success, negative error code on failure
 *
 * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead
 */
attribute_deprecated
int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt,
                          const AVFrame *frame, int *got_packet_ptr);

/**
 * Encode a frame of video.
 *
 * Takes input raw video data from frame and writes the next output packet, if
 * available, to avpkt. The output packet does not necessarily contain data for
 * the most recent frame, as encoders can delay and reorder input frames
 * internally as needed.
 *
 * @param avctx     codec context
 * @param avpkt     output AVPacket.
 *                  The user can supply an output buffer by setting
 *                  avpkt->data and avpkt->size prior to calling the
 *                  function, but if the size of the user-provided data is not
 *                  large enough, encoding will fail. All other AVPacket fields
 *                  will be reset by the encoder using av_init_packet(). If
 *                  avpkt->data is NULL, the encoder will allocate it.
 *                  The encoder will set avpkt->size to the size of the
 *                  output packet. The returned data (if any) belongs to the
 *                  caller, he is responsible for freeing it.
 *
 *                  If this function fails or produces no output, avpkt will be
 *                  freed using av_packet_unref().
 * @param[in] frame AVFrame containing the raw video data to be encoded.
 *                  May be NULL when flushing an encoder that has the
 *                  AV_CODEC_CAP_DELAY capability set.
 * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the
 *                            output packet is non-empty, and to 0 if it is
 *                            empty. If the function returns an error, the
 *                            packet can be assumed to be invalid, and the
 *                            value of got_packet_ptr is undefined and should
 *                            not be used.
 * @return          0 on success, negative error code on failure
 *
 * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead
 */
attribute_deprecated
int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt,
                          const AVFrame *frame, int *got_packet_ptr);

int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
                            const AVSubtitle *sub);


/**
 * @}
 */

#if FF_API_AVCODEC_RESAMPLE
/**
 * @defgroup lavc_resample Audio resampling
 * @ingroup libavc
 * @deprecated use libswresample instead
 *
 * @{
 */
struct ReSampleContext;
struct AVResampleContext;

typedef struct ReSampleContext ReSampleContext;

/**
 *  Initialize audio resampling context.
 *
 * @param output_channels  number of output channels
 * @param input_channels   number of input channels
 * @param output_rate      output sample rate
 * @param input_rate       input sample rate
 * @param sample_fmt_out   requested output sample format
 * @param sample_fmt_in    input sample format
 * @param filter_length    length of each FIR filter in the filterbank relative to the cutoff frequency
 * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
 * @param linear           if 1 then the used FIR filter will be linearly interpolated
                           between the 2 closest, if 0 the closest will be used
 * @param cutoff           cutoff frequency, 1.0 corresponds to half the output sampling rate
 * @return allocated ReSampleContext, NULL if error occurred
 */
attribute_deprecated
ReSampleContext *av_audio_resample_init(int output_channels, int input_channels,
                                        int output_rate, int input_rate,
                                        enum AVSampleFormat sample_fmt_out,
                                        enum AVSampleFormat sample_fmt_in,
                                        int filter_length, int log2_phase_count,
                                        int linear, double cutoff);

attribute_deprecated
int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);

/**
 * Free resample context.
 *
 * @param s a non-NULL pointer to a resample context previously
 *          created with av_audio_resample_init()
 */
attribute_deprecated
void audio_resample_close(ReSampleContext *s);


/**
 * Initialize an audio resampler.
 * Note, if either rate is not an integer then simply scale both rates up so they are.
 * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq
 * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
 * @param linear If 1 then the used FIR filter will be linearly interpolated
                 between the 2 closest, if 0 the closest will be used
 * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate
 */
attribute_deprecated
struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff);

/**
 * Resample an array of samples using a previously configured context.
 * @param src an array of unconsumed samples
 * @param consumed the number of samples of src which have been consumed are returned here
 * @param src_size the number of unconsumed samples available
 * @param dst_size the amount of space in samples available in dst
 * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context.
 * @return the number of samples written in dst or -1 if an error occurred
 */
attribute_deprecated
int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx);


/**
 * Compensate samplerate/timestamp drift. The compensation is done by changing
 * the resampler parameters, so no audible clicks or similar distortions occur
 * @param compensation_distance distance in output samples over which the compensation should be performed
 * @param sample_delta number of output samples which should be output less
 *
 * example: av_resample_compensate(c, 10, 500)
 * here instead of 510 samples only 500 samples would be output
 *
 * note, due to rounding the actual compensation might be slightly different,
 * especially if the compensation_distance is large and the in_rate used during init is small
 */
attribute_deprecated
void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance);
attribute_deprecated
void av_resample_close(struct AVResampleContext *c);

/**
 * @}
 */
#endif

#if FF_API_AVPICTURE
/**
 * @addtogroup lavc_picture
 * @{
 */

/**
 * @deprecated unused
 */
attribute_deprecated
int avpicture_alloc(AVPicture *picture, enum AVPixelFormat pix_fmt, int width, int height);

/**
 * @deprecated unused
 */
attribute_deprecated
void avpicture_free(AVPicture *picture);

/**
 * @deprecated use av_image_fill_arrays() instead.
 */
attribute_deprecated
int avpicture_fill(AVPicture *picture, const uint8_t *ptr,
                   enum AVPixelFormat pix_fmt, int width, int height);

/**
 * @deprecated use av_image_copy_to_buffer() instead.
 */
attribute_deprecated
int avpicture_layout(const AVPicture *src, enum AVPixelFormat pix_fmt,
                     int width, int height,
                     unsigned char *dest, int dest_size);

/**
 * @deprecated use av_image_get_buffer_size() instead.
 */
attribute_deprecated
int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);

/**
 * @deprecated av_image_copy() instead.
 */
attribute_deprecated
void av_picture_copy(AVPicture *dst, const AVPicture *src,
                     enum AVPixelFormat pix_fmt, int width, int height);

/**
 * @deprecated unused
 */
attribute_deprecated
int av_picture_crop(AVPicture *dst, const AVPicture *src,
                    enum AVPixelFormat pix_fmt, int top_band, int left_band);

/**
 * @deprecated unused
 */
attribute_deprecated
int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt,
            int padtop, int padbottom, int padleft, int padright, int *color);

/**
 * @}
 */
#endif

/**
 * @defgroup lavc_misc Utility functions
 * @ingroup libavc
 *
 * Miscellaneous utility functions related to both encoding and decoding
 * (or neither).
 * @{
 */

/**
 * @defgroup lavc_misc_pixfmt Pixel formats
 *
 * Functions for working with pixel formats.
 * @{
 */

/**
 * Utility function to access log2_chroma_w log2_chroma_h from
 * the pixel format AVPixFmtDescriptor.
 *
 * This function asserts that pix_fmt is valid. See av_pix_fmt_get_chroma_sub_sample
 * for one that returns a failure code and continues in case of invalid
 * pix_fmts.
 *
 * @param[in]  pix_fmt the pixel format
 * @param[out] h_shift store log2_chroma_w
 * @param[out] v_shift store log2_chroma_h
 *
 * @see av_pix_fmt_get_chroma_sub_sample
 */

void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift);

/**
 * Return a value representing the fourCC code associated to the
 * pixel format pix_fmt, or 0 if no associated fourCC code can be
 * found.
 */
unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt);

/**
 * @deprecated see av_get_pix_fmt_loss()
 */
int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt,
                             int has_alpha);

/**
 * Find the best pixel format to convert to given a certain source pixel
 * format.  When converting from one pixel format to another, information loss
 * may occur.  For example, when converting from RGB24 to GRAY, the color
 * information will be lost. Similarly, other losses occur when converting from
 * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of
 * the given pixel formats should be used to suffer the least amount of loss.
 * The pixel formats from which it chooses one, are determined by the
 * pix_fmt_list parameter.
 *
 *
 * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from
 * @param[in] src_pix_fmt source pixel format
 * @param[in] has_alpha Whether the source pixel format alpha channel is used.
 * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur.
 * @return The best pixel format to convert to or -1 if none was found.
 */
enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list,
                                            enum AVPixelFormat src_pix_fmt,
                                            int has_alpha, int *loss_ptr);

/**
 * @deprecated see av_find_best_pix_fmt_of_2()
 */
enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
                                            enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);

attribute_deprecated
enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
                                            enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);

enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt);

/**
 * @}
 */

#if FF_API_SET_DIMENSIONS
/**
 * @deprecated this function is not supposed to be used from outside of lavc
 */
attribute_deprecated
void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
#endif

/**
 * Put a string representing the codec tag codec_tag in buf.
 *
 * @param buf       buffer to place codec tag in
 * @param buf_size size in bytes of buf
 * @param codec_tag codec tag to assign
 * @return the length of the string that would have been generated if
 * enough space had been available, excluding the trailing null
 */
size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag);

void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);

/**
 * Return a name for the specified profile, if available.
 *
 * @param codec the codec that is searched for the given profile
 * @param profile the profile value for which a name is requested
 * @return A name for the profile if found, NULL otherwise.
 */
const char *av_get_profile_name(const AVCodec *codec, int profile);

/**
 * Return a name for the specified profile, if available.
 *
 * @param codec_id the ID of the codec to which the requested profile belongs
 * @param profile the profile value for which a name is requested
 * @return A name for the profile if found, NULL otherwise.
 *
 * @note unlike av_get_profile_name(), which searches a list of profiles
 *       supported by a specific decoder or encoder implementation, this
 *       function searches the list of profiles from the AVCodecDescriptor
 */
const char *avcodec_profile_name(enum AVCodecID codec_id, int profile);

int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count);
//FIXME func typedef

/**
 * Fill AVFrame audio data and linesize pointers.
 *
 * The buffer buf must be a preallocated buffer with a size big enough
 * to contain the specified samples amount. The filled AVFrame data
 * pointers will point to this buffer.
 *
 * AVFrame extended_data channel pointers are allocated if necessary for
 * planar audio.
 *
 * @param frame       the AVFrame
 *                    frame->nb_samples must be set prior to calling the
 *                    function. This function fills in frame->data,
 *                    frame->extended_data, frame->linesize[0].
 * @param nb_channels channel count
 * @param sample_fmt  sample format
 * @param buf         buffer to use for frame data
 * @param buf_size    size of buffer
 * @param align       plane size sample alignment (0 = default)
 * @return            >=0 on success, negative error code on failure
 * @todo return the size in bytes required to store the samples in
 * case of success, at the next libavutil bump
 */
int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels,
                             enum AVSampleFormat sample_fmt, const uint8_t *buf,
                             int buf_size, int align);

/**
 * Reset the internal decoder state / flush internal buffers. Should be called
 * e.g. when seeking or when switching to a different stream.
 *
 * @note when refcounted frames are not used (i.e. avctx->refcounted_frames is 0),
 * this invalidates the frames previously returned from the decoder. When
 * refcounted frames are used, the decoder just releases any references it might
 * keep internally, but the caller's reference remains valid.
 */
void avcodec_flush_buffers(AVCodecContext *avctx);

/**
 * Return codec bits per sample.
 *
 * @param[in] codec_id the codec
 * @return Number of bits per sample or zero if unknown for the given codec.
 */
int av_get_bits_per_sample(enum AVCodecID codec_id);

/**
 * Return the PCM codec associated with a sample format.
 * @param be  endianness, 0 for little, 1 for big,
 *            -1 (or anything else) for native
 * @return  AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE
 */
enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be);

/**
 * Return codec bits per sample.
 * Only return non-zero if the bits per sample is exactly correct, not an
 * approximation.
 *
 * @param[in] codec_id the codec
 * @return Number of bits per sample or zero if unknown for the given codec.
 */
int av_get_exact_bits_per_sample(enum AVCodecID codec_id);

/**
 * Return audio frame duration.
 *
 * @param avctx        codec context
 * @param frame_bytes  size of the frame, or 0 if unknown
 * @return             frame duration, in samples, if known. 0 if not able to
 *                     determine.
 */
int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes);

/**
 * This function is the same as av_get_audio_frame_duration(), except it works
 * with AVCodecParameters instead of an AVCodecContext.
 */
int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes);

#if FF_API_OLD_BSF
typedef struct AVBitStreamFilterContext {
    void *priv_data;
    struct AVBitStreamFilter *filter;
    AVCodecParserContext *parser;
    struct AVBitStreamFilterContext *next;
    /**
     * Internal default arguments, used if NULL is passed to av_bitstream_filter_filter().
     * Not for access by library users.
     */
    char *args;
} AVBitStreamFilterContext;
#endif

typedef struct AVBSFInternal AVBSFInternal;

/**
 * The bitstream filter state.
 *
 * This struct must be allocated with av_bsf_alloc() and freed with
 * av_bsf_free().
 *
 * The fields in the struct will only be changed (by the caller or by the
 * filter) as described in their documentation, and are to be considered
 * immutable otherwise.
 */
typedef struct AVBSFContext {
    /**
     * A class for logging and AVOptions
     */
    const AVClass *av_class;

    /**
     * The bitstream filter this context is an instance of.
     */
    const struct AVBitStreamFilter *filter;

    /**
     * Opaque libavcodec internal data. Must not be touched by the caller in any
     * way.
     */
    AVBSFInternal *internal;

    /**
     * Opaque filter-specific private data. If filter->priv_class is non-NULL,
     * this is an AVOptions-enabled struct.
     */
    void *priv_data;

    /**
     * Parameters of the input stream. Set by the caller before av_bsf_init().
     */
    AVCodecParameters *par_in;

    /**
     * Parameters of the output stream. Set by the filter in av_bsf_init().
     */
    AVCodecParameters *par_out;

    /**
     * The timebase used for the timestamps of the input packets. Set by the
     * caller before av_bsf_init().
     */
    AVRational time_base_in;

    /**
     * The timebase used for the timestamps of the output packets. Set by the
     * filter in av_bsf_init().
     */
    AVRational time_base_out;
} AVBSFContext;

typedef struct AVBitStreamFilter {
    const char *name;

    /**
     * A list of codec ids supported by the filter, terminated by
     * AV_CODEC_ID_NONE.
     * May be NULL, in that case the bitstream filter works with any codec id.
     */
    const enum AVCodecID *codec_ids;

    /**
     * A class for the private data, used to declare bitstream filter private
     * AVOptions. This field is NULL for bitstream filters that do not declare
     * any options.
     *
     * If this field is non-NULL, the first member of the filter private data
     * must be a pointer to AVClass, which will be set by libavcodec generic
     * code to this class.
     */
    const AVClass *priv_class;

    /*****************************************************************
     * No fields below this line are part of the public API. They
     * may not be used outside of libavcodec and can be changed and
     * removed at will.
     * New public fields should be added right above.
     *****************************************************************
     */

    int priv_data_size;
    int (*init)(AVBSFContext *ctx);
    int (*filter)(AVBSFContext *ctx, AVPacket *pkt);
    void (*close)(AVBSFContext *ctx);
} AVBitStreamFilter;

#if FF_API_OLD_BSF
/**
 * Register a bitstream filter.
 *
 * The filter will be accessible to the application code through
 * av_bitstream_filter_next() or can be directly initialized with
 * av_bitstream_filter_init().
 *
 * @see avcodec_register_all()
 */
attribute_deprecated
void av_register_bitstream_filter(AVBitStreamFilter *bsf);

/**
 * Create and initialize a bitstream filter context given a bitstream
 * filter name.
 *
 * The returned context must be freed with av_bitstream_filter_close().
 *
 * @param name    the name of the bitstream filter
 * @return a bitstream filter context if a matching filter was found
 * and successfully initialized, NULL otherwise
 */
attribute_deprecated
AVBitStreamFilterContext *av_bitstream_filter_init(const char *name);

/**
 * Filter bitstream.
 *
 * This function filters the buffer buf with size buf_size, and places the
 * filtered buffer in the buffer pointed to by poutbuf.
 *
 * The output buffer must be freed by the caller.
 *
 * @param bsfc            bitstream filter context created by av_bitstream_filter_init()
 * @param avctx           AVCodecContext accessed by the filter, may be NULL.
 *                        If specified, this must point to the encoder context of the
 *                        output stream the packet is sent to.
 * @param args            arguments which specify the filter configuration, may be NULL
 * @param poutbuf         pointer which is updated to point to the filtered buffer
 * @param poutbuf_size    pointer which is updated to the filtered buffer size in bytes
 * @param buf             buffer containing the data to filter
 * @param buf_size        size in bytes of buf
 * @param keyframe        set to non-zero if the buffer to filter corresponds to a key-frame packet data
 * @return >= 0 in case of success, or a negative error code in case of failure
 *
 * If the return value is positive, an output buffer is allocated and
 * is available in *poutbuf, and is distinct from the input buffer.
 *
 * If the return value is 0, the output buffer is not allocated and
 * should be considered identical to the input buffer, or in case
 * *poutbuf was set it points to the input buffer (not necessarily to
 * its starting address). A special case is if *poutbuf was set to NULL and
 * *poutbuf_size was set to 0, which indicates the packet should be dropped.
 */
attribute_deprecated
int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,
                               AVCodecContext *avctx, const char *args,
                               uint8_t **poutbuf, int *poutbuf_size,
                               const uint8_t *buf, int buf_size, int keyframe);

/**
 * Release bitstream filter context.
 *
 * @param bsf the bitstream filter context created with
 * av_bitstream_filter_init(), can be NULL
 */
attribute_deprecated
void av_bitstream_filter_close(AVBitStreamFilterContext *bsf);

/**
 * If f is NULL, return the first registered bitstream filter,
 * if f is non-NULL, return the next registered bitstream filter
 * after f, or NULL if f is the last one.
 *
 * This function can be used to iterate over all registered bitstream
 * filters.
 */
attribute_deprecated
AVBitStreamFilter *av_bitstream_filter_next(
Download .txt
gitextract_ujeamsu3/

├── .gitattributes
├── .gitignore
├── 3rParty/
│   ├── FFmpeg/
│   │   ├── include/
│   │   │   ├── libavcodec/
│   │   │   │   ├── avcodec.h
│   │   │   │   ├── avdct.h
│   │   │   │   ├── avfft.h
│   │   │   │   ├── d3d11va.h
│   │   │   │   ├── dirac.h
│   │   │   │   ├── dv_profile.h
│   │   │   │   ├── dxva2.h
│   │   │   │   ├── jni.h
│   │   │   │   ├── mediacodec.h
│   │   │   │   ├── qsv.h
│   │   │   │   ├── vaapi.h
│   │   │   │   ├── vda.h
│   │   │   │   ├── vdpau.h
│   │   │   │   ├── version.h
│   │   │   │   ├── videotoolbox.h
│   │   │   │   ├── vorbis_parser.h
│   │   │   │   └── xvmc.h
│   │   │   ├── libavfilter/
│   │   │   │   ├── avfilter.h
│   │   │   │   ├── avfiltergraph.h
│   │   │   │   ├── buffersink.h
│   │   │   │   ├── buffersrc.h
│   │   │   │   └── version.h
│   │   │   ├── libavformat/
│   │   │   │   ├── avc.h
│   │   │   │   ├── avformat.h
│   │   │   │   ├── avio.h
│   │   │   │   ├── internal.h
│   │   │   │   ├── url.h
│   │   │   │   └── version.h
│   │   │   ├── libavutil/
│   │   │   │   ├── adler32.h
│   │   │   │   ├── aes.h
│   │   │   │   ├── aes_ctr.h
│   │   │   │   ├── application.h
│   │   │   │   ├── arm64/
│   │   │   │   │   ├── avconfig.h
│   │   │   │   │   └── ffversion.h
│   │   │   │   ├── armv7/
│   │   │   │   │   ├── avconfig.h
│   │   │   │   │   └── ffversion.h
│   │   │   │   ├── attributes.h
│   │   │   │   ├── audio_fifo.h
│   │   │   │   ├── avassert.h
│   │   │   │   ├── avconfig.h
│   │   │   │   ├── avstring.h
│   │   │   │   ├── avutil.h
│   │   │   │   ├── base64.h
│   │   │   │   ├── blowfish.h
│   │   │   │   ├── bprint.h
│   │   │   │   ├── bswap.h
│   │   │   │   ├── buffer.h
│   │   │   │   ├── camellia.h
│   │   │   │   ├── cast5.h
│   │   │   │   ├── channel_layout.h
│   │   │   │   ├── common.h
│   │   │   │   ├── cpu.h
│   │   │   │   ├── crc.h
│   │   │   │   ├── des.h
│   │   │   │   ├── dict.h
│   │   │   │   ├── display.h
│   │   │   │   ├── downmix_info.h
│   │   │   │   ├── error.h
│   │   │   │   ├── eval.h
│   │   │   │   ├── ffversion.h
│   │   │   │   ├── fifo.h
│   │   │   │   ├── file.h
│   │   │   │   ├── frame.h
│   │   │   │   ├── hash.h
│   │   │   │   ├── hmac.h
│   │   │   │   ├── hwcontext.h
│   │   │   │   ├── hwcontext_cuda.h
│   │   │   │   ├── hwcontext_dxva2.h
│   │   │   │   ├── hwcontext_qsv.h
│   │   │   │   ├── hwcontext_vaapi.h
│   │   │   │   ├── hwcontext_vdpau.h
│   │   │   │   ├── i386/
│   │   │   │   │   ├── avconfig.h
│   │   │   │   │   └── ffversion.h
│   │   │   │   ├── imgutils.h
│   │   │   │   ├── intfloat.h
│   │   │   │   ├── intreadwrite.h
│   │   │   │   ├── lfg.h
│   │   │   │   ├── log.h
│   │   │   │   ├── macros.h
│   │   │   │   ├── mastering_display_metadata.h
│   │   │   │   ├── mathematics.h
│   │   │   │   ├── md5.h
│   │   │   │   ├── mem.h
│   │   │   │   ├── motion_vector.h
│   │   │   │   ├── murmur3.h
│   │   │   │   ├── opt.h
│   │   │   │   ├── parseutils.h
│   │   │   │   ├── pixdesc.h
│   │   │   │   ├── pixelutils.h
│   │   │   │   ├── pixfmt.h
│   │   │   │   ├── random_seed.h
│   │   │   │   ├── rational.h
│   │   │   │   ├── rc4.h
│   │   │   │   ├── replaygain.h
│   │   │   │   ├── ripemd.h
│   │   │   │   ├── samplefmt.h
│   │   │   │   ├── sha.h
│   │   │   │   ├── sha512.h
│   │   │   │   ├── stereo3d.h
│   │   │   │   ├── tea.h
│   │   │   │   ├── thread.h
│   │   │   │   ├── threadmessage.h
│   │   │   │   ├── time.h
│   │   │   │   ├── timecode.h
│   │   │   │   ├── timestamp.h
│   │   │   │   ├── tree.h
│   │   │   │   ├── twofish.h
│   │   │   │   ├── version.h
│   │   │   │   ├── x86_64/
│   │   │   │   │   ├── avconfig.h
│   │   │   │   │   └── ffversion.h
│   │   │   │   └── xtea.h
│   │   │   ├── libffmpeg/
│   │   │   │   ├── arm64/
│   │   │   │   │   └── config.h
│   │   │   │   ├── armv7/
│   │   │   │   │   └── config.h
│   │   │   │   ├── config.h
│   │   │   │   ├── i386/
│   │   │   │   │   └── config.h
│   │   │   │   └── x86_64/
│   │   │   │       └── config.h
│   │   │   ├── libswresample/
│   │   │   │   ├── swresample.h
│   │   │   │   └── version.h
│   │   │   ├── libswscale/
│   │   │   │   ├── swscale.h
│   │   │   │   └── version.h
│   │   │   └── openssl/
│   │   │       ├── aes.h
│   │   │       ├── asn1.h
│   │   │       ├── asn1_mac.h
│   │   │       ├── asn1t.h
│   │   │       ├── bio.h
│   │   │       ├── blowfish.h
│   │   │       ├── bn.h
│   │   │       ├── buffer.h
│   │   │       ├── camellia.h
│   │   │       ├── cast.h
│   │   │       ├── cmac.h
│   │   │       ├── cms.h
│   │   │       ├── comp.h
│   │   │       ├── conf.h
│   │   │       ├── conf_api.h
│   │   │       ├── crypto.h
│   │   │       ├── des.h
│   │   │       ├── des_old.h
│   │   │       ├── dh.h
│   │   │       ├── dsa.h
│   │   │       ├── dso.h
│   │   │       ├── dtls1.h
│   │   │       ├── e_os2.h
│   │   │       ├── ebcdic.h
│   │   │       ├── ec.h
│   │   │       ├── ecdh.h
│   │   │       ├── ecdsa.h
│   │   │       ├── engine.h
│   │   │       ├── err.h
│   │   │       ├── evp.h
│   │   │       ├── hmac.h
│   │   │       ├── idea.h
│   │   │       ├── krb5_asn.h
│   │   │       ├── kssl.h
│   │   │       ├── lhash.h
│   │   │       ├── md4.h
│   │   │       ├── md5.h
│   │   │       ├── mdc2.h
│   │   │       ├── modes.h
│   │   │       ├── obj_mac.h
│   │   │       ├── objects.h
│   │   │       ├── ocsp.h
│   │   │       ├── opensslconf.h
│   │   │       ├── opensslv.h
│   │   │       ├── ossl_typ.h
│   │   │       ├── pem.h
│   │   │       ├── pem2.h
│   │   │       ├── pkcs12.h
│   │   │       ├── pkcs7.h
│   │   │       ├── pqueue.h
│   │   │       ├── rand.h
│   │   │       ├── rc2.h
│   │   │       ├── rc4.h
│   │   │       ├── ripemd.h
│   │   │       ├── rsa.h
│   │   │       ├── safestack.h
│   │   │       ├── seed.h
│   │   │       ├── sha.h
│   │   │       ├── srp.h
│   │   │       ├── srtp.h
│   │   │       ├── ssl.h
│   │   │       ├── ssl2.h
│   │   │       ├── ssl23.h
│   │   │       ├── ssl3.h
│   │   │       ├── stack.h
│   │   │       ├── symhacks.h
│   │   │       ├── tls1.h
│   │   │       ├── ts.h
│   │   │       ├── txt_db.h
│   │   │       ├── ui.h
│   │   │       ├── ui_compat.h
│   │   │       ├── whrlpool.h
│   │   │       ├── x509.h
│   │   │       ├── x509_vfy.h
│   │   │       └── x509v3.h
│   │   └── lib/
│   │       ├── libavcodec.a
│   │       ├── libavfilter.a
│   │       ├── libavformat.a
│   │       ├── libavutil.a
│   │       ├── libcrypto.a
│   │       ├── libssl.a
│   │       ├── libswresample.a
│   │       └── libswscale.a
│   └── kxmovie/
│       ├── KxAudioManager.h
│       ├── KxAudioManager.m
│       ├── KxLogger.h
│       ├── KxMovieDecoder.h
│       ├── KxMovieDecoder.m
│       ├── KxMovieGLView.h
│       ├── KxMovieGLView.m
│       ├── KxMovieViewController.h
│       ├── KxMovieViewController.m
│       └── kxmovie-Prefix.pch
├── LICENSE
├── MVideo/
│   ├── AppDelegate.h
│   ├── AppDelegate.m
│   ├── Assets.xcassets/
│   │   ├── AppIcon.appiconset/
│   │   │   └── Contents.json
│   │   └── Contents.json
│   ├── Base.lproj/
│   │   ├── LaunchScreen.storyboard
│   │   └── Main.storyboard
│   ├── Class/
│   │   ├── Controller/
│   │   │   ├── ListViewController.h
│   │   │   ├── ListViewController.m
│   │   │   ├── MHomeViewController.h
│   │   │   └── MHomeViewController.m
│   │   ├── Model/
│   │   │   ├── MMovieModel.h
│   │   │   └── MMovieModel.m
│   │   └── View/
│   │       ├── ListTableViewCell.h
│   │       └── ListTableViewCell.m
│   ├── Info.plist
│   ├── MVideo-Pre.pch
│   └── main.m
├── MVideo.xcodeproj/
│   ├── project.pbxproj
│   └── project.xcworkspace/
│       └── contents.xcworkspacedata
├── MVideo.xcworkspace/
│   └── contents.xcworkspacedata
├── Pods/
│   ├── Masonry/
│   │   ├── LICENSE
│   │   ├── Masonry/
│   │   │   ├── MASCompositeConstraint.h
│   │   │   ├── MASCompositeConstraint.m
│   │   │   ├── MASConstraint+Private.h
│   │   │   ├── MASConstraint.h
│   │   │   ├── MASConstraint.m
│   │   │   ├── MASConstraintMaker.h
│   │   │   ├── MASConstraintMaker.m
│   │   │   ├── MASLayoutConstraint.h
│   │   │   ├── MASLayoutConstraint.m
│   │   │   ├── MASUtilities.h
│   │   │   ├── MASViewAttribute.h
│   │   │   ├── MASViewAttribute.m
│   │   │   ├── MASViewConstraint.h
│   │   │   ├── MASViewConstraint.m
│   │   │   ├── Masonry.h
│   │   │   ├── NSArray+MASAdditions.h
│   │   │   ├── NSArray+MASAdditions.m
│   │   │   ├── NSArray+MASShorthandAdditions.h
│   │   │   ├── NSLayoutConstraint+MASDebugAdditions.h
│   │   │   ├── NSLayoutConstraint+MASDebugAdditions.m
│   │   │   ├── View+MASAdditions.h
│   │   │   ├── View+MASAdditions.m
│   │   │   ├── View+MASShorthandAdditions.h
│   │   │   ├── ViewController+MASAdditions.h
│   │   │   └── ViewController+MASAdditions.m
│   │   └── README.md
│   ├── Pods.xcodeproj/
│   │   └── project.pbxproj
│   └── Target Support Files/
│       ├── Masonry/
│       │   ├── Masonry-dummy.m
│       │   ├── Masonry-prefix.pch
│       │   └── Masonry.xcconfig
│       └── Pods-MVideo/
│           ├── Pods-MVideo-acknowledgements.markdown
│           ├── Pods-MVideo-acknowledgements.plist
│           ├── Pods-MVideo-dummy.m
│           ├── Pods-MVideo-frameworks.sh
│           ├── Pods-MVideo-resources.sh
│           ├── Pods-MVideo.debug.xcconfig
│           └── Pods-MVideo.release.xcconfig
├── README.md
├── archive.sh
└── podfile
Download .txt
SYMBOL INDEX (1004 symbols across 148 files)

FILE: 3rParty/FFmpeg/include/libavcodec/avcodec.h
  type AVCodecID (line 191) | enum AVCodecID {
  type AVCodecDescriptor (line 660) | typedef struct AVCodecDescriptor {
  type Motion_Est_ID (line 761) | enum Motion_Est_ID {
  type AVDiscard (line 778) | enum AVDiscard{
  type AVAudioServiceType (line 790) | enum AVAudioServiceType {
  type RcOverride (line 806) | typedef struct RcOverride{
  type AVPanScan (line 1282) | typedef struct AVPanScan{
  type AVCPBProperties (line 1311) | typedef struct AVCPBProperties {
  type AVPacketSideDataType (line 1362) | enum AVPacketSideDataType {
  type AVPacketSideData (line 1544) | typedef struct AVPacketSideData {
  type AVPacket (line 1578) | typedef struct AVPacket {
  type AVSideDataParamChangeFlags (line 1643) | enum AVSideDataParamChangeFlags {
  type AVCodecInternal (line 1653) | struct AVCodecInternal
  type AVFieldOrder (line 1655) | enum AVFieldOrder {
  type AVCodecContext (line 1677) | typedef struct AVCodecContext {
  type AVProfile (line 3589) | typedef struct AVProfile {
  type AVCodecDefault (line 3594) | typedef struct AVCodecDefault AVCodecDefault;
  type AVSubtitle (line 3596) | struct AVSubtitle
  type AVCodec (line 3601) | typedef struct AVCodec {
  type MpegEncContext (line 3715) | struct MpegEncContext
  type AVHWAccel (line 3721) | typedef struct AVHWAccel {
  type AVPicture (line 3890) | typedef struct AVPicture {
  type AVSubtitleType (line 3902) | enum AVSubtitleType {
  type AVSubtitleRect (line 3922) | typedef struct AVSubtitleRect {
  type AVSubtitle (line 3957) | typedef struct AVSubtitle {
  type AVCodecParameters (line 3973) | typedef struct AVCodecParameters {
  type AVPacketSideDataType (line 4483) | enum AVPacketSideDataType
  type AVPacketSideDataType (line 4499) | enum AVPacketSideDataType
  type AVPacketSideDataType (line 4510) | enum AVPacketSideDataType
  type AVPacketSideDataType (line 4521) | enum AVPacketSideDataType
  type AVPacketSideDataType (line 4528) | enum AVPacketSideDataType
  type AVCodecID (line 4636) | enum AVCodecID
  type AVChromaLocation (line 4696) | enum AVChromaLocation
  type AVChromaLocation (line 4707) | enum AVChromaLocation
  type AVPictureStructure (line 4975) | enum AVPictureStructure {
  type AVCodecParserContext (line 4982) | typedef struct AVCodecParserContext {
  type AVCodecParser (line 5149) | typedef struct AVCodecParser {
  type AVCodecID (line 5233) | enum AVCodecID
  type ReSampleContext (line 5342) | struct ReSampleContext
  type AVResampleContext (line 5343) | struct AVResampleContext
  type ReSampleContext (line 5345) | typedef struct ReSampleContext ReSampleContext;
  type AVSampleFormat (line 5366) | enum AVSampleFormat
  type AVSampleFormat (line 5367) | enum AVSampleFormat
  type AVResampleContext (line 5406) | struct AVResampleContext
  type AVResampleContext (line 5422) | struct AVResampleContext
  type AVResampleContext (line 5424) | struct AVResampleContext
  type AVPixelFormat (line 5441) | enum AVPixelFormat
  type AVPixelFormat (line 5454) | enum AVPixelFormat
  type AVPixelFormat (line 5460) | enum AVPixelFormat
  type AVPixelFormat (line 5468) | enum AVPixelFormat
  type AVPixelFormat (line 5475) | enum AVPixelFormat
  type AVPixelFormat (line 5482) | enum AVPixelFormat
  type AVPixelFormat (line 5488) | enum AVPixelFormat
  type AVPixelFormat (line 5527) | enum AVPixelFormat
  type AVPixelFormat (line 5534) | enum AVPixelFormat
  type AVPixelFormat (line 5539) | enum AVPixelFormat
  type AVPixelFormat (line 5539) | enum AVPixelFormat
  type AVPixelFormat (line 5559) | enum AVPixelFormat
  type AVPixelFormat (line 5559) | enum AVPixelFormat
  type AVPixelFormat (line 5560) | enum AVPixelFormat
  type AVPixelFormat (line 5566) | enum AVPixelFormat
  type AVPixelFormat (line 5566) | enum AVPixelFormat
  type AVPixelFormat (line 5566) | enum AVPixelFormat
  type AVPixelFormat (line 5567) | enum AVPixelFormat
  type AVPixelFormat (line 5570) | enum AVPixelFormat
  type AVPixelFormat (line 5570) | enum AVPixelFormat
  type AVPixelFormat (line 5571) | enum AVPixelFormat
  type AVPixelFormat (line 5573) | enum AVPixelFormat
  type AVCodecContext (line 5573) | struct AVCodecContext
  type AVPixelFormat (line 5573) | enum AVPixelFormat
  type AVCodecID (line 5620) | enum AVCodecID
  type AVSampleFormat (line 5650) | enum AVSampleFormat
  type AVCodecID (line 5670) | enum AVCodecID
  type AVCodecID (line 5678) | enum AVCodecID
  type AVSampleFormat (line 5678) | enum AVSampleFormat
  type AVCodecID (line 5688) | enum AVCodecID
  type AVBitStreamFilterContext (line 5707) | typedef struct AVBitStreamFilterContext {
  type AVBSFInternal (line 5720) | typedef struct AVBSFInternal AVBSFInternal;
  type AVBSFContext (line 5732) | typedef struct AVBSFContext {
  type AVBitStreamFilter (line 5778) | typedef struct AVBitStreamFilter {
  type AVBSFList (line 5994) | typedef struct AVBSFList AVBSFList;
  type AVLockOp (line 6147) | enum AVLockOp {
  type AVLockOp (line 6177) | enum AVLockOp
  type AVMediaType (line 6182) | enum AVMediaType
  type AVCodecID (line 6182) | enum AVCodecID
  type AVCodecID (line 6188) | enum AVCodecID
  type AVCodecID (line 6209) | enum AVCodecID

FILE: 3rParty/FFmpeg/include/libavcodec/avdct.h
  type AVDCT (line 29) | typedef struct AVDCT {

FILE: 3rParty/FFmpeg/include/libavcodec/avfft.h
  type FFTSample (line 35) | typedef float FFTSample;
  type FFTComplex (line 37) | typedef struct FFTComplex {
  type FFTContext (line 41) | typedef struct FFTContext FFTContext;
  type RDFTransformType (line 71) | enum RDFTransformType {
  type RDFTContext (line 78) | typedef struct RDFTContext RDFTContext;
  type RDFTransformType (line 85) | enum RDFTransformType
  type DCTContext (line 91) | typedef struct DCTContext DCTContext;
  type DCTTransformType (line 93) | enum DCTTransformType {
  type DCTTransformType (line 110) | enum DCTTransformType

FILE: 3rParty/FFmpeg/include/libavcodec/d3d11va.h
  type AVD3D11VAContext (line 59) | typedef struct AVD3D11VAContext {

FILE: 3rParty/FFmpeg/include/libavcodec/dirac.h
  type DiracParseCodes (line 57) | enum DiracParseCodes {
  type DiracVersionInfo (line 76) | typedef struct DiracVersionInfo {
  type AVDiracSeqHeader (line 81) | typedef struct AVDiracSeqHeader {

FILE: 3rParty/FFmpeg/include/libavcodec/dv_profile.h
  type AVDVProfile (line 39) | typedef struct AVDVProfile {
  type AVPixelFormat (line 75) | enum AVPixelFormat
  type AVPixelFormat (line 81) | enum AVPixelFormat

FILE: 3rParty/FFmpeg/include/libavcodec/dxva2.h
  type dxva_context (line 57) | struct dxva_context {

FILE: 3rParty/FFmpeg/include/libavcodec/mediacodec.h
  type AVMediaCodecContext (line 33) | typedef struct AVMediaCodecContext {
  type AVMediaCodecBuffer (line 73) | typedef struct MediaCodecBuffer AVMediaCodecBuffer;

FILE: 3rParty/FFmpeg/include/libavcodec/qsv.h
  type AVQSVContext (line 36) | typedef struct AVQSVContext {

FILE: 3rParty/FFmpeg/include/libavcodec/vaapi.h
  type vaapi_context (line 52) | struct vaapi_context {

FILE: 3rParty/FFmpeg/include/libavcodec/vda.h
  type vda_context (line 65) | struct vda_context {
  type vda_context (line 150) | struct vda_context
  type vda_context (line 155) | struct vda_context
  type AVVDAContext (line 163) | typedef struct AVVDAContext {

FILE: 3rParty/FFmpeg/include/libavcodec/vdpau.h
  type AVCodecContext (line 69) | struct AVCodecContext
  type AVFrame (line 70) | struct AVFrame
  type AVCodecContext (line 72) | struct AVCodecContext
  type AVFrame (line 72) | struct AVFrame
  type AVVDPAUContext (line 90) | typedef struct AVVDPAUContext {
  type vdpau_render_state (line 234) | struct vdpau_render_state {

FILE: 3rParty/FFmpeg/include/libavcodec/videotoolbox.h
  type AVVideotoolboxContext (line 46) | typedef struct AVVideotoolboxContext {

FILE: 3rParty/FFmpeg/include/libavcodec/vorbis_parser.h
  type AVVorbisParseContext (line 31) | typedef struct AVVorbisParseContext AVVorbisParseContext;

FILE: 3rParty/FFmpeg/include/libavcodec/xvmc.h
  function xvmc_pix_fmt (line 46) | struct attribute_deprecated xvmc_pix_fmt {

FILE: 3rParty/FFmpeg/include/libavfilter/avfilter.h
  type AVFilterContext (line 67) | typedef struct AVFilterContext AVFilterContext;
  type AVFilterLink (line 68) | typedef struct AVFilterLink    AVFilterLink;
  type AVFilterPad (line 69) | typedef struct AVFilterPad     AVFilterPad;
  type AVFilterFormats (line 70) | typedef struct AVFilterFormats AVFilterFormats;
  type AVMediaType (line 98) | enum AVMediaType
  type AVFilter (line 144) | typedef struct AVFilter {
  type AVFilterInternal (line 304) | typedef struct AVFilterInternal AVFilterInternal;
  type AVFilterContext (line 307) | struct AVFilterContext {
  type AVFilterLink (line 380) | struct AVFilterLink {
  type AVFilterGraphInternal (line 755) | typedef struct AVFilterGraphInternal AVFilterGraphInternal;
  type AVFilterGraph (line 786) | typedef struct AVFilterGraph {
  type AVFilterInOut (line 961) | typedef struct AVFilterInOut {

FILE: 3rParty/FFmpeg/include/libavfilter/buffersink.h
  type AVBufferSinkParams (line 65) | typedef struct {
  type AVABufferSinkParams (line 79) | typedef struct {

FILE: 3rParty/FFmpeg/include/libavfilter/buffersrc.h
  type AVBufferSrcParameters (line 73) | typedef struct AVBufferSrcParameters {

FILE: 3rParty/FFmpeg/include/libavformat/avformat.h
  type AVFormatContext (line 326) | struct AVFormatContext
  type AVDeviceInfoList (line 328) | struct AVDeviceInfoList
  type AVDeviceCapabilitiesQuery (line 329) | struct AVDeviceCapabilitiesQuery
  type AVFrac (line 448) | typedef struct AVFrac {
  type AVCodecTag (line 456) | struct AVCodecTag
  type AVProbeData (line 461) | typedef struct AVProbeData {
  type AVOutputFormat (line 514) | typedef struct AVOutputFormat {
  type AVInputFormat (line 650) | typedef struct AVInputFormat {
  type AVStreamParseType (line 804) | enum AVStreamParseType {
  type AVIndexEntry (line 815) | typedef struct AVIndexEntry {
  type AVStreamInternal (line 862) | typedef struct AVStreamInternal AVStreamInternal;
  type AVStream (line 885) | typedef struct AVStream {
  type AVCodecParserContext (line 1242) | struct AVCodecParserContext
  type AVProgram (line 1261) | typedef struct AVProgram {
  type AVChapter (line 1290) | typedef struct AVChapter {
  type AVFormatContext (line 1301) | struct AVFormatContext
  type AVFormatContext (line 1304) | struct AVFormatContext
  type AVDurationEstimationMethod (line 1311) | enum AVDurationEstimationMethod {
  type AVFormatInternal (line 1317) | typedef struct AVFormatInternal AVFormatInternal;
  type AVFormatContext (line 1333) | typedef struct AVFormatContext {
  type AVDurationEstimationMethod (line 1940) | enum AVDurationEstimationMethod
  type AVPacketList (line 1942) | typedef struct AVPacketList {
  type AVPacketSideDataType (line 2065) | enum AVPacketSideDataType
  type AVPacketSideDataType (line 2076) | enum AVPacketSideDataType
  type AVPacketSideDataType (line 2079) | enum AVPacketSideDataType
  type AVMediaType (line 2263) | enum AVMediaType
  type AVCodecID (line 2588) | enum AVCodecID
  type AVMediaType (line 2590) | enum AVMediaType
  type AVFormatContext (line 2607) | struct AVFormatContext
  type AVCodecID (line 2683) | enum AVCodecID
  type AVCodecTag (line 2683) | struct AVCodecTag
  type AVCodecTag (line 2693) | struct AVCodecTag
  type AVCodecID (line 2693) | enum AVCodecID
  type AVCodecTag (line 2704) | struct AVCodecTag
  type AVCodecID (line 2704) | enum AVCodecID
  type AVCodecID (line 2842) | enum AVCodecID
  type AVCodecTag (line 2860) | struct AVCodecTag
  type AVCodecTag (line 2864) | struct AVCodecTag
  type AVCodecTag (line 2868) | struct AVCodecTag
  type AVCodecTag (line 2872) | struct AVCodecTag
  type AVTimebaseSource (line 2942) | enum AVTimebaseSource {
  type AVTimebaseSource (line 2963) | enum AVTimebaseSource

FILE: 3rParty/FFmpeg/include/libavformat/avio.h
  type AVIOInterruptCB (line 50) | typedef struct AVIOInterruptCB {
  type AVIODirEntryType (line 58) | enum AVIODirEntryType {
  type AVIODirEntry (line 78) | typedef struct AVIODirEntry {
  type AVIODirContext (line 95) | typedef struct AVIODirContext {
  type AVIODataMarkerType (line 103) | enum AVIODataMarkerType {
  type AVIOContext (line 147) | typedef struct AVIOContext {
  type AVIODataMarkerType (line 478) | enum AVIODataMarkerType
  function av_always_inline (line 511) | static av_always_inline int64_t avio_tell(AVIOContext *s)
  type AVBPrint (line 762) | struct AVBPrint
  type AVBPrint (line 770) | struct AVBPrint

FILE: 3rParty/FFmpeg/include/libavformat/internal.h
  type AVCodecTag (line 44) | typedef struct AVCodecTag {
  type CodecMime (line 49) | typedef struct CodecMime{
  type FFFrac (line 61) | typedef struct FFFrac {
  type AVFormatInternal (line 66) | struct AVFormatInternal {
  type AVStreamInternal (line 145) | struct AVStreamInternal {
  type tm (line 197) | struct tm
  type tm (line 197) | struct tm
  type AVCodecID (line 356) | enum AVCodecID
  type AVFormatContext (line 379) | struct AVFormatContext
  type AVFormatContext (line 392) | struct AVFormatContext
  type AVCodecID (line 458) | enum AVCodecID
  type AVCodecID (line 460) | enum AVCodecID
  type AVCodecID (line 475) | enum AVCodecID
  type AVChromaLocation (line 489) | enum AVChromaLocation
  function ff_rename (line 524) | static inline int ff_rename(const char *oldpath, const char *newpath, vo...
  type AVWriteUncodedFrameFlags (line 566) | enum AVWriteUncodedFrameFlags {
  type AVFormatContext (line 581) | struct AVFormatContext
  type AVBPrint (line 656) | struct AVBPrint

FILE: 3rParty/FFmpeg/include/libavformat/url.h
  type URLContext (line 38) | typedef struct URLContext {
  type URLProtocol (line 53) | typedef struct URLProtocol {

FILE: 3rParty/FFmpeg/include/libavutil/aes.h
  type AVAES (line 37) | struct AVAES
  type AVAES (line 42) | struct AVAES
  type AVAES (line 49) | struct AVAES
  type AVAES (line 59) | struct AVAES

FILE: 3rParty/FFmpeg/include/libavutil/aes_ctr.h
  type AVAESCTR (line 33) | struct AVAESCTR
  type AVAESCTR (line 38) | struct AVAESCTR
  type AVAESCTR (line 44) | struct AVAESCTR
  type AVAESCTR (line 49) | struct AVAESCTR
  type AVAESCTR (line 57) | struct AVAESCTR
  type AVAESCTR (line 62) | struct AVAESCTR
  type AVAESCTR (line 67) | struct AVAESCTR
  type AVAESCTR (line 72) | struct AVAESCTR
  type AVAESCTR (line 77) | struct AVAESCTR

FILE: 3rParty/FFmpeg/include/libavutil/application.h
  type AVAppIOControl (line 43) | typedef struct AVAppIOControl {
  type AVAppTcpIOControl (line 53) | typedef struct AVAppTcpIOControl {
  type AVAppAsyncStatistic (line 61) | typedef struct AVAppAsyncStatistic {
  type AVAppAsyncReadSpeed (line 68) | typedef struct AVAppAsyncReadSpeed {
  type AVAppHttpEvent (line 75) | typedef struct AVAppHttpEvent
  type AVAppIOTraffic (line 84) | typedef struct AVAppIOTraffic
  type AVApplicationContext (line 90) | typedef struct AVApplicationContext AVApplicationContext;
  type AVApplicationContext (line 91) | struct AVApplicationContext {

FILE: 3rParty/FFmpeg/include/libavutil/audio_fifo.h
  type AVAudioFifo (line 49) | typedef struct AVAudioFifo AVAudioFifo;
  type AVSampleFormat (line 66) | enum AVSampleFormat

FILE: 3rParty/FFmpeg/include/libavutil/avstring.h
  function av_strnlen (line 140) | static inline size_t av_strnlen(const char *s, size_t len)
  function av_const (line 206) | static inline av_const int av_isdigit(int c)
  function av_const (line 214) | static inline av_const int av_isgraph(int c)
  function av_const (line 222) | static inline av_const int av_isspace(int c)
  function av_const (line 231) | static inline av_const int av_toupper(int c)
  function av_const (line 241) | static inline av_const int av_tolower(int c)
  function av_const (line 251) | static inline av_const int av_isxdigit(int c)
  type AVEscapeMode (line 308) | enum AVEscapeMode {
  type AVEscapeMode (line 349) | enum AVEscapeMode

FILE: 3rParty/FFmpeg/include/libavutil/avutil.h
  type AVMediaType (line 193) | enum AVMediaType {
  type AVMediaType (line 207) | enum AVMediaType
  type AVPictureType (line 266) | enum AVPictureType {
  type AVPictureType (line 284) | enum AVPictureType

FILE: 3rParty/FFmpeg/include/libavutil/blowfish.h
  type AVBlowfish (line 35) | typedef struct AVBlowfish {
  type AVBlowfish (line 52) | struct AVBlowfish
  type AVBlowfish (line 62) | struct AVBlowfish
  type AVBlowfish (line 75) | struct AVBlowfish

FILE: 3rParty/FFmpeg/include/libavutil/bprint.h
  type tm (line 148) | struct tm
  type tm (line 160) | struct tm
  function av_bprint_is_complete (line 185) | static inline int av_bprint_is_complete(const AVBPrint *buf)
  type AVEscapeMode (line 217) | enum AVEscapeMode

FILE: 3rParty/FFmpeg/include/libavutil/bswap.h
  function av_bswap16 (line 58) | uint16_t av_bswap16(uint16_t x)
  function av_bswap32 (line 66) | uint32_t av_bswap32(uint32_t x)
  function av_bswap64 (line 73) | static inline uint64_t av_const av_bswap64(uint64_t x)

FILE: 3rParty/FFmpeg/include/libavutil/buffer.h
  type AVBuffer (line 73) | typedef struct AVBuffer AVBuffer;
  type AVBufferRef (line 81) | typedef struct AVBufferRef {
  type AVBufferPool (line 238) | typedef struct AVBufferPool AVBufferPool;

FILE: 3rParty/FFmpeg/include/libavutil/camellia.h
  type AVCAMELLIA (line 38) | struct AVCAMELLIA
  type AVCAMELLIA (line 44) | struct AVCAMELLIA
  type AVCAMELLIA (line 53) | struct AVCAMELLIA
  type AVCAMELLIA (line 65) | struct AVCAMELLIA

FILE: 3rParty/FFmpeg/include/libavutil/cast5.h
  type AVCAST5 (line 38) | struct AVCAST5
  type AVCAST5 (line 44) | struct AVCAST5
  type AVCAST5 (line 53) | struct AVCAST5
  type AVCAST5 (line 64) | struct AVCAST5
  type AVCAST5 (line 76) | struct AVCAST5

FILE: 3rParty/FFmpeg/include/libavutil/channel_layout.h
  type AVMatrixEncoding (line 114) | enum AVMatrixEncoding {
  type AVBPrint (line 158) | struct AVBPrint
  type AVBPrint (line 162) | struct AVBPrint

FILE: 3rParty/FFmpeg/include/libavutil/common.h
  function av_clip_c (line 127) | int av_clip_c(int a, int amin, int amax)
  function av_clip64_c (line 144) | int64_t av_clip64_c(int64_t a, int64_t amin, int64_t amax)
  function av_clip_uint8_c (line 159) | uint8_t av_clip_uint8_c(int a)
  function av_clip_int8_c (line 170) | int8_t av_clip_int8_c(int a)
  function av_clip_uint16_c (line 181) | uint16_t av_clip_uint16_c(int a)
  function av_clip_int16_c (line 192) | int16_t av_clip_int16_c(int a)
  function av_clipl_int32_c (line 203) | int32_t av_clipl_int32_c(int64_t a)
  function av_clip_intp2_c (line 215) | int av_clip_intp2_c(int a, int p)
  function av_clip_uintp2_c (line 229) | unsigned av_clip_uintp2_c(int a, int p)
  function av_mod_uintp2_c (line 241) | unsigned av_mod_uintp2_c(unsigned a, unsigned p)
  function av_always_inline (line 253) | static av_always_inline int av_sat_add32_c(int a, int b)
  function av_always_inline (line 265) | static av_always_inline int av_sat_dadd32_c(int a, int b)
  function av_clipf_c (line 277) | float av_clipf_c(float a, float amin, float amax)
  function av_clipd_c (line 294) | double av_clipd_c(double a, double amin, double amax)
  function av_ceil_log2_c (line 308) | int av_ceil_log2_c(int x)
  function av_popcount_c (line 318) | int av_popcount_c(uint32_t x)
  function av_popcount64_c (line 332) | int av_popcount64_c(uint64_t x)
  function av_parity_c (line 337) | int av_parity_c(uint32_t v)

FILE: 3rParty/FFmpeg/include/libavutil/crc.h
  type AVCRC (line 47) | typedef uint32_t AVCRC;
  type AVCRCId (line 49) | typedef enum {

FILE: 3rParty/FFmpeg/include/libavutil/des.h
  type AVDES (line 33) | typedef struct AVDES {
  type AVDES (line 50) | struct AVDES
  type AVDES (line 62) | struct AVDES
  type AVDES (line 71) | struct AVDES

FILE: 3rParty/FFmpeg/include/libavutil/dict.h
  type AVDictionaryEntry (line 81) | typedef struct AVDictionaryEntry {
  type AVDictionary (line 86) | typedef struct AVDictionary AVDictionary;

FILE: 3rParty/FFmpeg/include/libavutil/downmix_info.h
  type AVDownmixType (line 44) | enum AVDownmixType {
  type AVDownmixInfo (line 58) | typedef struct AVDownmixInfo {

FILE: 3rParty/FFmpeg/include/libavutil/eval.h
  type AVExpr (line 31) | typedef struct AVExpr AVExpr;

FILE: 3rParty/FFmpeg/include/libavutil/fifo.h
  type AVFifoBuffer (line 31) | typedef struct AVFifoBuffer {

FILE: 3rParty/FFmpeg/include/libavutil/frame.h
  type AVFrameSideDataType (line 47) | enum AVFrameSideDataType {
  type AVActiveFormatDescription (line 126) | enum AVActiveFormatDescription {
  type AVFrameSideData (line 143) | typedef struct AVFrameSideData {
  type AVFrame (line 184) | typedef struct AVFrame {
  type AVColorSpace (line 565) | enum AVColorSpace
  type AVColorSpace (line 566) | enum AVColorSpace
  type AVColorRange (line 567) | enum AVColorRange
  type AVColorRange (line 568) | enum AVColorRange
  type AVColorSpace (line 574) | enum AVColorSpace
  type AVFrameSideDataType (line 730) | enum AVFrameSideDataType
  type AVFrameSideDataType (line 738) | enum AVFrameSideDataType
  type AVFrameSideDataType (line 744) | enum AVFrameSideDataType
  type AVFrameSideDataType (line 749) | enum AVFrameSideDataType

FILE: 3rParty/FFmpeg/include/libavutil/hash.h
  type AVHashContext (line 114) | struct AVHashContext
  type AVHashContext (line 124) | struct AVHashContext
  type AVHashContext (line 139) | struct AVHashContext
  type AVHashContext (line 166) | struct AVHashContext
  type AVHashContext (line 173) | struct AVHashContext
  type AVHashContext (line 182) | struct AVHashContext
  type AVHashContext (line 198) | struct AVHashContext
  type AVHashContext (line 213) | struct AVHashContext
  type AVHashContext (line 231) | struct AVHashContext
  type AVHashContext (line 249) | struct AVHashContext
  type AVHashContext (line 256) | struct AVHashContext

FILE: 3rParty/FFmpeg/include/libavutil/hmac.h
  type AVHMACType (line 33) | enum AVHMACType {
  type AVHMAC (line 42) | typedef struct AVHMAC AVHMAC;
  type AVHMACType (line 48) | enum AVHMACType

FILE: 3rParty/FFmpeg/include/libavutil/hwcontext.h
  type AVHWDeviceType (line 27) | enum AVHWDeviceType {
  type AVHWDeviceInternal (line 35) | typedef struct AVHWDeviceInternal AVHWDeviceInternal;
  type AVHWDeviceContext (line 54) | typedef struct AVHWDeviceContext {
  type AVHWFramesInternal (line 105) | typedef struct AVHWFramesInternal AVHWFramesInternal;
  type AVHWFramesContext (line 117) | typedef struct AVHWFramesContext {
  type AVHWDeviceType (line 233) | enum AVHWDeviceType
  type AVHWDeviceType (line 270) | enum AVHWDeviceType
  type AVHWFrameTransferDirection (line 328) | enum AVHWFrameTransferDirection {
  type AVHWFrameTransferDirection (line 356) | enum AVHWFrameTransferDirection
  type AVPixelFormat (line 357) | enum AVPixelFormat
  type AVHWFramesConstraints (line 366) | typedef struct AVHWFramesConstraints {

FILE: 3rParty/FFmpeg/include/libavutil/hwcontext_cuda.h
  type AVCUDADeviceContext (line 38) | typedef struct AVCUDADeviceContext {

FILE: 3rParty/FFmpeg/include/libavutil/hwcontext_dxva2.h
  type AVDXVA2DeviceContext (line 39) | typedef struct AVDXVA2DeviceContext {
  type AVDXVA2FramesContext (line 46) | typedef struct AVDXVA2FramesContext {

FILE: 3rParty/FFmpeg/include/libavutil/hwcontext_qsv.h
  type AVQSVDeviceContext (line 35) | typedef struct AVQSVDeviceContext {
  type AVQSVFramesContext (line 42) | typedef struct AVQSVFramesContext {

FILE: 3rParty/FFmpeg/include/libavutil/hwcontext_vaapi.h
  type AVVAAPIDeviceContext (line 41) | typedef struct AVVAAPIDeviceContext {
  type AVVAAPIFramesContext (line 53) | typedef struct AVVAAPIFramesContext {
  type AVVAAPIHWConfig (line 75) | typedef struct AVVAAPIHWConfig {

FILE: 3rParty/FFmpeg/include/libavutil/hwcontext_vdpau.h
  type AVVDPAUDeviceContext (line 35) | typedef struct AVVDPAUDeviceContext {

FILE: 3rParty/FFmpeg/include/libavutil/imgutils.h
  type AVPixelFormat (line 59) | enum AVPixelFormat
  type AVPixelFormat (line 68) | enum AVPixelFormat
  type AVPixelFormat (line 81) | enum AVPixelFormat
  type AVPixelFormat (line 95) | enum AVPixelFormat
  type AVPixelFormat (line 121) | enum AVPixelFormat
  type AVPixelFormat (line 151) | enum AVPixelFormat
  type AVPixelFormat (line 159) | enum AVPixelFormat
  type AVPixelFormat (line 180) | enum AVPixelFormat

FILE: 3rParty/FFmpeg/include/libavutil/intfloat.h
  function av_always_inline (line 40) | static av_always_inline float av_int2float(uint32_t i)
  function av_always_inline (line 50) | static av_always_inline uint32_t av_float2int(float f)
  function av_always_inline (line 60) | static av_always_inline double av_int2double(uint64_t i)
  function av_always_inline (line 70) | static av_always_inline uint64_t av_double2int(double f)

FILE: 3rParty/FFmpeg/include/libavutil/intreadwrite.h
  type av_alias64 (line 27) | typedef union {
  type av_alias32 (line 36) | typedef union {
  type av_alias16 (line 43) | typedef union {

FILE: 3rParty/FFmpeg/include/libavutil/lfg.h
  type AVLFG (line 25) | typedef struct AVLFG {
  function av_lfg_get (line 38) | static inline unsigned int av_lfg_get(AVLFG *c){
  function av_mlfg_get (line 48) | static inline unsigned int av_mlfg_get(AVLFG *c){

FILE: 3rParty/FFmpeg/include/libavutil/log.h
  type AVClassCategory (line 29) | typedef enum {
  type AVOptionRanges (line 60) | struct AVOptionRanges
  type AVClass (line 67) | typedef struct AVClass {

FILE: 3rParty/FFmpeg/include/libavutil/mastering_display_metadata.h
  type AVMasteringDisplayMetadata (line 38) | typedef struct AVMasteringDisplayMetadata {

FILE: 3rParty/FFmpeg/include/libavutil/mathematics.h
  type AVRounding (line 79) | enum AVRounding {
  type AVRounding (line 140) | enum AVRounding
  type AVRounding (line 161) | enum AVRounding

FILE: 3rParty/FFmpeg/include/libavutil/md5.h
  type AVMD5 (line 45) | struct AVMD5
  type AVMD5 (line 50) | struct AVMD5
  type AVMD5 (line 57) | struct AVMD5
  type AVMD5 (line 66) | struct AVMD5
  type AVMD5 (line 74) | struct AVMD5

FILE: 3rParty/FFmpeg/include/libavutil/mem.h
  function av_size_mult (line 665) | static inline int av_size_mult(size_t a, size_t b, size_t *r)

FILE: 3rParty/FFmpeg/include/libavutil/motion_vector.h
  type AVMotionVector (line 24) | typedef struct AVMotionVector {

FILE: 3rParty/FFmpeg/include/libavutil/murmur3.h
  type AVMurMur3 (line 66) | struct AVMurMur3
  type AVMurMur3 (line 78) | struct AVMurMur3
  type AVMurMur3 (line 91) | struct AVMurMur3
  type AVMurMur3 (line 100) | struct AVMurMur3
  type AVMurMur3 (line 108) | struct AVMurMur3

FILE: 3rParty/FFmpeg/include/libavutil/opt.h
  type AVOptionType (line 221) | enum AVOptionType{
  type AVOption (line 245) | typedef struct AVOption {
  type AVOptionRange (line 306) | typedef struct AVOptionRange {
  type AVOptionRanges (line 329) | typedef struct AVOptionRanges {
  type AVDictionary (line 479) | struct AVDictionary
  type AVDictionary (line 497) | struct AVDictionary
  type AVPixelFormat (line 687) | enum AVPixelFormat
  type AVSampleFormat (line 688) | enum AVSampleFormat
  type AVPixelFormat (line 741) | enum AVPixelFormat
  type AVSampleFormat (line 742) | enum AVSampleFormat

FILE: 3rParty/FFmpeg/include/libavutil/parseutils.h
  type tm (line 186) | struct tm
  type tm (line 191) | struct tm

FILE: 3rParty/FFmpeg/include/libavutil/pixdesc.h
  type AVComponentDescriptor (line 31) | typedef struct AVComponentDescriptor {
  type AVPixFmtDescriptor (line 81) | typedef struct AVPixFmtDescriptor {
  type AVPixelFormat (line 196) | enum AVPixelFormat
  type AVPixelFormat (line 211) | enum AVPixelFormat
  type AVPixelFormat (line 228) | enum AVPixelFormat
  type AVPixelFormat (line 235) | enum AVPixelFormat
  type AVColorRange (line 240) | enum AVColorRange
  type AVColorPrimaries (line 245) | enum AVColorPrimaries
  type AVColorTransferCharacteristic (line 250) | enum AVColorTransferCharacteristic
  type AVColorSpace (line 255) | enum AVColorSpace
  type AVChromaLocation (line 260) | enum AVChromaLocation
  type AVPixelFormat (line 273) | enum AVPixelFormat
  type AVPixelFormat (line 281) | enum AVPixelFormat
  type AVPixelFormat (line 294) | enum AVPixelFormat
  type AVPixelFormat (line 342) | enum AVPixelFormat
  type AVPixelFormat (line 342) | enum AVPixelFormat
  type AVPixelFormat (line 369) | enum AVPixelFormat
  type AVPixelFormat (line 370) | enum AVPixelFormat
  type AVPixelFormat (line 391) | enum AVPixelFormat
  type AVPixelFormat (line 391) | enum AVPixelFormat
  type AVPixelFormat (line 391) | enum AVPixelFormat
  type AVPixelFormat (line 392) | enum AVPixelFormat

FILE: 3rParty/FFmpeg/include/libavutil/pixfmt.h
  type AVPixelFormat (line 60) | enum AVPixelFormat {
  type AVColorPrimaries (line 389) | enum AVColorPrimaries {
  type AVColorTransferCharacteristic (line 410) | enum AVColorTransferCharacteristic {
  type AVColorSpace (line 436) | enum AVColorSpace {
  type AVColorRange (line 457) | enum AVColorRange {
  type AVChromaLocation (line 479) | enum AVChromaLocation {

FILE: 3rParty/FFmpeg/include/libavutil/rational.h
  type AVRational (line 58) | typedef struct AVRational{
  function AVRational (line 71) | static inline AVRational av_make_q(int num, int den)
  function av_cmp_q (line 89) | static inline int av_cmp_q(AVRational a, AVRational b){
  function av_q2d (line 104) | static inline double av_q2d(AVRational a){
  function av_always_inline (line 159) | static av_always_inline AVRational av_inv_q(AVRational q)

FILE: 3rParty/FFmpeg/include/libavutil/rc4.h
  type AVRC4 (line 32) | typedef struct AVRC4 {
  type AVRC4 (line 49) | struct AVRC4
  type AVRC4 (line 60) | struct AVRC4

FILE: 3rParty/FFmpeg/include/libavutil/replaygain.h
  type AVReplayGain (line 29) | typedef struct AVReplayGain {

FILE: 3rParty/FFmpeg/include/libavutil/ripemd.h
  type AVRIPEMD (line 46) | struct AVRIPEMD
  type AVRIPEMD (line 51) | struct AVRIPEMD
  type AVRIPEMD (line 60) | struct AVRIPEMD
  type AVRIPEMD (line 69) | struct AVRIPEMD
  type AVRIPEMD (line 77) | struct AVRIPEMD

FILE: 3rParty/FFmpeg/include/libavutil/samplefmt.h
  type AVSampleFormat (line 58) | enum AVSampleFormat {
  type AVSampleFormat (line 81) | enum AVSampleFormat
  type AVSampleFormat (line 87) | enum AVSampleFormat
  type AVSampleFormat (line 95) | enum AVSampleFormat
  type AVSampleFormat (line 95) | enum AVSampleFormat
  type AVSampleFormat (line 106) | enum AVSampleFormat
  type AVSampleFormat (line 106) | enum AVSampleFormat
  type AVSampleFormat (line 117) | enum AVSampleFormat
  type AVSampleFormat (line 117) | enum AVSampleFormat
  type AVSampleFormat (line 131) | enum AVSampleFormat
  type AVSampleFormat (line 140) | enum AVSampleFormat
  type AVSampleFormat (line 148) | enum AVSampleFormat
  type AVSampleFormat (line 161) | enum AVSampleFormat
  type AVSampleFormat (line 205) | enum AVSampleFormat
  type AVSampleFormat (line 227) | enum AVSampleFormat
  type AVSampleFormat (line 239) | enum AVSampleFormat
  type AVSampleFormat (line 254) | enum AVSampleFormat
  type AVSampleFormat (line 266) | enum AVSampleFormat

FILE: 3rParty/FFmpeg/include/libavutil/sha.h
  type AVSHA (line 53) | struct AVSHA
  type AVSHA (line 58) | struct AVSHA
  type AVSHA (line 67) | struct AVSHA
  type AVSHA (line 76) | struct AVSHA
  type AVSHA (line 84) | struct AVSHA

FILE: 3rParty/FFmpeg/include/libavutil/sha512.h
  type AVSHA512 (line 55) | struct AVSHA512
  type AVSHA512 (line 60) | struct AVSHA512
  type AVSHA512 (line 69) | struct AVSHA512
  type AVSHA512 (line 78) | struct AVSHA512
  type AVSHA512 (line 86) | struct AVSHA512

FILE: 3rParty/FFmpeg/include/libavutil/stereo3d.h
  type AVStereo3DType (line 31) | enum AVStereo3DType {
  type AVStereo3D (line 123) | typedef struct AVStereo3D {

FILE: 3rParty/FFmpeg/include/libavutil/tea.h
  type AVTEA (line 37) | struct AVTEA
  type AVTEA (line 43) | struct AVTEA
  type AVTEA (line 52) | struct AVTEA
  type AVTEA (line 64) | struct AVTEA

FILE: 3rParty/FFmpeg/include/libavutil/thread.h
  function strict_pthread_join (line 52) | static inline int strict_pthread_join(pthread_t thread, void **value_ptr)
  function strict_pthread_mutex_init (line 57) | static inline int strict_pthread_mutex_init(pthread_mutex_t *mutex, cons...
  function strict_pthread_mutex_destroy (line 71) | static inline int strict_pthread_mutex_destroy(pthread_mutex_t *mutex)
  function strict_pthread_mutex_lock (line 76) | static inline int strict_pthread_mutex_lock(pthread_mutex_t *mutex)
  function strict_pthread_mutex_unlock (line 81) | static inline int strict_pthread_mutex_unlock(pthread_mutex_t *mutex)
  function strict_pthread_cond_init (line 86) | static inline int strict_pthread_cond_init(pthread_cond_t *cond, const p...
  function strict_pthread_cond_destroy (line 91) | static inline int strict_pthread_cond_destroy(pthread_cond_t *cond)
  function strict_pthread_cond_signal (line 96) | static inline int strict_pthread_cond_signal(pthread_cond_t *cond)
  function strict_pthread_cond_broadcast (line 101) | static inline int strict_pthread_cond_broadcast(pthread_cond_t *cond)
  function strict_pthread_cond_wait (line 106) | static inline int strict_pthread_cond_wait(pthread_cond_t *cond, pthread...
  function strict_pthread_once (line 111) | static inline int strict_pthread_once(pthread_once_t *once_control, void...
  function ff_thread_once (line 161) | static inline int ff_thread_once(char *control, void (*routine)(void))

FILE: 3rParty/FFmpeg/include/libavutil/threadmessage.h
  type AVThreadMessageQueue (line 22) | typedef struct AVThreadMessageQueue AVThreadMessageQueue;
  type AVThreadMessageFlags (line 24) | typedef enum AVThreadMessageFlags {

FILE: 3rParty/FFmpeg/include/libavutil/timecode.h
  type AVTimecodeFlag (line 35) | enum AVTimecodeFlag {
  type AVTimecode (line 41) | typedef struct {

FILE: 3rParty/FFmpeg/include/libavutil/tree.h
  type AVTreeNode (line 45) | struct AVTreeNode
  type AVTreeNode (line 51) | struct AVTreeNode
  type AVTreeNode (line 67) | struct AVTreeNode
  type AVTreeNode (line 114) | struct AVTreeNode
  type AVTreeNode (line 116) | struct AVTreeNode
  type AVTreeNode (line 118) | struct AVTreeNode
  type AVTreeNode (line 130) | struct AVTreeNode

FILE: 3rParty/FFmpeg/include/libavutil/twofish.h
  type AVTWOFISH (line 38) | struct AVTWOFISH
  type AVTWOFISH (line 44) | struct AVTWOFISH
  type AVTWOFISH (line 53) | struct AVTWOFISH
  type AVTWOFISH (line 65) | struct AVTWOFISH

FILE: 3rParty/FFmpeg/include/libavutil/xtea.h
  type AVXTEA (line 35) | typedef struct AVXTEA {
  type AVXTEA (line 51) | struct AVXTEA
  type AVXTEA (line 60) | struct AVXTEA
  type AVXTEA (line 73) | struct AVXTEA
  type AVXTEA (line 87) | struct AVXTEA

FILE: 3rParty/FFmpeg/include/libswresample/swresample.h
  type SwrDitherType (line 145) | enum SwrDitherType {
  type SwrEngine (line 163) | enum SwrEngine {
  type SwrFilterType (line 170) | enum SwrFilterType {
  type SwrContext (line 186) | typedef struct SwrContext SwrContext;
  type SwrContext (line 211) | struct SwrContext
  type SwrContext (line 223) | struct SwrContext
  type SwrContext (line 232) | struct SwrContext
  type SwrContext (line 254) | struct SwrContext
  type SwrContext (line 254) | struct SwrContext
  type AVSampleFormat (line 255) | enum AVSampleFormat
  type AVSampleFormat (line 256) | enum AVSampleFormat
  type SwrContext (line 271) | struct SwrContext
  type SwrContext (line 283) | struct SwrContext
  type SwrContext (line 310) | struct SwrContext
  type SwrContext (line 330) | struct SwrContext
  type SwrContext (line 357) | struct SwrContext
  type SwrContext (line 367) | struct SwrContext
  type AVMatrixEncoding (line 396) | enum AVMatrixEncoding
  type SwrContext (line 408) | struct SwrContext
  type SwrContext (line 428) | struct SwrContext
  type SwrContext (line 441) | struct SwrContext
  type SwrContext (line 467) | struct SwrContext
  type SwrContext (line 485) | struct SwrContext

FILE: 3rParty/FFmpeg/include/libswscale/swscale.h
  type SwsVector (line 109) | typedef struct SwsVector {
  type SwsFilter (line 115) | typedef struct SwsFilter {
  type SwsContext (line 122) | struct SwsContext
  type AVPixelFormat (line 128) | enum AVPixelFormat
  type AVPixelFormat (line 134) | enum AVPixelFormat
  type AVPixelFormat (line 141) | enum AVPixelFormat
  type SwsContext (line 148) | struct SwsContext
  type SwsContext (line 157) | struct SwsContext
  type SwsContext (line 163) | struct SwsContext
  type SwsContext (line 186) | struct SwsContext
  type AVPixelFormat (line 186) | enum AVPixelFormat
  type AVPixelFormat (line 187) | enum AVPixelFormat
  type SwsContext (line 217) | struct SwsContext
  type SwsContext (line 231) | struct SwsContext
  type SwsContext (line 238) | struct SwsContext
  type SwsContext (line 294) | struct SwsContext
  type SwsContext (line 294) | struct SwsContext
  type AVPixelFormat (line 295) | enum AVPixelFormat
  type AVPixelFormat (line 296) | enum AVPixelFormat

FILE: 3rParty/FFmpeg/include/openssl/aes.h
  type aes_key_st (line 78) | struct aes_key_st {
  type AES_KEY (line 86) | typedef struct aes_key_st AES_KEY;

FILE: 3rParty/FFmpeg/include/openssl/asn1.h
  type X509_algor_st (line 161) | struct X509_algor_st
  type ASN1_CTX (line 172) | typedef struct asn1_ctx_st {
  type ASN1_const_CTX (line 187) | typedef struct asn1_const_ctx_st {
  type asn1_object_st (line 210) | struct asn1_object_st {
  type asn1_string_st (line 239) | struct asn1_string_st {
  type ASN1_ENCODING (line 257) | typedef struct ASN1_ENCODING_st {
  type ASN1_STRING_TABLE (line 272) | typedef struct asn1_string_table_st {
  type ASN1_TEMPLATE (line 296) | typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE;
  type ASN1_TLC (line 297) | typedef struct ASN1_TLC_st ASN1_TLC;
  type ASN1_VALUE (line 299) | typedef struct ASN1_VALUE_st ASN1_VALUE;
  type ASN1_ITEM (line 404) | typedef const ASN1_ITEM ASN1_ITEM_EXP;
  type ASN1_ITEM (line 425) | typedef const ASN1_ITEM *ASN1_ITEM_EXP (void);
  function DECLARE_ASN1_SET_OF (line 519) | DECLARE_STACK_OF(ASN1_INTEGER)
  function DECLARE_ASN1_SET_OF (line 555) | DECLARE_STACK_OF(ASN1_TYPE)

FILE: 3rParty/FFmpeg/include/openssl/asn1t.h
  type ASN1_TEMPLATE_st (line 443) | struct ASN1_TEMPLATE_st {
  type ASN1_ADB_TABLE (line 458) | typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE;
  type ASN1_ADB (line 459) | typedef struct ASN1_ADB_st ASN1_ADB;
  type ASN1_ADB_st (line 461) | struct ASN1_ADB_st {
  type ASN1_ADB_TABLE_st (line 471) | struct ASN1_ADB_TABLE_st {
  type ASN1_ITEM_st (line 563) | struct ASN1_ITEM_st {
  type ASN1_TLC_st (line 641) | struct ASN1_TLC_st {
  type ASN1_VALUE (line 652) | typedef ASN1_VALUE *ASN1_new_func(void);
  type ASN1_VALUE (line 654) | typedef ASN1_VALUE *ASN1_d2i_func(ASN1_VALUE **a, const unsigned char **in,
  type ASN1_COMPAT_FUNCS (line 680) | typedef struct ASN1_COMPAT_FUNCS_st {
  type ASN1_EXTERN_FUNCS (line 687) | typedef struct ASN1_EXTERN_FUNCS_st {
  type ASN1_PRIMITIVE_FUNCS (line 697) | typedef struct ASN1_PRIMITIVE_FUNCS_st {
  type ASN1_AUX (line 724) | typedef struct ASN1_AUX_st {
  type ASN1_PRINT_ARG (line 734) | typedef struct ASN1_PRINT_ARG_st {
  type ASN1_STREAM_ARG (line 741) | typedef struct ASN1_STREAM_ARG_st {

FILE: 3rParty/FFmpeg/include/openssl/bio.h
  type BIO (line 238) | typedef struct bio_st BIO;
  type bio_st (line 298) | struct bio_st
  type bio_st (line 301) | struct bio_st
  type bio_st (line 309) | struct bio_st
  type BIO_METHOD (line 312) | typedef struct bio_method_st {
  type bio_st (line 325) | struct bio_st {
  type bio_f_buffer_ctx_struct (line 346) | struct bio_f_buffer_ctx_struct {
  type bio_dgram_sctp_sndinfo (line 375) | struct bio_dgram_sctp_sndinfo {
  type bio_dgram_sctp_rcvinfo (line 382) | struct bio_dgram_sctp_rcvinfo {
  type bio_dgram_sctp_prinfo (line 392) | struct bio_dgram_sctp_prinfo {
  type bio_st (line 670) | struct bio_st
  type hostent (line 736) | struct hostent

FILE: 3rParty/FFmpeg/include/openssl/blowfish.h
  type BF_KEY (line 101) | typedef struct bf_key_st {

FILE: 3rParty/FFmpeg/include/openssl/bn.h
  type BIGNUM (line 304) | typedef struct bignum_st BIGNUM;
  type BN_CTX (line 306) | typedef struct bignum_ctx BN_CTX;
  type BN_BLINDING (line 307) | typedef struct bn_blinding_st BN_BLINDING;
  type BN_MONT_CTX (line 308) | typedef struct bn_mont_ctx_st BN_MONT_CTX;
  type BN_RECP_CTX (line 309) | typedef struct bn_recp_ctx_st BN_RECP_CTX;
  type BN_GENCB (line 310) | typedef struct bn_gencb_st BN_GENCB;
  type bignum_st (line 313) | struct bignum_st {
  type bn_mont_ctx_st (line 324) | struct bn_mont_ctx_st {
  type bn_recp_ctx_st (line 340) | struct bn_recp_ctx_st {
  type bn_gencb_st (line 349) | struct bn_gencb_st {

FILE: 3rParty/FFmpeg/include/openssl/buffer.h
  type buf_mem_st (line 77) | struct buf_mem_st {

FILE: 3rParty/FFmpeg/include/openssl/camellia.h
  type camellia_key_st (line 84) | struct camellia_key_st {
  type CAMELLIA_KEY (line 91) | typedef struct camellia_key_st CAMELLIA_KEY;

FILE: 3rParty/FFmpeg/include/openssl/cast.h
  type CAST_KEY (line 80) | typedef struct cast_key_st {

FILE: 3rParty/FFmpeg/include/openssl/cmac.h
  type CMAC_CTX (line 65) | typedef struct CMAC_CTX_st CMAC_CTX;

FILE: 3rParty/FFmpeg/include/openssl/cms.h
  type CMS_ContentInfo (line 68) | typedef struct CMS_ContentInfo_st CMS_ContentInfo;
  type CMS_SignerInfo (line 69) | typedef struct CMS_SignerInfo_st CMS_SignerInfo;
  type CMS_CertificateChoices (line 70) | typedef struct CMS_CertificateChoices CMS_CertificateChoices;
  type CMS_RevocationInfoChoice (line 71) | typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice;
  type CMS_RecipientInfo (line 72) | typedef struct CMS_RecipientInfo_st CMS_RecipientInfo;
  type CMS_ReceiptRequest (line 73) | typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest;
  type CMS_Receipt (line 74) | typedef struct CMS_Receipt_st CMS_Receipt;
  type CMS_RecipientEncryptedKey (line 75) | typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey;
  type CMS_OtherKeyAttribute (line 76) | typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute;

FILE: 3rParty/FFmpeg/include/openssl/comp.h
  type COMP_CTX (line 15) | typedef struct comp_ctx_st COMP_CTX;
  type COMP_METHOD (line 17) | typedef struct comp_method_st {
  type comp_ctx_st (line 35) | struct comp_ctx_st {

FILE: 3rParty/FFmpeg/include/openssl/conf.h
  type CONF_VALUE (line 74) | typedef struct {
  type conf_st (line 83) | struct conf_st
  type conf_method_st (line 84) | struct conf_method_st
  type CONF_METHOD (line 85) | typedef struct conf_method_st CONF_METHOD;
  type conf_method_st (line 87) | struct conf_method_st {
  type CONF_IMODULE (line 102) | typedef struct conf_imodule_st CONF_IMODULE;
  type CONF_MODULE (line 103) | typedef struct conf_module_st CONF_MODULE;
  type conf_st (line 147) | struct conf_st {

FILE: 3rParty/FFmpeg/include/openssl/crypto.h
  type CRYPTO_EX_DATA (line 162) | typedef struct crypto_ex_data_st CRYPTO_EX_DATA;
  type OPENSSL_ITEM (line 175) | typedef struct openssl_item_st {
  type CRYPTO_dynlock (line 262) | typedef struct {
  type BIO_dummy (line 290) | typedef struct bio_st BIO_dummy;
  type crypto_ex_data_st (line 292) | struct crypto_ex_data_st {
  type crypto_ex_data_func_st (line 304) | struct crypto_ex_data_func_st {
  type CRYPTO_EX_DATA_IMPL (line 402) | typedef struct st_CRYPTO_EX_DATA_IMPL CRYPTO_EX_DATA_IMPL;
  type CRYPTO_THREADID (line 448) | typedef struct crypto_threadid_st {
  type CRYPTO_dynlock_value (line 473) | struct CRYPTO_dynlock_value
  type CRYPTO_dynlock_value (line 474) | struct CRYPTO_dynlock_value
  type CRYPTO_dynlock_value (line 480) | struct CRYPTO_dynlock_value
  type CRYPTO_dynlock_value (line 483) | struct CRYPTO_dynlock_value
  type CRYPTO_dynlock_value (line 485) | struct CRYPTO_dynlock_value
  type CRYPTO_dynlock_value (line 488) | struct CRYPTO_dynlock_value
  type CRYPTO_dynlock_value (line 491) | struct CRYPTO_dynlock_value
  type bio_st (line 583) | struct bio_st

FILE: 3rParty/FFmpeg/include/openssl/des.h
  type DES_key_schedule (line 85) | typedef struct DES_ks {

FILE: 3rParty/FFmpeg/include/openssl/des_old.h
  type _ossl_old_des_ks_struct (line 126) | struct _ossl_old_des_ks_struct {

FILE: 3rParty/FFmpeg/include/openssl/dh.h
  type dh_method (line 117) | struct dh_method {
  type dh_st (line 135) | struct dh_st {

FILE: 3rParty/FFmpeg/include/openssl/dsa.h
  type DSA_SIG (line 124) | typedef struct DSA_SIG_st {
  type dsa_method (line 129) | struct dsa_method {
  type dsa_st (line 155) | struct dsa_st {

FILE: 3rParty/FFmpeg/include/openssl/dso.h
  type DSO (line 112) | typedef struct dso_st DSO;
  type DSO_METHOD (line 140) | typedef struct dso_meth_st {
  type dso_st (line 194) | struct dso_st {

FILE: 3rParty/FFmpeg/include/openssl/dtls1.h
  type DTLS1_BITMAP (line 128) | typedef struct dtls1_bitmap_st {
  type dtls1_retransmit_state (line 135) | struct dtls1_retransmit_state {
  type hm_header_st (line 147) | struct hm_header_st {
  type ccs_header_st (line 157) | struct ccs_header_st {
  type dtls1_timeout_st (line 162) | struct dtls1_timeout_st {
  type record_pqueue (line 171) | typedef struct record_pqueue_st {
  type hm_fragment (line 176) | typedef struct hm_fragment_st {
  type DTLS1_STATE (line 182) | typedef struct dtls1_state_st {
  type DTLS1_RECORD_DATA (line 251) | typedef struct dtls1_record_data_st {

FILE: 3rParty/FFmpeg/include/openssl/ec.h
  type point_conversion_form_t (line 105) | typedef enum {
  type EC_METHOD (line 116) | typedef struct ec_method_st EC_METHOD;
  type EC_GROUP (line 118) | typedef struct ec_group_st
  type EC_POINT (line 129) | typedef struct ec_point_st EC_POINT;
  type EC_builtin_curve (line 400) | typedef struct {
  type ECPKPARAMETERS (line 718) | typedef struct ecpk_parameters_st ECPKPARAMETERS;
  type EC_KEY (line 741) | typedef struct ec_key_st EC_KEY;

FILE: 3rParty/FFmpeg/include/openssl/ecdsa.h
  type ECDSA_SIG (line 78) | typedef struct ECDSA_SIG_st {

FILE: 3rParty/FFmpeg/include/openssl/engine.h
  type ENGINE_CMD_DEFN (line 323) | typedef struct ENGINE_CMD_DEFN_st {
  type EVP_PKEY (line 338) | typedef EVP_PKEY *(*ENGINE_LOAD_KEY_PTR)(ENGINE *, const char *,
  type dynamic_MEM_fns (line 754) | typedef struct st_dynamic_MEM_fns {
  type CRYPTO_dynlock_value (line 765) | struct CRYPTO_dynlock_value
  type CRYPTO_dynlock_value (line 767) | struct CRYPTO_dynlock_value
  type CRYPTO_dynlock_value (line 769) | struct CRYPTO_dynlock_value
  type dynamic_LOCK_fns (line 771) | typedef struct st_dynamic_LOCK_fns {
  type dynamic_fns (line 779) | typedef struct st_dynamic_fns {

FILE: 3rParty/FFmpeg/include/openssl/err.h
  type ERR_STATE (line 148) | typedef struct err_state_st {
  type ERR_STRING_DATA (line 313) | typedef struct ERR_string_data_st {

FILE: 3rParty/FFmpeg/include/openssl/evp.h
  type evp_pkey_st (line 129) | struct evp_pkey_st {
  type env_md_st (line 160) | struct env_md_st {
  type env_md_ctx_st (line 268) | struct env_md_ctx_st {
  type evp_cipher_st (line 308) | struct evp_cipher_st {
  type EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM (line 429) | typedef struct {
  type EVP_CIPHER_INFO (line 444) | typedef struct evp_cipher_info_st {
  type evp_cipher_ctx_st (line 449) | struct evp_cipher_ctx_st {
  type EVP_ENCODE_CTX (line 468) | typedef struct evp_Encode_Ctx_st {
  type rsa_st (line 960) | struct rsa_st
  type rsa_st (line 961) | struct rsa_st
  type rsa_st (line 962) | struct rsa_st
  type dsa_st (line 965) | struct dsa_st
  type dsa_st (line 966) | struct dsa_st
  type dsa_st (line 967) | struct dsa_st
  type dh_st (line 970) | struct dh_st
  type dh_st (line 971) | struct dh_st
  type dh_st (line 972) | struct dh_st
  type ec_key_st (line 975) | struct ec_key_st
  type ec_key_st (line 976) | struct ec_key_st
  type ec_key_st (line 977) | struct ec_key_st

FILE: 3rParty/FFmpeg/include/openssl/hmac.h
  type HMAC_CTX (line 75) | typedef struct hmac_ctx_st {

FILE: 3rParty/FFmpeg/include/openssl/idea.h
  type IDEA_KEY_SCHEDULE (line 78) | typedef struct idea_key_st {

FILE: 3rParty/FFmpeg/include/openssl/krb5_asn.h
  type KRB5_ENCDATA (line 83) | typedef struct krb5_encdata_st {
  type krb5_princname_st (line 96) | struct krb5_princname_st {
  type krb5_tktbody_st (line 110) | struct krb5_tktbody_st {
  type KRB5_TICKET (line 117) | typedef STACK_OF(KRB5_TKTBODY) KRB5_TICKET;
  type krb5_ap_req_st (line 131) | struct krb5_ap_req_st {
  type KRB5_APREQ (line 139) | typedef STACK_OF(KRB5_APREQBODY) KRB5_APREQ;
  type krb5_checksum_st (line 149) | struct krb5_checksum_st {
  type krb5_encryptionkey_st (line 161) | struct krb5_encryptionkey_st {
  type krb5_authorization_st (line 173) | struct krb5_authorization_st {
  type krb5_authenticator_st (line 193) | struct krb5_authenticator_st {
  type KRB5_AUTHENT (line 205) | typedef STACK_OF(KRB5_AUTHENTBODY) KRB5_AUTHENT;

FILE: 3rParty/FFmpeg/include/openssl/kssl.h
  type krb5_octet (line 94) | typedef unsigned char krb5_octet;
  type KSSL_ERR (line 132) | typedef struct kssl_err_st {
  type KSSL_CTX (line 141) | typedef struct kssl_ctx_st {

FILE: 3rParty/FFmpeg/include/openssl/lhash.h
  type LHASH_NODE (line 79) | typedef struct lhash_node_st {
  type _LHASH (line 139) | typedef struct lhash_st {

FILE: 3rParty/FFmpeg/include/openssl/md4.h
  type MD4_CTX (line 100) | typedef struct MD4state_st {

FILE: 3rParty/FFmpeg/include/openssl/md5.h
  type MD5_CTX (line 100) | typedef struct MD5state_st {

FILE: 3rParty/FFmpeg/include/openssl/mdc2.h
  type MDC2_CTX (line 75) | typedef struct mdc2_ctx_st {

FILE: 3rParty/FFmpeg/include/openssl/modes.h
  type GCM128_CONTEXT (line 98) | typedef struct gcm128_context GCM128_CONTEXT;
  type CCM128_CONTEXT (line 123) | typedef struct ccm128_context CCM128_CONTEXT;
  type XTS128_CONTEXT (line 144) | typedef struct xts128_context XTS128_CONTEXT;

FILE: 3rParty/FFmpeg/include/openssl/objects.h
  type OBJ_NAME (line 984) | typedef struct obj_name_st {

FILE: 3rParty/FFmpeg/include/openssl/ocsp.h
  type OCSP_CERTID (line 102) | typedef struct ocsp_cert_id_st {
  type ocsp_one_request_st (line 115) | struct ocsp_one_request_st {
  function DECLARE_ASN1_SET_OF (line 120) | DECLARE_STACK_OF(OCSP_ONEREQ)
  type OCSP_SIGNATURE (line 141) | typedef struct ocsp_signature_st {
  type OCSP_REQUEST (line 151) | typedef struct ocsp_request_st {
  type OCSP_RESPBYTES (line 177) | typedef struct ocsp_resp_bytes_st {
  type ocsp_response_st (line 186) | struct ocsp_response_st {
  type ocsp_responder_id_st (line 197) | struct ocsp_responder_id_st {
  function DECLARE_ASN1_FUNCTIONS (line 205) | DECLARE_STACK_OF(OCSP_RESPID)
  type OCSP_CERTSTATUS (line 229) | typedef struct ocsp_cert_status_st {
  type OCSP_SINGLERESP (line 245) | typedef struct ocsp_single_response_st {
  function DECLARE_ASN1_SET_OF (line 253) | DECLARE_STACK_OF(OCSP_SINGLERESP)
  type OCSP_BASICRESP (line 297) | typedef struct ocsp_basic_response_st {
  type OCSP_CRLID (line 331) | typedef struct ocsp_crl_id_st {
  type OCSP_SERVICELOC (line 342) | typedef struct ocsp_service_locator_st {

FILE: 3rParty/FFmpeg/include/openssl/ossl_typ.h
  type ASN1_INTEGER (line 83) | typedef struct asn1_string_st ASN1_INTEGER;
  type ASN1_ENUMERATED (line 84) | typedef struct asn1_string_st ASN1_ENUMERATED;
  type ASN1_BIT_STRING (line 85) | typedef struct asn1_string_st ASN1_BIT_STRING;
  type ASN1_OCTET_STRING (line 86) | typedef struct asn1_string_st ASN1_OCTET_STRING;
  type ASN1_PRINTABLESTRING (line 87) | typedef struct asn1_string_st ASN1_PRINTABLESTRING;
  type ASN1_T61STRING (line 88) | typedef struct asn1_string_st ASN1_T61STRING;
  type ASN1_IA5STRING (line 89) | typedef struct asn1_string_st ASN1_IA5STRING;
  type ASN1_GENERALSTRING (line 90) | typedef struct asn1_string_st ASN1_GENERALSTRING;
  type ASN1_UNIVERSALSTRING (line 91) | typedef struct asn1_string_st ASN1_UNIVERSALSTRING;
  type ASN1_BMPSTRING (line 92) | typedef struct asn1_string_st ASN1_BMPSTRING;
  type ASN1_UTCTIME (line 93) | typedef struct asn1_string_st ASN1_UTCTIME;
  type ASN1_TIME (line 94) | typedef struct asn1_string_st ASN1_TIME;
  type ASN1_GENERALIZEDTIME (line 95) | typedef struct asn1_string_st ASN1_GENERALIZEDTIME;
  type ASN1_VISIBLESTRING (line 96) | typedef struct asn1_string_st ASN1_VISIBLESTRING;
  type ASN1_UTF8STRING (line 97) | typedef struct asn1_string_st ASN1_UTF8STRING;
  type ASN1_STRING (line 98) | typedef struct asn1_string_st ASN1_STRING;
  type ASN1_BOOLEAN (line 99) | typedef int ASN1_BOOLEAN;
  type ASN1_NULL (line 100) | typedef int ASN1_NULL;
  type ASN1_OBJECT (line 103) | typedef struct asn1_object_st ASN1_OBJECT;
  type ASN1_ITEM (line 105) | typedef struct ASN1_ITEM_st ASN1_ITEM;
  type ASN1_PCTX (line 106) | typedef struct asn1_pctx_st ASN1_PCTX;
  type BIGNUM (line 120) | typedef struct bignum_st BIGNUM;
  type BN_CTX (line 121) | typedef struct bignum_ctx BN_CTX;
  type BN_BLINDING (line 122) | typedef struct bn_blinding_st BN_BLINDING;
  type BN_MONT_CTX (line 123) | typedef struct bn_mont_ctx_st BN_MONT_CTX;
  type BN_RECP_CTX (line 124) | typedef struct bn_recp_ctx_st BN_RECP_CTX;
  type BN_GENCB (line 125) | typedef struct bn_gencb_st BN_GENCB;
  type BUF_MEM (line 127) | typedef struct buf_mem_st BUF_MEM;
  type EVP_CIPHER (line 129) | typedef struct evp_cipher_st EVP_CIPHER;
  type EVP_CIPHER_CTX (line 130) | typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX;
  type EVP_MD (line 131) | typedef struct env_md_st EVP_MD;
  type EVP_MD_CTX (line 132) | typedef struct env_md_ctx_st EVP_MD_CTX;
  type EVP_PKEY (line 133) | typedef struct evp_pkey_st EVP_PKEY;
  type EVP_PKEY_ASN1_METHOD (line 135) | typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD;
  type EVP_PKEY_METHOD (line 137) | typedef struct evp_pkey_method_st EVP_PKEY_METHOD;
  type EVP_PKEY_CTX (line 138) | typedef struct evp_pkey_ctx_st EVP_PKEY_CTX;
  type DH (line 140) | typedef struct dh_st DH;
  type DH_METHOD (line 141) | typedef struct dh_method DH_METHOD;
  type DSA (line 143) | typedef struct dsa_st DSA;
  type DSA_METHOD (line 144) | typedef struct dsa_method DSA_METHOD;
  type RSA (line 146) | typedef struct rsa_st RSA;
  type RSA_METHOD (line 147) | typedef struct rsa_meth_st RSA_METHOD;
  type RAND_METHOD (line 149) | typedef struct rand_meth_st RAND_METHOD;
  type ECDH_METHOD (line 151) | typedef struct ecdh_method ECDH_METHOD;
  type ECDSA_METHOD (line 152) | typedef struct ecdsa_method ECDSA_METHOD;
  type X509 (line 154) | typedef struct x509_st X509;
  type X509_ALGOR (line 155) | typedef struct X509_algor_st X509_ALGOR;
  type X509_CRL (line 156) | typedef struct X509_crl_st X509_CRL;
  type X509_CRL_METHOD (line 157) | typedef struct x509_crl_method_st X509_CRL_METHOD;
  type X509_REVOKED (line 158) | typedef struct x509_revoked_st X509_REVOKED;
  type X509_NAME (line 159) | typedef struct X509_name_st X509_NAME;
  type X509_PUBKEY (line 160) | typedef struct X509_pubkey_st X509_PUBKEY;
  type X509_STORE (line 161) | typedef struct x509_store_st X509_STORE;
  type X509_STORE_CTX (line 162) | typedef struct x509_store_ctx_st X509_STORE_CTX;
  type PKCS8_PRIV_KEY_INFO (line 164) | typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO;
  type X509V3_CTX (line 166) | typedef struct v3_ext_ctx X509V3_CTX;
  type CONF (line 167) | typedef struct conf_st CONF;
  type STORE (line 169) | typedef struct store_st STORE;
  type STORE_METHOD (line 170) | typedef struct store_method_st STORE_METHOD;
  type UI (line 172) | typedef struct ui_st UI;
  type UI_METHOD (line 173) | typedef struct ui_method_st UI_METHOD;
  type ERR_FNS (line 175) | typedef struct st_ERR_FNS ERR_FNS;
  type ENGINE (line 177) | typedef struct engine_st ENGINE;
  type SSL (line 178) | typedef struct ssl_st SSL;
  type SSL_CTX (line 179) | typedef struct ssl_ctx_st SSL_CTX;
  type X509_POLICY_NODE (line 181) | typedef struct X509_POLICY_NODE_st X509_POLICY_NODE;
  type X509_POLICY_LEVEL (line 182) | typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL;
  type X509_POLICY_TREE (line 183) | typedef struct X509_POLICY_TREE_st X509_POLICY_TREE;
  type X509_POLICY_CACHE (line 184) | typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE;
  type AUTHORITY_KEYID (line 186) | typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID;
  type DIST_POINT (line 187) | typedef struct DIST_POINT_st DIST_POINT;
  type ISSUING_DIST_POINT (line 188) | typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT;
  type NAME_CONSTRAINTS (line 189) | typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS;
  type CRYPTO_EX_DATA (line 195) | typedef struct crypto_ex_data_st CRYPTO_EX_DATA;
  type OCSP_REQ_CTX (line 204) | typedef struct ocsp_req_ctx_st OCSP_REQ_CTX;
  type OCSP_RESPONSE (line 205) | typedef struct ocsp_response_st OCSP_RESPONSE;
  type OCSP_RESPID (line 206) | typedef struct ocsp_responder_id_st OCSP_RESPID;

FILE: 3rParty/FFmpeg/include/openssl/pem.h
  type PEM_ENCODE_SEAL_CTX (line 145) | typedef struct PEM_Encode_Seal_st {
  type PEM_USER (line 157) | typedef struct pem_recip_st {
  type PEM_CTX (line 165) | typedef struct pem_ctx_st {

FILE: 3rParty/FFmpeg/include/openssl/pkcs12.h
  type PKCS12_MAC_DATA (line 102) | typedef struct {
  type PKCS12 (line 108) | typedef struct {
  type PKCS12_SAFEBAG (line 114) | typedef struct {
  function DECLARE_ASN1_SET_OF (line 126) | DECLARE_STACK_OF(PKCS12_SAFEBAG)

FILE: 3rParty/FFmpeg/include/openssl/pkcs7.h
  type PKCS7_ISSUER_AND_SERIAL (line 86) | typedef struct pkcs7_issuer_and_serial_st {
  type PKCS7_SIGNER_INFO (line 91) | typedef struct pkcs7_signer_info_st {
  function DECLARE_ASN1_SET_OF (line 103) | DECLARE_STACK_OF(PKCS7_SIGNER_INFO)
  function DECLARE_ASN1_SET_OF (line 114) | DECLARE_STACK_OF(PKCS7_RECIP_INFO)
  type PKCS7_ENC_CONTENT (line 130) | typedef struct pkcs7_enc_content_st {
  type PKCS7_ENVELOPE (line 137) | typedef struct pkcs7_enveloped_st {
  type PKCS7_SIGN_ENVELOPE (line 143) | typedef struct pkcs7_signedandenveloped_st {
  type PKCS7_DIGEST (line 153) | typedef struct pkcs7_digest_st {
  type PKCS7_ENCRYPT (line 160) | typedef struct pkcs7_encrypted_st {
  type PKCS7 (line 165) | typedef struct pkcs7_st {

FILE: 3rParty/FFmpeg/include/openssl/pqueue.h
  type _pqueue (line 70) | struct _pqueue
  type pitem (line 72) | typedef struct _pitem {
  type _pitem (line 78) | struct _pitem

FILE: 3rParty/FFmpeg/include/openssl/rand.h
  type rand_meth_st (line 81) | struct rand_meth_st {

FILE: 3rParty/FFmpeg/include/openssl/rc2.h
  type RC2_KEY (line 77) | typedef struct rc2_key_st {

FILE: 3rParty/FFmpeg/include/openssl/rc4.h
  type RC4_KEY (line 73) | typedef struct rc4_key_st {

FILE: 3rParty/FFmpeg/include/openssl/ripemd.h
  type RIPEMD160_CTX (line 86) | typedef struct RIPEMD160state_st {

FILE: 3rParty/FFmpeg/include/openssl/rsa.h
  type rsa_meth_st (line 85) | struct rsa_meth_st {
  type rsa_st (line 132) | struct rsa_st {
  type RSA_PSS_PARAMS (line 365) | typedef struct rsa_pss_params_st {
  type rsa_oaep_params_st (line 374) | struct rsa_oaep_params_st {

FILE: 3rParty/FFmpeg/include/openssl/seed.h
  type SEED_KEY_SCHEDULE (line 110) | typedef struct seed_key_st {

FILE: 3rParty/FFmpeg/include/openssl/sha.h
  type SHA_CTX (line 100) | typedef struct SHAstate_st {
  type SHA256_CTX (line 134) | typedef struct SHA256state_st {
  type SHA512_CTX (line 183) | typedef struct SHA512state_st {

FILE: 3rParty/FFmpeg/include/openssl/srp.h
  type SRP_gN_cache (line 76) | typedef struct SRP_gN_cache_st {
  type SRP_user_pwd_st (line 84) | struct SRP_user_pwd_st {
  type SRP_VBASE (line 100) | typedef struct SRP_VBASE_st {
  type SRP_gN (line 112) | typedef struct SRP_gN_st {

FILE: 3rParty/FFmpeg/include/openssl/ssl.h
  type ssl_st (line 372) | struct ssl_st
  type TLS_SESSION_TICKET_EXT (line 373) | typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT;
  type SSL_METHOD (line 374) | typedef struct ssl_method_st SSL_METHOD;
  type SSL_CIPHER (line 375) | typedef struct ssl_cipher_st SSL_CIPHER;
  type SSL_SESSION (line 376) | typedef struct ssl_session_st SSL_SESSION;
  type TLS_SIGALGS (line 377) | typedef struct tls_sigalgs_st TLS_SIGALGS;
  type SSL_CONF_CTX (line 378) | typedef struct ssl_conf_ctx_st SSL_CONF_CTX;
  type srtp_protection_profile_st (line 383) | struct srtp_protection_profile_st {
  type ssl_cipher_st (line 418) | struct ssl_cipher_st {
  type ssl_method_st (line 438) | struct ssl_method_st {
  type ssl_session_st (line 498) | struct ssl_session_st {
  type SRP_CTX (line 849) | typedef struct srp_ctx_st {
  type SSL_COMP (line 908) | typedef struct ssl_comp_st SSL_COMP;
  type ssl_comp_st (line 912) | struct ssl_comp_st {
  type ssl_ctx_st (line 925) | struct ssl_ctx_st {
  type ssl_st (line 1226) | struct ssl_st
  type ssl_st (line 1228) | struct ssl_st
  type ssl_ctx_st (line 1231) | struct ssl_ctx_st
  type ssl_ctx_st (line 1235) | struct ssl_ctx_st
  type ssl_st (line 1238) | struct ssl_st
  type ssl_st (line 1243) | struct ssl_st
  type ssl_st (line 1422) | struct ssl_st {
  type evp_pkey_st (line 2429) | struct evp_pkey_st
  type openssl_ssl_test_functions (line 2590) | struct openssl_ssl_test_functions

FILE: 3rParty/FFmpeg/include/openssl/ssl2.h
  type SSL2_STATE (line 163) | typedef struct ssl2_state_st {

FILE: 3rParty/FFmpeg/include/openssl/ssl3.h
  type SSL3_RECORD (line 403) | typedef struct ssl3_record_st {
  type SSL3_BUFFER (line 438) | typedef struct ssl3_buffer_st {
  type SSL3_STATE (line 481) | typedef struct ssl3_state_st {

FILE: 3rParty/FFmpeg/include/openssl/stack.h
  type _STACK (line 66) | typedef struct stack_st {

FILE: 3rParty/FFmpeg/include/openssl/tls1.h
  type tls_session_ticket_ext_st (line 802) | struct tls_session_ticket_ext_st {

FILE: 3rParty/FFmpeg/include/openssl/ts.h
  type TS_MSG_IMPRINT (line 108) | typedef struct TS_msg_imprint_st {
  type TS_REQ (line 125) | typedef struct TS_req_st {
  type TS_ACCURACY (line 141) | typedef struct TS_accuracy_st {
  type TS_TST_INFO (line 167) | typedef struct TS_tst_info_st {
  type TS_STATUS_INFO (line 215) | typedef struct TS_status_info_st {
  function DECLARE_ASN1_SET_OF (line 221) | DECLARE_STACK_OF(ASN1_UTF8STRING)
  type ESS_ISSUER_SERIAL (line 245) | typedef struct ESS_issuer_serial {
  type ESS_CERT_ID (line 257) | typedef struct ESS_cert_id {
  function DECLARE_ASN1_SET_OF (line 262) | DECLARE_STACK_OF(ESS_CERT_ID)
  type TS_resp_ctx (line 477) | struct TS_resp_ctx
  type ASN1_INTEGER (line 480) | typedef ASN1_INTEGER *(*TS_serial_cb) (struct TS_resp_ctx *, void *);
  type TS_resp_ctx (line 487) | struct TS_resp_ctx
  type TS_resp_ctx (line 495) | struct TS_resp_ctx
  type TS_RESP_CTX (line 498) | typedef struct TS_resp_ctx {
  type TS_verify_ctx (line 657) | struct TS_verify_ctx {

FILE: 3rParty/FFmpeg/include/openssl/txt_db.h
  type OPENSSL_STRING (line 80) | typedef OPENSSL_STRING *OPENSSL_PSTRING;
  type TXT_DB (line 83) | typedef struct txt_db_st {

FILE: 3rParty/FFmpeg/include/openssl/ui.h
  type UI_STRING (line 304) | typedef struct ui_string_st UI_STRING;
  type UI_string_types (line 351) | enum UI_string_types

FILE: 3rParty/FFmpeg/include/openssl/whrlpool.h
  type WHIRLPOOL_CTX (line 15) | typedef struct {

FILE: 3rParty/FFmpeg/include/openssl/x509.h
  type X509_OBJECTS (line 137) | typedef struct X509_objects_st {
  type X509_algor_st (line 143) | struct X509_algor_st {
  type X509_VAL (line 152) | typedef struct X509_val_st {
  type X509_pubkey_st (line 157) | struct X509_pubkey_st {
  type X509_SIG (line 163) | typedef struct X509_sig_st {
  type X509_NAME_ENTRY (line 168) | typedef struct X509_name_entry_st {
  function DECLARE_ASN1_SET_OF (line 175) | DECLARE_STACK_OF(X509_NAME_ENTRY)
  type X509_EXTENSION (line 196) | typedef struct X509_extension_st {
  type X509_EXTENSIONS (line 202) | typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS;
  function DECLARE_ASN1_SET_OF (line 204) | DECLARE_STACK_OF(X509_EXTENSION)
  function DECLARE_ASN1_SET_OF (line 223) | DECLARE_STACK_OF(X509_ATTRIBUTE)
  type X509_REQ (line 235) | typedef struct X509_req_st {
  type X509_CINF (line 242) | typedef struct x509_cinf_st {
  type X509_CERT_AUX (line 262) | typedef struct x509_cert_aux_st {
  type x509_st (line 270) | struct x509_st {
  function DECLARE_ASN1_SET_OF (line 301) | DECLARE_STACK_OF(X509)
  type x509_cert_pair_st (line 317) | struct x509_cert_pair_st {
  type x509_revoked_st (line 427) | struct x509_revoked_st {
  function DECLARE_ASN1_SET_OF (line 438) | DECLARE_STACK_OF(X509_REVOKED)
  type X509_crl_st (line 452) | struct X509_crl_st {
  function DECLARE_ASN1_SET_OF (line 476) | DECLARE_STACK_OF(X509_CRL)
  type X509_INFO (line 496) | typedef struct X509_info_st {
  type NETSCAPE_SPKAC (line 514) | typedef struct Netscape_spkac_st {
  type NETSCAPE_SPKI (line 519) | typedef struct Netscape_spki_st {
  type NETSCAPE_CERT_SEQUENCE (line 526) | typedef struct Netscape_certificate_sequence {
  type PBEPARAM (line 540) | typedef struct PBEPARAM_st {
  type PBE2PARAM (line 547) | typedef struct PBE2PARAM_st {
  type PBKDF2PARAM (line 552) | typedef struct PBKDF2PARAM_st {
  type pkcs8_priv_key_info_st (line 562) | struct pkcs8_priv_key_info_st {

FILE: 3rParty/FFmpeg/include/openssl/x509_vfy.h
  type X509_HASH_DIR_CTX (line 84) | typedef struct x509_hash_dir_st {
  type X509_CERT_FILE_CTX (line 92) | typedef struct x509_file_st {
  type X509_OBJECT (line 123) | typedef struct x509_object_st {
  type X509_LOOKUP (line 134) | typedef struct x509_lookup_st X509_LOOKUP;
  function DECLARE_STACK_OF (line 136) | DECLARE_STACK_OF(X509_LOOKUP)
  type X509_VERIFY_PARAM_ID (line 159) | typedef struct X509_VERIFY_PARAM_ID_st X509_VERIFY_PARAM_ID;
  type X509_VERIFY_PARAM (line 167) | typedef struct X509_VERIFY_PARAM_st {
  function x509_store_st (line 179) | DECLARE_STACK_OF(X509_VERIFY_PARAM)
  type x509_lookup_st (line 223) | struct x509_lookup_st {
  type x509_store_ctx_st (line 236) | struct x509_store_ctx_st {      /* X509_STORE_CTX */

FILE: 3rParty/FFmpeg/include/openssl/x509v3.h
  type v3_ext_method (line 78) | struct v3_ext_method
  type v3_ext_ctx (line 79) | struct v3_ext_ctx
  type v3_ext_method (line 88) | struct v3_ext_method
  type v3_ext_method (line 90) | struct v3_ext_method
  type v3_ext_ctx (line 91) | struct v3_ext_ctx
  type v3_ext_method (line 93) | struct v3_ext_method
  type v3_ext_method (line 95) | struct v3_ext_method
  type v3_ext_ctx (line 96) | struct v3_ext_ctx
  type v3_ext_method (line 97) | struct v3_ext_method
  type v3_ext_method (line 99) | struct v3_ext_method
  type v3_ext_ctx (line 100) | struct v3_ext_ctx
  type v3_ext_method (line 104) | struct v3_ext_method {
  type X509V3_CONF_METHOD (line 126) | typedef struct X509V3_CONF_METHOD_st {
  type v3_ext_ctx (line 134) | struct v3_ext_ctx {
  type X509V3_EXT_METHOD (line 146) | typedef struct v3_ext_method X509V3_EXT_METHOD;
  type BIT_STRING_BITNAME (line 155) | typedef BIT_STRING_BITNAME ENUMERATED_NAMES;
  type BASIC_CONSTRAINTS (line 157) | typedef struct BASIC_CONSTRAINTS_st {
  type PKEY_USAGE_PERIOD (line 162) | typedef struct PKEY_USAGE_PERIOD_st {
  type OTHERNAME (line 167) | typedef struct otherName_st {
  type EDIPARTYNAME (line 172) | typedef struct EDIPartyName_st {
  type GENERAL_NAME (line 177) | typedef struct GENERAL_NAME_st {
  type GENERAL_NAMES (line 209) | typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES;
  type ACCESS_DESCRIPTION (line 211) | typedef struct ACCESS_DESCRIPTION_st {
  type AUTHORITY_INFO_ACCESS (line 216) | typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
  type EXTENDED_KEY_USAGE (line 218) | typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE;
  function DECLARE_ASN1_SET_OF (line 220) | DECLARE_STACK_OF(GENERAL_NAME)
  type DIST_POINT_st (line 250) | struct DIST_POINT_st {
  type CRL_DIST_POINTS (line 257) | typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS;
  function DECLARE_ASN1_SET_OF (line 259) | DECLARE_STACK_OF(DIST_POINT)
  type SXNETID (line 270) | typedef struct SXNET_ID_st {
  function DECLARE_ASN1_SET_OF (line 275) | DECLARE_STACK_OF(SXNETID)
  type NOTICEREF (line 283) | typedef struct NOTICEREF_st {
  type USERNOTICE (line 288) | typedef struct USERNOTICE_st {
  type POLICYQUALINFO (line 293) | typedef struct POLICYQUALINFO_st {
  function DECLARE_ASN1_SET_OF (line 302) | DECLARE_STACK_OF(POLICYQUALINFO)
  type CERTIFICATEPOLICIES (line 310) | typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES;
  function DECLARE_ASN1_SET_OF (line 312) | DECLARE_STACK_OF(POLICYINFO)
  type GENERAL_SUBTREE (line 324) | typedef struct GENERAL_SUBTREE_st {
  function NAME_CONSTRAINTS_st (line 330) | DECLARE_STACK_OF(GENERAL_SUBTREE)
  type POLICY_CONSTRAINTS (line 337) | typedef struct POLICY_CONSTRAINTS_st {
  type PROXY_POLICY (line 343) | typedef struct PROXY_POLICY_st {
  type PROXY_CERT_INFO_EXTENSION (line 348) | typedef struct PROXY_CERT_INFO_EXTENSION_st {
  function DECLARE_ASN1_FUNCTIONS (line 353) | DECLARE_ASN1_FUNCTIONS(PROXY_POLICY)
  type X509_PURPOSE (line 458) | typedef struct x509_purpose_st {
  function DECLARE_ASN1_FUNCTIONS (line 549) | DECLARE_ASN1_FUNCTIONS(OTHERNAME)
  type ASIdOrRange (line 767) | typedef struct ASIdOrRange_st {
  type ASIdOrRanges (line 775) | typedef STACK_OF(ASIdOrRange) ASIdOrRanges;
  type ASIdentifierChoice (line 781) | typedef struct ASIdentifierChoice_st {
  type ASIdentifiers (line 789) | typedef struct ASIdentifiers_st {
  function DECLARE_ASN1_FUNCTIONS (line 793) | DECLARE_ASN1_FUNCTIONS(ASRange)
  type IPAddressOrRange (line 805) | typedef struct IPAddressOrRange_st {
  type IPAddressOrRanges (line 813) | typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges;
  type IPAddressChoice (line 819) | typedef struct IPAddressChoice_st {
  type IPAddressFamily (line 827) | typedef struct IPAddressFamily_st {
  type IPAddrBlocks (line 832) | typedef STACK_OF(IPAddressFamily) IPAddrBlocks;

FILE: 3rParty/kxmovie/KxMovieDecoder.h
  type kxMovieError (line 17) | typedef enum {
  type KxMovieFrameType (line 32) | typedef enum {
  type KxVideoFrameFormat (line 41) | typedef enum {

FILE: Pods/Masonry/Masonry/MASUtilities.h
  type UILayoutPriority (line 20) | typedef UILayoutPriority MASLayoutPriority;
  type NSLayoutPriority (line 33) | typedef NSLayoutPriority MASLayoutPriority;
  function id (line 76) | static inline id _MASBoxValue(const char *type, ...) {

FILE: Pods/Masonry/Masonry/NSArray+MASAdditions.h
  type MASAxisTypeHorizontal (line 13) | typedef NS_ENUM(NSUInteger, MASAxisType) {

FILE: Pods/Masonry/Masonry/View+MASShorthandAdditions.h
  function interface (line 17) | interface MAS_VIEW (MASShorthandAdditions)
Condensed preview — 277 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,616K chars).
[
  {
    "path": ".gitattributes",
    "chars": 174,
    "preview": "*.swift linguist-language=objective-c\n*.c linguist-language=objective-c\n*.h linguist-language=objective-c\n*.m linguist-l"
  },
  {
    "path": ".gitignore",
    "chars": 1364,
    "preview": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n"
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/avcodec.h",
    "chars": 210841,
    "preview": "/*\n * copyright (c) 2001 Fabrice Bellard\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redis"
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/avdct.h",
    "chars": 2570,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/avfft.h",
    "chars": 3111,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/d3d11va.h",
    "chars": 2853,
    "preview": "/*\n * Direct3D11 HW acceleration\n *\n * copyright (c) 2009 Laurent Aimar\n * copyright (c) 2015 Steve Lhomme\n *\n * This fi"
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/dirac.h",
    "chars": 4044,
    "preview": "/*\n * Copyright (C) 2007 Marco Gerards <marco@gnu.org>\n * Copyright (C) 2009 David Conrad\n * Copyright (C) 2011 Jordi Or"
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/dv_profile.h",
    "chars": 3715,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/dxva2.h",
    "chars": 2361,
    "preview": "/*\n * DXVA2 HW acceleration\n *\n * copyright (c) 2009 Laurent Aimar\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is fr"
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/jni.h",
    "chars": 1650,
    "preview": "/*\n * JNI public API functions\n *\n * Copyright (c) 2015-2016 Matthieu Bouron <matthieu.bouron stupeflix.com>\n *\n * This "
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/mediacodec.h",
    "chars": 2825,
    "preview": "/*\n * Android MediaCodec public API\n *\n * Copyright (c) 2016 Matthieu Bouron <matthieu.bouron stupeflix.com>\n *\n * This "
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/qsv.h",
    "chars": 3763,
    "preview": "/*\n * Intel MediaSDK QSV public API\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribu"
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/vaapi.h",
    "chars": 4394,
    "preview": "/*\n * Video Acceleration API (shared data between FFmpeg and the video player)\n * HW decode acceleration for MPEG-2, MPE"
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/vda.h",
    "chars": 5928,
    "preview": "/*\n * VDA HW acceleration\n *\n * copyright (c) 2011 Sebastien Zwickert\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is"
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/vdpau.h",
    "chars": 7893,
    "preview": "/*\n * The Video Decode and Presentation API for UNIX (VDPAU) is used for\n * hardware-accelerated decoding of MPEG-1/2, H"
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/version.h",
    "chars": 7863,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/videotoolbox.h",
    "chars": 3913,
    "preview": "/*\n * Videotoolbox hardware acceleration\n *\n * copyright (c) 2012 Sebastien Zwickert\n *\n * This file is part of FFmpeg.\n"
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/vorbis_parser.h",
    "chars": 2356,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavcodec/xvmc.h",
    "chars": 6062,
    "preview": "/*\n * Copyright (C) 2003 Ivan Kalvachev\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redist"
  },
  {
    "path": "3rParty/FFmpeg/include/libavfilter/avfilter.h",
    "chars": 41136,
    "preview": "/*\n * filter layer\n * Copyright (c) 2007 Bobby Bingham\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software;"
  },
  {
    "path": "3rParty/FFmpeg/include/libavfilter/avfiltergraph.h",
    "chars": 975,
    "preview": "/*\n * Filter graphs\n * copyright (c) 2007 Bobby Bingham\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software"
  },
  {
    "path": "3rParty/FFmpeg/include/libavfilter/buffersink.h",
    "chars": 5322,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavfilter/buffersrc.h",
    "chars": 6318,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavfilter/version.h",
    "chars": 2588,
    "preview": "/*\n * Version macros.\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n "
  },
  {
    "path": "3rParty/FFmpeg/include/libavformat/avc.h",
    "chars": 1543,
    "preview": "/*\n * AVC helper functions for muxers\n * Copyright (c) 2008 Aurelien Jacobs <aurel@gnuage.org>\n *\n * This file is part o"
  },
  {
    "path": "3rParty/FFmpeg/include/libavformat/avformat.h",
    "chars": 115295,
    "preview": "/*\n * copyright (c) 2001 Fabrice Bellard\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redis"
  },
  {
    "path": "3rParty/FFmpeg/include/libavformat/avio.h",
    "chars": 29676,
    "preview": "/*\n * copyright (c) 2001 Fabrice Bellard\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redis"
  },
  {
    "path": "3rParty/FFmpeg/include/libavformat/internal.h",
    "chars": 21864,
    "preview": "/*\n * copyright (c) 2001 Fabrice Bellard\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redis"
  },
  {
    "path": "3rParty/FFmpeg/include/libavformat/url.h",
    "chars": 12938,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavformat/version.h",
    "chars": 3459,
    "preview": "/*\n * Version macros.\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/adler32.h",
    "chars": 1673,
    "preview": "/*\n * copyright (c) 2006 Mans Rullgard\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistr"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/aes.h",
    "chars": 1834,
    "preview": "/*\n * copyright (c) 2007 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/aes_ctr.h",
    "chars": 2119,
    "preview": "/*\n * AES-CTR cipher\n * Copyright (c) 2015 Eran Kornblau <erankor at gmail dot com>\n *\n * This file is part of FFmpeg.\n "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/application.h",
    "chars": 4306,
    "preview": "/*\n * copyright (c) 2016 Zhang Rui\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribut"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/arm64/avconfig.h",
    "chars": 170,
    "preview": "/* Generated by ffconf */\n#ifndef AVUTIL_AVCONFIG_H\n#define AVUTIL_AVCONFIG_H\n#define AV_HAVE_BIGENDIAN 0\n#define AV_HAV"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/arm64/ffversion.h",
    "chars": 209,
    "preview": "/* Automatically generated by version.sh, do not manually edit! */\n#ifndef AVUTIL_FFVERSION_H\n#define AVUTIL_FFVERSION_H"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/armv7/avconfig.h",
    "chars": 170,
    "preview": "/* Generated by ffconf */\n#ifndef AVUTIL_AVCONFIG_H\n#define AVUTIL_AVCONFIG_H\n#define AV_HAVE_BIGENDIAN 0\n#define AV_HAV"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/armv7/ffversion.h",
    "chars": 209,
    "preview": "/* Automatically generated by version.sh, do not manually edit! */\n#ifndef AVUTIL_FFVERSION_H\n#define AVUTIL_FFVERSION_H"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/attributes.h",
    "chars": 4532,
    "preview": "/*\n * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/audio_fifo.h",
    "chars": 5914,
    "preview": "/*\n * Audio FIFO\n * Copyright (c) 2012 Justin Ruggles <justin.ruggles@gmail.com>\n *\n * This file is part of FFmpeg.\n *\n "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/avassert.h",
    "chars": 2355,
    "preview": "/*\n * copyright (c) 2010 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/avconfig.h",
    "chars": 1418,
    "preview": "/*\n * avconfig.h\n *\n * Copyright (c) 2013 Bilibili\n * Copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>\n *\n * This file "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/avstring.h",
    "chars": 13915,
    "preview": "/*\n * Copyright (c) 2007 Mans Rullgard\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistr"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/avutil.h",
    "chars": 9053,
    "preview": "/*\n * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/base64.h",
    "chars": 2285,
    "preview": "/*\n * Copyright (c) 2006 Ryan Martell. (rdm4@martellventures.com)\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is fre"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/blowfish.h",
    "chars": 2394,
    "preview": "/*\n * Blowfish algorithm\n * Copyright (c) 2012 Samuel Pitoiset\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free s"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/bprint.h",
    "chars": 7797,
    "preview": "/*\n * Copyright (c) 2012 Nicolas George\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redist"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/bswap.h",
    "chars": 2858,
    "preview": "/*\n * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/buffer.h",
    "chars": 10628,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/camellia.h",
    "chars": 2139,
    "preview": "/*\n * An implementation of the CAMELLIA algorithm as mentioned in RFC3713\n * Copyright (c) 2014 Supraja Meedinti\n *\n * T"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/cast5.h",
    "chars": 2561,
    "preview": "/*\n * An implementation of the CAST128 algorithm as mentioned in RFC2144\n * Copyright (c) 2014 Supraja Meedinti\n *\n * Th"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/channel_layout.h",
    "chars": 9297,
    "preview": "/*\n * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>\n * Copyright (c) 2008 Peter Ross\n *\n * This file is part"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/common.h",
    "chars": 15776,
    "preview": "/*\n * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/cpu.h",
    "chars": 5082,
    "preview": "/*\n * Copyright (c) 2000, 2001, 2002 Fabrice Bellard\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; y"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/crc.h",
    "chars": 3209,
    "preview": "/*\n * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/des.h",
    "chars": 2333,
    "preview": "/*\n * DES encryption/decryption\n * Copyright (c) 2007 Reimar Doeffinger\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/dict.h",
    "chars": 8275,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/display.h",
    "chars": 3212,
    "preview": "/*\n * Copyright (c) 2014 Vittorio Giovara <vittorio.giovara@gmail.com>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg i"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/downmix_info.h",
    "chars": 3235,
    "preview": "/*\n * Copyright (c) 2014 Tim Walker <tdskywalker@gmail.com>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free soft"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/error.h",
    "chars": 5468,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/eval.h",
    "chars": 5302,
    "preview": "/*\n * Copyright (c) 2002 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/ffversion.h",
    "chars": 1325,
    "preview": "/*\n * ffversion.h\n *\n * Copyright (c) 2013 Bilibili\n * Copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>\n *\n * This file"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/fifo.h",
    "chars": 5899,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/file.h",
    "chars": 2565,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/frame.h",
    "chars": 24576,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/hash.h",
    "chars": 8433,
    "preview": "/*\n * Copyright (C) 2013 Reimar Döffinger <Reimar.Doeffinger@gmx.de>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/hmac.h",
    "chars": 2891,
    "preview": "/*\n * Copyright (C) 2012 Martin Storsjo\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redist"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/hwcontext.h",
    "chars": 16348,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/hwcontext_cuda.h",
    "chars": 1317,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/hwcontext_dxva2.h",
    "chars": 2298,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/hwcontext_qsv.h",
    "chars": 1557,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/hwcontext_vaapi.h",
    "chars": 2457,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/hwcontext_vdpau.h",
    "chars": 1360,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/i386/avconfig.h",
    "chars": 170,
    "preview": "/* Generated by ffconf */\n#ifndef AVUTIL_AVCONFIG_H\n#define AVUTIL_AVCONFIG_H\n#define AV_HAVE_BIGENDIAN 0\n#define AV_HAV"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/i386/ffversion.h",
    "chars": 209,
    "preview": "/* Automatically generated by version.sh, do not manually edit! */\n#ifndef AVUTIL_FFVERSION_H\n#define AVUTIL_FFVERSION_H"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/imgutils.h",
    "chars": 8329,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/intfloat.h",
    "chars": 1726,
    "preview": "/*\n * Copyright (c) 2011 Mans Rullgard\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistr"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/intreadwrite.h",
    "chars": 18346,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/lfg.h",
    "chars": 1986,
    "preview": "/*\n * Lagged Fibonacci PRNG\n * Copyright (c) 2008 Michael Niedermayer\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/log.h",
    "chars": 11674,
    "preview": "/*\n * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/macros.h",
    "chars": 1249,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/mastering_display_metadata.h",
    "chars": 2778,
    "preview": "/**\n * Copyright (c) 2016 Neil Birkbeck <neil.birkbeck@gmail.com>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is fre"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/mathematics.h",
    "chars": 7945,
    "preview": "/*\n * copyright (c) 2005-2012 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/md5.h",
    "chars": 2093,
    "preview": "/*\n * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/mem.h",
    "chars": 23247,
    "preview": "/*\n * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/motion_vector.h",
    "chars": 1770,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/murmur3.h",
    "chars": 3483,
    "preview": "/*\n * Copyright (C) 2013 Reimar Döffinger <Reimar.Doeffinger@gmx.de>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/opt.h",
    "chars": 36073,
    "preview": "/*\n * AVOptions\n * copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FF"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/parseutils.h",
    "chars": 7575,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/pixdesc.h",
    "chars": 14552,
    "preview": "/*\n * pixel format descriptor\n * Copyright (c) 2009 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FF"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/pixelutils.h",
    "chars": 2071,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/pixfmt.h",
    "chars": 31532,
    "preview": "/*\n * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/random_seed.h",
    "chars": 1400,
    "preview": "/*\n * Copyright (c) 2009 Baptiste Coudurier <baptiste.coudurier@gmail.com>\n *\n * This file is part of FFmpeg.\n *\n * FFmp"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/rational.h",
    "chars": 5842,
    "preview": "/*\n * rational numbers\n * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/rc4.h",
    "chars": 1882,
    "preview": "/*\n * RC4 encryption/decryption/pseudo-random number generator\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free s"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/replaygain.h",
    "chars": 1607,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/ripemd.h",
    "chars": 2165,
    "preview": "/*\n * Copyright (C) 2007 Michael Niedermayer <michaelni@gmx.at>\n * Copyright (C) 2013 James Almer <jamrial@gmail.com>\n *"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/samplefmt.h",
    "chars": 10318,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/sha.h",
    "chars": 2379,
    "preview": "/*\n * Copyright (C) 2007 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/sha512.h",
    "chars": 2420,
    "preview": "/*\n * Copyright (C) 2007 Michael Niedermayer <michaelni@gmx.at>\n * Copyright (C) 2013 James Almer <jamrial@gmail.com>\n *"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/stereo3d.h",
    "chars": 4137,
    "preview": "/*\n * Copyright (c) 2013 Vittorio Giovara <vittorio.giovara@gmail.com>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg i"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/tea.h",
    "chars": 2035,
    "preview": "/*\n * A 32-bit implementation of the TEA algorithm\n * Copyright (c) 2015 Vesselin Bontchev\n *\n * This file is part of FF"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/thread.h",
    "chars": 5325,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/threadmessage.h",
    "chars": 3666,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/time.h",
    "chars": 1800,
    "preview": "/*\n * Copyright (c) 2000-2003 Fabrice Bellard\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/timecode.h",
    "chars": 5323,
    "preview": "/*\n * Copyright (c) 2006 Smartjog S.A.S, Baptiste Coudurier <baptiste.coudurier@gmail.com>\n * Copyright (c) 2011-2012 Sm"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/timestamp.h",
    "chars": 2617,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/tree.h",
    "chars": 5429,
    "preview": "/*\n * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free "
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/twofish.h",
    "chars": 2245,
    "preview": "/*\n * An implementation of the TwoFish algorithm\n * Copyright (c) 2015 Supraja Meedinti\n *\n * This file is part of FFmpe"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/version.h",
    "chars": 4865,
    "preview": "/*\n * copyright (c) 2003 Fabrice Bellard\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redis"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/x86_64/avconfig.h",
    "chars": 170,
    "preview": "/* Generated by ffconf */\n#ifndef AVUTIL_AVCONFIG_H\n#define AVUTIL_AVCONFIG_H\n#define AV_HAVE_BIGENDIAN 0\n#define AV_HAV"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/x86_64/ffversion.h",
    "chars": 209,
    "preview": "/* Automatically generated by version.sh, do not manually edit! */\n#ifndef AVUTIL_FFVERSION_H\n#define AVUTIL_FFVERSION_H"
  },
  {
    "path": "3rParty/FFmpeg/include/libavutil/xtea.h",
    "chars": 2834,
    "preview": "/*\n * A 32-bit implementation of the XTEA algorithm\n * Copyright (c) 2012 Samuel Pitoiset\n *\n * This file is part of FFm"
  },
  {
    "path": "3rParty/FFmpeg/include/libffmpeg/arm64/config.h",
    "chars": 72551,
    "preview": "/* Automatically generated by configure - do not modify! */\n#ifndef FFMPEG_CONFIG_H\n#define FFMPEG_CONFIG_H\n#define FFMP"
  },
  {
    "path": "3rParty/FFmpeg/include/libffmpeg/armv7/config.h",
    "chars": 72551,
    "preview": "/* Automatically generated by configure - do not modify! */\n#ifndef FFMPEG_CONFIG_H\n#define FFMPEG_CONFIG_H\n#define FFMP"
  },
  {
    "path": "3rParty/FFmpeg/include/libffmpeg/config.h",
    "chars": 1406,
    "preview": "/*\n * config.h\n *\n * Copyright (c) 2013 Bilibili\n * Copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>\n *\n * This file is"
  },
  {
    "path": "3rParty/FFmpeg/include/libffmpeg/i386/config.h",
    "chars": 72490,
    "preview": "/* Automatically generated by configure - do not modify! */\n#ifndef FFMPEG_CONFIG_H\n#define FFMPEG_CONFIG_H\n#define FFMP"
  },
  {
    "path": "3rParty/FFmpeg/include/libffmpeg/x86_64/config.h",
    "chars": 72514,
    "preview": "/* Automatically generated by configure - do not modify! */\n#ifndef FFMPEG_CONFIG_H\n#define FFMPEG_CONFIG_H\n#define FFMP"
  },
  {
    "path": "3rParty/FFmpeg/include/libswresample/swresample.h",
    "chars": 21885,
    "preview": "/*\n * Copyright (C) 2011-2013 Michael Niedermayer (michaelni@gmx.at)\n *\n * This file is part of libswresample\n *\n * libs"
  },
  {
    "path": "3rParty/FFmpeg/include/libswresample/version.h",
    "chars": 1718,
    "preview": "/*\n * Version macros.\n *\n * This file is part of libswresample\n *\n * libswresample is free software; you can redistribut"
  },
  {
    "path": "3rParty/FFmpeg/include/libswscale/swscale.h",
    "chars": 12014,
    "preview": "/*\n * Copyright (C) 2001-2011 Michael Niedermayer <michaelni@gmx.at>\n *\n * This file is part of FFmpeg.\n *\n * FFmpeg is "
  },
  {
    "path": "3rParty/FFmpeg/include/libswscale/version.h",
    "chars": 1927,
    "preview": "/*\n * This file is part of FFmpeg.\n *\n * FFmpeg is free software; you can redistribute it and/or\n * modify it under the "
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/aes.h",
    "chars": 6146,
    "preview": "/* crypto/aes/aes.h */\n/* ====================================================================\n * Copyright (c) 1998-200"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/asn1.h",
    "chars": 63142,
    "preview": "/* crypto/asn1/asn1.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pa"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/asn1_mac.h",
    "chars": 24435,
    "preview": "/* crypto/asn1/asn1_mac.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * Thi"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/asn1t.h",
    "chars": 34475,
    "preview": "/* asn1t.h */\n/*\n * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project\n * 2000.\n */\n/* ========="
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/bio.h",
    "chars": 38745,
    "preview": "/* crypto/bio/bio.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pack"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/blowfish.h",
    "chars": 5351,
    "preview": "/* crypto/bf/blowfish.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This "
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/bn.h",
    "chars": 41277,
    "preview": "/* crypto/bn/bn.h */\n/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This packag"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/buffer.h",
    "chars": 5026,
    "preview": "/* crypto/buffer/buffer.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * Thi"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/camellia.h",
    "chars": 5565,
    "preview": "/* crypto/camellia/camellia.h */\n/* ====================================================================\n * Copyright (c"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/cast.h",
    "chars": 4659,
    "preview": "/* crypto/cast/cast.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pa"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/cmac.h",
    "chars": 3257,
    "preview": "/* crypto/cmac/cmac.h */\n/*\n * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL\n * project.\n */\n/* ==="
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/cms.h",
    "chars": 28641,
    "preview": "/* crypto/cms/cms.h */\n/*\n * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL\n * project.\n */\n/* ====="
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/comp.h",
    "chars": 2395,
    "preview": "\n#ifndef HEADER_COMP_H\n# define HEADER_COMP_H\n\n# include <openssl/crypto.h>\n\n# ifdef OPENSSL_NO_COMP\n#  error COMP is di"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/conf.h",
    "chars": 11256,
    "preview": "/* crypto/conf/conf.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pa"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/conf_api.h",
    "chars": 4147,
    "preview": "/* conf_api.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/crypto.h",
    "chars": 27667,
    "preview": "/* crypto/crypto.h */\n/* ====================================================================\n * Copyright (c) 1998-2006"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/des.h",
    "chars": 11913,
    "preview": "/* crypto/des/des.h */\n/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pack"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/des_old.h",
    "chars": 21486,
    "preview": "/* crypto/des/des_old.h */\n\n/*-\n * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING\n *\n * The function na"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/dh.h",
    "chars": 16180,
    "preview": "/* crypto/dh/dh.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This packag"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/dsa.h",
    "chars": 13662,
    "preview": "/* crypto/dsa/dsa.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pack"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/dso.h",
    "chars": 20210,
    "preview": "/* dso.h */\n/*\n * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project\n * 2000.\n */\n/* =============="
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/dtls1.h",
    "chars": 9046,
    "preview": "/* ssl/dtls1.h */\n/*\n * DTLS implementation written by Nagendra Modadugu\n * (nagendra@cs.stanford.edu) for the OpenSSL p"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/e_os2.h",
    "chars": 10945,
    "preview": "/* e_os2.h */\n/* ====================================================================\n * Copyright (c) 1998-2000 The Ope"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/ebcdic.h",
    "chars": 616,
    "preview": "/* crypto/ebcdic.h */\n\n#ifndef HEADER_EBCDIC_H\n# define HEADER_EBCDIC_H\n\n# include <sys/types.h>\n\n#ifdef  __cplusplus\nex"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/ec.h",
    "chars": 56134,
    "preview": "/* crypto/ec/ec.h */\n/*\n * Originally written by Bodo Moeller for the OpenSSL project.\n */\n/**\n * \\file crypto/ec/ec.h I"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/ecdh.h",
    "chars": 5191,
    "preview": "/* crypto/ecdh/ecdh.h */\n/* ====================================================================\n * Copyright 2002 Sun M"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/ecdsa.h",
    "chars": 14038,
    "preview": "/* crypto/ecdsa/ecdsa.h */\n/**\n * \\file   crypto/ecdsa/ecdsa.h Include file for the OpenSSL ECDSA functions\n * \\author W"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/engine.h",
    "chars": 44946,
    "preview": "/* openssl/engine.h */\n/*\n * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project\n * 2000.\n */\n/* ==="
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/err.h",
    "chars": 16776,
    "preview": "/* crypto/err/err.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pack"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/evp.h",
    "chars": 67798,
    "preview": "/* crypto/evp/evp.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pack"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/hmac.h",
    "chars": 4535,
    "preview": "/* crypto/hmac/hmac.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pa"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/idea.h",
    "chars": 4679,
    "preview": "/* crypto/idea/idea.h */\n/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pa"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/krb5_asn.h",
    "chars": 8165,
    "preview": "/* krb5_asn.h */\n/*\n * Written by Vern Staats <staatsvr@asc.hpc.mil> for the OpenSSL project, **\n * using ocsp/{*.h,*asn"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/kssl.h",
    "chars": 6853,
    "preview": "/* ssl/kssl.h */\n/*\n * Written by Vern Staats <staatsvr@asc.hpc.mil> for the OpenSSL project\n * 2000. project 2000.\n */\n"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/lhash.h",
    "chars": 9549,
    "preview": "/* crypto/lhash/lhash.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This "
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/md4.h",
    "chars": 4786,
    "preview": "/* crypto/md4/md4.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pack"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/md5.h",
    "chars": 4785,
    "preview": "/* crypto/md5/md5.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pack"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/mdc2.h",
    "chars": 3942,
    "preview": "/* crypto/mdc2/mdc2.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pa"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/modes.h",
    "chars": 8260,
    "preview": "/* ====================================================================\n * Copyright (c) 2008 The OpenSSL Project. All r"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/obj_mac.h",
    "chars": 175657,
    "preview": "/* crypto/objects/obj_mac.h */\n\n/*\n * THIS FILE IS GENERATED FROM objects.txt by objects.pl via the following\n * command"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/objects.h",
    "chars": 47564,
    "preview": "/* crypto/objects/objects.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * T"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/ocsp.h",
    "chars": 27147,
    "preview": "/* ocsp.h */\n/*\n * Written by Tom Titchener <Tom_Titchener@groove.net> for the OpenSSL\n * project.\n */\n\n/*\n * History: T"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/opensslconf.h",
    "chars": 7450,
    "preview": "/* opensslconf.h */\n/* WARNING: Generated automatically from opensslconf.h.in by Configure. */\n\n#ifdef  __cplusplus\nexte"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/opensslv.h",
    "chars": 3939,
    "preview": "#ifndef HEADER_OPENSSLV_H\n# define HEADER_OPENSSLV_H\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/*-\n * Numeric release ve"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/ossl_typ.h",
    "chars": 7788,
    "preview": "/* ====================================================================\n * Copyright (c) 1998-2001 The OpenSSL Project. "
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/pem.h",
    "chars": 25807,
    "preview": "/* crypto/pem/pem.h */\n/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pack"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/pem2.h",
    "chars": 2862,
    "preview": "/* ====================================================================\n * Copyright (c) 1999 The OpenSSL Project.  All "
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/pkcs12.h",
    "chars": 14839,
    "preview": "/* pkcs12.h */\n/*\n * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project\n * 1999.\n */\n/* ========"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/pkcs7.h",
    "chars": 20778,
    "preview": "/* crypto/pkcs7/pkcs7.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This "
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/pqueue.h",
    "chars": 3673,
    "preview": "/* crypto/pqueue/pqueue.h */\n/*\n * DTLS implementation written by Nagendra Modadugu\n * (nagendra@cs.stanford.edu) for th"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/rand.h",
    "chars": 5772,
    "preview": "/* crypto/rand/rand.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pa"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/rc2.h",
    "chars": 4546,
    "preview": "/* crypto/rc2/rc2.h */\n/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pack"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/rc4.h",
    "chars": 3807,
    "preview": "/* crypto/rc4/rc4.h */\n/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pack"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/ripemd.h",
    "chars": 4371,
    "preview": "/* crypto/ripemd/ripemd.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * Thi"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/rsa.h",
    "chars": 29735,
    "preview": "/* crypto/rsa/rsa.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pack"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/safestack.h",
    "chars": 202903,
    "preview": "/* ====================================================================\n * Copyright (c) 1999 The OpenSSL Project.  All "
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/seed.h",
    "chars": 6040,
    "preview": "/*\n * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved.\n *\n * Redistribution and use in s"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/sha.h",
    "chars": 7929,
    "preview": "/* crypto/sha/sha.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pack"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/srp.h",
    "chars": 5925,
    "preview": "/* crypto/srp/srp.h */\n/*\n * Written by Christophe Renou (christophe.renou@edelweb.fr) with the\n * precious help of Pete"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/srtp.h",
    "chars": 6638,
    "preview": "/* ssl/srtp.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/ssl.h",
    "chars": 149230,
    "preview": "/* ssl/ssl.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is "
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/ssl2.h",
    "chars": 12049,
    "preview": "/* ssl/ssl2.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/ssl23.h",
    "chars": 3789,
    "preview": "/* ssl/ssl23.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package i"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/ssl3.h",
    "chars": 33281,
    "preview": "/* ssl/ssl3.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/stack.h",
    "chars": 4532,
    "preview": "/* crypto/stack/stack.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This "
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/symhacks.h",
    "chars": 27694,
    "preview": "/* ====================================================================\n * Copyright (c) 1999 The OpenSSL Project.  All "
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/tls1.h",
    "chars": 39399,
    "preview": "/* ssl/tls1.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/ts.h",
    "chars": 34477,
    "preview": "/* crypto/ts/ts.h */\n/*\n * Written by Zoltan Glozik (zglozik@opentsa.org) for the OpenSSL project\n * 2002, 2003, 2004.\n "
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/txt_db.h",
    "chars": 4631,
    "preview": "/* crypto/txt_db/txt_db.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * Thi"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/ui.h",
    "chars": 18687,
    "preview": "/* crypto/ui/ui.h */\n/*\n * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project\n * 2001.\n */\n/* ===="
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/ui_compat.h",
    "chars": 3494,
    "preview": "/* crypto/ui/ui.h */\n/*\n * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project\n * 2001.\n */\n/* ===="
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/whrlpool.h",
    "chars": 1083,
    "preview": "#ifndef HEADER_WHRLPOOL_H\n# define HEADER_WHRLPOOL_H\n\n# include <openssl/e_os2.h>\n# include <stddef.h>\n\n#ifdef __cpluspl"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/x509.h",
    "chars": 53250,
    "preview": "/* crypto/x509/x509.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This pa"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/x509_vfy.h",
    "chars": 29023,
    "preview": "/* crypto/x509/x509_vfy.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * Thi"
  },
  {
    "path": "3rParty/FFmpeg/include/openssl/x509v3.h",
    "chars": 40389,
    "preview": "/* x509v3.h */\n/*\n * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project\n * 1999.\n */\n/* ========"
  },
  {
    "path": "3rParty/kxmovie/KxAudioManager.h",
    "chars": 1144,
    "preview": "//\n//  KxAudioManager.h\n//  kxmovie\n//\n//  Created by Kolyvan on 23.10.12.\n//  Copyright (c) 2012 Konstantin Boukreev . "
  },
  {
    "path": "3rParty/kxmovie/KxAudioManager.m",
    "chars": 18668,
    "preview": "//\n//  KxAudioManager.m\n//  kxmovie\n//\n//  Created by Kolyvan on 23.10.12.\n//  Copyright (c) 2012 Konstantin Boukreev . "
  },
  {
    "path": "3rParty/kxmovie/KxLogger.h",
    "chars": 940,
    "preview": "//\n//  KxLogger.h\n//  kxmovie\n//\n//  Created by Mathieu Godart on 01/05/2014.\n//\n//\n\n#ifndef kxmovie_KxLogger_h\n#define "
  }
]

// ... and 77 more files (download for full content)

About this extraction

This page contains the full source code of the iodefog/MVideo GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 277 files (113.0 MB), approximately 886.1k tokens, and a symbol index with 1004 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!