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 #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.
* 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, of what can be used without an underflow. * - encoding: Set by user. * - decoding: unused. */ float rc_max_available_vbv_use; /** * Ratecontrol attempt to use, at least, times the amount needed to prevent a vbv overflow. * - encoding: Set by user. * - decoding: unused. */ float rc_min_vbv_overflow_use; /** * Number of bits which should be loaded into the rc buffer before decoding starts. * - encoding: Set by user. * - decoding: unused */ int rc_initial_buffer_occupancy; #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(const AVBitStreamFilter *f); #endif /** * @return a bitstream filter with the specified name or NULL if no such * bitstream filter exists. */ const AVBitStreamFilter *av_bsf_get_by_name(const char *name); /** * Iterate over all registered bitstream filters. * * @param opaque a pointer where libavcodec will store the iteration state. Must * point to NULL to start the iteration. * * @return the next registered bitstream filter or NULL when the iteration is * finished */ const AVBitStreamFilter *av_bsf_next(void **opaque); /** * Allocate a context for a given bitstream filter. The caller must fill in the * context parameters as described in the documentation and then call * av_bsf_init() before sending any data to the filter. * * @param filter the filter for which to allocate an instance. * @param ctx a pointer into which the pointer to the newly-allocated context * will be written. It must be freed with av_bsf_free() after the * filtering is done. * * @return 0 on success, a negative AVERROR code on failure */ int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **ctx); /** * Prepare the filter for use, after all the parameters and options have been * set. */ int av_bsf_init(AVBSFContext *ctx); /** * Submit a packet for filtering. * * After sending each packet, the filter must be completely drained by calling * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or * AVERROR_EOF. * * @param pkt the packet to filter. pkt must contain some payload (i.e data or * side data must be present in pkt). The bitstream filter will take ownership of * the packet and reset the contents of pkt. pkt is not touched if an error occurs. * This parameter may be NULL, which signals the end of the stream (i.e. no more * packets will be sent). That will cause the filter to output any packets it * may have buffered internally. * * @return 0 on success, a negative AVERROR on error. */ int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt); /** * Retrieve a filtered packet. * * @param[out] pkt this struct will be filled with the contents of the filtered * packet. It is owned by the caller and must be freed using * av_packet_unref() when it is no longer needed. * This parameter should be "clean" (i.e. freshly allocated * with av_packet_alloc() or unreffed with av_packet_unref()) * when this function is called. If this function returns * successfully, the contents of pkt will be completely * overwritten by the returned data. On failure, pkt is not * touched. * * @return 0 on success. AVERROR(EAGAIN) if more packets need to be sent to the * filter (using av_bsf_send_packet()) to get more output. AVERROR_EOF if there * will be no further output from the filter. Another negative AVERROR value if * an error occurs. * * @note one input packet may result in several output packets, so after sending * a packet with av_bsf_send_packet(), this function needs to be called * repeatedly until it stops returning 0. It is also possible for a filter to * output fewer packets than were sent to it, so this function may return * AVERROR(EAGAIN) immediately after a successful av_bsf_send_packet() call. */ int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt); /** * Free a bitstream filter context and everything associated with it; write NULL * into the supplied pointer. */ void av_bsf_free(AVBSFContext **ctx); /** * Get the AVClass for AVBSFContext. It can be used in combination with * AV_OPT_SEARCH_FAKE_OBJ for examining options. * * @see av_opt_find(). */ const AVClass *av_bsf_get_class(void); /** * Structure for chain/list of bitstream filters. * Empty list can be allocated by av_bsf_list_alloc(). */ typedef struct AVBSFList AVBSFList; /** * Allocate empty list of bitstream filters. * The list must be later freed by av_bsf_list_free() * or finalized by av_bsf_list_finalize(). * * @return Pointer to @ref AVBSFList on success, NULL in case of failure */ AVBSFList *av_bsf_list_alloc(void); /** * Free list of bitstream filters. * * @param lst Pointer to pointer returned by av_bsf_list_alloc() */ void av_bsf_list_free(AVBSFList **lst); /** * Append bitstream filter to the list of bitstream filters. * * @param lst List to append to * @param bsf Filter context to be appended * * @return >=0 on success, negative AVERROR in case of failure */ int av_bsf_list_append(AVBSFList *lst, AVBSFContext *bsf); /** * Construct new bitstream filter context given it's name and options * and append it to the list of bitstream filters. * * @param lst List to append to * @param bsf_name Name of the bitstream filter * @param options Options for the bitstream filter, can be set to NULL * * @return >=0 on success, negative AVERROR in case of failure */ int av_bsf_list_append2(AVBSFList *lst, const char * bsf_name, AVDictionary **options); /** * Finalize list of bitstream filters. * * This function will transform @ref AVBSFList to single @ref AVBSFContext, * so the whole chain of bitstream filters can be treated as single filter * freshly allocated by av_bsf_alloc(). * If the call is successful, @ref AVBSFList structure is freed and lst * will be set to NULL. In case of failure, caller is responsible for * freeing the structure by av_bsf_list_free() * * @param lst Filter list structure to be transformed * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure * representing the chain of bitstream filters * * @return >=0 on success, negative AVERROR in case of failure */ int av_bsf_list_finalize(AVBSFList **lst, AVBSFContext **bsf); /** * Parse string describing list of bitstream filters and create single * @ref AVBSFContext describing the whole chain of bitstream filters. * Resulting @ref AVBSFContext can be treated as any other @ref AVBSFContext freshly * allocated by av_bsf_alloc(). * * @param str String describing chain of bitstream filters in format * `bsf1[=opt1=val1:opt2=val2][,bsf2]` * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure * representing the chain of bitstream filters * * @return >=0 on success, negative AVERROR in case of failure */ int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf); /** * Get null/pass-through bitstream filter. * * @param[out] bsf Pointer to be set to new instance of pass-through bitstream filter * * @return */ int av_bsf_get_null_filter(AVBSFContext **bsf); /* memory */ /** * Same behaviour av_fast_malloc but the buffer has additional * AV_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0. * * In addition the whole buffer will initially and after resizes * be 0-initialized so that no uninitialized data will ever appear. */ void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size); /** * Same behaviour av_fast_padded_malloc except that buffer will always * be 0-initialized after call. */ void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size); /** * Encode extradata length to a buffer. Used by xiph codecs. * * @param s buffer to write to; must be at least (v/255+1) bytes long * @param v size of extradata in bytes * @return number of bytes written to the buffer. */ unsigned int av_xiphlacing(unsigned char *s, unsigned int v); #if FF_API_MISSING_SAMPLE /** * Log a generic warning message about a missing feature. This function is * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.) * only, and would normally not be used by applications. * @param[in] avc a pointer to an arbitrary struct of which the first field is * a pointer to an AVClass struct * @param[in] feature string containing the name of the missing feature * @param[in] want_sample indicates if samples are wanted which exhibit this feature. * If want_sample is non-zero, additional verbiage will be added to the log * message which tells the user how to report samples to the development * mailing list. * @deprecated Use avpriv_report_missing_feature() instead. */ attribute_deprecated void av_log_missing_feature(void *avc, const char *feature, int want_sample); /** * Log a generic warning message asking for a sample. This function is * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.) * only, and would normally not be used by applications. * @param[in] avc a pointer to an arbitrary struct of which the first field is * a pointer to an AVClass struct * @param[in] msg string containing an optional message, or NULL if no message * @deprecated Use avpriv_request_sample() instead. */ attribute_deprecated void av_log_ask_for_sample(void *avc, const char *msg, ...) av_printf_format(2, 3); #endif /* FF_API_MISSING_SAMPLE */ /** * Register the hardware accelerator hwaccel. */ void av_register_hwaccel(AVHWAccel *hwaccel); /** * If hwaccel is NULL, returns the first registered hardware accelerator, * if hwaccel is non-NULL, returns the next registered hardware accelerator * after hwaccel, or NULL if hwaccel is the last one. */ AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel); /** * Lock operation used by lockmgr */ enum AVLockOp { AV_LOCK_CREATE, ///< Create a mutex AV_LOCK_OBTAIN, ///< Lock the mutex AV_LOCK_RELEASE, ///< Unlock the mutex AV_LOCK_DESTROY, ///< Free mutex resources }; /** * Register a user provided lock manager supporting the operations * specified by AVLockOp. The "mutex" argument to the function points * to a (void *) where the lockmgr should store/get a pointer to a user * allocated mutex. It is NULL upon AV_LOCK_CREATE and equal to the * value left by the last call for all other ops. If the lock manager is * unable to perform the op then it should leave the mutex in the same * state as when it was called and return a non-zero value. However, * when called with AV_LOCK_DESTROY the mutex will always be assumed to * have been successfully destroyed. If av_lockmgr_register succeeds * it will return a non-negative value, if it fails it will return a * negative value and destroy all mutex and unregister all callbacks. * av_lockmgr_register is not thread-safe, it must be called from a * single thread before any calls which make use of locking are used. * * @param cb User defined callback. av_lockmgr_register invokes calls * to this callback and the previously registered callback. * The callback will be used to create more than one mutex * each of which must be backed by its own underlying locking * mechanism (i.e. do not use a single static object to * implement your lock manager). If cb is set to NULL the * lockmgr will be unregistered. */ int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)); /** * Get the type of the given codec. */ enum AVMediaType avcodec_get_type(enum AVCodecID codec_id); /** * Get the name of a codec. * @return a static string identifying the codec; never NULL */ const char *avcodec_get_name(enum AVCodecID id); /** * @return a positive value if s is open (i.e. avcodec_open2() was called on it * with no corresponding avcodec_close()), 0 otherwise. */ int avcodec_is_open(AVCodecContext *s); /** * @return a non-zero number if codec is an encoder, zero otherwise */ int av_codec_is_encoder(const AVCodec *codec); /** * @return a non-zero number if codec is a decoder, zero otherwise */ int av_codec_is_decoder(const AVCodec *codec); /** * @return descriptor for given codec ID or NULL if no descriptor exists. */ const AVCodecDescriptor *avcodec_descriptor_get(enum AVCodecID id); /** * Iterate over all codec descriptors known to libavcodec. * * @param prev previous descriptor. NULL to get the first descriptor. * * @return next descriptor or NULL after the last descriptor */ const AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev); /** * @return codec descriptor with the given name or NULL if no such descriptor * exists. */ const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name); /** * Allocate a CPB properties structure and initialize its fields to default * values. * * @param size if non-NULL, the size of the allocated struct will be written * here. This is useful for embedding it in side data. * * @return the newly allocated struct or NULL on failure */ AVCPBProperties *av_cpb_properties_alloc(size_t *size); /** * @} */ #endif /* AVCODEC_AVCODEC_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavcodec/avdct.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVCODEC_AVDCT_H #define AVCODEC_AVDCT_H #include "libavutil/opt.h" /** * AVDCT context. * @note function pointers can be NULL if the specific features have been * disabled at build time. */ typedef struct AVDCT { const AVClass *av_class; void (*idct)(int16_t *block /* align 16 */); /** * IDCT input permutation. * Several optimized IDCTs need a permutated input (relative to the * normal order of the reference IDCT). * This permutation must be performed before the idct_put/add. * Note, normally this can be merged with the zigzag/alternate scan
* An example to avoid confusion: * - (->decode coeffs -> zigzag reorder -> dequant -> reference IDCT -> ...) * - (x -> reference DCT -> reference IDCT -> x) * - (x -> reference DCT -> simple_mmx_perm = idct_permutation * -> simple_idct_mmx -> x) * - (-> decode coeffs -> zigzag reorder -> simple_mmx_perm -> dequant * -> simple_idct_mmx -> ...) */ uint8_t idct_permutation[64]; void (*fdct)(int16_t *block /* align 16 */); /** * DCT algorithm. * must use AVOptions to set this field. */ int dct_algo; /** * IDCT algorithm. * must use AVOptions to set this field. */ int idct_algo; void (*get_pixels)(int16_t *block /* align 16 */, const uint8_t *pixels /* align 8 */, ptrdiff_t line_size); int bits_per_sample; } AVDCT; /** * Allocates a AVDCT context. * This needs to be initialized with avcodec_dct_init() after optionally * configuring it with AVOptions. * * To free it use av_free() */ AVDCT *avcodec_dct_alloc(void); int avcodec_dct_init(AVDCT *); const AVClass *avcodec_dct_get_class(void); #endif /* AVCODEC_AVDCT_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavcodec/avfft.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVCODEC_AVFFT_H #define AVCODEC_AVFFT_H /** * @file * @ingroup lavc_fft * FFT functions */ /** * @defgroup lavc_fft FFT functions * @ingroup lavc_misc * * @{ */ typedef float FFTSample; typedef struct FFTComplex { FFTSample re, im; } FFTComplex; typedef struct FFTContext FFTContext; /** * Set up a complex FFT. * @param nbits log2 of the length of the input array * @param inverse if 0 perform the forward transform, if 1 perform the inverse */ FFTContext *av_fft_init(int nbits, int inverse); /** * Do the permutation needed BEFORE calling ff_fft_calc(). */ void av_fft_permute(FFTContext *s, FFTComplex *z); /** * Do a complex FFT with the parameters defined in av_fft_init(). The * input data must be permuted before. No 1.0/sqrt(n) normalization is done. */ void av_fft_calc(FFTContext *s, FFTComplex *z); void av_fft_end(FFTContext *s); FFTContext *av_mdct_init(int nbits, int inverse, double scale); void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input); void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input); void av_mdct_end(FFTContext *s); /* Real Discrete Fourier Transform */ enum RDFTransformType { DFT_R2C, IDFT_C2R, IDFT_R2C, DFT_C2R, }; typedef struct RDFTContext RDFTContext; /** * Set up a real FFT. * @param nbits log2 of the length of the input array * @param trans the type of transform */ RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans); void av_rdft_calc(RDFTContext *s, FFTSample *data); void av_rdft_end(RDFTContext *s); /* Discrete Cosine Transform */ typedef struct DCTContext DCTContext; enum DCTTransformType { DCT_II = 0, DCT_III, DCT_I, DST_I, }; /** * Set up DCT. * * @param nbits size of the input array: * (1 << nbits) for DCT-II, DCT-III and DST-I * (1 << nbits) + 1 for DCT-I * @param type the type of transform * * @note the first element of the input of DST-I is ignored */ DCTContext *av_dct_init(int nbits, enum DCTTransformType type); void av_dct_calc(DCTContext *s, FFTSample *data); void av_dct_end (DCTContext *s); /** * @} */ #endif /* AVCODEC_AVFFT_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavcodec/d3d11va.h ================================================ /* * Direct3D11 HW acceleration * * copyright (c) 2009 Laurent Aimar * copyright (c) 2015 Steve Lhomme * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVCODEC_D3D11VA_H #define AVCODEC_D3D11VA_H /** * @file * @ingroup lavc_codec_hwaccel_d3d11va * Public libavcodec D3D11VA header. */ #if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602 #undef _WIN32_WINNT #define _WIN32_WINNT 0x0602 #endif #include #include /** * @defgroup lavc_codec_hwaccel_d3d11va Direct3D11 * @ingroup lavc_codec_hwaccel * * @{ */ #define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for Direct3D11 and old UVD/UVD+ ATI video cards #define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 ///< Work around for Direct3D11 and old Intel GPUs with ClearVideo interface /** * This structure is used to provides the necessary configurations and data * to the Direct3D11 FFmpeg HWAccel implementation. * * The application must make it available as AVCodecContext.hwaccel_context. * * Use av_d3d11va_alloc_context() exclusively to allocate an AVD3D11VAContext. */ typedef struct AVD3D11VAContext { /** * D3D11 decoder object */ ID3D11VideoDecoder *decoder; /** * D3D11 VideoContext */ ID3D11VideoContext *video_context; /** * D3D11 configuration used to create the decoder */ D3D11_VIDEO_DECODER_CONFIG *cfg; /** * The number of surface in the surface array */ unsigned surface_count; /** * The array of Direct3D surfaces used to create the decoder */ ID3D11VideoDecoderOutputView **surface; /** * A bit field configuring the workarounds needed for using the decoder */ uint64_t workaround; /** * Private to the FFmpeg AVHWAccel implementation */ unsigned report_id; /** * Mutex to access video_context */ HANDLE context_mutex; } AVD3D11VAContext; /** * Allocate an AVD3D11VAContext. * * @return Newly-allocated AVD3D11VAContext or NULL on failure. */ AVD3D11VAContext *av_d3d11va_alloc_context(void); /** * @} */ #endif /* AVCODEC_D3D11VA_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavcodec/dirac.h ================================================ /* * Copyright (C) 2007 Marco Gerards * Copyright (C) 2009 David Conrad * Copyright (C) 2011 Jordi Ortiz * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVCODEC_DIRAC_H #define AVCODEC_DIRAC_H /** * @file * Interface to Dirac Decoder/Encoder * @author Marco Gerards * @author David Conrad * @author Jordi Ortiz */ #include "avcodec.h" /** * The spec limits the number of wavelet decompositions to 4 for both * level 1 (VC-2) and 128 (long-gop default). * 5 decompositions is the maximum before >16-bit buffers are needed. * Schroedinger allows this for DD 9,7 and 13,7 wavelets only, limiting * the others to 4 decompositions (or 3 for the fidelity filter). * * We use this instead of MAX_DECOMPOSITIONS to save some memory. */ #define MAX_DWT_LEVELS 5 /** * Parse code values: * * Dirac Specification -> * 9.6.1 Table 9.1 * * VC-2 Specification -> * 10.4.1 Table 10.1 */ enum DiracParseCodes { DIRAC_PCODE_SEQ_HEADER = 0x00, DIRAC_PCODE_END_SEQ = 0x10, DIRAC_PCODE_AUX = 0x20, DIRAC_PCODE_PAD = 0x30, DIRAC_PCODE_PICTURE_CODED = 0x08, DIRAC_PCODE_PICTURE_RAW = 0x48, DIRAC_PCODE_PICTURE_LOW_DEL = 0xC8, DIRAC_PCODE_PICTURE_HQ = 0xE8, DIRAC_PCODE_INTER_NOREF_CO1 = 0x0A, DIRAC_PCODE_INTER_NOREF_CO2 = 0x09, DIRAC_PCODE_INTER_REF_CO1 = 0x0D, DIRAC_PCODE_INTER_REF_CO2 = 0x0E, DIRAC_PCODE_INTRA_REF_CO = 0x0C, DIRAC_PCODE_INTRA_REF_RAW = 0x4C, DIRAC_PCODE_INTRA_REF_PICT = 0xCC, DIRAC_PCODE_MAGIC = 0x42424344, }; typedef struct DiracVersionInfo { int major; int minor; } DiracVersionInfo; typedef struct AVDiracSeqHeader { unsigned width; unsigned height; uint8_t chroma_format; ///< 0: 444 1: 422 2: 420 uint8_t interlaced; uint8_t top_field_first; uint8_t frame_rate_index; ///< index into dirac_frame_rate[] uint8_t aspect_ratio_index; ///< index into dirac_aspect_ratio[] uint16_t clean_width; uint16_t clean_height; uint16_t clean_left_offset; uint16_t clean_right_offset; uint8_t pixel_range_index; ///< index into dirac_pixel_range_presets[] uint8_t color_spec_index; ///< index into dirac_color_spec_presets[] int profile; int level; AVRational framerate; AVRational sample_aspect_ratio; enum AVPixelFormat pix_fmt; enum AVColorRange color_range; enum AVColorPrimaries color_primaries; enum AVColorTransferCharacteristic color_trc; enum AVColorSpace colorspace; DiracVersionInfo version; int bit_depth; } AVDiracSeqHeader; /** * Parse a Dirac sequence header. * * @param dsh this function will allocate and fill an AVDiracSeqHeader struct * and write it into this pointer. The caller must free it with * av_free(). * @param buf the data buffer * @param buf_size the size of the data buffer in bytes * @param log_ctx if non-NULL, this function will log errors here * @return 0 on success, a negative AVERROR code on failure */ int av_dirac_parse_sequence_header(AVDiracSeqHeader **dsh, const uint8_t *buf, size_t buf_size, void *log_ctx); #endif /* AVCODEC_DIRAC_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavcodec/dv_profile.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVCODEC_DV_PROFILE_H #define AVCODEC_DV_PROFILE_H #include #include "libavutil/pixfmt.h" #include "libavutil/rational.h" #include "avcodec.h" /* minimum number of bytes to read from a DV stream in order to * determine the profile */ #define DV_PROFILE_BYTES (6 * 80) /* 6 DIF blocks */ /* * AVDVProfile is used to express the differences between various * DV flavors. For now it's primarily used for differentiating * 525/60 and 625/50, but the plans are to use it for various * DV specs as well (e.g. SMPTE314M vs. IEC 61834). */ typedef struct AVDVProfile { int dsf; /* value of the dsf in the DV header */ int video_stype; /* stype for VAUX source pack */ int frame_size; /* total size of one frame in bytes */ int difseg_size; /* number of DIF segments per DIF channel */ int n_difchan; /* number of DIF channels per frame */ AVRational time_base; /* 1/framerate */ int ltc_divisor; /* FPS from the LTS standpoint */ int height; /* picture height in pixels */ int width; /* picture width in pixels */ AVRational sar[2]; /* sample aspect ratios for 4:3 and 16:9 */ enum AVPixelFormat pix_fmt; /* picture pixel format */ int bpm; /* blocks per macroblock */ const uint8_t *block_sizes; /* AC block sizes, in bits */ int audio_stride; /* size of audio_shuffle table */ int audio_min_samples[3]; /* min amount of audio samples */ /* for 48kHz, 44.1kHz and 32kHz */ int audio_samples_dist[5]; /* how many samples are supposed to be */ /* in each frame in a 5 frames window */ const uint8_t (*audio_shuffle)[9]; /* PCM shuffling table */ } AVDVProfile; /** * Get a DV profile for the provided compressed frame. * * @param sys the profile used for the previous frame, may be NULL * @param frame the compressed data buffer * @param buf_size size of the buffer in bytes * @return the DV profile for the supplied data or NULL on failure */ const AVDVProfile *av_dv_frame_profile(const AVDVProfile *sys, const uint8_t *frame, unsigned buf_size); /** * Get a DV profile for the provided stream parameters. */ const AVDVProfile *av_dv_codec_profile(int width, int height, enum AVPixelFormat pix_fmt); /** * Get a DV profile for the provided stream parameters. * The frame rate is used as a best-effort parameter. */ const AVDVProfile *av_dv_codec_profile2(int width, int height, enum AVPixelFormat pix_fmt, AVRational frame_rate); #endif /* AVCODEC_DV_PROFILE_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavcodec/dxva2.h ================================================ /* * DXVA2 HW acceleration * * copyright (c) 2009 Laurent Aimar * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVCODEC_DXVA2_H #define AVCODEC_DXVA2_H /** * @file * @ingroup lavc_codec_hwaccel_dxva2 * Public libavcodec DXVA2 header. */ #if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602 #undef _WIN32_WINNT #define _WIN32_WINNT 0x0602 #endif #include #include #include /** * @defgroup lavc_codec_hwaccel_dxva2 DXVA2 * @ingroup lavc_codec_hwaccel * * @{ */ #define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for DXVA2 and old UVD/UVD+ ATI video cards #define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 ///< Work around for DXVA2 and old Intel GPUs with ClearVideo interface /** * This structure is used to provides the necessary configurations and data * to the DXVA2 FFmpeg HWAccel implementation. * * The application must make it available as AVCodecContext.hwaccel_context. */ struct dxva_context { /** * DXVA2 decoder object */ IDirectXVideoDecoder *decoder; /** * DXVA2 configuration used to create the decoder */ const DXVA2_ConfigPictureDecode *cfg; /** * The number of surface in the surface array */ unsigned surface_count; /** * The array of Direct3D surfaces used to create the decoder */ LPDIRECT3DSURFACE9 *surface; /** * A bit field configuring the workarounds needed for using the decoder */ uint64_t workaround; /** * Private to the FFmpeg AVHWAccel implementation */ unsigned report_id; }; /** * @} */ #endif /* AVCODEC_DXVA2_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavcodec/jni.h ================================================ /* * JNI public API functions * * Copyright (c) 2015-2016 Matthieu Bouron * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVCODEC_JNI_H #define AVCODEC_JNI_H /* * Manually set a Java virtual machine which will be used to retrieve the JNI * environment. Once a Java VM is set it cannot be changed afterwards, meaning * you can call multiple times av_jni_set_java_vm with the same Java VM pointer * however it will error out if you try to set a different Java VM. * * @param vm Java virtual machine * @param log_ctx context used for logging, can be NULL * @return 0 on success, < 0 otherwise */ int av_jni_set_java_vm(void *vm, void *log_ctx); /* * Get the Java virtual machine which has been set with av_jni_set_java_vm. * * @param vm Java virtual machine * @return a pointer to the Java virtual machine */ void *av_jni_get_java_vm(void *log_ctx); #endif /* AVCODEC_JNI_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavcodec/mediacodec.h ================================================ /* * Android MediaCodec public API * * Copyright (c) 2016 Matthieu Bouron * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVCODEC_MEDIACODEC_H #define AVCODEC_MEDIACODEC_H #include "libavcodec/avcodec.h" /** * This structure holds a reference to a android/view/Surface object that will * be used as output by the decoder. * */ typedef struct AVMediaCodecContext { /** * android/view/Surface object reference. */ void *surface; } AVMediaCodecContext; /** * Allocate and initialize a MediaCodec context. * * When decoding with MediaCodec is finished, the caller must free the * MediaCodec context with av_mediacodec_default_free. * * @return a pointer to a newly allocated AVMediaCodecContext on success, NULL otherwise */ AVMediaCodecContext *av_mediacodec_alloc_context(void); /** * Convenience function that sets up the MediaCodec context. * * @param avctx codec context * @param ctx MediaCodec context to initialize * @param surface reference to an android/view/Surface * @return 0 on success, < 0 otherwise */ int av_mediacodec_default_init(AVCodecContext *avctx, AVMediaCodecContext *ctx, void *surface); /** * This function must be called to free the MediaCodec context initialized with * av_mediacodec_default_init(). * * @param avctx codec context */ void av_mediacodec_default_free(AVCodecContext *avctx); /** * Opaque structure representing a MediaCodec buffer to render. */ typedef struct MediaCodecBuffer AVMediaCodecBuffer; /** * Release a MediaCodec buffer and render it to the surface that is associated * with the decoder. This function should only be called once on a given * buffer, once released the underlying buffer returns to the codec, thus * subsequent calls to this function will have no effect. * * @param buffer the buffer to render * @param render 1 to release and render the buffer to the surface or 0 to * discard the buffer * @return 0 on success, < 0 otherwise */ int av_mediacodec_release_buffer(AVMediaCodecBuffer *buffer, int render); #endif /* AVCODEC_MEDIACODEC_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavcodec/qsv.h ================================================ /* * Intel MediaSDK QSV public API * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVCODEC_QSV_H #define AVCODEC_QSV_H #include #include "libavutil/buffer.h" /** * This struct is used for communicating QSV parameters between libavcodec and * the caller. It is managed by the caller and must be assigned to * AVCodecContext.hwaccel_context. * - decoding: hwaccel_context must be set on return from the get_format() * callback * - encoding: hwaccel_context must be set before avcodec_open2() */ typedef struct AVQSVContext { /** * If non-NULL, the session to use for encoding or decoding. * Otherwise, libavcodec will try to create an internal session. */ mfxSession session; /** * The IO pattern to use. */ int iopattern; /** * Extra buffers to pass to encoder or decoder initialization. */ mfxExtBuffer **ext_buffers; int nb_ext_buffers; /** * Encoding only. If this field is set to non-zero by the caller, libavcodec * will create an mfxExtOpaqueSurfaceAlloc extended buffer and pass it to * the encoder initialization. This only makes sense if iopattern is also * set to MFX_IOPATTERN_IN_OPAQUE_MEMORY. * * The number of allocated opaque surfaces will be the sum of the number * required by the encoder and the user-provided value nb_opaque_surfaces. * The array of the opaque surfaces will be exported to the caller through * the opaque_surfaces field. */ int opaque_alloc; /** * Encoding only, and only if opaque_alloc is set to non-zero. Before * calling avcodec_open2(), the caller should set this field to the number * of extra opaque surfaces to allocate beyond what is required by the * encoder. * * On return from avcodec_open2(), this field will be set by libavcodec to * the total number of allocated opaque surfaces. */ int nb_opaque_surfaces; /** * Encoding only, and only if opaque_alloc is set to non-zero. On return * from avcodec_open2(), this field will be used by libavcodec to export the * array of the allocated opaque surfaces to the caller, so they can be * passed to other parts of the pipeline. * * The buffer reference exported here is owned and managed by libavcodec, * the callers should make their own reference with av_buffer_ref() and free * it with av_buffer_unref() when it is no longer needed. * * The buffer data is an nb_opaque_surfaces-sized array of mfxFrameSurface1. */ AVBufferRef *opaque_surfaces; /** * Encoding only, and only if opaque_alloc is set to non-zero. On return * from avcodec_open2(), this field will be set to the surface type used in * the opaque allocation request. */ int opaque_alloc_type; } AVQSVContext; /** * Allocate a new context. * * It must be freed by the caller with av_free(). */ AVQSVContext *av_qsv_alloc_context(void); #endif /* AVCODEC_QSV_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavcodec/vaapi.h ================================================ /* * Video Acceleration API (shared data between FFmpeg and the video player) * HW decode acceleration for MPEG-2, MPEG-4, H.264 and VC-1 * * Copyright (C) 2008-2009 Splitted-Desktop Systems * * 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_VAAPI_H #define AVCODEC_VAAPI_H /** * @file * @ingroup lavc_codec_hwaccel_vaapi * Public libavcodec VA API header. */ #include #include "libavutil/attributes.h" #include "version.h" /** * @defgroup lavc_codec_hwaccel_vaapi VA API Decoding * @ingroup lavc_codec_hwaccel * @{ */ /** * This structure is used to share data between the FFmpeg library and * the client video application. * This shall be zero-allocated and available as * AVCodecContext.hwaccel_context. All user members can be set once * during initialization or through each AVCodecContext.get_buffer() * function call. In any case, they must be valid prior to calling * decoding functions. */ struct vaapi_context { /** * Window system dependent data * * - encoding: unused * - decoding: Set by user */ void *display; /** * Configuration ID * * - encoding: unused * - decoding: Set by user */ uint32_t config_id; /** * Context ID (video decode pipeline) * * - encoding: unused * - decoding: Set by user */ uint32_t context_id; #if FF_API_VAAPI_CONTEXT /** * VAPictureParameterBuffer ID * * - encoding: unused * - decoding: Set by libavcodec */ attribute_deprecated uint32_t pic_param_buf_id; /** * VAIQMatrixBuffer ID * * - encoding: unused * - decoding: Set by libavcodec */ attribute_deprecated uint32_t iq_matrix_buf_id; /** * VABitPlaneBuffer ID (for VC-1 decoding) * * - encoding: unused * - decoding: Set by libavcodec */ attribute_deprecated uint32_t bitplane_buf_id; /** * Slice parameter/data buffer IDs * * - encoding: unused * - decoding: Set by libavcodec */ attribute_deprecated uint32_t *slice_buf_ids; /** * Number of effective slice buffer IDs to send to the HW * * - encoding: unused * - decoding: Set by libavcodec */ attribute_deprecated unsigned int n_slice_buf_ids; /** * Size of pre-allocated slice_buf_ids * * - encoding: unused * - decoding: Set by libavcodec */ attribute_deprecated unsigned int slice_buf_ids_alloc; /** * Pointer to VASliceParameterBuffers * * - encoding: unused * - decoding: Set by libavcodec */ attribute_deprecated void *slice_params; /** * Size of a VASliceParameterBuffer element * * - encoding: unused * - decoding: Set by libavcodec */ attribute_deprecated unsigned int slice_param_size; /** * Size of pre-allocated slice_params * * - encoding: unused * - decoding: Set by libavcodec */ attribute_deprecated unsigned int slice_params_alloc; /** * Number of slices currently filled in * * - encoding: unused * - decoding: Set by libavcodec */ attribute_deprecated unsigned int slice_count; /** * Pointer to slice data buffer base * - encoding: unused * - decoding: Set by libavcodec */ attribute_deprecated const uint8_t *slice_data; /** * Current size of slice data * * - encoding: unused * - decoding: Set by libavcodec */ attribute_deprecated uint32_t slice_data_size; #endif }; /* @} */ #endif /* AVCODEC_VAAPI_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavcodec/vda.h ================================================ /* * VDA HW acceleration * * copyright (c) 2011 Sebastien Zwickert * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVCODEC_VDA_H #define AVCODEC_VDA_H /** * @file * @ingroup lavc_codec_hwaccel_vda * Public libavcodec VDA header. */ #include "libavcodec/avcodec.h" #include // emmintrin.h is unable to compile with -std=c99 -Werror=missing-prototypes // http://openradar.appspot.com/8026390 #undef __GNUC_STDC_INLINE__ #define Picture QuickdrawPicture #include #undef Picture #include "libavcodec/version.h" // extra flags not defined in VDADecoder.h enum { kVDADecodeInfo_Asynchronous = 1UL << 0, kVDADecodeInfo_FrameDropped = 1UL << 1 }; /** * @defgroup lavc_codec_hwaccel_vda VDA * @ingroup lavc_codec_hwaccel * * @{ */ /** * This structure is used to provide the necessary configurations and data * to the VDA FFmpeg HWAccel implementation. * * The application must make it available as AVCodecContext.hwaccel_context. */ struct vda_context { /** * VDA decoder object. * * - encoding: unused * - decoding: Set/Unset by libavcodec. */ VDADecoder decoder; /** * The Core Video pixel buffer that contains the current image data. * * encoding: unused * decoding: Set by libavcodec. Unset by user. */ CVPixelBufferRef cv_buffer; /** * Use the hardware decoder in synchronous mode. * * encoding: unused * decoding: Set by user. */ int use_sync_decoding; /** * The frame width. * * - encoding: unused * - decoding: Set/Unset by user. */ int width; /** * The frame height. * * - encoding: unused * - decoding: Set/Unset by user. */ int height; /** * The frame format. * * - encoding: unused * - decoding: Set/Unset by user. */ int format; /** * The pixel format for output image buffers. * * - encoding: unused * - decoding: Set/Unset by user. */ OSType cv_pix_fmt_type; /** * unused */ uint8_t *priv_bitstream; /** * unused */ int priv_bitstream_size; /** * unused */ int priv_allocated_size; /** * Use av_buffer to manage buffer. * When the flag is set, the CVPixelBuffers returned by the decoder will * be released automatically, so you have to retain them if necessary. * Not setting this flag may cause memory leak. * * encoding: unused * decoding: Set by user. */ int use_ref_buffer; }; /** Create the video decoder. */ int ff_vda_create_decoder(struct vda_context *vda_ctx, uint8_t *extradata, int extradata_size); /** Destroy the video decoder. */ int ff_vda_destroy_decoder(struct vda_context *vda_ctx); /** * This struct holds all the information that needs to be passed * between the caller and libavcodec for initializing VDA decoding. * Its size is not a part of the public ABI, it must be allocated with * av_vda_alloc_context() and freed with av_free(). */ typedef struct AVVDAContext { /** * VDA decoder object. Created and freed by the caller. */ VDADecoder decoder; /** * The output callback that must be passed to VDADecoderCreate. * Set by av_vda_alloc_context(). */ VDADecoderOutputCallback output_callback; /** * CVPixelBuffer Format Type that VDA will use for decoded frames; set by * the caller. */ OSType cv_pix_fmt_type; } AVVDAContext; /** * Allocate and initialize a VDA context. * * This function should be called from the get_format() callback when the caller * selects the AV_PIX_FMT_VDA format. The caller must then create the decoder * object (using the output callback provided by libavcodec) that will be used * for VDA-accelerated decoding. * * When decoding with VDA is finished, the caller must destroy the decoder * object and free the VDA context using av_free(). * * @return the newly allocated context or NULL on failure */ AVVDAContext *av_vda_alloc_context(void); /** * This is a convenience function that creates and sets up the VDA context using * an internal implementation. * * @param avctx the corresponding codec context * * @return >= 0 on success, a negative AVERROR code on failure */ int av_vda_default_init(AVCodecContext *avctx); /** * This is a convenience function that creates and sets up the VDA context using * an internal implementation. * * @param avctx the corresponding codec context * @param vdactx the VDA context to use * * @return >= 0 on success, a negative AVERROR code on failure */ int av_vda_default_init2(AVCodecContext *avctx, AVVDAContext *vdactx); /** * This function must be called to free the VDA context initialized with * av_vda_default_init(). * * @param avctx the corresponding codec context */ void av_vda_default_free(AVCodecContext *avctx); /** * @} */ #endif /* AVCODEC_VDA_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavcodec/vdpau.h ================================================ /* * The Video Decode and Presentation API for UNIX (VDPAU) is used for * hardware-accelerated decoding of MPEG-1/2, H.264 and VC-1. * * Copyright (C) 2008 NVIDIA * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVCODEC_VDPAU_H #define AVCODEC_VDPAU_H /** * @file * @ingroup lavc_codec_hwaccel_vdpau * Public libavcodec VDPAU header. */ /** * @defgroup lavc_codec_hwaccel_vdpau VDPAU Decoder and Renderer * @ingroup lavc_codec_hwaccel * * VDPAU hardware acceleration has two modules * - VDPAU decoding * - VDPAU presentation * * The VDPAU decoding module parses all headers using FFmpeg * parsing mechanisms and uses VDPAU for the actual decoding. * * As per the current implementation, the actual decoding * and rendering (API calls) are done as part of the VDPAU * presentation (vo_vdpau.c) module. * * @{ */ #include #include #include "libavutil/avconfig.h" #include "libavutil/attributes.h" #include "avcodec.h" #include "version.h" #if FF_API_BUFS_VDPAU union AVVDPAUPictureInfo { VdpPictureInfoH264 h264; VdpPictureInfoMPEG1Or2 mpeg; VdpPictureInfoVC1 vc1; VdpPictureInfoMPEG4Part2 mpeg4; }; #endif struct AVCodecContext; struct AVFrame; typedef int (*AVVDPAU_Render2)(struct AVCodecContext *, struct AVFrame *, const VdpPictureInfo *, uint32_t, const VdpBitstreamBuffer *); /** * This structure is used to share data between the libavcodec library and * the client video application. * The user shall allocate the structure via the av_alloc_vdpau_hwaccel * function and make it available as * AVCodecContext.hwaccel_context. Members can be set by the user once * during initialization or through each AVCodecContext.get_buffer() * function call. In any case, they must be valid prior to calling * decoding functions. * * The size of this structure is not a part of the public ABI and must not * be used outside of libavcodec. Use av_vdpau_alloc_context() to allocate an * AVVDPAUContext. */ typedef struct AVVDPAUContext { /** * VDPAU decoder handle * * Set by user. */ VdpDecoder decoder; /** * VDPAU decoder render callback * * Set by the user. */ VdpDecoderRender *render; #if FF_API_BUFS_VDPAU /** * VDPAU picture information * * Set by libavcodec. */ attribute_deprecated union AVVDPAUPictureInfo info; /** * Allocated size of the bitstream_buffers table. * * Set by libavcodec. */ attribute_deprecated int bitstream_buffers_allocated; /** * Useful bitstream buffers in the bitstream buffers table. * * Set by libavcodec. */ attribute_deprecated int bitstream_buffers_used; /** * Table of bitstream buffers. * The user is responsible for freeing this buffer using av_freep(). * * Set by libavcodec. */ attribute_deprecated VdpBitstreamBuffer *bitstream_buffers; #endif AVVDPAU_Render2 render2; } AVVDPAUContext; /** * @brief allocation function for AVVDPAUContext * * Allows extending the struct without breaking API/ABI */ AVVDPAUContext *av_alloc_vdpaucontext(void); AVVDPAU_Render2 av_vdpau_hwaccel_get_render2(const AVVDPAUContext *); void av_vdpau_hwaccel_set_render2(AVVDPAUContext *, AVVDPAU_Render2); /** * Associate a VDPAU device with a codec context for hardware acceleration. * This function is meant to be called from the get_format() codec callback, * or earlier. It can also be called after avcodec_flush_buffers() to change * the underlying VDPAU device mid-stream (e.g. to recover from non-transparent * display preemption). * * @note get_format() must return AV_PIX_FMT_VDPAU if this function completes * successfully. * * @param avctx decoding context whose get_format() callback is invoked * @param device VDPAU device handle to use for hardware acceleration * @param get_proc_address VDPAU device driver * @param flags zero of more OR'd AV_HWACCEL_FLAG_* flags * * @return 0 on success, an AVERROR code on failure. */ int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device, VdpGetProcAddress *get_proc_address, unsigned flags); /** * Gets the parameters to create an adequate VDPAU video surface for the codec * context using VDPAU hardware decoding acceleration. * * @note Behavior is undefined if the context was not successfully bound to a * VDPAU device using av_vdpau_bind_context(). * * @param avctx the codec context being used for decoding the stream * @param type storage space for the VDPAU video surface chroma type * (or NULL to ignore) * @param width storage space for the VDPAU video surface pixel width * (or NULL to ignore) * @param height storage space for the VDPAU video surface pixel height * (or NULL to ignore) * * @return 0 on success, a negative AVERROR code on failure. */ int av_vdpau_get_surface_parameters(AVCodecContext *avctx, VdpChromaType *type, uint32_t *width, uint32_t *height); /** * Allocate an AVVDPAUContext. * * @return Newly-allocated AVVDPAUContext or NULL on failure. */ AVVDPAUContext *av_vdpau_alloc_context(void); #if FF_API_VDPAU_PROFILE /** * Get a decoder profile that should be used for initializing a VDPAU decoder. * Should be called from the AVCodecContext.get_format() callback. * * @deprecated Use av_vdpau_bind_context() instead. * * @param avctx the codec context being used for decoding the stream * @param profile a pointer into which the result will be written on success. * The contents of profile are undefined if this function returns * an error. * * @return 0 on success (non-negative), a negative AVERROR on failure. */ attribute_deprecated int av_vdpau_get_profile(AVCodecContext *avctx, VdpDecoderProfile *profile); #endif #if FF_API_CAP_VDPAU /** @brief The videoSurface is used for rendering. */ #define FF_VDPAU_STATE_USED_FOR_RENDER 1 /** * @brief The videoSurface is needed for reference/prediction. * The codec manipulates this. */ #define FF_VDPAU_STATE_USED_FOR_REFERENCE 2 /** * @brief This structure is used as a callback between the FFmpeg * decoder (vd_) and presentation (vo_) module. * This is used for defining a video frame containing surface, * picture parameter, bitstream information etc which are passed * between the FFmpeg decoder and its clients. */ struct vdpau_render_state { VdpVideoSurface surface; ///< Used as rendered surface, never changed. int state; ///< Holds FF_VDPAU_STATE_* values. /** picture parameter information for all supported codecs */ union AVVDPAUPictureInfo info; /** Describe size/location of the compressed video data. Set to 0 when freeing bitstream_buffers. */ int bitstream_buffers_allocated; int bitstream_buffers_used; /** The user is responsible for freeing this buffer using av_freep(). */ VdpBitstreamBuffer *bitstream_buffers; }; #endif /* @}*/ #endif /* AVCODEC_VDPAU_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavcodec/version.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVCODEC_VERSION_H #define AVCODEC_VERSION_H /** * @file * @ingroup libavc * Libavcodec version macros. */ #include "libavutil/version.h" #define LIBAVCODEC_VERSION_MAJOR 57 #define LIBAVCODEC_VERSION_MINOR 64 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ LIBAVCODEC_VERSION_MICRO) #define LIBAVCODEC_VERSION AV_VERSION(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ LIBAVCODEC_VERSION_MICRO) #define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT #define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) /** * FF_API_* defines may be placed below to indicate public API that will be * dropped at a future version bump. The defines themselves are not part of * the public API and may change, break or disappear at any time. * * @note, when bumping the major version it is recommended to manually * disable each FF_API_* in its own commit instead of disabling them all * at once through the bump. This improves the git bisect-ability of the change. */ #ifndef FF_API_VIMA_DECODER #define FF_API_VIMA_DECODER (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_AUDIO_CONVERT #define FF_API_AUDIO_CONVERT (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_AVCODEC_RESAMPLE #define FF_API_AVCODEC_RESAMPLE FF_API_AUDIO_CONVERT #endif #ifndef FF_API_GETCHROMA #define FF_API_GETCHROMA (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_MISSING_SAMPLE #define FF_API_MISSING_SAMPLE (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_LOWRES #define FF_API_LOWRES (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_CAP_VDPAU #define FF_API_CAP_VDPAU (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_BUFS_VDPAU #define FF_API_BUFS_VDPAU (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_VOXWARE #define FF_API_VOXWARE (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_SET_DIMENSIONS #define FF_API_SET_DIMENSIONS (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_DEBUG_MV #define FF_API_DEBUG_MV (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_AC_VLC #define FF_API_AC_VLC (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_OLD_MSMPEG4 #define FF_API_OLD_MSMPEG4 (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_ASPECT_EXTENDED #define FF_API_ASPECT_EXTENDED (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_ARCH_ALPHA #define FF_API_ARCH_ALPHA (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_XVMC #define FF_API_XVMC (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_ERROR_RATE #define FF_API_ERROR_RATE (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_QSCALE_TYPE #define FF_API_QSCALE_TYPE (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_MB_TYPE #define FF_API_MB_TYPE (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_MAX_BFRAMES #define FF_API_MAX_BFRAMES (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_NEG_LINESIZES #define FF_API_NEG_LINESIZES (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_EMU_EDGE #define FF_API_EMU_EDGE (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_ARCH_SH4 #define FF_API_ARCH_SH4 (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_ARCH_SPARC #define FF_API_ARCH_SPARC (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_UNUSED_MEMBERS #define FF_API_UNUSED_MEMBERS (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_IDCT_XVIDMMX #define FF_API_IDCT_XVIDMMX (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_INPUT_PRESERVED #define FF_API_INPUT_PRESERVED (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_NORMALIZE_AQP #define FF_API_NORMALIZE_AQP (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_GMC #define FF_API_GMC (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_MV0 #define FF_API_MV0 (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_CODEC_NAME #define FF_API_CODEC_NAME (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_AFD #define FF_API_AFD (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_VISMV /* XXX: don't forget to drop the -vismv documentation */ #define FF_API_VISMV (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_AUDIOENC_DELAY #define FF_API_AUDIOENC_DELAY (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_VAAPI_CONTEXT #define FF_API_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 58) #endif #ifndef FF_API_AVCTX_TIMEBASE #define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_MPV_OPT #define FF_API_MPV_OPT (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_STREAM_CODEC_TAG #define FF_API_STREAM_CODEC_TAG (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_QUANT_BIAS #define FF_API_QUANT_BIAS (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_RC_STRATEGY #define FF_API_RC_STRATEGY (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_CODED_FRAME #define FF_API_CODED_FRAME (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_MOTION_EST #define FF_API_MOTION_EST (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_WITHOUT_PREFIX #define FF_API_WITHOUT_PREFIX (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_SIDEDATA_ONLY_PKT #define FF_API_SIDEDATA_ONLY_PKT (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_VDPAU_PROFILE #define FF_API_VDPAU_PROFILE (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_CONVERGENCE_DURATION #define FF_API_CONVERGENCE_DURATION (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_AVPICTURE #define FF_API_AVPICTURE (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_AVPACKET_OLD_API #define FF_API_AVPACKET_OLD_API (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_RTP_CALLBACK #define FF_API_RTP_CALLBACK (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_VBV_DELAY #define FF_API_VBV_DELAY (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_CODER_TYPE #define FF_API_CODER_TYPE (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_STAT_BITS #define FF_API_STAT_BITS (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_PRIVATE_OPT #define FF_API_PRIVATE_OPT (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_ASS_TIMING #define FF_API_ASS_TIMING (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_OLD_BSF #define FF_API_OLD_BSF (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_COPY_CONTEXT #define FF_API_COPY_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_GET_CONTEXT_DEFAULTS #define FF_API_GET_CONTEXT_DEFAULTS (LIBAVCODEC_VERSION_MAJOR < 59) #endif #ifndef FF_API_NVENC_OLD_NAME #define FF_API_NVENC_OLD_NAME (LIBAVCODEC_VERSION_MAJOR < 59) #endif #endif /* AVCODEC_VERSION_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavcodec/videotoolbox.h ================================================ /* * Videotoolbox hardware acceleration * * copyright (c) 2012 Sebastien Zwickert * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVCODEC_VIDEOTOOLBOX_H #define AVCODEC_VIDEOTOOLBOX_H /** * @file * @ingroup lavc_codec_hwaccel_videotoolbox * Public libavcodec Videotoolbox header. */ #include #define Picture QuickdrawPicture #include #undef Picture #include "libavcodec/avcodec.h" /** * This struct holds all the information that needs to be passed * between the caller and libavcodec for initializing Videotoolbox decoding. * Its size is not a part of the public ABI, it must be allocated with * av_videotoolbox_alloc_context() and freed with av_free(). */ typedef struct AVVideotoolboxContext { /** * Videotoolbox decompression session object. * Created and freed the caller. */ VTDecompressionSessionRef session; /** * The output callback that must be passed to the session. * Set by av_videottoolbox_default_init() */ VTDecompressionOutputCallback output_callback; /** * CVPixelBuffer Format Type that Videotoolbox will use for decoded frames. * set by the caller. */ OSType cv_pix_fmt_type; /** * CoreMedia Format Description that Videotoolbox will use to create the decompression session. * Set by the caller. */ CMVideoFormatDescriptionRef cm_fmt_desc; /** * CoreMedia codec type that Videotoolbox will use to create the decompression session. * Set by the caller. */ int cm_codec_type; } AVVideotoolboxContext; /** * Allocate and initialize a Videotoolbox context. * * This function should be called from the get_format() callback when the caller * selects the AV_PIX_FMT_VIDETOOLBOX format. The caller must then create * the decoder object (using the output callback provided by libavcodec) that * will be used for Videotoolbox-accelerated decoding. * * When decoding with Videotoolbox is finished, the caller must destroy the decoder * object and free the Videotoolbox context using av_free(). * * @return the newly allocated context or NULL on failure */ AVVideotoolboxContext *av_videotoolbox_alloc_context(void); /** * This is a convenience function that creates and sets up the Videotoolbox context using * an internal implementation. * * @param avctx the corresponding codec context * * @return >= 0 on success, a negative AVERROR code on failure */ int av_videotoolbox_default_init(AVCodecContext *avctx); /** * This is a convenience function that creates and sets up the Videotoolbox context using * an internal implementation. * * @param avctx the corresponding codec context * @param vtctx the Videotoolbox context to use * * @return >= 0 on success, a negative AVERROR code on failure */ int av_videotoolbox_default_init2(AVCodecContext *avctx, AVVideotoolboxContext *vtctx); /** * This function must be called to free the Videotoolbox context initialized with * av_videotoolbox_default_init(). * * @param avctx the corresponding codec context */ void av_videotoolbox_default_free(AVCodecContext *avctx); /** * @} */ #endif /* AVCODEC_VIDEOTOOLBOX_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavcodec/vorbis_parser.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * A public API for Vorbis parsing * * Determines the duration for each packet. */ #ifndef AVCODEC_VORBIS_PARSER_H #define AVCODEC_VORBIS_PARSER_H #include typedef struct AVVorbisParseContext AVVorbisParseContext; /** * Allocate and initialize the Vorbis parser using headers in the extradata. * * @param avctx codec context * @param s Vorbis parser context */ AVVorbisParseContext *av_vorbis_parse_init(const uint8_t *extradata, int extradata_size); /** * Free the parser and everything associated with it. */ void av_vorbis_parse_free(AVVorbisParseContext **s); #define VORBIS_FLAG_HEADER 0x00000001 #define VORBIS_FLAG_COMMENT 0x00000002 #define VORBIS_FLAG_SETUP 0x00000004 /** * Get the duration for a Vorbis packet. * * If @p flags is @c NULL, * special frames are considered invalid. * * @param s Vorbis parser context * @param buf buffer containing a Vorbis frame * @param buf_size size of the buffer * @param flags flags for special frames */ int av_vorbis_parse_frame_flags(AVVorbisParseContext *s, const uint8_t *buf, int buf_size, int *flags); /** * Get the duration for a Vorbis packet. * * @param s Vorbis parser context * @param buf buffer containing a Vorbis frame * @param buf_size size of the buffer */ int av_vorbis_parse_frame(AVVorbisParseContext *s, const uint8_t *buf, int buf_size); void av_vorbis_parse_reset(AVVorbisParseContext *s); #endif /* AVCODEC_VORBIS_PARSER_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavcodec/xvmc.h ================================================ /* * Copyright (C) 2003 Ivan Kalvachev * * 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_XVMC_H #define AVCODEC_XVMC_H /** * @file * @ingroup lavc_codec_hwaccel_xvmc * Public libavcodec XvMC header. */ #include #include "libavutil/attributes.h" #include "version.h" #include "avcodec.h" /** * @defgroup lavc_codec_hwaccel_xvmc XvMC * @ingroup lavc_codec_hwaccel * * @{ */ #define AV_XVMC_ID 0x1DC711C0 /**< special value to ensure that regular pixel routines haven't corrupted the struct the number is 1337 speak for the letters IDCT MCo (motion compensation) */ struct attribute_deprecated xvmc_pix_fmt { /** The field contains the special constant value AV_XVMC_ID. It is used as a test that the application correctly uses the API, and that there is no corruption caused by pixel routines. - application - set during initialization - libavcodec - unchanged */ int xvmc_id; /** Pointer to the block array allocated by XvMCCreateBlocks(). The array has to be freed by XvMCDestroyBlocks(). Each group of 64 values represents one data block of differential pixel information (in MoCo mode) or coefficients for IDCT. - application - set the pointer during initialization - libavcodec - fills coefficients/pixel data into the array */ short* data_blocks; /** Pointer to the macroblock description array allocated by XvMCCreateMacroBlocks() and freed by XvMCDestroyMacroBlocks(). - application - set the pointer during initialization - libavcodec - fills description data into the array */ XvMCMacroBlock* mv_blocks; /** Number of macroblock descriptions that can be stored in the mv_blocks array. - application - set during initialization - libavcodec - unchanged */ int allocated_mv_blocks; /** Number of blocks that can be stored at once in the data_blocks array. - application - set during initialization - libavcodec - unchanged */ int allocated_data_blocks; /** Indicate that the hardware would interpret data_blocks as IDCT coefficients and perform IDCT on them. - application - set during initialization - libavcodec - unchanged */ int idct; /** In MoCo mode it indicates that intra macroblocks are assumed to be in unsigned format; same as the XVMC_INTRA_UNSIGNED flag. - application - set during initialization - libavcodec - unchanged */ int unsigned_intra; /** Pointer to the surface allocated by XvMCCreateSurface(). It has to be freed by XvMCDestroySurface() on application exit. It identifies the frame and its state on the video hardware. - application - set during initialization - libavcodec - unchanged */ XvMCSurface* p_surface; /** Set by the decoder before calling ff_draw_horiz_band(), needed by the XvMCRenderSurface function. */ //@{ /** Pointer to the surface used as past reference - application - unchanged - libavcodec - set */ XvMCSurface* p_past_surface; /** Pointer to the surface used as future reference - application - unchanged - libavcodec - set */ XvMCSurface* p_future_surface; /** top/bottom field or frame - application - unchanged - libavcodec - set */ unsigned int picture_structure; /** XVMC_SECOND_FIELD - 1st or 2nd field in the sequence - application - unchanged - libavcodec - set */ unsigned int flags; //}@ /** Number of macroblock descriptions in the mv_blocks array that have already been passed to the hardware. - application - zeroes it on get_buffer(). A successful ff_draw_horiz_band() may increment it with filled_mb_block_num or zero both. - libavcodec - unchanged */ int start_mv_blocks_num; /** Number of new macroblock descriptions in the mv_blocks array (after start_mv_blocks_num) that are filled by libavcodec and have to be passed to the hardware. - application - zeroes it on get_buffer() or after successful ff_draw_horiz_band(). - libavcodec - increment with one of each stored MB */ int filled_mv_blocks_num; /** Number of the next free data block; one data block consists of 64 short values in the data_blocks array. All blocks before this one have already been claimed by placing their position into the corresponding block description structure field, that are part of the mv_blocks array. - application - zeroes it on get_buffer(). A successful ff_draw_horiz_band() may zero it together with start_mb_blocks_num. - libavcodec - each decoded macroblock increases it by the number of coded blocks it contains. */ int next_free_data_block_num; }; /** * @} */ #endif /* AVCODEC_XVMC_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavfilter/avfilter.h ================================================ /* * filter layer * Copyright (c) 2007 Bobby Bingham * * 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 AVFILTER_AVFILTER_H #define AVFILTER_AVFILTER_H /** * @file * @ingroup lavfi * Main libavfilter public API header */ /** * @defgroup lavfi libavfilter * Graph-based frame editing library. * * @{ */ #include #include "libavutil/attributes.h" #include "libavutil/avutil.h" #include "libavutil/buffer.h" #include "libavutil/dict.h" #include "libavutil/frame.h" #include "libavutil/log.h" #include "libavutil/samplefmt.h" #include "libavutil/pixfmt.h" #include "libavutil/rational.h" #include "libavfilter/version.h" /** * Return the LIBAVFILTER_VERSION_INT constant. */ unsigned avfilter_version(void); /** * Return the libavfilter build-time configuration. */ const char *avfilter_configuration(void); /** * Return the libavfilter license. */ const char *avfilter_license(void); typedef struct AVFilterContext AVFilterContext; typedef struct AVFilterLink AVFilterLink; typedef struct AVFilterPad AVFilterPad; typedef struct AVFilterFormats AVFilterFormats; /** * Get the number of elements in a NULL-terminated array of AVFilterPads (e.g. * AVFilter.inputs/outputs). */ int avfilter_pad_count(const AVFilterPad *pads); /** * Get the name of an AVFilterPad. * * @param pads an array of AVFilterPads * @param pad_idx index of the pad in the array it; is the caller's * responsibility to ensure the index is valid * * @return name of the pad_idx'th pad in pads */ const char *avfilter_pad_get_name(const AVFilterPad *pads, int pad_idx); /** * Get the type of an AVFilterPad. * * @param pads an array of AVFilterPads * @param pad_idx index of the pad in the array; it is the caller's * responsibility to ensure the index is valid * * @return type of the pad_idx'th pad in pads */ enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx); /** * The number of the filter inputs is not determined just by AVFilter.inputs. * The filter might add additional inputs during initialization depending on the * options supplied to it. */ #define AVFILTER_FLAG_DYNAMIC_INPUTS (1 << 0) /** * The number of the filter outputs is not determined just by AVFilter.outputs. * The filter might add additional outputs during initialization depending on * the options supplied to it. */ #define AVFILTER_FLAG_DYNAMIC_OUTPUTS (1 << 1) /** * The filter supports multithreading by splitting frames into multiple parts * and processing them concurrently. */ #define AVFILTER_FLAG_SLICE_THREADS (1 << 2) /** * Some filters support a generic "enable" expression option that can be used * to enable or disable a filter in the timeline. Filters supporting this * option have this flag set. When the enable expression is false, the default * no-op filter_frame() function is called in place of the filter_frame() * callback defined on each input pad, thus the frame is passed unchanged to * the next filters. */ #define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC (1 << 16) /** * Same as AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC, except that the filter will * have its filter_frame() callback(s) called as usual even when the enable * expression is false. The filter will disable filtering within the * filter_frame() callback(s) itself, for example executing code depending on * the AVFilterContext->is_disabled value. */ #define AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL (1 << 17) /** * Handy mask to test whether the filter supports or no the timeline feature * (internally or generically). */ #define AVFILTER_FLAG_SUPPORT_TIMELINE (AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL) /** * Filter definition. This defines the pads a filter contains, and all the * callback functions used to interact with the filter. */ typedef struct AVFilter { /** * Filter name. Must be non-NULL and unique among filters. */ const char *name; /** * A description of the filter. May be NULL. * * You should use the NULL_IF_CONFIG_SMALL() macro to define it. */ const char *description; /** * List of inputs, terminated by a zeroed element. * * NULL if there are no (static) inputs. Instances of filters with * AVFILTER_FLAG_DYNAMIC_INPUTS set may have more inputs than present in * this list. */ const AVFilterPad *inputs; /** * List of outputs, terminated by a zeroed element. * * NULL if there are no (static) outputs. Instances of filters with * AVFILTER_FLAG_DYNAMIC_OUTPUTS set may have more outputs than present in * this list. */ const AVFilterPad *outputs; /** * A class for the private data, used to declare filter private AVOptions. * This field is NULL for 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 libavfilter generic * code to this class. */ const AVClass *priv_class; /** * A combination of AVFILTER_FLAG_* */ int flags; /***************************************************************** * All fields below this line are not part of the public API. They * may not be used outside of libavfilter and can be changed and * removed at will. * New public fields should be added right above. ***************************************************************** */ /** * Filter initialization function. * * This callback will be called only once during the filter lifetime, after * all the options have been set, but before links between filters are * established and format negotiation is done. * * Basic filter initialization should be done here. Filters with dynamic * inputs and/or outputs should create those inputs/outputs here based on * provided options. No more changes to this filter's inputs/outputs can be * done after this callback. * * This callback must not assume that the filter links exist or frame * parameters are known. * * @ref AVFilter.uninit "uninit" is guaranteed to be called even if * initialization fails, so this callback does not have to clean up on * failure. * * @return 0 on success, a negative AVERROR on failure */ int (*init)(AVFilterContext *ctx); /** * Should be set instead of @ref AVFilter.init "init" by the filters that * want to pass a dictionary of AVOptions to nested contexts that are * allocated during init. * * On return, the options dict should be freed and replaced with one that * contains all the options which could not be processed by this filter (or * with NULL if all the options were processed). * * Otherwise the semantics is the same as for @ref AVFilter.init "init". */ int (*init_dict)(AVFilterContext *ctx, AVDictionary **options); /** * Filter uninitialization function. * * Called only once right before the filter is freed. Should deallocate any * memory held by the filter, release any buffer references, etc. It does * not need to deallocate the AVFilterContext.priv memory itself. * * This callback may be called even if @ref AVFilter.init "init" was not * called or failed, so it must be prepared to handle such a situation. */ void (*uninit)(AVFilterContext *ctx); /** * Query formats supported by the filter on its inputs and outputs. * * This callback is called after the filter is initialized (so the inputs * and outputs are fixed), shortly before the format negotiation. This * callback may be called more than once. * * This callback must set AVFilterLink.out_formats on every input link and * AVFilterLink.in_formats on every output link to a list of pixel/sample * formats that the filter supports on that link. For audio links, this * filter must also set @ref AVFilterLink.in_samplerates "in_samplerates" / * @ref AVFilterLink.out_samplerates "out_samplerates" and * @ref AVFilterLink.in_channel_layouts "in_channel_layouts" / * @ref AVFilterLink.out_channel_layouts "out_channel_layouts" analogously. * * This callback may be NULL for filters with one input, in which case * libavfilter assumes that it supports all input formats and preserves * them on output. * * @return zero on success, a negative value corresponding to an * AVERROR code otherwise */ int (*query_formats)(AVFilterContext *); int priv_size; ///< size of private data to allocate for the filter /** * Used by the filter registration system. Must not be touched by any other * code. */ struct AVFilter *next; /** * Make the filter instance process a command. * * @param cmd the command to process, for handling simplicity all commands must be alphanumeric only * @param arg the argument for the command * @param res a buffer with size res_size where the filter(s) can return a response. This must not change when the command is not supported. * @param flags if AVFILTER_CMD_FLAG_FAST is set and the command would be * time consuming then a filter should treat it like an unsupported command * * @returns >=0 on success otherwise an error code. * AVERROR(ENOSYS) on unsupported commands */ int (*process_command)(AVFilterContext *, const char *cmd, const char *arg, char *res, int res_len, int flags); /** * Filter initialization function, alternative to the init() * callback. Args contains the user-supplied parameters, opaque is * used for providing binary data. */ int (*init_opaque)(AVFilterContext *ctx, void *opaque); } AVFilter; /** * Process multiple parts of the frame concurrently. */ #define AVFILTER_THREAD_SLICE (1 << 0) typedef struct AVFilterInternal AVFilterInternal; /** An instance of a filter */ struct AVFilterContext { const AVClass *av_class; ///< needed for av_log() and filters common options const AVFilter *filter; ///< the AVFilter of which this is an instance char *name; ///< name of this filter instance AVFilterPad *input_pads; ///< array of input pads AVFilterLink **inputs; ///< array of pointers to input links unsigned nb_inputs; ///< number of input pads AVFilterPad *output_pads; ///< array of output pads AVFilterLink **outputs; ///< array of pointers to output links unsigned nb_outputs; ///< number of output pads void *priv; ///< private data for use by the filter struct AVFilterGraph *graph; ///< filtergraph this filter belongs to /** * Type of multithreading being allowed/used. A combination of * AVFILTER_THREAD_* flags. * * May be set by the caller before initializing the filter to forbid some * or all kinds of multithreading for this filter. The default is allowing * everything. * * When the filter is initialized, this field is combined using bit AND with * AVFilterGraph.thread_type to get the final mask used for determining * allowed threading types. I.e. a threading type needs to be set in both * to be allowed. * * After the filter is initialized, libavfilter sets this field to the * threading type that is actually used (0 for no multithreading). */ int thread_type; /** * An opaque struct for libavfilter internal use. */ AVFilterInternal *internal; struct AVFilterCommand *command_queue; char *enable_str; ///< enable expression string void *enable; ///< parsed expression (AVExpr*) double *var_values; ///< variable values for the enable expression int is_disabled; ///< the enabled state from the last expression evaluation /** * For filters which will create hardware frames, sets the device the * filter should create them in. All other filters will ignore this field: * in particular, a filter which consumes or processes hardware frames will * instead use the hw_frames_ctx field in AVFilterLink to carry the * hardware context information. */ AVBufferRef *hw_device_ctx; /** * Max number of threads allowed in this filter instance. * If <= 0, its value is ignored. * Overrides global number of threads set per filter graph. */ int nb_threads; }; /** * A link between two filters. This contains pointers to the source and * destination filters between which this link exists, and the indexes of * the pads involved. In addition, this link also contains the parameters * which have been negotiated and agreed upon between the filter, such as * image dimensions, format, etc. */ struct AVFilterLink { AVFilterContext *src; ///< source filter AVFilterPad *srcpad; ///< output pad on the source filter AVFilterContext *dst; ///< dest filter AVFilterPad *dstpad; ///< input pad on the dest filter enum AVMediaType type; ///< filter media type /* These parameters apply only to video */ int w; ///< agreed upon image width int h; ///< agreed upon image height AVRational sample_aspect_ratio; ///< agreed upon sample aspect ratio /* These parameters apply only to audio */ uint64_t channel_layout; ///< channel layout of current buffer (see libavutil/channel_layout.h) int sample_rate; ///< samples per second int format; ///< agreed upon media format /** * Define the time base used by the PTS of the frames/samples * which will pass through this link. * During the configuration stage, each filter is supposed to * change only the output timebase, while the timebase of the * input link is assumed to be an unchangeable property. */ AVRational time_base; /***************************************************************** * All fields below this line are not part of the public API. They * may not be used outside of libavfilter and can be changed and * removed at will. * New public fields should be added right above. ***************************************************************** */ /** * Lists of formats and channel layouts supported by the input and output * filters respectively. These lists are used for negotiating the format * to actually be used, which will be loaded into the format and * channel_layout members, above, when chosen. * */ AVFilterFormats *in_formats; AVFilterFormats *out_formats; /** * Lists of channel layouts and sample rates used for automatic * negotiation. */ AVFilterFormats *in_samplerates; AVFilterFormats *out_samplerates; struct AVFilterChannelLayouts *in_channel_layouts; struct AVFilterChannelLayouts *out_channel_layouts; /** * Audio only, the destination filter sets this to a non-zero value to * request that buffers with the given number of samples should be sent to * it. AVFilterPad.needs_fifo must also be set on the corresponding input * pad. * Last buffer before EOF will be padded with silence. */ int request_samples; /** stage of the initialization of the link properties (dimensions, etc) */ enum { AVLINK_UNINIT = 0, ///< not started AVLINK_STARTINIT, ///< started, but incomplete AVLINK_INIT ///< complete } init_state; /** * Graph the filter belongs to. */ struct AVFilterGraph *graph; /** * Current timestamp of the link, as defined by the most recent * frame(s), in link time_base units. */ int64_t current_pts; /** * Current timestamp of the link, as defined by the most recent * frame(s), in AV_TIME_BASE units. */ int64_t current_pts_us; /** * Index in the age array. */ int age_index; /** * Frame rate of the stream on the link, or 1/0 if unknown or variable; * if left to 0/0, will be automatically copied from the first input * of the source filter if it exists. * * Sources should set it to the best estimation of the real frame rate. * If the source frame rate is unknown or variable, set this to 1/0. * Filters should update it if necessary depending on their function. * Sinks can use it to set a default output frame rate. * It is similar to the r_frame_rate field in AVStream. */ AVRational frame_rate; /** * Buffer partially filled with samples to achieve a fixed/minimum size. */ AVFrame *partial_buf; /** * Size of the partial buffer to allocate. * Must be between min_samples and max_samples. */ int partial_buf_size; /** * Minimum number of samples to filter at once. If filter_frame() is * called with fewer samples, it will accumulate them in partial_buf. * This field and the related ones must not be changed after filtering * has started. * If 0, all related fields are ignored. */ int min_samples; /** * Maximum number of samples to filter at once. If filter_frame() is * called with more samples, it will split them. */ int max_samples; /** * Link status. * If not zero, all attempts of filter_frame or request_frame * will fail with the corresponding code, and if necessary the reference * will be destroyed. * If request_frame returns an error, the status is set on the * corresponding link. * It can be set also be set by either the source or the destination * filter. */ int status; /** * Number of channels. */ int channels; /** * Link processing flags. */ unsigned flags; /** * Number of past frames sent through the link. */ int64_t frame_count; /** * A pointer to a FFVideoFramePool struct. */ void *video_frame_pool; /** * True if a frame is currently wanted on the input of this filter. * Set when ff_request_frame() is called by the output, * cleared when the request is handled or forwarded. */ int frame_wanted_in; /** * True if a frame is currently wanted on the output of this filter. * Set when ff_request_frame() is called by the output, * cleared when a frame is filtered. */ int frame_wanted_out; /** * For hwaccel pixel formats, this should be a reference to the * AVHWFramesContext describing the frames. */ AVBufferRef *hw_frames_ctx; }; /** * Link two filters together. * * @param src the source filter * @param srcpad index of the output pad on the source filter * @param dst the destination filter * @param dstpad index of the input pad on the destination filter * @return zero on success */ int avfilter_link(AVFilterContext *src, unsigned srcpad, AVFilterContext *dst, unsigned dstpad); /** * Free the link in *link, and set its pointer to NULL. */ void avfilter_link_free(AVFilterLink **link); /** * Get the number of channels of a link. */ int avfilter_link_get_channels(AVFilterLink *link); /** * Set the closed field of a link. * @deprecated applications are not supposed to mess with links, they should * close the sinks. */ attribute_deprecated void avfilter_link_set_closed(AVFilterLink *link, int closed); /** * Negotiate the media format, dimensions, etc of all inputs to a filter. * * @param filter the filter to negotiate the properties for its inputs * @return zero on successful negotiation */ int avfilter_config_links(AVFilterContext *filter); #define AVFILTER_CMD_FLAG_ONE 1 ///< Stop once a filter understood the command (for target=all for example), fast filters are favored automatically #define AVFILTER_CMD_FLAG_FAST 2 ///< Only execute command when its fast (like a video out that supports contrast adjustment in hw) /** * Make the filter instance process a command. * It is recommended to use avfilter_graph_send_command(). */ int avfilter_process_command(AVFilterContext *filter, const char *cmd, const char *arg, char *res, int res_len, int flags); /** Initialize the filter system. Register all builtin filters. */ void avfilter_register_all(void); #if FF_API_OLD_FILTER_REGISTER /** Uninitialize the filter system. Unregister all filters. */ attribute_deprecated void avfilter_uninit(void); #endif /** * Register a filter. This is only needed if you plan to use * avfilter_get_by_name later to lookup the AVFilter structure by name. A * filter can still by instantiated with avfilter_graph_alloc_filter even if it * is not registered. * * @param filter the filter to register * @return 0 if the registration was successful, a negative value * otherwise */ int avfilter_register(AVFilter *filter); /** * Get a filter definition matching the given name. * * @param name the filter name to find * @return the filter definition, if any matching one is registered. * NULL if none found. */ #if !FF_API_NOCONST_GET_NAME const #endif AVFilter *avfilter_get_by_name(const char *name); /** * Iterate over all registered filters. * @return If prev is non-NULL, next registered filter after prev or NULL if * prev is the last filter. If prev is NULL, return the first registered filter. */ const AVFilter *avfilter_next(const AVFilter *prev); #if FF_API_OLD_FILTER_REGISTER /** * If filter is NULL, returns a pointer to the first registered filter pointer, * if filter is non-NULL, returns the next pointer after filter. * If the returned pointer points to NULL, the last registered filter * was already reached. * @deprecated use avfilter_next() */ attribute_deprecated AVFilter **av_filter_next(AVFilter **filter); #endif #if FF_API_AVFILTER_OPEN /** * Create a filter instance. * * @param filter_ctx put here a pointer to the created filter context * on success, NULL on failure * @param filter the filter to create an instance of * @param inst_name Name to give to the new instance. Can be NULL for none. * @return >= 0 in case of success, a negative error code otherwise * @deprecated use avfilter_graph_alloc_filter() instead */ attribute_deprecated int avfilter_open(AVFilterContext **filter_ctx, AVFilter *filter, const char *inst_name); #endif #if FF_API_AVFILTER_INIT_FILTER /** * Initialize a filter. * * @param filter the filter to initialize * @param args A string of parameters to use when initializing the filter. * The format and meaning of this string varies by filter. * @param opaque Any extra non-string data needed by the filter. The meaning * of this parameter varies by filter. * @return zero on success */ attribute_deprecated int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque); #endif /** * Initialize a filter with the supplied parameters. * * @param ctx uninitialized filter context to initialize * @param args Options to initialize the filter with. This must be a * ':'-separated list of options in the 'key=value' form. * May be NULL if the options have been set directly using the * AVOptions API or there are no options that need to be set. * @return 0 on success, a negative AVERROR on failure */ int avfilter_init_str(AVFilterContext *ctx, const char *args); /** * Initialize a filter with the supplied dictionary of options. * * @param ctx uninitialized filter context to initialize * @param options An AVDictionary filled with options for this filter. On * return this parameter will be destroyed and replaced with * a dict containing options that were not found. This dictionary * must be freed by the caller. * May be NULL, then this function is equivalent to * avfilter_init_str() with the second parameter set to NULL. * @return 0 on success, a negative AVERROR on failure * * @note This function and avfilter_init_str() do essentially the same thing, * the difference is in manner in which the options are passed. It is up to the * calling code to choose whichever is more preferable. The two functions also * behave differently when some of the provided options are not declared as * supported by the filter. In such a case, avfilter_init_str() will fail, but * this function will leave those extra options in the options AVDictionary and * continue as usual. */ int avfilter_init_dict(AVFilterContext *ctx, AVDictionary **options); /** * Free a filter context. This will also remove the filter from its * filtergraph's list of filters. * * @param filter the filter to free */ void avfilter_free(AVFilterContext *filter); /** * Insert a filter in the middle of an existing link. * * @param link the link into which the filter should be inserted * @param filt the filter to be inserted * @param filt_srcpad_idx the input pad on the filter to connect * @param filt_dstpad_idx the output pad on the filter to connect * @return zero on success */ int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, unsigned filt_srcpad_idx, unsigned filt_dstpad_idx); /** * @return AVClass for AVFilterContext. * * @see av_opt_find(). */ const AVClass *avfilter_get_class(void); typedef struct AVFilterGraphInternal AVFilterGraphInternal; /** * A function pointer passed to the @ref AVFilterGraph.execute callback to be * executed multiple times, possibly in parallel. * * @param ctx the filter context the job belongs to * @param arg an opaque parameter passed through from @ref * AVFilterGraph.execute * @param jobnr the index of the job being executed * @param nb_jobs the total number of jobs * * @return 0 on success, a negative AVERROR on error */ typedef int (avfilter_action_func)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs); /** * A function executing multiple jobs, possibly in parallel. * * @param ctx the filter context to which the jobs belong * @param func the function to be called multiple times * @param arg the argument to be passed to func * @param ret a nb_jobs-sized array to be filled with return values from each * invocation of func * @param nb_jobs the number of jobs to execute * * @return 0 on success, a negative AVERROR on error */ typedef int (avfilter_execute_func)(AVFilterContext *ctx, avfilter_action_func *func, void *arg, int *ret, int nb_jobs); typedef struct AVFilterGraph { const AVClass *av_class; AVFilterContext **filters; unsigned nb_filters; char *scale_sws_opts; ///< sws options to use for the auto-inserted scale filters char *resample_lavr_opts; ///< libavresample options to use for the auto-inserted resample filters /** * Type of multithreading allowed for filters in this graph. A combination * of AVFILTER_THREAD_* flags. * * May be set by the caller at any point, the setting will apply to all * filters initialized after that. The default is allowing everything. * * When a filter in this graph is initialized, this field is combined using * bit AND with AVFilterContext.thread_type to get the final mask used for * determining allowed threading types. I.e. a threading type needs to be * set in both to be allowed. */ int thread_type; /** * Maximum number of threads used by filters in this graph. May be set by * the caller before adding any filters to the filtergraph. Zero (the * default) means that the number of threads is determined automatically. */ int nb_threads; /** * Opaque object for libavfilter internal use. */ AVFilterGraphInternal *internal; /** * Opaque user data. May be set by the caller to an arbitrary value, e.g. to * be used from callbacks like @ref AVFilterGraph.execute. * Libavfilter will not touch this field in any way. */ void *opaque; /** * This callback may be set by the caller immediately after allocating the * graph and before adding any filters to it, to provide a custom * multithreading implementation. * * If set, filters with slice threading capability will call this callback * to execute multiple jobs in parallel. * * If this field is left unset, libavfilter will use its internal * implementation, which may or may not be multithreaded depending on the * platform and build options. */ avfilter_execute_func *execute; char *aresample_swr_opts; ///< swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions /** * Private fields * * The following fields are for internal use only. * Their type, offset, number and semantic can change without notice. */ AVFilterLink **sink_links; int sink_links_count; unsigned disable_auto_convert; } AVFilterGraph; /** * Allocate a filter graph. * * @return the allocated filter graph on success or NULL. */ AVFilterGraph *avfilter_graph_alloc(void); /** * Create a new filter instance in a filter graph. * * @param graph graph in which the new filter will be used * @param filter the filter to create an instance of * @param name Name to give to the new instance (will be copied to * AVFilterContext.name). This may be used by the caller to identify * different filters, libavfilter itself assigns no semantics to * this parameter. May be NULL. * * @return the context of the newly created filter instance (note that it is * also retrievable directly through AVFilterGraph.filters or with * avfilter_graph_get_filter()) on success or NULL on failure. */ AVFilterContext *avfilter_graph_alloc_filter(AVFilterGraph *graph, const AVFilter *filter, const char *name); /** * Get a filter instance identified by instance name from graph. * * @param graph filter graph to search through. * @param name filter instance name (should be unique in the graph). * @return the pointer to the found filter instance or NULL if it * cannot be found. */ AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, const char *name); #if FF_API_AVFILTER_OPEN /** * Add an existing filter instance to a filter graph. * * @param graphctx the filter graph * @param filter the filter to be added * * @deprecated use avfilter_graph_alloc_filter() to allocate a filter in a * filter graph */ attribute_deprecated int avfilter_graph_add_filter(AVFilterGraph *graphctx, AVFilterContext *filter); #endif /** * Create and add a filter instance into an existing graph. * The filter instance is created from the filter filt and inited * with the parameters args and opaque. * * In case of success put in *filt_ctx the pointer to the created * filter instance, otherwise set *filt_ctx to NULL. * * @param name the instance name to give to the created filter instance * @param graph_ctx the filter graph * @return a negative AVERROR error code in case of failure, a non * negative value otherwise */ int avfilter_graph_create_filter(AVFilterContext **filt_ctx, const AVFilter *filt, const char *name, const char *args, void *opaque, AVFilterGraph *graph_ctx); /** * Enable or disable automatic format conversion inside the graph. * * Note that format conversion can still happen inside explicitly inserted * scale and aresample filters. * * @param flags any of the AVFILTER_AUTO_CONVERT_* constants */ void avfilter_graph_set_auto_convert(AVFilterGraph *graph, unsigned flags); enum { AVFILTER_AUTO_CONVERT_ALL = 0, /**< all automatic conversions enabled */ AVFILTER_AUTO_CONVERT_NONE = -1, /**< all automatic conversions disabled */ }; /** * Check validity and configure all the links and formats in the graph. * * @param graphctx the filter graph * @param log_ctx context used for logging * @return >= 0 in case of success, a negative AVERROR code otherwise */ int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx); /** * Free a graph, destroy its links, and set *graph to NULL. * If *graph is NULL, do nothing. */ void avfilter_graph_free(AVFilterGraph **graph); /** * A linked-list of the inputs/outputs of the filter chain. * * This is mainly useful for avfilter_graph_parse() / avfilter_graph_parse2(), * where it is used to communicate open (unlinked) inputs and outputs from and * to the caller. * This struct specifies, per each not connected pad contained in the graph, the * filter context and the pad index required for establishing a link. */ typedef struct AVFilterInOut { /** unique name for this input/output in the list */ char *name; /** filter context associated to this input/output */ AVFilterContext *filter_ctx; /** index of the filt_ctx pad to use for linking */ int pad_idx; /** next input/input in the list, NULL if this is the last */ struct AVFilterInOut *next; } AVFilterInOut; /** * Allocate a single AVFilterInOut entry. * Must be freed with avfilter_inout_free(). * @return allocated AVFilterInOut on success, NULL on failure. */ AVFilterInOut *avfilter_inout_alloc(void); /** * Free the supplied list of AVFilterInOut and set *inout to NULL. * If *inout is NULL, do nothing. */ void avfilter_inout_free(AVFilterInOut **inout); /** * Add a graph described by a string to a graph. * * @note The caller must provide the lists of inputs and outputs, * which therefore must be known before calling the function. * * @note The inputs parameter describes inputs of the already existing * part of the graph; i.e. from the point of view of the newly created * part, they are outputs. Similarly the outputs parameter describes * outputs of the already existing filters, which are provided as * inputs to the parsed filters. * * @param graph the filter graph where to link the parsed graph context * @param filters string to be parsed * @param inputs linked list to the inputs of the graph * @param outputs linked list to the outputs of the graph * @return zero on success, a negative AVERROR code on error */ int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, AVFilterInOut *inputs, AVFilterInOut *outputs, void *log_ctx); /** * Add a graph described by a string to a graph. * * In the graph filters description, if the input label of the first * filter is not specified, "in" is assumed; if the output label of * the last filter is not specified, "out" is assumed. * * @param graph the filter graph where to link the parsed graph context * @param filters string to be parsed * @param inputs pointer to a linked list to the inputs of the graph, may be NULL. * If non-NULL, *inputs is updated to contain the list of open inputs * after the parsing, should be freed with avfilter_inout_free(). * @param outputs pointer to a linked list to the outputs of the graph, may be NULL. * If non-NULL, *outputs is updated to contain the list of open outputs * after the parsing, should be freed with avfilter_inout_free(). * @return non negative on success, a negative AVERROR code on error */ int avfilter_graph_parse_ptr(AVFilterGraph *graph, const char *filters, AVFilterInOut **inputs, AVFilterInOut **outputs, void *log_ctx); /** * Add a graph described by a string to a graph. * * @param[in] graph the filter graph where to link the parsed graph context * @param[in] filters string to be parsed * @param[out] inputs a linked list of all free (unlinked) inputs of the * parsed graph will be returned here. It is to be freed * by the caller using avfilter_inout_free(). * @param[out] outputs a linked list of all free (unlinked) outputs of the * parsed graph will be returned here. It is to be freed by the * caller using avfilter_inout_free(). * @return zero on success, a negative AVERROR code on error * * @note This function returns the inputs and outputs that are left * unlinked after parsing the graph and the caller then deals with * them. * @note This function makes no reference whatsoever to already * existing parts of the graph and the inputs parameter will on return * contain inputs of the newly parsed part of the graph. Analogously * the outputs parameter will contain outputs of the newly created * filters. */ int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters, AVFilterInOut **inputs, AVFilterInOut **outputs); /** * Send a command to one or more filter instances. * * @param graph the filter graph * @param target the filter(s) to which the command should be sent * "all" sends to all filters * otherwise it can be a filter or filter instance name * which will send the command to all matching filters. * @param cmd the command to send, for handling simplicity all commands must be alphanumeric only * @param arg the argument for the command * @param res a buffer with size res_size where the filter(s) can return a response. * * @returns >=0 on success otherwise an error code. * AVERROR(ENOSYS) on unsupported commands */ int avfilter_graph_send_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, char *res, int res_len, int flags); /** * Queue a command for one or more filter instances. * * @param graph the filter graph * @param target the filter(s) to which the command should be sent * "all" sends to all filters * otherwise it can be a filter or filter instance name * which will send the command to all matching filters. * @param cmd the command to sent, for handling simplicity all commands must be alphanumeric only * @param arg the argument for the command * @param ts time at which the command should be sent to the filter * * @note As this executes commands after this function returns, no return code * from the filter is provided, also AVFILTER_CMD_FLAG_ONE is not supported. */ int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, int flags, double ts); /** * Dump a graph into a human-readable string representation. * * @param graph the graph to dump * @param options formatting options; currently ignored * @return a string, or NULL in case of memory allocation failure; * the string must be freed using av_free */ char *avfilter_graph_dump(AVFilterGraph *graph, const char *options); /** * Request a frame on the oldest sink link. * * If the request returns AVERROR_EOF, try the next. * * Note that this function is not meant to be the sole scheduling mechanism * of a filtergraph, only a convenience function to help drain a filtergraph * in a balanced way under normal circumstances. * * Also note that AVERROR_EOF does not mean that frames did not arrive on * some of the sinks during the process. * When there are multiple sink links, in case the requested link * returns an EOF, this may cause a filter to flush pending frames * which are sent to another sink link, although unrequested. * * @return the return value of ff_request_frame(), * or AVERROR_EOF if all links returned AVERROR_EOF */ int avfilter_graph_request_oldest(AVFilterGraph *graph); /** * @} */ #endif /* AVFILTER_AVFILTER_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavfilter/avfiltergraph.h ================================================ /* * Filter graphs * copyright (c) 2007 Bobby Bingham * * 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 AVFILTER_AVFILTERGRAPH_H #define AVFILTER_AVFILTERGRAPH_H #include "avfilter.h" #include "libavutil/log.h" #endif /* AVFILTER_AVFILTERGRAPH_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavfilter/buffersink.h ================================================ /* * 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 AVFILTER_BUFFERSINK_H #define AVFILTER_BUFFERSINK_H /** * @file * @ingroup lavfi_buffersink * memory buffer sink API for audio and video */ #include "avfilter.h" /** * @defgroup lavfi_buffersink Buffer sink API * @ingroup lavfi * @{ */ /** * Get a frame with filtered data from sink and put it in frame. * * @param ctx pointer to a buffersink or abuffersink filter context. * @param frame pointer to an allocated frame that will be filled with data. * The data must be freed using av_frame_unref() / av_frame_free() * @param flags a combination of AV_BUFFERSINK_FLAG_* flags * * @return >= 0 in for success, a negative AVERROR code for failure. */ int av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags); /** * Tell av_buffersink_get_buffer_ref() to read video/samples buffer * reference, but not remove it from the buffer. This is useful if you * need only to read a video/samples buffer, without to fetch it. */ #define AV_BUFFERSINK_FLAG_PEEK 1 /** * Tell av_buffersink_get_buffer_ref() not to request a frame from its input. * If a frame is already buffered, it is read (and removed from the buffer), * but if no frame is present, return AVERROR(EAGAIN). */ #define AV_BUFFERSINK_FLAG_NO_REQUEST 2 /** * Struct to use for initializing a buffersink context. */ typedef struct { const enum AVPixelFormat *pixel_fmts; ///< list of allowed pixel formats, terminated by AV_PIX_FMT_NONE } AVBufferSinkParams; /** * Create an AVBufferSinkParams structure. * * Must be freed with av_free(). */ AVBufferSinkParams *av_buffersink_params_alloc(void); /** * Struct to use for initializing an abuffersink context. */ typedef struct { const enum AVSampleFormat *sample_fmts; ///< list of allowed sample formats, terminated by AV_SAMPLE_FMT_NONE const int64_t *channel_layouts; ///< list of allowed channel layouts, terminated by -1 const int *channel_counts; ///< list of allowed channel counts, terminated by -1 int all_channel_counts; ///< if not 0, accept any channel count or layout int *sample_rates; ///< list of allowed sample rates, terminated by -1 } AVABufferSinkParams; /** * Create an AVABufferSinkParams structure. * * Must be freed with av_free(). */ AVABufferSinkParams *av_abuffersink_params_alloc(void); /** * Set the frame size for an audio buffer sink. * * All calls to av_buffersink_get_buffer_ref will return a buffer with * exactly the specified number of samples, or AVERROR(EAGAIN) if there is * not enough. The last buffer at EOF will be padded with 0. */ void av_buffersink_set_frame_size(AVFilterContext *ctx, unsigned frame_size); /** * Get the frame rate of the input. */ AVRational av_buffersink_get_frame_rate(AVFilterContext *ctx); /** * Get a frame with filtered data from sink and put it in frame. * * @param ctx pointer to a context of a buffersink or abuffersink AVFilter. * @param frame pointer to an allocated frame that will be filled with data. * The data must be freed using av_frame_unref() / av_frame_free() * * @return * - >= 0 if a frame was successfully returned. * - AVERROR(EAGAIN) if no frames are available at this point; more * input frames must be added to the filtergraph to get more output. * - AVERROR_EOF if there will be no more output frames on this sink. * - A different negative AVERROR code in other failure cases. */ int av_buffersink_get_frame(AVFilterContext *ctx, AVFrame *frame); /** * Same as av_buffersink_get_frame(), but with the ability to specify the number * of samples read. This function is less efficient than * av_buffersink_get_frame(), because it copies the data around. * * @param ctx pointer to a context of the abuffersink AVFilter. * @param frame pointer to an allocated frame that will be filled with data. * The data must be freed using av_frame_unref() / av_frame_free() * frame will contain exactly nb_samples audio samples, except at * the end of stream, when it can contain less than nb_samples. * * @return The return codes have the same meaning as for * av_buffersink_get_samples(). * * @warning do not mix this function with av_buffersink_get_frame(). Use only one or * the other with a single sink, not both. */ int av_buffersink_get_samples(AVFilterContext *ctx, AVFrame *frame, int nb_samples); /** * @} */ #endif /* AVFILTER_BUFFERSINK_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavfilter/buffersrc.h ================================================ /* * 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 AVFILTER_BUFFERSRC_H #define AVFILTER_BUFFERSRC_H /** * @file * @ingroup lavfi_buffersrc * Memory buffer source API. */ #include "avfilter.h" /** * @defgroup lavfi_buffersrc Buffer source API * @ingroup lavfi * @{ */ enum { /** * Do not check for format changes. */ AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT = 1, /** * Immediately push the frame to the output. */ AV_BUFFERSRC_FLAG_PUSH = 4, /** * Keep a reference to the frame. * If the frame if reference-counted, create a new reference; otherwise * copy the frame data. */ AV_BUFFERSRC_FLAG_KEEP_REF = 8, }; /** * Get the number of failed requests. * * A failed request is when the request_frame method is called while no * frame is present in the buffer. * The number is reset when a frame is added. */ unsigned av_buffersrc_get_nb_failed_requests(AVFilterContext *buffer_src); /** * This structure contains the parameters describing the frames that will be * passed to this filter. * * It should be allocated with av_buffersrc_parameters_alloc() and freed with * av_free(). All the allocated fields in it remain owned by the caller. */ typedef struct AVBufferSrcParameters { /** * video: the pixel format, value corresponds to enum AVPixelFormat * audio: the sample format, value corresponds to enum AVSampleFormat */ int format; /** * The timebase to be used for the timestamps on the input frames. */ AVRational time_base; /** * Video only, the display dimensions of the input frames. */ int width, height; /** * Video only, the sample (pixel) aspect ratio. */ AVRational sample_aspect_ratio; /** * Video only, the frame rate of the input video. This field must only be * set to a non-zero value if input stream has a known constant framerate * and should be left at its initial value if the framerate is variable or * unknown. */ AVRational frame_rate; /** * Video with a hwaccel pixel format only. This should be a reference to an * AVHWFramesContext instance describing the input frames. */ AVBufferRef *hw_frames_ctx; /** * Audio only, the audio sampling rate in samples per secon. */ int sample_rate; /** * Audio only, the audio channel layout */ uint64_t channel_layout; } AVBufferSrcParameters; /** * Allocate a new AVBufferSrcParameters instance. It should be freed by the * caller with av_free(). */ AVBufferSrcParameters *av_buffersrc_parameters_alloc(void); /** * Initialize the buffersrc or abuffersrc filter with the provided parameters. * This function may be called multiple times, the later calls override the * previous ones. Some of the parameters may also be set through AVOptions, then * whatever method is used last takes precedence. * * @param ctx an instance of the buffersrc or abuffersrc filter * @param param the stream parameters. The frames later passed to this filter * must conform to those parameters. All the allocated fields in * param remain owned by the caller, libavfilter will make internal * copies or references when necessary. * @return 0 on success, a negative AVERROR code on failure. */ int av_buffersrc_parameters_set(AVFilterContext *ctx, AVBufferSrcParameters *param); /** * Add a frame to the buffer source. * * @param ctx an instance of the buffersrc filter * @param frame frame to be added. If the frame is reference counted, this * function will make a new reference to it. Otherwise the frame data will be * copied. * * @return 0 on success, a negative AVERROR on error * * This function is equivalent to av_buffersrc_add_frame_flags() with the * AV_BUFFERSRC_FLAG_KEEP_REF flag. */ av_warn_unused_result int av_buffersrc_write_frame(AVFilterContext *ctx, const AVFrame *frame); /** * Add a frame to the buffer source. * * @param ctx an instance of the buffersrc filter * @param frame frame to be added. If the frame is reference counted, this * function will take ownership of the reference(s) and reset the frame. * Otherwise the frame data will be copied. If this function returns an error, * the input frame is not touched. * * @return 0 on success, a negative AVERROR on error. * * @note the difference between this function and av_buffersrc_write_frame() is * that av_buffersrc_write_frame() creates a new reference to the input frame, * while this function takes ownership of the reference passed to it. * * This function is equivalent to av_buffersrc_add_frame_flags() without the * AV_BUFFERSRC_FLAG_KEEP_REF flag. */ av_warn_unused_result int av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame *frame); /** * Add a frame to the buffer source. * * By default, if the frame is reference-counted, this function will take * ownership of the reference(s) and reset the frame. This can be controlled * using the flags. * * If this function returns an error, the input frame is not touched. * * @param buffer_src pointer to a buffer source context * @param frame a frame, or NULL to mark EOF * @param flags a combination of AV_BUFFERSRC_FLAG_* * @return >= 0 in case of success, a negative AVERROR code * in case of failure */ av_warn_unused_result int av_buffersrc_add_frame_flags(AVFilterContext *buffer_src, AVFrame *frame, int flags); /** * @} */ #endif /* AVFILTER_BUFFERSRC_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavfilter/version.h ================================================ /* * Version macros. * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVFILTER_VERSION_H #define AVFILTER_VERSION_H /** * @file * @ingroup lavfi * Libavfilter version macros */ #include "libavutil/version.h" #define LIBAVFILTER_VERSION_MAJOR 6 #define LIBAVFILTER_VERSION_MINOR 65 #define LIBAVFILTER_VERSION_MICRO 100 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ LIBAVFILTER_VERSION_MINOR, \ LIBAVFILTER_VERSION_MICRO) #define LIBAVFILTER_VERSION AV_VERSION(LIBAVFILTER_VERSION_MAJOR, \ LIBAVFILTER_VERSION_MINOR, \ LIBAVFILTER_VERSION_MICRO) #define LIBAVFILTER_BUILD LIBAVFILTER_VERSION_INT #define LIBAVFILTER_IDENT "Lavfi" AV_STRINGIFY(LIBAVFILTER_VERSION) /** * FF_API_* defines may be placed below to indicate public API that will be * dropped at a future version bump. The defines themselves are not part of * the public API and may change, break or disappear at any time. */ #ifndef FF_API_OLD_FILTER_OPTS #define FF_API_OLD_FILTER_OPTS (LIBAVFILTER_VERSION_MAJOR < 7) #endif #ifndef FF_API_OLD_FILTER_OPTS_ERROR #define FF_API_OLD_FILTER_OPTS_ERROR (LIBAVFILTER_VERSION_MAJOR < 7) #endif #ifndef FF_API_AVFILTER_OPEN #define FF_API_AVFILTER_OPEN (LIBAVFILTER_VERSION_MAJOR < 7) #endif #ifndef FF_API_AVFILTER_INIT_FILTER #define FF_API_AVFILTER_INIT_FILTER (LIBAVFILTER_VERSION_MAJOR < 7) #endif #ifndef FF_API_OLD_FILTER_REGISTER #define FF_API_OLD_FILTER_REGISTER (LIBAVFILTER_VERSION_MAJOR < 7) #endif #ifndef FF_API_NOCONST_GET_NAME #define FF_API_NOCONST_GET_NAME (LIBAVFILTER_VERSION_MAJOR < 7) #endif #endif /* AVFILTER_VERSION_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavformat/avc.h ================================================ /* * AVC helper functions for muxers * Copyright (c) 2008 Aurelien Jacobs * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVFORMAT_AVC_H #define AVFORMAT_AVC_H #include #include "avio.h" int ff_avc_parse_nal_units(AVIOContext *s, const uint8_t *buf, int size); int ff_avc_parse_nal_units_buf(const uint8_t *buf_in, uint8_t **buf, int *size); int ff_isom_write_avcc(AVIOContext *pb, const uint8_t *data, int len); const uint8_t *ff_avc_find_startcode(const uint8_t *p, const uint8_t *end); int ff_avc_write_annexb_extradata(const uint8_t *in, uint8_t **buf, int *size); const uint8_t *ff_avc_mp4_find_startcode(const uint8_t *start, const uint8_t *end, int nal_length_size); #endif /* AVFORMAT_AVC_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavformat/avformat.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 AVFORMAT_AVFORMAT_H #define AVFORMAT_AVFORMAT_H /** * @file * @ingroup libavf * Main libavformat public API header */ /** * @defgroup libavf libavformat * I/O and Muxing/Demuxing Library * * Libavformat (lavf) is a library for dealing with various media container * formats. Its main two purposes are demuxing - i.e. splitting a media file * into component streams, and the reverse process of muxing - writing supplied * data in a specified container format. It also has an @ref lavf_io * "I/O module" which supports a number of protocols for accessing the data (e.g. * file, tcp, http and others). Before using lavf, you need to call * av_register_all() to register all compiled muxers, demuxers and protocols. * Unless you are absolutely sure you won't use libavformat's network * capabilities, you should also call avformat_network_init(). * * A supported input format is described by an AVInputFormat struct, conversely * an output format is described by AVOutputFormat. You can iterate over all * registered input/output formats using the av_iformat_next() / * av_oformat_next() functions. The protocols layer is not part of the public * API, so you can only get the names of supported protocols with the * avio_enum_protocols() function. * * Main lavf structure used for both muxing and demuxing is AVFormatContext, * which exports all information about the file being read or written. As with * most Libavformat structures, its size is not part of public ABI, so it cannot be * allocated on stack or directly with av_malloc(). To create an * AVFormatContext, use avformat_alloc_context() (some functions, like * avformat_open_input() might do that for you). * * Most importantly an AVFormatContext contains: * @li the @ref AVFormatContext.iformat "input" or @ref AVFormatContext.oformat * "output" format. It is either autodetected or set by user for input; * always set by user for output. * @li an @ref AVFormatContext.streams "array" of AVStreams, which describe all * elementary streams stored in the file. AVStreams are typically referred to * using their index in this array. * @li an @ref AVFormatContext.pb "I/O context". It is either opened by lavf or * set by user for input, always set by user for output (unless you are dealing * with an AVFMT_NOFILE format). * * @section lavf_options Passing options to (de)muxers * It is possible to configure lavf muxers and demuxers using the @ref avoptions * mechanism. Generic (format-independent) libavformat options are provided by * AVFormatContext, they can be examined from a user program by calling * av_opt_next() / av_opt_find() on an allocated AVFormatContext (or its AVClass * from avformat_get_class()). Private (format-specific) options are provided by * AVFormatContext.priv_data if and only if AVInputFormat.priv_class / * AVOutputFormat.priv_class of the corresponding format struct is non-NULL. * Further options may be provided by the @ref AVFormatContext.pb "I/O context", * if its AVClass is non-NULL, and the protocols layer. See the discussion on * nesting in @ref avoptions documentation to learn how to access those. * * @section urls * URL strings in libavformat are made of a scheme/protocol, a ':', and a * scheme specific string. URLs without a scheme and ':' used for local files * are supported but deprecated. "file:" should be used for local files. * * It is important that the scheme string is not taken from untrusted * sources without checks. * * Note that some schemes/protocols are quite powerful, allowing access to * both local and remote files, parts of them, concatenations of them, local * audio and video devices and so on. * * @{ * * @defgroup lavf_decoding Demuxing * @{ * Demuxers read a media file and split it into chunks of data (@em packets). A * @ref AVPacket "packet" contains one or more encoded frames which belongs to a * single elementary stream. In the lavf API this process is represented by the * avformat_open_input() function for opening a file, av_read_frame() for * reading a single packet and finally avformat_close_input(), which does the * cleanup. * * @section lavf_decoding_open Opening a media file * The minimum information required to open a file is its URL, which * is passed to avformat_open_input(), as in the following code: * @code * const char *url = "file:in.mp3"; * AVFormatContext *s = NULL; * int ret = avformat_open_input(&s, url, NULL, NULL); * if (ret < 0) * abort(); * @endcode * The above code attempts to allocate an AVFormatContext, open the * specified file (autodetecting the format) and read the header, exporting the * information stored there into s. Some formats do not have a header or do not * store enough information there, so it is recommended that you call the * avformat_find_stream_info() function which tries to read and decode a few * frames to find missing information. * * In some cases you might want to preallocate an AVFormatContext yourself with * avformat_alloc_context() and do some tweaking on it before passing it to * avformat_open_input(). One such case is when you want to use custom functions * for reading input data instead of lavf internal I/O layer. * To do that, create your own AVIOContext with avio_alloc_context(), passing * your reading callbacks to it. Then set the @em pb field of your * AVFormatContext to newly created AVIOContext. * * Since the format of the opened file is in general not known until after * avformat_open_input() has returned, it is not possible to set demuxer private * options on a preallocated context. Instead, the options should be passed to * avformat_open_input() wrapped in an AVDictionary: * @code * AVDictionary *options = NULL; * av_dict_set(&options, "video_size", "640x480", 0); * av_dict_set(&options, "pixel_format", "rgb24", 0); * * if (avformat_open_input(&s, url, NULL, &options) < 0) * abort(); * av_dict_free(&options); * @endcode * This code passes the private options 'video_size' and 'pixel_format' to the * demuxer. They would be necessary for e.g. the rawvideo demuxer, since it * cannot know how to interpret raw video data otherwise. If the format turns * out to be something different than raw video, those options will not be * recognized by the demuxer and therefore will not be applied. Such unrecognized * options are then returned in the options dictionary (recognized options are * consumed). The calling program can handle such unrecognized options as it * wishes, e.g. * @code * AVDictionaryEntry *e; * if (e = av_dict_get(options, "", NULL, AV_DICT_IGNORE_SUFFIX)) { * fprintf(stderr, "Option %s not recognized by the demuxer.\n", e->key); * abort(); * } * @endcode * * After you have finished reading the file, you must close it with * avformat_close_input(). It will free everything associated with the file. * * @section lavf_decoding_read Reading from an opened file * Reading data from an opened AVFormatContext is done by repeatedly calling * av_read_frame() on it. Each call, if successful, will return an AVPacket * containing encoded data for one AVStream, identified by * AVPacket.stream_index. This packet may be passed straight into the libavcodec * decoding functions avcodec_send_packet() or avcodec_decode_subtitle2() if the * caller wishes to decode the data. * * AVPacket.pts, AVPacket.dts and AVPacket.duration timing information will be * set if known. They may also be unset (i.e. AV_NOPTS_VALUE for * pts/dts, 0 for duration) if the stream does not provide them. The timing * information will be in AVStream.time_base units, i.e. it has to be * multiplied by the timebase to convert them to seconds. * * If AVPacket.buf is set on the returned packet, then the packet is * allocated dynamically and the user may keep it indefinitely. * Otherwise, if AVPacket.buf is NULL, the packet data is backed by a * static storage somewhere inside the demuxer and the packet is only valid * until the next av_read_frame() call or closing the file. If the caller * requires a longer lifetime, av_dup_packet() will make an av_malloc()ed copy * of it. * In both cases, the packet must be freed with av_packet_unref() when it is no * longer needed. * * @section lavf_decoding_seek Seeking * @} * * @defgroup lavf_encoding Muxing * @{ * Muxers take encoded data in the form of @ref AVPacket "AVPackets" and write * it into files or other output bytestreams in the specified container format. * * The main API functions for muxing are avformat_write_header() for writing the * file header, av_write_frame() / av_interleaved_write_frame() for writing the * packets and av_write_trailer() for finalizing the file. * * At the beginning of the muxing process, the caller must first call * avformat_alloc_context() to create a muxing context. The caller then sets up * the muxer by filling the various fields in this context: * * - The @ref AVFormatContext.oformat "oformat" field must be set to select the * muxer that will be used. * - Unless the format is of the AVFMT_NOFILE type, the @ref AVFormatContext.pb * "pb" field must be set to an opened IO context, either returned from * avio_open2() or a custom one. * - Unless the format is of the AVFMT_NOSTREAMS type, at least one stream must * be created with the avformat_new_stream() function. The caller should fill * the @ref AVStream.codecpar "stream codec parameters" information, such as the * codec @ref AVCodecParameters.codec_type "type", @ref AVCodecParameters.codec_id * "id" and other parameters (e.g. width / height, the pixel or sample format, * etc.) as known. The @ref AVStream.time_base "stream timebase" should * be set to the timebase that the caller desires to use for this stream (note * that the timebase actually used by the muxer can be different, as will be * described later). * - It is advised to manually initialize only the relevant fields in * AVCodecParameters, rather than using @ref avcodec_parameters_copy() during * remuxing: there is no guarantee that the codec context values remain valid * for both input and output format contexts. * - The caller may fill in additional information, such as @ref * AVFormatContext.metadata "global" or @ref AVStream.metadata "per-stream" * metadata, @ref AVFormatContext.chapters "chapters", @ref * AVFormatContext.programs "programs", etc. as described in the * AVFormatContext documentation. Whether such information will actually be * stored in the output depends on what the container format and the muxer * support. * * When the muxing context is fully set up, the caller must call * avformat_write_header() to initialize the muxer internals and write the file * header. Whether anything actually is written to the IO context at this step * depends on the muxer, but this function must always be called. Any muxer * private options must be passed in the options parameter to this function. * * The data is then sent to the muxer by repeatedly calling av_write_frame() or * av_interleaved_write_frame() (consult those functions' documentation for * discussion on the difference between them; only one of them may be used with * a single muxing context, they should not be mixed). Do note that the timing * information on the packets sent to the muxer must be in the corresponding * AVStream's timebase. That timebase is set by the muxer (in the * avformat_write_header() step) and may be different from the timebase * requested by the caller. * * Once all the data has been written, the caller must call av_write_trailer() * to flush any buffered packets and finalize the output file, then close the IO * context (if any) and finally free the muxing context with * avformat_free_context(). * @} * * @defgroup lavf_io I/O Read/Write * @{ * @section lavf_io_dirlist Directory listing * The directory listing API makes it possible to list files on remote servers. * * Some of possible use cases: * - an "open file" dialog to choose files from a remote location, * - a recursive media finder providing a player with an ability to play all * files from a given directory. * * @subsection lavf_io_dirlist_open Opening a directory * At first, a directory needs to be opened by calling avio_open_dir() * supplied with a URL and, optionally, ::AVDictionary containing * protocol-specific parameters. The function returns zero or positive * integer and allocates AVIODirContext on success. * * @code * AVIODirContext *ctx = NULL; * if (avio_open_dir(&ctx, "smb://example.com/some_dir", NULL) < 0) { * fprintf(stderr, "Cannot open directory.\n"); * abort(); * } * @endcode * * This code tries to open a sample directory using smb protocol without * any additional parameters. * * @subsection lavf_io_dirlist_read Reading entries * Each directory's entry (i.e. file, another directory, anything else * within ::AVIODirEntryType) is represented by AVIODirEntry. * Reading consecutive entries from an opened AVIODirContext is done by * repeatedly calling avio_read_dir() on it. Each call returns zero or * positive integer if successful. Reading can be stopped right after the * NULL entry has been read -- it means there are no entries left to be * read. The following code reads all entries from a directory associated * with ctx and prints their names to standard output. * @code * AVIODirEntry *entry = NULL; * for (;;) { * if (avio_read_dir(ctx, &entry) < 0) { * fprintf(stderr, "Cannot list directory.\n"); * abort(); * } * if (!entry) * break; * printf("%s\n", entry->name); * avio_free_directory_entry(&entry); * } * @endcode * @} * * @defgroup lavf_codec Demuxers * @{ * @defgroup lavf_codec_native Native Demuxers * @{ * @} * @defgroup lavf_codec_wrappers External library wrappers * @{ * @} * @} * @defgroup lavf_protos I/O Protocols * @{ * @} * @defgroup lavf_internal Internal * @{ * @} * @} */ #include #include /* FILE */ #include "libavcodec/avcodec.h" #include "libavutil/dict.h" #include "libavutil/log.h" #include "avio.h" #include "libavformat/version.h" struct AVFormatContext; struct AVDeviceInfoList; struct AVDeviceCapabilitiesQuery; /** * @defgroup metadata_api Public Metadata API * @{ * @ingroup libavf * The metadata API allows libavformat to export metadata tags to a client * application when demuxing. Conversely it allows a client application to * set metadata when muxing. * * Metadata is exported or set as pairs of key/value strings in the 'metadata' * fields of the AVFormatContext, AVStream, AVChapter and AVProgram structs * using the @ref lavu_dict "AVDictionary" API. Like all strings in FFmpeg, * metadata is assumed to be UTF-8 encoded Unicode. Note that metadata * exported by demuxers isn't checked to be valid UTF-8 in most cases. * * Important concepts to keep in mind: * - Keys are unique; there can never be 2 tags with the same key. This is * also meant semantically, i.e., a demuxer should not knowingly produce * several keys that are literally different but semantically identical. * E.g., key=Author5, key=Author6. In this example, all authors must be * placed in the same tag. * - Metadata is flat, not hierarchical; there are no subtags. If you * want to store, e.g., the email address of the child of producer Alice * and actor Bob, that could have key=alice_and_bobs_childs_email_address. * - Several modifiers can be applied to the tag name. This is done by * appending a dash character ('-') and the modifier name in the order * they appear in the list below -- e.g. foo-eng-sort, not foo-sort-eng. * - language -- a tag whose value is localized for a particular language * is appended with the ISO 639-2/B 3-letter language code. * For example: Author-ger=Michael, Author-eng=Mike * The original/default language is in the unqualified "Author" tag. * A demuxer should set a default if it sets any translated tag. * - sorting -- a modified version of a tag that should be used for * sorting will have '-sort' appended. E.g. artist="The Beatles", * artist-sort="Beatles, The". * - Some protocols and demuxers support metadata updates. After a successful * call to av_read_packet(), AVFormatContext.event_flags or AVStream.event_flags * will be updated to indicate if metadata changed. In order to detect metadata * changes on a stream, you need to loop through all streams in the AVFormatContext * and check their individual event_flags. * * - Demuxers attempt to export metadata in a generic format, however tags * with no generic equivalents are left as they are stored in the container. * Follows a list of generic tag names: * @verbatim album -- name of the set this work belongs to album_artist -- main creator of the set/album, if different from artist. e.g. "Various Artists" for compilation albums. artist -- main creator of the work comment -- any additional description of the file. composer -- who composed the work, if different from artist. copyright -- name of copyright holder. creation_time-- date when the file was created, preferably in ISO 8601. date -- date when the work was created, preferably in ISO 8601. disc -- number of a subset, e.g. disc in a multi-disc collection. encoder -- name/settings of the software/hardware that produced the file. encoded_by -- person/group who created the file. filename -- original name of the file. genre -- . language -- main language in which the work is performed, preferably in ISO 639-2 format. Multiple languages can be specified by separating them with commas. performer -- artist who performed the work, if different from artist. E.g for "Also sprach Zarathustra", artist would be "Richard Strauss" and performer "London Philharmonic Orchestra". publisher -- name of the label/publisher. service_name -- name of the service in broadcasting (channel name). service_provider -- name of the service provider in broadcasting. title -- name of the work. track -- number of this work in the set, can be in form current/total. variant_bitrate -- the total bitrate of the bitrate variant that the current stream is part of @endverbatim * * Look in the examples section for an application example how to use the Metadata API. * * @} */ /* packet functions */ /** * Allocate and read the payload of a packet and initialize its * fields with default values. * * @param s associated IO context * @param pkt packet * @param size desired payload size * @return >0 (read size) if OK, AVERROR_xxx otherwise */ int av_get_packet(AVIOContext *s, AVPacket *pkt, int size); /** * Read data and append it to the current content of the AVPacket. * If pkt->size is 0 this is identical to av_get_packet. * Note that this uses av_grow_packet and thus involves a realloc * which is inefficient. Thus this function should only be used * when there is no reasonable way to know (an upper bound of) * the final size. * * @param s associated IO context * @param pkt packet * @param size amount of data to read * @return >0 (read size) if OK, AVERROR_xxx otherwise, previous data * will not be lost even if an error occurs. */ int av_append_packet(AVIOContext *s, AVPacket *pkt, int size); #if FF_API_LAVF_FRAC /*************************************************/ /* fractional numbers for exact pts handling */ /** * The exact value of the fractional number is: 'val + num / den'. * num is assumed to be 0 <= num < den. */ typedef struct AVFrac { int64_t val, num, den; } AVFrac; #endif /*************************************************/ /* input/output formats */ struct AVCodecTag; /** * This structure contains the data a format has to probe a file. */ typedef struct AVProbeData { const char *filename; unsigned char *buf; /**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. */ int buf_size; /**< Size of buf except extra allocated bytes */ const char *mime_type; /**< mime_type, when known. */ } AVProbeData; #define AVPROBE_SCORE_RETRY (AVPROBE_SCORE_MAX/4) #define AVPROBE_SCORE_STREAM_RETRY (AVPROBE_SCORE_MAX/4-1) #define AVPROBE_SCORE_EXTENSION 50 ///< score for file extension #define AVPROBE_SCORE_MIME 75 ///< score for file mime type #define AVPROBE_SCORE_MAX 100 ///< maximum score #define AVPROBE_PADDING_SIZE 32 ///< extra allocated bytes at the end of the probe buffer /// Demuxer will use avio_open, no opened file should be provided by the caller. #define AVFMT_NOFILE 0x0001 #define AVFMT_NEEDNUMBER 0x0002 /**< Needs '%d' in filename. */ #define AVFMT_SHOW_IDS 0x0008 /**< Show format stream IDs numbers. */ #if FF_API_LAVF_FMT_RAWPICTURE #define AVFMT_RAWPICTURE 0x0020 /**< Format wants AVPicture structure for raw picture data. @deprecated Not used anymore */ #endif #define AVFMT_GLOBALHEADER 0x0040 /**< Format wants global header. */ #define AVFMT_NOTIMESTAMPS 0x0080 /**< Format does not need / have any timestamps. */ #define AVFMT_GENERIC_INDEX 0x0100 /**< Use generic index building code. */ #define AVFMT_TS_DISCONT 0x0200 /**< Format allows timestamp discontinuities. Note, muxers always require valid (monotone) timestamps */ #define AVFMT_VARIABLE_FPS 0x0400 /**< Format allows variable fps. */ #define AVFMT_NODIMENSIONS 0x0800 /**< Format does not need width/height */ #define AVFMT_NOSTREAMS 0x1000 /**< Format does not require any streams */ #define AVFMT_NOBINSEARCH 0x2000 /**< Format does not allow to fall back on binary search via read_timestamp */ #define AVFMT_NOGENSEARCH 0x4000 /**< Format does not allow to fall back on generic search */ #define AVFMT_NO_BYTE_SEEK 0x8000 /**< Format does not allow seeking by bytes */ #define AVFMT_ALLOW_FLUSH 0x10000 /**< Format allows flushing. If not set, the muxer will not receive a NULL packet in the write_packet function. */ #define AVFMT_TS_NONSTRICT 0x20000 /**< Format does not require strictly increasing timestamps, but they must still be monotonic */ #define AVFMT_TS_NEGATIVE 0x40000 /**< Format allows muxing negative timestamps. If not set the timestamp will be shifted in av_write_frame and av_interleaved_write_frame so they start from 0. The user or muxer can override this through AVFormatContext.avoid_negative_ts */ #define AVFMT_SEEK_TO_PTS 0x4000000 /**< Seeking is based on PTS */ /** * @addtogroup lavf_encoding * @{ */ typedef struct AVOutputFormat { const char *name; /** * Descriptive name for the format, meant to be more human-readable * than name. You should use the NULL_IF_CONFIG_SMALL() macro * to define it. */ const char *long_name; const char *mime_type; const char *extensions; /**< comma-separated filename extensions */ /* output support */ enum AVCodecID audio_codec; /**< default audio codec */ enum AVCodecID video_codec; /**< default video codec */ enum AVCodecID subtitle_codec; /**< default subtitle codec */ /** * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH, * AVFMT_TS_NONSTRICT, AVFMT_TS_NEGATIVE */ int flags; /** * List of supported codec_id-codec_tag pairs, ordered by "better * choice first". The arrays are all terminated by AV_CODEC_ID_NONE. */ const struct AVCodecTag * const *codec_tag; const AVClass *priv_class; ///< AVClass for the private context /***************************************************************** * No fields below this line are part of the public API. They * may not be used outside of libavformat and can be changed and * removed at will. * New public fields should be added right above. ***************************************************************** */ struct AVOutputFormat *next; /** * size of private data so that it can be allocated in the wrapper */ int priv_data_size; int (*write_header)(struct AVFormatContext *); /** * Write a packet. If AVFMT_ALLOW_FLUSH is set in flags, * pkt can be NULL in order to flush data buffered in the muxer. * When flushing, return 0 if there still is more data to flush, * or 1 if everything was flushed and there is no more buffered * data. */ int (*write_packet)(struct AVFormatContext *, AVPacket *pkt); int (*write_trailer)(struct AVFormatContext *); /** * Currently only used to set pixel format if not YUV420P. */ int (*interleave_packet)(struct AVFormatContext *, AVPacket *out, AVPacket *in, int flush); /** * Test if the given codec can be stored in this container. * * @return 1 if the codec is supported, 0 if it is not. * A negative number if unknown. * MKTAG('A', 'P', 'I', 'C') if the codec is only supported as AV_DISPOSITION_ATTACHED_PIC */ int (*query_codec)(enum AVCodecID id, int std_compliance); void (*get_output_timestamp)(struct AVFormatContext *s, int stream, int64_t *dts, int64_t *wall); /** * Allows sending messages from application to device. */ int (*control_message)(struct AVFormatContext *s, int type, void *data, size_t data_size); /** * Write an uncoded AVFrame. * * See av_write_uncoded_frame() for details. * * The library will free *frame afterwards, but the muxer can prevent it * by setting the pointer to NULL. */ int (*write_uncoded_frame)(struct AVFormatContext *, int stream_index, AVFrame **frame, unsigned flags); /** * Returns device list with it properties. * @see avdevice_list_devices() for more details. */ int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list); /** * Initialize device capabilities submodule. * @see avdevice_capabilities_create() for more details. */ int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); /** * Free device capabilities submodule. * @see avdevice_capabilities_free() for more details. */ int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); enum AVCodecID data_codec; /**< default data codec */ /** * Initialize format. May allocate data here, and set any AVFormatContext or * AVStream parameters that need to be set before packets are sent. * This method must not write output. * * Return 0 if streams were fully configured, 1 if not, negative AVERROR on failure * * Any allocations made here must be freed in deinit(). */ int (*init)(struct AVFormatContext *); /** * Deinitialize format. If present, this is called whenever the muxer is being * destroyed, regardless of whether or not the header has been written. * * If a trailer is being written, this is called after write_trailer(). * * This is called if init() fails as well. */ void (*deinit)(struct AVFormatContext *); /** * Set up any necessary bitstream filtering and extract any extra data needed * for the global header. * Return 0 if more packets from this stream must be checked; 1 if not. */ int (*check_bitstream)(struct AVFormatContext *, const AVPacket *pkt); } AVOutputFormat; /** * @} */ /** * @addtogroup lavf_decoding * @{ */ typedef struct AVInputFormat { /** * A comma separated list of short names for the format. New names * may be appended with a minor bump. */ const char *name; /** * Descriptive name for the format, meant to be more human-readable * than name. You should use the NULL_IF_CONFIG_SMALL() macro * to define it. */ const char *long_name; /** * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, * AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS. */ int flags; /** * If extensions are defined, then no probe is done. You should * usually not use extension format guessing because it is not * reliable enough */ const char *extensions; const struct AVCodecTag * const *codec_tag; const AVClass *priv_class; ///< AVClass for the private context /** * Comma-separated list of mime types. * It is used check for matching mime types while probing. * @see av_probe_input_format2 */ const char *mime_type; /***************************************************************** * No fields below this line are part of the public API. They * may not be used outside of libavformat and can be changed and * removed at will. * New public fields should be added right above. ***************************************************************** */ struct AVInputFormat *next; /** * Raw demuxers store their codec ID here. */ int raw_codec_id; /** * Size of private data so that it can be allocated in the wrapper. */ int priv_data_size; /** * Tell if a given file has a chance of being parsed as this format. * The buffer provided is guaranteed to be AVPROBE_PADDING_SIZE bytes * big so you do not have to check for that unless you need more. */ int (*read_probe)(AVProbeData *); /** * Read the format header and initialize the AVFormatContext * structure. Return 0 if OK. 'avformat_new_stream' should be * called to create new streams. */ int (*read_header)(struct AVFormatContext *); /** * Used by format which open further nested input. */ int (*read_header2)(struct AVFormatContext *, AVDictionary **options); /** * Read one packet and put it in 'pkt'. pts and flags are also * set. 'avformat_new_stream' can be called only if the flag * AVFMTCTX_NOHEADER is used and only in the calling thread (not in a * background thread). * @return 0 on success, < 0 on error. * When returning an error, pkt must not have been allocated * or must be freed before returning */ int (*read_packet)(struct AVFormatContext *, AVPacket *pkt); /** * Close the stream. The AVFormatContext and AVStreams are not * freed by this function */ int (*read_close)(struct AVFormatContext *); /** * Seek to a given timestamp relative to the frames in * stream component stream_index. * @param stream_index Must not be -1. * @param flags Selects which direction should be preferred if no exact * match is available. * @return >= 0 on success (but not necessarily the new offset) */ int (*read_seek)(struct AVFormatContext *, int stream_index, int64_t timestamp, int flags); /** * Get the next timestamp in stream[stream_index].time_base units. * @return the timestamp or AV_NOPTS_VALUE if an error occurred */ int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index, int64_t *pos, int64_t pos_limit); /** * Start/resume playing - only meaningful if using a network-based format * (RTSP). */ int (*read_play)(struct AVFormatContext *); /** * Pause playing - only meaningful if using a network-based format * (RTSP). */ int (*read_pause)(struct AVFormatContext *); /** * Seek to timestamp ts. * Seeking will be done so that the point from which all active streams * can be presented successfully will be closest to ts and within min/max_ts. * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. */ int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); /** * Returns device list with it properties. * @see avdevice_list_devices() for more details. */ int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list); /** * Initialize device capabilities submodule. * @see avdevice_capabilities_create() for more details. */ int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); /** * Free device capabilities submodule. * @see avdevice_capabilities_free() for more details. */ int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); } AVInputFormat; /** * @} */ enum AVStreamParseType { AVSTREAM_PARSE_NONE, AVSTREAM_PARSE_FULL, /**< full parsing and repack */ AVSTREAM_PARSE_HEADERS, /**< Only parse headers, do not repack. */ AVSTREAM_PARSE_TIMESTAMPS, /**< full parsing and interpolation of timestamps for frames not starting on a packet boundary */ AVSTREAM_PARSE_FULL_ONCE, /**< full parsing and repack of the first frame only, only implemented for H.264 currently */ AVSTREAM_PARSE_FULL_RAW=MKTAG(0,'R','A','W'), /**< full parsing and repack with timestamp and position generation by parser for raw this assumes that each packet in the file contains no demuxer level headers and just codec level data, otherwise position generation would fail */ }; typedef struct AVIndexEntry { int64_t pos; int64_t timestamp; /**< * Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are available * when seeking to this entry. That means preferable PTS on keyframe based formats. * But demuxers can choose to store a different timestamp, if it is more convenient for the implementation or nothing better * is known */ #define AVINDEX_KEYFRAME 0x0001 #define AVINDEX_DISCARD_FRAME 0x0002 /** * Flag is used to indicate which frame should be discarded after decoding. */ int flags:2; int size:30; //Yeah, trying to keep the size of this small to reduce memory requirements (it is 24 vs. 32 bytes due to possible 8-byte alignment). int min_distance; /**< Minimum distance between this and the previous keyframe, used to avoid unneeded searching. */ } AVIndexEntry; #define AV_DISPOSITION_DEFAULT 0x0001 #define AV_DISPOSITION_DUB 0x0002 #define AV_DISPOSITION_ORIGINAL 0x0004 #define AV_DISPOSITION_COMMENT 0x0008 #define AV_DISPOSITION_LYRICS 0x0010 #define AV_DISPOSITION_KARAOKE 0x0020 /** * Track should be used during playback by default. * Useful for subtitle track that should be displayed * even when user did not explicitly ask for subtitles. */ #define AV_DISPOSITION_FORCED 0x0040 #define AV_DISPOSITION_HEARING_IMPAIRED 0x0080 /**< stream for hearing impaired audiences */ #define AV_DISPOSITION_VISUAL_IMPAIRED 0x0100 /**< stream for visual impaired audiences */ #define AV_DISPOSITION_CLEAN_EFFECTS 0x0200 /**< stream without voice */ /** * The stream is stored in the file as an attached picture/"cover art" (e.g. * APIC frame in ID3v2). The first (usually only) packet associated with it * will be returned among the first few packets read from the file unless * seeking takes place. It can also be accessed at any time in * AVStream.attached_pic. */ #define AV_DISPOSITION_ATTACHED_PIC 0x0400 /** * The stream is sparse, and contains thumbnail images, often corresponding * to chapter markers. Only ever used with AV_DISPOSITION_ATTACHED_PIC. */ #define AV_DISPOSITION_TIMED_THUMBNAILS 0x0800 typedef struct AVStreamInternal AVStreamInternal; /** * To specify text track kind (different from subtitles default). */ #define AV_DISPOSITION_CAPTIONS 0x10000 #define AV_DISPOSITION_DESCRIPTIONS 0x20000 #define AV_DISPOSITION_METADATA 0x40000 /** * Options for behavior on timestamp wrap detection. */ #define AV_PTS_WRAP_IGNORE 0 ///< ignore the wrap #define AV_PTS_WRAP_ADD_OFFSET 1 ///< add the format specific offset on wrap detection #define AV_PTS_WRAP_SUB_OFFSET -1 ///< subtract the format specific offset on wrap detection /** * Stream structure. * New fields can be added to the end with minor version bumps. * Removal, reordering and changes to existing fields require a major * version bump. * sizeof(AVStream) must not be used outside libav*. */ typedef struct AVStream { int index; /**< stream index in AVFormatContext */ /** * Format-specific stream ID. * decoding: set by libavformat * encoding: set by the user, replaced by libavformat if left unset */ int id; #if FF_API_LAVF_AVCTX /** * @deprecated use the codecpar struct instead */ attribute_deprecated AVCodecContext *codec; #endif void *priv_data; #if FF_API_LAVF_FRAC /** * @deprecated this field is unused */ attribute_deprecated struct AVFrac pts; #endif /** * This is the fundamental unit of time (in seconds) in terms * of which frame timestamps are represented. * * decoding: set by libavformat * encoding: May be set by the caller before avformat_write_header() to * provide a hint to the muxer about the desired timebase. In * avformat_write_header(), the muxer will overwrite this field * with the timebase that will actually be used for the timestamps * written into the file (which may or may not be related to the * user-provided one, depending on the format). */ AVRational time_base; /** * Decoding: pts of the first frame of the stream in presentation order, in stream time base. * Only set this if you are absolutely 100% sure that the value you set * it to really is the pts of the first frame. * This may be undefined (AV_NOPTS_VALUE). * @note The ASF header does NOT contain a correct start_time the ASF * demuxer must NOT set this. */ int64_t start_time; /** * Decoding: duration of the stream, in stream time base. * If a source file does not specify a duration, but does specify * a bitrate, this value will be estimated from bitrate and file size. */ int64_t duration; int64_t nb_frames; ///< number of frames in this stream if known or 0 int disposition; /**< AV_DISPOSITION_* bit field */ enum AVDiscard discard; ///< Selects which packets can be discarded at will and do not need to be demuxed. /** * sample aspect ratio (0 if unknown) * - encoding: Set by user. * - decoding: Set by libavformat. */ AVRational sample_aspect_ratio; AVDictionary *metadata; /** * Average framerate * * - demuxing: May be set by libavformat when creating the stream or in * avformat_find_stream_info(). * - muxing: May be set by the caller before avformat_write_header(). */ AVRational avg_frame_rate; /** * For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet * will contain the attached picture. * * decoding: set by libavformat, must not be modified by the caller. * encoding: unused */ AVPacket attached_pic; /** * An array of side data that applies to the whole stream (i.e. the * container does not allow it to change between packets). * * There may be no overlap between the side data in this array and side data * in the packets. I.e. a given side data is either exported by the muxer * (demuxing) / set by the caller (muxing) in this array, then it never * appears in the packets, or the side data is exported / sent through * the packets (always in the first packet where the value becomes known or * changes), then it does not appear in this array. * * - demuxing: Set by libavformat when the stream is created. * - muxing: May be set by the caller before avformat_write_header(). * * Freed by libavformat in avformat_free_context(). * * @see av_format_inject_global_side_data() */ AVPacketSideData *side_data; /** * The number of elements in the AVStream.side_data array. */ int nb_side_data; /** * Flags for the user to detect events happening on the stream. Flags must * be cleared by the user once the event has been handled. * A combination of AVSTREAM_EVENT_FLAG_*. */ int event_flags; #define AVSTREAM_EVENT_FLAG_METADATA_UPDATED 0x0001 ///< The call resulted in updated metadata. /***************************************************************** * All fields below this line are not part of the public API. They * may not be used outside of libavformat and can be changed and * removed at will. * New public fields should be added right above. ***************************************************************** */ /** * Stream information used internally by av_find_stream_info() */ #define MAX_STD_TIMEBASES (30*12+30+3+6) struct { int64_t last_dts; int64_t duration_gcd; int duration_count; int64_t rfps_duration_sum; double (*duration_error)[2][MAX_STD_TIMEBASES]; int64_t codec_info_duration; int64_t codec_info_duration_fields; /** * 0 -> decoder has not been searched for yet. * >0 -> decoder found * <0 -> decoder with codec_id == -found_decoder has not been found */ int found_decoder; int64_t last_duration; /** * Those are used for average framerate estimation. */ int64_t fps_first_dts; int fps_first_dts_idx; int64_t fps_last_dts; int fps_last_dts_idx; } *info; int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */ // Timestamp generation support: /** * Timestamp corresponding to the last dts sync point. * * Initialized when AVCodecParserContext.dts_sync_point >= 0 and * a DTS is received from the underlying container. Otherwise set to * AV_NOPTS_VALUE by default. */ int64_t first_dts; int64_t cur_dts; int64_t last_IP_pts; int last_IP_duration; /** * Number of packets to buffer for codec probing */ int probe_packets; /** * Number of frames that have been demuxed during av_find_stream_info() */ int codec_info_nb_frames; /* av_read_frame() support */ enum AVStreamParseType need_parsing; struct AVCodecParserContext *parser; /** * last packet in packet_buffer for this stream when muxing. */ struct AVPacketList *last_in_packet_buffer; AVProbeData probe_data; #define MAX_REORDER_DELAY 16 int64_t pts_buffer[MAX_REORDER_DELAY+1]; AVIndexEntry *index_entries; /**< Only used if the format does not support seeking natively. */ int nb_index_entries; unsigned int index_entries_allocated_size; /** * Real base framerate of the stream. * This is the lowest framerate with which all timestamps can be * represented accurately (it is the least common multiple of all * framerates in the stream). Note, this value is just a guess! * For example, if the time base is 1/90000 and all frames have either * approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1. * * Code outside avformat should access this field using: * av_stream_get/set_r_frame_rate(stream) */ AVRational r_frame_rate; /** * Stream Identifier * This is the MPEG-TS stream identifier +1 * 0 means unknown */ int stream_identifier; int64_t interleaver_chunk_size; int64_t interleaver_chunk_duration; /** * stream probing state * -1 -> probing finished * 0 -> no probing requested * rest -> perform probing with request_probe being the minimum score to accept. * NOT PART OF PUBLIC API */ int request_probe; /** * Indicates that everything up to the next keyframe * should be discarded. */ int skip_to_keyframe; /** * Number of samples to skip at the start of the frame decoded from the next packet. */ int skip_samples; /** * If not 0, the number of samples that should be skipped from the start of * the stream (the samples are removed from packets with pts==0, which also * assumes negative timestamps do not happen). * Intended for use with formats such as mp3 with ad-hoc gapless audio * support. */ int64_t start_skip_samples; /** * If not 0, the first audio sample that should be discarded from the stream. * This is broken by design (needs global sample count), but can't be * avoided for broken by design formats such as mp3 with ad-hoc gapless * audio support. */ int64_t first_discard_sample; /** * The sample after last sample that is intended to be discarded after * first_discard_sample. Works on frame boundaries only. Used to prevent * early EOF if the gapless info is broken (considered concatenated mp3s). */ int64_t last_discard_sample; /** * Number of internally decoded frames, used internally in libavformat, do not access * its lifetime differs from info which is why it is not in that structure. */ int nb_decoded_frames; /** * Timestamp offset added to timestamps before muxing * NOT PART OF PUBLIC API */ int64_t mux_ts_offset; /** * Internal data to check for wrapping of the time stamp */ int64_t pts_wrap_reference; /** * Options for behavior, when a wrap is detected. * * Defined by AV_PTS_WRAP_ values. * * If correction is enabled, there are two possibilities: * If the first time stamp is near the wrap point, the wrap offset * will be subtracted, which will create negative time stamps. * Otherwise the offset will be added. */ int pts_wrap_behavior; /** * Internal data to prevent doing update_initial_durations() twice */ int update_initial_durations_done; /** * Internal data to generate dts from pts */ int64_t pts_reorder_error[MAX_REORDER_DELAY+1]; uint8_t pts_reorder_error_count[MAX_REORDER_DELAY+1]; /** * Internal data to analyze DTS and detect faulty mpeg streams */ int64_t last_dts_for_order_check; uint8_t dts_ordered; uint8_t dts_misordered; /** * Internal data to inject global side data */ int inject_global_side_data; /** * String containing paris of key and values describing recommended encoder configuration. * Paris are separated by ','. * Keys are separated from values by '='. */ char *recommended_encoder_configuration; /** * display aspect ratio (0 if unknown) * - encoding: unused * - decoding: Set by libavformat to calculate sample_aspect_ratio internally */ AVRational display_aspect_ratio; struct FFFrac *priv_pts; /** * An opaque field for libavformat internal usage. * Must not be accessed in any way by callers. */ AVStreamInternal *internal; /* * Codec parameters associated with this stream. Allocated and freed by * libavformat in avformat_new_stream() and avformat_free_context() * respectively. * * - demuxing: filled by libavformat on stream creation or in * avformat_find_stream_info() * - muxing: filled by the caller before avformat_write_header() */ AVCodecParameters *codecpar; } AVStream; AVRational av_stream_get_r_frame_rate(const AVStream *s); void av_stream_set_r_frame_rate(AVStream *s, AVRational r); struct AVCodecParserContext *av_stream_get_parser(const AVStream *s); char* av_stream_get_recommended_encoder_configuration(const AVStream *s); void av_stream_set_recommended_encoder_configuration(AVStream *s, char *configuration); /** * Returns the pts of the last muxed packet + its duration * * the retuned value is undefined when used with a demuxer. */ int64_t av_stream_get_end_pts(const AVStream *st); #define AV_PROGRAM_RUNNING 1 /** * New fields can be added to the end with minor version bumps. * Removal, reordering and changes to existing fields require a major * version bump. * sizeof(AVProgram) must not be used outside libav*. */ typedef struct AVProgram { int id; int flags; enum AVDiscard discard; ///< selects which program to discard and which to feed to the caller unsigned int *stream_index; unsigned int nb_stream_indexes; AVDictionary *metadata; int program_num; int pmt_pid; int pcr_pid; /***************************************************************** * All fields below this line are not part of the public API. They * may not be used outside of libavformat and can be changed and * removed at will. * New public fields should be added right above. ***************************************************************** */ int64_t start_time; int64_t end_time; int64_t pts_wrap_reference; ///< reference dts for wrap detection int pts_wrap_behavior; ///< behavior on wrap detection } AVProgram; #define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present (streams are added dynamically) */ typedef struct AVChapter { int id; ///< unique ID to identify the chapter AVRational time_base; ///< time base in which the start/end timestamps are specified int64_t start, end; ///< chapter start/end time in time_base units AVDictionary *metadata; } AVChapter; /** * Callback used by devices to communicate with application. */ typedef int (*av_format_control_message)(struct AVFormatContext *s, int type, void *data, size_t data_size); typedef int (*AVOpenCallback)(struct AVFormatContext *s, AVIOContext **pb, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options); /** * The duration of a video can be estimated through various ways, and this enum can be used * to know how the duration was estimated. */ enum AVDurationEstimationMethod { AVFMT_DURATION_FROM_PTS, ///< Duration accurately estimated from PTSes AVFMT_DURATION_FROM_STREAM, ///< Duration estimated from a stream with a known duration AVFMT_DURATION_FROM_BITRATE ///< Duration estimated from bitrate (less accurate) }; typedef struct AVFormatInternal AVFormatInternal; /** * Format I/O context. * New fields can be added to the end with minor version bumps. * Removal, reordering and changes to existing fields require a major * version bump. * sizeof(AVFormatContext) must not be used outside libav*, use * avformat_alloc_context() to create an AVFormatContext. * * Fields can be accessed through AVOptions (av_opt*), * the name string used matches the associated command line parameter name and * can be found in libavformat/options_table.h. * The AVOption/command line parameter names differ in some cases from the C * structure field names for historic reasons or brevity. */ typedef struct AVFormatContext { /** * A class for logging and @ref avoptions. Set by avformat_alloc_context(). * Exports (de)muxer private options if they exist. */ const AVClass *av_class; /** * The input container format. * * Demuxing only, set by avformat_open_input(). */ struct AVInputFormat *iformat; /** * The output container format. * * Muxing only, must be set by the caller before avformat_write_header(). */ struct AVOutputFormat *oformat; /** * Format private data. This is an AVOptions-enabled struct * if and only if iformat/oformat.priv_class is not NULL. * * - muxing: set by avformat_write_header() * - demuxing: set by avformat_open_input() */ void *priv_data; /** * I/O context. * * - demuxing: either set by the user before avformat_open_input() (then * the user must close it manually) or set by avformat_open_input(). * - muxing: set by the user before avformat_write_header(). The caller must * take care of closing / freeing the IO context. * * Do NOT set this field if AVFMT_NOFILE flag is set in * iformat/oformat.flags. In such a case, the (de)muxer will handle * I/O in some other way and this field will be NULL. */ AVIOContext *pb; /* stream info */ /** * Flags signalling stream properties. A combination of AVFMTCTX_*. * Set by libavformat. */ int ctx_flags; /** * Number of elements in AVFormatContext.streams. * * Set by avformat_new_stream(), must not be modified by any other code. */ unsigned int nb_streams; /** * A list of all streams in the file. New streams are created with * avformat_new_stream(). * * - demuxing: streams are created by libavformat in avformat_open_input(). * If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams may also * appear in av_read_frame(). * - muxing: streams are created by the user before avformat_write_header(). * * Freed by libavformat in avformat_free_context(). */ AVStream **streams; /** * input or output filename * * - demuxing: set by avformat_open_input() * - muxing: may be set by the caller before avformat_write_header() */ char filename[1024]; /** * Position of the first frame of the component, in * AV_TIME_BASE fractional seconds. NEVER set this value directly: * It is deduced from the AVStream values. * * Demuxing only, set by libavformat. */ int64_t start_time; /** * Duration of the stream, in AV_TIME_BASE fractional * seconds. Only set this value if you know none of the individual stream * durations and also do not set any of them. This is deduced from the * AVStream values if not set. * * Demuxing only, set by libavformat. */ int64_t duration; /** * Total stream bitrate in bit/s, 0 if not * available. Never set it directly if the file_size and the * duration are known as FFmpeg can compute it automatically. */ int64_t bit_rate; unsigned int packet_size; int max_delay; /** * Flags modifying the (de)muxer behaviour. A combination of AVFMT_FLAG_*. * Set by the user before avformat_open_input() / avformat_write_header(). */ int flags; #define AVFMT_FLAG_GENPTS 0x0001 ///< Generate missing pts even if it requires parsing future frames. #define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index. #define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input. #define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS #define AVFMT_FLAG_NOFILLIN 0x0010 ///< Do not infer any values from other values, just return what is stored in the container #define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled #define AVFMT_FLAG_NOBUFFER 0x0040 ///< Do not buffer frames when possible #define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it. #define AVFMT_FLAG_DISCARD_CORRUPT 0x0100 ///< Discard frames marked corrupted #define AVFMT_FLAG_FLUSH_PACKETS 0x0200 ///< Flush the AVIOContext every packet. /** * When muxing, try to avoid writing any random/volatile data to the output. * This includes any random IDs, real-time timestamps/dates, muxer version, etc. * * This flag is mainly intended for testing. */ #define AVFMT_FLAG_BITEXACT 0x0400 #define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Enable RTP MP4A-LATM payload #define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down) #define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (this could be made default once all code is converted) #define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Don't merge side data but keep it separate. #define AVFMT_FLAG_FAST_SEEK 0x80000 ///< Enable fast, but inaccurate seeks for some formats #define AVFMT_FLAG_SHORTEST 0x100000 ///< Stop muxing when the shortest stream stops. #define AVFMT_FLAG_AUTO_BSF 0x200000 ///< Wait for packet data before writing a header, and add bitstream filters as requested by the muxer /** * Maximum size of the data read from input for determining * the input container format. * Demuxing only, set by the caller before avformat_open_input(). */ int64_t probesize; /** * Maximum duration (in AV_TIME_BASE units) of the data read * from input in avformat_find_stream_info(). * Demuxing only, set by the caller before avformat_find_stream_info(). * Can be set to 0 to let avformat choose using a heuristic. */ int64_t max_analyze_duration; const uint8_t *key; int keylen; unsigned int nb_programs; AVProgram **programs; /** * Forced video codec_id. * Demuxing: Set by user. */ enum AVCodecID video_codec_id; /** * Forced audio codec_id. * Demuxing: Set by user. */ enum AVCodecID audio_codec_id; /** * Forced subtitle codec_id. * Demuxing: Set by user. */ enum AVCodecID subtitle_codec_id; /** * Maximum amount of memory in bytes to use for the index of each stream. * If the index exceeds this size, entries will be discarded as * needed to maintain a smaller size. This can lead to slower or less * accurate seeking (depends on demuxer). * Demuxers for which a full in-memory index is mandatory will ignore * this. * - muxing: unused * - demuxing: set by user */ unsigned int max_index_size; /** * Maximum amount of memory in bytes to use for buffering frames * obtained from realtime capture devices. */ unsigned int max_picture_buffer; /** * Number of chapters in AVChapter array. * When muxing, chapters are normally written in the file header, * so nb_chapters should normally be initialized before write_header * is called. Some muxers (e.g. mov and mkv) can also write chapters * in the trailer. To write chapters in the trailer, nb_chapters * must be zero when write_header is called and non-zero when * write_trailer is called. * - muxing: set by user * - demuxing: set by libavformat */ unsigned int nb_chapters; AVChapter **chapters; /** * Metadata that applies to the whole file. * * - demuxing: set by libavformat in avformat_open_input() * - muxing: may be set by the caller before avformat_write_header() * * Freed by libavformat in avformat_free_context(). */ AVDictionary *metadata; /** * Start time of the stream in real world time, in microseconds * since the Unix epoch (00:00 1st January 1970). That is, pts=0 in the * stream was captured at this real world time. * - muxing: Set by the caller before avformat_write_header(). If set to * either 0 or AV_NOPTS_VALUE, then the current wall-time will * be used. * - demuxing: Set by libavformat. AV_NOPTS_VALUE if unknown. Note that * the value may become known after some number of frames * have been received. */ int64_t start_time_realtime; /** * The number of frames used for determining the framerate in * avformat_find_stream_info(). * Demuxing only, set by the caller before avformat_find_stream_info(). */ int fps_probe_size; /** * Error recognition; higher values will detect more errors but may * misdetect some more or less valid parts as errors. * Demuxing only, set by the caller before avformat_open_input(). */ int error_recognition; /** * Custom interrupt callbacks for the I/O layer. * * demuxing: set by the user before avformat_open_input(). * muxing: set by the user before avformat_write_header() * (mainly useful for AVFMT_NOFILE formats). The callback * should also be passed to avio_open2() if it's used to * open the file. */ AVIOInterruptCB interrupt_callback; /** * Flags to enable debugging. */ int debug; #define FF_FDEBUG_TS 0x0001 /** * Maximum buffering duration for interleaving. * * To ensure all the streams are interleaved correctly, * av_interleaved_write_frame() will wait until it has at least one packet * for each stream before actually writing any packets to the output file. * When some streams are "sparse" (i.e. there are large gaps between * successive packets), this can result in excessive buffering. * * This field specifies the maximum difference between the timestamps of the * first and the last packet in the muxing queue, above which libavformat * will output a packet regardless of whether it has queued a packet for all * the streams. * * Muxing only, set by the caller before avformat_write_header(). */ int64_t max_interleave_delta; /** * Allow non-standard and experimental extension * @see AVCodecContext.strict_std_compliance */ int strict_std_compliance; /** * Flags for the user to detect events happening on the file. Flags must * be cleared by the user once the event has been handled. * A combination of AVFMT_EVENT_FLAG_*. */ int event_flags; #define AVFMT_EVENT_FLAG_METADATA_UPDATED 0x0001 ///< The call resulted in updated metadata. /** * Maximum number of packets to read while waiting for the first timestamp. * Decoding only. */ int max_ts_probe; /** * Avoid negative timestamps during muxing. * Any value of the AVFMT_AVOID_NEG_TS_* constants. * Note, this only works when using av_interleaved_write_frame. (interleave_packet_per_dts is in use) * - muxing: Set by user * - demuxing: unused */ int avoid_negative_ts; #define AVFMT_AVOID_NEG_TS_AUTO -1 ///< Enabled when required by target format #define AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE 1 ///< Shift timestamps so they are non negative #define AVFMT_AVOID_NEG_TS_MAKE_ZERO 2 ///< Shift timestamps so that they start at 0 /** * Transport stream id. * This will be moved into demuxer private options. Thus no API/ABI compatibility */ int ts_id; /** * Audio preload in microseconds. * Note, not all formats support this and unpredictable things may happen if it is used when not supported. * - encoding: Set by user via AVOptions (NO direct access) * - decoding: unused */ int audio_preload; /** * Max chunk time in microseconds. * Note, not all formats support this and unpredictable things may happen if it is used when not supported. * - encoding: Set by user via AVOptions (NO direct access) * - decoding: unused */ int max_chunk_duration; /** * Max chunk size in bytes * Note, not all formats support this and unpredictable things may happen if it is used when not supported. * - encoding: Set by user via AVOptions (NO direct access) * - decoding: unused */ int max_chunk_size; /** * forces the use of wallclock timestamps as pts/dts of packets * This has undefined results in the presence of B frames. * - encoding: unused * - decoding: Set by user via AVOptions (NO direct access) */ int use_wallclock_as_timestamps; /** * avio flags, used to force AVIO_FLAG_DIRECT. * - encoding: unused * - decoding: Set by user via AVOptions (NO direct access) */ int avio_flags; /** * The duration field can be estimated through various ways, and this field can be used * to know how the duration was estimated. * - encoding: unused * - decoding: Read by user via AVOptions (NO direct access) */ enum AVDurationEstimationMethod duration_estimation_method; /** * Skip initial bytes when opening stream * - encoding: unused * - decoding: Set by user via AVOptions (NO direct access) */ int64_t skip_initial_bytes; /** * Correct single timestamp overflows * - encoding: unused * - decoding: Set by user via AVOptions (NO direct access) */ unsigned int correct_ts_overflow; /** * Force seeking to any (also non key) frames. * - encoding: unused * - decoding: Set by user via AVOptions (NO direct access) */ int seek2any; /** * Flush the I/O context after each packet. * - encoding: Set by user via AVOptions (NO direct access) * - decoding: unused */ int flush_packets; /** * format probing score. * The maximal score is AVPROBE_SCORE_MAX, its set when the demuxer probes * the format. * - encoding: unused * - decoding: set by avformat, read by user via av_format_get_probe_score() (NO direct access) */ int probe_score; /** * number of bytes to read maximally to identify format. * - encoding: unused * - decoding: set by user through AVOPtions (NO direct access) */ int format_probesize; /** * ',' 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; /** * ',' separated list of allowed demuxers. * If NULL then all are allowed * - encoding: unused * - decoding: set by user through AVOptions (NO direct access) */ char *format_whitelist; /** * An opaque field for libavformat internal usage. * Must not be accessed in any way by callers. */ AVFormatInternal *internal; /** * IO repositioned flag. * This is set by avformat when the underlaying IO context read pointer * is repositioned, for example when doing byte based seeking. * Demuxers can use the flag to detect such changes. */ int io_repositioned; /** * Forced video codec. * This allows forcing a specific decoder, even when there are multiple with * the same codec_id. * Demuxing: Set by user via av_format_set_video_codec (NO direct access). */ AVCodec *video_codec; /** * Forced audio codec. * This allows forcing a specific decoder, even when there are multiple with * the same codec_id. * Demuxing: Set by user via av_format_set_audio_codec (NO direct access). */ AVCodec *audio_codec; /** * Forced subtitle codec. * This allows forcing a specific decoder, even when there are multiple with * the same codec_id. * Demuxing: Set by user via av_format_set_subtitle_codec (NO direct access). */ AVCodec *subtitle_codec; /** * Forced data codec. * This allows forcing a specific decoder, even when there are multiple with * the same codec_id. * Demuxing: Set by user via av_format_set_data_codec (NO direct access). */ AVCodec *data_codec; /** * Number of bytes to be written as padding in a metadata header. * Demuxing: Unused. * Muxing: Set by user via av_format_set_metadata_header_padding. */ int metadata_header_padding; /** * User data. * This is a place for some private data of the user. */ void *opaque; /** * Callback used by devices to communicate with application. */ av_format_control_message control_message_cb; /** * Output timestamp offset, in microseconds. * Muxing: set by user via AVOptions (NO direct access) */ int64_t output_ts_offset; /** * dump format separator. * can be ", " or "\n " or anything else * Code outside libavformat should access this field using AVOptions * (NO direct access). * - muxing: Set by user. * - demuxing: Set by user. */ uint8_t *dump_separator; /** * Forced Data codec_id. * Demuxing: Set by user. */ enum AVCodecID data_codec_id; #if FF_API_OLD_OPEN_CALLBACKS /** * Called to open further IO contexts when needed for demuxing. * * This can be set by the user application to perform security checks on * the URLs before opening them. * The function should behave like avio_open2(), AVFormatContext is provided * as contextual information and to reach AVFormatContext.opaque. * * If NULL then some simple checks are used together with avio_open2(). * * Must not be accessed directly from outside avformat. * @See av_format_set_open_cb() * * Demuxing: Set by user. * * @deprecated Use io_open and io_close. */ attribute_deprecated int (*open_cb)(struct AVFormatContext *s, AVIOContext **p, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options); #endif /** * ',' separated list of allowed protocols. * - encoding: unused * - decoding: set by user through AVOptions (NO direct access) */ char *protocol_whitelist; /* * A callback for opening new IO streams. * * Whenever a muxer or a demuxer needs to open an IO stream (typically from * avformat_open_input() for demuxers, but for certain formats can happen at * other times as well), it will call this callback to obtain an IO context. * * @param s the format context * @param pb on success, the newly opened IO context should be returned here * @param url the url to open * @param flags a combination of AVIO_FLAG_* * @param options a dictionary of additional options, with the same * semantics as in avio_open2() * @return 0 on success, a negative AVERROR code on failure * * @note Certain muxers and demuxers do nesting, i.e. they open one or more * additional internal format contexts. Thus the AVFormatContext pointer * passed to this callback may be different from the one facing the caller. * It will, however, have the same 'opaque' field. */ int (*io_open)(struct AVFormatContext *s, AVIOContext **pb, const char *url, int flags, AVDictionary **options); /** * A callback for closing the streams opened with AVFormatContext.io_open(). */ void (*io_close)(struct AVFormatContext *s, AVIOContext *pb); /** * ',' separated list of disallowed protocols. * - encoding: unused * - decoding: set by user through AVOptions (NO direct access) */ char *protocol_blacklist; } AVFormatContext; int av_format_get_probe_score(const AVFormatContext *s); AVCodec * av_format_get_video_codec(const AVFormatContext *s); void av_format_set_video_codec(AVFormatContext *s, AVCodec *c); AVCodec * av_format_get_audio_codec(const AVFormatContext *s); void av_format_set_audio_codec(AVFormatContext *s, AVCodec *c); AVCodec * av_format_get_subtitle_codec(const AVFormatContext *s); void av_format_set_subtitle_codec(AVFormatContext *s, AVCodec *c); AVCodec * av_format_get_data_codec(const AVFormatContext *s); void av_format_set_data_codec(AVFormatContext *s, AVCodec *c); int av_format_get_metadata_header_padding(const AVFormatContext *s); void av_format_set_metadata_header_padding(AVFormatContext *s, int c); void * av_format_get_opaque(const AVFormatContext *s); void av_format_set_opaque(AVFormatContext *s, void *opaque); av_format_control_message av_format_get_control_message_cb(const AVFormatContext *s); void av_format_set_control_message_cb(AVFormatContext *s, av_format_control_message callback); #if FF_API_OLD_OPEN_CALLBACKS attribute_deprecated AVOpenCallback av_format_get_open_cb(const AVFormatContext *s); attribute_deprecated void av_format_set_open_cb(AVFormatContext *s, AVOpenCallback callback); #endif /** * This function will cause global side data to be injected in the next packet * of each stream as well as after any subsequent seek. */ void av_format_inject_global_side_data(AVFormatContext *s); /** * Returns the method used to set ctx->duration. * * @return AVFMT_DURATION_FROM_PTS, AVFMT_DURATION_FROM_STREAM, or AVFMT_DURATION_FROM_BITRATE. */ enum AVDurationEstimationMethod av_fmt_ctx_get_duration_estimation_method(const AVFormatContext* ctx); typedef struct AVPacketList { AVPacket pkt; struct AVPacketList *next; } AVPacketList; /** * @defgroup lavf_core Core functions * @ingroup libavf * * Functions for querying libavformat capabilities, allocating core structures, * etc. * @{ */ /** * Return the LIBAVFORMAT_VERSION_INT constant. */ unsigned avformat_version(void); /** * Return the libavformat build-time configuration. */ const char *avformat_configuration(void); /** * Return the libavformat license. */ const char *avformat_license(void); /** * Initialize libavformat and register all the muxers, demuxers and * protocols. If you do not call this function, then you can select * exactly which formats you want to support. * * @see av_register_input_format() * @see av_register_output_format() */ void av_register_all(void); void av_register_input_format(AVInputFormat *format); void av_register_output_format(AVOutputFormat *format); /** * Do global initialization of network components. This is optional, * but recommended, since it avoids the overhead of implicitly * doing the setup for each session. * * Calling this function will become mandatory if using network * protocols at some major version bump. */ int avformat_network_init(void); /** * Undo the initialization done by avformat_network_init. */ int avformat_network_deinit(void); /** * If f is NULL, returns the first registered input format, * if f is non-NULL, returns the next registered input format after f * or NULL if f is the last one. */ AVInputFormat *av_iformat_next(const AVInputFormat *f); /** * If f is NULL, returns the first registered output format, * if f is non-NULL, returns the next registered output format after f * or NULL if f is the last one. */ AVOutputFormat *av_oformat_next(const AVOutputFormat *f); /** * Allocate an AVFormatContext. * avformat_free_context() can be used to free the context and everything * allocated by the framework within it. */ AVFormatContext *avformat_alloc_context(void); /** * Free an AVFormatContext and all its streams. * @param s context to free */ void avformat_free_context(AVFormatContext *s); /** * Get the AVClass for AVFormatContext. It can be used in combination with * AV_OPT_SEARCH_FAKE_OBJ for examining options. * * @see av_opt_find(). */ const AVClass *avformat_get_class(void); /** * Add a new stream to a media file. * * When demuxing, it is called by the demuxer in read_header(). If the * flag AVFMTCTX_NOHEADER is set in s.ctx_flags, then it may also * be called in read_packet(). * * When muxing, should be called by the user before avformat_write_header(). * * User is required to call avcodec_close() and avformat_free_context() to * clean up the allocation by avformat_new_stream(). * * @param s media file handle * @param c If non-NULL, the AVCodecContext corresponding to the new stream * will be initialized to use this codec. This is needed for e.g. codec-specific * defaults to be set, so codec should be provided if it is known. * * @return newly created stream or NULL on error. */ AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c); /** * Allocate new information from stream. * * @param stream stream * @param type desired side information type * @param size side information size * @return pointer to fresh allocated data or NULL otherwise */ uint8_t *av_stream_new_side_data(AVStream *stream, enum AVPacketSideDataType type, int size); /** * Get side information from stream. * * @param stream stream * @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 */ #if FF_API_NOCONST_GET_SIDE_DATA uint8_t *av_stream_get_side_data(AVStream *stream, enum AVPacketSideDataType type, int *size); #else uint8_t *av_stream_get_side_data(const AVStream *stream, enum AVPacketSideDataType type, int *size); #endif AVProgram *av_new_program(AVFormatContext *s, int id); /** * @} */ /** * Allocate an AVFormatContext for an output format. * avformat_free_context() can be used to free the context and * everything allocated by the framework within it. * * @param *ctx is set to the created format context, or to NULL in * case of failure * @param oformat format to use for allocating the context, if NULL * format_name and filename are used instead * @param format_name the name of output format to use for allocating the * context, if NULL filename is used instead * @param filename the name of the filename to use for allocating the * context, may be NULL * @return >= 0 in case of success, a negative AVERROR code in case of * failure */ int avformat_alloc_output_context2(AVFormatContext **ctx, AVOutputFormat *oformat, const char *format_name, const char *filename); /** * @addtogroup lavf_decoding * @{ */ /** * Find AVInputFormat based on the short name of the input format. */ AVInputFormat *av_find_input_format(const char *short_name); /** * Guess the file format. * * @param pd data to be probed * @param is_opened Whether the file is already opened; determines whether * demuxers with or without AVFMT_NOFILE are probed. */ AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened); /** * Guess the file format. * * @param pd data to be probed * @param is_opened Whether the file is already opened; determines whether * demuxers with or without AVFMT_NOFILE are probed. * @param score_max A probe score larger that this is required to accept a * detection, the variable is set to the actual detection * score afterwards. * If the score is <= AVPROBE_SCORE_MAX / 4 it is recommended * to retry with a larger probe buffer. */ AVInputFormat *av_probe_input_format2(AVProbeData *pd, int is_opened, int *score_max); /** * Guess the file format. * * @param is_opened Whether the file is already opened; determines whether * demuxers with or without AVFMT_NOFILE are probed. * @param score_ret The score of the best detection. */ AVInputFormat *av_probe_input_format3(AVProbeData *pd, int is_opened, int *score_ret); /** * Probe a bytestream to determine the input format. Each time a probe returns * with a score that is too low, the probe buffer size is increased and another * attempt is made. When the maximum probe size is reached, the input format * with the highest score is returned. * * @param pb the bytestream to probe * @param fmt the input format is put here * @param url the url of the stream * @param logctx the log context * @param offset the offset within the bytestream to probe from * @param max_probe_size the maximum probe buffer size (zero for default) * @return the score in case of success, a negative value corresponding to an * the maximal score is AVPROBE_SCORE_MAX * AVERROR code otherwise */ int av_probe_input_buffer2(AVIOContext *pb, AVInputFormat **fmt, const char *url, void *logctx, unsigned int offset, unsigned int max_probe_size); /** * Like av_probe_input_buffer2() but returns 0 on success */ int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt, const char *url, void *logctx, unsigned int offset, unsigned int max_probe_size); /** * Open an input stream and read the header. The codecs are not opened. * The stream must be closed with avformat_close_input(). * * @param ps Pointer to user-supplied AVFormatContext (allocated by avformat_alloc_context). * May be a pointer to NULL, in which case an AVFormatContext is allocated by this * function and written into ps. * Note that a user-supplied AVFormatContext will be freed on failure. * @param url URL of the stream to open. * @param fmt If non-NULL, this parameter forces a specific input format. * Otherwise the format is autodetected. * @param options A dictionary filled with AVFormatContext and demuxer-private options. * On return this parameter will be destroyed and replaced with a dict containing * options that were not found. May be NULL. * * @return 0 on success, a negative AVERROR on failure. * * @note If you want to use custom IO, preallocate the format context and set its pb field. */ int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options); attribute_deprecated int av_demuxer_open(AVFormatContext *ic); /** * Read packets of a media file to get stream information. This * is useful for file formats with no headers such as MPEG. This * function also computes the real framerate in case of MPEG-2 repeat * frame mode. * The logical file position is not changed by this function; * examined packets may be buffered for later processing. * * @param ic media file handle * @param options If non-NULL, an ic.nb_streams long array of pointers to * dictionaries, where i-th member contains options for * codec corresponding to i-th stream. * On return each dictionary will be filled with options that were not found. * @return >=0 if OK, AVERROR_xxx on error * * @note this function isn't guaranteed to open all the codecs, so * options being non-empty at return is a perfectly normal behavior. * * @todo Let the user decide somehow what information is needed so that * we do not waste time getting stuff the user does not need. */ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options); /** * Find the programs which belong to a given stream. * * @param ic media file handle * @param last the last found program, the search will start after this * program, or from the beginning if it is NULL * @param s stream index * @return the next program which belongs to s, NULL if no program is found or * the last program is not among the programs of ic. */ AVProgram *av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s); void av_program_add_stream_index(AVFormatContext *ac, int progid, unsigned int idx); /** * Find the "best" stream in the file. * The best stream is determined according to various heuristics as the most * likely to be what the user expects. * If the decoder parameter is non-NULL, av_find_best_stream will find the * default decoder for the stream's codec; streams for which no decoder can * be found are ignored. * * @param ic media file handle * @param type stream type: video, audio, subtitles, etc. * @param wanted_stream_nb user-requested stream number, * or -1 for automatic selection * @param related_stream try to find a stream related (eg. in the same * program) to this one, or -1 if none * @param decoder_ret if non-NULL, returns the decoder for the * selected stream * @param flags flags; none are currently defined * @return the non-negative stream number in case of success, * AVERROR_STREAM_NOT_FOUND if no stream with the requested type * could be found, * AVERROR_DECODER_NOT_FOUND if streams were found but no decoder * @note If av_find_best_stream returns successfully and decoder_ret is not * NULL, then *decoder_ret is guaranteed to be set to a valid AVCodec. */ int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type, int wanted_stream_nb, int related_stream, AVCodec **decoder_ret, int flags); /** * Return the next frame of a stream. * This function returns what is stored in the file, and does not validate * that what is there are valid frames for the decoder. It will split what is * stored in the file into frames and return one for each call. It will not * omit invalid data between valid frames so as to give the decoder the maximum * information possible for decoding. * * If pkt->buf is NULL, then the packet is valid until the next * av_read_frame() or until avformat_close_input(). Otherwise the packet * is valid indefinitely. In both cases the packet must be freed with * av_packet_unref when it is no longer needed. For video, the packet contains * exactly one frame. For audio, it contains an integer number of frames if each * frame has a known fixed size (e.g. PCM or ADPCM data). If the audio frames * have a variable size (e.g. MPEG audio), then it contains one frame. * * pkt->pts, pkt->dts and pkt->duration are always set to correct * values in AVStream.time_base units (and guessed if the format cannot * provide them). pkt->pts can be AV_NOPTS_VALUE if the video format * has B-frames, so it is better to rely on pkt->dts if you do not * decompress the payload. * * @return 0 if OK, < 0 on error or end of file */ int av_read_frame(AVFormatContext *s, AVPacket *pkt); /** * Seek to the keyframe at timestamp. * 'timestamp' in 'stream_index'. * * @param s media file handle * @param stream_index If stream_index is (-1), a default * stream is selected, and timestamp is automatically converted * from AV_TIME_BASE units to the stream specific time_base. * @param timestamp Timestamp in AVStream.time_base units * or, if no stream is specified, in AV_TIME_BASE units. * @param flags flags which select direction and seeking mode * @return >= 0 on success */ int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags); /** * Seek to timestamp ts. * Seeking will be done so that the point from which all active streams * can be presented successfully will be closest to ts and within min/max_ts. * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. * * If flags contain AVSEEK_FLAG_BYTE, then all timestamps are in bytes and * are the file position (this may not be supported by all demuxers). * If flags contain AVSEEK_FLAG_FRAME, then all timestamps are in frames * in the stream with stream_index (this may not be supported by all demuxers). * Otherwise all timestamps are in units of the stream selected by stream_index * or if stream_index is -1, in AV_TIME_BASE units. * If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as * keyframes (this may not be supported by all demuxers). * If flags contain AVSEEK_FLAG_BACKWARD, it is ignored. * * @param s media file handle * @param stream_index index of the stream which is used as time base reference * @param min_ts smallest acceptable timestamp * @param ts target timestamp * @param max_ts largest acceptable timestamp * @param flags flags * @return >=0 on success, error code otherwise * * @note This is part of the new seek API which is still under construction. * Thus do not use this yet. It may change at any time, do not expect * ABI compatibility yet! */ int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags); /** * Discard all internally buffered data. This can be useful when dealing with * discontinuities in the byte stream. Generally works only with formats that * can resync. This includes headerless formats like MPEG-TS/TS but should also * work with NUT, Ogg and in a limited way AVI for example. * * The set of streams, the detected duration, stream parameters and codecs do * not change when calling this function. If you want a complete reset, it's * better to open a new AVFormatContext. * * This does not flush the AVIOContext (s->pb). If necessary, call * avio_flush(s->pb) before calling this function. * * @param s media file handle * @return >=0 on success, error code otherwise */ int avformat_flush(AVFormatContext *s); /** * Start playing a network-based stream (e.g. RTSP stream) at the * current position. */ int av_read_play(AVFormatContext *s); /** * Pause a network-based stream (e.g. RTSP stream). * * Use av_read_play() to resume it. */ int av_read_pause(AVFormatContext *s); /** * Close an opened input AVFormatContext. Free it and all its contents * and set *s to NULL. */ void avformat_close_input(AVFormatContext **s); /** * @} */ #define AVSEEK_FLAG_BACKWARD 1 ///< seek backward #define AVSEEK_FLAG_BYTE 2 ///< seeking based on position in bytes #define AVSEEK_FLAG_ANY 4 ///< seek to any frame, even non-keyframes #define AVSEEK_FLAG_FRAME 8 ///< seeking based on frame number /** * @addtogroup lavf_encoding * @{ */ #define AVSTREAM_INIT_IN_WRITE_HEADER 0 ///< stream parameters initialized in avformat_write_header #define AVSTREAM_INIT_IN_INIT_OUTPUT 1 ///< stream parameters initialized in avformat_init_output /** * Allocate the stream private data and write the stream header to * an output media file. * * @param s Media file handle, must be allocated with avformat_alloc_context(). * Its oformat field must be set to the desired output format; * Its pb field must be set to an already opened AVIOContext. * @param options An AVDictionary filled with AVFormatContext and muxer-private options. * On return this parameter will be destroyed and replaced with a dict containing * options that were not found. May be NULL. * * @return AVSTREAM_INIT_IN_WRITE_HEADER on success if the codec had not already been fully initialized in avformat_init, * AVSTREAM_INIT_IN_INIT_OUTPUT on success if the codec had already been fully initialized in avformat_init, * negative AVERROR on failure. * * @see av_opt_find, av_dict_set, avio_open, av_oformat_next, avformat_init_output. */ av_warn_unused_result int avformat_write_header(AVFormatContext *s, AVDictionary **options); /** * Allocate the stream private data and initialize the codec, but do not write the header. * May optionally be used before avformat_write_header to initialize stream parameters * before actually writing the header. * If using this function, do not pass the same options to avformat_write_header. * * @param s Media file handle, must be allocated with avformat_alloc_context(). * Its oformat field must be set to the desired output format; * Its pb field must be set to an already opened AVIOContext. * @param options An AVDictionary filled with AVFormatContext and muxer-private options. * On return this parameter will be destroyed and replaced with a dict containing * options that were not found. May be NULL. * * @return AVSTREAM_INIT_IN_WRITE_HEADER on success if the codec requires avformat_write_header to fully initialize, * AVSTREAM_INIT_IN_INIT_OUTPUT on success if the codec has been fully initialized, * negative AVERROR on failure. * * @see av_opt_find, av_dict_set, avio_open, av_oformat_next, avformat_write_header. */ av_warn_unused_result int avformat_init_output(AVFormatContext *s, AVDictionary **options); /** * Write a packet to an output media file. * * This function passes the packet directly to the muxer, without any buffering * or reordering. The caller is responsible for correctly interleaving the * packets if the format requires it. Callers that want libavformat to handle * the interleaving should call av_interleaved_write_frame() instead of this * function. * * @param s media file handle * @param pkt The packet containing the data to be written. Note that unlike * av_interleaved_write_frame(), this function does not take * ownership of the packet passed to it (though some muxers may make * an internal reference to the input packet). *
* This parameter can be NULL (at any time, not just at the end), in * order to immediately flush data buffered within the muxer, for * muxers that buffer up data internally before writing it to the * output. *
* Packet's @ref AVPacket.stream_index "stream_index" field must be * set to the index of the corresponding stream in @ref * AVFormatContext.streams "s->streams". *
* The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") * must be set to correct values in the stream's timebase (unless the * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then * they can be set to AV_NOPTS_VALUE). * The dts for subsequent packets passed to this function must be strictly * increasing when compared in their respective timebases (unless the * output format is flagged with the AVFMT_TS_NONSTRICT, then they * merely have to be nondecreasing). @ref AVPacket.duration * "duration") should also be set if known. * @return < 0 on error, = 0 if OK, 1 if flushed and there is no more data to flush * * @see av_interleaved_write_frame() */ int av_write_frame(AVFormatContext *s, AVPacket *pkt); /** * Write a packet to an output media file ensuring correct interleaving. * * This function will buffer the packets internally as needed to make sure the * packets in the output file are properly interleaved in the order of * increasing dts. Callers doing their own interleaving should call * av_write_frame() instead of this function. * * Using this function instead of av_write_frame() can give muxers advance * knowledge of future packets, improving e.g. the behaviour of the mp4 * muxer for VFR content in fragmenting mode. * * @param s media file handle * @param pkt The packet containing the data to be written. *
* If the packet is reference-counted, this function will take * ownership of this reference and unreference it later when it sees * fit. * The caller must not access the data through this reference after * this function returns. If the packet is not reference-counted, * libavformat will make a copy. *
* This parameter can be NULL (at any time, not just at the end), to * flush the interleaving queues. *
* Packet's @ref AVPacket.stream_index "stream_index" field must be * set to the index of the corresponding stream in @ref * AVFormatContext.streams "s->streams". *
* The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") * must be set to correct values in the stream's timebase (unless the * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then * they can be set to AV_NOPTS_VALUE). * The dts for subsequent packets in one stream must be strictly * increasing (unless the output format is flagged with the * AVFMT_TS_NONSTRICT, then they merely have to be nondecreasing). * @ref AVPacket.duration "duration") should also be set if known. * * @return 0 on success, a negative AVERROR on error. Libavformat will always * take care of freeing the packet, even if this function fails. * * @see av_write_frame(), AVFormatContext.max_interleave_delta */ int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt); /** * Write an uncoded frame to an output media file. * * The frame must be correctly interleaved according to the container * specification; if not, then av_interleaved_write_frame() must be used. * * See av_interleaved_write_frame() for details. */ int av_write_uncoded_frame(AVFormatContext *s, int stream_index, AVFrame *frame); /** * Write an uncoded frame to an output media file. * * If the muxer supports it, this function makes it possible to write an AVFrame * structure directly, without encoding it into a packet. * It is mostly useful for devices and similar special muxers that use raw * video or PCM data and will not serialize it into a byte stream. * * To test whether it is possible to use it with a given muxer and stream, * use av_write_uncoded_frame_query(). * * The caller gives up ownership of the frame and must not access it * afterwards. * * @return >=0 for success, a negative code on error */ int av_interleaved_write_uncoded_frame(AVFormatContext *s, int stream_index, AVFrame *frame); /** * Test whether a muxer supports uncoded frame. * * @return >=0 if an uncoded frame can be written to that muxer and stream, * <0 if not */ int av_write_uncoded_frame_query(AVFormatContext *s, int stream_index); /** * Write the stream trailer to an output media file and free the * file private data. * * May only be called after a successful call to avformat_write_header. * * @param s media file handle * @return 0 if OK, AVERROR_xxx on error */ int av_write_trailer(AVFormatContext *s); /** * Return the output format in the list of registered output formats * which best matches the provided parameters, or return NULL if * there is no match. * * @param short_name if non-NULL checks if short_name matches with the * names of the registered formats * @param filename if non-NULL checks if filename terminates with the * extensions of the registered formats * @param mime_type if non-NULL checks if mime_type matches with the * MIME type of the registered formats */ AVOutputFormat *av_guess_format(const char *short_name, const char *filename, const char *mime_type); /** * Guess the codec ID based upon muxer and filename. */ enum AVCodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name, const char *filename, const char *mime_type, enum AVMediaType type); /** * Get timing information for the data currently output. * The exact meaning of "currently output" depends on the format. * It is mostly relevant for devices that have an internal buffer and/or * work in real time. * @param s media file handle * @param stream stream in the media file * @param[out] dts DTS of the last packet output for the stream, in stream * time_base units * @param[out] wall absolute time when that packet whas output, * in microsecond * @return 0 if OK, AVERROR(ENOSYS) if the format does not support it * Note: some formats or devices may not allow to measure dts and wall * atomically. */ int av_get_output_timestamp(struct AVFormatContext *s, int stream, int64_t *dts, int64_t *wall); /** * @} */ /** * @defgroup lavf_misc Utility functions * @ingroup libavf * @{ * * Miscellaneous utility functions related to both muxing and demuxing * (or neither). */ /** * Send a nice hexadecimal dump of a buffer to the specified file stream. * * @param f The file stream pointer where the dump should be sent to. * @param buf buffer * @param size buffer size * * @see av_hex_dump_log, av_pkt_dump2, av_pkt_dump_log2 */ void av_hex_dump(FILE *f, const uint8_t *buf, int size); /** * Send a nice hexadecimal dump of a buffer to the log. * * @param avcl A pointer to an arbitrary struct of which the first field is a * pointer to an AVClass struct. * @param level The importance level of the message, lower values signifying * higher importance. * @param buf buffer * @param size buffer size * * @see av_hex_dump, av_pkt_dump2, av_pkt_dump_log2 */ void av_hex_dump_log(void *avcl, int level, const uint8_t *buf, int size); /** * Send a nice dump of a packet to the specified file stream. * * @param f The file stream pointer where the dump should be sent to. * @param pkt packet to dump * @param dump_payload True if the payload must be displayed, too. * @param st AVStream that the packet belongs to */ void av_pkt_dump2(FILE *f, const AVPacket *pkt, int dump_payload, const AVStream *st); /** * Send a nice dump of a packet to the log. * * @param avcl A pointer to an arbitrary struct of which the first field is a * pointer to an AVClass struct. * @param level The importance level of the message, lower values signifying * higher importance. * @param pkt packet to dump * @param dump_payload True if the payload must be displayed, too. * @param st AVStream that the packet belongs to */ void av_pkt_dump_log2(void *avcl, int level, const AVPacket *pkt, int dump_payload, const AVStream *st); /** * Get the AVCodecID for the given codec tag tag. * If no codec id is found returns AV_CODEC_ID_NONE. * * @param tags list of supported codec_id-codec_tag pairs, as stored * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag * @param tag codec tag to match to a codec ID */ enum AVCodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag); /** * Get the codec tag for the given codec id id. * If no codec tag is found returns 0. * * @param tags list of supported codec_id-codec_tag pairs, as stored * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag * @param id codec ID to match to a codec tag */ unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum AVCodecID id); /** * Get the codec tag for the given codec id. * * @param tags list of supported codec_id - codec_tag pairs, as stored * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag * @param id codec id that should be searched for in the list * @param tag A pointer to the found tag * @return 0 if id was not found in tags, > 0 if it was found */ int av_codec_get_tag2(const struct AVCodecTag * const *tags, enum AVCodecID id, unsigned int *tag); int av_find_default_stream_index(AVFormatContext *s); /** * Get the index for a specific timestamp. * * @param st stream that the timestamp belongs to * @param timestamp timestamp to retrieve the index for * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond * to the timestamp which is <= the requested one, if backward * is 0, then it will be >= * if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise * @return < 0 if no such timestamp could be found */ int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags); /** * Add an index entry into a sorted list. Update the entry if the list * already contains it. * * @param timestamp timestamp in the time base of the given stream */ int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, int size, int distance, int flags); /** * Split a URL string into components. * * The pointers to buffers for storing individual components may be null, * in order to ignore that component. Buffers for components not found are * set to empty strings. If the port is not found, it is set to a negative * value. * * @param proto the buffer for the protocol * @param proto_size the size of the proto buffer * @param authorization the buffer for the authorization * @param authorization_size the size of the authorization buffer * @param hostname the buffer for the host name * @param hostname_size the size of the hostname buffer * @param port_ptr a pointer to store the port number in * @param path the buffer for the path * @param path_size the size of the path buffer * @param url the URL to split */ void av_url_split(char *proto, int proto_size, char *authorization, int authorization_size, char *hostname, int hostname_size, int *port_ptr, char *path, int path_size, const char *url); /** * Print detailed information about the input or output format, such as * duration, bitrate, streams, container, programs, metadata, side data, * codec and time base. * * @param ic the context to analyze * @param index index of the stream to dump information about * @param url the URL to print, such as source or destination file * @param is_output Select whether the specified context is an input(0) or output(1) */ void av_dump_format(AVFormatContext *ic, int index, const char *url, int is_output); #define AV_FRAME_FILENAME_FLAGS_MULTIPLE 1 ///< Allow multiple %d /** * Return in 'buf' the path with '%d' replaced by a number. * * Also handles the '%0nd' format where 'n' is the total number * of digits and '%%'. * * @param buf destination buffer * @param buf_size destination buffer size * @param path numbered sequence string * @param number frame number * @param flags AV_FRAME_FILENAME_FLAGS_* * @return 0 if OK, -1 on format error */ int av_get_frame_filename2(char *buf, int buf_size, const char *path, int number, int flags); int av_get_frame_filename(char *buf, int buf_size, const char *path, int number); /** * Check whether filename actually is a numbered sequence generator. * * @param filename possible numbered sequence string * @return 1 if a valid numbered sequence string, 0 otherwise */ int av_filename_number_test(const char *filename); /** * Generate an SDP for an RTP session. * * Note, this overwrites the id values of AVStreams in the muxer contexts * for getting unique dynamic payload types. * * @param ac array of AVFormatContexts describing the RTP streams. If the * array is composed by only one context, such context can contain * multiple AVStreams (one AVStream per RTP stream). Otherwise, * all the contexts in the array (an AVCodecContext per RTP stream) * must contain only one AVStream. * @param n_files number of AVCodecContexts contained in ac * @param buf buffer where the SDP will be stored (must be allocated by * the caller) * @param size the size of the buffer * @return 0 if OK, AVERROR_xxx on error */ int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size); /** * Return a positive value if the given filename has one of the given * extensions, 0 otherwise. * * @param filename file name to check against the given extensions * @param extensions a comma-separated list of filename extensions */ int av_match_ext(const char *filename, const char *extensions); /** * Test if the given container can store a codec. * * @param ofmt container to check for compatibility * @param codec_id codec to potentially store in container * @param std_compliance standards compliance level, one of FF_COMPLIANCE_* * * @return 1 if codec with ID codec_id can be stored in ofmt, 0 if it cannot. * A negative number if this information is not available. */ int avformat_query_codec(const AVOutputFormat *ofmt, enum AVCodecID codec_id, int std_compliance); /** * @defgroup riff_fourcc RIFF FourCCs * @{ * Get the tables mapping RIFF FourCCs to libavcodec AVCodecIDs. The tables are * meant to be passed to av_codec_get_id()/av_codec_get_tag() as in the * following code: * @code * uint32_t tag = MKTAG('H', '2', '6', '4'); * const struct AVCodecTag *table[] = { avformat_get_riff_video_tags(), 0 }; * enum AVCodecID id = av_codec_get_id(table, tag); * @endcode */ /** * @return the table mapping RIFF FourCCs for video to libavcodec AVCodecID. */ const struct AVCodecTag *avformat_get_riff_video_tags(void); /** * @return the table mapping RIFF FourCCs for audio to AVCodecID. */ const struct AVCodecTag *avformat_get_riff_audio_tags(void); /** * @return the table mapping MOV FourCCs for video to libavcodec AVCodecID. */ const struct AVCodecTag *avformat_get_mov_video_tags(void); /** * @return the table mapping MOV FourCCs for audio to AVCodecID. */ const struct AVCodecTag *avformat_get_mov_audio_tags(void); /** * @} */ /** * Guess the sample aspect ratio of a frame, based on both the stream and the * frame aspect ratio. * * Since the frame aspect ratio is set by the codec but the stream aspect ratio * is set by the demuxer, these two may not be equal. This function tries to * return the value that you should use if you would like to display the frame. * * Basic logic is to use the stream aspect ratio if it is set to something sane * otherwise use the frame aspect ratio. This way a container setting, which is * usually easy to modify can override the coded value in the frames. * * @param format the format context which the stream is part of * @param stream the stream which the frame is part of * @param frame the frame with the aspect ratio to be determined * @return the guessed (valid) sample_aspect_ratio, 0/1 if no idea */ AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame); /** * Guess the frame rate, based on both the container and codec information. * * @param ctx the format context which the stream is part of * @param stream the stream which the frame is part of * @param frame the frame for which the frame rate should be determined, may be NULL * @return the guessed (valid) frame rate, 0/1 if no idea */ AVRational av_guess_frame_rate(AVFormatContext *ctx, AVStream *stream, AVFrame *frame); /** * Check if the stream st contained in s is matched by the stream specifier * spec. * * See the "stream specifiers" chapter in the documentation for the syntax * of spec. * * @return >0 if st is matched by spec; * 0 if st is not matched by spec; * AVERROR code if spec is invalid * * @note A stream specifier can match several streams in the format. */ int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec); int avformat_queue_attached_pictures(AVFormatContext *s); /** * Apply a list of bitstream filters to a packet. * * @param codec AVCodecContext, usually from an AVStream * @param pkt the packet to apply filters to. If, on success, the returned * packet has size == 0 and side_data_elems == 0, it indicates that * the packet should be dropped * @param bsfc a NULL-terminated list of filters to apply * @return >=0 on success; * AVERROR code on failure */ #if FF_API_OLD_BSF attribute_deprecated int av_apply_bitstream_filters(AVCodecContext *codec, AVPacket *pkt, AVBitStreamFilterContext *bsfc); #endif enum AVTimebaseSource { AVFMT_TBCF_AUTO = -1, AVFMT_TBCF_DECODER, AVFMT_TBCF_DEMUXER, #if FF_API_R_FRAME_RATE AVFMT_TBCF_R_FRAMERATE, #endif }; /** * Transfer internal timing information from one stream to another. * * This function is useful when doing stream copy. * * @param ofmt target output format for ost * @param ost output stream which needs timings copy and adjustments * @param ist reference input stream to copy timings from * @param copy_tb define from where the stream codec timebase needs to be imported */ int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt, AVStream *ost, const AVStream *ist, enum AVTimebaseSource copy_tb); /** * Get the internal codec timebase from a stream. * * @param st input stream to extract the timebase from */ AVRational av_stream_get_codec_timebase(const AVStream *st); /** * @} */ #endif /* AVFORMAT_AVFORMAT_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavformat/avio.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 AVFORMAT_AVIO_H #define AVFORMAT_AVIO_H /** * @file * @ingroup lavf_io * Buffered I/O operations */ #include #include "libavutil/common.h" #include "libavutil/dict.h" #include "libavutil/log.h" #include "libavformat/version.h" #define AVIO_SEEKABLE_NORMAL 0x0001 /**< Seeking works like for a local file */ /** * Callback for checking whether to abort blocking functions. * AVERROR_EXIT is returned in this case by the interrupted * function. During blocking operations, callback is called with * opaque as parameter. If the callback returns 1, the * blocking operation will be aborted. * * No members can be added to this struct without a major bump, if * new elements have been added after this struct in AVFormatContext * or AVIOContext. */ typedef struct AVIOInterruptCB { int (*callback)(void*); void *opaque; } AVIOInterruptCB; /** * Directory entry types. */ enum AVIODirEntryType { AVIO_ENTRY_UNKNOWN, AVIO_ENTRY_BLOCK_DEVICE, AVIO_ENTRY_CHARACTER_DEVICE, AVIO_ENTRY_DIRECTORY, AVIO_ENTRY_NAMED_PIPE, AVIO_ENTRY_SYMBOLIC_LINK, AVIO_ENTRY_SOCKET, AVIO_ENTRY_FILE, AVIO_ENTRY_SERVER, AVIO_ENTRY_SHARE, AVIO_ENTRY_WORKGROUP, }; /** * Describes single entry of the directory. * * Only name and type fields are guaranteed be set. * Rest of fields are protocol or/and platform dependent and might be unknown. */ typedef struct AVIODirEntry { char *name; /**< Filename */ int type; /**< Type of the entry */ int utf8; /**< Set to 1 when name is encoded with UTF-8, 0 otherwise. Name can be encoded with UTF-8 even though 0 is set. */ int64_t size; /**< File size in bytes, -1 if unknown. */ int64_t modification_timestamp; /**< Time of last modification in microseconds since unix epoch, -1 if unknown. */ int64_t access_timestamp; /**< Time of last access in microseconds since unix epoch, -1 if unknown. */ int64_t status_change_timestamp; /**< Time of last status change in microseconds since unix epoch, -1 if unknown. */ int64_t user_id; /**< User ID of owner, -1 if unknown. */ int64_t group_id; /**< Group ID of owner, -1 if unknown. */ int64_t filemode; /**< Unix file mode, -1 if unknown. */ } AVIODirEntry; typedef struct AVIODirContext { struct URLContext *url_context; } AVIODirContext; /** * Different data types that can be returned via the AVIO * write_data_type callback. */ enum AVIODataMarkerType { /** * Header data; this needs to be present for the stream to be decodeable. */ AVIO_DATA_MARKER_HEADER, /** * A point in the output bytestream where a decoder can start decoding * (i.e. a keyframe). A demuxer/decoder given the data flagged with * AVIO_DATA_MARKER_HEADER, followed by any AVIO_DATA_MARKER_SYNC_POINT, * should give decodeable results. */ AVIO_DATA_MARKER_SYNC_POINT, /** * A point in the output bytestream where a demuxer can start parsing * (for non self synchronizing bytestream formats). That is, any * non-keyframe packet start point. */ AVIO_DATA_MARKER_BOUNDARY_POINT, /** * This is any, unlabelled data. It can either be a muxer not marking * any positions at all, it can be an actual boundary/sync point * that the muxer chooses not to mark, or a later part of a packet/fragment * that is cut into multiple write callbacks due to limited IO buffer size. */ AVIO_DATA_MARKER_UNKNOWN, /** * Trailer data, which doesn't contain actual content, but only for * finalizing the output file. */ AVIO_DATA_MARKER_TRAILER }; /** * Bytestream IO Context. * New fields can be added to the end with minor version bumps. * Removal, reordering and changes to existing fields require a major * version bump. * sizeof(AVIOContext) must not be used outside libav*. * * @note None of the function pointers in AVIOContext should be called * directly, they should only be set by the client application * when implementing custom I/O. Normally these are set to the * function pointers specified in avio_alloc_context() */ typedef struct AVIOContext { /** * A class for private options. * * If this AVIOContext is created by avio_open2(), av_class is set and * passes the options down to protocols. * * If this AVIOContext is manually allocated, then av_class may be set by * the caller. * * warning -- this field can be NULL, be sure to not pass this AVIOContext * to any av_opt_* functions in that case. */ const AVClass *av_class; /* * The following shows the relationship between buffer, buf_ptr, buf_end, buf_size, * and pos, when reading and when writing (since AVIOContext is used for both): * ********************************************************************************** * READING ********************************************************************************** * * | buffer_size | * |---------------------------------------| * | | * * buffer buf_ptr buf_end * +---------------+-----------------------+ * |/ / / / / / / /|/ / / / / / /| | * read buffer: |/ / consumed / | to be read /| | * |/ / / / / / / /|/ / / / / / /| | * +---------------+-----------------------+ * * pos * +-------------------------------------------+-----------------+ * input file: | | | * +-------------------------------------------+-----------------+ * * ********************************************************************************** * WRITING ********************************************************************************** * * | buffer_size | * |-------------------------------| * | | * * buffer buf_ptr buf_end * +-------------------+-----------+ * |/ / / / / / / / / /| | * write buffer: | / to be flushed / | | * |/ / / / / / / / / /| | * +-------------------+-----------+ * * pos * +--------------------------+-----------------------------------+ * output file: | | | * +--------------------------+-----------------------------------+ * */ unsigned char *buffer; /**< Start of the buffer. */ int buffer_size; /**< Maximum buffer size */ unsigned char *buf_ptr; /**< Current position in the buffer */ unsigned char *buf_end; /**< End of the data, may be less than buffer+buffer_size if the read function returned less data than requested, e.g. for streams where no more data has been received yet. */ void *opaque; /**< A private pointer, passed to the read/write/seek/... functions. */ int (*read_packet)(void *opaque, uint8_t *buf, int buf_size); int (*write_packet)(void *opaque, uint8_t *buf, int buf_size); int64_t (*seek)(void *opaque, int64_t offset, int whence); int64_t pos; /**< position in the file of the current buffer */ int must_flush; /**< true if the next seek should flush */ int eof_reached; /**< true if eof reached */ int write_flag; /**< true if open for writing */ int max_packet_size; unsigned long checksum; unsigned char *checksum_ptr; unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size); int error; /**< contains the error code or 0 if no error happened */ /** * Pause or resume playback for network streaming protocols - e.g. MMS. */ int (*read_pause)(void *opaque, int pause); /** * Seek to a given timestamp in stream with the specified stream_index. * Needed for some network streaming protocols which don't support seeking * to byte position. */ int64_t (*read_seek)(void *opaque, int stream_index, int64_t timestamp, int flags); /** * A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable. */ int seekable; /** * max filesize, used to limit allocations * This field is internal to libavformat and access from outside is not allowed. */ int64_t maxsize; /** * avio_read and avio_write should if possible be satisfied directly * instead of going through a buffer, and avio_seek will always * call the underlying seek function directly. */ int direct; /** * Bytes read statistic * This field is internal to libavformat and access from outside is not allowed. */ int64_t bytes_read; /** * seek statistic * This field is internal to libavformat and access from outside is not allowed. */ int seek_count; /** * writeout statistic * This field is internal to libavformat and access from outside is not allowed. */ int writeout_count; /** * Original buffer size * used internally after probing and ensure seekback to reset the buffer size * This field is internal to libavformat and access from outside is not allowed. */ int orig_buffer_size; /** * Threshold to favor readahead over seek. * This is current internal only, do not use from outside. */ int short_seek_threshold; /** * ',' separated list of allowed protocols. */ const char *protocol_whitelist; /** * ',' separated list of disallowed protocols. */ const char *protocol_blacklist; /** * A callback that is used instead of write_packet. */ int (*write_data_type)(void *opaque, uint8_t *buf, int buf_size, enum AVIODataMarkerType type, int64_t time); /** * If set, don't call write_data_type separately for AVIO_DATA_MARKER_BOUNDARY_POINT, * but ignore them and treat them as AVIO_DATA_MARKER_UNKNOWN (to avoid needlessly * small chunks of data returned from the callback). */ int ignore_boundary_point; /** * Internal, not meant to be used from outside of AVIOContext. */ enum AVIODataMarkerType current_type; int64_t last_time; } AVIOContext; /** * Return the name of the protocol that will handle the passed URL. * * NULL is returned if no protocol could be found for the given URL. * * @return Name of the protocol or NULL. */ const char *avio_find_protocol_name(const char *url); /** * Return AVIO_FLAG_* access flags corresponding to the access permissions * of the resource in url, or a negative value corresponding to an * AVERROR code in case of failure. The returned access flags are * masked by the value in flags. * * @note This function is intrinsically unsafe, in the sense that the * checked resource may change its existence or permission status from * one call to another. Thus you should not trust the returned value, * unless you are sure that no other processes are accessing the * checked resource. */ int avio_check(const char *url, int flags); /** * Move or rename a resource. * * @note url_src and url_dst should share the same protocol and authority. * * @param url_src url to resource to be moved * @param url_dst new url to resource if the operation succeeded * @return >=0 on success or negative on error. */ int avpriv_io_move(const char *url_src, const char *url_dst); /** * Delete a resource. * * @param url resource to be deleted. * @return >=0 on success or negative on error. */ int avpriv_io_delete(const char *url); /** * Open directory for reading. * * @param s directory read context. Pointer to a NULL pointer must be passed. * @param url directory to be listed. * @param options A dictionary filled with protocol-private options. On return * this parameter will be destroyed and replaced with a dictionary * containing options that were not found. May be NULL. * @return >=0 on success or negative on error. */ int avio_open_dir(AVIODirContext **s, const char *url, AVDictionary **options); /** * Get next directory entry. * * Returned entry must be freed with avio_free_directory_entry(). In particular * it may outlive AVIODirContext. * * @param s directory read context. * @param[out] next next entry or NULL when no more entries. * @return >=0 on success or negative on error. End of list is not considered an * error. */ int avio_read_dir(AVIODirContext *s, AVIODirEntry **next); /** * Close directory. * * @note Entries created using avio_read_dir() are not deleted and must be * freeded with avio_free_directory_entry(). * * @param s directory read context. * @return >=0 on success or negative on error. */ int avio_close_dir(AVIODirContext **s); /** * Free entry allocated by avio_read_dir(). * * @param entry entry to be freed. */ void avio_free_directory_entry(AVIODirEntry **entry); /** * Allocate and initialize an AVIOContext for buffered I/O. It must be later * freed with av_free(). * * @param buffer Memory block for input/output operations via AVIOContext. * The buffer must be allocated with av_malloc() and friends. * It may be freed and replaced with a new buffer by libavformat. * AVIOContext.buffer holds the buffer currently in use, * which must be later freed with av_free(). * @param buffer_size The buffer size is very important for performance. * For protocols with fixed blocksize it should be set to this blocksize. * For others a typical size is a cache page, e.g. 4kb. * @param write_flag Set to 1 if the buffer should be writable, 0 otherwise. * @param opaque An opaque pointer to user-specific data. * @param read_packet A function for refilling the buffer, may be NULL. * @param write_packet A function for writing the buffer contents, may be NULL. * The function may not change the input buffers content. * @param seek A function for seeking to specified byte position, may be NULL. * * @return Allocated AVIOContext or NULL on failure. */ AVIOContext *avio_alloc_context( unsigned char *buffer, int buffer_size, int write_flag, void *opaque, int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), int64_t (*seek)(void *opaque, int64_t offset, int whence)); void avio_w8(AVIOContext *s, int b); void avio_write(AVIOContext *s, const unsigned char *buf, int size); void avio_wl64(AVIOContext *s, uint64_t val); void avio_wb64(AVIOContext *s, uint64_t val); void avio_wl32(AVIOContext *s, unsigned int val); void avio_wb32(AVIOContext *s, unsigned int val); void avio_wl24(AVIOContext *s, unsigned int val); void avio_wb24(AVIOContext *s, unsigned int val); void avio_wl16(AVIOContext *s, unsigned int val); void avio_wb16(AVIOContext *s, unsigned int val); /** * Write a NULL-terminated string. * @return number of bytes written. */ int avio_put_str(AVIOContext *s, const char *str); /** * Convert an UTF-8 string to UTF-16LE and write it. * @param s the AVIOContext * @param str NULL-terminated UTF-8 string * * @return number of bytes written. */ int avio_put_str16le(AVIOContext *s, const char *str); /** * Convert an UTF-8 string to UTF-16BE and write it. * @param s the AVIOContext * @param str NULL-terminated UTF-8 string * * @return number of bytes written. */ int avio_put_str16be(AVIOContext *s, const char *str); /** * Mark the written bytestream as a specific type. * * Zero-length ranges are omitted from the output. * * @param time the stream time the current bytestream pos corresponds to * (in AV_TIME_BASE units), or AV_NOPTS_VALUE if unknown or not * applicable * @param type the kind of data written starting at the current pos */ void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType type); /** * ORing this as the "whence" parameter to a seek function causes it to * return the filesize without seeking anywhere. Supporting this is optional. * If it is not supported then the seek function will return <0. */ #define AVSEEK_SIZE 0x10000 /** * Passing this flag as the "whence" parameter to a seek function causes it to * seek by any means (like reopening and linear reading) or other normally unreasonable * means that can be extremely slow. * This may be ignored by the seek code. */ #define AVSEEK_FORCE 0x20000 /** * fseek() equivalent for AVIOContext. * @return new position or AVERROR. */ int64_t avio_seek(AVIOContext *s, int64_t offset, int whence); /** * Skip given number of bytes forward * @return new position or AVERROR. */ int64_t avio_skip(AVIOContext *s, int64_t offset); /** * ftell() equivalent for AVIOContext. * @return position or AVERROR. */ static av_always_inline int64_t avio_tell(AVIOContext *s) { return avio_seek(s, 0, SEEK_CUR); } /** * Get the filesize. * @return filesize or AVERROR */ int64_t avio_size(AVIOContext *s); /** * feof() equivalent for AVIOContext. * @return non zero if and only if end of file */ int avio_feof(AVIOContext *s); #if FF_API_URL_FEOF /** * @deprecated use avio_feof() */ attribute_deprecated int url_feof(AVIOContext *s); #endif /** @warning Writes up to 4 KiB per call */ int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3); /** * Force flushing of buffered data. * * For write streams, force the buffered data to be immediately written to the output, * without to wait to fill the internal buffer. * * For read streams, discard all currently buffered data, and advance the * reported file position to that of the underlying stream. This does not * read new data, and does not perform any seeks. */ void avio_flush(AVIOContext *s); /** * Read size bytes from AVIOContext into buf. * @return number of bytes read or AVERROR */ int avio_read(AVIOContext *s, unsigned char *buf, int size); /** * @name Functions for reading from AVIOContext * @{ * * @note return 0 if EOF, so you cannot use it if EOF handling is * necessary */ int avio_r8 (AVIOContext *s); unsigned int avio_rl16(AVIOContext *s); unsigned int avio_rl24(AVIOContext *s); unsigned int avio_rl32(AVIOContext *s); uint64_t avio_rl64(AVIOContext *s); unsigned int avio_rb16(AVIOContext *s); unsigned int avio_rb24(AVIOContext *s); unsigned int avio_rb32(AVIOContext *s); uint64_t avio_rb64(AVIOContext *s); /** * @} */ /** * Read a string from pb into buf. The reading will terminate when either * a NULL character was encountered, maxlen bytes have been read, or nothing * more can be read from pb. The result is guaranteed to be NULL-terminated, it * will be truncated if buf is too small. * Note that the string is not interpreted or validated in any way, it * might get truncated in the middle of a sequence for multi-byte encodings. * * @return number of bytes read (is always <= maxlen). * If reading ends on EOF or error, the return value will be one more than * bytes actually read. */ int avio_get_str(AVIOContext *pb, int maxlen, char *buf, int buflen); /** * Read a UTF-16 string from pb and convert it to UTF-8. * The reading will terminate when either a null or invalid character was * encountered or maxlen bytes have been read. * @return number of bytes read (is always <= maxlen) */ int avio_get_str16le(AVIOContext *pb, int maxlen, char *buf, int buflen); int avio_get_str16be(AVIOContext *pb, int maxlen, char *buf, int buflen); /** * @name URL open modes * The flags argument to avio_open must be one of the following * constants, optionally ORed with other flags. * @{ */ #define AVIO_FLAG_READ 1 /**< read-only */ #define AVIO_FLAG_WRITE 2 /**< write-only */ #define AVIO_FLAG_READ_WRITE (AVIO_FLAG_READ|AVIO_FLAG_WRITE) /**< read-write pseudo flag */ /** * @} */ /** * Use non-blocking mode. * If this flag is set, operations on the context will return * AVERROR(EAGAIN) if they can not be performed immediately. * If this flag is not set, operations on the context will never return * AVERROR(EAGAIN). * Note that this flag does not affect the opening/connecting of the * context. Connecting a protocol will always block if necessary (e.g. on * network protocols) but never hang (e.g. on busy devices). * Warning: non-blocking protocols is work-in-progress; this flag may be * silently ignored. */ #define AVIO_FLAG_NONBLOCK 8 /** * Use direct mode. * avio_read and avio_write should if possible be satisfied directly * instead of going through a buffer, and avio_seek will always * call the underlying seek function directly. */ #define AVIO_FLAG_DIRECT 0x8000 /** * Create and initialize a AVIOContext for accessing the * resource indicated by url. * @note When the resource indicated by url has been opened in * read+write mode, the AVIOContext can be used only for writing. * * @param s Used to return the pointer to the created AVIOContext. * In case of failure the pointed to value is set to NULL. * @param url resource to access * @param flags flags which control how the resource indicated by url * is to be opened * @return >= 0 in case of success, a negative value corresponding to an * AVERROR code in case of failure */ int avio_open(AVIOContext **s, const char *url, int flags); /** * Create and initialize a AVIOContext for accessing the * resource indicated by url. * @note When the resource indicated by url has been opened in * read+write mode, the AVIOContext can be used only for writing. * * @param s Used to return the pointer to the created AVIOContext. * In case of failure the pointed to value is set to NULL. * @param url resource to access * @param flags flags which control how the resource indicated by url * is to be opened * @param int_cb an interrupt callback to be used at the protocols level * @param options A dictionary filled with protocol-private options. On return * this parameter will be destroyed and replaced with a dict containing options * that were not found. May be NULL. * @return >= 0 in case of success, a negative value corresponding to an * AVERROR code in case of failure */ int avio_open2(AVIOContext **s, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options); /** * Close the resource accessed by the AVIOContext s and free it. * This function can only be used if s was opened by avio_open(). * * The internal buffer is automatically flushed before closing the * resource. * * @return 0 on success, an AVERROR < 0 on error. * @see avio_closep */ int avio_close(AVIOContext *s); /** * Close the resource accessed by the AVIOContext *s, free it * and set the pointer pointing to it to NULL. * This function can only be used if s was opened by avio_open(). * * The internal buffer is automatically flushed before closing the * resource. * * @return 0 on success, an AVERROR < 0 on error. * @see avio_close */ int avio_closep(AVIOContext **s); /** * Open a write only memory stream. * * @param s new IO context * @return zero if no error. */ int avio_open_dyn_buf(AVIOContext **s); /** * Return the written size and a pointer to the buffer. The buffer * must be freed with av_free(). * Padding of AV_INPUT_BUFFER_PADDING_SIZE is added to the buffer. * * @param s IO context * @param pbuffer pointer to a byte buffer * @return the length of the byte buffer */ int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer); /** * Iterate through names of available protocols. * * @param opaque A private pointer representing current protocol. * It must be a pointer to NULL on first iteration and will * be updated by successive calls to avio_enum_protocols. * @param output If set to 1, iterate over output protocols, * otherwise over input protocols. * * @return A static string containing the name of current protocol or NULL */ const char *avio_enum_protocols(void **opaque, int output); /** * Pause and resume playing - only meaningful if using a network streaming * protocol (e.g. MMS). * * @param h IO context from which to call the read_pause function pointer * @param pause 1 for pause, 0 for resume */ int avio_pause(AVIOContext *h, int pause); /** * Seek to a given timestamp relative to some component stream. * Only meaningful if using a network streaming protocol (e.g. MMS.). * * @param h IO context from which to call the seek function pointers * @param stream_index The stream index that the timestamp is relative to. * If stream_index is (-1) the timestamp should be in AV_TIME_BASE * units from the beginning of the presentation. * If a stream_index >= 0 is used and the protocol does not support * seeking based on component streams, the call will fail. * @param timestamp timestamp in AVStream.time_base units * or if there is no stream specified then in AV_TIME_BASE units. * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE * and AVSEEK_FLAG_ANY. The protocol may silently ignore * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will * fail if used and not supported. * @return >= 0 on success * @see AVInputFormat::read_seek */ int64_t avio_seek_time(AVIOContext *h, int stream_index, int64_t timestamp, int flags); /* Avoid a warning. The header can not be included because it breaks c++. */ struct AVBPrint; /** * Read contents of h into print buffer, up to max_size bytes, or up to EOF. * * @return 0 for success (max_size bytes read or EOF reached), negative error * code otherwise */ int avio_read_to_bprint(AVIOContext *h, struct AVBPrint *pb, size_t max_size); /** * Accept and allocate a client context on a server context. * @param s the server context * @param c the client context, must be unallocated * @return >= 0 on success or a negative value corresponding * to an AVERROR on failure */ int avio_accept(AVIOContext *s, AVIOContext **c); /** * Perform one step of the protocol handshake to accept a new client. * This function must be called on a client returned by avio_accept() before * using it as a read/write context. * It is separate from avio_accept() because it may block. * A step of the handshake is defined by places where the application may * decide to change the proceedings. * For example, on a protocol with a request header and a reply header, each * one can constitute a step because the application may use the parameters * from the request to change parameters in the reply; or each individual * chunk of the request can constitute a step. * If the handshake is already finished, avio_handshake() does nothing and * returns 0 immediately. * * @param c the client context to perform the handshake on * @return 0 on a complete and successful handshake * > 0 if the handshake progressed, but is not complete * < 0 for an AVERROR code */ int avio_handshake(AVIOContext *c); #endif /* AVFORMAT_AVIO_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavformat/internal.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 AVFORMAT_INTERNAL_H #define AVFORMAT_INTERNAL_H #include #include "libavutil/bprint.h" #include "avformat.h" #include "os_support.h" #define MAX_URL_SIZE 4096 /** size of probe buffer, for guessing file type from file contents */ #define PROBE_BUF_MIN 2048 #define PROBE_BUF_MAX (1 << 20) #define MAX_PROBE_PACKETS 2500 #ifdef DEBUG # define hex_dump_debug(class, buf, size) av_hex_dump_log(class, AV_LOG_DEBUG, buf, size) #else # define hex_dump_debug(class, buf, size) do { if (0) av_hex_dump_log(class, AV_LOG_DEBUG, buf, size); } while(0) #endif typedef struct AVCodecTag { enum AVCodecID id; unsigned int tag; } AVCodecTag; typedef struct CodecMime{ char str[32]; enum AVCodecID id; } CodecMime; /*************************************************/ /* fractional numbers for exact pts handling */ /** * The exact value of the fractional number is: 'val + num / den'. * num is assumed to be 0 <= num < den. */ typedef struct FFFrac { int64_t val, num, den; } FFFrac; struct AVFormatInternal { /** * Number of streams relevant for interleaving. * Muxing only. */ int nb_interleaved_streams; /** * This buffer is only needed when packets were already buffered but * not decoded, for example to get the codec parameters in MPEG * streams. */ struct AVPacketList *packet_buffer; struct AVPacketList *packet_buffer_end; /* av_seek_frame() support */ int64_t data_offset; /**< offset of the first packet */ /** * Raw packets from the demuxer, prior to parsing and decoding. * This buffer is used for buffering packets until the codec can * be identified, as parsing cannot be done without knowing the * codec. */ struct AVPacketList *raw_packet_buffer; struct AVPacketList *raw_packet_buffer_end; /** * Packets split by the parser get queued here. */ struct AVPacketList *parse_queue; struct AVPacketList *parse_queue_end; /** * Remaining size available for raw_packet_buffer, in bytes. */ #define RAW_PACKET_BUFFER_SIZE 2500000 int raw_packet_buffer_remaining_size; /** * Offset to remap timestamps to be non-negative. * Expressed in timebase units. * @see AVStream.mux_ts_offset */ int64_t offset; /** * Timebase for the timestamp offset. */ AVRational offset_timebase; #if FF_API_COMPUTE_PKT_FIELDS2 int missing_ts_warning; #endif int inject_global_side_data; int avoid_negative_ts_use_pts; /** * Whether or not a header has already been written */ int header_written; int write_header_ret; /** * Timestamp of the end of the shortest stream. */ int64_t shortest_end; /** * Whether or not avformat_init_output has already been called */ int initialized; /** * Whether or not avformat_init_output fully initialized streams */ int streams_initialized; }; struct AVStreamInternal { /** * Set to 1 if the codec allows reordering, so pts can be different * from dts. */ int reorder; /** * bitstream filters to run on stream * - encoding: Set by muxer using ff_stream_add_bitstream_filter * - decoding: unused */ AVBSFContext **bsfcs; int nb_bsfcs; /** * Whether or not check_bitstream should still be run on each packet */ int bitstream_checked; /** * The codec context used by avformat_find_stream_info, the parser, etc. */ AVCodecContext *avctx; /** * 1 if avctx has been initialized with the values from the codec parameters */ int avctx_inited; enum AVCodecID orig_codec_id; /** * Whether the internal avctx needs to be updated from codecpar (after a late change to codecpar) */ int need_context_update; }; #ifdef __GNUC__ #define dynarray_add(tab, nb_ptr, elem)\ do {\ __typeof__(tab) _tab = (tab);\ __typeof__(elem) _elem = (elem);\ (void)sizeof(**_tab == _elem); /* check that types are compatible */\ av_dynarray_add(_tab, nb_ptr, _elem);\ } while(0) #else #define dynarray_add(tab, nb_ptr, elem)\ do {\ av_dynarray_add((tab), nb_ptr, (elem));\ } while(0) #endif struct tm *ff_brktimegm(time_t secs, struct tm *tm); char *ff_data_to_hex(char *buf, const uint8_t *src, int size, int lowercase); /** * Parse a string of hexadecimal strings. Any space between the hexadecimal * digits is ignored. * * @param data if non-null, the parsed data is written to this pointer * @param p the string to parse * @return the number of bytes written (or to be written, if data is null) */ int ff_hex_to_data(uint8_t *data, const char *p); /** * Add packet to AVFormatContext->packet_buffer list, determining its * interleaved position using compare() function argument. * @return 0, or < 0 on error */ int ff_interleave_add_packet(AVFormatContext *s, AVPacket *pkt, int (*compare)(AVFormatContext *, AVPacket *, AVPacket *)); void ff_read_frame_flush(AVFormatContext *s); #define NTP_OFFSET 2208988800ULL #define NTP_OFFSET_US (NTP_OFFSET * 1000000ULL) /** Get the current time since NTP epoch in microseconds. */ uint64_t ff_ntp_time(void); /** * Append the media-specific SDP fragment for the media stream c * to the buffer buff. * * Note, the buffer needs to be initialized, since it is appended to * existing content. * * @param buff the buffer to append the SDP fragment to * @param size the size of the buff buffer * @param st the AVStream of the media to describe * @param idx the global stream index * @param dest_addr the destination address of the media stream, may be NULL * @param dest_type the destination address type, may be NULL * @param port the destination port of the media stream, 0 if unknown * @param ttl the time to live of the stream, 0 if not multicast * @param fmt the AVFormatContext, which might contain options modifying * the generated SDP */ void ff_sdp_write_media(char *buff, int size, AVStream *st, int idx, const char *dest_addr, const char *dest_type, int port, int ttl, AVFormatContext *fmt); /** * Write a packet to another muxer than the one the user originally * intended. Useful when chaining muxers, where one muxer internally * writes a received packet to another muxer. * * @param dst the muxer to write the packet to * @param dst_stream the stream index within dst to write the packet to * @param pkt the packet to be written * @param src the muxer the packet originally was intended for * @param interleave 0->use av_write_frame, 1->av_interleaved_write_frame * @return the value av_write_frame returned */ int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt, AVFormatContext *src, int interleave); /** * Get the length in bytes which is needed to store val as v. */ int ff_get_v_length(uint64_t val); /** * Put val using a variable number of bytes. */ void ff_put_v(AVIOContext *bc, uint64_t val); /** * Read a whole line of text from AVIOContext. Stop reading after reaching * either a \\n, a \\0 or EOF. The returned string is always \\0-terminated, * and may be truncated if the buffer is too small. * * @param s the read-only AVIOContext * @param buf buffer to store the read line * @param maxlen size of the buffer * @return the length of the string written in the buffer, not including the * final \\0 */ int ff_get_line(AVIOContext *s, char *buf, int maxlen); #define SPACE_CHARS " \t\r\n" /** * Callback function type for ff_parse_key_value. * * @param key a pointer to the key * @param key_len the number of bytes that belong to the key, including the '=' * char * @param dest return the destination pointer for the value in *dest, may * be null to ignore the value * @param dest_len the length of the *dest buffer */ typedef void (*ff_parse_key_val_cb)(void *context, const char *key, int key_len, char **dest, int *dest_len); /** * Parse a string with comma-separated key=value pairs. The value strings * may be quoted and may contain escaped characters within quoted strings. * * @param str the string to parse * @param callback_get_buf function that returns where to store the * unescaped value string. * @param context the opaque context pointer to pass to callback_get_buf */ void ff_parse_key_value(const char *str, ff_parse_key_val_cb callback_get_buf, void *context); /** * Find stream index based on format-specific stream ID * @return stream index, or < 0 on error */ int ff_find_stream_index(AVFormatContext *s, int id); /** * Internal version of av_index_search_timestamp */ int ff_index_search_timestamp(const AVIndexEntry *entries, int nb_entries, int64_t wanted_timestamp, int flags); /** * Internal version of av_add_index_entry */ int ff_add_index_entry(AVIndexEntry **index_entries, int *nb_index_entries, unsigned int *index_entries_allocated_size, int64_t pos, int64_t timestamp, int size, int distance, int flags); void ff_configure_buffers_for_index(AVFormatContext *s, int64_t time_tolerance); /** * Add a new chapter. * * @param s media file handle * @param id unique ID for this chapter * @param start chapter start time in time_base units * @param end chapter end time in time_base units * @param title chapter title * * @return AVChapter or NULL on error */ AVChapter *avpriv_new_chapter(AVFormatContext *s, int id, AVRational time_base, int64_t start, int64_t end, const char *title); /** * Ensure the index uses less memory than the maximum specified in * AVFormatContext.max_index_size by discarding entries if it grows * too large. */ void ff_reduce_index(AVFormatContext *s, int stream_index); enum AVCodecID ff_guess_image2_codec(const char *filename); /** * Perform a binary search using av_index_search_timestamp() and * AVInputFormat.read_timestamp(). * * @param target_ts target timestamp in the time base of the given stream * @param stream_index stream number */ int ff_seek_frame_binary(AVFormatContext *s, int stream_index, int64_t target_ts, int flags); /** * Update cur_dts of all streams based on the given timestamp and AVStream. * * Stream ref_st unchanged, others set cur_dts in their native time base. * Only needed for timestamp wrapping or if (dts not set and pts!=dts). * @param timestamp new dts expressed in time_base of param ref_st * @param ref_st reference stream giving time_base of param timestamp */ void ff_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp); int ff_find_last_ts(AVFormatContext *s, int stream_index, int64_t *ts, int64_t *pos, int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t )); /** * Perform a binary search using read_timestamp(). * * @param target_ts target timestamp in the time base of the given stream * @param stream_index stream number */ int64_t ff_gen_search(AVFormatContext *s, int stream_index, int64_t target_ts, int64_t pos_min, int64_t pos_max, int64_t pos_limit, int64_t ts_min, int64_t ts_max, int flags, int64_t *ts_ret, int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t )); /** * Set the time base and wrapping info for a given stream. This will be used * to interpret the stream's timestamps. If the new time base is invalid * (numerator or denominator are non-positive), it leaves the stream * unchanged. * * @param s stream * @param pts_wrap_bits number of bits effectively used by the pts * (used for wrap control) * @param pts_num time base numerator * @param pts_den time base denominator */ void avpriv_set_pts_info(AVStream *s, int pts_wrap_bits, unsigned int pts_num, unsigned int pts_den); /** * Add side data to a packet for changing parameters to the given values. * Parameters set to 0 aren't included in the change. */ int ff_add_param_change(AVPacket *pkt, int32_t channels, uint64_t channel_layout, int32_t sample_rate, int32_t width, int32_t height); /** * Set the timebase for each stream from the corresponding codec timebase and * print it. */ int ff_framehash_write_header(AVFormatContext *s); /** * Read a transport packet from a media file. * * @param s media file handle * @param pkt is filled * @return 0 if OK, AVERROR_xxx on error */ int ff_read_packet(AVFormatContext *s, AVPacket *pkt); /** * Interleave a packet per dts in an output media file. * * Packets with pkt->destruct == av_destruct_packet will be freed inside this * function, so they cannot be used after it. Note that calling av_packet_unref() * on them is still safe. * * @param s media file handle * @param out the interleaved packet will be output here * @param pkt the input packet * @param flush 1 if no further packets are available as input and all * remaining packets should be output * @return 1 if a packet was output, 0 if no packet could be output, * < 0 if an error occurred */ int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int flush); void ff_free_stream(AVFormatContext *s, AVStream *st); /** * Return the frame duration in seconds. Return 0 if not available. */ void ff_compute_frame_duration(AVFormatContext *s, int *pnum, int *pden, AVStream *st, AVCodecParserContext *pc, AVPacket *pkt); unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id); enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag); /** * Select a PCM codec based on the given parameters. * * @param bps bits-per-sample * @param flt floating-point * @param be big-endian * @param sflags signed flags. each bit corresponds to one byte of bit depth. * e.g. the 1st bit indicates if 8-bit should be signed or * unsigned, the 2nd bit indicates if 16-bit should be signed or * unsigned, etc... This is useful for formats such as WAVE where * only 8-bit is unsigned and all other bit depths are signed. * @return a PCM codec id or AV_CODEC_ID_NONE */ enum AVCodecID ff_get_pcm_codec_id(int bps, int flt, int be, int sflags); /** * Chooses a timebase for muxing the specified stream. * * The chosen timebase allows sample accurate timestamps based * on the framerate or sample rate for audio streams. It also is * at least as precise as 1/min_precision would be. */ AVRational ff_choose_timebase(AVFormatContext *s, AVStream *st, int min_precision); /** * Chooses a timebase for muxing the specified stream. */ enum AVChromaLocation ff_choose_chroma_location(AVFormatContext *s, AVStream *st); /** * Generate standard extradata for AVC-Intra based on width/height and field * order. */ int ff_generate_avci_extradata(AVStream *st); /** * Add a bitstream filter to a stream. * * @param st output stream to add a filter to * @param name the name of the filter to add * @param args filter-specific argument string * @return >0 on success; * AVERROR code on failure */ int ff_stream_add_bitstream_filter(AVStream *st, const char *name, const char *args); /** * Copy encoding parameters from source to destination stream * * @param dst pointer to destination AVStream * @param src pointer to source AVStream * @return >=0 on success, AVERROR code on error */ int ff_stream_encode_params_copy(AVStream *dst, const AVStream *src); /** * Wrap errno on rename() error. * * @param oldpath source path * @param newpath destination path * @return 0 or AVERROR on failure */ static inline int ff_rename(const char *oldpath, const char *newpath, void *logctx) { int ret = 0; if (rename(oldpath, newpath) == -1) { ret = AVERROR(errno); if (logctx) av_log(logctx, AV_LOG_ERROR, "failed to rename file %s to %s\n", oldpath, newpath); } return ret; } /** * Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end * which is always set to 0. * * @param size size of extradata * @return 0 if OK, AVERROR_xxx on error */ int ff_alloc_extradata(AVCodecParameters *par, int size); /** * Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end * which is always set to 0 and fill it from pb. * * @param size size of extradata * @return >= 0 if OK, AVERROR_xxx on error */ int ff_get_extradata(AVFormatContext *s, AVCodecParameters *par, AVIOContext *pb, int size); /** * add frame for rfps calculation. * * @param dts timestamp of the i-th frame * @return 0 if OK, AVERROR_xxx on error */ int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t dts); void ff_rfps_calculate(AVFormatContext *ic); /** * Flags for AVFormatContext.write_uncoded_frame() */ enum AVWriteUncodedFrameFlags { /** * Query whether the feature is possible on this stream. * The frame argument is ignored. */ AV_WRITE_UNCODED_FRAME_QUERY = 0x0001, }; /** * Copies the whilelists from one context to the other */ int ff_copy_whiteblacklists(AVFormatContext *dst, const AVFormatContext *src); int ffio_open2_wrapper(struct AVFormatContext *s, AVIOContext **pb, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options); /** * Returned by demuxers to indicate that data was consumed but discarded * (ignored streams or junk data). The framework will re-call the demuxer. */ #define FFERROR_REDO FFERRTAG('R','E','D','O') /** * Utility function to open IO stream of output format. * * @param s AVFormatContext * @param url URL or file name to open for writing * @options optional options which will be passed to io_open callback * @return >=0 on success, negative AVERROR in case of failure */ int ff_format_output_open(AVFormatContext *s, const char *url, AVDictionary **options); /* * A wrapper around AVFormatContext.io_close that should be used * instead of calling the pointer directly. */ void ff_format_io_close(AVFormatContext *s, AVIOContext **pb); /** * Parse creation_time in AVFormatContext metadata if exists and warn if the * parsing fails. * * @param s AVFormatContext * @param timestamp parsed timestamp in microseconds, only set on successful parsing * @param return_seconds set this to get the number of seconds in timestamp instead of microseconds * @return 1 if OK, 0 if the metadata was not present, AVERROR(EINVAL) on parse error */ int ff_parse_creation_time_metadata(AVFormatContext *s, int64_t *timestamp, int return_seconds); /** * Standardize creation_time metadata in AVFormatContext to an ISO-8601 * timestamp string. * * @param s AVFormatContext * @return <0 on error */ int ff_standardize_creation_time(AVFormatContext *s); #define CONTAINS_PAL 2 /** * Reshuffles the lines to use the user specified stride. * * @param ppkt input and output packet * @return negative error code or * 0 if no new packet was allocated * non-zero if a new packet was allocated and ppkt has to be freed * CONTAINS_PAL if in addition to a new packet the old contained a palette */ int ff_reshuffle_raw_rgb(AVFormatContext *s, AVPacket **ppkt, AVCodecParameters *par, int expected_stride); /** * Retrieves the palette from a packet, either from side data, or * appended to the video data in the packet itself (raw video only). * It is commonly used after a call to ff_reshuffle_raw_rgb(). * * Use 0 for the ret parameter to check for side data only. * * @param pkt pointer to packet before calling ff_reshuffle_raw_rgb() * @param ret return value from ff_reshuffle_raw_rgb(), or 0 * @param palette pointer to palette buffer * @return negative error code or * 1 if the packet has a palette, else 0 */ int ff_get_packet_palette(AVFormatContext *s, AVPacket *pkt, int ret, uint32_t *palette); /** * Finalize buf into extradata and set its size appropriately. */ int ff_bprint_to_codecpar_extradata(AVCodecParameters *par, struct AVBPrint *buf); /** * Find the next packet in the interleaving queue for the given stream. * The packet is not removed from the interleaving queue, but only * a pointer to it is returned. * * @param ts_offset the ts difference between packet in the queue and the muxer. * * @return a pointer to the next packet, or NULL if no packet is queued * for this stream. */ const AVPacket *ff_interleaved_peek(AVFormatContext *s, int stream, int64_t *ts_offset); #endif /* AVFORMAT_INTERNAL_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavformat/url.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * unbuffered private I/O API */ #ifndef AVFORMAT_URL_H #define AVFORMAT_URL_H #include "avio.h" #include "libavformat/version.h" #include "libavutil/dict.h" #include "libavutil/log.h" #define URL_PROTOCOL_FLAG_NESTED_SCHEME 1 /*< The protocol name can be the first part of a nested protocol scheme */ #define URL_PROTOCOL_FLAG_NETWORK 2 /*< The protocol uses network */ extern const AVClass ffurl_context_class; typedef struct URLContext { const AVClass *av_class; /**< information for av_log(). Set by url_open(). */ const struct URLProtocol *prot; void *priv_data; char *filename; /**< specified URL */ int flags; int max_packet_size; /**< if non zero, the stream is packetized with this max packet size */ int is_streamed; /**< true if streamed (no seek possible), default = false */ int is_connected; AVIOInterruptCB interrupt_callback; int64_t rw_timeout; /**< maximum time to wait for (network) read/write operation completion, in mcs */ const char *protocol_whitelist; const char *protocol_blacklist; } URLContext; typedef struct URLProtocol { const char *name; int (*url_open)( URLContext *h, const char *url, int flags); /** * This callback is to be used by protocols which open further nested * protocols. options are then to be passed to ffurl_open()/ffurl_connect() * for those nested protocols. */ int (*url_open2)(URLContext *h, const char *url, int flags, AVDictionary **options); int (*url_accept)(URLContext *s, URLContext **c); int (*url_handshake)(URLContext *c); /** * Read data from the protocol. * If data is immediately available (even less than size), EOF is * reached or an error occurs (including EINTR), return immediately. * Otherwise: * In non-blocking mode, return AVERROR(EAGAIN) immediately. * In blocking mode, wait for data/EOF/error with a short timeout (0.1s), * and return AVERROR(EAGAIN) on timeout. * Checking interrupt_callback, looping on EINTR and EAGAIN and until * enough data has been read is left to the calling function; see * retry_transfer_wrapper in avio.c. */ int (*url_read)( URLContext *h, unsigned char *buf, int size); int (*url_write)(URLContext *h, const unsigned char *buf, int size); int64_t (*url_seek)( URLContext *h, int64_t pos, int whence); int (*url_close)(URLContext *h); int (*url_read_pause)(URLContext *h, int pause); int64_t (*url_read_seek)(URLContext *h, int stream_index, int64_t timestamp, int flags); int (*url_get_file_handle)(URLContext *h); int (*url_get_multi_file_handle)(URLContext *h, int **handles, int *numhandles); int (*url_shutdown)(URLContext *h, int flags); int priv_data_size; const AVClass *priv_data_class; int flags; int (*url_check)(URLContext *h, int mask); int (*url_open_dir)(URLContext *h); int (*url_read_dir)(URLContext *h, AVIODirEntry **next); int (*url_close_dir)(URLContext *h); int (*url_delete)(URLContext *h); int (*url_move)(URLContext *h_src, URLContext *h_dst); const char *default_whitelist; } URLProtocol; /** * Create a URLContext for accessing to the resource indicated by * url, but do not initiate the connection yet. * * @param puc pointer to the location where, in case of success, the * function puts the pointer to the created URLContext * @param flags flags which control how the resource indicated by url * is to be opened * @param int_cb interrupt callback to use for the URLContext, may be * NULL * @return >= 0 in case of success, a negative value corresponding to an * AVERROR code in case of failure */ int ffurl_alloc(URLContext **puc, const char *filename, int flags, const AVIOInterruptCB *int_cb); /** * Connect an URLContext that has been allocated by ffurl_alloc * * @param options A dictionary filled with options for nested protocols, * i.e. it will be passed to url_open2() for protocols implementing it. * This parameter will be destroyed and replaced with a dict containing options * that were not found. May be NULL. */ int ffurl_connect(URLContext *uc, AVDictionary **options); /** * Create an URLContext for accessing to the resource indicated by * url, and open it. * * @param puc pointer to the location where, in case of success, the * function puts the pointer to the created URLContext * @param flags flags which control how the resource indicated by url * is to be opened * @param int_cb interrupt callback to use for the URLContext, may be * NULL * @param options A dictionary filled with protocol-private options. On return * this parameter will be destroyed and replaced with a dict containing options * that were not found. May be NULL. * @param parent An enclosing URLContext, whose generic options should * be applied to this URLContext as well. * @return >= 0 in case of success, a negative value corresponding to an * AVERROR code in case of failure */ int ffurl_open_whitelist(URLContext **puc, const char *filename, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options, const char *whitelist, const char* blacklist, URLContext *parent); int ffurl_open(URLContext **puc, const char *filename, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options); /** * Accept an URLContext c on an URLContext s * * @param s server context * @param c client context, must be unallocated. * @return >= 0 on success, ff_neterrno() on failure. */ int ffurl_accept(URLContext *s, URLContext **c); /** * Perform one step of the protocol handshake to accept a new client. * See avio_handshake() for details. * Implementations should try to return decreasing values. * If the protocol uses an underlying protocol, the underlying handshake is * usually the first step, and the return value can be: * (largest value for this protocol) + (return value from other protocol) * * @param c the client context * @return >= 0 on success or a negative value corresponding * to an AVERROR code on failure */ int ffurl_handshake(URLContext *c); /** * Read up to size bytes from the resource accessed by h, and store * the read bytes in buf. * * @return The number of bytes actually read, or a negative value * corresponding to an AVERROR code in case of error. A value of zero * indicates that it is not possible to read more from the accessed * resource (except if the value of the size argument is also zero). */ int ffurl_read(URLContext *h, unsigned char *buf, int size); /** * Read as many bytes as possible (up to size), calling the * read function multiple times if necessary. * This makes special short-read handling in applications * unnecessary, if the return value is < size then it is * certain there was either an error or the end of file was reached. */ int ffurl_read_complete(URLContext *h, unsigned char *buf, int size); /** * Write size bytes from buf to the resource accessed by h. * * @return the number of bytes actually written, or a negative value * corresponding to an AVERROR code in case of failure */ int ffurl_write(URLContext *h, const unsigned char *buf, int size); /** * Change the position that will be used by the next read/write * operation on the resource accessed by h. * * @param pos specifies the new position to set * @param whence specifies how pos should be interpreted, it must be * one of SEEK_SET (seek from the beginning), SEEK_CUR (seek from the * current position), SEEK_END (seek from the end), or AVSEEK_SIZE * (return the filesize of the requested resource, pos is ignored). * @return a negative value corresponding to an AVERROR code in case * of failure, or the resulting file position, measured in bytes from * the beginning of the file. You can use this feature together with * SEEK_CUR to read the current file position. */ int64_t ffurl_seek(URLContext *h, int64_t pos, int whence); /** * Close the resource accessed by the URLContext h, and free the * memory used by it. Also set the URLContext pointer to NULL. * * @return a negative value if an error condition occurred, 0 * otherwise */ int ffurl_closep(URLContext **h); int ffurl_close(URLContext *h); /** * Return the filesize of the resource accessed by h, AVERROR(ENOSYS) * if the operation is not supported by h, or another negative value * corresponding to an AVERROR error code in case of failure. */ int64_t ffurl_size(URLContext *h); /** * Return the file descriptor associated with this URL. For RTP, this * will return only the RTP file descriptor, not the RTCP file descriptor. * * @return the file descriptor associated with this URL, or <0 on error. */ int ffurl_get_file_handle(URLContext *h); /** * Return the file descriptors associated with this URL. * * @return 0 on success or <0 on error. */ int ffurl_get_multi_file_handle(URLContext *h, int **handles, int *numhandles); /** * Signal the URLContext that we are done reading or writing the stream. * * @param h pointer to the resource * @param flags flags which control how the resource indicated by url * is to be shutdown * * @return a negative value if an error condition occurred, 0 * otherwise */ int ffurl_shutdown(URLContext *h, int flags); /** * Check if the user has requested to interrupt a blocking function * associated with cb. */ int ff_check_interrupt(AVIOInterruptCB *cb); /* udp.c */ int ff_udp_set_remote_url(URLContext *h, const char *uri); int ff_udp_get_local_port(URLContext *h); /** * Assemble a URL string from components. This is the reverse operation * of av_url_split. * * Note, this requires networking to be initialized, so the caller must * ensure ff_network_init has been called. * * @see av_url_split * * @param str the buffer to fill with the url * @param size the size of the str buffer * @param proto the protocol identifier, if null, the separator * after the identifier is left out, too * @param authorization an optional authorization string, may be null. * An empty string is treated the same as a null string. * @param hostname the host name string * @param port the port number, left out from the string if negative * @param fmt a generic format string for everything to add after the * host/port, may be null * @return the number of characters written to the destination buffer */ int ff_url_join(char *str, int size, const char *proto, const char *authorization, const char *hostname, int port, const char *fmt, ...) av_printf_format(7, 8); /** * Convert a relative url into an absolute url, given a base url. * * @param buf the buffer where output absolute url is written * @param size the size of buf * @param base the base url, may be equal to buf. * @param rel the new url, which is interpreted relative to base */ void ff_make_absolute_url(char *buf, int size, const char *base, const char *rel); /** * Allocate directory entry with default values. * * @return entry or NULL on error */ AVIODirEntry *ff_alloc_dir_entry(void); const AVClass *ff_urlcontext_child_class_next(const AVClass *prev); /** * Construct a list of protocols matching a given whitelist and/or blacklist. * * @param whitelist a comma-separated list of allowed protocol names or NULL. If * this is a non-empty string, only protocols in this list will * be included. * @param blacklist a comma-separated list of forbidden protocol names or NULL. * If this is a non-empty string, all protocols in this list * will be excluded. * * @return a NULL-terminated array of matching protocols. The array must be * freed by the caller. */ const URLProtocol **ffurl_get_protocols(const char *whitelist, const char *blacklist); #endif /* AVFORMAT_URL_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavformat/version.h ================================================ /* * Version macros. * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVFORMAT_VERSION_H #define AVFORMAT_VERSION_H /** * @file * @ingroup libavf * Libavformat version macros */ #include "libavutil/version.h" // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) // Also please add any ticket numbers that you believe might be affected here #define LIBAVFORMAT_VERSION_MAJOR 57 #define LIBAVFORMAT_VERSION_MINOR 56 #define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \ LIBAVFORMAT_VERSION_MICRO) #define LIBAVFORMAT_VERSION AV_VERSION(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \ LIBAVFORMAT_VERSION_MICRO) #define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT #define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) /** * FF_API_* defines may be placed below to indicate public API that will be * dropped at a future version bump. The defines themselves are not part of * the public API and may change, break or disappear at any time. * * @note, when bumping the major version it is recommended to manually * disable each FF_API_* in its own commit instead of disabling them all * at once through the bump. This improves the git bisect-ability of the change. * */ #ifndef FF_API_LAVF_BITEXACT #define FF_API_LAVF_BITEXACT (LIBAVFORMAT_VERSION_MAJOR < 58) #endif #ifndef FF_API_LAVF_FRAC #define FF_API_LAVF_FRAC (LIBAVFORMAT_VERSION_MAJOR < 58) #endif #ifndef FF_API_LAVF_CODEC_TB #define FF_API_LAVF_CODEC_TB (LIBAVFORMAT_VERSION_MAJOR < 58) #endif #ifndef FF_API_URL_FEOF #define FF_API_URL_FEOF (LIBAVFORMAT_VERSION_MAJOR < 58) #endif #ifndef FF_API_LAVF_FMT_RAWPICTURE #define FF_API_LAVF_FMT_RAWPICTURE (LIBAVFORMAT_VERSION_MAJOR < 58) #endif #ifndef FF_API_COMPUTE_PKT_FIELDS2 #define FF_API_COMPUTE_PKT_FIELDS2 (LIBAVFORMAT_VERSION_MAJOR < 58) #endif #ifndef FF_API_OLD_OPEN_CALLBACKS #define FF_API_OLD_OPEN_CALLBACKS (LIBAVFORMAT_VERSION_MAJOR < 58) #endif #ifndef FF_API_LAVF_AVCTX #define FF_API_LAVF_AVCTX (LIBAVFORMAT_VERSION_MAJOR < 58) #endif #ifndef FF_API_NOCONST_GET_SIDE_DATA #define FF_API_NOCONST_GET_SIDE_DATA (LIBAVFORMAT_VERSION_MAJOR < 58) #endif #ifndef FF_API_HTTP_USER_AGENT #define FF_API_HTTP_USER_AGENT (LIBAVFORMAT_VERSION_MAJOR < 58) #endif #ifndef FF_API_R_FRAME_RATE #define FF_API_R_FRAME_RATE 1 #endif #endif /* AVFORMAT_VERSION_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/adler32.h ================================================ /* * copyright (c) 2006 Mans Rullgard * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * @ingroup lavu_adler32 * Public header for Adler-32 hash function implementation. */ #ifndef AVUTIL_ADLER32_H #define AVUTIL_ADLER32_H #include #include "attributes.h" /** * @defgroup lavu_adler32 Adler-32 * @ingroup lavu_hash * Adler-32 hash function implementation. * * @{ */ /** * Calculate the Adler32 checksum of a buffer. * * Passing the return value to a subsequent av_adler32_update() call * allows the checksum of multiple buffers to be calculated as though * they were concatenated. * * @param adler initial checksum value * @param buf pointer to input buffer * @param len size of input buffer * @return updated checksum */ unsigned long av_adler32_update(unsigned long adler, const uint8_t *buf, unsigned int len) av_pure; /** * @} */ #endif /* AVUTIL_ADLER32_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/aes.h ================================================ /* * copyright (c) 2007 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_AES_H #define AVUTIL_AES_H #include #include "attributes.h" #include "version.h" /** * @defgroup lavu_aes AES * @ingroup lavu_crypto * @{ */ extern const int av_aes_size; struct AVAES; /** * Allocate an AVAES context. */ struct AVAES *av_aes_alloc(void); /** * Initialize an AVAES context. * @param key_bits 128, 192 or 256 * @param decrypt 0 for encryption, 1 for decryption */ int av_aes_init(struct AVAES *a, const uint8_t *key, int key_bits, int decrypt); /** * Encrypt or decrypt a buffer using a previously initialized context. * @param count number of 16 byte blocks * @param dst destination array, can be equal to src * @param src source array, can be equal to dst * @param iv initialization vector for CBC mode, if NULL then ECB will be used * @param decrypt 0 for encryption, 1 for decryption */ void av_aes_crypt(struct AVAES *a, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); /** * @} */ #endif /* AVUTIL_AES_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/aes_ctr.h ================================================ /* * AES-CTR cipher * Copyright (c) 2015 Eran Kornblau * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_AES_CTR_H #define AVUTIL_AES_CTR_H #include #include "attributes.h" #include "version.h" #define AES_CTR_KEY_SIZE (16) #define AES_CTR_IV_SIZE (8) struct AVAESCTR; /** * Allocate an AVAESCTR context. */ struct AVAESCTR *av_aes_ctr_alloc(void); /** * Initialize an AVAESCTR context. * @param key encryption key, must have a length of AES_CTR_KEY_SIZE */ int av_aes_ctr_init(struct AVAESCTR *a, const uint8_t *key); /** * Release an AVAESCTR context. */ void av_aes_ctr_free(struct AVAESCTR *a); /** * Process a buffer using a previously initialized context. * @param dst destination array, can be equal to src * @param src source array, can be equal to dst * @param size the size of src and dst */ void av_aes_ctr_crypt(struct AVAESCTR *a, uint8_t *dst, const uint8_t *src, int size); /** * Get the current iv */ const uint8_t* av_aes_ctr_get_iv(struct AVAESCTR *a); /** * Generate a random iv */ void av_aes_ctr_set_random_iv(struct AVAESCTR *a); /** * Forcefully change the iv */ void av_aes_ctr_set_iv(struct AVAESCTR *a, const uint8_t* iv); /** * Increment the top 64 bit of the iv (performed after each frame) */ void av_aes_ctr_increment_iv(struct AVAESCTR *a); /** * @} */ #endif /* AVUTIL_AES_CTR_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/application.h ================================================ /* * copyright (c) 2016 Zhang Rui * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_APPLICATION_H #define AVUTIL_APPLICATION_H #include "libavutil/log.h" #define AVAPP_EVENT_WILL_HTTP_OPEN 1 //AVAppHttpEvent #define AVAPP_EVENT_DID_HTTP_OPEN 2 //AVAppHttpEvent #define AVAPP_EVENT_WILL_HTTP_SEEK 3 //AVAppHttpEvent #define AVAPP_EVENT_DID_HTTP_SEEK 4 //AVAppHttpEvent #define AVAPP_EVENT_ASYNC_STATISTIC 0x11000 //AVAppAsyncStatistic #define AVAPP_EVENT_ASYNC_READ_SPEED 0x11001 //AVAppAsyncReadSpeed #define AVAPP_EVENT_IO_TRAFFIC 0x12204 //AVAppIOTraffic #define AVAPP_CTRL_WILL_TCP_OPEN 0x20001 //AVAppTcpIOControl #define AVAPP_CTRL_DID_TCP_OPEN 0x20002 //AVAppTcpIOControl #define AVAPP_CTRL_WILL_HTTP_OPEN 0x20003 //AVAppIOControl #define AVAPP_CTRL_WILL_LIVE_OPEN 0x20005 //AVAppIOControl #define AVAPP_CTRL_WILL_CONCAT_SEGMENT_OPEN 0x20007 //AVAppIOControl typedef struct AVAppIOControl { size_t size; char url[4096]; /* in, out */ int segment_index; /* in, default = 0 */ int retry_counter; /* in */ int is_handled; /* out, default = false */ int is_url_changed; /* out, default = false */ } AVAppIOControl; typedef struct AVAppTcpIOControl { int error; int family; char ip[96]; int port; int fd; } AVAppTcpIOControl; typedef struct AVAppAsyncStatistic { size_t size; int64_t buf_backwards; int64_t buf_forwards; int64_t buf_capacity; } AVAppAsyncStatistic; typedef struct AVAppAsyncReadSpeed { size_t size; int is_full_speed; int64_t io_bytes; int64_t elapsed_milli; } AVAppAsyncReadSpeed; typedef struct AVAppHttpEvent { void *obj; char url[4096]; int64_t offset; int error; int http_code; } AVAppHttpEvent; typedef struct AVAppIOTraffic { void *obj; int bytes; } AVAppIOTraffic; typedef struct AVApplicationContext AVApplicationContext; struct AVApplicationContext { const AVClass *av_class; /**< information for av_log(). Set by av_application_open(). */ void *opaque; /**< user data. */ int (*func_on_app_event)(AVApplicationContext *h, int event_type ,void *obj, size_t size); }; int av_application_alloc(AVApplicationContext **ph, void *opaque); int av_application_open(AVApplicationContext **ph, void *opaque); void av_application_close(AVApplicationContext *h); void av_application_closep(AVApplicationContext **ph); void av_application_on_http_event(AVApplicationContext *h, int event_type, AVAppHttpEvent *event); void av_application_will_http_open(AVApplicationContext *h, void *obj, const char *url); void av_application_did_http_open(AVApplicationContext *h, void *obj, const char *url, int error, int http_code); void av_application_will_http_seek(AVApplicationContext *h, void *obj, const char *url, int64_t offset); void av_application_did_http_seek(AVApplicationContext *h, void *obj, const char *url, int64_t offset, int error, int http_code); void av_application_did_io_tcp_read(AVApplicationContext *h, void *obj, int bytes); int av_application_on_io_control(AVApplicationContext *h, int event_type, AVAppIOControl *control); int av_application_on_tcp_will_open(AVApplicationContext *h); int av_application_on_tcp_did_open(AVApplicationContext *h, int error, int fd); void av_application_on_async_statistic(AVApplicationContext *h, AVAppAsyncStatistic *statistic); void av_application_on_async_read_speed(AVApplicationContext *h, AVAppAsyncReadSpeed *speed); #endif /* AVUTIL_APPLICATION_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/arm64/avconfig.h ================================================ /* Generated by ffconf */ #ifndef AVUTIL_AVCONFIG_H #define AVUTIL_AVCONFIG_H #define AV_HAVE_BIGENDIAN 0 #define AV_HAVE_FAST_UNALIGNED 1 #endif /* AVUTIL_AVCONFIG_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/arm64/ffversion.h ================================================ /* Automatically generated by version.sh, do not manually edit! */ #ifndef AVUTIL_FFVERSION_H #define AVUTIL_FFVERSION_H #define FFMPEG_VERSION "ff3.2--ijk0.7.6--20170203--001" #endif /* AVUTIL_FFVERSION_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/armv7/avconfig.h ================================================ /* Generated by ffconf */ #ifndef AVUTIL_AVCONFIG_H #define AVUTIL_AVCONFIG_H #define AV_HAVE_BIGENDIAN 0 #define AV_HAVE_FAST_UNALIGNED 1 #endif /* AVUTIL_AVCONFIG_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/armv7/ffversion.h ================================================ /* Automatically generated by version.sh, do not manually edit! */ #ifndef AVUTIL_FFVERSION_H #define AVUTIL_FFVERSION_H #define FFMPEG_VERSION "ff3.2--ijk0.7.6--20170203--001" #endif /* AVUTIL_FFVERSION_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/attributes.h ================================================ /* * copyright (c) 2006 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * Macro definitions for various function/variable attributes */ #ifndef AVUTIL_ATTRIBUTES_H #define AVUTIL_ATTRIBUTES_H #ifdef __GNUC__ # define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > (x) || __GNUC__ == (x) && __GNUC_MINOR__ >= (y)) # define AV_GCC_VERSION_AT_MOST(x,y) (__GNUC__ < (x) || __GNUC__ == (x) && __GNUC_MINOR__ <= (y)) #else # define AV_GCC_VERSION_AT_LEAST(x,y) 0 # define AV_GCC_VERSION_AT_MOST(x,y) 0 #endif #ifndef av_always_inline #if AV_GCC_VERSION_AT_LEAST(3,1) # define av_always_inline __attribute__((always_inline)) inline #elif defined(_MSC_VER) # define av_always_inline __forceinline #else # define av_always_inline inline #endif #endif #ifndef av_extern_inline #if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__) # define av_extern_inline extern inline #else # define av_extern_inline inline #endif #endif #if AV_GCC_VERSION_AT_LEAST(3,4) # define av_warn_unused_result __attribute__((warn_unused_result)) #else # define av_warn_unused_result #endif #if AV_GCC_VERSION_AT_LEAST(3,1) # define av_noinline __attribute__((noinline)) #elif defined(_MSC_VER) # define av_noinline __declspec(noinline) #else # define av_noinline #endif #if AV_GCC_VERSION_AT_LEAST(3,1) # define av_pure __attribute__((pure)) #else # define av_pure #endif #if AV_GCC_VERSION_AT_LEAST(2,6) # define av_const __attribute__((const)) #else # define av_const #endif #if AV_GCC_VERSION_AT_LEAST(4,3) # define av_cold __attribute__((cold)) #else # define av_cold #endif #if AV_GCC_VERSION_AT_LEAST(4,1) && !defined(__llvm__) # define av_flatten __attribute__((flatten)) #else # define av_flatten #endif #if AV_GCC_VERSION_AT_LEAST(3,1) # define attribute_deprecated __attribute__((deprecated)) #elif defined(_MSC_VER) # define attribute_deprecated __declspec(deprecated) #else # define attribute_deprecated #endif /** * Disable warnings about deprecated features * This is useful for sections of code kept for backward compatibility and * scheduled for removal. */ #ifndef AV_NOWARN_DEPRECATED #if AV_GCC_VERSION_AT_LEAST(4,6) # define AV_NOWARN_DEPRECATED(code) \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ code \ _Pragma("GCC diagnostic pop") #elif defined(_MSC_VER) # define AV_NOWARN_DEPRECATED(code) \ __pragma(warning(push)) \ __pragma(warning(disable : 4996)) \ code; \ __pragma(warning(pop)) #else # define AV_NOWARN_DEPRECATED(code) code #endif #endif #if defined(__GNUC__) # define av_unused __attribute__((unused)) #else # define av_unused #endif /** * Mark a variable as used and prevent the compiler from optimizing it * away. This is useful for variables accessed only from inline * assembler without the compiler being aware. */ #if AV_GCC_VERSION_AT_LEAST(3,1) # define av_used __attribute__((used)) #else # define av_used #endif #if AV_GCC_VERSION_AT_LEAST(3,3) # define av_alias __attribute__((may_alias)) #else # define av_alias #endif #if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(__clang__) # define av_uninit(x) x=x #else # define av_uninit(x) x #endif #ifdef __GNUC__ # define av_builtin_constant_p __builtin_constant_p # define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos))) #else # define av_builtin_constant_p(x) 0 # define av_printf_format(fmtpos, attrpos) #endif #if AV_GCC_VERSION_AT_LEAST(2,5) # define av_noreturn __attribute__((noreturn)) #else # define av_noreturn #endif #endif /* AVUTIL_ATTRIBUTES_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/audio_fifo.h ================================================ /* * Audio FIFO * Copyright (c) 2012 Justin Ruggles * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * Audio FIFO Buffer */ #ifndef AVUTIL_AUDIO_FIFO_H #define AVUTIL_AUDIO_FIFO_H #include "avutil.h" #include "fifo.h" #include "samplefmt.h" /** * @addtogroup lavu_audio * @{ * * @defgroup lavu_audiofifo Audio FIFO Buffer * @{ */ /** * Context for an Audio FIFO Buffer. * * - Operates at the sample level rather than the byte level. * - Supports multiple channels with either planar or packed sample format. * - Automatic reallocation when writing to a full buffer. */ typedef struct AVAudioFifo AVAudioFifo; /** * Free an AVAudioFifo. * * @param af AVAudioFifo to free */ void av_audio_fifo_free(AVAudioFifo *af); /** * Allocate an AVAudioFifo. * * @param sample_fmt sample format * @param channels number of channels * @param nb_samples initial allocation size, in samples * @return newly allocated AVAudioFifo, or NULL on error */ AVAudioFifo *av_audio_fifo_alloc(enum AVSampleFormat sample_fmt, int channels, int nb_samples); /** * Reallocate an AVAudioFifo. * * @param af AVAudioFifo to reallocate * @param nb_samples new allocation size, in samples * @return 0 if OK, or negative AVERROR code on failure */ av_warn_unused_result int av_audio_fifo_realloc(AVAudioFifo *af, int nb_samples); /** * Write data to an AVAudioFifo. * * The AVAudioFifo will be reallocated automatically if the available space * is less than nb_samples. * * @see enum AVSampleFormat * The documentation for AVSampleFormat describes the data layout. * * @param af AVAudioFifo to write to * @param data audio data plane pointers * @param nb_samples number of samples to write * @return number of samples actually written, or negative AVERROR * code on failure. If successful, the number of samples * actually written will always be nb_samples. */ int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples); /** * Peek data from an AVAudioFifo. * * @see enum AVSampleFormat * The documentation for AVSampleFormat describes the data layout. * * @param af AVAudioFifo to read from * @param data audio data plane pointers * @param nb_samples number of samples to peek * @return number of samples actually peek, or negative AVERROR code * on failure. The number of samples actually peek will not * be greater than nb_samples, and will only be less than * nb_samples if av_audio_fifo_size is less than nb_samples. */ int av_audio_fifo_peek(AVAudioFifo *af, void **data, int nb_samples); /** * Peek data from an AVAudioFifo. * * @see enum AVSampleFormat * The documentation for AVSampleFormat describes the data layout. * * @param af AVAudioFifo to read from * @param data audio data plane pointers * @param nb_samples number of samples to peek * @param offset offset from current read position * @return number of samples actually peek, or negative AVERROR code * on failure. The number of samples actually peek will not * be greater than nb_samples, and will only be less than * nb_samples if av_audio_fifo_size is less than nb_samples. */ int av_audio_fifo_peek_at(AVAudioFifo *af, void **data, int nb_samples, int offset); /** * Read data from an AVAudioFifo. * * @see enum AVSampleFormat * The documentation for AVSampleFormat describes the data layout. * * @param af AVAudioFifo to read from * @param data audio data plane pointers * @param nb_samples number of samples to read * @return number of samples actually read, or negative AVERROR code * on failure. The number of samples actually read will not * be greater than nb_samples, and will only be less than * nb_samples if av_audio_fifo_size is less than nb_samples. */ int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples); /** * Drain data from an AVAudioFifo. * * Removes the data without reading it. * * @param af AVAudioFifo to drain * @param nb_samples number of samples to drain * @return 0 if OK, or negative AVERROR code on failure */ int av_audio_fifo_drain(AVAudioFifo *af, int nb_samples); /** * Reset the AVAudioFifo buffer. * * This empties all data in the buffer. * * @param af AVAudioFifo to reset */ void av_audio_fifo_reset(AVAudioFifo *af); /** * Get the current number of samples in the AVAudioFifo available for reading. * * @param af the AVAudioFifo to query * @return number of samples available for reading */ int av_audio_fifo_size(AVAudioFifo *af); /** * Get the current number of samples in the AVAudioFifo available for writing. * * @param af the AVAudioFifo to query * @return number of samples available for writing */ int av_audio_fifo_space(AVAudioFifo *af); /** * @} * @} */ #endif /* AVUTIL_AUDIO_FIFO_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/avassert.h ================================================ /* * copyright (c) 2010 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * simple assert() macros that are a bit more flexible than ISO C assert(). * @author Michael Niedermayer */ #ifndef AVUTIL_AVASSERT_H #define AVUTIL_AVASSERT_H #include #include "avutil.h" #include "log.h" /** * assert() equivalent, that is always enabled. */ #define av_assert0(cond) do { \ if (!(cond)) { \ av_log(NULL, AV_LOG_PANIC, "Assertion %s failed at %s:%d\n", \ AV_STRINGIFY(cond), __FILE__, __LINE__); \ abort(); \ } \ } while (0) /** * assert() equivalent, that does not lie in speed critical code. * These asserts() thus can be enabled without fearing speed loss. */ #if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 0 #define av_assert1(cond) av_assert0(cond) #else #define av_assert1(cond) ((void)0) #endif /** * assert() equivalent, that does lie in speed critical code. */ #if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1 #define av_assert2(cond) av_assert0(cond) #define av_assert2_fpu() av_assert0_fpu() #else #define av_assert2(cond) ((void)0) #define av_assert2_fpu() ((void)0) #endif /** * Assert that floating point opperations can be executed. * * This will av_assert0() that the cpu is not in MMX state on X86 */ void av_assert0_fpu(void); #endif /* AVUTIL_AVASSERT_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/avconfig.h ================================================ /* * avconfig.h * * Copyright (c) 2013 Bilibili * Copyright (c) 2013 Zhang Rui * * This file is part of ijkPlayer. * * ijkPlayer 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. * * ijkPlayer 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 ijkPlayer; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #if defined(__aarch64__) # include "arm64/avconfig.h" #elif defined(__x86_64__) # include "x86_64/avconfig.h" #elif defined(__arm__) # if defined(__ARM_ARCH_7S__) # include "armv7s/avconfig.h" # elif defined(__ARM_ARCH) # if __ARM_ARCH == 7 # include "armv7/avconfig.h" # else # error Unsupport ARM architecture # endif # else # error Unsupport ARM architecture # endif #elif defined(__i386__) # include "i386/avconfig.h" #else # error Unsupport architecture #endif ================================================ FILE: 3rParty/FFmpeg/include/libavutil/avstring.h ================================================ /* * Copyright (c) 2007 Mans Rullgard * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_AVSTRING_H #define AVUTIL_AVSTRING_H #include #include #include "attributes.h" /** * @addtogroup lavu_string * @{ */ /** * Return non-zero if pfx is a prefix of str. If it is, *ptr is set to * the address of the first character in str after the prefix. * * @param str input string * @param pfx prefix to test * @param ptr updated if the prefix is matched inside str * @return non-zero if the prefix matches, zero otherwise */ int av_strstart(const char *str, const char *pfx, const char **ptr); /** * Return non-zero if pfx is a prefix of str independent of case. If * it is, *ptr is set to the address of the first character in str * after the prefix. * * @param str input string * @param pfx prefix to test * @param ptr updated if the prefix is matched inside str * @return non-zero if the prefix matches, zero otherwise */ int av_stristart(const char *str, const char *pfx, const char **ptr); /** * Locate the first case-independent occurrence in the string haystack * of the string needle. A zero-length string needle is considered to * match at the start of haystack. * * This function is a case-insensitive version of the standard strstr(). * * @param haystack string to search in * @param needle string to search for * @return pointer to the located match within haystack * or a null pointer if no match */ char *av_stristr(const char *haystack, const char *needle); /** * Locate the first occurrence of the string needle in the string haystack * where not more than hay_length characters are searched. A zero-length * string needle is considered to match at the start of haystack. * * This function is a length-limited version of the standard strstr(). * * @param haystack string to search in * @param needle string to search for * @param hay_length length of string to search in * @return pointer to the located match within haystack * or a null pointer if no match */ char *av_strnstr(const char *haystack, const char *needle, size_t hay_length); /** * Copy the string src to dst, but no more than size - 1 bytes, and * null-terminate dst. * * This function is the same as BSD strlcpy(). * * @param dst destination buffer * @param src source string * @param size size of destination buffer * @return the length of src * * @warning since the return value is the length of src, src absolutely * _must_ be a properly 0-terminated string, otherwise this will read beyond * the end of the buffer and possibly crash. */ size_t av_strlcpy(char *dst, const char *src, size_t size); /** * Append the string src to the string dst, but to a total length of * no more than size - 1 bytes, and null-terminate dst. * * This function is similar to BSD strlcat(), but differs when * size <= strlen(dst). * * @param dst destination buffer * @param src source string * @param size size of destination buffer * @return the total length of src and dst * * @warning since the return value use the length of src and dst, these * absolutely _must_ be a properly 0-terminated strings, otherwise this * will read beyond the end of the buffer and possibly crash. */ size_t av_strlcat(char *dst, const char *src, size_t size); /** * Append output to a string, according to a format. Never write out of * the destination buffer, and always put a terminating 0 within * the buffer. * @param dst destination buffer (string to which the output is * appended) * @param size total size of the destination buffer * @param fmt printf-compatible format string, specifying how the * following parameters are used * @return the length of the string that would have been generated * if enough space had been available */ size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) av_printf_format(3, 4); /** * Get the count of continuous non zero chars starting from the beginning. * * @param len maximum number of characters to check in the string, that * is the maximum value which is returned by the function */ static inline size_t av_strnlen(const char *s, size_t len) { size_t i; for (i = 0; i < len && s[i]; i++) ; return i; } /** * Print arguments following specified format into a large enough auto * allocated buffer. It is similar to GNU asprintf(). * @param fmt printf-compatible format string, specifying how the * following parameters are used. * @return the allocated string * @note You have to free the string yourself with av_free(). */ char *av_asprintf(const char *fmt, ...) av_printf_format(1, 2); /** * Convert a number to an av_malloced string. */ char *av_d2str(double d); /** * Unescape the given string until a non escaped terminating char, * and return the token corresponding to the unescaped string. * * The normal \ and ' escaping is supported. Leading and trailing * whitespaces are removed, unless they are escaped with '\' or are * enclosed between ''. * * @param buf the buffer to parse, buf will be updated to point to the * terminating char * @param term a 0-terminated list of terminating chars * @return the malloced unescaped string, which must be av_freed by * the user, NULL in case of allocation failure */ char *av_get_token(const char **buf, const char *term); /** * Split the string into several tokens which can be accessed by * successive calls to av_strtok(). * * A token is defined as a sequence of characters not belonging to the * set specified in delim. * * On the first call to av_strtok(), s should point to the string to * parse, and the value of saveptr is ignored. In subsequent calls, s * should be NULL, and saveptr should be unchanged since the previous * call. * * This function is similar to strtok_r() defined in POSIX.1. * * @param s the string to parse, may be NULL * @param delim 0-terminated list of token delimiters, must be non-NULL * @param saveptr user-provided pointer which points to stored * information necessary for av_strtok() to continue scanning the same * string. saveptr is updated to point to the next character after the * first delimiter found, or to NULL if the string was terminated * @return the found token, or NULL when no token is found */ char *av_strtok(char *s, const char *delim, char **saveptr); /** * Locale-independent conversion of ASCII isdigit. */ static inline av_const int av_isdigit(int c) { return c >= '0' && c <= '9'; } /** * Locale-independent conversion of ASCII isgraph. */ static inline av_const int av_isgraph(int c) { return c > 32 && c < 127; } /** * Locale-independent conversion of ASCII isspace. */ static inline av_const int av_isspace(int c) { return c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v'; } /** * Locale-independent conversion of ASCII characters to uppercase. */ static inline av_const int av_toupper(int c) { if (c >= 'a' && c <= 'z') c ^= 0x20; return c; } /** * Locale-independent conversion of ASCII characters to lowercase. */ static inline av_const int av_tolower(int c) { if (c >= 'A' && c <= 'Z') c ^= 0x20; return c; } /** * Locale-independent conversion of ASCII isxdigit. */ static inline av_const int av_isxdigit(int c) { c = av_tolower(c); return av_isdigit(c) || (c >= 'a' && c <= 'f'); } /** * Locale-independent case-insensitive compare. * @note This means only ASCII-range characters are case-insensitive */ int av_strcasecmp(const char *a, const char *b); /** * Locale-independent case-insensitive compare. * @note This means only ASCII-range characters are case-insensitive */ int av_strncasecmp(const char *a, const char *b, size_t n); /** * Thread safe basename. * @param path the path, on DOS both \ and / are considered separators. * @return pointer to the basename substring. */ const char *av_basename(const char *path); /** * Thread safe dirname. * @param path the path, on DOS both \ and / are considered separators. * @return the path with the separator replaced by the string terminator or ".". * @note the function may change the input string. */ const char *av_dirname(char *path); /** * Match instances of a name in a comma-separated list of names. * List entries are checked from the start to the end of the names list, * the first match ends further processing. If an entry prefixed with '-' * matches, then 0 is returned. The "ALL" list entry is considered to * match all names. * * @param name Name to look for. * @param names List of names. * @return 1 on match, 0 otherwise. */ int av_match_name(const char *name, const char *names); /** * Append path component to the existing path. * Path separator '/' is placed between when needed. * Resulting string have to be freed with av_free(). * @param path base path * @param component component to be appended * @return new path or NULL on error. */ char *av_append_path_component(const char *path, const char *component); enum AVEscapeMode { AV_ESCAPE_MODE_AUTO, ///< Use auto-selected escaping mode. AV_ESCAPE_MODE_BACKSLASH, ///< Use backslash escaping. AV_ESCAPE_MODE_QUOTE, ///< Use single-quote escaping. }; /** * Consider spaces special and escape them even in the middle of the * string. * * This is equivalent to adding the whitespace characters to the special * characters lists, except it is guaranteed to use the exact same list * of whitespace characters as the rest of libavutil. */ #define AV_ESCAPE_FLAG_WHITESPACE (1 << 0) /** * Escape only specified special characters. * Without this flag, escape also any characters that may be considered * special by av_get_token(), such as the single quote. */ #define AV_ESCAPE_FLAG_STRICT (1 << 1) /** * Escape string in src, and put the escaped string in an allocated * string in *dst, which must be freed with av_free(). * * @param dst pointer where an allocated string is put * @param src string to escape, must be non-NULL * @param special_chars string containing the special characters which * need to be escaped, can be NULL * @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. * Any unknown value for mode will be considered equivalent to * AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without * notice. * @param flags flags which control how to escape, see AV_ESCAPE_FLAG_ macros * @return the length of the allocated string, or a negative error code in case of error * @see av_bprint_escape() */ av_warn_unused_result int av_escape(char **dst, const char *src, const char *special_chars, enum AVEscapeMode mode, int flags); #define AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES 1 ///< accept codepoints over 0x10FFFF #define AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS 2 ///< accept non-characters - 0xFFFE and 0xFFFF #define AV_UTF8_FLAG_ACCEPT_SURROGATES 4 ///< accept UTF-16 surrogates codes #define AV_UTF8_FLAG_EXCLUDE_XML_INVALID_CONTROL_CODES 8 ///< exclude control codes not accepted by XML #define AV_UTF8_FLAG_ACCEPT_ALL \ AV_UTF8_FLAG_ACCEPT_INVALID_BIG_CODES|AV_UTF8_FLAG_ACCEPT_NON_CHARACTERS|AV_UTF8_FLAG_ACCEPT_SURROGATES /** * Read and decode a single UTF-8 code point (character) from the * buffer in *buf, and update *buf to point to the next byte to * decode. * * In case of an invalid byte sequence, the pointer will be updated to * the next byte after the invalid sequence and the function will * return an error code. * * Depending on the specified flags, the function will also fail in * case the decoded code point does not belong to a valid range. * * @note For speed-relevant code a carefully implemented use of * GET_UTF8() may be preferred. * * @param codep pointer used to return the parsed code in case of success. * The value in *codep is set even in case the range check fails. * @param bufp pointer to the address the first byte of the sequence * to decode, updated by the function to point to the * byte next after the decoded sequence * @param buf_end pointer to the end of the buffer, points to the next * byte past the last in the buffer. This is used to * avoid buffer overreads (in case of an unfinished * UTF-8 sequence towards the end of the buffer). * @param flags a collection of AV_UTF8_FLAG_* flags * @return >= 0 in case a sequence was successfully read, a negative * value in case of invalid sequence */ av_warn_unused_result int av_utf8_decode(int32_t *codep, const uint8_t **bufp, const uint8_t *buf_end, unsigned int flags); /** * Check if a name is in a list. * @returns 0 if not found, or the 1 based index where it has been found in the * list. */ int av_match_list(const char *name, const char *list, char separator); /** * @} */ #endif /* AVUTIL_AVSTRING_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/avutil.h ================================================ /* * copyright (c) 2006 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_AVUTIL_H #define AVUTIL_AVUTIL_H /** * @file * @ingroup lavu * Convenience header that includes @ref lavu "libavutil"'s core. */ /** * @mainpage * * @section ffmpeg_intro Introduction * * This document describes the usage of the different libraries * provided by FFmpeg. * * @li @ref libavc "libavcodec" encoding/decoding library * @li @ref lavfi "libavfilter" graph-based frame editing library * @li @ref libavf "libavformat" I/O and muxing/demuxing library * @li @ref lavd "libavdevice" special devices muxing/demuxing library * @li @ref lavu "libavutil" common utility library * @li @ref lswr "libswresample" audio resampling, format conversion and mixing * @li @ref lpp "libpostproc" post processing library * @li @ref libsws "libswscale" color conversion and scaling library * * @section ffmpeg_versioning Versioning and compatibility * * Each of the FFmpeg libraries contains a version.h header, which defines a * major, minor and micro version number with the * LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO} macros. The major version * number is incremented with backward incompatible changes - e.g. removing * parts of the public API, reordering public struct members, etc. The minor * version number is incremented for backward compatible API changes or major * new features - e.g. adding a new public function or a new decoder. The micro * version number is incremented for smaller changes that a calling program * might still want to check for - e.g. changing behavior in a previously * unspecified situation. * * FFmpeg guarantees backward API and ABI compatibility for each library as long * as its major version number is unchanged. This means that no public symbols * will be removed or renamed. Types and names of the public struct members and * values of public macros and enums will remain the same (unless they were * explicitly declared as not part of the public API). Documented behavior will * not change. * * In other words, any correct program that works with a given FFmpeg snapshot * should work just as well without any changes with any later snapshot with the * same major versions. This applies to both rebuilding the program against new * FFmpeg versions or to replacing the dynamic FFmpeg libraries that a program * links against. * * However, new public symbols may be added and new members may be appended to * public structs whose size is not part of public ABI (most public structs in * FFmpeg). New macros and enum values may be added. Behavior in undocumented * situations may change slightly (and be documented). All those are accompanied * by an entry in doc/APIchanges and incrementing either the minor or micro * version number. */ /** * @defgroup lavu libavutil * Common code shared across all FFmpeg libraries. * * @note * libavutil is designed to be modular. In most cases, in order to use the * functions provided by one component of libavutil you must explicitly include * the specific header containing that feature. If you are only using * media-related components, you could simply include libavutil/avutil.h, which * brings in most of the "core" components. * * @{ * * @defgroup lavu_crypto Crypto and Hashing * * @{ * @} * * @defgroup lavu_math Mathematics * @{ * * @} * * @defgroup lavu_string String Manipulation * * @{ * * @} * * @defgroup lavu_mem Memory Management * * @{ * * @} * * @defgroup lavu_data Data Structures * @{ * * @} * * @defgroup lavu_audio Audio related * * @{ * * @} * * @defgroup lavu_error Error Codes * * @{ * * @} * * @defgroup lavu_log Logging Facility * * @{ * * @} * * @defgroup lavu_misc Other * * @{ * * @defgroup preproc_misc Preprocessor String Macros * * @{ * * @} * * @defgroup version_utils Library Version Macros * * @{ * * @} */ /** * @addtogroup lavu_ver * @{ */ /** * Return the LIBAVUTIL_VERSION_INT constant. */ unsigned avutil_version(void); /** * Return an informative version string. This usually is the actual release * version number or a git commit description. This string has no fixed format * and can change any time. It should never be parsed by code. */ const char *av_version_info(void); /** * Return the libavutil build-time configuration. */ const char *avutil_configuration(void); /** * Return the libavutil license. */ const char *avutil_license(void); /** * @} */ /** * @addtogroup lavu_media Media Type * @brief Media Type */ enum AVMediaType { AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA AVMEDIA_TYPE_VIDEO, AVMEDIA_TYPE_AUDIO, AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous AVMEDIA_TYPE_SUBTITLE, AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse AVMEDIA_TYPE_NB }; /** * Return a string describing the media_type enum, NULL if media_type * is unknown. */ const char *av_get_media_type_string(enum AVMediaType media_type); /** * @defgroup lavu_const Constants * @{ * * @defgroup lavu_enc Encoding specific * * @note those definition should move to avcodec * @{ */ #define FF_LAMBDA_SHIFT 7 #define FF_LAMBDA_SCALE (1< /** * @defgroup lavu_base64 Base64 * @ingroup lavu_crypto * @{ */ /** * Decode a base64-encoded string. * * @param out buffer for decoded data * @param in null-terminated input string * @param out_size size in bytes of the out buffer, must be at * least 3/4 of the length of in, that is AV_BASE64_DECODE_SIZE(strlen(in)) * @return number of bytes written, or a negative value in case of * invalid input */ int av_base64_decode(uint8_t *out, const char *in, int out_size); /** * Calculate the output size in bytes needed to decode a base64 string * with length x to a data buffer. */ #define AV_BASE64_DECODE_SIZE(x) ((x) * 3LL / 4) /** * Encode data to base64 and null-terminate. * * @param out buffer for encoded data * @param out_size size in bytes of the out buffer (including the * null terminator), must be at least AV_BASE64_SIZE(in_size) * @param in input buffer containing the data to encode * @param in_size size in bytes of the in buffer * @return out or NULL in case of error */ char *av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size); /** * Calculate the output size needed to base64-encode x bytes to a * null-terminated string. */ #define AV_BASE64_SIZE(x) (((x)+2) / 3 * 4 + 1) /** * @} */ #endif /* AVUTIL_BASE64_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/blowfish.h ================================================ /* * Blowfish algorithm * Copyright (c) 2012 Samuel Pitoiset * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_BLOWFISH_H #define AVUTIL_BLOWFISH_H #include /** * @defgroup lavu_blowfish Blowfish * @ingroup lavu_crypto * @{ */ #define AV_BF_ROUNDS 16 typedef struct AVBlowfish { uint32_t p[AV_BF_ROUNDS + 2]; uint32_t s[4][256]; } AVBlowfish; /** * Allocate an AVBlowfish context. */ AVBlowfish *av_blowfish_alloc(void); /** * Initialize an AVBlowfish context. * * @param ctx an AVBlowfish context * @param key a key * @param key_len length of the key */ void av_blowfish_init(struct AVBlowfish *ctx, const uint8_t *key, int key_len); /** * Encrypt or decrypt a buffer using a previously initialized context. * * @param ctx an AVBlowfish context * @param xl left four bytes halves of input to be encrypted * @param xr right four bytes halves of input to be encrypted * @param decrypt 0 for encryption, 1 for decryption */ void av_blowfish_crypt_ecb(struct AVBlowfish *ctx, uint32_t *xl, uint32_t *xr, int decrypt); /** * Encrypt or decrypt a buffer using a previously initialized context. * * @param ctx an AVBlowfish context * @param dst destination array, can be equal to src * @param src source array, can be equal to dst * @param count number of 8 byte blocks * @param iv initialization vector for CBC mode, if NULL ECB will be used * @param decrypt 0 for encryption, 1 for decryption */ void av_blowfish_crypt(struct AVBlowfish *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); /** * @} */ #endif /* AVUTIL_BLOWFISH_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/bprint.h ================================================ /* * Copyright (c) 2012 Nicolas George * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_BPRINT_H #define AVUTIL_BPRINT_H #include #include "attributes.h" #include "avstring.h" /** * Define a structure with extra padding to a fixed size * This helps ensuring binary compatibility with future versions. */ #define FF_PAD_STRUCTURE(name, size, ...) \ struct ff_pad_helper_##name { __VA_ARGS__ }; \ typedef struct name { \ __VA_ARGS__ \ char reserved_padding[size - sizeof(struct ff_pad_helper_##name)]; \ } name; /** * Buffer to print data progressively * * The string buffer grows as necessary and is always 0-terminated. * The content of the string is never accessed, and thus is * encoding-agnostic and can even hold binary data. * * Small buffers are kept in the structure itself, and thus require no * memory allocation at all (unless the contents of the buffer is needed * after the structure goes out of scope). This is almost as lightweight as * declaring a local "char buf[512]". * * The length of the string can go beyond the allocated size: the buffer is * then truncated, but the functions still keep account of the actual total * length. * * In other words, buf->len can be greater than buf->size and records the * total length of what would have been to the buffer if there had been * enough memory. * * Append operations do not need to be tested for failure: if a memory * allocation fails, data stop being appended to the buffer, but the length * is still updated. This situation can be tested with * av_bprint_is_complete(). * * The size_max field determines several possible behaviours: * * size_max = -1 (= UINT_MAX) or any large value will let the buffer be * reallocated as necessary, with an amortized linear cost. * * size_max = 0 prevents writing anything to the buffer: only the total * length is computed. The write operations can then possibly be repeated in * a buffer with exactly the necessary size * (using size_init = size_max = len + 1). * * size_max = 1 is automatically replaced by the exact size available in the * structure itself, thus ensuring no dynamic memory allocation. The * internal buffer is large enough to hold a reasonable paragraph of text, * such as the current paragraph. */ FF_PAD_STRUCTURE(AVBPrint, 1024, char *str; /**< string so far */ unsigned len; /**< length so far */ unsigned size; /**< allocated memory */ unsigned size_max; /**< maximum allocated memory */ char reserved_internal_buffer[1]; ) /** * Convenience macros for special values for av_bprint_init() size_max * parameter. */ #define AV_BPRINT_SIZE_UNLIMITED ((unsigned)-1) #define AV_BPRINT_SIZE_AUTOMATIC 1 #define AV_BPRINT_SIZE_COUNT_ONLY 0 /** * Init a print buffer. * * @param buf buffer to init * @param size_init initial size (including the final 0) * @param size_max maximum size; * 0 means do not write anything, just count the length; * 1 is replaced by the maximum value for automatic storage; * any large value means that the internal buffer will be * reallocated as needed up to that limit; -1 is converted to * UINT_MAX, the largest limit possible. * Check also AV_BPRINT_SIZE_* macros. */ void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max); /** * Init a print buffer using a pre-existing buffer. * * The buffer will not be reallocated. * * @param buf buffer structure to init * @param buffer byte buffer to use for the string data * @param size size of buffer */ void av_bprint_init_for_buffer(AVBPrint *buf, char *buffer, unsigned size); /** * Append a formatted string to a print buffer. */ void av_bprintf(AVBPrint *buf, const char *fmt, ...) av_printf_format(2, 3); /** * Append a formatted string to a print buffer. */ void av_vbprintf(AVBPrint *buf, const char *fmt, va_list vl_arg); /** * Append char c n times to a print buffer. */ void av_bprint_chars(AVBPrint *buf, char c, unsigned n); /** * Append data to a print buffer. * * param buf bprint buffer to use * param data pointer to data * param size size of data */ void av_bprint_append_data(AVBPrint *buf, const char *data, unsigned size); struct tm; /** * Append a formatted date and time to a print buffer. * * param buf bprint buffer to use * param fmt date and time format string, see strftime() * param tm broken-down time structure to translate * * @note due to poor design of the standard strftime function, it may * produce poor results if the format string expands to a very long text and * the bprint buffer is near the limit stated by the size_max option. */ void av_bprint_strftime(AVBPrint *buf, const char *fmt, const struct tm *tm); /** * Allocate bytes in the buffer for external use. * * @param[in] buf buffer structure * @param[in] size required size * @param[out] mem pointer to the memory area * @param[out] actual_size size of the memory area after allocation; * can be larger or smaller than size */ void av_bprint_get_buffer(AVBPrint *buf, unsigned size, unsigned char **mem, unsigned *actual_size); /** * Reset the string to "" but keep internal allocated data. */ void av_bprint_clear(AVBPrint *buf); /** * Test if the print buffer is complete (not truncated). * * It may have been truncated due to a memory allocation failure * or the size_max limit (compare size and size_max if necessary). */ static inline int av_bprint_is_complete(const AVBPrint *buf) { return buf->len < buf->size; } /** * Finalize a print buffer. * * The print buffer can no longer be used afterwards, * but the len and size fields are still valid. * * @arg[out] ret_str if not NULL, used to return a permanent copy of the * buffer contents, or NULL if memory allocation fails; * if NULL, the buffer is discarded and freed * @return 0 for success or error code (probably AVERROR(ENOMEM)) */ int av_bprint_finalize(AVBPrint *buf, char **ret_str); /** * Escape the content in src and append it to dstbuf. * * @param dstbuf already inited destination bprint buffer * @param src string containing the text to escape * @param special_chars string containing the special characters which * need to be escaped, can be NULL * @param mode escape mode to employ, see AV_ESCAPE_MODE_* macros. * Any unknown value for mode will be considered equivalent to * AV_ESCAPE_MODE_BACKSLASH, but this behaviour can change without * notice. * @param flags flags which control how to escape, see AV_ESCAPE_FLAG_* macros */ void av_bprint_escape(AVBPrint *dstbuf, const char *src, const char *special_chars, enum AVEscapeMode mode, int flags); #endif /* AVUTIL_BPRINT_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/bswap.h ================================================ /* * copyright (c) 2006 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * byte swapping routines */ #ifndef AVUTIL_BSWAP_H #define AVUTIL_BSWAP_H #include #include "libavutil/avconfig.h" #include "attributes.h" #ifdef HAVE_AV_CONFIG_H #include "config.h" #if ARCH_AARCH64 # include "aarch64/bswap.h" #elif ARCH_ARM # include "arm/bswap.h" #elif ARCH_AVR32 # include "avr32/bswap.h" #elif ARCH_SH4 # include "sh4/bswap.h" #elif ARCH_X86 # include "x86/bswap.h" #endif #endif /* HAVE_AV_CONFIG_H */ #define AV_BSWAP16C(x) (((x) << 8 & 0xff00) | ((x) >> 8 & 0x00ff)) #define AV_BSWAP32C(x) (AV_BSWAP16C(x) << 16 | AV_BSWAP16C((x) >> 16)) #define AV_BSWAP64C(x) (AV_BSWAP32C(x) << 32 | AV_BSWAP32C((x) >> 32)) #define AV_BSWAPC(s, x) AV_BSWAP##s##C(x) #ifndef av_bswap16 static av_always_inline av_const uint16_t av_bswap16(uint16_t x) { x= (x>>8) | (x<<8); return x; } #endif #ifndef av_bswap32 static av_always_inline av_const uint32_t av_bswap32(uint32_t x) { return AV_BSWAP32C(x); } #endif #ifndef av_bswap64 static inline uint64_t av_const av_bswap64(uint64_t x) { return (uint64_t)av_bswap32(x) << 32 | av_bswap32(x >> 32); } #endif // be2ne ... big-endian to native-endian // le2ne ... little-endian to native-endian #if AV_HAVE_BIGENDIAN #define av_be2ne16(x) (x) #define av_be2ne32(x) (x) #define av_be2ne64(x) (x) #define av_le2ne16(x) av_bswap16(x) #define av_le2ne32(x) av_bswap32(x) #define av_le2ne64(x) av_bswap64(x) #define AV_BE2NEC(s, x) (x) #define AV_LE2NEC(s, x) AV_BSWAPC(s, x) #else #define av_be2ne16(x) av_bswap16(x) #define av_be2ne32(x) av_bswap32(x) #define av_be2ne64(x) av_bswap64(x) #define av_le2ne16(x) (x) #define av_le2ne32(x) (x) #define av_le2ne64(x) (x) #define AV_BE2NEC(s, x) AV_BSWAPC(s, x) #define AV_LE2NEC(s, x) (x) #endif #define AV_BE2NE16C(x) AV_BE2NEC(16, x) #define AV_BE2NE32C(x) AV_BE2NEC(32, x) #define AV_BE2NE64C(x) AV_BE2NEC(64, x) #define AV_LE2NE16C(x) AV_LE2NEC(16, x) #define AV_LE2NE32C(x) AV_LE2NEC(32, x) #define AV_LE2NE64C(x) AV_LE2NEC(64, x) #endif /* AVUTIL_BSWAP_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/buffer.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * @ingroup lavu_buffer * refcounted data buffer API */ #ifndef AVUTIL_BUFFER_H #define AVUTIL_BUFFER_H #include /** * @defgroup lavu_buffer AVBuffer * @ingroup lavu_data * * @{ * AVBuffer is an API for reference-counted data buffers. * * There are two core objects in this API -- AVBuffer and AVBufferRef. AVBuffer * represents the data buffer itself; it is opaque and not meant to be accessed * by the caller directly, but only through AVBufferRef. However, the caller may * e.g. compare two AVBuffer pointers to check whether two different references * are describing the same data buffer. AVBufferRef represents a single * reference to an AVBuffer and it is the object that may be manipulated by the * caller directly. * * There are two functions provided for creating a new AVBuffer with a single * reference -- av_buffer_alloc() to just allocate a new buffer, and * av_buffer_create() to wrap an existing array in an AVBuffer. From an existing * reference, additional references may be created with av_buffer_ref(). * Use av_buffer_unref() to free a reference (this will automatically free the * data once all the references are freed). * * The convention throughout this API and the rest of FFmpeg is such that the * buffer is considered writable if there exists only one reference to it (and * it has not been marked as read-only). The av_buffer_is_writable() function is * provided to check whether this is true and av_buffer_make_writable() will * automatically create a new writable buffer when necessary. * Of course nothing prevents the calling code from violating this convention, * however that is safe only when all the existing references are under its * control. * * @note Referencing and unreferencing the buffers is thread-safe and thus * may be done from multiple threads simultaneously without any need for * additional locking. * * @note Two different references to the same buffer can point to different * parts of the buffer (i.e. their AVBufferRef.data will not be equal). */ /** * A reference counted buffer type. It is opaque and is meant to be used through * references (AVBufferRef). */ typedef struct AVBuffer AVBuffer; /** * A reference to a data buffer. * * The size of this struct is not a part of the public ABI and it is not meant * to be allocated directly. */ typedef struct AVBufferRef { AVBuffer *buffer; /** * The data buffer. It is considered writable if and only if * this is the only reference to the buffer, in which case * av_buffer_is_writable() returns 1. */ uint8_t *data; /** * Size of data in bytes. */ int size; } AVBufferRef; /** * Allocate an AVBuffer of the given size using av_malloc(). * * @return an AVBufferRef of given size or NULL when out of memory */ AVBufferRef *av_buffer_alloc(int size); /** * Same as av_buffer_alloc(), except the returned buffer will be initialized * to zero. */ AVBufferRef *av_buffer_allocz(int size); /** * Always treat the buffer as read-only, even when it has only one * reference. */ #define AV_BUFFER_FLAG_READONLY (1 << 0) /** * Create an AVBuffer from an existing array. * * If this function is successful, data is owned by the AVBuffer. The caller may * only access data through the returned AVBufferRef and references derived from * it. * If this function fails, data is left untouched. * @param data data array * @param size size of data in bytes * @param free a callback for freeing this buffer's data * @param opaque parameter to be got for processing or passed to free * @param flags a combination of AV_BUFFER_FLAG_* * * @return an AVBufferRef referring to data on success, NULL on failure. */ AVBufferRef *av_buffer_create(uint8_t *data, int size, void (*free)(void *opaque, uint8_t *data), void *opaque, int flags); /** * Default free callback, which calls av_free() on the buffer data. * This function is meant to be passed to av_buffer_create(), not called * directly. */ void av_buffer_default_free(void *opaque, uint8_t *data); /** * Create a new reference to an AVBuffer. * * @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on * failure. */ AVBufferRef *av_buffer_ref(AVBufferRef *buf); /** * Free a given reference and automatically free the buffer if there are no more * references to it. * * @param buf the reference to be freed. The pointer is set to NULL on return. */ void av_buffer_unref(AVBufferRef **buf); /** * @return 1 if the caller may write to the data referred to by buf (which is * true if and only if buf is the only reference to the underlying AVBuffer). * Return 0 otherwise. * A positive answer is valid until av_buffer_ref() is called on buf. */ int av_buffer_is_writable(const AVBufferRef *buf); /** * @return the opaque parameter set by av_buffer_create. */ void *av_buffer_get_opaque(const AVBufferRef *buf); int av_buffer_get_ref_count(const AVBufferRef *buf); /** * Create a writable reference from a given buffer reference, avoiding data copy * if possible. * * @param buf buffer reference to make writable. On success, buf is either left * untouched, or it is unreferenced and a new writable AVBufferRef is * written in its place. On failure, buf is left untouched. * @return 0 on success, a negative AVERROR on failure. */ int av_buffer_make_writable(AVBufferRef **buf); /** * Reallocate a given buffer. * * @param buf a buffer reference to reallocate. On success, buf will be * unreferenced and a new reference with the required size will be * written in its place. On failure buf will be left untouched. *buf * may be NULL, then a new buffer is allocated. * @param size required new buffer size. * @return 0 on success, a negative AVERROR on failure. * * @note the buffer is actually reallocated with av_realloc() only if it was * initially allocated through av_buffer_realloc(NULL) and there is only one * reference to it (i.e. the one passed to this function). In all other cases * a new buffer is allocated and the data is copied. */ int av_buffer_realloc(AVBufferRef **buf, int size); /** * @} */ /** * @defgroup lavu_bufferpool AVBufferPool * @ingroup lavu_data * * @{ * AVBufferPool is an API for a lock-free thread-safe pool of AVBuffers. * * Frequently allocating and freeing large buffers may be slow. AVBufferPool is * meant to solve this in cases when the caller needs a set of buffers of the * same size (the most obvious use case being buffers for raw video or audio * frames). * * At the beginning, the user must call av_buffer_pool_init() to create the * buffer pool. Then whenever a buffer is needed, call av_buffer_pool_get() to * get a reference to a new buffer, similar to av_buffer_alloc(). This new * reference works in all aspects the same way as the one created by * av_buffer_alloc(). However, when the last reference to this buffer is * unreferenced, it is returned to the pool instead of being freed and will be * reused for subsequent av_buffer_pool_get() calls. * * When the caller is done with the pool and no longer needs to allocate any new * buffers, av_buffer_pool_uninit() must be called to mark the pool as freeable. * Once all the buffers are released, it will automatically be freed. * * Allocating and releasing buffers with this API is thread-safe as long as * either the default alloc callback is used, or the user-supplied one is * thread-safe. */ /** * The buffer pool. This structure is opaque and not meant to be accessed * directly. It is allocated with av_buffer_pool_init() and freed with * av_buffer_pool_uninit(). */ typedef struct AVBufferPool AVBufferPool; /** * Allocate and initialize a buffer pool. * * @param size size of each buffer in this pool * @param alloc a function that will be used to allocate new buffers when the * pool is empty. May be NULL, then the default allocator will be used * (av_buffer_alloc()). * @return newly created buffer pool on success, NULL on error. */ AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size)); /** * Allocate and initialize a buffer pool with a more complex allocator. * * @param size size of each buffer in this pool * @param opaque arbitrary user data used by the allocator * @param alloc a function that will be used to allocate new buffers when the * pool is empty. * @param pool_free a function that will be called immediately before the pool * is freed. I.e. after av_buffer_pool_can_uninit() is called * by the pool and all the frames are returned to the pool and * freed. It is intended to uninitialize the user opaque data. * @return newly created buffer pool on success, NULL on error. */ AVBufferPool *av_buffer_pool_init2(int size, void *opaque, AVBufferRef* (*alloc)(void *opaque, int size), void (*pool_free)(void *opaque)); /** * Mark the pool as being available for freeing. It will actually be freed only * once all the allocated buffers associated with the pool are released. Thus it * is safe to call this function while some of the allocated buffers are still * in use. * * @param pool pointer to the pool to be freed. It will be set to NULL. */ void av_buffer_pool_uninit(AVBufferPool **pool); /** * Allocate a new AVBuffer, reusing an old buffer from the pool when available. * This function may be called simultaneously from multiple threads. * * @return a reference to the new buffer on success, NULL on error. */ AVBufferRef *av_buffer_pool_get(AVBufferPool *pool); /** * @} */ #endif /* AVUTIL_BUFFER_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/camellia.h ================================================ /* * An implementation of the CAMELLIA algorithm as mentioned in RFC3713 * Copyright (c) 2014 Supraja Meedinti * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_CAMELLIA_H #define AVUTIL_CAMELLIA_H #include /** * @file * @brief Public header for libavutil CAMELLIA algorithm * @defgroup lavu_camellia CAMELLIA * @ingroup lavu_crypto * @{ */ extern const int av_camellia_size; struct AVCAMELLIA; /** * Allocate an AVCAMELLIA context * To free the struct: av_free(ptr) */ struct AVCAMELLIA *av_camellia_alloc(void); /** * Initialize an AVCAMELLIA context. * * @param ctx an AVCAMELLIA context * @param key a key of 16, 24, 32 bytes used for encryption/decryption * @param key_bits number of keybits: possible are 128, 192, 256 */ int av_camellia_init(struct AVCAMELLIA *ctx, const uint8_t *key, int key_bits); /** * Encrypt or decrypt a buffer using a previously initialized context * * @param ctx an AVCAMELLIA context * @param dst destination array, can be equal to src * @param src source array, can be equal to dst * @param count number of 16 byte blocks * @paran iv initialization vector for CBC mode, NULL for ECB mode * @param decrypt 0 for encryption, 1 for decryption */ void av_camellia_crypt(struct AVCAMELLIA *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t* iv, int decrypt); /** * @} */ #endif /* AVUTIL_CAMELLIA_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/cast5.h ================================================ /* * An implementation of the CAST128 algorithm as mentioned in RFC2144 * Copyright (c) 2014 Supraja Meedinti * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_CAST5_H #define AVUTIL_CAST5_H #include /** * @file * @brief Public header for libavutil CAST5 algorithm * @defgroup lavu_cast5 CAST5 * @ingroup lavu_crypto * @{ */ extern const int av_cast5_size; struct AVCAST5; /** * Allocate an AVCAST5 context * To free the struct: av_free(ptr) */ struct AVCAST5 *av_cast5_alloc(void); /** * Initialize an AVCAST5 context. * * @param ctx an AVCAST5 context * @param key a key of 5,6,...16 bytes used for encryption/decryption * @param key_bits number of keybits: possible are 40,48,...,128 * @return 0 on success, less than 0 on failure */ int av_cast5_init(struct AVCAST5 *ctx, const uint8_t *key, int key_bits); /** * Encrypt or decrypt a buffer using a previously initialized context, ECB mode only * * @param ctx an AVCAST5 context * @param dst destination array, can be equal to src * @param src source array, can be equal to dst * @param count number of 8 byte blocks * @param decrypt 0 for encryption, 1 for decryption */ void av_cast5_crypt(struct AVCAST5 *ctx, uint8_t *dst, const uint8_t *src, int count, int decrypt); /** * Encrypt or decrypt a buffer using a previously initialized context * * @param ctx an AVCAST5 context * @param dst destination array, can be equal to src * @param src source array, can be equal to dst * @param count number of 8 byte blocks * @param iv initialization vector for CBC mode, NULL for ECB mode * @param decrypt 0 for encryption, 1 for decryption */ void av_cast5_crypt2(struct AVCAST5 *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); /** * @} */ #endif /* AVUTIL_CAST5_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/channel_layout.h ================================================ /* * Copyright (c) 2006 Michael Niedermayer * Copyright (c) 2008 Peter Ross * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_CHANNEL_LAYOUT_H #define AVUTIL_CHANNEL_LAYOUT_H #include /** * @file * audio channel layout utility functions */ /** * @addtogroup lavu_audio * @{ */ /** * @defgroup channel_masks Audio channel masks * * A channel layout is a 64-bits integer with a bit set for every channel. * The number of bits set must be equal to the number of channels. * The value 0 means that the channel layout is not known. * @note this data structure is not powerful enough to handle channels * combinations that have the same channel multiple times, such as * dual-mono. * * @{ */ #define AV_CH_FRONT_LEFT 0x00000001 #define AV_CH_FRONT_RIGHT 0x00000002 #define AV_CH_FRONT_CENTER 0x00000004 #define AV_CH_LOW_FREQUENCY 0x00000008 #define AV_CH_BACK_LEFT 0x00000010 #define AV_CH_BACK_RIGHT 0x00000020 #define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040 #define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080 #define AV_CH_BACK_CENTER 0x00000100 #define AV_CH_SIDE_LEFT 0x00000200 #define AV_CH_SIDE_RIGHT 0x00000400 #define AV_CH_TOP_CENTER 0x00000800 #define AV_CH_TOP_FRONT_LEFT 0x00001000 #define AV_CH_TOP_FRONT_CENTER 0x00002000 #define AV_CH_TOP_FRONT_RIGHT 0x00004000 #define AV_CH_TOP_BACK_LEFT 0x00008000 #define AV_CH_TOP_BACK_CENTER 0x00010000 #define AV_CH_TOP_BACK_RIGHT 0x00020000 #define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix. #define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT. #define AV_CH_WIDE_LEFT 0x0000000080000000ULL #define AV_CH_WIDE_RIGHT 0x0000000100000000ULL #define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL #define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL #define AV_CH_LOW_FREQUENCY_2 0x0000000800000000ULL /** Channel mask value used for AVCodecContext.request_channel_layout to indicate that the user requests the channel order of the decoder output to be the native codec channel order. */ #define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL /** * @} * @defgroup channel_mask_c Audio channel layouts * @{ * */ #define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER) #define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT) #define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY) #define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER) #define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER) #define AV_CH_LAYOUT_3POINT1 (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY) #define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER) #define AV_CH_LAYOUT_4POINT1 (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY) #define AV_CH_LAYOUT_2_2 (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) #define AV_CH_LAYOUT_QUAD (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) #define AV_CH_LAYOUT_5POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) #define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY) #define AV_CH_LAYOUT_5POINT0_BACK (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) #define AV_CH_LAYOUT_5POINT1_BACK (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY) #define AV_CH_LAYOUT_6POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER) #define AV_CH_LAYOUT_6POINT0_FRONT (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) #define AV_CH_LAYOUT_HEXAGONAL (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER) #define AV_CH_LAYOUT_6POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER) #define AV_CH_LAYOUT_6POINT1_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER) #define AV_CH_LAYOUT_6POINT1_FRONT (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY) #define AV_CH_LAYOUT_7POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) #define AV_CH_LAYOUT_7POINT0_FRONT (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) #define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) #define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) #define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) #define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT) #define AV_CH_LAYOUT_HEXADECAGONAL (AV_CH_LAYOUT_OCTAGONAL|AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT) #define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT) enum AVMatrixEncoding { AV_MATRIX_ENCODING_NONE, AV_MATRIX_ENCODING_DOLBY, AV_MATRIX_ENCODING_DPLII, AV_MATRIX_ENCODING_DPLIIX, AV_MATRIX_ENCODING_DPLIIZ, AV_MATRIX_ENCODING_DOLBYEX, AV_MATRIX_ENCODING_DOLBYHEADPHONE, AV_MATRIX_ENCODING_NB }; /** * Return a channel layout id that matches name, or 0 if no match is found. * * name can be one or several of the following notations, * separated by '+' or '|': * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0, * 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix); * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC, * SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR); * - a number of channels, in decimal, optionally followed by 'c', yielding * the default channel layout for that number of channels (@see * av_get_default_channel_layout); * - a channel layout mask, in hexadecimal starting with "0x" (see the * AV_CH_* macros). * * @warning Starting from the next major bump the trailing character * 'c' to specify a number of channels will be required, while a * channel layout mask could also be specified as a decimal number * (if and only if not followed by "c"). * * Example: "stereo+FC" = "2c+FC" = "2c+1c" = "0x7" */ uint64_t av_get_channel_layout(const char *name); /** * Return a description of a channel layout. * If nb_channels is <= 0, it is guessed from the channel_layout. * * @param buf put here the string containing the channel layout * @param buf_size size in bytes of the buffer */ void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout); struct AVBPrint; /** * Append a description of a channel layout to a bprint buffer. */ void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout); /** * Return the number of channels in the channel layout. */ int av_get_channel_layout_nb_channels(uint64_t channel_layout); /** * Return default channel layout for a given number of channels. */ int64_t av_get_default_channel_layout(int nb_channels); /** * Get the index of a channel in channel_layout. * * @param channel a channel layout describing exactly one channel which must be * present in channel_layout. * * @return index of channel in channel_layout on success, a negative AVERROR * on error. */ int av_get_channel_layout_channel_index(uint64_t channel_layout, uint64_t channel); /** * Get the channel with the given index in channel_layout. */ uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index); /** * Get the name of a given channel. * * @return channel name on success, NULL on error. */ const char *av_get_channel_name(uint64_t channel); /** * Get the description of a given channel. * * @param channel a channel layout with a single channel * @return channel description on success, NULL on error */ const char *av_get_channel_description(uint64_t channel); /** * Get the value and name of a standard channel layout. * * @param[in] index index in an internal list, starting at 0 * @param[out] layout channel layout mask * @param[out] name name of the layout * @return 0 if the layout exists, * <0 if index is beyond the limits */ int av_get_standard_channel_layout(unsigned index, uint64_t *layout, const char **name); /** * @} * @} */ #endif /* AVUTIL_CHANNEL_LAYOUT_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/common.h ================================================ /* * copyright (c) 2006 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * common internal and external API header */ #ifndef AVUTIL_COMMON_H #define AVUTIL_COMMON_H #if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS) && !defined(UINT64_C) #error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS #endif #include #include #include #include #include #include #include #include #include "attributes.h" #include "macros.h" #include "version.h" #include "libavutil/avconfig.h" #if AV_HAVE_BIGENDIAN # define AV_NE(be, le) (be) #else # define AV_NE(be, le) (le) #endif //rounded division & shift #define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b)) /* assume b>0 */ #define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b)) /* Fast a/(1<=0 and b>=0 */ #define AV_CEIL_RSHIFT(a,b) (!av_builtin_constant_p(b) ? -((-(a)) >> (b)) \ : ((a) + (1<<(b)) - 1) >> (b)) /* Backwards compat. */ #define FF_CEIL_RSHIFT AV_CEIL_RSHIFT #define FFUDIV(a,b) (((a)>0 ?(a):(a)-(b)+1) / (b)) #define FFUMOD(a,b) ((a)-(b)*FFUDIV(a,b)) /** * Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they * are not representable as absolute values of their type. This is the same * as with *abs() * @see FFNABS() */ #define FFABS(a) ((a) >= 0 ? (a) : (-(a))) #define FFSIGN(a) ((a) > 0 ? 1 : -1) /** * Negative Absolute value. * this works for all integers of all types. * As with many macros, this evaluates its argument twice, it thus must not have * a sideeffect, that is FFNABS(x++) has undefined behavior. */ #define FFNABS(a) ((a) <= 0 ? (a) : (-(a))) /** * Comparator. * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0 * if x == y. This is useful for instance in a qsort comparator callback. * Furthermore, compilers are able to optimize this to branchless code, and * there is no risk of overflow with signed types. * As with many macros, this evaluates its argument multiple times, it thus * must not have a side-effect. */ #define FFDIFFSIGN(x,y) (((x)>(y)) - ((x)<(y))) #define FFMAX(a,b) ((a) > (b) ? (a) : (b)) #define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c) #define FFMIN(a,b) ((a) > (b) ? (b) : (a)) #define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c) #define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0) #define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) /* misc math functions */ #ifdef HAVE_AV_CONFIG_H # include "config.h" # include "intmath.h" #endif /* Pull in unguarded fallback defines at the end of this file. */ #include "common.h" #ifndef av_log2 av_const int av_log2(unsigned v); #endif #ifndef av_log2_16bit av_const int av_log2_16bit(unsigned v); #endif /** * Clip a signed integer value into the amin-amax range. * @param a value to clip * @param amin minimum value of the clip range * @param amax maximum value of the clip range * @return clipped value */ static av_always_inline av_const int av_clip_c(int a, int amin, int amax) { #if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 if (amin > amax) abort(); #endif if (a < amin) return amin; else if (a > amax) return amax; else return a; } /** * Clip a signed 64bit integer value into the amin-amax range. * @param a value to clip * @param amin minimum value of the clip range * @param amax maximum value of the clip range * @return clipped value */ static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, int64_t amax) { #if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 if (amin > amax) abort(); #endif if (a < amin) return amin; else if (a > amax) return amax; else return a; } /** * Clip a signed integer value into the 0-255 range. * @param a value to clip * @return clipped value */ static av_always_inline av_const uint8_t av_clip_uint8_c(int a) { if (a&(~0xFF)) return (-a)>>31; else return a; } /** * Clip a signed integer value into the -128,127 range. * @param a value to clip * @return clipped value */ static av_always_inline av_const int8_t av_clip_int8_c(int a) { if ((a+0x80U) & ~0xFF) return (a>>31) ^ 0x7F; else return a; } /** * Clip a signed integer value into the 0-65535 range. * @param a value to clip * @return clipped value */ static av_always_inline av_const uint16_t av_clip_uint16_c(int a) { if (a&(~0xFFFF)) return (-a)>>31; else return a; } /** * Clip a signed integer value into the -32768,32767 range. * @param a value to clip * @return clipped value */ static av_always_inline av_const int16_t av_clip_int16_c(int a) { if ((a+0x8000U) & ~0xFFFF) return (a>>31) ^ 0x7FFF; else return a; } /** * Clip a signed 64-bit integer value into the -2147483648,2147483647 range. * @param a value to clip * @return clipped value */ static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a) { if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (int32_t)((a>>63) ^ 0x7FFFFFFF); else return (int32_t)a; } /** * Clip a signed integer into the -(2^p),(2^p-1) range. * @param a value to clip * @param p bit position to clip at * @return clipped value */ static av_always_inline av_const int av_clip_intp2_c(int a, int p) { if (((unsigned)a + (1 << p)) & ~((2 << p) - 1)) return (a >> 31) ^ ((1 << p) - 1); else return a; } /** * Clip a signed integer to an unsigned power of two range. * @param a value to clip * @param p bit position to clip at * @return clipped value */ static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p) { if (a & ~((1<> 31 & ((1<= 2 if (amin > amax) abort(); #endif if (a < amin) return amin; else if (a > amax) return amax; else return a; } /** * Clip a double value into the amin-amax range. * @param a value to clip * @param amin minimum value of the clip range * @param amax maximum value of the clip range * @return clipped value */ static av_always_inline av_const double av_clipd_c(double a, double amin, double amax) { #if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 if (amin > amax) abort(); #endif if (a < amin) return amin; else if (a > amax) return amax; else return a; } /** Compute ceil(log2(x)). * @param x value used to compute ceil(log2(x)) * @return computed ceiling of log2(x) */ static av_always_inline av_const int av_ceil_log2_c(int x) { return av_log2((x - 1) << 1); } /** * Count number of bits set to one in x * @param x value to count bits of * @return the number of bits set to one in x */ static av_always_inline av_const int av_popcount_c(uint32_t x) { x -= (x >> 1) & 0x55555555; x = (x & 0x33333333) + ((x >> 2) & 0x33333333); x = (x + (x >> 4)) & 0x0F0F0F0F; x += x >> 8; return (x + (x >> 16)) & 0x3F; } /** * Count number of bits set to one in x * @param x value to count bits of * @return the number of bits set to one in x */ static av_always_inline av_const int av_popcount64_c(uint64_t x) { return av_popcount((uint32_t)x) + av_popcount((uint32_t)(x >> 32)); } static av_always_inline av_const int av_parity_c(uint32_t v) { return av_popcount(v) & 1; } #define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24)) #define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24)) /** * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form. * * @param val Output value, must be an lvalue of type uint32_t. * @param GET_BYTE Expression reading one byte from the input. * Evaluated up to 7 times (4 for the currently * assigned Unicode range). With a memory buffer * input, this could be *ptr++. * @param ERROR Expression to be evaluated on invalid input, * typically a goto statement. * * @warning ERROR should not contain a loop control statement which * could interact with the internal while loop, and should force an * exit from the macro code (e.g. through a goto or a return) in order * to prevent undefined results. */ #define GET_UTF8(val, GET_BYTE, ERROR)\ val= (GET_BYTE);\ {\ uint32_t top = (val & 128) >> 1;\ if ((val & 0xc0) == 0x80 || val >= 0xFE)\ ERROR\ while (val & top) {\ int tmp= (GET_BYTE) - 128;\ if(tmp>>6)\ ERROR\ val= (val<<6) + tmp;\ top <<= 5;\ }\ val &= (top << 1) - 1;\ } /** * Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form. * * @param val Output value, must be an lvalue of type uint32_t. * @param GET_16BIT Expression returning two bytes of UTF-16 data converted * to native byte order. Evaluated one or two times. * @param ERROR Expression to be evaluated on invalid input, * typically a goto statement. */ #define GET_UTF16(val, GET_16BIT, ERROR)\ val = GET_16BIT;\ {\ unsigned int hi = val - 0xD800;\ if (hi < 0x800) {\ val = GET_16BIT - 0xDC00;\ if (val > 0x3FFU || hi > 0x3FFU)\ ERROR\ val += (hi<<10) + 0x10000;\ }\ }\ /** * @def PUT_UTF8(val, tmp, PUT_BYTE) * Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long). * @param val is an input-only argument and should be of type uint32_t. It holds * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If * val is given as a function it is executed only once. * @param tmp is a temporary variable and should be of type uint8_t. It * represents an intermediate value during conversion that is to be * output by PUT_BYTE. * @param PUT_BYTE writes the converted UTF-8 bytes to any proper destination. * It could be a function or a statement, and uses tmp as the input byte. * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be * executed up to 4 times for values in the valid UTF-8 range and up to * 7 times in the general case, depending on the length of the converted * Unicode character. */ #define PUT_UTF8(val, tmp, PUT_BYTE)\ {\ int bytes, shift;\ uint32_t in = val;\ if (in < 0x80) {\ tmp = in;\ PUT_BYTE\ } else {\ bytes = (av_log2(in) + 4) / 5;\ shift = (bytes - 1) * 6;\ tmp = (256 - (256 >> bytes)) | (in >> shift);\ PUT_BYTE\ while (shift >= 6) {\ shift -= 6;\ tmp = 0x80 | ((in >> shift) & 0x3f);\ PUT_BYTE\ }\ }\ } /** * @def PUT_UTF16(val, tmp, PUT_16BIT) * Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes). * @param val is an input-only argument and should be of type uint32_t. It holds * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If * val is given as a function it is executed only once. * @param tmp is a temporary variable and should be of type uint16_t. It * represents an intermediate value during conversion that is to be * output by PUT_16BIT. * @param PUT_16BIT writes the converted UTF-16 data to any proper destination * in desired endianness. It could be a function or a statement, and uses tmp * as the input byte. For example, PUT_BYTE could be "*output++ = tmp;" * PUT_BYTE will be executed 1 or 2 times depending on input character. */ #define PUT_UTF16(val, tmp, PUT_16BIT)\ {\ uint32_t in = val;\ if (in < 0x10000) {\ tmp = in;\ PUT_16BIT\ } else {\ tmp = 0xD800 | ((in - 0x10000) >> 10);\ PUT_16BIT\ tmp = 0xDC00 | ((in - 0x10000) & 0x3FF);\ PUT_16BIT\ }\ }\ #include "mem.h" #ifdef HAVE_AV_CONFIG_H # include "internal.h" #endif /* HAVE_AV_CONFIG_H */ #endif /* AVUTIL_COMMON_H */ /* * The following definitions are outside the multiple inclusion guard * to ensure they are immediately available in intmath.h. */ #ifndef av_ceil_log2 # define av_ceil_log2 av_ceil_log2_c #endif #ifndef av_clip # define av_clip av_clip_c #endif #ifndef av_clip64 # define av_clip64 av_clip64_c #endif #ifndef av_clip_uint8 # define av_clip_uint8 av_clip_uint8_c #endif #ifndef av_clip_int8 # define av_clip_int8 av_clip_int8_c #endif #ifndef av_clip_uint16 # define av_clip_uint16 av_clip_uint16_c #endif #ifndef av_clip_int16 # define av_clip_int16 av_clip_int16_c #endif #ifndef av_clipl_int32 # define av_clipl_int32 av_clipl_int32_c #endif #ifndef av_clip_intp2 # define av_clip_intp2 av_clip_intp2_c #endif #ifndef av_clip_uintp2 # define av_clip_uintp2 av_clip_uintp2_c #endif #ifndef av_mod_uintp2 # define av_mod_uintp2 av_mod_uintp2_c #endif #ifndef av_sat_add32 # define av_sat_add32 av_sat_add32_c #endif #ifndef av_sat_dadd32 # define av_sat_dadd32 av_sat_dadd32_c #endif #ifndef av_clipf # define av_clipf av_clipf_c #endif #ifndef av_clipd # define av_clipd av_clipd_c #endif #ifndef av_popcount # define av_popcount av_popcount_c #endif #ifndef av_popcount64 # define av_popcount64 av_popcount64_c #endif #ifndef av_parity # define av_parity av_parity_c #endif ================================================ FILE: 3rParty/FFmpeg/include/libavutil/cpu.h ================================================ /* * Copyright (c) 2000, 2001, 2002 Fabrice Bellard * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_CPU_H #define AVUTIL_CPU_H #include "attributes.h" #define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */ /* lower 16 bits - CPU features */ #define AV_CPU_FLAG_MMX 0x0001 ///< standard MMX #define AV_CPU_FLAG_MMXEXT 0x0002 ///< SSE integer functions or AMD MMX ext #define AV_CPU_FLAG_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext #define AV_CPU_FLAG_3DNOW 0x0004 ///< AMD 3DNOW #define AV_CPU_FLAG_SSE 0x0008 ///< SSE functions #define AV_CPU_FLAG_SSE2 0x0010 ///< PIV SSE2 functions #define AV_CPU_FLAG_SSE2SLOW 0x40000000 ///< SSE2 supported, but usually not faster ///< than regular MMX/SSE (e.g. Core1) #define AV_CPU_FLAG_3DNOWEXT 0x0020 ///< AMD 3DNowExt #define AV_CPU_FLAG_SSE3 0x0040 ///< Prescott SSE3 functions #define AV_CPU_FLAG_SSE3SLOW 0x20000000 ///< SSE3 supported, but usually not faster ///< than regular MMX/SSE (e.g. Core1) #define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions #define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower #define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions #define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions #define AV_CPU_FLAG_AESNI 0x80000 ///< Advanced Encryption Standard functions #define AV_CPU_FLAG_AVX 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used #define AV_CPU_FLAG_AVXSLOW 0x8000000 ///< AVX supported, but slow when using YMM registers (e.g. Bulldozer) #define AV_CPU_FLAG_XOP 0x0400 ///< Bulldozer XOP functions #define AV_CPU_FLAG_FMA4 0x0800 ///< Bulldozer FMA4 functions #define AV_CPU_FLAG_CMOV 0x1000 ///< supports cmov instruction #define AV_CPU_FLAG_AVX2 0x8000 ///< AVX2 functions: requires OS support even if YMM registers aren't used #define AV_CPU_FLAG_FMA3 0x10000 ///< Haswell FMA3 functions #define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 1 #define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 2 #define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard #define AV_CPU_FLAG_VSX 0x0002 ///< ISA 2.06 #define AV_CPU_FLAG_POWER8 0x0004 ///< ISA 2.07 #define AV_CPU_FLAG_ARMV5TE (1 << 0) #define AV_CPU_FLAG_ARMV6 (1 << 1) #define AV_CPU_FLAG_ARMV6T2 (1 << 2) #define AV_CPU_FLAG_VFP (1 << 3) #define AV_CPU_FLAG_VFPV3 (1 << 4) #define AV_CPU_FLAG_NEON (1 << 5) #define AV_CPU_FLAG_ARMV8 (1 << 6) #define AV_CPU_FLAG_VFP_VM (1 << 7) ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in various CPUs implementations #define AV_CPU_FLAG_SETEND (1 <<16) /** * Return the flags which specify extensions supported by the CPU. * The returned value is affected by av_force_cpu_flags() if that was used * before. So av_get_cpu_flags() can easily be used in an application to * detect the enabled cpu flags. */ int av_get_cpu_flags(void); /** * Disables cpu detection and forces the specified flags. * -1 is a special case that disables forcing of specific flags. */ void av_force_cpu_flags(int flags); /** * Set a mask on flags returned by av_get_cpu_flags(). * This function is mainly useful for testing. * Please use av_force_cpu_flags() and av_get_cpu_flags() instead which are more flexible * * @warning this function is not thread safe. */ attribute_deprecated void av_set_cpu_flags_mask(int mask); /** * Parse CPU flags from a string. * * The returned flags contain the specified flags as well as related unspecified flags. * * This function exists only for compatibility with libav. * Please use av_parse_cpu_caps() when possible. * @return a combination of AV_CPU_* flags, negative on error. */ attribute_deprecated int av_parse_cpu_flags(const char *s); /** * Parse CPU caps from a string and update the given AV_CPU_* flags based on that. * * @return negative on error. */ int av_parse_cpu_caps(unsigned *flags, const char *s); /** * @return the number of logical CPU cores present. */ int av_cpu_count(void); #endif /* AVUTIL_CPU_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/crc.h ================================================ /* * copyright (c) 2006 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * @ingroup lavu_crc32 * Public header for CRC hash function implementation. */ #ifndef AVUTIL_CRC_H #define AVUTIL_CRC_H #include #include #include "attributes.h" #include "version.h" /** * @defgroup lavu_crc32 CRC * @ingroup lavu_hash * CRC (Cyclic Redundancy Check) hash function implementation. * * This module supports numerous CRC polynomials, in addition to the most * widely used CRC-32-IEEE. See @ref AVCRCId for a list of available * polynomials. * * @{ */ typedef uint32_t AVCRC; typedef enum { AV_CRC_8_ATM, AV_CRC_16_ANSI, AV_CRC_16_CCITT, AV_CRC_32_IEEE, AV_CRC_32_IEEE_LE, /*< reversed bitorder version of AV_CRC_32_IEEE */ AV_CRC_16_ANSI_LE, /*< reversed bitorder version of AV_CRC_16_ANSI */ #if FF_API_CRC_BIG_TABLE AV_CRC_24_IEEE = 12, #else AV_CRC_24_IEEE, #endif /* FF_API_CRC_BIG_TABLE */ AV_CRC_MAX, /*< Not part of public API! Do not use outside libavutil. */ }AVCRCId; /** * Initialize a CRC table. * @param ctx must be an array of size sizeof(AVCRC)*257 or sizeof(AVCRC)*1024 * @param le If 1, the lowest bit represents the coefficient for the highest * exponent of the corresponding polynomial (both for poly and * actual CRC). * If 0, you must swap the CRC parameter and the result of av_crc * if you need the standard representation (can be simplified in * most cases to e.g. bswap16): * av_bswap32(crc << (32-bits)) * @param bits number of bits for the CRC * @param poly generator polynomial without the x**bits coefficient, in the * representation as specified by le * @param ctx_size size of ctx in bytes * @return <0 on failure */ int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size); /** * Get an initialized standard CRC table. * @param crc_id ID of a standard CRC * @return a pointer to the CRC table or NULL on failure */ const AVCRC *av_crc_get_table(AVCRCId crc_id); /** * Calculate the CRC of a block. * @param crc CRC of previous blocks if any or initial value for CRC * @return CRC updated with the data from the given block * * @see av_crc_init() "le" parameter */ uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length) av_pure; /** * @} */ #endif /* AVUTIL_CRC_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/des.h ================================================ /* * DES encryption/decryption * Copyright (c) 2007 Reimar Doeffinger * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_DES_H #define AVUTIL_DES_H #include /** * @defgroup lavu_des DES * @ingroup lavu_crypto * @{ */ typedef struct AVDES { uint64_t round_keys[3][16]; int triple_des; } AVDES; /** * Allocate an AVDES context. */ AVDES *av_des_alloc(void); /** * @brief Initializes an AVDES context. * * @param key_bits must be 64 or 192 * @param decrypt 0 for encryption/CBC-MAC, 1 for decryption * @return zero on success, negative value otherwise */ int av_des_init(struct AVDES *d, const uint8_t *key, int key_bits, int decrypt); /** * @brief Encrypts / decrypts using the DES algorithm. * * @param count number of 8 byte blocks * @param dst destination array, can be equal to src, must be 8-byte aligned * @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL * @param iv initialization vector for CBC mode, if NULL then ECB will be used, * must be 8-byte aligned * @param decrypt 0 for encryption, 1 for decryption */ void av_des_crypt(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); /** * @brief Calculates CBC-MAC using the DES algorithm. * * @param count number of 8 byte blocks * @param dst destination array, can be equal to src, must be 8-byte aligned * @param src source array, can be equal to dst, must be 8-byte aligned, may be NULL */ void av_des_mac(struct AVDES *d, uint8_t *dst, const uint8_t *src, int count); /** * @} */ #endif /* AVUTIL_DES_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/dict.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * Public dictionary API. * @deprecated * AVDictionary is provided for compatibility with libav. It is both in * implementation as well as API inefficient. It does not scale and is * extremely slow with large dictionaries. * It is recommended that new code uses our tree container from tree.c/h * where applicable, which uses AVL trees to achieve O(log n) performance. */ #ifndef AVUTIL_DICT_H #define AVUTIL_DICT_H #include #include "version.h" /** * @addtogroup lavu_dict AVDictionary * @ingroup lavu_data * * @brief Simple key:value store * * @{ * Dictionaries are used for storing key:value pairs. To create * an AVDictionary, simply pass an address of a NULL pointer to * av_dict_set(). NULL can be used as an empty dictionary wherever * a pointer to an AVDictionary is required. * Use av_dict_get() to retrieve an entry or iterate over all * entries and finally av_dict_free() to free the dictionary * and all its contents. * @code AVDictionary *d = NULL; // "create" an empty dictionary AVDictionaryEntry *t = NULL; av_dict_set(&d, "foo", "bar", 0); // add an entry char *k = av_strdup("key"); // if your strings are already allocated, char *v = av_strdup("value"); // you can avoid copying them like this av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL); while (t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX)) { <....> // iterate over all entries in d } av_dict_free(&d); @endcode */ #define AV_DICT_MATCH_CASE 1 /**< Only get an entry with exact-case key match. Only relevant in av_dict_get(). */ #define AV_DICT_IGNORE_SUFFIX 2 /**< Return first entry in a dictionary whose first part corresponds to the search key, ignoring the suffix of the found key string. Only relevant in av_dict_get(). */ #define AV_DICT_DONT_STRDUP_KEY 4 /**< Take ownership of a key that's been allocated with av_malloc() or another memory allocation function. */ #define AV_DICT_DONT_STRDUP_VAL 8 /**< Take ownership of a value that's been allocated with av_malloc() or another memory allocation function. */ #define AV_DICT_DONT_OVERWRITE 16 ///< Don't overwrite existing entries. #define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no delimiter is added, the strings are simply concatenated. */ #define AV_DICT_MULTIKEY 64 /**< Allow to store several equal keys in the dictionary */ typedef struct AVDictionaryEntry { char *key; char *value; } AVDictionaryEntry; typedef struct AVDictionary AVDictionary; /** * Get a dictionary entry with matching key. * * The returned entry key or value must not be changed, or it will * cause undefined behavior. * * To iterate through all the dictionary entries, you can set the matching key * to the null string "" and set the AV_DICT_IGNORE_SUFFIX flag. * * @param prev Set to the previous matching element to find the next. * If set to NULL the first matching element is returned. * @param key matching key * @param flags a collection of AV_DICT_* flags controlling how the entry is retrieved * @return found entry or NULL in case no matching entry was found in the dictionary */ AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags); /** * Get number of entries in dictionary. * * @param m dictionary * @return number of entries in dictionary */ int av_dict_count(const AVDictionary *m); /** * Set the given entry in *pm, overwriting an existing entry. * * Note: If AV_DICT_DONT_STRDUP_KEY or AV_DICT_DONT_STRDUP_VAL is set, * these arguments will be freed on error. * * Warning: Adding a new entry to a dictionary invalidates all existing entries * previously returned with av_dict_get. * * @param pm pointer to a pointer to a dictionary struct. If *pm is NULL * a dictionary struct is allocated and put in *pm. * @param key entry key to add to *pm (will either be av_strduped or added as a new key depending on flags) * @param value entry value to add to *pm (will be av_strduped or added as a new key depending on flags). * Passing a NULL value will cause an existing entry to be deleted. * @return >= 0 on success otherwise an error code <0 */ int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags); /** * Convenience wrapper for av_dict_set that converts the value to a string * and stores it. * * Note: If AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error. */ int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags); /** * Parse the key/value pairs list and add the parsed entries to a dictionary. * * In case of failure, all the successfully set entries are stored in * *pm. You may need to manually free the created dictionary. * * @param key_val_sep a 0-terminated list of characters used to separate * key from value * @param pairs_sep a 0-terminated list of characters used to separate * two pairs from each other * @param flags flags to use when adding to dictionary. * AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL * are ignored since the key/value tokens will always * be duplicated. * @return 0 on success, negative AVERROR code on failure */ int av_dict_parse_string(AVDictionary **pm, const char *str, const char *key_val_sep, const char *pairs_sep, int flags); /** * Copy entries from one AVDictionary struct into another. * @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL, * this function will allocate a struct for you and put it in *dst * @param src pointer to source AVDictionary struct * @param flags flags to use when setting entries in *dst * @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag * @return 0 on success, negative AVERROR code on failure. If dst was allocated * by this function, callers should free the associated memory. */ int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags); /** * Free all the memory allocated for an AVDictionary struct * and all keys and values. */ void av_dict_free(AVDictionary **m); /** * Get dictionary entries as a string. * * Create a string containing dictionary's entries. * Such string may be passed back to av_dict_parse_string(). * @note String is escaped with backslashes ('\'). * * @param[in] m dictionary * @param[out] buffer Pointer to buffer that will be allocated with string containg entries. * Buffer must be freed by the caller when is no longer needed. * @param[in] key_val_sep character used to separate key from value * @param[in] pairs_sep character used to separate two pairs from each other * @return >= 0 on success, negative on error * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. */ int av_dict_get_string(const AVDictionary *m, char **buffer, const char key_val_sep, const char pairs_sep); /** * @} */ #endif /* AVUTIL_DICT_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/display.h ================================================ /* * Copyright (c) 2014 Vittorio Giovara * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_DISPLAY_H #define AVUTIL_DISPLAY_H #include #include "common.h" /** * The display transformation matrix specifies an affine transformation that * should be applied to video frames for correct presentation. It is compatible * with the matrices stored in the ISO/IEC 14496-12 container format. * * The data is a 3x3 matrix represented as a 9-element array: * * | a b u | * (a, b, u, c, d, v, x, y, w) -> | c d v | * | x y w | * * All numbers are stored in native endianness, as 16.16 fixed-point values, * except for u, v and w, which are stored as 2.30 fixed-point values. * * The transformation maps a point (p, q) in the source (pre-transformation) * frame to the point (p', q') in the destination (post-transformation) frame as * follows: * | a b u | * (p, q, 1) . | c d v | = z * (p', q', 1) * | x y w | * * The transformation can also be more explicitly written in components as * follows: * p' = (a * p + c * q + x) / z; * q' = (b * p + d * q + y) / z; * z = u * p + v * q + w */ /** * Extract the rotation component of the transformation matrix. * * @param matrix the transformation matrix * @return the angle (in degrees) by which the transformation rotates the frame * counterclockwise. The angle will be in range [-180.0, 180.0], * or NaN if the matrix is singular. * * @note floating point numbers are inherently inexact, so callers are * recommended to round the return value to nearest integer before use. */ double av_display_rotation_get(const int32_t matrix[9]); /** * Initialize a transformation matrix describing a pure counterclockwise * rotation by the specified angle (in degrees). * * @param matrix an allocated transformation matrix (will be fully overwritten * by this function) * @param angle rotation angle in degrees. */ void av_display_rotation_set(int32_t matrix[9], double angle); /** * Flip the input matrix horizontally and/or vertically. * * @param matrix an allocated transformation matrix * @param hflip whether the matrix should be flipped horizontally * @param vflip whether the matrix should be flipped vertically */ void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip); #endif /* AVUTIL_DISPLAY_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/downmix_info.h ================================================ /* * Copyright (c) 2014 Tim Walker * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_DOWNMIX_INFO_H #define AVUTIL_DOWNMIX_INFO_H #include "frame.h" /** * @file * audio downmix medatata */ /** * @addtogroup lavu_audio * @{ */ /** * @defgroup downmix_info Audio downmix metadata * @{ */ /** * Possible downmix types. */ enum AVDownmixType { AV_DOWNMIX_TYPE_UNKNOWN, /**< Not indicated. */ AV_DOWNMIX_TYPE_LORO, /**< Lo/Ro 2-channel downmix (Stereo). */ AV_DOWNMIX_TYPE_LTRT, /**< Lt/Rt 2-channel downmix, Dolby Surround compatible. */ AV_DOWNMIX_TYPE_DPLII, /**< Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible. */ AV_DOWNMIX_TYPE_NB /**< Number of downmix types. Not part of ABI. */ }; /** * This structure describes optional metadata relevant to a downmix procedure. * * All fields are set by the decoder to the value indicated in the audio * bitstream (if present), or to a "sane" default otherwise. */ typedef struct AVDownmixInfo { /** * Type of downmix preferred by the mastering engineer. */ enum AVDownmixType preferred_downmix_type; /** * Absolute scale factor representing the nominal level of the center * channel during a regular downmix. */ double center_mix_level; /** * Absolute scale factor representing the nominal level of the center * channel during an Lt/Rt compatible downmix. */ double center_mix_level_ltrt; /** * Absolute scale factor representing the nominal level of the surround * channels during a regular downmix. */ double surround_mix_level; /** * Absolute scale factor representing the nominal level of the surround * channels during an Lt/Rt compatible downmix. */ double surround_mix_level_ltrt; /** * Absolute scale factor representing the level at which the LFE data is * mixed into L/R channels during downmixing. */ double lfe_mix_level; } AVDownmixInfo; /** * Get a frame's AV_FRAME_DATA_DOWNMIX_INFO side data for editing. * * If the side data is absent, it is created and added to the frame. * * @param frame the frame for which the side data is to be obtained or created * * @return the AVDownmixInfo structure to be edited by the caller, or NULL if * the structure cannot be allocated. */ AVDownmixInfo *av_downmix_info_update_side_data(AVFrame *frame); /** * @} */ /** * @} */ #endif /* AVUTIL_DOWNMIX_INFO_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/error.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * error code definitions */ #ifndef AVUTIL_ERROR_H #define AVUTIL_ERROR_H #include #include /** * @addtogroup lavu_error * * @{ */ /* error handling */ #if EDOM > 0 #define AVERROR(e) (-(e)) ///< Returns a negative error code from a POSIX error code, to return from library functions. #define AVUNERROR(e) (-(e)) ///< Returns a POSIX error code from a library function error return value. #else /* Some platforms have E* and errno already negated. */ #define AVERROR(e) (e) #define AVUNERROR(e) (e) #endif #define FFERRTAG(a, b, c, d) (-(int)MKTAG(a, b, c, d)) #define AVERROR_BSF_NOT_FOUND FFERRTAG(0xF8,'B','S','F') ///< Bitstream filter not found #define AVERROR_BUG FFERRTAG( 'B','U','G','!') ///< Internal bug, also see AVERROR_BUG2 #define AVERROR_BUFFER_TOO_SMALL FFERRTAG( 'B','U','F','S') ///< Buffer too small #define AVERROR_DECODER_NOT_FOUND FFERRTAG(0xF8,'D','E','C') ///< Decoder not found #define AVERROR_DEMUXER_NOT_FOUND FFERRTAG(0xF8,'D','E','M') ///< Demuxer not found #define AVERROR_ENCODER_NOT_FOUND FFERRTAG(0xF8,'E','N','C') ///< Encoder not found #define AVERROR_EOF FFERRTAG( 'E','O','F',' ') ///< End of file #define AVERROR_EXIT FFERRTAG( 'E','X','I','T') ///< Immediate exit was requested; the called function should not be restarted #define AVERROR_EXTERNAL FFERRTAG( 'E','X','T',' ') ///< Generic error in an external library #define AVERROR_FILTER_NOT_FOUND FFERRTAG(0xF8,'F','I','L') ///< Filter not found #define AVERROR_INVALIDDATA FFERRTAG( 'I','N','D','A') ///< Invalid data found when processing input #define AVERROR_MUXER_NOT_FOUND FFERRTAG(0xF8,'M','U','X') ///< Muxer not found #define AVERROR_OPTION_NOT_FOUND FFERRTAG(0xF8,'O','P','T') ///< Option not found #define AVERROR_PATCHWELCOME FFERRTAG( 'P','A','W','E') ///< Not yet implemented in FFmpeg, patches welcome #define AVERROR_PROTOCOL_NOT_FOUND FFERRTAG(0xF8,'P','R','O') ///< Protocol not found #define AVERROR_STREAM_NOT_FOUND FFERRTAG(0xF8,'S','T','R') ///< Stream not found /** * This is semantically identical to AVERROR_BUG * it has been introduced in Libav after our AVERROR_BUG and with a modified value. */ #define AVERROR_BUG2 FFERRTAG( 'B','U','G',' ') #define AVERROR_UNKNOWN FFERRTAG( 'U','N','K','N') ///< Unknown error, typically from an external library #define AVERROR_EXPERIMENTAL (-0x2bb2afa8) ///< Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it. #define AVERROR_INPUT_CHANGED (-0x636e6701) ///< Input changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_OUTPUT_CHANGED) #define AVERROR_OUTPUT_CHANGED (-0x636e6702) ///< Output changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_INPUT_CHANGED) /* HTTP & RTSP errors */ #define AVERROR_HTTP_BAD_REQUEST FFERRTAG(0xF8,'4','0','0') #define AVERROR_HTTP_UNAUTHORIZED FFERRTAG(0xF8,'4','0','1') #define AVERROR_HTTP_FORBIDDEN FFERRTAG(0xF8,'4','0','3') #define AVERROR_HTTP_NOT_FOUND FFERRTAG(0xF8,'4','0','4') #define AVERROR_HTTP_OTHER_4XX FFERRTAG(0xF8,'4','X','X') #define AVERROR_HTTP_SERVER_ERROR FFERRTAG(0xF8,'5','X','X') #define AV_ERROR_MAX_STRING_SIZE 64 /** * Put a description of the AVERROR code errnum in errbuf. * In case of failure the global variable errno is set to indicate the * error. Even in case of failure av_strerror() will print a generic * error message indicating the errnum provided to errbuf. * * @param errnum error code to describe * @param errbuf buffer to which description is written * @param errbuf_size the size in bytes of errbuf * @return 0 on success, a negative value if a description for errnum * cannot be found */ int av_strerror(int errnum, char *errbuf, size_t errbuf_size); /** * Fill the provided buffer with a string containing an error string * corresponding to the AVERROR code errnum. * * @param errbuf a buffer * @param errbuf_size size in bytes of errbuf * @param errnum error code to describe * @return the buffer in input, filled with the error description * @see av_strerror() */ static inline char *av_make_error_string(char *errbuf, size_t errbuf_size, int errnum) { av_strerror(errnum, errbuf, errbuf_size); return errbuf; } /** * Convenience macro, the return value should be used only directly in * function arguments but never stand-alone. */ #define av_err2str(errnum) \ av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum) /** * @} */ #endif /* AVUTIL_ERROR_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/eval.h ================================================ /* * Copyright (c) 2002 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * simple arithmetic expression evaluator */ #ifndef AVUTIL_EVAL_H #define AVUTIL_EVAL_H #include "avutil.h" typedef struct AVExpr AVExpr; /** * Parse and evaluate an expression. * Note, this is significantly slower than av_expr_eval(). * * @param res a pointer to a double where is put the result value of * the expression, or NAN in case of error * @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)" * @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0} * @param const_values a zero terminated array of values for the identifiers from const_names * @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 * @param log_ctx parent logging context * @return >= 0 in case of success, a negative value corresponding to an * AVERROR code otherwise */ int av_expr_parse_and_eval(double *res, const char *s, const char * const *const_names, const double *const_values, const char * const *func1_names, double (* const *funcs1)(void *, double), const char * const *func2_names, double (* const *funcs2)(void *, double, double), void *opaque, int log_offset, void *log_ctx); /** * Parse an expression. * * @param expr a pointer where is put an AVExpr containing the parsed * value in case of successful parsing, or NULL otherwise. * The pointed to AVExpr must be freed with av_expr_free() by the user * when it is not needed anymore. * @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)" * @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0} * @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments * @param log_ctx parent logging context * @return >= 0 in case of success, a negative value corresponding to an * AVERROR code otherwise */ int av_expr_parse(AVExpr **expr, const char *s, const char * const *const_names, const char * const *func1_names, double (* const *funcs1)(void *, double), const char * const *func2_names, double (* const *funcs2)(void *, double, double), int log_offset, void *log_ctx); /** * Evaluate a previously parsed expression. * * @param const_values a zero terminated array of values for the identifiers from av_expr_parse() const_names * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 * @return the value of the expression */ double av_expr_eval(AVExpr *e, const double *const_values, void *opaque); /** * Free a parsed expression previously created with av_expr_parse(). */ void av_expr_free(AVExpr *e); /** * Parse the string in numstr and return its value as a double. If * the string is empty, contains only whitespaces, or does not contain * an initial substring that has the expected syntax for a * floating-point number, no conversion is performed. In this case, * returns a value of zero and the value returned in tail is the value * of numstr. * * @param numstr a string representing a number, may contain one of * the International System number postfixes, for example 'K', 'M', * 'G'. If 'i' is appended after the postfix, powers of 2 are used * instead of powers of 10. The 'B' postfix multiplies the value by * 8, and can be appended after another postfix or used alone. This * allows using for example 'KB', 'MiB', 'G' and 'B' as postfix. * @param tail if non-NULL puts here the pointer to the char next * after the last parsed character */ double av_strtod(const char *numstr, char **tail); #endif /* AVUTIL_EVAL_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/ffversion.h ================================================ /* * ffversion.h * * Copyright (c) 2013 Bilibili * Copyright (c) 2013 Zhang Rui * * This file is part of ijkPlayer. * * ijkPlayer 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. * * ijkPlayer 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 ijkPlayer; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #if defined(__aarch64__) # include "arm64/ffversion.h" #elif defined(__x86_64__) # include "x86_64/ffversion.h" #elif defined(__arm__) # if defined(__ARM_ARCH_7S__) # include "armv7s/ffversion.h" # elif defined(__ARM_ARCH_7__) # include "armv7/ffversion.h" # else # error Unsupport ARM architecture # endif #elif defined(__i386__) # include "i386/ffversion.h" #else # error Unsupport architecture #endif ================================================ FILE: 3rParty/FFmpeg/include/libavutil/fifo.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * a very simple circular buffer FIFO implementation */ #ifndef AVUTIL_FIFO_H #define AVUTIL_FIFO_H #include #include "avutil.h" #include "attributes.h" typedef struct AVFifoBuffer { uint8_t *buffer; uint8_t *rptr, *wptr, *end; uint32_t rndx, wndx; } AVFifoBuffer; /** * Initialize an AVFifoBuffer. * @param size of FIFO * @return AVFifoBuffer or NULL in case of memory allocation failure */ AVFifoBuffer *av_fifo_alloc(unsigned int size); /** * Initialize an AVFifoBuffer. * @param nmemb number of elements * @param size size of the single element * @return AVFifoBuffer or NULL in case of memory allocation failure */ AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size); /** * Free an AVFifoBuffer. * @param f AVFifoBuffer to free */ void av_fifo_free(AVFifoBuffer *f); /** * Free an AVFifoBuffer and reset pointer to NULL. * @param f AVFifoBuffer to free */ void av_fifo_freep(AVFifoBuffer **f); /** * Reset the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied. * @param f AVFifoBuffer to reset */ void av_fifo_reset(AVFifoBuffer *f); /** * Return the amount of data in bytes in the AVFifoBuffer, that is the * amount of data you can read from it. * @param f AVFifoBuffer to read from * @return size */ int av_fifo_size(const AVFifoBuffer *f); /** * Return the amount of space in bytes in the AVFifoBuffer, that is the * amount of data you can write into it. * @param f AVFifoBuffer to write into * @return size */ int av_fifo_space(const AVFifoBuffer *f); /** * Feed data at specific position from an AVFifoBuffer to a user-supplied callback. * Similar as av_fifo_gereric_read but without discarding data. * @param f AVFifoBuffer to read from * @param offset offset from current read position * @param buf_size number of bytes to read * @param func generic read function * @param dest data destination */ int av_fifo_generic_peek_at(AVFifoBuffer *f, void *dest, int offset, int buf_size, void (*func)(void*, void*, int)); /** * Feed data from an AVFifoBuffer to a user-supplied callback. * Similar as av_fifo_gereric_read but without discarding data. * @param f AVFifoBuffer to read from * @param buf_size number of bytes to read * @param func generic read function * @param dest data destination */ int av_fifo_generic_peek(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); /** * Feed data from an AVFifoBuffer to a user-supplied callback. * @param f AVFifoBuffer to read from * @param buf_size number of bytes to read * @param func generic read function * @param dest data destination */ int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); /** * Feed data from a user-supplied callback to an AVFifoBuffer. * @param f AVFifoBuffer to write to * @param src data source; non-const since it may be used as a * modifiable context by the function defined in func * @param size number of bytes to write * @param func generic write function; the first parameter is src, * the second is dest_buf, the third is dest_buf_size. * func must return the number of bytes written to dest_buf, or <= 0 to * indicate no more data available to write. * If func is NULL, src is interpreted as a simple byte array for source data. * @return the number of bytes written to the FIFO */ int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int)); /** * Resize an AVFifoBuffer. * In case of reallocation failure, the old FIFO is kept unchanged. * * @param f AVFifoBuffer to resize * @param size new AVFifoBuffer size in bytes * @return <0 for failure, >=0 otherwise */ int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size); /** * Enlarge an AVFifoBuffer. * In case of reallocation failure, the old FIFO is kept unchanged. * The new fifo size may be larger than the requested size. * * @param f AVFifoBuffer to resize * @param additional_space the amount of space in bytes to allocate in addition to av_fifo_size() * @return <0 for failure, >=0 otherwise */ int av_fifo_grow(AVFifoBuffer *f, unsigned int additional_space); /** * Read and discard the specified amount of data from an AVFifoBuffer. * @param f AVFifoBuffer to read from * @param size amount of data to read in bytes */ void av_fifo_drain(AVFifoBuffer *f, int size); /** * Return a pointer to the data stored in a FIFO buffer at a certain offset. * The FIFO buffer is not modified. * * @param f AVFifoBuffer to peek at, f must be non-NULL * @param offs an offset in bytes, its absolute value must be less * than the used buffer size or the returned pointer will * point outside to the buffer data. * The used buffer size can be checked with av_fifo_size(). */ static inline uint8_t *av_fifo_peek2(const AVFifoBuffer *f, int offs) { uint8_t *ptr = f->rptr + offs; if (ptr >= f->end) ptr = f->buffer + (ptr - f->end); else if (ptr < f->buffer) ptr = f->end - (f->buffer - ptr); return ptr; } #endif /* AVUTIL_FIFO_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/file.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_FILE_H #define AVUTIL_FILE_H #include #include "avutil.h" /** * @file * Misc file utilities. */ /** * Read the file with name filename, and put its content in a newly * allocated buffer or map it with mmap() when available. * In case of success set *bufptr to the read or mmapped buffer, and * *size to the size in bytes of the buffer in *bufptr. * The returned buffer must be released with av_file_unmap(). * * @param log_offset loglevel offset used for logging * @param log_ctx context used for logging * @return a non negative number in case of success, a negative value * corresponding to an AVERROR error code in case of failure */ av_warn_unused_result int av_file_map(const char *filename, uint8_t **bufptr, size_t *size, int log_offset, void *log_ctx); /** * Unmap or free the buffer bufptr created by av_file_map(). * * @param size size in bytes of bufptr, must be the same as returned * by av_file_map() */ void av_file_unmap(uint8_t *bufptr, size_t size); /** * Wrapper to work around the lack of mkstemp() on mingw. * Also, tries to create file in /tmp first, if possible. * *prefix can be a character constant; *filename will be allocated internally. * @return file descriptor of opened file (or negative value corresponding to an * AVERROR code on error) * and opened file name in **filename. * @note On very old libcs it is necessary to set a secure umask before * calling this, av_tempfile() can't call umask itself as it is used in * libraries and could interfere with the calling application. * @deprecated as fd numbers cannot be passed saftely between libs on some platforms */ int av_tempfile(const char *prefix, char **filename, int log_offset, void *log_ctx); #endif /* AVUTIL_FILE_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/frame.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * @ingroup lavu_frame * reference-counted frame API */ #ifndef AVUTIL_FRAME_H #define AVUTIL_FRAME_H #include #include "avutil.h" #include "buffer.h" #include "dict.h" #include "rational.h" #include "samplefmt.h" #include "pixfmt.h" #include "version.h" /** * @defgroup lavu_frame AVFrame * @ingroup lavu_data * * @{ * AVFrame is an abstraction for reference-counted raw multimedia data. */ enum AVFrameSideDataType { /** * The data is the AVPanScan struct defined in libavcodec. */ AV_FRAME_DATA_PANSCAN, /** * ATSC A53 Part 4 Closed Captions. * A53 CC bitstream is stored as uint8_t in AVFrameSideData.data. * The number of bytes of CC data is AVFrameSideData.size. */ AV_FRAME_DATA_A53_CC, /** * Stereoscopic 3d metadata. * The data is the AVStereo3D struct defined in libavutil/stereo3d.h. */ AV_FRAME_DATA_STEREO3D, /** * The data is the AVMatrixEncoding enum defined in libavutil/channel_layout.h. */ AV_FRAME_DATA_MATRIXENCODING, /** * Metadata relevant to a downmix procedure. * The data is the AVDownmixInfo struct defined in libavutil/downmix_info.h. */ AV_FRAME_DATA_DOWNMIX_INFO, /** * ReplayGain information in the form of the AVReplayGain struct. */ AV_FRAME_DATA_REPLAYGAIN, /** * This side data contains a 3x3 transformation matrix describing an affine * transformation that needs to be applied to the frame for correct * presentation. * * See libavutil/display.h for a detailed description of the data. */ AV_FRAME_DATA_DISPLAYMATRIX, /** * Active Format Description data consisting of a single byte as specified * in ETSI TS 101 154 using AVActiveFormatDescription enum. */ AV_FRAME_DATA_AFD, /** * Motion vectors exported by some codecs (on demand through the export_mvs * flag set in the libavcodec AVCodecContext flags2 option). * The data is the AVMotionVector struct defined in * libavutil/motion_vector.h. */ AV_FRAME_DATA_MOTION_VECTORS, /** * Recommmends skipping the specified number of samples. This is exported * only if the "skip_manual" AVOption is set in libavcodec. * This has the same format as AV_PKT_DATA_SKIP_SAMPLES. * @code * u32le number of samples to skip from start of this packet * u32le number of samples to skip from end of this packet * u8 reason for start skip * u8 reason for end skip (0=padding silence, 1=convergence) * @endcode */ AV_FRAME_DATA_SKIP_SAMPLES, /** * This side data must be associated with an audio frame and corresponds to * enum AVAudioServiceType defined in avcodec.h. */ AV_FRAME_DATA_AUDIO_SERVICE_TYPE, /** * Mastering display metadata associated with a video frame. The payload is * an AVMasteringDisplayMetadata type and contains information about the * mastering display color volume. */ AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, /** * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer. * This is set on the first frame of a GOP that has a temporal reference of 0. */ AV_FRAME_DATA_GOP_TIMECODE }; enum AVActiveFormatDescription { AV_AFD_SAME = 8, AV_AFD_4_3 = 9, AV_AFD_16_9 = 10, AV_AFD_14_9 = 11, AV_AFD_4_3_SP_14_9 = 13, AV_AFD_16_9_SP_14_9 = 14, AV_AFD_SP_4_3 = 15, }; /** * Structure to hold side data for an AVFrame. * * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be added * to the end with a minor bump. */ typedef struct AVFrameSideData { enum AVFrameSideDataType type; uint8_t *data; int size; AVDictionary *metadata; AVBufferRef *buf; } AVFrameSideData; /** * This structure describes decoded (raw) audio or video data. * * AVFrame must be allocated using av_frame_alloc(). Note that this only * allocates the AVFrame itself, the buffers for the data must be managed * through other means (see below). * AVFrame must be freed with av_frame_free(). * * AVFrame is typically allocated once and then reused multiple times to hold * different data (e.g. a single AVFrame to hold frames received from a * decoder). In such a case, av_frame_unref() will free any references held by * the frame and reset it to its original clean state before it * is reused again. * * The data described by an AVFrame is usually reference counted through the * AVBuffer API. The underlying buffer references are stored in AVFrame.buf / * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case, * every single data plane must be contained in one of the buffers in * AVFrame.buf or AVFrame.extended_buf. * There may be a single buffer for all the data, or one separate buffer for * each plane, or anything in between. * * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added * to the end with a minor bump. * Similarly fields that are marked as to be only accessed by * av_opt_ptr() can be reordered. This allows 2 forks to add fields * without breaking compatibility with each other. * * Fields can be accessed through AVOptions, the name string used, matches the * C structure field name for fields accessible through AVOptions. The AVClass * for AVFrame can be obtained from avcodec_get_frame_class() */ typedef struct AVFrame { #define AV_NUM_DATA_POINTERS 8 /** * pointer to the picture/channel planes. * This might be different from the first allocated byte * * Some decoders access areas outside 0,0 - width,height, please * see avcodec_align_dimensions2(). Some filters and swscale can read * up to 16 bytes beyond the planes, if these filters are to be used, * then 16 extra bytes must be allocated. * * NOTE: Except for hwaccel formats, pointers not needed by the format * MUST be set to NULL. */ uint8_t *data[AV_NUM_DATA_POINTERS]; /** * For video, size in bytes of each picture line. * For audio, size in bytes of each plane. * * For audio, only linesize[0] may be set. For planar audio, each channel * plane must be the same size. * * For video the linesizes should be multiples of the CPUs alignment * preference, this is 16 or 32 for modern desktop CPUs. * Some code requires such alignment other code can be slower without * correct alignment, for yet other it makes no difference. * * @note The linesize may be larger than the size of usable data -- there * may be extra padding present for performance reasons. */ int linesize[AV_NUM_DATA_POINTERS]; /** * pointers to the data planes/channels. * * For video, this should simply point to data[]. * * For planar audio, each channel has a separate data pointer, and * linesize[0] contains the size of each channel buffer. * For packed audio, there is just one data pointer, and linesize[0] * contains the total size of the buffer for all channels. * * Note: Both data and extended_data should always be set in a valid frame, * but for planar audio with more channels that can fit in data, * extended_data must be used in order to access all channels. */ uint8_t **extended_data; /** * width and height of the video frame */ int width, height; /** * number of audio samples (per channel) described by this frame */ int nb_samples; /** * format of the frame, -1 if unknown or unset * Values correspond to enum AVPixelFormat for video frames, * enum AVSampleFormat for audio) */ int format; /** * 1 -> keyframe, 0-> not */ int key_frame; /** * Picture type of the frame. */ enum AVPictureType pict_type; /** * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified. */ AVRational sample_aspect_ratio; /** * Presentation timestamp in time_base units (time when frame should be shown to user). */ int64_t pts; #if FF_API_PKT_PTS /** * PTS copied from the AVPacket that was decoded to produce this frame. * @deprecated use the pts field instead */ attribute_deprecated int64_t pkt_pts; #endif /** * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used) * This is also the Presentation time of this AVFrame calculated from * only AVPacket.dts values without pts values. */ int64_t pkt_dts; /** * picture number in bitstream order */ int coded_picture_number; /** * picture number in display order */ int display_picture_number; /** * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) */ int quality; /** * for some private data of the user */ void *opaque; #if FF_API_ERROR_FRAME /** * @deprecated unused */ attribute_deprecated uint64_t error[AV_NUM_DATA_POINTERS]; #endif /** * When decoding, this signals how much the picture must be delayed. * extra_delay = repeat_pict / (2*fps) */ int repeat_pict; /** * The content of the picture is interlaced. */ int interlaced_frame; /** * If the content is interlaced, is top field displayed first. */ int top_field_first; /** * Tell user application that palette has changed from previous frame. */ int palette_has_changed; /** * reordered opaque 64 bits (generally an integer or a double precision float * PTS but can be anything). * The user sets AVCodecContext.reordered_opaque to represent the input at * that time, * the decoder reorders values as needed and sets AVFrame.reordered_opaque * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque * @deprecated in favor of pkt_pts */ int64_t reordered_opaque; /** * Sample rate of the audio data. */ int sample_rate; /** * Channel layout of the audio data. */ uint64_t channel_layout; /** * AVBuffer references backing the data for this frame. If all elements of * this array are NULL, then this frame is not reference counted. This array * must be filled contiguously -- if buf[i] is non-NULL then buf[j] must * also be non-NULL for all j < i. * * There may be at most one AVBuffer per data plane, so for video this array * always contains all the references. For planar audio with more than * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in * this array. Then the extra AVBufferRef pointers are stored in the * extended_buf array. */ AVBufferRef *buf[AV_NUM_DATA_POINTERS]; /** * For planar audio which requires more than AV_NUM_DATA_POINTERS * AVBufferRef pointers, this array will hold all the references which * cannot fit into AVFrame.buf. * * Note that this is different from AVFrame.extended_data, which always * contains all the pointers. This array only contains the extra pointers, * which cannot fit into AVFrame.buf. * * This array is always allocated using av_malloc() by whoever constructs * the frame. It is freed in av_frame_unref(). */ AVBufferRef **extended_buf; /** * Number of elements in extended_buf. */ int nb_extended_buf; AVFrameSideData **side_data; int nb_side_data; /** * @defgroup lavu_frame_flags AV_FRAME_FLAGS * @ingroup lavu_frame * Flags describing additional frame properties. * * @{ */ /** * The frame data may be corrupted, e.g. due to decoding errors. */ #define AV_FRAME_FLAG_CORRUPT (1 << 0) /** * A flag to mark the frames which need to be decoded, but shouldn't be output. */ #define AV_FRAME_FLAG_DISCARD (1 << 2) /** * @} */ /** * Frame flags, a combination of @ref lavu_frame_flags */ int flags; /** * MPEG vs JPEG YUV range. * It must be accessed using av_frame_get_color_range() and * av_frame_set_color_range(). * - encoding: Set by user * - decoding: Set by libavcodec */ enum AVColorRange color_range; enum AVColorPrimaries color_primaries; enum AVColorTransferCharacteristic color_trc; /** * YUV colorspace type. * It must be accessed using av_frame_get_colorspace() and * av_frame_set_colorspace(). * - encoding: Set by user * - decoding: Set by libavcodec */ enum AVColorSpace colorspace; enum AVChromaLocation chroma_location; /** * frame timestamp estimated using various heuristics, in stream time base * Code outside libavutil should access this field using: * av_frame_get_best_effort_timestamp(frame) * - encoding: unused * - decoding: set by libavcodec, read by user. */ int64_t best_effort_timestamp; /** * reordered pos from the last AVPacket that has been input into the decoder * Code outside libavutil should access this field using: * av_frame_get_pkt_pos(frame) * - encoding: unused * - decoding: Read by user. */ int64_t pkt_pos; /** * duration of the corresponding packet, expressed in * AVStream->time_base units, 0 if unknown. * Code outside libavutil should access this field using: * av_frame_get_pkt_duration(frame) * - encoding: unused * - decoding: Read by user. */ int64_t pkt_duration; /** * metadata. * Code outside libavutil should access this field using: * av_frame_get_metadata(frame) * - encoding: Set by user. * - decoding: Set by libavcodec. */ AVDictionary *metadata; /** * decode error flags of the frame, set to a combination of * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there * were errors during the decoding. * Code outside libavutil should access this field using: * av_frame_get_decode_error_flags(frame) * - encoding: unused * - decoding: set by libavcodec, read by user. */ int decode_error_flags; #define FF_DECODE_ERROR_INVALID_BITSTREAM 1 #define FF_DECODE_ERROR_MISSING_REFERENCE 2 /** * number of audio channels, only used for audio. * Code outside libavutil should access this field using: * av_frame_get_channels(frame) * - encoding: unused * - decoding: Read by user. */ int channels; /** * size of the corresponding packet containing the compressed * frame. It must be accessed using av_frame_get_pkt_size() and * av_frame_set_pkt_size(). * It is set to a negative value if unknown. * - encoding: unused * - decoding: set by libavcodec, read by user. */ int pkt_size; #if FF_API_FRAME_QP /** * QP table * Not to be accessed directly from outside libavutil */ attribute_deprecated int8_t *qscale_table; /** * QP store stride * Not to be accessed directly from outside libavutil */ attribute_deprecated int qstride; attribute_deprecated int qscale_type; /** * Not to be accessed directly from outside libavutil */ AVBufferRef *qp_table_buf; #endif /** * For hwaccel-format frames, this should be a reference to the * AVHWFramesContext describing the frame. */ AVBufferRef *hw_frames_ctx; } AVFrame; /** * Accessors for some AVFrame fields. * The position of these field in the structure is not part of the ABI, * they should not be accessed directly outside libavutil. */ int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame); void av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val); int64_t av_frame_get_pkt_duration (const AVFrame *frame); void av_frame_set_pkt_duration (AVFrame *frame, int64_t val); int64_t av_frame_get_pkt_pos (const AVFrame *frame); void av_frame_set_pkt_pos (AVFrame *frame, int64_t val); int64_t av_frame_get_channel_layout (const AVFrame *frame); void av_frame_set_channel_layout (AVFrame *frame, int64_t val); int av_frame_get_channels (const AVFrame *frame); void av_frame_set_channels (AVFrame *frame, int val); int av_frame_get_sample_rate (const AVFrame *frame); void av_frame_set_sample_rate (AVFrame *frame, int val); AVDictionary *av_frame_get_metadata (const AVFrame *frame); void av_frame_set_metadata (AVFrame *frame, AVDictionary *val); int av_frame_get_decode_error_flags (const AVFrame *frame); void av_frame_set_decode_error_flags (AVFrame *frame, int val); int av_frame_get_pkt_size(const AVFrame *frame); void av_frame_set_pkt_size(AVFrame *frame, int val); AVDictionary **avpriv_frame_get_metadatap(AVFrame *frame); #if FF_API_FRAME_QP int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type); int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int type); #endif enum AVColorSpace av_frame_get_colorspace(const AVFrame *frame); void av_frame_set_colorspace(AVFrame *frame, enum AVColorSpace val); enum AVColorRange av_frame_get_color_range(const AVFrame *frame); void av_frame_set_color_range(AVFrame *frame, enum AVColorRange val); /** * Get the name of a colorspace. * @return a static string identifying the colorspace; can be NULL. */ const char *av_get_colorspace_name(enum AVColorSpace val); /** * Allocate an AVFrame and set its fields to default values. The resulting * struct must be freed using av_frame_free(). * * @return An AVFrame filled with default values or NULL on failure. * * @note this only allocates the AVFrame itself, not the data buffers. Those * must be allocated through other means, e.g. with av_frame_get_buffer() or * manually. */ AVFrame *av_frame_alloc(void); /** * Free the frame and any dynamically allocated objects in it, * e.g. extended_data. If the frame is reference counted, it will be * unreferenced first. * * @param frame frame to be freed. The pointer will be set to NULL. */ void av_frame_free(AVFrame **frame); /** * Set up a new reference to the data described by the source frame. * * Copy frame properties from src to dst and create a new reference for each * AVBufferRef from src. * * If src is not reference counted, new buffers are allocated and the data is * copied. * * @warning: dst MUST have been either unreferenced with av_frame_unref(dst), * or newly allocated with av_frame_alloc() before calling this * function, or undefined behavior will occur. * * @return 0 on success, a negative AVERROR on error */ int av_frame_ref(AVFrame *dst, const AVFrame *src); /** * Create a new frame that references the same data as src. * * This is a shortcut for av_frame_alloc()+av_frame_ref(). * * @return newly created AVFrame on success, NULL on error. */ AVFrame *av_frame_clone(const AVFrame *src); /** * Unreference all the buffers referenced by frame and reset the frame fields. */ void av_frame_unref(AVFrame *frame); /** * Move everything contained in src to dst and reset src. * * @warning: dst is not unreferenced, but directly overwritten without reading * or deallocating its contents. Call av_frame_unref(dst) manually * before calling this function to ensure that no memory is leaked. */ void av_frame_move_ref(AVFrame *dst, AVFrame *src); /** * Allocate new buffer(s) for audio or video data. * * The following fields must be set on frame before calling this function: * - format (pixel format for video, sample format for audio) * - width and height for video * - nb_samples and channel_layout for audio * * This function will fill AVFrame.data and AVFrame.buf arrays and, if * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. * For planar formats, one buffer will be allocated for each plane. * * @warning: if frame already has been allocated, calling this function will * leak memory. In addition, undefined behavior can occur in certain * cases. * * @param frame frame in which to store the new buffers. * @param align required buffer size alignment * * @return 0 on success, a negative AVERROR on error. */ int av_frame_get_buffer(AVFrame *frame, int align); /** * Check if the frame data is writable. * * @return A positive value if the frame data is writable (which is true if and * only if each of the underlying buffers has only one reference, namely the one * stored in this frame). Return 0 otherwise. * * If 1 is returned the answer is valid until av_buffer_ref() is called on any * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly). * * @see av_frame_make_writable(), av_buffer_is_writable() */ int av_frame_is_writable(AVFrame *frame); /** * Ensure that the frame data is writable, avoiding data copy if possible. * * Do nothing if the frame is writable, allocate new buffers and copy the data * if it is not. * * @return 0 on success, a negative AVERROR on error. * * @see av_frame_is_writable(), av_buffer_is_writable(), * av_buffer_make_writable() */ int av_frame_make_writable(AVFrame *frame); /** * Copy the frame data from src to dst. * * This function does not allocate anything, dst must be already initialized and * allocated with the same parameters as src. * * This function only copies the frame data (i.e. the contents of the data / * extended data arrays), not any other properties. * * @return >= 0 on success, a negative AVERROR on error. */ int av_frame_copy(AVFrame *dst, const AVFrame *src); /** * Copy only "metadata" fields from src to dst. * * Metadata for the purpose of this function are those fields that do not affect * the data layout in the buffers. E.g. pts, sample rate (for audio) or sample * aspect ratio (for video), but not width/height or channel layout. * Side data is also copied. */ int av_frame_copy_props(AVFrame *dst, const AVFrame *src); /** * Get the buffer reference a given data plane is stored in. * * @param plane index of the data plane of interest in frame->extended_data. * * @return the buffer reference that contains the plane or NULL if the input * frame is not valid. */ AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane); /** * Add a new side data to a frame. * * @param frame a frame to which the side data should be added * @param type type of the added side data * @param size size of the side data * * @return newly added side data on success, NULL on error */ AVFrameSideData *av_frame_new_side_data(AVFrame *frame, enum AVFrameSideDataType type, int size); /** * @return a pointer to the side data of a given type on success, NULL if there * is no side data with such type in this frame. */ AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type); /** * If side data of the supplied type exists in the frame, free it and remove it * from the frame. */ void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type); /** * @return a string identifying the side data type */ const char *av_frame_side_data_name(enum AVFrameSideDataType type); /** * @} */ #endif /* AVUTIL_FRAME_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/hash.h ================================================ /* * Copyright (C) 2013 Reimar Döffinger * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * @ingroup lavu_hash_generic * Generic hashing API */ #ifndef AVUTIL_HASH_H #define AVUTIL_HASH_H #include /** * @defgroup lavu_hash Hash Functions * @ingroup lavu_crypto * Hash functions useful in multimedia. * * Hash functions are widely used in multimedia, from error checking and * concealment to internal regression testing. libavutil has efficient * implementations of a variety of hash functions that may be useful for * FFmpeg and other multimedia applications. * * @{ * * @defgroup lavu_hash_generic Generic Hashing API * An abstraction layer for all hash functions supported by libavutil. * * If your application needs to support a wide range of different hash * functions, then the Generic Hashing API is for you. It provides a generic, * reusable API for @ref lavu_hash "all hash functions" implemented in libavutil. * If you just need to use one particular hash function, use the @ref lavu_hash * "individual hash" directly. * * @section Sample Code * * A basic template for using the Generic Hashing API follows: * * @code * struct AVHashContext *ctx = NULL; * const char *hash_name = NULL; * uint8_t *output_buf = NULL; * * // Select from a string returned by av_hash_names() * hash_name = ...; * * // Allocate a hash context * ret = av_hash_alloc(&ctx, hash_name); * if (ret < 0) * return ret; * * // Initialize the hash context * av_hash_init(ctx); * * // Update the hash context with data * while (data_left) { * av_hash_update(ctx, data, size); * } * * // Now we have no more data, so it is time to finalize the hash and get the * // output. But we need to first allocate an output buffer. Note that you can * // use any memory allocation function, including malloc(), not just * // av_malloc(). * output_buf = av_malloc(av_hash_get_size(ctx)); * if (!output_buf) * return AVERROR(ENOMEM); * * // Finalize the hash context. * // You can use any of the av_hash_final*() functions provided, for other * // output formats. If you do so, be sure to adjust the memory allocation * // above. See the function documentation below for the exact amount of extra * // memory needed. * av_hash_final(ctx, output_buffer); * * // Free the context * av_hash_freep(&ctx); * @endcode * * @section Hash Function-Specific Information * If the CRC32 hash is selected, the #AV_CRC_32_IEEE polynomial will be * used. * * If the Murmur3 hash is selected, the default seed will be used. See @ref * lavu_murmur3_seedinfo "Murmur3" for more information. * * @{ */ /** * @example ffhash.c * This example is a simple command line application that takes one or more * arguments. It demonstrates a typical use of the hashing API with allocation, * initialization, updating, and finalizing. */ struct AVHashContext; /** * Allocate a hash context for the algorithm specified by name. * * @return >= 0 for success, a negative error code for failure * * @note The context is not initialized after a call to this function; you must * call av_hash_init() to do so. */ int av_hash_alloc(struct AVHashContext **ctx, const char *name); /** * Get the names of available hash algorithms. * * This function can be used to enumerate the algorithms. * * @param[in] i Index of the hash algorithm, starting from 0 * @return Pointer to a static string or `NULL` if `i` is out of range */ const char *av_hash_names(int i); /** * Get the name of the algorithm corresponding to the given hash context. */ const char *av_hash_get_name(const struct AVHashContext *ctx); /** * Maximum value that av_hash_get_size() will currently return. * * You can use this if you absolutely want or need to use static allocation for * the output buffer and are fine with not supporting hashes newly added to * libavutil without recompilation. * * @warning * Adding new hashes with larger sizes, and increasing the macro while doing * so, will not be considered an ABI change. To prevent your code from * overflowing a buffer, either dynamically allocate the output buffer with * av_hash_get_size(), or limit your use of the Hashing API to hashes that are * already in FFmpeg during the time of compilation. */ #define AV_HASH_MAX_SIZE 64 /** * Get the size of the resulting hash value in bytes. * * The maximum value this function will currently return is available as macro * #AV_HASH_MAX_SIZE. * * @param[in] ctx Hash context * @return Size of the hash value in bytes */ int av_hash_get_size(const struct AVHashContext *ctx); /** * Initialize or reset a hash context. * * @param[in,out] ctx Hash context */ void av_hash_init(struct AVHashContext *ctx); /** * Update a hash context with additional data. * * @param[in,out] ctx Hash context * @param[in] src Data to be added to the hash context * @param[in] len Size of the additional data */ void av_hash_update(struct AVHashContext *ctx, const uint8_t *src, int len); /** * Finalize a hash context and compute the actual hash value. * * The minimum size of `dst` buffer is given by av_hash_get_size() or * #AV_HASH_MAX_SIZE. The use of the latter macro is discouraged. * * It is not safe to update or finalize a hash context again, if it has already * been finalized. * * @param[in,out] ctx Hash context * @param[out] dst Where the final hash value will be stored * * @see av_hash_final_bin() provides an alternative API */ void av_hash_final(struct AVHashContext *ctx, uint8_t *dst); /** * Finalize a hash context and store the actual hash value in a buffer. * * It is not safe to update or finalize a hash context again, if it has already * been finalized. * * If `size` is smaller than the hash size (given by av_hash_get_size()), the * hash is truncated; if size is larger, the buffer is padded with 0. * * @param[in,out] ctx Hash context * @param[out] dst Where the final hash value will be stored * @param[in] size Number of bytes to write to `dst` */ void av_hash_final_bin(struct AVHashContext *ctx, uint8_t *dst, int size); /** * Finalize a hash context and store the hexadecimal representation of the * actual hash value as a string. * * It is not safe to update or finalize a hash context again, if it has already * been finalized. * * The string is always 0-terminated. * * If `size` is smaller than `2 * hash_size + 1`, where `hash_size` is the * value returned by av_hash_get_size(), the string will be truncated. * * @param[in,out] ctx Hash context * @param[out] dst Where the string will be stored * @param[in] size Maximum number of bytes to write to `dst` */ void av_hash_final_hex(struct AVHashContext *ctx, uint8_t *dst, int size); /** * Finalize a hash context and store the Base64 representation of the * actual hash value as a string. * * It is not safe to update or finalize a hash context again, if it has already * been finalized. * * The string is always 0-terminated. * * If `size` is smaller than AV_BASE64_SIZE(hash_size), where `hash_size` is * the value returned by av_hash_get_size(), the string will be truncated. * * @param[in,out] ctx Hash context * @param[out] dst Where the final hash value will be stored * @param[in] size Maximum number of bytes to write to `dst` */ void av_hash_final_b64(struct AVHashContext *ctx, uint8_t *dst, int size); /** * Free hash context and set hash context pointer to `NULL`. * * @param[in,out] ctx Pointer to hash context */ void av_hash_freep(struct AVHashContext **ctx); /** * @} * @} */ #endif /* AVUTIL_HASH_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/hmac.h ================================================ /* * Copyright (C) 2012 Martin Storsjo * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_HMAC_H #define AVUTIL_HMAC_H #include #include "version.h" /** * @defgroup lavu_hmac HMAC * @ingroup lavu_crypto * @{ */ enum AVHMACType { AV_HMAC_MD5, AV_HMAC_SHA1, AV_HMAC_SHA224, AV_HMAC_SHA256, AV_HMAC_SHA384 = 12, AV_HMAC_SHA512, }; typedef struct AVHMAC AVHMAC; /** * Allocate an AVHMAC context. * @param type The hash function used for the HMAC. */ AVHMAC *av_hmac_alloc(enum AVHMACType type); /** * Free an AVHMAC context. * @param ctx The context to free, may be NULL */ void av_hmac_free(AVHMAC *ctx); /** * Initialize an AVHMAC context with an authentication key. * @param ctx The HMAC context * @param key The authentication key * @param keylen The length of the key, in bytes */ void av_hmac_init(AVHMAC *ctx, const uint8_t *key, unsigned int keylen); /** * Hash data with the HMAC. * @param ctx The HMAC context * @param data The data to hash * @param len The length of the data, in bytes */ void av_hmac_update(AVHMAC *ctx, const uint8_t *data, unsigned int len); /** * Finish hashing and output the HMAC digest. * @param ctx The HMAC context * @param out The output buffer to write the digest into * @param outlen The length of the out buffer, in bytes * @return The number of bytes written to out, or a negative error code. */ int av_hmac_final(AVHMAC *ctx, uint8_t *out, unsigned int outlen); /** * Hash an array of data with a key. * @param ctx The HMAC context * @param data The data to hash * @param len The length of the data, in bytes * @param key The authentication key * @param keylen The length of the key, in bytes * @param out The output buffer to write the digest into * @param outlen The length of the out buffer, in bytes * @return The number of bytes written to out, or a negative error code. */ int av_hmac_calc(AVHMAC *ctx, const uint8_t *data, unsigned int len, const uint8_t *key, unsigned int keylen, uint8_t *out, unsigned int outlen); /** * @} */ #endif /* AVUTIL_HMAC_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/hwcontext.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_HWCONTEXT_H #define AVUTIL_HWCONTEXT_H #include "buffer.h" #include "frame.h" #include "log.h" #include "pixfmt.h" enum AVHWDeviceType { AV_HWDEVICE_TYPE_VDPAU, AV_HWDEVICE_TYPE_CUDA, AV_HWDEVICE_TYPE_VAAPI, AV_HWDEVICE_TYPE_DXVA2, AV_HWDEVICE_TYPE_QSV, }; typedef struct AVHWDeviceInternal AVHWDeviceInternal; /** * This struct aggregates all the (hardware/vendor-specific) "high-level" state, * i.e. state that is not tied to a concrete processing configuration. * E.g., in an API that supports hardware-accelerated encoding and decoding, * this struct will (if possible) wrap the state that is common to both encoding * and decoding and from which specific instances of encoders or decoders can be * derived. * * This struct is reference-counted with the AVBuffer mechanism. The * av_hwdevice_ctx_alloc() constructor yields a reference, whose data field * points to the actual AVHWDeviceContext. Further objects derived from * AVHWDeviceContext (such as AVHWFramesContext, describing a frame pool with * specific properties) will hold an internal reference to it. After all the * references are released, the AVHWDeviceContext itself will be freed, * optionally invoking a user-specified callback for uninitializing the hardware * state. */ typedef struct AVHWDeviceContext { /** * A class for logging. Set by av_hwdevice_ctx_alloc(). */ const AVClass *av_class; /** * Private data used internally by libavutil. Must not be accessed in any * way by the caller. */ AVHWDeviceInternal *internal; /** * This field identifies the underlying API used for hardware access. * * This field is set when this struct is allocated and never changed * afterwards. */ enum AVHWDeviceType type; /** * The format-specific data, allocated and freed by libavutil along with * this context. * * Should be cast by the user to the format-specific context defined in the * corresponding header (hwcontext_*.h) and filled as described in the * documentation before calling av_hwdevice_ctx_init(). * * After calling av_hwdevice_ctx_init() this struct should not be modified * by the caller. */ void *hwctx; /** * This field may be set by the caller before calling av_hwdevice_ctx_init(). * * If non-NULL, this callback will be called when the last reference to * this context is unreferenced, immediately before it is freed. * * @note when other objects (e.g an AVHWFramesContext) are derived from this * struct, this callback will be invoked after all such child objects * are fully uninitialized and their respective destructors invoked. */ void (*free)(struct AVHWDeviceContext *ctx); /** * Arbitrary user data, to be used e.g. by the free() callback. */ void *user_opaque; } AVHWDeviceContext; typedef struct AVHWFramesInternal AVHWFramesInternal; /** * This struct describes a set or pool of "hardware" frames (i.e. those with * data not located in normal system memory). All the frames in the pool are * assumed to be allocated in the same way and interchangeable. * * This struct is reference-counted with the AVBuffer mechanism and tied to a * given AVHWDeviceContext instance. The av_hwframe_ctx_alloc() constructor * yields a reference, whose data field points to the actual AVHWFramesContext * struct. */ typedef struct AVHWFramesContext { /** * A class for logging. */ const AVClass *av_class; /** * Private data used internally by libavutil. Must not be accessed in any * way by the caller. */ AVHWFramesInternal *internal; /** * A reference to the parent AVHWDeviceContext. This reference is owned and * managed by the enclosing AVHWFramesContext, but the caller may derive * additional references from it. */ AVBufferRef *device_ref; /** * The parent AVHWDeviceContext. This is simply a pointer to * device_ref->data provided for convenience. * * Set by libavutil in av_hwframe_ctx_init(). */ AVHWDeviceContext *device_ctx; /** * The format-specific data, allocated and freed automatically along with * this context. * * Should be cast by the user to the format-specific context defined in the * corresponding header (hwframe_*.h) and filled as described in the * documentation before calling av_hwframe_ctx_init(). * * After any frames using this context are created, the contents of this * struct should not be modified by the caller. */ void *hwctx; /** * This field may be set by the caller before calling av_hwframe_ctx_init(). * * If non-NULL, this callback will be called when the last reference to * this context is unreferenced, immediately before it is freed. */ void (*free)(struct AVHWFramesContext *ctx); /** * Arbitrary user data, to be used e.g. by the free() callback. */ void *user_opaque; /** * A pool from which the frames are allocated by av_hwframe_get_buffer(). * This field may be set by the caller before calling av_hwframe_ctx_init(). * The buffers returned by calling av_buffer_pool_get() on this pool must * have the properties described in the documentation in the corresponding hw * type's header (hwcontext_*.h). The pool will be freed strictly before * this struct's free() callback is invoked. * * This field may be NULL, then libavutil will attempt to allocate a pool * internally. Note that certain device types enforce pools allocated at * fixed size (frame count), which cannot be extended dynamically. In such a * case, initial_pool_size must be set appropriately. */ AVBufferPool *pool; /** * Initial size of the frame pool. If a device type does not support * dynamically resizing the pool, then this is also the maximum pool size. * * May be set by the caller before calling av_hwframe_ctx_init(). Must be * set if pool is NULL and the device type does not support dynamic pools. */ int initial_pool_size; /** * The pixel format identifying the underlying HW surface type. * * Must be a hwaccel format, i.e. the corresponding descriptor must have the * AV_PIX_FMT_FLAG_HWACCEL flag set. * * Must be set by the user before calling av_hwframe_ctx_init(). */ enum AVPixelFormat format; /** * The pixel format identifying the actual data layout of the hardware * frames. * * Must be set by the caller before calling av_hwframe_ctx_init(). * * @note when the underlying API does not provide the exact data layout, but * only the colorspace/bit depth, this field should be set to the fully * planar version of that format (e.g. for 8-bit 420 YUV it should be * AV_PIX_FMT_YUV420P, not AV_PIX_FMT_NV12 or anything else). */ enum AVPixelFormat sw_format; /** * The allocated dimensions of the frames in this pool. * * Must be set by the user before calling av_hwframe_ctx_init(). */ int width, height; } AVHWFramesContext; /** * Allocate an AVHWDeviceContext for a given pixel format. * * @param format a hwaccel pixel format (AV_PIX_FMT_FLAG_HWACCEL must be set * on the corresponding format descriptor) * @return a reference to the newly created AVHWDeviceContext on success or NULL * on failure. */ AVBufferRef *av_hwdevice_ctx_alloc(enum AVHWDeviceType type); /** * Finalize the device context before use. This function must be called after * the context is filled with all the required information and before it is * used in any way. * * @param ref a reference to the AVHWDeviceContext * @return 0 on success, a negative AVERROR code on failure */ int av_hwdevice_ctx_init(AVBufferRef *ref); /** * Open a device of the specified type and create an AVHWDeviceContext for it. * * This is a convenience function intended to cover the simple cases. Callers * who need to fine-tune device creation/management should open the device * manually and then wrap it in an AVHWDeviceContext using * av_hwdevice_ctx_alloc()/av_hwdevice_ctx_init(). * * The returned context is already initialized and ready for use, the caller * should not call av_hwdevice_ctx_init() on it. The user_opaque/free fields of * the created AVHWDeviceContext are set by this function and should not be * touched by the caller. * * @param device_ctx On success, a reference to the newly-created device context * will be written here. The reference is owned by the caller * and must be released with av_buffer_unref() when no longer * needed. On failure, NULL will be written to this pointer. * @param type The type of the device to create. * @param device A type-specific string identifying the device to open. * @param opts A dictionary of additional (type-specific) options to use in * opening the device. The dictionary remains owned by the caller. * @param flags currently unused * * @return 0 on success, a negative AVERROR code on failure. */ int av_hwdevice_ctx_create(AVBufferRef **device_ctx, enum AVHWDeviceType type, const char *device, AVDictionary *opts, int flags); /** * Allocate an AVHWFramesContext tied to a given device context. * * @param device_ctx a reference to a AVHWDeviceContext. This function will make * a new reference for internal use, the one passed to the * function remains owned by the caller. * @return a reference to the newly created AVHWFramesContext on success or NULL * on failure. */ AVBufferRef *av_hwframe_ctx_alloc(AVBufferRef *device_ctx); /** * Finalize the context before use. This function must be called after the * context is filled with all the required information and before it is attached * to any frames. * * @param ref a reference to the AVHWFramesContext * @return 0 on success, a negative AVERROR code on failure */ int av_hwframe_ctx_init(AVBufferRef *ref); /** * Allocate a new frame attached to the given AVHWFramesContext. * * @param hwframe_ctx a reference to an AVHWFramesContext * @param frame an empty (freshly allocated or unreffed) frame to be filled with * newly allocated buffers. * @param flags currently unused, should be set to zero * @return 0 on success, a negative AVERROR code on failure */ int av_hwframe_get_buffer(AVBufferRef *hwframe_ctx, AVFrame *frame, int flags); /** * Copy data to or from a hw surface. At least one of dst/src must have an * AVHWFramesContext attached. * * If src has an AVHWFramesContext attached, then the format of dst (if set) * must use one of the formats returned by av_hwframe_transfer_get_formats(src, * AV_HWFRAME_TRANSFER_DIRECTION_FROM). * If dst has an AVHWFramesContext attached, then the format of src must use one * of the formats returned by av_hwframe_transfer_get_formats(dst, * AV_HWFRAME_TRANSFER_DIRECTION_TO) * * dst may be "clean" (i.e. with data/buf pointers unset), in which case the * data buffers will be allocated by this function using av_frame_get_buffer(). * If dst->format is set, then this format will be used, otherwise (when * dst->format is AV_PIX_FMT_NONE) the first acceptable format will be chosen. * * @param dst the destination frame. dst is not touched on failure. * @param src the source frame. * @param flags currently unused, should be set to zero * @return 0 on success, a negative AVERROR error code on failure. */ int av_hwframe_transfer_data(AVFrame *dst, const AVFrame *src, int flags); enum AVHWFrameTransferDirection { /** * Transfer the data from the queried hw frame. */ AV_HWFRAME_TRANSFER_DIRECTION_FROM, /** * Transfer the data to the queried hw frame. */ AV_HWFRAME_TRANSFER_DIRECTION_TO, }; /** * Get a list of possible source or target formats usable in * av_hwframe_transfer_data(). * * @param hwframe_ctx the frame context to obtain the information for * @param dir the direction of the transfer * @param formats the pointer to the output format list will be written here. * The list is terminated with AV_PIX_FMT_NONE and must be freed * by the caller when no longer needed using av_free(). * If this function returns successfully, the format list will * have at least one item (not counting the terminator). * On failure, the contents of this pointer are unspecified. * @param flags currently unused, should be set to zero * @return 0 on success, a negative AVERROR code on failure. */ int av_hwframe_transfer_get_formats(AVBufferRef *hwframe_ctx, enum AVHWFrameTransferDirection dir, enum AVPixelFormat **formats, int flags); /** * This struct describes the constraints on hardware frames attached to * a given device with a hardware-specific configuration. This is returned * by av_hwdevice_get_hwframe_constraints() and must be freed by * av_hwframe_constraints_free() after use. */ typedef struct AVHWFramesConstraints { /** * A list of possible values for format in the hw_frames_ctx, * terminated by AV_PIX_FMT_NONE. This member will always be filled. */ enum AVPixelFormat *valid_hw_formats; /** * A list of possible values for sw_format in the hw_frames_ctx, * terminated by AV_PIX_FMT_NONE. Can be NULL if this information is * not known. */ enum AVPixelFormat *valid_sw_formats; /** * The minimum size of frames in this hw_frames_ctx. * (Zero if not known.) */ int min_width; int min_height; /** * The maximum size of frames in this hw_frames_ctx. * (INT_MAX if not known / no limit.) */ int max_width; int max_height; } AVHWFramesConstraints; /** * Allocate a HW-specific configuration structure for a given HW device. * After use, the user must free all members as required by the specific * hardware structure being used, then free the structure itself with * av_free(). * * @param device_ctx a reference to the associated AVHWDeviceContext. * @return The newly created HW-specific configuration structure on * success or NULL on failure. */ void *av_hwdevice_hwconfig_alloc(AVBufferRef *device_ctx); /** * Get the constraints on HW frames given a device and the HW-specific * configuration to be used with that device. If no HW-specific * configuration is provided, returns the maximum possible capabilities * of the device. * * @param device_ctx a reference to the associated AVHWDeviceContext. * @param hwconfig a filled HW-specific configuration structure, or NULL * to return the maximum possible capabilities of the device. * @return AVHWFramesConstraints structure describing the constraints * on the device, or NULL if not available. */ AVHWFramesConstraints *av_hwdevice_get_hwframe_constraints(AVBufferRef *ref, const void *hwconfig); /** * Free an AVHWFrameConstraints structure. * * @param constraints The (filled or unfilled) AVHWFrameConstraints structure. */ void av_hwframe_constraints_free(AVHWFramesConstraints **constraints); #endif /* AVUTIL_HWCONTEXT_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/hwcontext_cuda.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_HWCONTEXT_CUDA_H #define AVUTIL_HWCONTEXT_CUDA_H #include #include "pixfmt.h" /** * @file * An API-specific header for AV_HWDEVICE_TYPE_CUDA. * * This API supports dynamic frame pools. AVHWFramesContext.pool must return * AVBufferRefs whose data pointer is a CUdeviceptr. */ /** * This struct is allocated as AVHWDeviceContext.hwctx */ typedef struct AVCUDADeviceContext { CUcontext cuda_ctx; } AVCUDADeviceContext; /** * AVHWFramesContext.hwctx is currently not used */ #endif /* AVUTIL_HWCONTEXT_CUDA_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/hwcontext_dxva2.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_HWCONTEXT_DXVA2_H #define AVUTIL_HWCONTEXT_DXVA2_H /** * @file * An API-specific header for AV_HWDEVICE_TYPE_DXVA2. * * Only fixed-size pools are supported. * * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs * with the data pointer set to a pointer to IDirect3DSurface9. */ #include #include /** * This struct is allocated as AVHWDeviceContext.hwctx */ typedef struct AVDXVA2DeviceContext { IDirect3DDeviceManager9 *devmgr; } AVDXVA2DeviceContext; /** * This struct is allocated as AVHWFramesContext.hwctx */ typedef struct AVDXVA2FramesContext { /** * The surface type (e.g. DXVA2_VideoProcessorRenderTarget or * DXVA2_VideoDecoderRenderTarget). Must be set by the caller. */ DWORD surface_type; /** * The surface pool. When an external pool is not provided by the caller, * this will be managed (allocated and filled on init, freed on uninit) by * libavutil. */ IDirect3DSurface9 **surfaces; int nb_surfaces; /** * Certain drivers require the decoder to be destroyed before the surfaces. * To allow internally managed pools to work properly in such cases, this * field is provided. * * If it is non-NULL, libavutil will call IDirectXVideoDecoder_Release() on * it just before the internal surface pool is freed. */ IDirectXVideoDecoder *decoder_to_release; } AVDXVA2FramesContext; #endif /* AVUTIL_HWCONTEXT_DXVA2_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/hwcontext_qsv.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_HWCONTEXT_QSV_H #define AVUTIL_HWCONTEXT_QSV_H #include /** * @file * An API-specific header for AV_HWDEVICE_TYPE_QSV. * * This API does not support dynamic frame pools. AVHWFramesContext.pool must * contain AVBufferRefs whose data pointer points to an mfxFrameSurface1 struct. */ /** * This struct is allocated as AVHWDeviceContext.hwctx */ typedef struct AVQSVDeviceContext { mfxSession session; } AVQSVDeviceContext; /** * This struct is allocated as AVHWFramesContext.hwctx */ typedef struct AVQSVFramesContext { mfxFrameSurface1 *surfaces; int nb_surfaces; /** * A combination of MFX_MEMTYPE_* describing the frame pool. */ int frame_type; } AVQSVFramesContext; #endif /* AVUTIL_HWCONTEXT_QSV_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/hwcontext_vaapi.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_HWCONTEXT_VAAPI_H #define AVUTIL_HWCONTEXT_VAAPI_H #include /** * @file * API-specific header for AV_HWDEVICE_TYPE_VAAPI. * * Dynamic frame pools are supported, but note that any pool used as a render * target is required to be of fixed size in order to be be usable as an * argument to vaCreateContext(). * * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs * with the data pointer set to a VASurfaceID. */ /** * VAAPI connection details. * * Allocated as AVHWDeviceContext.hwctx */ typedef struct AVVAAPIDeviceContext { /** * The VADisplay handle, to be filled by the user. */ VADisplay display; } AVVAAPIDeviceContext; /** * VAAPI-specific data associated with a frame pool. * * Allocated as AVHWFramesContext.hwctx. */ typedef struct AVVAAPIFramesContext { /** * Set by the user to apply surface attributes to all surfaces in * the frame pool. If null, default settings are used. */ VASurfaceAttrib *attributes; int nb_attributes; /** * The surfaces IDs of all surfaces in the pool after creation. * Only valid if AVHWFramesContext.initial_pool_size was positive. * These are intended to be used as the render_targets arguments to * vaCreateContext(). */ VASurfaceID *surface_ids; int nb_surfaces; } AVVAAPIFramesContext; /** * VAAPI hardware pipeline configuration details. * * Allocated with av_hwdevice_hwconfig_alloc(). */ typedef struct AVVAAPIHWConfig { /** * ID of a VAAPI pipeline configuration. */ VAConfigID config_id; } AVVAAPIHWConfig; #endif /* AVUTIL_HWCONTEXT_VAAPI_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/hwcontext_vdpau.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_HWCONTEXT_VDPAU_H #define AVUTIL_HWCONTEXT_VDPAU_H #include /** * @file * An API-specific header for AV_HWDEVICE_TYPE_VDPAU. * * This API supports dynamic frame pools. AVHWFramesContext.pool must return * AVBufferRefs whose data pointer is a VdpVideoSurface. */ /** * This struct is allocated as AVHWDeviceContext.hwctx */ typedef struct AVVDPAUDeviceContext { VdpDevice device; VdpGetProcAddress *get_proc_address; } AVVDPAUDeviceContext; /** * AVHWFramesContext.hwctx is currently not used */ #endif /* AVUTIL_HWCONTEXT_VDPAU_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/i386/avconfig.h ================================================ /* Generated by ffconf */ #ifndef AVUTIL_AVCONFIG_H #define AVUTIL_AVCONFIG_H #define AV_HAVE_BIGENDIAN 0 #define AV_HAVE_FAST_UNALIGNED 0 #endif /* AVUTIL_AVCONFIG_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/i386/ffversion.h ================================================ /* Automatically generated by version.sh, do not manually edit! */ #ifndef AVUTIL_FFVERSION_H #define AVUTIL_FFVERSION_H #define FFMPEG_VERSION "ff3.2--ijk0.7.6--20170203--001" #endif /* AVUTIL_FFVERSION_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/imgutils.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_IMGUTILS_H #define AVUTIL_IMGUTILS_H /** * @file * misc image utilities * * @addtogroup lavu_picture * @{ */ #include "avutil.h" #include "pixdesc.h" #include "rational.h" /** * Compute the max pixel step for each plane of an image with a * format described by pixdesc. * * The pixel step is the distance in bytes between the first byte of * the group of bytes which describe a pixel component and the first * byte of the successive group in the same plane for the same * component. * * @param max_pixsteps an array which is filled with the max pixel step * for each plane. Since a plane may contain different pixel * components, the computed max_pixsteps[plane] is relative to the * component in the plane with the max pixel step. * @param max_pixstep_comps an array which is filled with the component * for each plane which has the max pixel step. May be NULL. */ void av_image_fill_max_pixsteps(int max_pixsteps[4], int max_pixstep_comps[4], const AVPixFmtDescriptor *pixdesc); /** * Compute the size of an image line with format pix_fmt and width * width for the plane plane. * * @return the computed size in bytes */ int av_image_get_linesize(enum AVPixelFormat pix_fmt, int width, int plane); /** * Fill plane linesizes for an image with pixel format pix_fmt and * width width. * * @param linesizes array to be filled with the linesize for each plane * @return >= 0 in case of success, a negative error code otherwise */ int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width); /** * Fill plane data pointers for an image with pixel format pix_fmt and * height height. * * @param data pointers array to be filled with the pointer for each image plane * @param ptr the pointer to a buffer which will contain the image * @param linesizes the array containing the linesize for each * plane, should be filled by av_image_fill_linesizes() * @return the size in bytes required for the image buffer, a negative * error code in case of failure */ int av_image_fill_pointers(uint8_t *data[4], enum AVPixelFormat pix_fmt, int height, uint8_t *ptr, const int linesizes[4]); /** * Allocate an image with size w and h and pixel format pix_fmt, and * fill pointers and linesizes accordingly. * The allocated image buffer has to be freed by using * av_freep(&pointers[0]). * * @param align the value to use for buffer size alignment * @return the size in bytes required for the image buffer, a negative * error code in case of failure */ int av_image_alloc(uint8_t *pointers[4], int linesizes[4], int w, int h, enum AVPixelFormat pix_fmt, int align); /** * Copy image plane from src to dst. * That is, copy "height" number of lines of "bytewidth" bytes each. * The first byte of each successive line is separated by *_linesize * bytes. * * bytewidth must be contained by both absolute values of dst_linesize * and src_linesize, otherwise the function behavior is undefined. * * @param dst_linesize linesize for the image plane in dst * @param src_linesize linesize for the image plane in src */ void av_image_copy_plane(uint8_t *dst, int dst_linesize, const uint8_t *src, int src_linesize, int bytewidth, int height); /** * Copy image in src_data to dst_data. * * @param dst_linesizes linesizes for the image in dst_data * @param src_linesizes linesizes for the image in src_data */ void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], const uint8_t *src_data[4], const int src_linesizes[4], enum AVPixelFormat pix_fmt, int width, int height); /** * Setup the data pointers and linesizes based on the specified image * parameters and the provided array. * * The fields of the given image are filled in by using the src * address which points to the image data buffer. Depending on the * specified pixel format, one or multiple image data pointers and * line sizes will be set. If a planar format is specified, several * pointers will be set pointing to the different picture planes and * the line sizes of the different planes will be stored in the * lines_sizes array. Call with src == NULL to get the required * size for the src buffer. * * To allocate the buffer and fill in the dst_data and dst_linesize in * one call, use av_image_alloc(). * * @param dst_data data pointers to be filled in * @param dst_linesizes linesizes for the image in dst_data to be filled in * @param src buffer which will contain or contains the actual image data, can be NULL * @param pix_fmt the pixel format of the image * @param width the width of the image in pixels * @param height the height of the image in pixels * @param align the value used in src for linesize alignment * @return the size in bytes required for src, a negative error code * in case of failure */ int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4], const uint8_t *src, enum AVPixelFormat pix_fmt, int width, int height, int align); /** * Return the size in bytes of the amount of data required to store an * image with the given parameters. * * @param[in] align the assumed linesize alignment */ int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align); /** * Copy image data from an image into a buffer. * * av_image_get_buffer_size() can be used to compute the required size * for the buffer to fill. * * @param dst a buffer into which picture data will be copied * @param dst_size the size in bytes of dst * @param src_data pointers containing the source image data * @param src_linesizes linesizes for the image in src_data * @param pix_fmt the pixel format of the source image * @param width the width of the source image in pixels * @param height the height of the source image in pixels * @param align the assumed linesize alignment for dst * @return the number of bytes written to dst, or a negative value * (error code) on error */ int av_image_copy_to_buffer(uint8_t *dst, int dst_size, const uint8_t * const src_data[4], const int src_linesize[4], enum AVPixelFormat pix_fmt, int width, int height, int align); /** * Check if the given dimension of an image is valid, meaning that all * bytes of the image can be addressed with a signed int. * * @param w the width of the picture * @param h the height of the picture * @param log_offset the offset to sum to the log level for logging with log_ctx * @param log_ctx the parent logging context, it may be NULL * @return >= 0 if valid, a negative error code otherwise */ int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx); /** * Check if the given sample aspect ratio of an image is valid. * * It is considered invalid if the denominator is 0 or if applying the ratio * to the image size would make the smaller dimension less than 1. If the * sar numerator is 0, it is considered unknown and will return as valid. * * @param w width of the image * @param h height of the image * @param sar sample aspect ratio of the image * @return 0 if valid, a negative AVERROR code otherwise */ int av_image_check_sar(unsigned int w, unsigned int h, AVRational sar); /** * @} */ #endif /* AVUTIL_IMGUTILS_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/intfloat.h ================================================ /* * Copyright (c) 2011 Mans Rullgard * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_INTFLOAT_H #define AVUTIL_INTFLOAT_H #include #include "attributes.h" union av_intfloat32 { uint32_t i; float f; }; union av_intfloat64 { uint64_t i; double f; }; /** * Reinterpret a 32-bit integer as a float. */ static av_always_inline float av_int2float(uint32_t i) { union av_intfloat32 v; v.i = i; return v.f; } /** * Reinterpret a float as a 32-bit integer. */ static av_always_inline uint32_t av_float2int(float f) { union av_intfloat32 v; v.f = f; return v.i; } /** * Reinterpret a 64-bit integer as a double. */ static av_always_inline double av_int2double(uint64_t i) { union av_intfloat64 v; v.i = i; return v.f; } /** * Reinterpret a double as a 64-bit integer. */ static av_always_inline uint64_t av_double2int(double f) { union av_intfloat64 v; v.f = f; return v.i; } #endif /* AVUTIL_INTFLOAT_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/intreadwrite.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_INTREADWRITE_H #define AVUTIL_INTREADWRITE_H #include #include "libavutil/avconfig.h" #include "attributes.h" #include "bswap.h" typedef union { uint64_t u64; uint32_t u32[2]; uint16_t u16[4]; uint8_t u8 [8]; double f64; float f32[2]; } av_alias av_alias64; typedef union { uint32_t u32; uint16_t u16[2]; uint8_t u8 [4]; float f32; } av_alias av_alias32; typedef union { uint16_t u16; uint8_t u8 [2]; } av_alias av_alias16; /* * Arch-specific headers can provide any combination of * AV_[RW][BLN](16|24|32|48|64) and AV_(COPY|SWAP|ZERO)(64|128) macros. * Preprocessor symbols must be defined, even if these are implemented * as inline functions. * * R/W means read/write, B/L/N means big/little/native endianness. * The following macros require aligned access, compared to their * unaligned variants: AV_(COPY|SWAP|ZERO)(64|128), AV_[RW]N[8-64]A. * Incorrect usage may range from abysmal performance to crash * depending on the platform. * * The unaligned variants are AV_[RW][BLN][8-64] and AV_COPY*U. */ #ifdef HAVE_AV_CONFIG_H #include "config.h" #if ARCH_ARM # include "arm/intreadwrite.h" #elif ARCH_AVR32 # include "avr32/intreadwrite.h" #elif ARCH_MIPS # include "mips/intreadwrite.h" #elif ARCH_PPC # include "ppc/intreadwrite.h" #elif ARCH_TOMI # include "tomi/intreadwrite.h" #elif ARCH_X86 # include "x86/intreadwrite.h" #endif #endif /* HAVE_AV_CONFIG_H */ /* * Map AV_RNXX <-> AV_R[BL]XX for all variants provided by per-arch headers. */ #if AV_HAVE_BIGENDIAN # if defined(AV_RN16) && !defined(AV_RB16) # define AV_RB16(p) AV_RN16(p) # elif !defined(AV_RN16) && defined(AV_RB16) # define AV_RN16(p) AV_RB16(p) # endif # if defined(AV_WN16) && !defined(AV_WB16) # define AV_WB16(p, v) AV_WN16(p, v) # elif !defined(AV_WN16) && defined(AV_WB16) # define AV_WN16(p, v) AV_WB16(p, v) # endif # if defined(AV_RN24) && !defined(AV_RB24) # define AV_RB24(p) AV_RN24(p) # elif !defined(AV_RN24) && defined(AV_RB24) # define AV_RN24(p) AV_RB24(p) # endif # if defined(AV_WN24) && !defined(AV_WB24) # define AV_WB24(p, v) AV_WN24(p, v) # elif !defined(AV_WN24) && defined(AV_WB24) # define AV_WN24(p, v) AV_WB24(p, v) # endif # if defined(AV_RN32) && !defined(AV_RB32) # define AV_RB32(p) AV_RN32(p) # elif !defined(AV_RN32) && defined(AV_RB32) # define AV_RN32(p) AV_RB32(p) # endif # if defined(AV_WN32) && !defined(AV_WB32) # define AV_WB32(p, v) AV_WN32(p, v) # elif !defined(AV_WN32) && defined(AV_WB32) # define AV_WN32(p, v) AV_WB32(p, v) # endif # if defined(AV_RN48) && !defined(AV_RB48) # define AV_RB48(p) AV_RN48(p) # elif !defined(AV_RN48) && defined(AV_RB48) # define AV_RN48(p) AV_RB48(p) # endif # if defined(AV_WN48) && !defined(AV_WB48) # define AV_WB48(p, v) AV_WN48(p, v) # elif !defined(AV_WN48) && defined(AV_WB48) # define AV_WN48(p, v) AV_WB48(p, v) # endif # if defined(AV_RN64) && !defined(AV_RB64) # define AV_RB64(p) AV_RN64(p) # elif !defined(AV_RN64) && defined(AV_RB64) # define AV_RN64(p) AV_RB64(p) # endif # if defined(AV_WN64) && !defined(AV_WB64) # define AV_WB64(p, v) AV_WN64(p, v) # elif !defined(AV_WN64) && defined(AV_WB64) # define AV_WN64(p, v) AV_WB64(p, v) # endif #else /* AV_HAVE_BIGENDIAN */ # if defined(AV_RN16) && !defined(AV_RL16) # define AV_RL16(p) AV_RN16(p) # elif !defined(AV_RN16) && defined(AV_RL16) # define AV_RN16(p) AV_RL16(p) # endif # if defined(AV_WN16) && !defined(AV_WL16) # define AV_WL16(p, v) AV_WN16(p, v) # elif !defined(AV_WN16) && defined(AV_WL16) # define AV_WN16(p, v) AV_WL16(p, v) # endif # if defined(AV_RN24) && !defined(AV_RL24) # define AV_RL24(p) AV_RN24(p) # elif !defined(AV_RN24) && defined(AV_RL24) # define AV_RN24(p) AV_RL24(p) # endif # if defined(AV_WN24) && !defined(AV_WL24) # define AV_WL24(p, v) AV_WN24(p, v) # elif !defined(AV_WN24) && defined(AV_WL24) # define AV_WN24(p, v) AV_WL24(p, v) # endif # if defined(AV_RN32) && !defined(AV_RL32) # define AV_RL32(p) AV_RN32(p) # elif !defined(AV_RN32) && defined(AV_RL32) # define AV_RN32(p) AV_RL32(p) # endif # if defined(AV_WN32) && !defined(AV_WL32) # define AV_WL32(p, v) AV_WN32(p, v) # elif !defined(AV_WN32) && defined(AV_WL32) # define AV_WN32(p, v) AV_WL32(p, v) # endif # if defined(AV_RN48) && !defined(AV_RL48) # define AV_RL48(p) AV_RN48(p) # elif !defined(AV_RN48) && defined(AV_RL48) # define AV_RN48(p) AV_RL48(p) # endif # if defined(AV_WN48) && !defined(AV_WL48) # define AV_WL48(p, v) AV_WN48(p, v) # elif !defined(AV_WN48) && defined(AV_WL48) # define AV_WN48(p, v) AV_WL48(p, v) # endif # if defined(AV_RN64) && !defined(AV_RL64) # define AV_RL64(p) AV_RN64(p) # elif !defined(AV_RN64) && defined(AV_RL64) # define AV_RN64(p) AV_RL64(p) # endif # if defined(AV_WN64) && !defined(AV_WL64) # define AV_WL64(p, v) AV_WN64(p, v) # elif !defined(AV_WN64) && defined(AV_WL64) # define AV_WN64(p, v) AV_WL64(p, v) # endif #endif /* !AV_HAVE_BIGENDIAN */ /* * Define AV_[RW]N helper macros to simplify definitions not provided * by per-arch headers. */ #if defined(__GNUC__) && !defined(__TI_COMPILER_VERSION__) union unaligned_64 { uint64_t l; } __attribute__((packed)) av_alias; union unaligned_32 { uint32_t l; } __attribute__((packed)) av_alias; union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; # define AV_RN(s, p) (((const union unaligned_##s *) (p))->l) # define AV_WN(s, p, v) ((((union unaligned_##s *) (p))->l) = (v)) #elif defined(__DECC) # define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p))) # define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v)) #elif AV_HAVE_FAST_UNALIGNED # define AV_RN(s, p) (((const av_alias##s*)(p))->u##s) # define AV_WN(s, p, v) (((av_alias##s*)(p))->u##s = (v)) #else #ifndef AV_RB16 # define AV_RB16(x) \ ((((const uint8_t*)(x))[0] << 8) | \ ((const uint8_t*)(x))[1]) #endif #ifndef AV_WB16 # define AV_WB16(p, darg) do { \ unsigned d = (darg); \ ((uint8_t*)(p))[1] = (d); \ ((uint8_t*)(p))[0] = (d)>>8; \ } while(0) #endif #ifndef AV_RL16 # define AV_RL16(x) \ ((((const uint8_t*)(x))[1] << 8) | \ ((const uint8_t*)(x))[0]) #endif #ifndef AV_WL16 # define AV_WL16(p, darg) do { \ unsigned d = (darg); \ ((uint8_t*)(p))[0] = (d); \ ((uint8_t*)(p))[1] = (d)>>8; \ } while(0) #endif #ifndef AV_RB32 # define AV_RB32(x) \ (((uint32_t)((const uint8_t*)(x))[0] << 24) | \ (((const uint8_t*)(x))[1] << 16) | \ (((const uint8_t*)(x))[2] << 8) | \ ((const uint8_t*)(x))[3]) #endif #ifndef AV_WB32 # define AV_WB32(p, darg) do { \ unsigned d = (darg); \ ((uint8_t*)(p))[3] = (d); \ ((uint8_t*)(p))[2] = (d)>>8; \ ((uint8_t*)(p))[1] = (d)>>16; \ ((uint8_t*)(p))[0] = (d)>>24; \ } while(0) #endif #ifndef AV_RL32 # define AV_RL32(x) \ (((uint32_t)((const uint8_t*)(x))[3] << 24) | \ (((const uint8_t*)(x))[2] << 16) | \ (((const uint8_t*)(x))[1] << 8) | \ ((const uint8_t*)(x))[0]) #endif #ifndef AV_WL32 # define AV_WL32(p, darg) do { \ unsigned d = (darg); \ ((uint8_t*)(p))[0] = (d); \ ((uint8_t*)(p))[1] = (d)>>8; \ ((uint8_t*)(p))[2] = (d)>>16; \ ((uint8_t*)(p))[3] = (d)>>24; \ } while(0) #endif #ifndef AV_RB64 # define AV_RB64(x) \ (((uint64_t)((const uint8_t*)(x))[0] << 56) | \ ((uint64_t)((const uint8_t*)(x))[1] << 48) | \ ((uint64_t)((const uint8_t*)(x))[2] << 40) | \ ((uint64_t)((const uint8_t*)(x))[3] << 32) | \ ((uint64_t)((const uint8_t*)(x))[4] << 24) | \ ((uint64_t)((const uint8_t*)(x))[5] << 16) | \ ((uint64_t)((const uint8_t*)(x))[6] << 8) | \ (uint64_t)((const uint8_t*)(x))[7]) #endif #ifndef AV_WB64 # define AV_WB64(p, darg) do { \ uint64_t d = (darg); \ ((uint8_t*)(p))[7] = (d); \ ((uint8_t*)(p))[6] = (d)>>8; \ ((uint8_t*)(p))[5] = (d)>>16; \ ((uint8_t*)(p))[4] = (d)>>24; \ ((uint8_t*)(p))[3] = (d)>>32; \ ((uint8_t*)(p))[2] = (d)>>40; \ ((uint8_t*)(p))[1] = (d)>>48; \ ((uint8_t*)(p))[0] = (d)>>56; \ } while(0) #endif #ifndef AV_RL64 # define AV_RL64(x) \ (((uint64_t)((const uint8_t*)(x))[7] << 56) | \ ((uint64_t)((const uint8_t*)(x))[6] << 48) | \ ((uint64_t)((const uint8_t*)(x))[5] << 40) | \ ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ (uint64_t)((const uint8_t*)(x))[0]) #endif #ifndef AV_WL64 # define AV_WL64(p, darg) do { \ uint64_t d = (darg); \ ((uint8_t*)(p))[0] = (d); \ ((uint8_t*)(p))[1] = (d)>>8; \ ((uint8_t*)(p))[2] = (d)>>16; \ ((uint8_t*)(p))[3] = (d)>>24; \ ((uint8_t*)(p))[4] = (d)>>32; \ ((uint8_t*)(p))[5] = (d)>>40; \ ((uint8_t*)(p))[6] = (d)>>48; \ ((uint8_t*)(p))[7] = (d)>>56; \ } while(0) #endif #if AV_HAVE_BIGENDIAN # define AV_RN(s, p) AV_RB##s(p) # define AV_WN(s, p, v) AV_WB##s(p, v) #else # define AV_RN(s, p) AV_RL##s(p) # define AV_WN(s, p, v) AV_WL##s(p, v) #endif #endif /* HAVE_FAST_UNALIGNED */ #ifndef AV_RN16 # define AV_RN16(p) AV_RN(16, p) #endif #ifndef AV_RN32 # define AV_RN32(p) AV_RN(32, p) #endif #ifndef AV_RN64 # define AV_RN64(p) AV_RN(64, p) #endif #ifndef AV_WN16 # define AV_WN16(p, v) AV_WN(16, p, v) #endif #ifndef AV_WN32 # define AV_WN32(p, v) AV_WN(32, p, v) #endif #ifndef AV_WN64 # define AV_WN64(p, v) AV_WN(64, p, v) #endif #if AV_HAVE_BIGENDIAN # define AV_RB(s, p) AV_RN##s(p) # define AV_WB(s, p, v) AV_WN##s(p, v) # define AV_RL(s, p) av_bswap##s(AV_RN##s(p)) # define AV_WL(s, p, v) AV_WN##s(p, av_bswap##s(v)) #else # define AV_RB(s, p) av_bswap##s(AV_RN##s(p)) # define AV_WB(s, p, v) AV_WN##s(p, av_bswap##s(v)) # define AV_RL(s, p) AV_RN##s(p) # define AV_WL(s, p, v) AV_WN##s(p, v) #endif #define AV_RB8(x) (((const uint8_t*)(x))[0]) #define AV_WB8(p, d) do { ((uint8_t*)(p))[0] = (d); } while(0) #define AV_RL8(x) AV_RB8(x) #define AV_WL8(p, d) AV_WB8(p, d) #ifndef AV_RB16 # define AV_RB16(p) AV_RB(16, p) #endif #ifndef AV_WB16 # define AV_WB16(p, v) AV_WB(16, p, v) #endif #ifndef AV_RL16 # define AV_RL16(p) AV_RL(16, p) #endif #ifndef AV_WL16 # define AV_WL16(p, v) AV_WL(16, p, v) #endif #ifndef AV_RB32 # define AV_RB32(p) AV_RB(32, p) #endif #ifndef AV_WB32 # define AV_WB32(p, v) AV_WB(32, p, v) #endif #ifndef AV_RL32 # define AV_RL32(p) AV_RL(32, p) #endif #ifndef AV_WL32 # define AV_WL32(p, v) AV_WL(32, p, v) #endif #ifndef AV_RB64 # define AV_RB64(p) AV_RB(64, p) #endif #ifndef AV_WB64 # define AV_WB64(p, v) AV_WB(64, p, v) #endif #ifndef AV_RL64 # define AV_RL64(p) AV_RL(64, p) #endif #ifndef AV_WL64 # define AV_WL64(p, v) AV_WL(64, p, v) #endif #ifndef AV_RB24 # define AV_RB24(x) \ ((((const uint8_t*)(x))[0] << 16) | \ (((const uint8_t*)(x))[1] << 8) | \ ((const uint8_t*)(x))[2]) #endif #ifndef AV_WB24 # define AV_WB24(p, d) do { \ ((uint8_t*)(p))[2] = (d); \ ((uint8_t*)(p))[1] = (d)>>8; \ ((uint8_t*)(p))[0] = (d)>>16; \ } while(0) #endif #ifndef AV_RL24 # define AV_RL24(x) \ ((((const uint8_t*)(x))[2] << 16) | \ (((const uint8_t*)(x))[1] << 8) | \ ((const uint8_t*)(x))[0]) #endif #ifndef AV_WL24 # define AV_WL24(p, d) do { \ ((uint8_t*)(p))[0] = (d); \ ((uint8_t*)(p))[1] = (d)>>8; \ ((uint8_t*)(p))[2] = (d)>>16; \ } while(0) #endif #ifndef AV_RB48 # define AV_RB48(x) \ (((uint64_t)((const uint8_t*)(x))[0] << 40) | \ ((uint64_t)((const uint8_t*)(x))[1] << 32) | \ ((uint64_t)((const uint8_t*)(x))[2] << 24) | \ ((uint64_t)((const uint8_t*)(x))[3] << 16) | \ ((uint64_t)((const uint8_t*)(x))[4] << 8) | \ (uint64_t)((const uint8_t*)(x))[5]) #endif #ifndef AV_WB48 # define AV_WB48(p, darg) do { \ uint64_t d = (darg); \ ((uint8_t*)(p))[5] = (d); \ ((uint8_t*)(p))[4] = (d)>>8; \ ((uint8_t*)(p))[3] = (d)>>16; \ ((uint8_t*)(p))[2] = (d)>>24; \ ((uint8_t*)(p))[1] = (d)>>32; \ ((uint8_t*)(p))[0] = (d)>>40; \ } while(0) #endif #ifndef AV_RL48 # define AV_RL48(x) \ (((uint64_t)((const uint8_t*)(x))[5] << 40) | \ ((uint64_t)((const uint8_t*)(x))[4] << 32) | \ ((uint64_t)((const uint8_t*)(x))[3] << 24) | \ ((uint64_t)((const uint8_t*)(x))[2] << 16) | \ ((uint64_t)((const uint8_t*)(x))[1] << 8) | \ (uint64_t)((const uint8_t*)(x))[0]) #endif #ifndef AV_WL48 # define AV_WL48(p, darg) do { \ uint64_t d = (darg); \ ((uint8_t*)(p))[0] = (d); \ ((uint8_t*)(p))[1] = (d)>>8; \ ((uint8_t*)(p))[2] = (d)>>16; \ ((uint8_t*)(p))[3] = (d)>>24; \ ((uint8_t*)(p))[4] = (d)>>32; \ ((uint8_t*)(p))[5] = (d)>>40; \ } while(0) #endif /* * The AV_[RW]NA macros access naturally aligned data * in a type-safe way. */ #define AV_RNA(s, p) (((const av_alias##s*)(p))->u##s) #define AV_WNA(s, p, v) (((av_alias##s*)(p))->u##s = (v)) #ifndef AV_RN16A # define AV_RN16A(p) AV_RNA(16, p) #endif #ifndef AV_RN32A # define AV_RN32A(p) AV_RNA(32, p) #endif #ifndef AV_RN64A # define AV_RN64A(p) AV_RNA(64, p) #endif #ifndef AV_WN16A # define AV_WN16A(p, v) AV_WNA(16, p, v) #endif #ifndef AV_WN32A # define AV_WN32A(p, v) AV_WNA(32, p, v) #endif #ifndef AV_WN64A # define AV_WN64A(p, v) AV_WNA(64, p, v) #endif /* * The AV_COPYxxU macros are suitable for copying data to/from unaligned * memory locations. */ #define AV_COPYU(n, d, s) AV_WN##n(d, AV_RN##n(s)); #ifndef AV_COPY16U # define AV_COPY16U(d, s) AV_COPYU(16, d, s) #endif #ifndef AV_COPY32U # define AV_COPY32U(d, s) AV_COPYU(32, d, s) #endif #ifndef AV_COPY64U # define AV_COPY64U(d, s) AV_COPYU(64, d, s) #endif #ifndef AV_COPY128U # define AV_COPY128U(d, s) \ do { \ AV_COPY64U(d, s); \ AV_COPY64U((char *)(d) + 8, (const char *)(s) + 8); \ } while(0) #endif /* Parameters for AV_COPY*, AV_SWAP*, AV_ZERO* must be * naturally aligned. They may be implemented using MMX, * so emms_c() must be called before using any float code * afterwards. */ #define AV_COPY(n, d, s) \ (((av_alias##n*)(d))->u##n = ((const av_alias##n*)(s))->u##n) #ifndef AV_COPY16 # define AV_COPY16(d, s) AV_COPY(16, d, s) #endif #ifndef AV_COPY32 # define AV_COPY32(d, s) AV_COPY(32, d, s) #endif #ifndef AV_COPY64 # define AV_COPY64(d, s) AV_COPY(64, d, s) #endif #ifndef AV_COPY128 # define AV_COPY128(d, s) \ do { \ AV_COPY64(d, s); \ AV_COPY64((char*)(d)+8, (char*)(s)+8); \ } while(0) #endif #define AV_SWAP(n, a, b) FFSWAP(av_alias##n, *(av_alias##n*)(a), *(av_alias##n*)(b)) #ifndef AV_SWAP64 # define AV_SWAP64(a, b) AV_SWAP(64, a, b) #endif #define AV_ZERO(n, d) (((av_alias##n*)(d))->u##n = 0) #ifndef AV_ZERO16 # define AV_ZERO16(d) AV_ZERO(16, d) #endif #ifndef AV_ZERO32 # define AV_ZERO32(d) AV_ZERO(32, d) #endif #ifndef AV_ZERO64 # define AV_ZERO64(d) AV_ZERO(64, d) #endif #ifndef AV_ZERO128 # define AV_ZERO128(d) \ do { \ AV_ZERO64(d); \ AV_ZERO64((char*)(d)+8); \ } while(0) #endif #endif /* AVUTIL_INTREADWRITE_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/lfg.h ================================================ /* * Lagged Fibonacci PRNG * Copyright (c) 2008 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_LFG_H #define AVUTIL_LFG_H typedef struct AVLFG { unsigned int state[64]; int index; } AVLFG; void av_lfg_init(AVLFG *c, unsigned int seed); /** * Get the next random unsigned 32-bit number using an ALFG. * * Please also consider a simple LCG like state= state*1664525+1013904223, * it may be good enough and faster for your specific use case. */ static inline unsigned int av_lfg_get(AVLFG *c){ c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63]; return c->state[c->index++ & 63]; } /** * Get the next random unsigned 32-bit number using a MLFG. * * Please also consider av_lfg_get() above, it is faster. */ static inline unsigned int av_mlfg_get(AVLFG *c){ unsigned int a= c->state[(c->index-55) & 63]; unsigned int b= c->state[(c->index-24) & 63]; return c->state[c->index++ & 63] = 2*a*b+a+b; } /** * Get the next two numbers generated by a Box-Muller Gaussian * generator using the random numbers issued by lfg. * * @param out array where the two generated numbers are placed */ void av_bmg_get(AVLFG *lfg, double out[2]); #endif /* AVUTIL_LFG_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/log.h ================================================ /* * copyright (c) 2006 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_LOG_H #define AVUTIL_LOG_H #include #include "avutil.h" #include "attributes.h" #include "version.h" typedef enum { AV_CLASS_CATEGORY_NA = 0, AV_CLASS_CATEGORY_INPUT, AV_CLASS_CATEGORY_OUTPUT, AV_CLASS_CATEGORY_MUXER, AV_CLASS_CATEGORY_DEMUXER, AV_CLASS_CATEGORY_ENCODER, AV_CLASS_CATEGORY_DECODER, AV_CLASS_CATEGORY_FILTER, AV_CLASS_CATEGORY_BITSTREAM_FILTER, AV_CLASS_CATEGORY_SWSCALER, AV_CLASS_CATEGORY_SWRESAMPLER, AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT = 40, AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT, AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT, AV_CLASS_CATEGORY_DEVICE_OUTPUT, AV_CLASS_CATEGORY_DEVICE_INPUT, AV_CLASS_CATEGORY_NB ///< not part of ABI/API }AVClassCategory; #define AV_IS_INPUT_DEVICE(category) \ (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT) || \ ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT) || \ ((category) == AV_CLASS_CATEGORY_DEVICE_INPUT)) #define AV_IS_OUTPUT_DEVICE(category) \ (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT) || \ ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT) || \ ((category) == AV_CLASS_CATEGORY_DEVICE_OUTPUT)) struct AVOptionRanges; /** * Describe the class of an AVClass context structure. That is an * arbitrary struct of which the first field is a pointer to an * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.). */ typedef struct AVClass { /** * The name of the class; usually it is the same name as the * context structure type to which the AVClass is associated. */ const char* class_name; /** * A pointer to a function which returns the name of a context * instance ctx associated with the class. */ const char* (*item_name)(void* ctx); /** * a pointer to the first option specified in the class if any or NULL * * @see av_set_default_options() */ const struct AVOption *option; /** * LIBAVUTIL_VERSION with which this structure was created. * This is used to allow fields to be added without requiring major * version bumps everywhere. */ int version; /** * Offset in the structure where log_level_offset is stored. * 0 means there is no such variable */ int log_level_offset_offset; /** * Offset in the structure where a pointer to the parent context for * logging is stored. For example a decoder could pass its AVCodecContext * to eval as such a parent context, which an av_log() implementation * could then leverage to display the parent context. * The offset can be NULL. */ int parent_log_context_offset; /** * Return next AVOptions-enabled child or NULL */ void* (*child_next)(void *obj, void *prev); /** * Return an AVClass corresponding to the next potential * AVOptions-enabled child. * * The difference between child_next and this is that * child_next iterates over _already existing_ objects, while * child_class_next iterates over _all possible_ children. */ const struct AVClass* (*child_class_next)(const struct AVClass *prev); /** * Category used for visualization (like color) * This is only set if the category is equal for all objects using this class. * available since version (51 << 16 | 56 << 8 | 100) */ AVClassCategory category; /** * Callback to return the category. * available since version (51 << 16 | 59 << 8 | 100) */ AVClassCategory (*get_category)(void* ctx); /** * Callback to return the supported/allowed ranges. * available since version (52.12) */ int (*query_ranges)(struct AVOptionRanges **, void *obj, const char *key, int flags); } AVClass; /** * @addtogroup lavu_log * * @{ * * @defgroup lavu_log_constants Logging Constants * * @{ */ /** * Print no output. */ #define AV_LOG_QUIET -8 /** * Something went really wrong and we will crash now. */ #define AV_LOG_PANIC 0 /** * Something went wrong and recovery is not possible. * For example, no header was found for a format which depends * on headers or an illegal combination of parameters is used. */ #define AV_LOG_FATAL 8 /** * Something went wrong and cannot losslessly be recovered. * However, not all future data is affected. */ #define AV_LOG_ERROR 16 /** * Something somehow does not look correct. This may or may not * lead to problems. An example would be the use of '-vstrict -2'. */ #define AV_LOG_WARNING 24 /** * Standard information. */ #define AV_LOG_INFO 32 /** * Detailed information. */ #define AV_LOG_VERBOSE 40 /** * Stuff which is only useful for libav* developers. */ #define AV_LOG_DEBUG 48 /** * Extremely verbose debugging, useful for libav* development. */ #define AV_LOG_TRACE 56 #define AV_LOG_MAX_OFFSET (AV_LOG_TRACE - AV_LOG_QUIET) /** * @} */ /** * Sets additional colors for extended debugging sessions. * @code av_log(ctx, AV_LOG_DEBUG|AV_LOG_C(134), "Message in purple\n"); @endcode * Requires 256color terminal support. Uses outside debugging is not * recommended. */ #define AV_LOG_C(x) ((x) << 8) /** * Send the specified message to the log if the level is less than or equal * to the current av_log_level. By default, all logging messages are sent to * stderr. This behavior can be altered by setting a different logging callback * function. * @see av_log_set_callback * * @param avcl A pointer to an arbitrary struct of which the first field is a * pointer to an AVClass struct or NULL if general log. * @param level The importance level of the message expressed using a @ref * lavu_log_constants "Logging Constant". * @param fmt The format string (printf-compatible) that specifies how * subsequent arguments are converted to output. */ void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4); /** * Send the specified message to the log if the level is less than or equal * to the current av_log_level. By default, all logging messages are sent to * stderr. This behavior can be altered by setting a different logging callback * function. * @see av_log_set_callback * * @param avcl A pointer to an arbitrary struct of which the first field is a * pointer to an AVClass struct. * @param level The importance level of the message expressed using a @ref * lavu_log_constants "Logging Constant". * @param fmt The format string (printf-compatible) that specifies how * subsequent arguments are converted to output. * @param vl The arguments referenced by the format string. */ void av_vlog(void *avcl, int level, const char *fmt, va_list vl); /** * Get the current log level * * @see lavu_log_constants * * @return Current log level */ int av_log_get_level(void); /** * Set the log level * * @see lavu_log_constants * * @param level Logging level */ void av_log_set_level(int level); /** * Set the logging callback * * @note The callback must be thread safe, even if the application does not use * threads itself as some codecs are multithreaded. * * @see av_log_default_callback * * @param callback A logging function with a compatible signature. */ void av_log_set_callback(void (*callback)(void*, int, const char*, va_list)); /** * Default logging callback * * It prints the message to stderr, optionally colorizing it. * * @param avcl A pointer to an arbitrary struct of which the first field is a * pointer to an AVClass struct. * @param level The importance level of the message expressed using a @ref * lavu_log_constants "Logging Constant". * @param fmt The format string (printf-compatible) that specifies how * subsequent arguments are converted to output. * @param vl The arguments referenced by the format string. */ void av_log_default_callback(void *avcl, int level, const char *fmt, va_list vl); /** * Return the context name * * @param ctx The AVClass context * * @return The AVClass class_name */ const char* av_default_item_name(void* ctx); AVClassCategory av_default_get_category(void *ptr); /** * Format a line of log the same way as the default callback. * @param line buffer to receive the formatted line * @param line_size size of the buffer * @param print_prefix used to store whether the prefix must be printed; * must point to a persistent integer initially set to 1 */ void av_log_format_line(void *ptr, int level, const char *fmt, va_list vl, char *line, int line_size, int *print_prefix); /** * Format a line of log the same way as the default callback. * @param line buffer to receive the formatted line; * may be NULL if line_size is 0 * @param line_size size of the buffer; at most line_size-1 characters will * be written to the buffer, plus one null terminator * @param print_prefix used to store whether the prefix must be printed; * must point to a persistent integer initially set to 1 * @return Returns a negative value if an error occurred, otherwise returns * the number of characters that would have been written for a * sufficiently large buffer, not including the terminating null * character. If the return value is not less than line_size, it means * that the log message was truncated to fit the buffer. */ int av_log_format_line2(void *ptr, int level, const char *fmt, va_list vl, char *line, int line_size, int *print_prefix); #if FF_API_DLOG /** * av_dlog macros * @deprecated unused * Useful to print debug messages that shouldn't get compiled in normally. */ #ifdef DEBUG # define av_dlog(pctx, ...) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__) #else # define av_dlog(pctx, ...) do { if (0) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__); } while (0) #endif #endif /* FF_API_DLOG */ /** * Skip repeated messages, this requires the user app to use av_log() instead of * (f)printf as the 2 would otherwise interfere and lead to * "Last message repeated x times" messages below (f)printf messages with some * bad luck. * Also to receive the last, "last repeated" line if any, the user app must * call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end */ #define AV_LOG_SKIP_REPEATED 1 /** * Include the log severity in messages originating from codecs. * * Results in messages such as: * [rawvideo @ 0xDEADBEEF] [error] encode did not produce valid pts */ #define AV_LOG_PRINT_LEVEL 2 void av_log_set_flags(int arg); int av_log_get_flags(void); /** * @} */ #endif /* AVUTIL_LOG_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/macros.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * @ingroup lavu * Utility Preprocessor macros */ #ifndef AVUTIL_MACROS_H #define AVUTIL_MACROS_H /** * @addtogroup preproc_misc Preprocessor String Macros * * String manipulation macros * * @{ */ #define AV_STRINGIFY(s) AV_TOSTRING(s) #define AV_TOSTRING(s) #s #define AV_GLUE(a, b) a ## b #define AV_JOIN(a, b) AV_GLUE(a, b) /** * @} */ #define AV_PRAGMA(s) _Pragma(#s) #define FFALIGN(x, a) (((x)+(a)-1)&~((a)-1)) #endif /* AVUTIL_MACROS_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/mastering_display_metadata.h ================================================ /** * Copyright (c) 2016 Neil Birkbeck * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_MASTERING_DISPLAY_METADATA_H #define AVUTIL_MASTERING_DISPLAY_METADATA_H #include "frame.h" #include "rational.h" /** * Mastering display metadata capable of representing the color volume of * the display used to master the content (SMPTE 2086:2014). * * To be used as payload of a AVFrameSideData or AVPacketSideData with the * appropriate type. * * @note The struct should be allocated with av_mastering_display_metadata_alloc() * and its size is not a part of the public ABI. */ typedef struct AVMasteringDisplayMetadata { /** * CIE 1931 xy chromaticity coords of color primaries (r, g, b order). */ AVRational display_primaries[3][2]; /** * CIE 1931 xy chromaticity coords of white point. */ AVRational white_point[2]; /** * Min luminance of mastering display (cd/m^2). */ AVRational min_luminance; /** * Max luminance of mastering display (cd/m^2). */ AVRational max_luminance; /** * Flag indicating whether the display primaries (and white point) are set. */ int has_primaries; /** * Flag indicating whether the luminance (min_ and max_) have been set. */ int has_luminance; } AVMasteringDisplayMetadata; /** * Allocate an AVMasteringDisplayMetadata structure and set its fields to * default values. The resulting struct can be freed using av_freep(). * * @return An AVMasteringDisplayMetadata filled with default values or NULL * on failure. */ AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc(void); /** * Allocate a complete AVMasteringDisplayMetadata and add it to the frame. * * @param frame The frame which side data is added to. * * @return The AVMasteringDisplayMetadata structure to be filled by caller. */ AVMasteringDisplayMetadata *av_mastering_display_metadata_create_side_data(AVFrame *frame); #endif /* AVUTIL_MASTERING_DISPLAY_METADATA_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/mathematics.h ================================================ /* * copyright (c) 2005-2012 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * @addtogroup lavu_math * Mathematical utilities for working with timestamp and time base. */ #ifndef AVUTIL_MATHEMATICS_H #define AVUTIL_MATHEMATICS_H #include #include #include "attributes.h" #include "rational.h" #include "intfloat.h" #ifndef M_E #define M_E 2.7182818284590452354 /* e */ #endif #ifndef M_LN2 #define M_LN2 0.69314718055994530942 /* log_e 2 */ #endif #ifndef M_LN10 #define M_LN10 2.30258509299404568402 /* log_e 10 */ #endif #ifndef M_LOG2_10 #define M_LOG2_10 3.32192809488736234787 /* log_2 10 */ #endif #ifndef M_PHI #define M_PHI 1.61803398874989484820 /* phi / golden ratio */ #endif #ifndef M_PI #define M_PI 3.14159265358979323846 /* pi */ #endif #ifndef M_PI_2 #define M_PI_2 1.57079632679489661923 /* pi/2 */ #endif #ifndef M_SQRT1_2 #define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ #endif #ifndef M_SQRT2 #define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ #endif #ifndef NAN #define NAN av_int2float(0x7fc00000) #endif #ifndef INFINITY #define INFINITY av_int2float(0x7f800000) #endif /** * @addtogroup lavu_math * * @{ */ /** * Rounding methods. */ enum AVRounding { AV_ROUND_ZERO = 0, ///< Round toward zero. AV_ROUND_INF = 1, ///< Round away from zero. AV_ROUND_DOWN = 2, ///< Round toward -infinity. AV_ROUND_UP = 3, ///< Round toward +infinity. AV_ROUND_NEAR_INF = 5, ///< Round to nearest and halfway cases away from zero. /** * Flag telling rescaling functions to pass `INT64_MIN`/`MAX` through * unchanged, avoiding special cases for #AV_NOPTS_VALUE. * * Unlike other values of the enumeration AVRounding, this value is a * bitmask that must be used in conjunction with another value of the * enumeration through a bitwise OR, in order to set behavior for normal * cases. * * @code{.c} * av_rescale_rnd(3, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); * // Rescaling 3: * // Calculating 3 * 1 / 2 * // 3 / 2 is rounded up to 2 * // => 2 * * av_rescale_rnd(AV_NOPTS_VALUE, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); * // Rescaling AV_NOPTS_VALUE: * // AV_NOPTS_VALUE == INT64_MIN * // AV_NOPTS_VALUE is passed through * // => AV_NOPTS_VALUE * @endcode */ AV_ROUND_PASS_MINMAX = 8192, }; /** * Compute the greatest common divisor of two integer operands. * * @param a,b Operands * @return GCD of a and b up to sign; if a >= 0 and b >= 0, return value is >= 0; * if a == 0 and b == 0, returns 0. */ int64_t av_const av_gcd(int64_t a, int64_t b); /** * Rescale a 64-bit integer with rounding to nearest. * * The operation is mathematically equivalent to `a * b / c`, but writing that * directly can overflow. * * This function is equivalent to av_rescale_rnd() with #AV_ROUND_NEAR_INF. * * @see av_rescale_rnd(), av_rescale_q(), av_rescale_q_rnd() */ int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const; /** * Rescale a 64-bit integer with specified rounding. * * The operation is mathematically equivalent to `a * b / c`, but writing that * directly can overflow, and does not support different rounding methods. * * @see av_rescale(), av_rescale_q(), av_rescale_q_rnd() */ int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd) av_const; /** * Rescale a 64-bit integer by 2 rational numbers. * * The operation is mathematically equivalent to `a * bq / cq`. * * This function is equivalent to av_rescale_q_rnd() with #AV_ROUND_NEAR_INF. * * @see av_rescale(), av_rescale_rnd(), av_rescale_q_rnd() */ int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const; /** * Rescale a 64-bit integer by 2 rational numbers with specified rounding. * * The operation is mathematically equivalent to `a * bq / cq`. * * @see av_rescale(), av_rescale_rnd(), av_rescale_q() */ int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, enum AVRounding rnd) av_const; /** * Compare two timestamps each in its own time base. * * @return One of the following values: * - -1 if `ts_a` is before `ts_b` * - 1 if `ts_a` is after `ts_b` * - 0 if they represent the same position * * @warning * The result of the function is undefined if one of the timestamps is outside * the `int64_t` range when represented in the other's timebase. */ int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b); /** * Compare the remainders of two integer operands divided by a common divisor. * * In other words, compare the least significant `log2(mod)` bits of integers * `a` and `b`. * * @code{.c} * av_compare_mod(0x11, 0x02, 0x10) < 0 // since 0x11 % 0x10 (0x1) < 0x02 % 0x10 (0x2) * av_compare_mod(0x11, 0x02, 0x20) > 0 // since 0x11 % 0x20 (0x11) > 0x02 % 0x20 (0x02) * @endcode * * @param a,b Operands * @param mod Divisor; must be a power of 2 * @return * - a negative value if `a % mod < b % mod` * - a positive value if `a % mod > b % mod` * - zero if `a % mod == b % mod` */ int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod); /** * Rescale a timestamp while preserving known durations. * * This function is designed to be called per audio packet to scale the input * timestamp to a different time base. Compared to a simple av_rescale_q() * call, this function is robust against possible inconsistent frame durations. * * The `last` parameter is a state variable that must be preserved for all * subsequent calls for the same stream. For the first call, `*last` should be * initialized to #AV_NOPTS_VALUE. * * @param[in] in_tb Input time base * @param[in] in_ts Input timestamp * @param[in] fs_tb Duration time base; typically this is finer-grained * (greater) than `in_tb` and `out_tb` * @param[in] duration Duration till the next call to this function (i.e. * duration of the current packet/frame) * @param[in,out] last Pointer to a timestamp expressed in terms of * `fs_tb`, acting as a state variable * @param[in] out_tb Output timebase * @return Timestamp expressed in terms of `out_tb` * * @note In the context of this function, "duration" is in term of samples, not * seconds. */ int64_t av_rescale_delta(AVRational in_tb, int64_t in_ts, AVRational fs_tb, int duration, int64_t *last, AVRational out_tb); /** * Add a value to a timestamp. * * This function guarantees that when the same value is repeatly added that * no accumulation of rounding errors occurs. * * @param[in] ts Input timestamp * @param[in] ts_tb Input timestamp time base * @param[in] inc Value to be added * @param[in] inc_tb Time base of `inc` */ int64_t av_add_stable(AVRational ts_tb, int64_t ts, AVRational inc_tb, int64_t inc); /** * @} */ #endif /* AVUTIL_MATHEMATICS_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/md5.h ================================================ /* * copyright (c) 2006 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * @ingroup lavu_md5 * Public header for MD5 hash function implementation. */ #ifndef AVUTIL_MD5_H #define AVUTIL_MD5_H #include #include "attributes.h" #include "version.h" /** * @defgroup lavu_md5 MD5 * @ingroup lavu_hash * MD5 hash function implementation. * * @{ */ extern const int av_md5_size; struct AVMD5; /** * Allocate an AVMD5 context. */ struct AVMD5 *av_md5_alloc(void); /** * Initialize MD5 hashing. * * @param ctx pointer to the function context (of size av_md5_size) */ void av_md5_init(struct AVMD5 *ctx); /** * Update hash value. * * @param ctx hash function context * @param src input data to update hash with * @param len input data length */ void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, int len); /** * Finish hashing and output digest value. * * @param ctx hash function context * @param dst buffer where output digest value is stored */ void av_md5_final(struct AVMD5 *ctx, uint8_t *dst); /** * Hash an array of data. * * @param dst The output buffer to write the digest into * @param src The data to hash * @param len The length of the data, in bytes */ void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len); /** * @} */ #endif /* AVUTIL_MD5_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/mem.h ================================================ /* * copyright (c) 2006 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * @ingroup lavu_mem * Memory handling functions */ #ifndef AVUTIL_MEM_H #define AVUTIL_MEM_H #include #include #include "attributes.h" #include "error.h" #include "avutil.h" /** * @addtogroup lavu_mem * Utilities for manipulating memory. * * FFmpeg has several applications of memory that are not required of a typical * program. For example, the computing-heavy components like video decoding and * encoding can be sped up significantly through the use of aligned memory. * * However, for each of FFmpeg's applications of memory, there might not be a * recognized or standardized API for that specific use. Memory alignment, for * instance, varies wildly depending on operating systems, architectures, and * compilers. Hence, this component of @ref libavutil is created to make * dealing with memory consistently possible on all platforms. * * @{ * * @defgroup lavu_mem_macros Alignment Macros * Helper macros for declaring aligned variables. * @{ */ /** * @def DECLARE_ALIGNED(n,t,v) * Declare a variable that is aligned in memory. * * @code{.c} * DECLARE_ALIGNED(16, uint16_t, aligned_int) = 42; * DECLARE_ALIGNED(32, uint8_t, aligned_array)[128]; * * // The default-alignment equivalent would be * uint16_t aligned_int = 42; * uint8_t aligned_array[128]; * @endcode * * @param n Minimum alignment in bytes * @param t Type of the variable (or array element) * @param v Name of the variable */ /** * @def DECLARE_ASM_CONST(n,t,v) * Declare a static constant aligned variable appropriate for use in inline * assembly code. * * @code{.c} * DECLARE_ASM_CONST(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008); * @endcode * * @param n Minimum alignment in bytes * @param t Type of the variable (or array element) * @param v Name of the variable */ #if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C) #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v #define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v #elif defined(__TI_COMPILER_VERSION__) #define DECLARE_ALIGNED(n,t,v) \ AV_PRAGMA(DATA_ALIGN(v,n)) \ t __attribute__((aligned(n))) v #define DECLARE_ASM_CONST(n,t,v) \ AV_PRAGMA(DATA_ALIGN(v,n)) \ static const t __attribute__((aligned(n))) v #elif defined(__GNUC__) #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v #elif defined(_MSC_VER) #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v #else #define DECLARE_ALIGNED(n,t,v) t v #define DECLARE_ASM_CONST(n,t,v) static const t v #endif /** * @} */ /** * @defgroup lavu_mem_attrs Function Attributes * Function attributes applicable to memory handling functions. * * These function attributes can help compilers emit more useful warnings, or * generate better code. * @{ */ /** * @def av_malloc_attrib * Function attribute denoting a malloc-like function. * * @see Function attribute `malloc` in GCC's documentation */ #if AV_GCC_VERSION_AT_LEAST(3,1) #define av_malloc_attrib __attribute__((__malloc__)) #else #define av_malloc_attrib #endif /** * @def av_alloc_size(...) * Function attribute used on a function that allocates memory, whose size is * given by the specified parameter(s). * * @code{.c} * void *av_malloc(size_t size) av_alloc_size(1); * void *av_calloc(size_t nmemb, size_t size) av_alloc_size(1, 2); * @endcode * * @param ... One or two parameter indexes, separated by a comma * * @see Function attribute `alloc_size` in GCC's documentation */ #if AV_GCC_VERSION_AT_LEAST(4,3) #define av_alloc_size(...) __attribute__((alloc_size(__VA_ARGS__))) #else #define av_alloc_size(...) #endif /** * @} */ /** * @defgroup lavu_mem_funcs Heap Management * Functions responsible for allocating, freeing, and copying memory. * * All memory allocation functions have a built-in upper limit of `INT_MAX` * bytes. This may be changed with av_max_alloc(), although exercise extreme * caution when doing so. * * @{ */ /** * Allocate a memory block with alignment suitable for all memory accesses * (including vectors if available on the CPU). * * @param size Size in bytes for the memory block to be allocated * @return Pointer to the allocated block, or `NULL` if the block cannot * be allocated * @see av_mallocz() */ void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1); /** * Allocate a memory block with alignment suitable for all memory accesses * (including vectors if available on the CPU) and zero all the bytes of the * block. * * @param size Size in bytes for the memory block to be allocated * @return Pointer to the allocated block, or `NULL` if it cannot be allocated * @see av_malloc() */ void *av_mallocz(size_t size) av_malloc_attrib av_alloc_size(1); /** * Allocate a memory block for an array with av_malloc(). * * The allocated memory will have size `size * nmemb` bytes. * * @param nmemb Number of element * @param size Size of a single element * @return Pointer to the allocated block, or `NULL` if the block cannot * be allocated * @see av_malloc() */ av_alloc_size(1, 2) static inline void *av_malloc_array(size_t nmemb, size_t size) { if (!size || nmemb >= INT_MAX / size) return NULL; return av_malloc(nmemb * size); } /** * Allocate a memory block for an array with av_mallocz(). * * The allocated memory will have size `size * nmemb` bytes. * * @param nmemb Number of elements * @param size Size of the single element * @return Pointer to the allocated block, or `NULL` if the block cannot * be allocated * * @see av_mallocz() * @see av_malloc_array() */ av_alloc_size(1, 2) static inline void *av_mallocz_array(size_t nmemb, size_t size) { if (!size || nmemb >= INT_MAX / size) return NULL; return av_mallocz(nmemb * size); } /** * Non-inlined equivalent of av_mallocz_array(). * * Created for symmetry with the calloc() C function. */ void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib; /** * Allocate, reallocate, or free a block of memory. * * If `ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is * zero, free the memory block pointed to by `ptr`. Otherwise, expand or * shrink that block of memory according to `size`. * * @param ptr Pointer to a memory block already allocated with * av_realloc() or `NULL` * @param size Size in bytes of the memory block to be allocated or * reallocated * * @return Pointer to a newly-reallocated block or `NULL` if the block * cannot be reallocated or the function is used to free the memory block * * @warning Unlike av_malloc(), the returned pointer is not guaranteed to be * correctly aligned. * @see av_fast_realloc() * @see av_reallocp() */ void *av_realloc(void *ptr, size_t size) av_alloc_size(2); /** * Allocate, reallocate, or free a block of memory through a pointer to a * pointer. * * If `*ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is * zero, free the memory block pointed to by `*ptr`. Otherwise, expand or * shrink that block of memory according to `size`. * * @param[in,out] ptr Pointer to a pointer to a memory block already allocated * with av_realloc(), or a pointer to `NULL`. The pointer * is updated on success, or freed on failure. * @param[in] size Size in bytes for the memory block to be allocated or * reallocated * * @return Zero on success, an AVERROR error code on failure * * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be * correctly aligned. */ av_warn_unused_result int av_reallocp(void *ptr, size_t size); /** * Allocate, reallocate, or free a block of memory. * * This function does the same thing as av_realloc(), except: * - It takes two size arguments and allocates `nelem * elsize` bytes, * after checking the result of the multiplication for integer overflow. * - It frees the input block in case of failure, thus avoiding the memory * leak with the classic * @code{.c} * buf = realloc(buf); * if (!buf) * return -1; * @endcode * pattern. */ void *av_realloc_f(void *ptr, size_t nelem, size_t elsize); /** * Allocate, reallocate, or free an array. * * If `ptr` is `NULL` and `nmemb` > 0, allocate a new block. If * `nmemb` is zero, free the memory block pointed to by `ptr`. * * @param ptr Pointer to a memory block already allocated with * av_realloc() or `NULL` * @param nmemb Number of elements in the array * @param size Size of the single element of the array * * @return Pointer to a newly-reallocated block or NULL if the block * cannot be reallocated or the function is used to free the memory block * * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be * correctly aligned. * @see av_reallocp_array() */ av_alloc_size(2, 3) void *av_realloc_array(void *ptr, size_t nmemb, size_t size); /** * Allocate, reallocate, or free an array through a pointer to a pointer. * * If `*ptr` is `NULL` and `nmemb` > 0, allocate a new block. If `nmemb` is * zero, free the memory block pointed to by `*ptr`. * * @param[in,out] ptr Pointer to a pointer to a memory block already * allocated with av_realloc(), or a pointer to `NULL`. * The pointer is updated on success, or freed on failure. * @param[in] nmemb Number of elements * @param[in] size Size of the single element * * @return Zero on success, an AVERROR error code on failure * * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be * correctly aligned. */ av_alloc_size(2, 3) int av_reallocp_array(void *ptr, size_t nmemb, size_t size); /** * Reallocate the given buffer if it is not large enough, otherwise do nothing. * * If the given buffer is `NULL`, then a new uninitialized buffer is allocated. * * If the given buffer is not large enough, and reallocation fails, `NULL` is * returned and `*size` is set to 0, but the original buffer is not changed or * freed. * * A typical use pattern follows: * * @code{.c} * uint8_t *buf = ...; * uint8_t *new_buf = av_fast_realloc(buf, ¤t_size, size_needed); * if (!new_buf) { * // Allocation failed; clean up original buffer * av_freep(&buf); * return AVERROR(ENOMEM); * } * @endcode * * @param[in,out] ptr Already allocated buffer, or `NULL` * @param[in,out] size Pointer to current size of buffer `ptr`. `*size` is * changed to `min_size` in case of success or 0 in * case of failure * @param[in] min_size New size of buffer `ptr` * @return `ptr` if the buffer is large enough, a pointer to newly reallocated * buffer if the buffer was not large enough, or `NULL` in case of * error * @see av_realloc() * @see av_fast_malloc() */ void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size); /** * Allocate a buffer, reusing the given one if large enough. * * Contrary to av_fast_realloc(), the current buffer contents might not be * preserved and on error the old buffer is freed, thus no special handling to * avoid memleaks is necessary. * * `*ptr` is allowed to be `NULL`, in which case allocation always happens if * `size_needed` is greater than 0. * * @code{.c} * uint8_t *buf = ...; * av_fast_malloc(&buf, ¤t_size, size_needed); * if (!buf) { * // Allocation failed; buf already freed * return AVERROR(ENOMEM); * } * @endcode * * @param[in,out] ptr Pointer to pointer to an already allocated buffer. * `*ptr` will be overwritten with pointer to new * buffer on success or `NULL` on failure * @param[in,out] size Pointer to current size of buffer `*ptr`. `*size` is * changed to `min_size` in case of success or 0 in * case of failure * @param[in] min_size New size of buffer `*ptr` * @see av_realloc() * @see av_fast_mallocz() */ void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size); /** * Allocate and clear a buffer, reusing the given one if large enough. * * Like av_fast_malloc(), but all newly allocated space is initially cleared. * Reused buffer is not cleared. * * `*ptr` is allowed to be `NULL`, in which case allocation always happens if * `size_needed` is greater than 0. * * @param[in,out] ptr Pointer to pointer to an already allocated buffer. * `*ptr` will be overwritten with pointer to new * buffer on success or `NULL` on failure * @param[in,out] size Pointer to current size of buffer `*ptr`. `*size` is * changed to `min_size` in case of success or 0 in * case of failure * @param[in] min_size New size of buffer `*ptr` * @see av_fast_malloc() */ void av_fast_mallocz(void *ptr, unsigned int *size, size_t min_size); /** * Free a memory block which has been allocated with a function of av_malloc() * or av_realloc() family. * * @param ptr Pointer to the memory block which should be freed. * * @note `ptr = NULL` is explicitly allowed. * @note It is recommended that you use av_freep() instead, to prevent leaving * behind dangling pointers. * @see av_freep() */ void av_free(void *ptr); /** * Free a memory block which has been allocated with a function of av_malloc() * or av_realloc() family, and set the pointer pointing to it to `NULL`. * * @code{.c} * uint8_t *buf = av_malloc(16); * av_free(buf); * // buf now contains a dangling pointer to freed memory, and accidental * // dereference of buf will result in a use-after-free, which may be a * // security risk. * * uint8_t *buf = av_malloc(16); * av_freep(&buf); * // buf is now NULL, and accidental dereference will only result in a * // NULL-pointer dereference. * @endcode * * @param ptr Pointer to the pointer to the memory block which should be freed * @note `*ptr = NULL` is safe and leads to no action. * @see av_free() */ void av_freep(void *ptr); /** * Duplicate a string. * * @param s String to be duplicated * @return Pointer to a newly-allocated string containing a * copy of `s` or `NULL` if the string cannot be allocated * @see av_strndup() */ char *av_strdup(const char *s) av_malloc_attrib; /** * Duplicate a substring of a string. * * @param s String to be duplicated * @param len Maximum length of the resulting string (not counting the * terminating byte) * @return Pointer to a newly-allocated string containing a * substring of `s` or `NULL` if the string cannot be allocated */ char *av_strndup(const char *s, size_t len) av_malloc_attrib; /** * Duplicate a buffer with av_malloc(). * * @param p Buffer to be duplicated * @param size Size in bytes of the buffer copied * @return Pointer to a newly allocated buffer containing a * copy of `p` or `NULL` if the buffer cannot be allocated */ void *av_memdup(const void *p, size_t size); /** * Overlapping memcpy() implementation. * * @param dst Destination buffer * @param back Number of bytes back to start copying (i.e. the initial size of * the overlapping window); must be > 0 * @param cnt Number of bytes to copy; must be >= 0 * * @note `cnt > back` is valid, this will copy the bytes we just copied, * thus creating a repeating pattern with a period length of `back`. */ void av_memcpy_backptr(uint8_t *dst, int back, int cnt); /** * @} */ /** * @defgroup lavu_mem_dynarray Dynamic Array * * Utilities to make an array grow when needed. * * Sometimes, the programmer would want to have an array that can grow when * needed. The libavutil dynamic array utilities fill that need. * * libavutil supports two systems of appending elements onto a dynamically * allocated array, the first one storing the pointer to the value in the * array, and the second storing the value directly. In both systems, the * caller is responsible for maintaining a variable containing the length of * the array, as well as freeing of the array after use. * * The first system stores pointers to values in a block of dynamically * allocated memory. Since only pointers are stored, the function does not need * to know the size of the type. Both av_dynarray_add() and * av_dynarray_add_nofree() implement this system. * * @code * type **array = NULL; //< an array of pointers to values * int nb = 0; //< a variable to keep track of the length of the array * * type to_be_added = ...; * type to_be_added2 = ...; * * av_dynarray_add(&array, &nb, &to_be_added); * if (nb == 0) * return AVERROR(ENOMEM); * * av_dynarray_add(&array, &nb, &to_be_added2); * if (nb == 0) * return AVERROR(ENOMEM); * * // Now: * // nb == 2 * // &to_be_added == array[0] * // &to_be_added2 == array[1] * * av_freep(&array); * @endcode * * The second system stores the value directly in a block of memory. As a * result, the function has to know the size of the type. av_dynarray2_add() * implements this mechanism. * * @code * type *array = NULL; //< an array of values * int nb = 0; //< a variable to keep track of the length of the array * * type to_be_added = ...; * type to_be_added2 = ...; * * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), NULL); * if (!addr) * return AVERROR(ENOMEM); * memcpy(addr, &to_be_added, sizeof(to_be_added)); * * // Shortcut of the above. * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), * (const void *)&to_be_added2); * if (!addr) * return AVERROR(ENOMEM); * * // Now: * // nb == 2 * // to_be_added == array[0] * // to_be_added2 == array[1] * * av_freep(&array); * @endcode * * @{ */ /** * Add the pointer to an element to a dynamic array. * * The array to grow is supposed to be an array of pointers to * structures, and the element to add must be a pointer to an already * allocated structure. * * The array is reallocated when its size reaches powers of 2. * Therefore, the amortized cost of adding an element is constant. * * In case of success, the pointer to the array is updated in order to * point to the new grown array, and the number pointed to by `nb_ptr` * is incremented. * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and * `*nb_ptr` is set to 0. * * @param[in,out] tab_ptr Pointer to the array to grow * @param[in,out] nb_ptr Pointer to the number of elements in the array * @param[in] elem Element to add * @see av_dynarray_add_nofree(), av_dynarray2_add() */ void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem); /** * Add an element to a dynamic array. * * Function has the same functionality as av_dynarray_add(), * but it doesn't free memory on fails. It returns error code * instead and leave current buffer untouched. * * @return >=0 on success, negative otherwise * @see av_dynarray_add(), av_dynarray2_add() */ av_warn_unused_result int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem); /** * Add an element of size `elem_size` to a dynamic array. * * The array is reallocated when its number of elements reaches powers of 2. * Therefore, the amortized cost of adding an element is constant. * * In case of success, the pointer to the array is updated in order to * point to the new grown array, and the number pointed to by `nb_ptr` * is incremented. * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and * `*nb_ptr` is set to 0. * * @param[in,out] tab_ptr Pointer to the array to grow * @param[in,out] nb_ptr Pointer to the number of elements in the array * @param[in] elem_size Size in bytes of an element in the array * @param[in] elem_data Pointer to the data of the element to add. If * `NULL`, the space of the newly added element is * allocated but left uninitialized. * * @return Pointer to the data of the element to copy in the newly allocated * space * @see av_dynarray_add(), av_dynarray_add_nofree() */ void *av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size, const uint8_t *elem_data); /** * @} */ /** * @defgroup lavu_mem_misc Miscellaneous Functions * * Other functions related to memory allocation. * * @{ */ /** * Multiply two `size_t` values checking for overflow. * * @param[in] a,b Operands of multiplication * @param[out] r Pointer to the result of the operation * @return 0 on success, AVERROR(EINVAL) on overflow */ static inline int av_size_mult(size_t a, size_t b, size_t *r) { size_t t = a * b; /* Hack inspired from glibc: don't try the division if nelem and elsize * are both less than sqrt(SIZE_MAX). */ if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b) return AVERROR(EINVAL); *r = t; return 0; } /** * Set the maximum size that may be allocated in one block. * * The value specified with this function is effective for all libavutil's @ref * lavu_mem_funcs "heap management functions." * * By default, the max value is defined as `INT_MAX`. * * @param max Value to be set as the new maximum size * * @warning Exercise extreme caution when using this function. Don't touch * this if you do not understand the full consequence of doing so. */ void av_max_alloc(size_t max); /** * @} * @} */ #endif /* AVUTIL_MEM_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/motion_vector.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_MOTION_VECTOR_H #define AVUTIL_MOTION_VECTOR_H #include typedef struct AVMotionVector { /** * Where the current macroblock comes from; negative value when it comes * from the past, positive value when it comes from the future. * XXX: set exact relative ref frame reference instead of a +/- 1 "direction". */ int32_t source; /** * Width and height of the block. */ uint8_t w, h; /** * Absolute source position. Can be outside the frame area. */ int16_t src_x, src_y; /** * Absolute destination position. Can be outside the frame area. */ int16_t dst_x, dst_y; /** * Extra flag information. * Currently unused. */ uint64_t flags; /** * Motion vector * src_x = dst_x + motion_x / motion_scale * src_y = dst_y + motion_y / motion_scale */ int32_t motion_x, motion_y; uint16_t motion_scale; } AVMotionVector; #endif /* AVUTIL_MOTION_VECTOR_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/murmur3.h ================================================ /* * Copyright (C) 2013 Reimar Döffinger * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * @ingroup lavu_murmur3 * Public header for MurmurHash3 hash function implementation. */ #ifndef AVUTIL_MURMUR3_H #define AVUTIL_MURMUR3_H #include /** * @defgroup lavu_murmur3 Murmur3 * @ingroup lavu_hash * MurmurHash3 hash function implementation. * * MurmurHash3 is a non-cryptographic hash function, of which three * incompatible versions were created by its inventor Austin Appleby: * * - 32-bit output * - 128-bit output for 32-bit platforms * - 128-bit output for 64-bit platforms * * FFmpeg only implements the last variant: 128-bit output designed for 64-bit * platforms. Even though the hash function was designed for 64-bit platforms, * the function in reality works on 32-bit systems too, only with reduced * performance. * * @anchor lavu_murmur3_seedinfo * By design, MurmurHash3 requires a seed to operate. In response to this, * libavutil provides two functions for hash initiation, one that requires a * seed (av_murmur3_init_seeded()) and one that uses a fixed arbitrary integer * as the seed, and therefore does not (av_murmur3_init()). * * To make hashes comparable, you should provide the same seed for all calls to * this hash function -- if you are supplying one yourself, that is. * * @{ */ /** * Allocate an AVMurMur3 hash context. * * @return Uninitialized hash context or `NULL` in case of error */ struct AVMurMur3 *av_murmur3_alloc(void); /** * Initialize or reinitialize an AVMurMur3 hash context with a seed. * * @param[out] c Hash context * @param[in] seed Random seed * * @see av_murmur3_init() * @see @ref lavu_murmur3_seedinfo "Detailed description" on a discussion of * seeds for MurmurHash3. */ void av_murmur3_init_seeded(struct AVMurMur3 *c, uint64_t seed); /** * Initialize or reinitialize an AVMurMur3 hash context. * * Equivalent to av_murmur3_init_seeded() with a built-in seed. * * @param[out] c Hash context * * @see av_murmur3_init_seeded() * @see @ref lavu_murmur3_seedinfo "Detailed description" on a discussion of * seeds for MurmurHash3. */ void av_murmur3_init(struct AVMurMur3 *c); /** * Update hash context with new data. * * @param[out] c Hash context * @param[in] src Input data to update hash with * @param[in] len Number of bytes to read from `src` */ void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, int len); /** * Finish hashing and output digest value. * * @param[in,out] c Hash context * @param[out] dst Buffer where output digest value is stored */ void av_murmur3_final(struct AVMurMur3 *c, uint8_t dst[16]); /** * @} */ #endif /* AVUTIL_MURMUR3_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/opt.h ================================================ /* * AVOptions * copyright (c) 2005 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_OPT_H #define AVUTIL_OPT_H /** * @file * AVOptions */ #include "rational.h" #include "avutil.h" #include "dict.h" #include "log.h" #include "pixfmt.h" #include "samplefmt.h" #include "version.h" /** * @defgroup avoptions AVOptions * @ingroup lavu_data * @{ * AVOptions provide a generic system to declare options on arbitrary structs * ("objects"). An option can have a help text, a type and a range of possible * values. Options may then be enumerated, read and written to. * * @section avoptions_implement Implementing AVOptions * This section describes how to add AVOptions capabilities to a struct. * * All AVOptions-related information is stored in an AVClass. Therefore * the first member of the struct should be a pointer to an AVClass describing it. * The option field of the AVClass must be set to a NULL-terminated static array * of AVOptions. Each AVOption must have a non-empty name, a type, a default * value and for number-type AVOptions also a range of allowed values. It must * also declare an offset in bytes from the start of the struct, where the field * associated with this AVOption is located. Other fields in the AVOption struct * should also be set when applicable, but are not required. * * The following example illustrates an AVOptions-enabled struct: * @code * typedef struct test_struct { * const AVClass *class; * int int_opt; * char *str_opt; * uint8_t *bin_opt; * int bin_len; * } test_struct; * * static const AVOption test_options[] = { * { "test_int", "This is a test option of int type.", offsetof(test_struct, int_opt), * AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX }, * { "test_str", "This is a test option of string type.", offsetof(test_struct, str_opt), * AV_OPT_TYPE_STRING }, * { "test_bin", "This is a test option of binary type.", offsetof(test_struct, bin_opt), * AV_OPT_TYPE_BINARY }, * { NULL }, * }; * * static const AVClass test_class = { * .class_name = "test class", * .item_name = av_default_item_name, * .option = test_options, * .version = LIBAVUTIL_VERSION_INT, * }; * @endcode * * Next, when allocating your struct, you must ensure that the AVClass pointer * is set to the correct value. Then, av_opt_set_defaults() can be called to * initialize defaults. After that the struct is ready to be used with the * AVOptions API. * * When cleaning up, you may use the av_opt_free() function to automatically * free all the allocated string and binary options. * * Continuing with the above example: * * @code * test_struct *alloc_test_struct(void) * { * test_struct *ret = av_mallocz(sizeof(*ret)); * ret->class = &test_class; * av_opt_set_defaults(ret); * return ret; * } * void free_test_struct(test_struct **foo) * { * av_opt_free(*foo); * av_freep(foo); * } * @endcode * * @subsection avoptions_implement_nesting Nesting * It may happen that an AVOptions-enabled struct contains another * AVOptions-enabled struct as a member (e.g. AVCodecContext in * libavcodec exports generic options, while its priv_data field exports * codec-specific options). In such a case, it is possible to set up the * parent struct to export a child's options. To do that, simply * implement AVClass.child_next() and AVClass.child_class_next() in the * parent struct's AVClass. * Assuming that the test_struct from above now also contains a * child_struct field: * * @code * typedef struct child_struct { * AVClass *class; * int flags_opt; * } child_struct; * static const AVOption child_opts[] = { * { "test_flags", "This is a test option of flags type.", * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX }, * { NULL }, * }; * static const AVClass child_class = { * .class_name = "child class", * .item_name = av_default_item_name, * .option = child_opts, * .version = LIBAVUTIL_VERSION_INT, * }; * * void *child_next(void *obj, void *prev) * { * test_struct *t = obj; * if (!prev && t->child_struct) * return t->child_struct; * return NULL * } * const AVClass child_class_next(const AVClass *prev) * { * return prev ? NULL : &child_class; * } * @endcode * Putting child_next() and child_class_next() as defined above into * test_class will now make child_struct's options accessible through * test_struct (again, proper setup as described above needs to be done on * child_struct right after it is created). * * From the above example it might not be clear why both child_next() * and child_class_next() are needed. The distinction is that child_next() * iterates over actually existing objects, while child_class_next() * iterates over all possible child classes. E.g. if an AVCodecContext * was initialized to use a codec which has private options, then its * child_next() will return AVCodecContext.priv_data and finish * iterating. OTOH child_class_next() on AVCodecContext.av_class will * iterate over all available codecs with private options. * * @subsection avoptions_implement_named_constants Named constants * It is possible to create named constants for options. Simply set the unit * field of the option the constants should apply to a string and * create the constants themselves as options of type AV_OPT_TYPE_CONST * with their unit field set to the same string. * Their default_val field should contain the value of the named * constant. * For example, to add some named constants for the test_flags option * above, put the following into the child_opts array: * @code * { "test_flags", "This is a test option of flags type.", * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, "test_unit" }, * { "flag1", "This is a flag with value 16", 0, AV_OPT_TYPE_CONST, { .i64 = 16 }, 0, 0, "test_unit" }, * @endcode * * @section avoptions_use Using AVOptions * This section deals with accessing options in an AVOptions-enabled struct. * Such structs in FFmpeg are e.g. AVCodecContext in libavcodec or * AVFormatContext in libavformat. * * @subsection avoptions_use_examine Examining AVOptions * The basic functions for examining options are av_opt_next(), which iterates * over all options defined for one object, and av_opt_find(), which searches * for an option with the given name. * * The situation is more complicated with nesting. An AVOptions-enabled struct * may have AVOptions-enabled children. Passing the AV_OPT_SEARCH_CHILDREN flag * to av_opt_find() will make the function search children recursively. * * For enumerating there are basically two cases. The first is when you want to * get all options that may potentially exist on the struct and its children * (e.g. when constructing documentation). In that case you should call * av_opt_child_class_next() recursively on the parent struct's AVClass. The * second case is when you have an already initialized struct with all its * children and you want to get all options that can be actually written or read * from it. In that case you should call av_opt_child_next() recursively (and * av_opt_next() on each result). * * @subsection avoptions_use_get_set Reading and writing AVOptions * When setting options, you often have a string read directly from the * user. In such a case, simply passing it to av_opt_set() is enough. For * non-string type options, av_opt_set() will parse the string according to the * option type. * * Similarly av_opt_get() will read any option type and convert it to a string * which will be returned. Do not forget that the string is allocated, so you * have to free it with av_free(). * * In some cases it may be more convenient to put all options into an * AVDictionary and call av_opt_set_dict() on it. A specific case of this * are the format/codec open functions in lavf/lavc which take a dictionary * filled with option as a parameter. This makes it possible to set some options * that cannot be set otherwise, since e.g. the input file format is not known * before the file is actually opened. */ enum AVOptionType{ AV_OPT_TYPE_FLAGS, AV_OPT_TYPE_INT, AV_OPT_TYPE_INT64, AV_OPT_TYPE_DOUBLE, AV_OPT_TYPE_FLOAT, AV_OPT_TYPE_STRING, AV_OPT_TYPE_RATIONAL, AV_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length AV_OPT_TYPE_DICT, AV_OPT_TYPE_CONST = 128, AV_OPT_TYPE_IMAGE_SIZE = MKBETAG('S','I','Z','E'), ///< offset must point to two consecutive integers AV_OPT_TYPE_PIXEL_FMT = MKBETAG('P','F','M','T'), AV_OPT_TYPE_SAMPLE_FMT = MKBETAG('S','F','M','T'), AV_OPT_TYPE_VIDEO_RATE = MKBETAG('V','R','A','T'), ///< offset must point to AVRational AV_OPT_TYPE_DURATION = MKBETAG('D','U','R',' '), AV_OPT_TYPE_COLOR = MKBETAG('C','O','L','R'), AV_OPT_TYPE_CHANNEL_LAYOUT = MKBETAG('C','H','L','A'), AV_OPT_TYPE_BOOL = MKBETAG('B','O','O','L'), }; /** * AVOption */ typedef struct AVOption { const char *name; /** * short English help text * @todo What about other languages? */ const char *help; /** * The offset relative to the context structure where the option * value is stored. It should be 0 for named constants. */ int offset; enum AVOptionType type; /** * the default value for scalar options */ union { int64_t i64; double dbl; const char *str; /* TODO those are unused now */ AVRational q; } default_val; double min; ///< minimum valid value for the option double max; ///< maximum valid value for the option int flags; #define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding #define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding #if FF_API_OPT_TYPE_METADATA #define AV_OPT_FLAG_METADATA 4 ///< some data extracted or inserted into the file like title, comment, ... #endif #define AV_OPT_FLAG_AUDIO_PARAM 8 #define AV_OPT_FLAG_VIDEO_PARAM 16 #define AV_OPT_FLAG_SUBTITLE_PARAM 32 /** * The option is intended for exporting values to the caller. */ #define AV_OPT_FLAG_EXPORT 64 /** * The option may not be set through the AVOptions API, only read. * This flag only makes sense when AV_OPT_FLAG_EXPORT is also set. */ #define AV_OPT_FLAG_READONLY 128 #define AV_OPT_FLAG_FILTERING_PARAM (1<<16) ///< a generic parameter which can be set by the user for filtering //FIXME think about enc-audio, ... style flags /** * The logical unit to which the option belongs. Non-constant * options and corresponding named constants share the same * unit. May be NULL. */ const char *unit; } AVOption; /** * A single allowed range of values, or a single allowed value. */ typedef struct AVOptionRange { const char *str; /** * Value range. * For string ranges this represents the min/max length. * For dimensions this represents the min/max pixel count or width/height in multi-component case. */ double value_min, value_max; /** * Value's component range. * For string this represents the unicode range for chars, 0-127 limits to ASCII. */ double component_min, component_max; /** * Range flag. * If set to 1 the struct encodes a range, if set to 0 a single value. */ int is_range; } AVOptionRange; /** * List of AVOptionRange structs. */ typedef struct AVOptionRanges { /** * Array of option ranges. * * Most of option types use just one component. * Following describes multi-component option types: * * AV_OPT_TYPE_IMAGE_SIZE: * component index 0: range of pixel count (width * height). * component index 1: range of width. * component index 2: range of height. * * @note To obtain multi-component version of this structure, user must * provide AV_OPT_MULTI_COMPONENT_RANGE to av_opt_query_ranges or * av_opt_query_ranges_default function. * * Multi-component range can be read as in following example: * * @code * int range_index, component_index; * AVOptionRanges *ranges; * AVOptionRange *range[3]; //may require more than 3 in the future. * av_opt_query_ranges(&ranges, obj, key, AV_OPT_MULTI_COMPONENT_RANGE); * for (range_index = 0; range_index < ranges->nb_ranges; range_index++) { * for (component_index = 0; component_index < ranges->nb_components; component_index++) * range[component_index] = ranges->range[ranges->nb_ranges * component_index + range_index]; * //do something with range here. * } * av_opt_freep_ranges(&ranges); * @endcode */ AVOptionRange **range; /** * Number of ranges per component. */ int nb_ranges; /** * Number of componentes. */ int nb_components; } AVOptionRanges; /** * Show the obj options. * * @param req_flags requested flags for the options to show. Show only the * options for which it is opt->flags & req_flags. * @param rej_flags rejected flags for the options to show. Show only the * options for which it is !(opt->flags & req_flags). * @param av_log_obj log context to use for showing the options */ int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags); /** * Set the values of all AVOption fields to their default values. * * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) */ void av_opt_set_defaults(void *s); /** * Set the values of all AVOption fields to their default values. Only these * AVOption fields for which (opt->flags & mask) == flags will have their * default applied to s. * * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) * @param mask combination of AV_OPT_FLAG_* * @param flags combination of AV_OPT_FLAG_* */ void av_opt_set_defaults2(void *s, int mask, int flags); /** * Parse the key/value pairs list in opts. For each key/value pair * found, stores the value in the field in ctx that is named like the * key. ctx must be an AVClass context, storing is done using * AVOptions. * * @param opts options string to parse, may be NULL * @param key_val_sep a 0-terminated list of characters used to * separate key from value * @param pairs_sep a 0-terminated list of characters used to separate * two pairs from each other * @return the number of successfully set key/value pairs, or a negative * value corresponding to an AVERROR code in case of error: * AVERROR(EINVAL) if opts cannot be parsed, * the error code issued by av_opt_set() if a key/value pair * cannot be set */ int av_set_options_string(void *ctx, const char *opts, const char *key_val_sep, const char *pairs_sep); /** * Parse the key-value pairs list in opts. For each key=value pair found, * set the value of the corresponding option in ctx. * * @param ctx the AVClass object to set options on * @param opts the options string, key-value pairs separated by a * delimiter * @param shorthand a NULL-terminated array of options names for shorthand * notation: if the first field in opts has no key part, * the key is taken from the first element of shorthand; * then again for the second, etc., until either opts is * finished, shorthand is finished or a named option is * found; after that, all options must be named * @param key_val_sep a 0-terminated list of characters used to separate * key from value, for example '=' * @param pairs_sep a 0-terminated list of characters used to separate * two pairs from each other, for example ':' or ',' * @return the number of successfully set key=value pairs, or a negative * value corresponding to an AVERROR code in case of error: * AVERROR(EINVAL) if opts cannot be parsed, * the error code issued by av_set_string3() if a key/value pair * cannot be set * * Options names must use only the following characters: a-z A-Z 0-9 - . / _ * Separators must use characters distinct from option names and from each * other. */ int av_opt_set_from_string(void *ctx, const char *opts, const char *const *shorthand, const char *key_val_sep, const char *pairs_sep); /** * Free all allocated objects in obj. */ void av_opt_free(void *obj); /** * Check whether a particular flag is set in a flags field. * * @param field_name the name of the flag field option * @param flag_name the name of the flag to check * @return non-zero if the flag is set, zero if the flag isn't set, * isn't of the right type, or the flags field doesn't exist. */ int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name); /** * Set all the options from a given dictionary on an object. * * @param obj a struct whose first element is a pointer to AVClass * @param options options to process. This dictionary will be freed and replaced * by a new one containing all options not found in obj. * Of course this new dictionary needs to be freed by caller * with av_dict_free(). * * @return 0 on success, a negative AVERROR if some option was found in obj, * but could not be set. * * @see av_dict_copy() */ int av_opt_set_dict(void *obj, struct AVDictionary **options); /** * Set all the options from a given dictionary on an object. * * @param obj a struct whose first element is a pointer to AVClass * @param options options to process. This dictionary will be freed and replaced * by a new one containing all options not found in obj. * Of course this new dictionary needs to be freed by caller * with av_dict_free(). * @param search_flags A combination of AV_OPT_SEARCH_*. * * @return 0 on success, a negative AVERROR if some option was found in obj, * but could not be set. * * @see av_dict_copy() */ int av_opt_set_dict2(void *obj, struct AVDictionary **options, int search_flags); /** * Extract a key-value pair from the beginning of a string. * * @param ropts pointer to the options string, will be updated to * point to the rest of the string (one of the pairs_sep * or the final NUL) * @param key_val_sep a 0-terminated list of characters used to separate * key from value, for example '=' * @param pairs_sep a 0-terminated list of characters used to separate * two pairs from each other, for example ':' or ',' * @param flags flags; see the AV_OPT_FLAG_* values below * @param rkey parsed key; must be freed using av_free() * @param rval parsed value; must be freed using av_free() * * @return >=0 for success, or a negative value corresponding to an * AVERROR code in case of error; in particular: * AVERROR(EINVAL) if no key is present * */ int av_opt_get_key_value(const char **ropts, const char *key_val_sep, const char *pairs_sep, unsigned flags, char **rkey, char **rval); enum { /** * Accept to parse a value without a key; the key will then be returned * as NULL. */ AV_OPT_FLAG_IMPLICIT_KEY = 1, }; /** * @defgroup opt_eval_funcs Evaluating option strings * @{ * This group of functions can be used to evaluate option strings * and get numbers out of them. They do the same thing as av_opt_set(), * except the result is written into the caller-supplied pointer. * * @param obj a struct whose first element is a pointer to AVClass. * @param o an option for which the string is to be evaluated. * @param val string to be evaluated. * @param *_out value of the string will be written here. * * @return 0 on success, a negative number on failure. */ int av_opt_eval_flags (void *obj, const AVOption *o, const char *val, int *flags_out); int av_opt_eval_int (void *obj, const AVOption *o, const char *val, int *int_out); int av_opt_eval_int64 (void *obj, const AVOption *o, const char *val, int64_t *int64_out); int av_opt_eval_float (void *obj, const AVOption *o, const char *val, float *float_out); int av_opt_eval_double(void *obj, const AVOption *o, const char *val, double *double_out); int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational *q_out); /** * @} */ #define AV_OPT_SEARCH_CHILDREN (1 << 0) /**< Search in possible children of the given object first. */ /** * The obj passed to av_opt_find() is fake -- only a double pointer to AVClass * instead of a required pointer to a struct containing AVClass. This is * useful for searching for options without needing to allocate the corresponding * object. */ #define AV_OPT_SEARCH_FAKE_OBJ (1 << 1) /** * In av_opt_get, return NULL if the option has a pointer type and is set to NULL, * rather than returning an empty string. */ #define AV_OPT_ALLOW_NULL (1 << 2) /** * Allows av_opt_query_ranges and av_opt_query_ranges_default to return more than * one component for certain option types. * @see AVOptionRanges for details. */ #define AV_OPT_MULTI_COMPONENT_RANGE (1 << 12) /** * Look for an option in an object. Consider only options which * have all the specified flags set. * * @param[in] obj A pointer to a struct whose first element is a * pointer to an AVClass. * Alternatively a double pointer to an AVClass, if * AV_OPT_SEARCH_FAKE_OBJ search flag is set. * @param[in] name The name of the option to look for. * @param[in] unit When searching for named constants, name of the unit * it belongs to. * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). * @param search_flags A combination of AV_OPT_SEARCH_*. * * @return A pointer to the option found, or NULL if no option * was found. * * @note Options found with AV_OPT_SEARCH_CHILDREN flag may not be settable * directly with av_opt_set(). Use special calls which take an options * AVDictionary (e.g. avformat_open_input()) to set options found with this * flag. */ const AVOption *av_opt_find(void *obj, const char *name, const char *unit, int opt_flags, int search_flags); /** * Look for an option in an object. Consider only options which * have all the specified flags set. * * @param[in] obj A pointer to a struct whose first element is a * pointer to an AVClass. * Alternatively a double pointer to an AVClass, if * AV_OPT_SEARCH_FAKE_OBJ search flag is set. * @param[in] name The name of the option to look for. * @param[in] unit When searching for named constants, name of the unit * it belongs to. * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). * @param search_flags A combination of AV_OPT_SEARCH_*. * @param[out] target_obj if non-NULL, an object to which the option belongs will be * written here. It may be different from obj if AV_OPT_SEARCH_CHILDREN is present * in search_flags. This parameter is ignored if search_flags contain * AV_OPT_SEARCH_FAKE_OBJ. * * @return A pointer to the option found, or NULL if no option * was found. */ const AVOption *av_opt_find2(void *obj, const char *name, const char *unit, int opt_flags, int search_flags, void **target_obj); /** * Iterate over all AVOptions belonging to obj. * * @param obj an AVOptions-enabled struct or a double pointer to an * AVClass describing it. * @param prev result of the previous call to av_opt_next() on this object * or NULL * @return next AVOption or NULL */ const AVOption *av_opt_next(const void *obj, const AVOption *prev); /** * Iterate over AVOptions-enabled children of obj. * * @param prev result of a previous call to this function or NULL * @return next AVOptions-enabled child or NULL */ void *av_opt_child_next(void *obj, void *prev); /** * Iterate over potential AVOptions-enabled children of parent. * * @param prev result of a previous call to this function or NULL * @return AVClass corresponding to next potential child or NULL */ const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev); /** * @defgroup opt_set_funcs Option setting functions * @{ * Those functions set the field of obj with the given name to value. * * @param[in] obj A struct whose first element is a pointer to an AVClass. * @param[in] name the name of the field to set * @param[in] val The value to set. In case of av_opt_set() if the field is not * of a string type, then the given string is parsed. * SI postfixes and some named scalars are supported. * If the field is of a numeric type, it has to be a numeric or named * scalar. Behavior with more than one scalar and +- infix operators * is undefined. * If the field is of a flags type, it has to be a sequence of numeric * scalars or named flags separated by '+' or '-'. Prefixing a flag * with '+' causes it to be set without affecting the other flags; * similarly, '-' unsets a flag. * @param search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN * is passed here, then the option may be set on a child of obj. * * @return 0 if the value has been set, or an AVERROR code in case of * error: * AVERROR_OPTION_NOT_FOUND if no matching option exists * AVERROR(ERANGE) if the value is out of range * AVERROR(EINVAL) if the value is not valid */ int av_opt_set (void *obj, const char *name, const char *val, int search_flags); int av_opt_set_int (void *obj, const char *name, int64_t val, int search_flags); int av_opt_set_double (void *obj, const char *name, double val, int search_flags); int av_opt_set_q (void *obj, const char *name, AVRational val, int search_flags); int av_opt_set_bin (void *obj, const char *name, const uint8_t *val, int size, int search_flags); int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_flags); int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags); int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags); int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags); int av_opt_set_channel_layout(void *obj, const char *name, int64_t ch_layout, int search_flags); /** * @note Any old dictionary present is discarded and replaced with a copy of the new one. The * caller still owns val is and responsible for freeing it. */ int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, int search_flags); /** * Set a binary option to an integer list. * * @param obj AVClass object to set options on * @param name name of the binary option * @param val pointer to an integer list (must have the correct type with * regard to the contents of the list) * @param term list terminator (usually 0 or -1) * @param flags search flags */ #define av_opt_set_int_list(obj, name, val, term, flags) \ (av_int_list_length(val, term) > INT_MAX / sizeof(*(val)) ? \ AVERROR(EINVAL) : \ av_opt_set_bin(obj, name, (const uint8_t *)(val), \ av_int_list_length(val, term) * sizeof(*(val)), flags)) /** * @} */ /** * @defgroup opt_get_funcs Option getting functions * @{ * Those functions get a value of the option with the given name from an object. * * @param[in] obj a struct whose first element is a pointer to an AVClass. * @param[in] name name of the option to get. * @param[in] search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN * is passed here, then the option may be found in a child of obj. * @param[out] out_val value of the option will be written here * @return >=0 on success, a negative error code otherwise */ /** * @note the returned string will be av_malloc()ed and must be av_free()ed by the caller * * @note if AV_OPT_ALLOW_NULL is set in search_flags in av_opt_get, and the option has * AV_OPT_TYPE_STRING or AV_OPT_TYPE_BINARY and is set to NULL, *out_val will be set * to NULL instead of an allocated empty string. */ int av_opt_get (void *obj, const char *name, int search_flags, uint8_t **out_val); int av_opt_get_int (void *obj, const char *name, int search_flags, int64_t *out_val); int av_opt_get_double (void *obj, const char *name, int search_flags, double *out_val); int av_opt_get_q (void *obj, const char *name, int search_flags, AVRational *out_val); int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_out, int *h_out); int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt); int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt); int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val); int av_opt_get_channel_layout(void *obj, const char *name, int search_flags, int64_t *ch_layout); /** * @param[out] out_val The returned dictionary is a copy of the actual value and must * be freed with av_dict_free() by the caller */ int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDictionary **out_val); /** * @} */ /** * Gets a pointer to the requested field in a struct. * This function allows accessing a struct even when its fields are moved or * renamed since the application making the access has been compiled, * * @returns a pointer to the field, it can be cast to the correct type and read * or written to. */ void *av_opt_ptr(const AVClass *avclass, void *obj, const char *name); /** * Free an AVOptionRanges struct and set it to NULL. */ void av_opt_freep_ranges(AVOptionRanges **ranges); /** * Get a list of allowed ranges for the given option. * * The returned list may depend on other fields in obj like for example profile. * * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges * * The result must be freed with av_opt_freep_ranges. * * @return number of compontents returned on success, a negative errro code otherwise */ int av_opt_query_ranges(AVOptionRanges **, void *obj, const char *key, int flags); /** * Copy options from src object into dest object. * * Options that require memory allocation (e.g. string or binary) are malloc'ed in dest object. * Original memory allocated for such options is freed unless both src and dest options points to the same memory. * * @param dest Object to copy from * @param src Object to copy into * @return 0 on success, negative on error */ int av_opt_copy(void *dest, const void *src); /** * Get a default list of allowed ranges for the given option. * * This list is constructed without using the AVClass.query_ranges() callback * and can be used as fallback from within the callback. * * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges * * The result must be freed with av_opt_free_ranges. * * @return number of compontents returned on success, a negative errro code otherwise */ int av_opt_query_ranges_default(AVOptionRanges **, void *obj, const char *key, int flags); /** * Check if given option is set to its default value. * * Options o must belong to the obj. This function must not be called to check child's options state. * @see av_opt_is_set_to_default_by_name(). * * @param obj AVClass object to check option on * @param o option to be checked * @return >0 when option is set to its default, * 0 when option is not set its default, * <0 on error */ int av_opt_is_set_to_default(void *obj, const AVOption *o); /** * Check if given option is set to its default value. * * @param obj AVClass object to check option on * @param name option name * @param search_flags combination of AV_OPT_SEARCH_* * @return >0 when option is set to its default, * 0 when option is not set its default, * <0 on error */ int av_opt_is_set_to_default_by_name(void *obj, const char *name, int search_flags); #define AV_OPT_SERIALIZE_SKIP_DEFAULTS 0x00000001 ///< Serialize options that are not set to default values only. #define AV_OPT_SERIALIZE_OPT_FLAGS_EXACT 0x00000002 ///< Serialize options that exactly match opt_flags only. /** * Serialize object's options. * * Create a string containing object's serialized options. * Such string may be passed back to av_opt_set_from_string() in order to restore option values. * A key/value or pairs separator occurring in the serialized value or * name string are escaped through the av_escape() function. * * @param[in] obj AVClass object to serialize * @param[in] opt_flags serialize options with all the specified flags set (AV_OPT_FLAG) * @param[in] flags combination of AV_OPT_SERIALIZE_* flags * @param[out] buffer Pointer to buffer that will be allocated with string containg serialized options. * Buffer must be freed by the caller when is no longer needed. * @param[in] key_val_sep character used to separate key from value * @param[in] pairs_sep character used to separate two pairs from each other * @return >= 0 on success, negative on error * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. */ int av_opt_serialize(void *obj, int opt_flags, int flags, char **buffer, const char key_val_sep, const char pairs_sep); /** * @} */ #endif /* AVUTIL_OPT_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/parseutils.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_PARSEUTILS_H #define AVUTIL_PARSEUTILS_H #include #include "rational.h" /** * @file * misc parsing utilities */ /** * Parse str and store the parsed ratio in q. * * Note that a ratio with infinite (1/0) or negative value is * considered valid, so you should check on the returned value if you * want to exclude those values. * * The undefined value can be expressed using the "0:0" string. * * @param[in,out] q pointer to the AVRational which will contain the ratio * @param[in] str the string to parse: it has to be a string in the format * num:den, a float number or an expression * @param[in] max the maximum allowed numerator and denominator * @param[in] log_offset log level offset which is applied to the log * level of log_ctx * @param[in] log_ctx parent logging context * @return >= 0 on success, a negative error code otherwise */ int av_parse_ratio(AVRational *q, const char *str, int max, int log_offset, void *log_ctx); #define av_parse_ratio_quiet(rate, str, max) \ av_parse_ratio(rate, str, max, AV_LOG_MAX_OFFSET, NULL) /** * Parse str and put in width_ptr and height_ptr the detected values. * * @param[in,out] width_ptr pointer to the variable which will contain the detected * width value * @param[in,out] height_ptr pointer to the variable which will contain the detected * height value * @param[in] str the string to parse: it has to be a string in the format * width x height or a valid video size abbreviation. * @return >= 0 on success, a negative error code otherwise */ int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str); /** * Parse str and store the detected values in *rate. * * @param[in,out] rate pointer to the AVRational which will contain the detected * frame rate * @param[in] str the string to parse: it has to be a string in the format * rate_num / rate_den, a float number or a valid video rate abbreviation * @return >= 0 on success, a negative error code otherwise */ int av_parse_video_rate(AVRational *rate, const char *str); /** * Put the RGBA values that correspond to color_string in rgba_color. * * @param color_string a string specifying a color. It can be the name of * a color (case insensitive match) or a [0x|#]RRGGBB[AA] sequence, * possibly followed by "@" and a string representing the alpha * component. * The alpha component may be a string composed by "0x" followed by an * hexadecimal number or a decimal number between 0.0 and 1.0, which * represents the opacity value (0x00/0.0 means completely transparent, * 0xff/1.0 completely opaque). * If the alpha component is not specified then 0xff is assumed. * The string "random" will result in a random color. * @param slen length of the initial part of color_string containing the * color. It can be set to -1 if color_string is a null terminated string * containing nothing else than the color. * @return >= 0 in case of success, a negative value in case of * failure (for example if color_string cannot be parsed). */ int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen, void *log_ctx); /** * Get the name of a color from the internal table of hard-coded named * colors. * * This function is meant to enumerate the color names recognized by * av_parse_color(). * * @param color_idx index of the requested color, starting from 0 * @param rgbp if not NULL, will point to a 3-elements array with the color value in RGB * @return the color name string or NULL if color_idx is not in the array */ const char *av_get_known_color_name(int color_idx, const uint8_t **rgb); /** * Parse timestr and return in *time a corresponding number of * microseconds. * * @param timeval puts here the number of microseconds corresponding * to the string in timestr. If the string represents a duration, it * is the number of microseconds contained in the time interval. If * the string is a date, is the number of microseconds since 1st of * January, 1970 up to the time of the parsed date. If timestr cannot * be successfully parsed, set *time to INT64_MIN. * @param timestr a string representing a date or a duration. * - If a date the syntax is: * @code * [{YYYY-MM-DD|YYYYMMDD}[T|t| ]]{{HH:MM:SS[.m...]]]}|{HHMMSS[.m...]]]}}[Z] * now * @endcode * If the value is "now" it takes the current time. * Time is local time unless Z is appended, in which case it is * interpreted as UTC. * If the year-month-day part is not specified it takes the current * year-month-day. * - If a duration the syntax is: * @code * [-][HH:]MM:SS[.m...] * [-]S+[.m...] * @endcode * @param duration flag which tells how to interpret timestr, if not * zero timestr is interpreted as a duration, otherwise as a date * @return >= 0 in case of success, a negative value corresponding to an * AVERROR code otherwise */ int av_parse_time(int64_t *timeval, const char *timestr, int duration); /** * Attempt to find a specific tag in a URL. * * syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done. * Return 1 if found. */ int av_find_info_tag(char *arg, int arg_size, const char *tag1, const char *info); /** * Simplified version of strptime * * Parse the input string p according to the format string fmt and * store its results in the structure dt. * This implementation supports only a subset of the formats supported * by the standard strptime(). * * The supported input field descriptors are listed below. * - %H: the hour as a decimal number, using a 24-hour clock, in the * range '00' through '23' * - %J: hours as a decimal number, in the range '0' through INT_MAX * - %M: the minute as a decimal number, using a 24-hour clock, in the * range '00' through '59' * - %S: the second as a decimal number, using a 24-hour clock, in the * range '00' through '59' * - %Y: the year as a decimal number, using the Gregorian calendar * - %m: the month as a decimal number, in the range '1' through '12' * - %d: the day of the month as a decimal number, in the range '1' * through '31' * - %T: alias for '%H:%M:%S' * - %%: a literal '%' * * @return a pointer to the first character not processed in this function * call. In case the input string contains more characters than * required by the format string the return value points right after * the last consumed input character. In case the whole input string * is consumed the return value points to the null byte at the end of * the string. On failure NULL is returned. */ char *av_small_strptime(const char *p, const char *fmt, struct tm *dt); /** * Convert the decomposed UTC time in tm to a time_t value. */ time_t av_timegm(struct tm *tm); #endif /* AVUTIL_PARSEUTILS_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/pixdesc.h ================================================ /* * pixel format descriptor * Copyright (c) 2009 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_PIXDESC_H #define AVUTIL_PIXDESC_H #include #include "attributes.h" #include "pixfmt.h" #include "version.h" typedef struct AVComponentDescriptor { /** * Which of the 4 planes contains the component. */ int plane; /** * Number of elements between 2 horizontally consecutive pixels. * Elements are bits for bitstream formats, bytes otherwise. */ int step; /** * Number of elements before the component of the first pixel. * Elements are bits for bitstream formats, bytes otherwise. */ int offset; /** * Number of least significant bits that must be shifted away * to get the value. */ int shift; /** * Number of bits in the component. */ int depth; #if FF_API_PLUS1_MINUS1 /** deprecated, use step instead */ attribute_deprecated int step_minus1; /** deprecated, use depth instead */ attribute_deprecated int depth_minus1; /** deprecated, use offset instead */ attribute_deprecated int offset_plus1; #endif } AVComponentDescriptor; /** * Descriptor that unambiguously describes how the bits of a pixel are * stored in the up to 4 data planes of an image. It also stores the * subsampling factors and number of components. * * @note This is separate of the colorspace (RGB, YCbCr, YPbPr, JPEG-style YUV * and all the YUV variants) AVPixFmtDescriptor just stores how values * are stored not what these values represent. */ typedef struct AVPixFmtDescriptor { const char *name; uint8_t nb_components; ///< The number of components each pixel has, (1-4) /** * Amount to shift the luma width right to find the chroma width. * For YV12 this is 1 for example. * chroma_width = AV_CEIL_RSHIFT(luma_width, log2_chroma_w) * The note above is needed to ensure rounding up. * This value only refers to the chroma components. */ uint8_t log2_chroma_w; /** * Amount to shift the luma height right to find the chroma height. * For YV12 this is 1 for example. * chroma_height= AV_CEIL_RSHIFT(luma_height, log2_chroma_h) * The note above is needed to ensure rounding up. * This value only refers to the chroma components. */ uint8_t log2_chroma_h; /** * Combination of AV_PIX_FMT_FLAG_... flags. */ uint64_t flags; /** * Parameters that describe how pixels are packed. * If the format has 1 or 2 components, then luma is 0. * If the format has 3 or 4 components: * if the RGB flag is set then 0 is red, 1 is green and 2 is blue; * otherwise 0 is luma, 1 is chroma-U and 2 is chroma-V. * * If present, the Alpha channel is always the last component. */ AVComponentDescriptor comp[4]; /** * Alternative comma-separated names. */ const char *alias; } AVPixFmtDescriptor; /** * Pixel format is big-endian. */ #define AV_PIX_FMT_FLAG_BE (1 << 0) /** * Pixel format has a palette in data[1], values are indexes in this palette. */ #define AV_PIX_FMT_FLAG_PAL (1 << 1) /** * All values of a component are bit-wise packed end to end. */ #define AV_PIX_FMT_FLAG_BITSTREAM (1 << 2) /** * Pixel format is an HW accelerated format. */ #define AV_PIX_FMT_FLAG_HWACCEL (1 << 3) /** * At least one pixel component is not in the first data plane. */ #define AV_PIX_FMT_FLAG_PLANAR (1 << 4) /** * The pixel format contains RGB-like data (as opposed to YUV/grayscale). */ #define AV_PIX_FMT_FLAG_RGB (1 << 5) /** * The pixel format is "pseudo-paletted". This means that it contains a * fixed palette in the 2nd plane but the palette is fixed/constant for each * PIX_FMT. This allows interpreting the data as if it was PAL8, which can * in some cases be simpler. Or the data can be interpreted purely based on * the pixel format without using the palette. * An example of a pseudo-paletted format is AV_PIX_FMT_GRAY8 */ #define AV_PIX_FMT_FLAG_PSEUDOPAL (1 << 6) /** * The pixel format has an alpha channel. This is set on all formats that * support alpha in some way. The exception is AV_PIX_FMT_PAL8, which can * carry alpha as part of the palette. Details are explained in the * AVPixelFormat enum, and are also encoded in the corresponding * AVPixFmtDescriptor. * * The alpha is always straight, never pre-multiplied. * * If a codec or a filter does not support alpha, it should set all alpha to * opaque, or use the equivalent pixel formats without alpha component, e.g. * AV_PIX_FMT_RGB0 (or AV_PIX_FMT_RGB24 etc.) instead of AV_PIX_FMT_RGBA. */ #define AV_PIX_FMT_FLAG_ALPHA (1 << 7) /** * Return the number of bits per pixel used by the pixel format * described by pixdesc. Note that this is not the same as the number * of bits per sample. * * The returned number of bits refers to the number of bits actually * used for storing the pixel information, that is padding bits are * not counted. */ int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc); /** * Return the number of bits per pixel for the pixel format * described by pixdesc, including any padding or unused bits. */ int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc); /** * @return a pixel format descriptor for provided pixel format or NULL if * this pixel format is unknown. */ const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt); /** * Iterate over all pixel format descriptors known to libavutil. * * @param prev previous descriptor. NULL to get the first descriptor. * * @return next descriptor or NULL after the last descriptor */ const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev); /** * @return an AVPixelFormat id described by desc, or AV_PIX_FMT_NONE if desc * is not a valid pointer to a pixel format descriptor. */ enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc); /** * Utility function to access log2_chroma_w log2_chroma_h from * the pixel format AVPixFmtDescriptor. * * See av_get_chroma_sub_sample() for a function that asserts a * valid pixel format instead of returning an error code. * Its recommended that you use avcodec_get_chroma_sub_sample unless * you do check the return code! * * @param[in] pix_fmt the pixel format * @param[out] h_shift store log2_chroma_w (horizontal/width shift) * @param[out] v_shift store log2_chroma_h (vertical/height shift) * * @return 0 on success, AVERROR(ENOSYS) on invalid or unknown pixel format */ int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift); /** * @return number of planes in pix_fmt, a negative AVERROR if pix_fmt is not a * valid pixel format. */ int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt); /** * @return the name for provided color range or NULL if unknown. */ const char *av_color_range_name(enum AVColorRange range); /** * @return the name for provided color primaries or NULL if unknown. */ const char *av_color_primaries_name(enum AVColorPrimaries primaries); /** * @return the name for provided color transfer or NULL if unknown. */ const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer); /** * @return the name for provided color space or NULL if unknown. */ const char *av_color_space_name(enum AVColorSpace space); /** * @return the name for provided chroma location or NULL if unknown. */ const char *av_chroma_location_name(enum AVChromaLocation location); /** * Return the pixel format corresponding to name. * * If there is no pixel format with name name, then looks for a * pixel format with the name corresponding to the native endian * format of name. * For example in a little-endian system, first looks for "gray16", * then for "gray16le". * * Finally if no pixel format has been found, returns AV_PIX_FMT_NONE. */ enum AVPixelFormat av_get_pix_fmt(const char *name); /** * Return the short name for a pixel format, NULL in case pix_fmt is * unknown. * * @see av_get_pix_fmt(), av_get_pix_fmt_string() */ const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt); /** * Print in buf the string corresponding to the pixel format with * number pix_fmt, or a header if pix_fmt is negative. * * @param buf the buffer where to write the string * @param buf_size the size of buf * @param pix_fmt the number of the pixel format to print the * corresponding info string, or a negative value to print the * corresponding header. */ char *av_get_pix_fmt_string(char *buf, int buf_size, enum AVPixelFormat pix_fmt); /** * Read a line from an image, and write the values of the * pixel format component c to dst. * * @param data the array containing the pointers to the planes of the image * @param linesize the array containing the linesizes of the image * @param desc the pixel format descriptor for the image * @param x the horizontal coordinate of the first pixel to read * @param y the vertical coordinate of the first pixel to read * @param w the width of the line to read, that is the number of * values to write to dst * @param read_pal_component if not zero and the format is a paletted * format writes the values corresponding to the palette * component c in data[1] to dst, rather than the palette indexes in * data[0]. The behavior is undefined if the format is not paletted. */ void av_read_image_line(uint16_t *dst, const uint8_t *data[4], const int linesize[4], const AVPixFmtDescriptor *desc, int x, int y, int c, int w, int read_pal_component); /** * Write the values from src to the pixel format component c of an * image line. * * @param src array containing the values to write * @param data the array containing the pointers to the planes of the * image to write into. It is supposed to be zeroed. * @param linesize the array containing the linesizes of the image * @param desc the pixel format descriptor for the image * @param x the horizontal coordinate of the first pixel to write * @param y the vertical coordinate of the first pixel to write * @param w the width of the line to write, that is the number of * values to write to the image line */ void av_write_image_line(const uint16_t *src, uint8_t *data[4], const int linesize[4], const AVPixFmtDescriptor *desc, int x, int y, int c, int w); /** * Utility function to swap the endianness of a pixel format. * * @param[in] pix_fmt the pixel format * * @return pixel format with swapped endianness if it exists, * otherwise AV_PIX_FMT_NONE */ enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt); #define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */ #define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */ #define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */ #define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */ #define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */ #define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */ /** * Compute what kind of losses will occur when converting from one specific * pixel format to another. * When converting from one pixel format to another, information loss may occur. * For example, when converting from RGB24 to GRAY, the color information will * be lost. Similarly, other losses occur when converting from some formats to * other formats. These losses can involve loss of chroma, but also loss of * resolution, loss of color depth, loss due to the color space conversion, loss * of the alpha bits or loss due to color quantization. * av_get_fix_fmt_loss() informs you about the various types of losses * which will occur when converting from one pixel format to another. * * @param[in] dst_pix_fmt destination pixel format * @param[in] src_pix_fmt source pixel format * @param[in] has_alpha Whether the source pixel format alpha channel is used. * @return Combination of flags informing you what kind of losses will occur * (maximum loss for an invalid dst_pix_fmt). */ int av_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt, int has_alpha); /** * Compute what kind of losses will occur when converting from one specific * pixel format to another. * When converting from one pixel format to another, information loss may occur. * For example, when converting from RGB24 to GRAY, the color information will * be lost. Similarly, other losses occur when converting from some formats to * other formats. These losses can involve loss of chroma, but also loss of * resolution, loss of color depth, loss due to the color space conversion, loss * of the alpha bits or loss due to color quantization. * av_get_fix_fmt_loss() informs you about the various types of losses * which will occur when converting from one pixel format to another. * * @param[in] dst_pix_fmt destination pixel format * @param[in] src_pix_fmt source pixel format * @param[in] has_alpha Whether the source pixel format alpha channel is used. * @return Combination of flags informing you what kind of losses will occur * (maximum loss for an invalid dst_pix_fmt). */ enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); #endif /* AVUTIL_PIXDESC_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/pixelutils.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_PIXELUTILS_H #define AVUTIL_PIXELUTILS_H #include #include #include "common.h" /** * Sum of abs(src1[x] - src2[x]) */ typedef int (*av_pixelutils_sad_fn)(const uint8_t *src1, ptrdiff_t stride1, const uint8_t *src2, ptrdiff_t stride2); /** * Get a potentially optimized pointer to a Sum-of-absolute-differences * function (see the av_pixelutils_sad_fn prototype). * * @param w_bits 1< * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_PIXFMT_H #define AVUTIL_PIXFMT_H /** * @file * pixel format definitions */ #include "libavutil/avconfig.h" #include "version.h" #define AVPALETTE_SIZE 1024 #define AVPALETTE_COUNT 256 /** * Pixel format. * * @note * AV_PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA * color is put together as: * (A << 24) | (R << 16) | (G << 8) | B * This is stored as BGRA on little-endian CPU architectures and ARGB on * big-endian CPUs. * * @par * When the pixel format is palettized RGB32 (AV_PIX_FMT_PAL8), the palettized * image data is stored in AVFrame.data[0]. The palette is transported in * AVFrame.data[1], is 1024 bytes long (256 4-byte entries) and is * formatted the same as in AV_PIX_FMT_RGB32 described above (i.e., it is * also endian-specific). Note also that the individual RGB32 palette * components stored in AVFrame.data[1] should be in the range 0..255. * This is important as many custom PAL8 video codecs that were designed * to run on the IBM VGA graphics adapter use 6-bit palette components. * * @par * For all the 8 bits per pixel formats, an RGB32 palette is in data[1] like * for pal8. This palette is filled in automatically by the function * allocating the picture. */ enum AVPixelFormat { AV_PIX_FMT_NONE = -1, AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) AV_PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... AV_PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) AV_PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) AV_PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) AV_PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) AV_PIX_FMT_GRAY8, ///< Y , 8bpp AV_PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb AV_PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb AV_PIX_FMT_PAL8, ///< 8 bits with AV_PIX_FMT_RGB32 palette AV_PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range AV_PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting color_range AV_PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting color_range #if FF_API_XVMC AV_PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing AV_PIX_FMT_XVMC_MPEG2_IDCT, AV_PIX_FMT_XVMC = AV_PIX_FMT_XVMC_MPEG2_IDCT, #endif /* FF_API_XVMC */ AV_PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 AV_PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 AV_PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) AV_PIX_FMT_BGR4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits AV_PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) AV_PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) AV_PIX_FMT_RGB4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits AV_PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) AV_PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V) AV_PIX_FMT_NV21, ///< as above, but U and V bytes are swapped AV_PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... AV_PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... AV_PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... AV_PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... AV_PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian AV_PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian AV_PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples) AV_PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range AV_PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples) #if FF_API_VDPAU AV_PIX_FMT_VDPAU_H264,///< H.264 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers AV_PIX_FMT_VDPAU_MPEG1,///< MPEG-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers AV_PIX_FMT_VDPAU_MPEG2,///< MPEG-2 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers AV_PIX_FMT_VDPAU_WMV3,///< WMV3 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers AV_PIX_FMT_VDPAU_VC1, ///< VC-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers #endif AV_PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian AV_PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian AV_PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian AV_PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian AV_PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian , X=unused/undefined AV_PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined AV_PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian AV_PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian AV_PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefined AV_PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined #if FF_API_VAAPI /** @name Deprecated pixel formats */ /**@{*/ AV_PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers AV_PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers AV_PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a VASurfaceID /**@}*/ AV_PIX_FMT_VAAPI = AV_PIX_FMT_VAAPI_VLD, #else /** * Hardware acceleration through VA-API, data[3] contains a * VASurfaceID. */ AV_PIX_FMT_VAAPI, #endif AV_PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian AV_PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian AV_PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian AV_PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian AV_PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian AV_PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian #if FF_API_VDPAU AV_PIX_FMT_VDPAU_MPEG4, ///< MPEG-4 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers #endif AV_PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer AV_PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), little-endian, X=unused/undefined AV_PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), big-endian, X=unused/undefined AV_PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), little-endian, X=unused/undefined AV_PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), big-endian, X=unused/undefined AV_PIX_FMT_YA8, ///< 8 bits gray, 8 bits alpha AV_PIX_FMT_Y400A = AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 AV_PIX_FMT_GRAY8A= AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 AV_PIX_FMT_BGR48BE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian AV_PIX_FMT_BGR48LE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as little-endian /** * The following 12 formats have the disadvantage of needing 1 format for each bit depth. * Notice that each 9/10 bits sample is stored in 16 bits with extra padding. * If you want to support multiple bit depths, then using AV_PIX_FMT_YUV420P16* with the bpp stored separately is better. */ AV_PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian AV_PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian AV_PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian AV_PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian AV_PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian AV_PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian AV_PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian AV_PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian AV_PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian AV_PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian AV_PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian AV_PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian AV_PIX_FMT_VDA_VLD, ///< hardware decoding through VDA AV_PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp AV_PIX_FMT_GBR24P = AV_PIX_FMT_GBRP, // alias for #AV_PIX_FMT_GBRP AV_PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big-endian AV_PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little-endian AV_PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big-endian AV_PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little-endian AV_PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big-endian AV_PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little-endian AV_PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) AV_PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) AV_PIX_FMT_YUVA420P9BE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian AV_PIX_FMT_YUVA420P9LE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian AV_PIX_FMT_YUVA422P9BE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian AV_PIX_FMT_YUVA422P9LE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian AV_PIX_FMT_YUVA444P9BE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian AV_PIX_FMT_YUVA444P9LE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian AV_PIX_FMT_YUVA420P10BE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) AV_PIX_FMT_YUVA420P10LE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) AV_PIX_FMT_YUVA422P10BE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) AV_PIX_FMT_YUVA422P10LE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) AV_PIX_FMT_YUVA444P10BE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) AV_PIX_FMT_YUVA444P10LE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) AV_PIX_FMT_YUVA420P16BE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) AV_PIX_FMT_YUVA420P16LE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) AV_PIX_FMT_YUVA422P16BE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) AV_PIX_FMT_YUVA422P16LE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) AV_PIX_FMT_YUVA444P16BE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) AV_PIX_FMT_YUVA444P16LE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) AV_PIX_FMT_VDPAU, ///< HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface AV_PIX_FMT_XYZ12LE, ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as little-endian, the 4 lower bits are set to 0 AV_PIX_FMT_XYZ12BE, ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as big-endian, the 4 lower bits are set to 0 AV_PIX_FMT_NV16, ///< interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) AV_PIX_FMT_NV20LE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian AV_PIX_FMT_NV20BE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian AV_PIX_FMT_RGBA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian AV_PIX_FMT_RGBA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian AV_PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian AV_PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian AV_PIX_FMT_YVYU422, ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb AV_PIX_FMT_VDA, ///< HW acceleration through VDA, data[3] contains a CVPixelBufferRef AV_PIX_FMT_YA16BE, ///< 16 bits gray, 16 bits alpha (big-endian) AV_PIX_FMT_YA16LE, ///< 16 bits gray, 16 bits alpha (little-endian) AV_PIX_FMT_GBRAP, ///< planar GBRA 4:4:4:4 32bpp AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian /** * HW acceleration through QSV, data[3] contains a pointer to the * mfxFrameSurface1 structure. */ AV_PIX_FMT_QSV, /** * HW acceleration though MMAL, data[3] contains a pointer to the * MMAL_BUFFER_HEADER_T structure. */ AV_PIX_FMT_MMAL, AV_PIX_FMT_D3D11VA_VLD, ///< HW decoding through Direct3D11, Picture.data[3] contains a ID3D11VideoDecoderOutputView pointer /** * HW acceleration through CUDA. data[i] contain CUdeviceptr pointers * exactly as for system memory frames. */ AV_PIX_FMT_CUDA, AV_PIX_FMT_0RGB=0x123+4,///< packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined AV_PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined AV_PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined AV_PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined AV_PIX_FMT_YUV420P12BE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian AV_PIX_FMT_YUV420P12LE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian AV_PIX_FMT_YUV420P14BE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian AV_PIX_FMT_YUV420P14LE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian AV_PIX_FMT_YUV422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian AV_PIX_FMT_YUV422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian AV_PIX_FMT_YUV422P14BE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian AV_PIX_FMT_YUV422P14LE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian AV_PIX_FMT_YUV444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian AV_PIX_FMT_YUV444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian AV_PIX_FMT_YUV444P14BE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian AV_PIX_FMT_YUV444P14LE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian AV_PIX_FMT_GBRP12BE, ///< planar GBR 4:4:4 36bpp, big-endian AV_PIX_FMT_GBRP12LE, ///< planar GBR 4:4:4 36bpp, little-endian AV_PIX_FMT_GBRP14BE, ///< planar GBR 4:4:4 42bpp, big-endian AV_PIX_FMT_GBRP14LE, ///< planar GBR 4:4:4 42bpp, little-endian AV_PIX_FMT_YUVJ411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV411P and setting color_range AV_PIX_FMT_BAYER_BGGR8, ///< bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples */ AV_PIX_FMT_BAYER_RGGB8, ///< bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples */ AV_PIX_FMT_BAYER_GBRG8, ///< bayer, GBGB..(odd line), RGRG..(even line), 8-bit samples */ AV_PIX_FMT_BAYER_GRBG8, ///< bayer, GRGR..(odd line), BGBG..(even line), 8-bit samples */ AV_PIX_FMT_BAYER_BGGR16LE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, little-endian */ AV_PIX_FMT_BAYER_BGGR16BE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, big-endian */ AV_PIX_FMT_BAYER_RGGB16LE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, little-endian */ AV_PIX_FMT_BAYER_RGGB16BE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, big-endian */ AV_PIX_FMT_BAYER_GBRG16LE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, little-endian */ AV_PIX_FMT_BAYER_GBRG16BE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, big-endian */ AV_PIX_FMT_BAYER_GRBG16LE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian */ AV_PIX_FMT_BAYER_GRBG16BE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian */ #if !FF_API_XVMC AV_PIX_FMT_XVMC,///< XVideo Motion Acceleration via common packet passing #endif /* !FF_API_XVMC */ AV_PIX_FMT_YUV440P10LE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian AV_PIX_FMT_YUV440P10BE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian AV_PIX_FMT_YUV440P12LE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian AV_PIX_FMT_YUV440P12BE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian AV_PIX_FMT_AYUV64LE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), little-endian AV_PIX_FMT_AYUV64BE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), big-endian AV_PIX_FMT_VIDEOTOOLBOX, ///< hardware decoding through Videotoolbox AV_PIX_FMT_P010LE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian AV_PIX_FMT_P010BE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, big-endian AV_PIX_FMT_GBRAP12BE, ///< planar GBR 4:4:4:4 48bpp, big-endian AV_PIX_FMT_GBRAP12LE, ///< planar GBR 4:4:4:4 48bpp, little-endian AV_PIX_FMT_GBRAP10BE, ///< planar GBR 4:4:4:4 40bpp, big-endian AV_PIX_FMT_GBRAP10LE, ///< planar GBR 4:4:4:4 40bpp, little-endian AV_PIX_FMT_MEDIACODEC, ///< hardware decoding through MediaCodec AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions }; #if AV_HAVE_BIGENDIAN # define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##be #else # define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##le #endif #define AV_PIX_FMT_RGB32 AV_PIX_FMT_NE(ARGB, BGRA) #define AV_PIX_FMT_RGB32_1 AV_PIX_FMT_NE(RGBA, ABGR) #define AV_PIX_FMT_BGR32 AV_PIX_FMT_NE(ABGR, RGBA) #define AV_PIX_FMT_BGR32_1 AV_PIX_FMT_NE(BGRA, ARGB) #define AV_PIX_FMT_0RGB32 AV_PIX_FMT_NE(0RGB, BGR0) #define AV_PIX_FMT_0BGR32 AV_PIX_FMT_NE(0BGR, RGB0) #define AV_PIX_FMT_GRAY16 AV_PIX_FMT_NE(GRAY16BE, GRAY16LE) #define AV_PIX_FMT_YA16 AV_PIX_FMT_NE(YA16BE, YA16LE) #define AV_PIX_FMT_RGB48 AV_PIX_FMT_NE(RGB48BE, RGB48LE) #define AV_PIX_FMT_RGB565 AV_PIX_FMT_NE(RGB565BE, RGB565LE) #define AV_PIX_FMT_RGB555 AV_PIX_FMT_NE(RGB555BE, RGB555LE) #define AV_PIX_FMT_RGB444 AV_PIX_FMT_NE(RGB444BE, RGB444LE) #define AV_PIX_FMT_RGBA64 AV_PIX_FMT_NE(RGBA64BE, RGBA64LE) #define AV_PIX_FMT_BGR48 AV_PIX_FMT_NE(BGR48BE, BGR48LE) #define AV_PIX_FMT_BGR565 AV_PIX_FMT_NE(BGR565BE, BGR565LE) #define AV_PIX_FMT_BGR555 AV_PIX_FMT_NE(BGR555BE, BGR555LE) #define AV_PIX_FMT_BGR444 AV_PIX_FMT_NE(BGR444BE, BGR444LE) #define AV_PIX_FMT_BGRA64 AV_PIX_FMT_NE(BGRA64BE, BGRA64LE) #define AV_PIX_FMT_YUV420P9 AV_PIX_FMT_NE(YUV420P9BE , YUV420P9LE) #define AV_PIX_FMT_YUV422P9 AV_PIX_FMT_NE(YUV422P9BE , YUV422P9LE) #define AV_PIX_FMT_YUV444P9 AV_PIX_FMT_NE(YUV444P9BE , YUV444P9LE) #define AV_PIX_FMT_YUV420P10 AV_PIX_FMT_NE(YUV420P10BE, YUV420P10LE) #define AV_PIX_FMT_YUV422P10 AV_PIX_FMT_NE(YUV422P10BE, YUV422P10LE) #define AV_PIX_FMT_YUV440P10 AV_PIX_FMT_NE(YUV440P10BE, YUV440P10LE) #define AV_PIX_FMT_YUV444P10 AV_PIX_FMT_NE(YUV444P10BE, YUV444P10LE) #define AV_PIX_FMT_YUV420P12 AV_PIX_FMT_NE(YUV420P12BE, YUV420P12LE) #define AV_PIX_FMT_YUV422P12 AV_PIX_FMT_NE(YUV422P12BE, YUV422P12LE) #define AV_PIX_FMT_YUV440P12 AV_PIX_FMT_NE(YUV440P12BE, YUV440P12LE) #define AV_PIX_FMT_YUV444P12 AV_PIX_FMT_NE(YUV444P12BE, YUV444P12LE) #define AV_PIX_FMT_YUV420P14 AV_PIX_FMT_NE(YUV420P14BE, YUV420P14LE) #define AV_PIX_FMT_YUV422P14 AV_PIX_FMT_NE(YUV422P14BE, YUV422P14LE) #define AV_PIX_FMT_YUV444P14 AV_PIX_FMT_NE(YUV444P14BE, YUV444P14LE) #define AV_PIX_FMT_YUV420P16 AV_PIX_FMT_NE(YUV420P16BE, YUV420P16LE) #define AV_PIX_FMT_YUV422P16 AV_PIX_FMT_NE(YUV422P16BE, YUV422P16LE) #define AV_PIX_FMT_YUV444P16 AV_PIX_FMT_NE(YUV444P16BE, YUV444P16LE) #define AV_PIX_FMT_GBRP9 AV_PIX_FMT_NE(GBRP9BE , GBRP9LE) #define AV_PIX_FMT_GBRP10 AV_PIX_FMT_NE(GBRP10BE, GBRP10LE) #define AV_PIX_FMT_GBRP12 AV_PIX_FMT_NE(GBRP12BE, GBRP12LE) #define AV_PIX_FMT_GBRP14 AV_PIX_FMT_NE(GBRP14BE, GBRP14LE) #define AV_PIX_FMT_GBRP16 AV_PIX_FMT_NE(GBRP16BE, GBRP16LE) #define AV_PIX_FMT_GBRAP10 AV_PIX_FMT_NE(GBRAP10BE, GBRAP10LE) #define AV_PIX_FMT_GBRAP12 AV_PIX_FMT_NE(GBRAP12BE, GBRAP12LE) #define AV_PIX_FMT_GBRAP16 AV_PIX_FMT_NE(GBRAP16BE, GBRAP16LE) #define AV_PIX_FMT_BAYER_BGGR16 AV_PIX_FMT_NE(BAYER_BGGR16BE, BAYER_BGGR16LE) #define AV_PIX_FMT_BAYER_RGGB16 AV_PIX_FMT_NE(BAYER_RGGB16BE, BAYER_RGGB16LE) #define AV_PIX_FMT_BAYER_GBRG16 AV_PIX_FMT_NE(BAYER_GBRG16BE, BAYER_GBRG16LE) #define AV_PIX_FMT_BAYER_GRBG16 AV_PIX_FMT_NE(BAYER_GRBG16BE, BAYER_GRBG16LE) #define AV_PIX_FMT_YUVA420P9 AV_PIX_FMT_NE(YUVA420P9BE , YUVA420P9LE) #define AV_PIX_FMT_YUVA422P9 AV_PIX_FMT_NE(YUVA422P9BE , YUVA422P9LE) #define AV_PIX_FMT_YUVA444P9 AV_PIX_FMT_NE(YUVA444P9BE , YUVA444P9LE) #define AV_PIX_FMT_YUVA420P10 AV_PIX_FMT_NE(YUVA420P10BE, YUVA420P10LE) #define AV_PIX_FMT_YUVA422P10 AV_PIX_FMT_NE(YUVA422P10BE, YUVA422P10LE) #define AV_PIX_FMT_YUVA444P10 AV_PIX_FMT_NE(YUVA444P10BE, YUVA444P10LE) #define AV_PIX_FMT_YUVA420P16 AV_PIX_FMT_NE(YUVA420P16BE, YUVA420P16LE) #define AV_PIX_FMT_YUVA422P16 AV_PIX_FMT_NE(YUVA422P16BE, YUVA422P16LE) #define AV_PIX_FMT_YUVA444P16 AV_PIX_FMT_NE(YUVA444P16BE, YUVA444P16LE) #define AV_PIX_FMT_XYZ12 AV_PIX_FMT_NE(XYZ12BE, XYZ12LE) #define AV_PIX_FMT_NV20 AV_PIX_FMT_NE(NV20BE, NV20LE) #define AV_PIX_FMT_AYUV64 AV_PIX_FMT_NE(AYUV64BE, AYUV64LE) #define AV_PIX_FMT_P010 AV_PIX_FMT_NE(P010BE, P010LE) /** * Chromaticity coordinates of the source primaries. */ enum AVColorPrimaries { AVCOL_PRI_RESERVED0 = 0, AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B AVCOL_PRI_UNSPECIFIED = 2, AVCOL_PRI_RESERVED = 3, AVCOL_PRI_BT470M = 4, ///< also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above AVCOL_PRI_FILM = 8, ///< colour filters using Illuminant C AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 AVCOL_PRI_SMPTEST428_1 = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ) AVCOL_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) AVCOL_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 D65 (2010) AVCOL_PRI_NB ///< Not part of ABI }; /** * Color Transfer Characteristic. */ enum AVColorTransferCharacteristic { AVCOL_TRC_RESERVED0 = 0, AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361 AVCOL_TRC_UNSPECIFIED = 2, AVCOL_TRC_RESERVED = 3, AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG AVCOL_TRC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC AVCOL_TRC_SMPTE240M = 7, AVCOL_TRC_LINEAR = 8, ///< "Linear transfer characteristics" AVCOL_TRC_LOG = 9, ///< "Logarithmic transfer characteristic (100:1 range)" AVCOL_TRC_LOG_SQRT = 10, ///< "Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range)" AVCOL_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4 AVCOL_TRC_BT1361_ECG = 12, ///< ITU-R BT1361 Extended Colour Gamut AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC) AVCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10-bit system AVCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12-bit system AVCOL_TRC_SMPTEST2084 = 16, ///< SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems AVCOL_TRC_SMPTEST428_1 = 17, ///< SMPTE ST 428-1 AVCOL_TRC_ARIB_STD_B67 = 18, ///< ARIB STD-B67, known as "Hybrid log-gamma" AVCOL_TRC_NB ///< Not part of ABI }; /** * YUV colorspace type. */ enum AVColorSpace { AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB) AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B AVCOL_SPC_UNSPECIFIED = 2, AVCOL_SPC_RESERVED = 3, AVCOL_SPC_FCC = 4, ///< FCC Title 47 Code of Federal Regulations 73.682 (a)(20) AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC AVCOL_SPC_SMPTE240M = 7, ///< functionally identical to above AVCOL_SPC_YCOCG = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system AVCOL_SPC_SMPTE2085 = 11, ///< SMPTE 2085, Y'D'zD'x AVCOL_SPC_NB ///< Not part of ABI }; #define AVCOL_SPC_YCGCO AVCOL_SPC_YCOCG /** * MPEG vs JPEG YUV range. */ enum AVColorRange { AVCOL_RANGE_UNSPECIFIED = 0, AVCOL_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges AVCOL_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges AVCOL_RANGE_NB ///< Not part of ABI }; /** * Location of chroma samples. * * Illustration showing the location of the first (top left) chroma sample of the * image, the left shows only luma, the right * shows the location of the chroma sample, the 2 could be imagined to overlay * each other but are drawn separately due to limitations of ASCII * * 1st 2nd 1st 2nd horizontal luma sample positions * v v v v * ______ ______ *1st luma line > |X X ... |3 4 X ... X are luma samples, * | |1 2 1-6 are possible chroma positions *2nd luma line > |X X ... |5 6 X ... 0 is undefined/unknown position */ enum AVChromaLocation { AVCHROMA_LOC_UNSPECIFIED = 0, AVCHROMA_LOC_LEFT = 1, ///< MPEG-2/4 4:2:0, H.264 default for 4:2:0 AVCHROMA_LOC_CENTER = 2, ///< MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0 AVCHROMA_LOC_TOPLEFT = 3, ///< ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2 AVCHROMA_LOC_TOP = 4, AVCHROMA_LOC_BOTTOMLEFT = 5, AVCHROMA_LOC_BOTTOM = 6, AVCHROMA_LOC_NB ///< Not part of ABI }; #endif /* AVUTIL_PIXFMT_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/random_seed.h ================================================ /* * Copyright (c) 2009 Baptiste Coudurier * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_RANDOM_SEED_H #define AVUTIL_RANDOM_SEED_H #include /** * @addtogroup lavu_crypto * @{ */ /** * Get a seed to use in conjunction with random functions. * This function tries to provide a good seed at a best effort bases. * Its possible to call this function multiple times if more bits are needed. * It can be quite slow, which is why it should only be used as seed for a faster * PRNG. The quality of the seed depends on the platform. */ uint32_t av_get_random_seed(void); /** * @} */ #endif /* AVUTIL_RANDOM_SEED_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/rational.h ================================================ /* * rational numbers * Copyright (c) 2003 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * @ingroup lavu_math_rational * Utilties for rational number calculation. * @author Michael Niedermayer */ #ifndef AVUTIL_RATIONAL_H #define AVUTIL_RATIONAL_H #include #include #include "attributes.h" /** * @defgroup lavu_math_rational AVRational * @ingroup lavu_math * Rational number calculation. * * While rational numbers can be expressed as floating-point numbers, the * conversion process is a lossy one, so are floating-point operations. On the * other hand, the nature of FFmpeg demands highly accurate calculation of * timestamps. This set of rational number utilities serves as a generic * interface for manipulating rational numbers as pairs of numerators and * denominators. * * Many of the functions that operate on AVRational's have the suffix `_q`, in * reference to the mathematical symbol "ℚ" (Q) which denotes the set of all * rational numbers. * * @{ */ /** * Rational number (pair of numerator and denominator). */ typedef struct AVRational{ int num; ///< Numerator int den; ///< Denominator } AVRational; /** * Create an AVRational. * * Useful for compilers that do not support compound literals. * * @note The return value is not reduced. * @see av_reduce() */ static inline AVRational av_make_q(int num, int den) { AVRational r = { num, den }; return r; } /** * Compare two rationals. * * @param a First rational * @param b Second rational * * @return One of the following values: * - 0 if `a == b` * - 1 if `a > b` * - -1 if `a < b` * - `INT_MIN` if one of the values is of the form `0 / 0` */ static inline int av_cmp_q(AVRational a, AVRational b){ const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den; if(tmp) return (int)((tmp ^ a.den ^ b.den)>>63)|1; else if(b.den && a.den) return 0; else if(a.num && b.num) return (a.num>>31) - (b.num>>31); else return INT_MIN; } /** * Convert an AVRational to a `double`. * @param a AVRational to convert * @return `a` in floating-point form * @see av_d2q() */ static inline double av_q2d(AVRational a){ return a.num / (double) a.den; } /** * Reduce a fraction. * * This is useful for framerate calculations. * * @param[out] dst_num Destination numerator * @param[out] dst_den Destination denominator * @param[in] num Source numerator * @param[in] den Source denominator * @param[in] max Maximum allowed values for `dst_num` & `dst_den` * @return 1 if the operation is exact, 0 otherwise */ int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max); /** * Multiply two rationals. * @param b First rational * @param c Second rational * @return b*c */ AVRational av_mul_q(AVRational b, AVRational c) av_const; /** * Divide one rational by another. * @param b First rational * @param c Second rational * @return b/c */ AVRational av_div_q(AVRational b, AVRational c) av_const; /** * Add two rationals. * @param b First rational * @param c Second rational * @return b+c */ AVRational av_add_q(AVRational b, AVRational c) av_const; /** * Subtract one rational from another. * @param b First rational * @param c Second rational * @return b-c */ AVRational av_sub_q(AVRational b, AVRational c) av_const; /** * Invert a rational. * @param q value * @return 1 / q */ static av_always_inline AVRational av_inv_q(AVRational q) { AVRational r = { q.den, q.num }; return r; } /** * Convert a double precision floating point number to a rational. * * In case of infinity, the returned value is expressed as `{1, 0}` or * `{-1, 0}` depending on the sign. * * @param d `double` to convert * @param max Maximum allowed numerator and denominator * @return `d` in AVRational form * @see av_q2d() */ AVRational av_d2q(double d, int max) av_const; /** * Find which of the two rationals is closer to another rational. * * @param q Rational to be compared against * @param q1,q2 Rationals to be tested * @return One of the following values: * - 1 if `q1` is nearer to `q` than `q2` * - -1 if `q2` is nearer to `q` than `q1` * - 0 if they have the same distance */ int av_nearer_q(AVRational q, AVRational q1, AVRational q2); /** * Find the value in a list of rationals nearest a given reference rational. * * @param q Reference rational * @param q_list Array of rationals terminated by `{0, 0}` * @return Index of the nearest value found in the array */ int av_find_nearest_q_idx(AVRational q, const AVRational* q_list); /** * Convert an AVRational to a IEEE 32-bit `float` expressed in fixed-point * format. * * @param q Rational to be converted * @return Equivalent floating-point value, expressed as an unsigned 32-bit * integer. * @note The returned value is platform-indepedant. */ uint32_t av_q2intfloat(AVRational q); /** * @} */ #endif /* AVUTIL_RATIONAL_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/rc4.h ================================================ /* * RC4 encryption/decryption/pseudo-random number generator * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_RC4_H #define AVUTIL_RC4_H #include /** * @defgroup lavu_rc4 RC4 * @ingroup lavu_crypto * @{ */ typedef struct AVRC4 { uint8_t state[256]; int x, y; } AVRC4; /** * Allocate an AVRC4 context. */ AVRC4 *av_rc4_alloc(void); /** * @brief Initializes an AVRC4 context. * * @param key_bits must be a multiple of 8 * @param decrypt 0 for encryption, 1 for decryption, currently has no effect * @return zero on success, negative value otherwise */ int av_rc4_init(struct AVRC4 *d, const uint8_t *key, int key_bits, int decrypt); /** * @brief Encrypts / decrypts using the RC4 algorithm. * * @param count number of bytes * @param dst destination array, can be equal to src * @param src source array, can be equal to dst, may be NULL * @param iv not (yet) used for RC4, should be NULL * @param decrypt 0 for encryption, 1 for decryption, not (yet) used */ void av_rc4_crypt(struct AVRC4 *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); /** * @} */ #endif /* AVUTIL_RC4_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/replaygain.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_REPLAYGAIN_H #define AVUTIL_REPLAYGAIN_H #include /** * ReplayGain information (see * http://wiki.hydrogenaudio.org/index.php?title=ReplayGain_1.0_specification). * The size of this struct is a part of the public ABI. */ typedef struct AVReplayGain { /** * Track replay gain in microbels (divide by 100000 to get the value in dB). * Should be set to INT32_MIN when unknown. */ int32_t track_gain; /** * Peak track amplitude, with 100000 representing full scale (but values * may overflow). 0 when unknown. */ uint32_t track_peak; /** * Same as track_gain, but for the whole album. */ int32_t album_gain; /** * Same as track_peak, but for the whole album, */ uint32_t album_peak; } AVReplayGain; #endif /* AVUTIL_REPLAYGAIN_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/ripemd.h ================================================ /* * Copyright (C) 2007 Michael Niedermayer * Copyright (C) 2013 James Almer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * @ingroup lavu_ripemd * Public header for RIPEMD hash function implementation. */ #ifndef AVUTIL_RIPEMD_H #define AVUTIL_RIPEMD_H #include #include "attributes.h" #include "version.h" /** * @defgroup lavu_ripemd RIPEMD * @ingroup lavu_hash * RIPEMD hash function implementation. * * @{ */ extern const int av_ripemd_size; struct AVRIPEMD; /** * Allocate an AVRIPEMD context. */ struct AVRIPEMD *av_ripemd_alloc(void); /** * Initialize RIPEMD hashing. * * @param context pointer to the function context (of size av_ripemd_size) * @param bits number of bits in digest (128, 160, 256 or 320 bits) * @return zero if initialization succeeded, -1 otherwise */ int av_ripemd_init(struct AVRIPEMD* context, int bits); /** * Update hash value. * * @param context hash function context * @param data input data to update hash with * @param len input data length */ void av_ripemd_update(struct AVRIPEMD* context, const uint8_t* data, unsigned int len); /** * Finish hashing and output digest value. * * @param context hash function context * @param digest buffer where output digest value is stored */ void av_ripemd_final(struct AVRIPEMD* context, uint8_t *digest); /** * @} */ #endif /* AVUTIL_RIPEMD_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/samplefmt.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_SAMPLEFMT_H #define AVUTIL_SAMPLEFMT_H #include #include "avutil.h" #include "attributes.h" /** * @addtogroup lavu_audio * @{ * * @defgroup lavu_sampfmts Audio sample formats * * Audio sample format enumeration and related convenience functions. * @{ */ /** * Audio sample formats * * - The data described by the sample format is always in native-endian order. * Sample values can be expressed by native C types, hence the lack of a signed * 24-bit sample format even though it is a common raw audio data format. * * - The floating-point formats are based on full volume being in the range * [-1.0, 1.0]. Any values outside this range are beyond full volume level. * * - The data layout as used in av_samples_fill_arrays() and elsewhere in FFmpeg * (such as AVFrame in libavcodec) is as follows: * * @par * For planar sample formats, each audio channel is in a separate data plane, * and linesize is the buffer size, in bytes, for a single plane. All data * planes must be the same size. For packed sample formats, only the first data * plane is used, and samples for each channel are interleaved. In this case, * linesize is the buffer size, in bytes, for the 1 plane. * */ enum AVSampleFormat { AV_SAMPLE_FMT_NONE = -1, AV_SAMPLE_FMT_U8, ///< unsigned 8 bits AV_SAMPLE_FMT_S16, ///< signed 16 bits AV_SAMPLE_FMT_S32, ///< signed 32 bits AV_SAMPLE_FMT_FLT, ///< float AV_SAMPLE_FMT_DBL, ///< double AV_SAMPLE_FMT_U8P, ///< unsigned 8 bits, planar AV_SAMPLE_FMT_S16P, ///< signed 16 bits, planar AV_SAMPLE_FMT_S32P, ///< signed 32 bits, planar AV_SAMPLE_FMT_FLTP, ///< float, planar AV_SAMPLE_FMT_DBLP, ///< double, planar AV_SAMPLE_FMT_S64, ///< signed 64 bits AV_SAMPLE_FMT_S64P, ///< signed 64 bits, planar AV_SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if linking dynamically }; /** * Return the name of sample_fmt, or NULL if sample_fmt is not * recognized. */ const char *av_get_sample_fmt_name(enum AVSampleFormat sample_fmt); /** * Return a sample format corresponding to name, or AV_SAMPLE_FMT_NONE * on error. */ enum AVSampleFormat av_get_sample_fmt(const char *name); /** * Return the planar<->packed alternative form of the given sample format, or * AV_SAMPLE_FMT_NONE on error. If the passed sample_fmt is already in the * requested planar/packed format, the format returned is the same as the * input. */ enum AVSampleFormat av_get_alt_sample_fmt(enum AVSampleFormat sample_fmt, int planar); /** * Get the packed alternative form of the given sample format. * * If the passed sample_fmt is already in packed format, the format returned is * the same as the input. * * @return the packed alternative form of the given sample format or AV_SAMPLE_FMT_NONE on error. */ enum AVSampleFormat av_get_packed_sample_fmt(enum AVSampleFormat sample_fmt); /** * Get the planar alternative form of the given sample format. * * If the passed sample_fmt is already in planar format, the format returned is * the same as the input. * * @return the planar alternative form of the given sample format or AV_SAMPLE_FMT_NONE on error. */ enum AVSampleFormat av_get_planar_sample_fmt(enum AVSampleFormat sample_fmt); /** * Generate a string corresponding to the sample format with * sample_fmt, or a header if sample_fmt is negative. * * @param buf the buffer where to write the string * @param buf_size the size of buf * @param sample_fmt the number of the sample format to print the * corresponding info string, or a negative value to print the * corresponding header. * @return the pointer to the filled buffer or NULL if sample_fmt is * unknown or in case of other errors */ char *av_get_sample_fmt_string(char *buf, int buf_size, enum AVSampleFormat sample_fmt); /** * Return number of bytes per sample. * * @param sample_fmt the sample format * @return number of bytes per sample or zero if unknown for the given * sample format */ int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt); /** * Check if the sample format is planar. * * @param sample_fmt the sample format to inspect * @return 1 if the sample format is planar, 0 if it is interleaved */ int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt); /** * Get the required buffer size for the given audio parameters. * * @param[out] linesize calculated linesize, may be NULL * @param nb_channels the number of channels * @param nb_samples the number of samples in a single channel * @param sample_fmt the sample format * @param align buffer size alignment (0 = default, 1 = no alignment) * @return required buffer size, or negative error code on failure */ int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align); /** * @} * * @defgroup lavu_sampmanip Samples manipulation * * Functions that manipulate audio samples * @{ */ /** * Fill plane data pointers and linesize for samples with sample * format sample_fmt. * * The audio_data array is filled with the pointers to the samples data planes: * for planar, set the start point of each channel's data within the buffer, * for packed, set the start point of the entire buffer only. * * The value pointed to by linesize is set to the aligned size of each * channel's data buffer for planar layout, or to the aligned size of the * buffer for all channels for packed layout. * * The buffer in buf must be big enough to contain all the samples * (use av_samples_get_buffer_size() to compute its minimum size), * otherwise the audio_data pointers will point to invalid data. * * @see enum AVSampleFormat * The documentation for AVSampleFormat describes the data layout. * * @param[out] audio_data array to be filled with the pointer for each channel * @param[out] linesize calculated linesize, may be NULL * @param buf the pointer to a buffer containing the samples * @param nb_channels the number of channels * @param nb_samples the number of samples in a single channel * @param sample_fmt the sample format * @param align buffer size alignment (0 = default, 1 = no alignment) * @return >=0 on success or a negative error code on failure * @todo return minimum size in bytes required for the buffer in case * of success at the next bump */ int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, const uint8_t *buf, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align); /** * Allocate a samples buffer for nb_samples samples, and fill data pointers and * linesize accordingly. * The allocated samples buffer can be freed by using av_freep(&audio_data[0]) * Allocated data will be initialized to silence. * * @see enum AVSampleFormat * The documentation for AVSampleFormat describes the data layout. * * @param[out] audio_data array to be filled with the pointer for each channel * @param[out] linesize aligned size for audio buffer(s), may be NULL * @param nb_channels number of audio channels * @param nb_samples number of samples per channel * @param align buffer size alignment (0 = default, 1 = no alignment) * @return >=0 on success or a negative error code on failure * @todo return the size of the allocated buffer in case of success at the next bump * @see av_samples_fill_arrays() * @see av_samples_alloc_array_and_samples() */ int av_samples_alloc(uint8_t **audio_data, int *linesize, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align); /** * Allocate a data pointers array, samples buffer for nb_samples * samples, and fill data pointers and linesize accordingly. * * This is the same as av_samples_alloc(), but also allocates the data * pointers array. * * @see av_samples_alloc() */ int av_samples_alloc_array_and_samples(uint8_t ***audio_data, int *linesize, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align); /** * Copy samples from src to dst. * * @param dst destination array of pointers to data planes * @param src source array of pointers to data planes * @param dst_offset offset in samples at which the data will be written to dst * @param src_offset offset in samples at which the data will be read from src * @param nb_samples number of samples to be copied * @param nb_channels number of audio channels * @param sample_fmt audio sample format */ int av_samples_copy(uint8_t **dst, uint8_t * const *src, int dst_offset, int src_offset, int nb_samples, int nb_channels, enum AVSampleFormat sample_fmt); /** * Fill an audio buffer with silence. * * @param audio_data array of pointers to data planes * @param offset offset in samples at which to start filling * @param nb_samples number of samples to fill * @param nb_channels number of audio channels * @param sample_fmt audio sample format */ int av_samples_set_silence(uint8_t **audio_data, int offset, int nb_samples, int nb_channels, enum AVSampleFormat sample_fmt); /** * @} * @} */ #endif /* AVUTIL_SAMPLEFMT_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/sha.h ================================================ /* * Copyright (C) 2007 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * @ingroup lavu_sha * Public header for SHA-1 & SHA-256 hash function implementations. */ #ifndef AVUTIL_SHA_H #define AVUTIL_SHA_H #include #include "attributes.h" #include "version.h" /** * @defgroup lavu_sha SHA * @ingroup lavu_hash * SHA-1 and SHA-256 (Secure Hash Algorithm) hash function implementations. * * This module supports the following SHA hash functions: * * - SHA-1: 160 bits * - SHA-224: 224 bits, as a variant of SHA-2 * - SHA-256: 256 bits, as a variant of SHA-2 * * @see For SHA-384, SHA-512, and variants thereof, see @ref lavu_sha512. * * @{ */ extern const int av_sha_size; struct AVSHA; /** * Allocate an AVSHA context. */ struct AVSHA *av_sha_alloc(void); /** * Initialize SHA-1 or SHA-2 hashing. * * @param context pointer to the function context (of size av_sha_size) * @param bits number of bits in digest (SHA-1 - 160 bits, SHA-2 224 or 256 bits) * @return zero if initialization succeeded, -1 otherwise */ int av_sha_init(struct AVSHA* context, int bits); /** * Update hash value. * * @param context hash function context * @param data input data to update hash with * @param len input data length */ void av_sha_update(struct AVSHA* context, const uint8_t* data, unsigned int len); /** * Finish hashing and output digest value. * * @param context hash function context * @param digest buffer where output digest value is stored */ void av_sha_final(struct AVSHA* context, uint8_t *digest); /** * @} */ #endif /* AVUTIL_SHA_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/sha512.h ================================================ /* * Copyright (C) 2007 Michael Niedermayer * Copyright (C) 2013 James Almer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * @ingroup lavu_sha512 * Public header for SHA-512 implementation. */ #ifndef AVUTIL_SHA512_H #define AVUTIL_SHA512_H #include #include "attributes.h" #include "version.h" /** * @defgroup lavu_sha512 SHA-512 * @ingroup lavu_hash * SHA-512 (Secure Hash Algorithm) hash function implementations. * * This module supports the following SHA-2 hash functions: * * - SHA-512/224: 224 bits * - SHA-512/256: 256 bits * - SHA-384: 384 bits * - SHA-512: 512 bits * * @see For SHA-1, SHA-256, and variants thereof, see @ref lavu_sha. * * @{ */ extern const int av_sha512_size; struct AVSHA512; /** * Allocate an AVSHA512 context. */ struct AVSHA512 *av_sha512_alloc(void); /** * Initialize SHA-2 512 hashing. * * @param context pointer to the function context (of size av_sha512_size) * @param bits number of bits in digest (224, 256, 384 or 512 bits) * @return zero if initialization succeeded, -1 otherwise */ int av_sha512_init(struct AVSHA512* context, int bits); /** * Update hash value. * * @param context hash function context * @param data input data to update hash with * @param len input data length */ void av_sha512_update(struct AVSHA512* context, const uint8_t* data, unsigned int len); /** * Finish hashing and output digest value. * * @param context hash function context * @param digest buffer where output digest value is stored */ void av_sha512_final(struct AVSHA512* context, uint8_t *digest); /** * @} */ #endif /* AVUTIL_SHA512_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/stereo3d.h ================================================ /* * Copyright (c) 2013 Vittorio Giovara * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_STEREO3D_H #define AVUTIL_STEREO3D_H #include #include "frame.h" /** * List of possible 3D Types */ enum AVStereo3DType { /** * Video is not stereoscopic (and metadata has to be there). */ AV_STEREO3D_2D, /** * Views are next to each other. * * LLLLRRRR * LLLLRRRR * LLLLRRRR * ... */ AV_STEREO3D_SIDEBYSIDE, /** * Views are on top of each other. * * LLLLLLLL * LLLLLLLL * RRRRRRRR * RRRRRRRR */ AV_STEREO3D_TOPBOTTOM, /** * Views are alternated temporally. * * frame0 frame1 frame2 ... * LLLLLLLL RRRRRRRR LLLLLLLL * LLLLLLLL RRRRRRRR LLLLLLLL * LLLLLLLL RRRRRRRR LLLLLLLL * ... ... ... */ AV_STEREO3D_FRAMESEQUENCE, /** * Views are packed in a checkerboard-like structure per pixel. * * LRLRLRLR * RLRLRLRL * LRLRLRLR * ... */ AV_STEREO3D_CHECKERBOARD, /** * Views are next to each other, but when upscaling * apply a checkerboard pattern. * * LLLLRRRR L L L L R R R R * LLLLRRRR => L L L L R R R R * LLLLRRRR L L L L R R R R * LLLLRRRR L L L L R R R R */ AV_STEREO3D_SIDEBYSIDE_QUINCUNX, /** * Views are packed per line, as if interlaced. * * LLLLLLLL * RRRRRRRR * LLLLLLLL * ... */ AV_STEREO3D_LINES, /** * Views are packed per column. * * LRLRLRLR * LRLRLRLR * LRLRLRLR * ... */ AV_STEREO3D_COLUMNS, }; /** * Inverted views, Right/Bottom represents the left view. */ #define AV_STEREO3D_FLAG_INVERT (1 << 0) /** * Stereo 3D type: this structure describes how two videos are packed * within a single video surface, with additional information as needed. * * @note The struct must be allocated with av_stereo3d_alloc() and * its size is not a part of the public ABI. */ typedef struct AVStereo3D { /** * How views are packed within the video. */ enum AVStereo3DType type; /** * Additional information about the frame packing. */ int flags; } AVStereo3D; /** * Allocate an AVStereo3D structure and set its fields to default values. * The resulting struct can be freed using av_freep(). * * @return An AVStereo3D filled with default values or NULL on failure. */ AVStereo3D *av_stereo3d_alloc(void); /** * Allocate a complete AVFrameSideData and add it to the frame. * * @param frame The frame which side data is added to. * * @return The AVStereo3D structure to be filled by caller. */ AVStereo3D *av_stereo3d_create_side_data(AVFrame *frame); /** * Provide a human-readable name of a given stereo3d type. * * @param type The input stereo3d type value. * * @return The name of the stereo3d value, or "unknown". */ const char *av_stereo3d_type_name(unsigned int type); /** * Get the AVStereo3DType form a human-readable name. * * @param type The input string. * * @return The AVStereo3DType value, or -1 if not found. */ int av_stereo3d_from_name(const char *name); #endif /* AVUTIL_STEREO3D_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/tea.h ================================================ /* * A 32-bit implementation of the TEA algorithm * Copyright (c) 2015 Vesselin Bontchev * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_TEA_H #define AVUTIL_TEA_H #include /** * @file * @brief Public header for libavutil TEA algorithm * @defgroup lavu_tea TEA * @ingroup lavu_crypto * @{ */ extern const int av_tea_size; struct AVTEA; /** * Allocate an AVTEA context * To free the struct: av_free(ptr) */ struct AVTEA *av_tea_alloc(void); /** * Initialize an AVTEA context. * * @param ctx an AVTEA context * @param key a key of 16 bytes used for encryption/decryption * @param rounds the number of rounds in TEA (64 is the "standard") */ void av_tea_init(struct AVTEA *ctx, const uint8_t key[16], int rounds); /** * Encrypt or decrypt a buffer using a previously initialized context. * * @param ctx an AVTEA context * @param dst destination array, can be equal to src * @param src source array, can be equal to dst * @param count number of 8 byte blocks * @param iv initialization vector for CBC mode, if NULL then ECB will be used * @param decrypt 0 for encryption, 1 for decryption */ void av_tea_crypt(struct AVTEA *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); /** * @} */ #endif /* AVUTIL_TEA_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/thread.h ================================================ /* * 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 */ // This header should only be used to simplify code where // threading is optional, not as a generic threading abstraction. #ifndef AVUTIL_THREAD_H #define AVUTIL_THREAD_H #include "config.h" #if HAVE_PTHREADS || HAVE_W32THREADS || HAVE_OS2THREADS #define USE_ATOMICS 0 #if HAVE_PTHREADS #include #if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1 #include "log.h" #define ASSERT_PTHREAD_NORET(func, ...) do { \ int ret = func(__VA_ARGS__); \ if (ret) { \ av_log(NULL, AV_LOG_FATAL, AV_STRINGIFY(func) \ " failed with error: %s\n", av_err2str(AVERROR(ret))); \ abort(); \ } \ } while (0) #define ASSERT_PTHREAD(func, ...) do { \ ASSERT_PTHREAD_NORET(func, __VA_ARGS__); \ return 0; \ } while (0) static inline int strict_pthread_join(pthread_t thread, void **value_ptr) { ASSERT_PTHREAD(pthread_join, thread, value_ptr); } static inline int strict_pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr) { if (attr) { ASSERT_PTHREAD_NORET(pthread_mutex_init, mutex, attr); } else { pthread_mutexattr_t local_attr; ASSERT_PTHREAD_NORET(pthread_mutexattr_init, &local_attr); ASSERT_PTHREAD_NORET(pthread_mutexattr_settype, &local_attr, PTHREAD_MUTEX_ERRORCHECK); ASSERT_PTHREAD_NORET(pthread_mutex_init, mutex, &local_attr); ASSERT_PTHREAD_NORET(pthread_mutexattr_destroy, &local_attr); } return 0; } static inline int strict_pthread_mutex_destroy(pthread_mutex_t *mutex) { ASSERT_PTHREAD(pthread_mutex_destroy, mutex); } static inline int strict_pthread_mutex_lock(pthread_mutex_t *mutex) { ASSERT_PTHREAD(pthread_mutex_lock, mutex); } static inline int strict_pthread_mutex_unlock(pthread_mutex_t *mutex) { ASSERT_PTHREAD(pthread_mutex_unlock, mutex); } static inline int strict_pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr) { ASSERT_PTHREAD(pthread_cond_init, cond, attr); } static inline int strict_pthread_cond_destroy(pthread_cond_t *cond) { ASSERT_PTHREAD(pthread_cond_destroy, cond); } static inline int strict_pthread_cond_signal(pthread_cond_t *cond) { ASSERT_PTHREAD(pthread_cond_signal, cond); } static inline int strict_pthread_cond_broadcast(pthread_cond_t *cond) { ASSERT_PTHREAD(pthread_cond_broadcast, cond); } static inline int strict_pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) { ASSERT_PTHREAD(pthread_cond_wait, cond, mutex); } static inline int strict_pthread_once(pthread_once_t *once_control, void (*init_routine)(void)) { ASSERT_PTHREAD(pthread_once, once_control, init_routine); } #define pthread_join strict_pthread_join #define pthread_mutex_init strict_pthread_mutex_init #define pthread_mutex_destroy strict_pthread_mutex_destroy #define pthread_mutex_lock strict_pthread_mutex_lock #define pthread_mutex_unlock strict_pthread_mutex_unlock #define pthread_cond_init strict_pthread_cond_init #define pthread_cond_destroy strict_pthread_cond_destroy #define pthread_cond_signal strict_pthread_cond_signal #define pthread_cond_broadcast strict_pthread_cond_broadcast #define pthread_cond_wait strict_pthread_cond_wait #define pthread_once strict_pthread_once #endif #elif HAVE_OS2THREADS #include "compat/os2threads.h" #else #include "compat/w32pthreads.h" #endif #define AVMutex pthread_mutex_t #define ff_mutex_init pthread_mutex_init #define ff_mutex_lock pthread_mutex_lock #define ff_mutex_unlock pthread_mutex_unlock #define ff_mutex_destroy pthread_mutex_destroy #define AVOnce pthread_once_t #define AV_ONCE_INIT PTHREAD_ONCE_INIT #define ff_thread_once(control, routine) pthread_once(control, routine) #else #define USE_ATOMICS 1 #define AVMutex char #define ff_mutex_init(mutex, attr) (0) #define ff_mutex_lock(mutex) (0) #define ff_mutex_unlock(mutex) (0) #define ff_mutex_destroy(mutex) (0) #define AVOnce char #define AV_ONCE_INIT 0 static inline int ff_thread_once(char *control, void (*routine)(void)) { if (!*control) { routine(); *control = 1; } return 0; } #endif #endif /* AVUTIL_THREAD_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/threadmessage.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with FFmpeg; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_THREADMESSAGE_H #define AVUTIL_THREADMESSAGE_H typedef struct AVThreadMessageQueue AVThreadMessageQueue; typedef enum AVThreadMessageFlags { /** * Perform non-blocking operation. * If this flag is set, send and recv operations are non-blocking and * return AVERROR(EAGAIN) immediately if they can not proceed. */ AV_THREAD_MESSAGE_NONBLOCK = 1, } AVThreadMessageFlags; /** * Allocate a new message queue. * * @param mq pointer to the message queue * @param nelem maximum number of elements in the queue * @param elsize size of each element in the queue * @return >=0 for success; <0 for error, in particular AVERROR(ENOSYS) if * lavu was built without thread support */ int av_thread_message_queue_alloc(AVThreadMessageQueue **mq, unsigned nelem, unsigned elsize); /** * Free a message queue. * * The message queue must no longer be in use by another thread. */ void av_thread_message_queue_free(AVThreadMessageQueue **mq); /** * Send a message on the queue. */ int av_thread_message_queue_send(AVThreadMessageQueue *mq, void *msg, unsigned flags); /** * Receive a message from the queue. */ int av_thread_message_queue_recv(AVThreadMessageQueue *mq, void *msg, unsigned flags); /** * Set the sending error code. * * If the error code is set to non-zero, av_thread_message_queue_send() will * return it immediately. Conventional values, such as AVERROR_EOF or * AVERROR(EAGAIN), can be used to cause the sending thread to stop or * suspend its operation. */ void av_thread_message_queue_set_err_send(AVThreadMessageQueue *mq, int err); /** * Set the receiving error code. * * If the error code is set to non-zero, av_thread_message_queue_recv() will * return it immediately when there are no longer available messages. * Conventional values, such as AVERROR_EOF or AVERROR(EAGAIN), can be used * to cause the receiving thread to stop or suspend its operation. */ void av_thread_message_queue_set_err_recv(AVThreadMessageQueue *mq, int err); /** * Set the optional free message callback function which will be called if an * operation is removing messages from the queue. */ void av_thread_message_queue_set_free_func(AVThreadMessageQueue *mq, void (*free_func)(void *msg)); /** * Flush the message queue * * This function is mostly equivalent to reading and free-ing every message * except that it will be done in a single operation (no lock/unlock between * reads). */ void av_thread_message_flush(AVThreadMessageQueue *mq); #endif /* AVUTIL_THREADMESSAGE_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/time.h ================================================ /* * Copyright (c) 2000-2003 Fabrice Bellard * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_TIME_H #define AVUTIL_TIME_H #include /** * Get the current time in microseconds. */ int64_t av_gettime(void); /** * Get the current time in microseconds since some unspecified starting point. * On platforms that support it, the time comes from a monotonic clock * This property makes this time source ideal for measuring relative time. * The returned values may not be monotonic on platforms where a monotonic * clock is not available. */ int64_t av_gettime_relative(void); /** * Indicates with a boolean result if the av_gettime_relative() time source * is monotonic. */ int av_gettime_relative_is_monotonic(void); /** * Sleep for a period of time. Although the duration is expressed in * microseconds, the actual delay may be rounded to the precision of the * system timer. * * @param usec Number of microseconds to sleep. * @return zero on success or (negative) error code. */ int av_usleep(unsigned usec); #endif /* AVUTIL_TIME_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/timecode.h ================================================ /* * Copyright (c) 2006 Smartjog S.A.S, Baptiste Coudurier * Copyright (c) 2011-2012 Smartjog S.A.S, Clément Bœsch * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * Timecode helpers header */ #ifndef AVUTIL_TIMECODE_H #define AVUTIL_TIMECODE_H #include #include "rational.h" #define AV_TIMECODE_STR_SIZE 16 enum AVTimecodeFlag { AV_TIMECODE_FLAG_DROPFRAME = 1<<0, ///< timecode is drop frame AV_TIMECODE_FLAG_24HOURSMAX = 1<<1, ///< timecode wraps after 24 hours AV_TIMECODE_FLAG_ALLOWNEGATIVE = 1<<2, ///< negative time values are allowed }; typedef struct { int start; ///< timecode frame start (first base frame number) uint32_t flags; ///< flags such as drop frame, +24 hours support, ... AVRational rate; ///< frame rate in rational form unsigned fps; ///< frame per second; must be consistent with the rate field } AVTimecode; /** * Adjust frame number for NTSC drop frame time code. * * @param framenum frame number to adjust * @param fps frame per second, 30 or 60 * @return adjusted frame number * @warning adjustment is only valid in NTSC 29.97 and 59.94 */ int av_timecode_adjust_ntsc_framenum2(int framenum, int fps); /** * Convert frame number to SMPTE 12M binary representation. * * @param tc timecode data correctly initialized * @param framenum frame number * @return the SMPTE binary representation * * @note Frame number adjustment is automatically done in case of drop timecode, * you do NOT have to call av_timecode_adjust_ntsc_framenum2(). * @note The frame number is relative to tc->start. * @note Color frame (CF), binary group flags (BGF) and biphase mark polarity * correction (PC) bits are set to zero. */ uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum); /** * Load timecode string in buf. * * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long * @param tc timecode data correctly initialized * @param framenum frame number * @return the buf parameter * * @note Timecode representation can be a negative timecode and have more than * 24 hours, but will only be honored if the flags are correctly set. * @note The frame number is relative to tc->start. */ char *av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum); /** * Get the timecode string from the SMPTE timecode format. * * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long * @param tcsmpte the 32-bit SMPTE timecode * @param prevent_df prevent the use of a drop flag when it is known the DF bit * is arbitrary * @return the buf parameter */ char *av_timecode_make_smpte_tc_string(char *buf, uint32_t tcsmpte, int prevent_df); /** * Get the timecode string from the 25-bit timecode format (MPEG GOP format). * * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long * @param tc25bit the 25-bits timecode * @return the buf parameter */ char *av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit); /** * Init a timecode struct with the passed parameters. * * @param log_ctx a pointer to an arbitrary struct of which the first field * is a pointer to an AVClass struct (used for av_log) * @param tc pointer to an allocated AVTimecode * @param rate frame rate in rational form * @param flags miscellaneous flags such as drop frame, +24 hours, ... * (see AVTimecodeFlag) * @param frame_start the first frame number * @return 0 on success, AVERROR otherwise */ int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start, void *log_ctx); /** * Parse timecode representation (hh:mm:ss[:;.]ff). * * @param log_ctx a pointer to an arbitrary struct of which the first field is a * pointer to an AVClass struct (used for av_log). * @param tc pointer to an allocated AVTimecode * @param rate frame rate in rational form * @param str timecode string which will determine the frame start * @return 0 on success, AVERROR otherwise */ int av_timecode_init_from_string(AVTimecode *tc, AVRational rate, const char *str, void *log_ctx); /** * Check if the timecode feature is available for the given frame rate * * @return 0 if supported, <0 otherwise */ int av_timecode_check_frame_rate(AVRational rate); #endif /* AVUTIL_TIMECODE_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/timestamp.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * timestamp utils, mostly useful for debugging/logging purposes */ #ifndef AVUTIL_TIMESTAMP_H #define AVUTIL_TIMESTAMP_H #include "common.h" #if defined(__cplusplus) && !defined(__STDC_FORMAT_MACROS) && !defined(PRId64) #error missing -D__STDC_FORMAT_MACROS / #define __STDC_FORMAT_MACROS #endif #define AV_TS_MAX_STRING_SIZE 32 /** * Fill the provided buffer with a string containing a timestamp * representation. * * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE * @param ts the timestamp to represent * @return the buffer in input */ static inline char *av_ts_make_string(char *buf, int64_t ts) { if (ts == AV_NOPTS_VALUE) snprintf(buf, AV_TS_MAX_STRING_SIZE, "NOPTS"); else snprintf(buf, AV_TS_MAX_STRING_SIZE, "%" PRId64, ts); return buf; } /** * Convenience macro, the return value should be used only directly in * function arguments but never stand-alone. */ #define av_ts2str(ts) av_ts_make_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts) /** * Fill the provided buffer with a string containing a timestamp time * representation. * * @param buf a buffer with size in bytes of at least AV_TS_MAX_STRING_SIZE * @param ts the timestamp to represent * @param tb the timebase of the timestamp * @return the buffer in input */ static inline char *av_ts_make_time_string(char *buf, int64_t ts, AVRational *tb) { if (ts == AV_NOPTS_VALUE) snprintf(buf, AV_TS_MAX_STRING_SIZE, "NOPTS"); else snprintf(buf, AV_TS_MAX_STRING_SIZE, "%.6g", av_q2d(*tb) * ts); return buf; } /** * Convenience macro, the return value should be used only directly in * function arguments but never stand-alone. */ #define av_ts2timestr(ts, tb) av_ts_make_time_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts, tb) #endif /* AVUTIL_TIMESTAMP_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/tree.h ================================================ /* * copyright (c) 2006 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * A tree container. * @author Michael Niedermayer */ #ifndef AVUTIL_TREE_H #define AVUTIL_TREE_H #include "attributes.h" #include "version.h" /** * @addtogroup lavu_tree AVTree * @ingroup lavu_data * * Low-complexity tree container * * Insertion, removal, finding equal, largest which is smaller than and * smallest which is larger than, all have O(log n) worst-case complexity. * @{ */ struct AVTreeNode; extern const int av_tree_node_size; /** * Allocate an AVTreeNode. */ struct AVTreeNode *av_tree_node_alloc(void); /** * Find an element. * @param root a pointer to the root node of the tree * @param next If next is not NULL, then next[0] will contain the previous * element and next[1] the next element. If either does not exist, * then the corresponding entry in next is unchanged. * @param cmp compare function used to compare elements in the tree, * API identical to that of Standard C's qsort * It is guaranteed that the first and only the first argument to cmp() * will be the key parameter to av_tree_find(), thus it could if the * user wants, be a different type (like an opaque context). * @return An element with cmp(key, elem) == 0 or NULL if no such element * exists in the tree. */ void *av_tree_find(const struct AVTreeNode *root, void *key, int (*cmp)(const void *key, const void *b), void *next[2]); /** * Insert or remove an element. * * If *next is NULL, then the supplied element will be removed if it exists. * If *next is non-NULL, then the supplied element will be inserted, unless * it already exists in the tree. * * @param rootp A pointer to a pointer to the root node of the tree; note that * the root node can change during insertions, this is required * to keep the tree balanced. * @param key pointer to the element key to insert in the tree * @param next Used to allocate and free AVTreeNodes. For insertion the user * must set it to an allocated and zeroed object of at least * av_tree_node_size bytes size. av_tree_insert() will set it to * NULL if it has been consumed. * For deleting elements *next is set to NULL by the user and * av_tree_insert() will set it to the AVTreeNode which was * used for the removed element. * This allows the use of flat arrays, which have * lower overhead compared to many malloced elements. * You might want to define a function like: * @code * void *tree_insert(struct AVTreeNode **rootp, void *key, * int (*cmp)(void *key, const void *b), * AVTreeNode **next) * { * if (!*next) * *next = av_mallocz(av_tree_node_size); * return av_tree_insert(rootp, key, cmp, next); * } * void *tree_remove(struct AVTreeNode **rootp, void *key, * int (*cmp)(void *key, const void *b, AVTreeNode **next)) * { * av_freep(next); * return av_tree_insert(rootp, key, cmp, next); * } * @endcode * @param cmp compare function used to compare elements in the tree, API identical * to that of Standard C's qsort * @return If no insertion happened, the found element; if an insertion or * removal happened, then either key or NULL will be returned. * Which one it is depends on the tree state and the implementation. You * should make no assumptions that it's one or the other in the code. */ void *av_tree_insert(struct AVTreeNode **rootp, void *key, int (*cmp)(const void *key, const void *b), struct AVTreeNode **next); void av_tree_destroy(struct AVTreeNode *t); /** * Apply enu(opaque, &elem) to all the elements in the tree in a given range. * * @param cmp a comparison function that returns < 0 for an element below the * range, > 0 for an element above the range and == 0 for an * element inside the range * * @note The cmp function should use the same ordering used to construct the * tree. */ void av_tree_enumerate(struct AVTreeNode *t, void *opaque, int (*cmp)(void *opaque, void *elem), int (*enu)(void *opaque, void *elem)); /** * @} */ #endif /* AVUTIL_TREE_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/twofish.h ================================================ /* * An implementation of the TwoFish algorithm * Copyright (c) 2015 Supraja Meedinti * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_TWOFISH_H #define AVUTIL_TWOFISH_H #include /** * @file * @brief Public header for libavutil TWOFISH algorithm * @defgroup lavu_twofish TWOFISH * @ingroup lavu_crypto * @{ */ extern const int av_twofish_size; struct AVTWOFISH; /** * Allocate an AVTWOFISH context * To free the struct: av_free(ptr) */ struct AVTWOFISH *av_twofish_alloc(void); /** * Initialize an AVTWOFISH context. * * @param ctx an AVTWOFISH context * @param key a key of size ranging from 1 to 32 bytes used for encryption/decryption * @param key_bits number of keybits: 128, 192, 256 If less than the required, padded with zeroes to nearest valid value; return value is 0 if key_bits is 128/192/256, -1 if less than 0, 1 otherwise */ int av_twofish_init(struct AVTWOFISH *ctx, const uint8_t *key, int key_bits); /** * Encrypt or decrypt a buffer using a previously initialized context * * @param ctx an AVTWOFISH context * @param dst destination array, can be equal to src * @param src source array, can be equal to dst * @param count number of 16 byte blocks * @paran iv initialization vector for CBC mode, NULL for ECB mode * @param decrypt 0 for encryption, 1 for decryption */ void av_twofish_crypt(struct AVTWOFISH *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t* iv, int decrypt); /** * @} */ #endif /* AVUTIL_TWOFISH_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/version.h ================================================ /* * copyright (c) 2003 Fabrice Bellard * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * @ingroup lavu * Libavutil version macros */ #ifndef AVUTIL_VERSION_H #define AVUTIL_VERSION_H #include "macros.h" /** * @addtogroup version_utils * * Useful to check and match library version in order to maintain * backward compatibility. * * The FFmpeg libraries follow a versioning sheme very similar to * Semantic Versioning (http://semver.org/) * The difference is that the component called PATCH is called MICRO in FFmpeg * and its value is reset to 100 instead of 0 to keep it above or equal to 100. * Also we do not increase MICRO for every bugfix or change in git master. * * Prior to FFmpeg 3.2 point releases did not change any lib version number to * avoid aliassing different git master checkouts. * Starting with FFmpeg 3.2, the released library versions will occupy * a separate MAJOR.MINOR that is not used on the master development branch. * That is if we branch a release of master 55.10.123 we will bump to 55.11.100 * for the release and master will continue at 55.12.100 after it. Each new * point release will then bump the MICRO improving the usefulness of the lib * versions. * * @{ */ #define AV_VERSION_INT(a, b, c) ((a)<<16 | (b)<<8 | (c)) #define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) /** * Extract version components from the full ::AV_VERSION_INT int as returned * by functions like ::avformat_version() and ::avcodec_version() */ #define AV_VERSION_MAJOR(a) ((a) >> 16) #define AV_VERSION_MINOR(a) (((a) & 0x00FF00) >> 8) #define AV_VERSION_MICRO(a) ((a) & 0xFF) /** * @} */ /** * @defgroup lavu_ver Version and Build diagnostics * * Macros and function useful to check at compiletime and at runtime * which version of libavutil is in use. * * @{ */ #define LIBAVUTIL_VERSION_MAJOR 55 #define LIBAVUTIL_VERSION_MINOR 34 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \ LIBAVUTIL_VERSION_MICRO) #define LIBAVUTIL_VERSION AV_VERSION(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \ LIBAVUTIL_VERSION_MICRO) #define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT #define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION) /** * @defgroup lavu_depr_guards Deprecation Guards * FF_API_* defines may be placed below to indicate public API that will be * dropped at a future version bump. The defines themselves are not part of * the public API and may change, break or disappear at any time. * * @note, when bumping the major version it is recommended to manually * disable each FF_API_* in its own commit instead of disabling them all * at once through the bump. This improves the git bisect-ability of the change. * * @{ */ #ifndef FF_API_VDPAU #define FF_API_VDPAU (LIBAVUTIL_VERSION_MAJOR < 56) #endif #ifndef FF_API_XVMC #define FF_API_XVMC (LIBAVUTIL_VERSION_MAJOR < 56) #endif #ifndef FF_API_OPT_TYPE_METADATA #define FF_API_OPT_TYPE_METADATA (LIBAVUTIL_VERSION_MAJOR < 56) #endif #ifndef FF_API_DLOG #define FF_API_DLOG (LIBAVUTIL_VERSION_MAJOR < 56) #endif #ifndef FF_API_VAAPI #define FF_API_VAAPI (LIBAVUTIL_VERSION_MAJOR < 56) #endif #ifndef FF_API_FRAME_QP #define FF_API_FRAME_QP (LIBAVUTIL_VERSION_MAJOR < 56) #endif #ifndef FF_API_PLUS1_MINUS1 #define FF_API_PLUS1_MINUS1 (LIBAVUTIL_VERSION_MAJOR < 56) #endif #ifndef FF_API_ERROR_FRAME #define FF_API_ERROR_FRAME (LIBAVUTIL_VERSION_MAJOR < 56) #endif #ifndef FF_API_CRC_BIG_TABLE #define FF_API_CRC_BIG_TABLE (LIBAVUTIL_VERSION_MAJOR < 56) #endif #ifndef FF_API_PKT_PTS #define FF_API_PKT_PTS (LIBAVUTIL_VERSION_MAJOR < 56) #endif /** * @} * @} */ #endif /* AVUTIL_VERSION_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/x86_64/avconfig.h ================================================ /* Generated by ffconf */ #ifndef AVUTIL_AVCONFIG_H #define AVUTIL_AVCONFIG_H #define AV_HAVE_BIGENDIAN 0 #define AV_HAVE_FAST_UNALIGNED 0 #endif /* AVUTIL_AVCONFIG_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/x86_64/ffversion.h ================================================ /* Automatically generated by version.sh, do not manually edit! */ #ifndef AVUTIL_FFVERSION_H #define AVUTIL_FFVERSION_H #define FFMPEG_VERSION "ff3.2--ijk0.7.6--20170203--001" #endif /* AVUTIL_FFVERSION_H */ ================================================ FILE: 3rParty/FFmpeg/include/libavutil/xtea.h ================================================ /* * A 32-bit implementation of the XTEA algorithm * Copyright (c) 2012 Samuel Pitoiset * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVUTIL_XTEA_H #define AVUTIL_XTEA_H #include /** * @file * @brief Public header for libavutil XTEA algorithm * @defgroup lavu_xtea XTEA * @ingroup lavu_crypto * @{ */ typedef struct AVXTEA { uint32_t key[16]; } AVXTEA; /** * Allocate an AVXTEA context. */ AVXTEA *av_xtea_alloc(void); /** * Initialize an AVXTEA context. * * @param ctx an AVXTEA context * @param key a key of 16 bytes used for encryption/decryption, * interpreted as big endian 32 bit numbers */ void av_xtea_init(struct AVXTEA *ctx, const uint8_t key[16]); /** * Initialize an AVXTEA context. * * @param ctx an AVXTEA context * @param key a key of 16 bytes used for encryption/decryption, * interpreted as little endian 32 bit numbers */ void av_xtea_le_init(struct AVXTEA *ctx, const uint8_t key[16]); /** * Encrypt or decrypt a buffer using a previously initialized context, * in big endian format. * * @param ctx an AVXTEA context * @param dst destination array, can be equal to src * @param src source array, can be equal to dst * @param count number of 8 byte blocks * @param iv initialization vector for CBC mode, if NULL then ECB will be used * @param decrypt 0 for encryption, 1 for decryption */ void av_xtea_crypt(struct AVXTEA *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); /** * Encrypt or decrypt a buffer using a previously initialized context, * in little endian format. * * @param ctx an AVXTEA context * @param dst destination array, can be equal to src * @param src source array, can be equal to dst * @param count number of 8 byte blocks * @param iv initialization vector for CBC mode, if NULL then ECB will be used * @param decrypt 0 for encryption, 1 for decryption */ void av_xtea_le_crypt(struct AVXTEA *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt); /** * @} */ #endif /* AVUTIL_XTEA_H */ ================================================ FILE: 3rParty/FFmpeg/include/libffmpeg/arm64/config.h ================================================ /* Automatically generated by configure - do not modify! */ #ifndef FFMPEG_CONFIG_H #define FFMPEG_CONFIG_H #define FFMPEG_CONFIGURATION "--disable-gpl --disable-nonfree --enable-runtime-cpudetect --disable-gray --disable-swscale-alpha --disable-programs --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-avdevice --enable-avcodec --enable-avformat --enable-avutil --enable-swresample --enable-swscale --disable-postproc --enable-avfilter --disable-avresample --enable-network --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --disable-encoders --disable-decoders --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=flv --enable-decoder=h264 --enable-decoder='mp3*' --enable-decoder=vp6f --disable-hwaccels --disable-muxers --enable-muxer=mp4 --disable-demuxers --enable-demuxer=aac --enable-demuxer=concat --enable-demuxer=data --enable-demuxer=flv --enable-demuxer=hls --enable-demuxer=live_flv --enable-demuxer=mov --enable-demuxer=mp3 --enable-demuxer=mpegps --enable-demuxer=mpegts --enable-demuxer=mpegvideo --disable-parsers --enable-parser=aac --enable-parser=aac_latm --enable-parser=h264 --enable-bsfs --disable-bsf=chomp --disable-bsf=dca_core --disable-bsf=dump_extradata --disable-bsf=hevc_mp4toannexb --disable-bsf=imx_dump_header --disable-bsf=mjpeg2jpeg --disable-bsf=mjpega_dump_header --disable-bsf=mov2textsub --disable-bsf=mp3_header_decompress --disable-bsf=mpeg4_unpack_bframes --disable-bsf=noise --disable-bsf=remove_extradata --disable-bsf=text2movsub --disable-bsf=vp9_superframe --enable-protocols --enable-protocol=async --disable-protocol=bluray --disable-protocol=concat --disable-protocol=crypto --disable-protocol=ffrtmpcrypt --enable-protocol=ffrtmphttp --disable-protocol=gopher --disable-protocol=icecast --disable-protocol='librtmp*' --disable-protocol=libssh --disable-protocol=md5 --disable-protocol=mmsh --disable-protocol=mmst --disable-protocol='rtmp*' --enable-protocol=rtmp --enable-protocol=rtmpt --disable-protocol=rtp --disable-protocol=sctp --disable-protocol=srtp --disable-protocol=subfile --disable-protocol=unix --disable-devices --disable-filters --disable-iconv --disable-audiotoolbox --disable-videotoolbox --enable-cross-compile --disable-stripping --arch=arm64 --target-os=darwin --enable-static --disable-shared --enable-pic --enable-neon --enable-optimizations --enable-debug --enable-small --prefix=/Users/lhl/Downloads/ijkplayer-master/ios/build/ffmpeg-arm64/output --enable-openssl --cc='xcrun -sdk iphoneos clang' --extra-cflags=' -arch arm64 -miphoneos-version-min=7.0 -fembed-bitcode -I/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-arm64/output/include' --extra-cxxflags=' -arch arm64 -miphoneos-version-min=7.0 -fembed-bitcode -I/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-arm64/output/include' --extra-ldflags=' -arch arm64 -miphoneos-version-min=7.0 -fembed-bitcode -arch arm64 -miphoneos-version-min=7.0 -fembed-bitcode -I/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-arm64/output/include -L/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-arm64/output/lib -lssl -lcrypto'" #define FFMPEG_LICENSE "LGPL version 2.1 or later" #define CONFIG_THIS_YEAR 2016 #define FFMPEG_DATADIR "/Users/lhl/Downloads/ijkplayer-master/ios/build/ffmpeg-arm64/output/share/ffmpeg" #define AVCONV_DATADIR "/Users/lhl/Downloads/ijkplayer-master/ios/build/ffmpeg-arm64/output/share/ffmpeg" #define CC_IDENT "Apple LLVM version 8.0.0 (clang-800.0.42.1)" #define av_restrict restrict #define EXTERN_PREFIX "_" #define EXTERN_ASM _ #define BUILDSUF "" #define SLIBSUF ".dylib" #define HAVE_MMX2 HAVE_MMXEXT #define SWS_MAX_FILTER_SIZE 256 #define ARCH_AARCH64 1 #define ARCH_ALPHA 0 #define ARCH_ARM 0 #define ARCH_AVR32 0 #define ARCH_AVR32_AP 0 #define ARCH_AVR32_UC 0 #define ARCH_BFIN 0 #define ARCH_IA64 0 #define ARCH_M68K 0 #define ARCH_MIPS 0 #define ARCH_MIPS64 0 #define ARCH_PARISC 0 #define ARCH_PPC 0 #define ARCH_PPC64 0 #define ARCH_S390 0 #define ARCH_SH4 0 #define ARCH_SPARC 0 #define ARCH_SPARC64 0 #define ARCH_TILEGX 0 #define ARCH_TILEPRO 0 #define ARCH_TOMI 0 #define ARCH_X86 0 #define ARCH_X86_32 0 #define ARCH_X86_64 0 #define HAVE_ARMV5TE 0 #define HAVE_ARMV6 0 #define HAVE_ARMV6T2 0 #define HAVE_ARMV8 1 #define HAVE_NEON 1 #define HAVE_VFP 1 #define HAVE_VFPV3 0 #define HAVE_SETEND 0 #define HAVE_ALTIVEC 0 #define HAVE_DCBZL 0 #define HAVE_LDBRX 0 #define HAVE_POWER8 0 #define HAVE_PPC4XX 0 #define HAVE_VSX 0 #define HAVE_AESNI 0 #define HAVE_AMD3DNOW 0 #define HAVE_AMD3DNOWEXT 0 #define HAVE_AVX 0 #define HAVE_AVX2 0 #define HAVE_FMA3 0 #define HAVE_FMA4 0 #define HAVE_MMX 0 #define HAVE_MMXEXT 0 #define HAVE_SSE 0 #define HAVE_SSE2 0 #define HAVE_SSE3 0 #define HAVE_SSE4 0 #define HAVE_SSE42 0 #define HAVE_SSSE3 0 #define HAVE_XOP 0 #define HAVE_CPUNOP 0 #define HAVE_I686 0 #define HAVE_MIPSFPU 0 #define HAVE_MIPS32R2 0 #define HAVE_MIPS32R5 0 #define HAVE_MIPS64R2 0 #define HAVE_MIPS32R6 0 #define HAVE_MIPS64R6 0 #define HAVE_MIPSDSP 0 #define HAVE_MIPSDSPR2 0 #define HAVE_MSA 0 #define HAVE_LOONGSON2 0 #define HAVE_LOONGSON3 0 #define HAVE_MMI 0 #define HAVE_ARMV5TE_EXTERNAL 0 #define HAVE_ARMV6_EXTERNAL 0 #define HAVE_ARMV6T2_EXTERNAL 0 #define HAVE_ARMV8_EXTERNAL 1 #define HAVE_NEON_EXTERNAL 1 #define HAVE_VFP_EXTERNAL 1 #define HAVE_VFPV3_EXTERNAL 0 #define HAVE_SETEND_EXTERNAL 0 #define HAVE_ALTIVEC_EXTERNAL 0 #define HAVE_DCBZL_EXTERNAL 0 #define HAVE_LDBRX_EXTERNAL 0 #define HAVE_POWER8_EXTERNAL 0 #define HAVE_PPC4XX_EXTERNAL 0 #define HAVE_VSX_EXTERNAL 0 #define HAVE_AESNI_EXTERNAL 0 #define HAVE_AMD3DNOW_EXTERNAL 0 #define HAVE_AMD3DNOWEXT_EXTERNAL 0 #define HAVE_AVX_EXTERNAL 0 #define HAVE_AVX2_EXTERNAL 0 #define HAVE_FMA3_EXTERNAL 0 #define HAVE_FMA4_EXTERNAL 0 #define HAVE_MMX_EXTERNAL 0 #define HAVE_MMXEXT_EXTERNAL 0 #define HAVE_SSE_EXTERNAL 0 #define HAVE_SSE2_EXTERNAL 0 #define HAVE_SSE3_EXTERNAL 0 #define HAVE_SSE4_EXTERNAL 0 #define HAVE_SSE42_EXTERNAL 0 #define HAVE_SSSE3_EXTERNAL 0 #define HAVE_XOP_EXTERNAL 0 #define HAVE_CPUNOP_EXTERNAL 0 #define HAVE_I686_EXTERNAL 0 #define HAVE_MIPSFPU_EXTERNAL 0 #define HAVE_MIPS32R2_EXTERNAL 0 #define HAVE_MIPS32R5_EXTERNAL 0 #define HAVE_MIPS64R2_EXTERNAL 0 #define HAVE_MIPS32R6_EXTERNAL 0 #define HAVE_MIPS64R6_EXTERNAL 0 #define HAVE_MIPSDSP_EXTERNAL 0 #define HAVE_MIPSDSPR2_EXTERNAL 0 #define HAVE_MSA_EXTERNAL 0 #define HAVE_LOONGSON2_EXTERNAL 0 #define HAVE_LOONGSON3_EXTERNAL 0 #define HAVE_MMI_EXTERNAL 0 #define HAVE_ARMV5TE_INLINE 0 #define HAVE_ARMV6_INLINE 0 #define HAVE_ARMV6T2_INLINE 0 #define HAVE_ARMV8_INLINE 1 #define HAVE_NEON_INLINE 1 #define HAVE_VFP_INLINE 1 #define HAVE_VFPV3_INLINE 0 #define HAVE_SETEND_INLINE 0 #define HAVE_ALTIVEC_INLINE 0 #define HAVE_DCBZL_INLINE 0 #define HAVE_LDBRX_INLINE 0 #define HAVE_POWER8_INLINE 0 #define HAVE_PPC4XX_INLINE 0 #define HAVE_VSX_INLINE 0 #define HAVE_AESNI_INLINE 0 #define HAVE_AMD3DNOW_INLINE 0 #define HAVE_AMD3DNOWEXT_INLINE 0 #define HAVE_AVX_INLINE 0 #define HAVE_AVX2_INLINE 0 #define HAVE_FMA3_INLINE 0 #define HAVE_FMA4_INLINE 0 #define HAVE_MMX_INLINE 0 #define HAVE_MMXEXT_INLINE 0 #define HAVE_SSE_INLINE 0 #define HAVE_SSE2_INLINE 0 #define HAVE_SSE3_INLINE 0 #define HAVE_SSE4_INLINE 0 #define HAVE_SSE42_INLINE 0 #define HAVE_SSSE3_INLINE 0 #define HAVE_XOP_INLINE 0 #define HAVE_CPUNOP_INLINE 0 #define HAVE_I686_INLINE 0 #define HAVE_MIPSFPU_INLINE 0 #define HAVE_MIPS32R2_INLINE 0 #define HAVE_MIPS32R5_INLINE 0 #define HAVE_MIPS64R2_INLINE 0 #define HAVE_MIPS32R6_INLINE 0 #define HAVE_MIPS64R6_INLINE 0 #define HAVE_MIPSDSP_INLINE 0 #define HAVE_MIPSDSPR2_INLINE 0 #define HAVE_MSA_INLINE 0 #define HAVE_LOONGSON2_INLINE 0 #define HAVE_LOONGSON3_INLINE 0 #define HAVE_MMI_INLINE 0 #define HAVE_ALIGNED_STACK 1 #define HAVE_FAST_64BIT 1 #define HAVE_FAST_CLZ 1 #define HAVE_FAST_CMOV 0 #define HAVE_LOCAL_ALIGNED_8 0 #define HAVE_LOCAL_ALIGNED_16 0 #define HAVE_LOCAL_ALIGNED_32 0 #define HAVE_SIMD_ALIGN_16 1 #define HAVE_ATOMICS_GCC 1 #define HAVE_ATOMICS_SUNCC 0 #define HAVE_ATOMICS_WIN32 0 #define HAVE_ATOMIC_CAS_PTR 0 #define HAVE_ATOMIC_COMPARE_EXCHANGE 1 #define HAVE_MACHINE_RW_BARRIER 0 #define HAVE_MEMORYBARRIER 0 #define HAVE_MM_EMPTY 0 #define HAVE_RDTSC 0 #define HAVE_SARESTART 1 #define HAVE_SEM_TIMEDWAIT 0 #define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 #define HAVE_CABS 1 #define HAVE_CEXP 1 #define HAVE_INLINE_ASM 1 #define HAVE_SYMVER 1 #define HAVE_YASM 0 #define HAVE_BIGENDIAN 0 #define HAVE_FAST_UNALIGNED 1 #define HAVE_ALSA_ASOUNDLIB_H 0 #define HAVE_ALTIVEC_H 0 #define HAVE_ARPA_INET_H 1 #define HAVE_ASM_TYPES_H 0 #define HAVE_CDIO_PARANOIA_H 0 #define HAVE_CDIO_PARANOIA_PARANOIA_H 0 #define HAVE_DISPATCH_DISPATCH_H 1 #define HAVE_DEV_BKTR_IOCTL_BT848_H 0 #define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 #define HAVE_DEV_IC_BT8XX_H 0 #define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 #define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 #define HAVE_DIRECT_H 0 #define HAVE_DIRENT_H 1 #define HAVE_DLFCN_H 1 #define HAVE_D3D11_H 0 #define HAVE_DXVA_H 0 #define HAVE_ES2_GL_H 0 #define HAVE_GSM_H 0 #define HAVE_IO_H 0 #define HAVE_MACH_MACH_TIME_H 1 #define HAVE_MACHINE_IOCTL_BT848_H 0 #define HAVE_MACHINE_IOCTL_METEOR_H 0 #define HAVE_MALLOC_H 0 #define HAVE_OPENCV2_CORE_CORE_C_H 0 #define HAVE_OPENJPEG_2_1_OPENJPEG_H 0 #define HAVE_OPENJPEG_2_0_OPENJPEG_H 0 #define HAVE_OPENJPEG_1_5_OPENJPEG_H 0 #define HAVE_OPENGL_GL3_H 0 #define HAVE_POLL_H 1 #define HAVE_SNDIO_H 0 #define HAVE_SOUNDCARD_H 0 #define HAVE_SYS_MMAN_H 1 #define HAVE_SYS_PARAM_H 1 #define HAVE_SYS_RESOURCE_H 1 #define HAVE_SYS_SELECT_H 1 #define HAVE_SYS_SOUNDCARD_H 0 #define HAVE_SYS_TIME_H 1 #define HAVE_SYS_UN_H 1 #define HAVE_SYS_VIDEOIO_H 0 #define HAVE_TERMIOS_H 1 #define HAVE_UDPLITE_H 0 #define HAVE_UNISTD_H 1 #define HAVE_VALGRIND_VALGRIND_H 0 #define HAVE_WINDOWS_H 0 #define HAVE_WINSOCK2_H 0 #define HAVE_INTRINSICS_NEON 1 #define HAVE_ATANF 1 #define HAVE_ATAN2F 1 #define HAVE_CBRT 1 #define HAVE_CBRTF 1 #define HAVE_COPYSIGN 1 #define HAVE_COSF 1 #define HAVE_ERF 1 #define HAVE_EXP2 1 #define HAVE_EXP2F 1 #define HAVE_EXPF 1 #define HAVE_HYPOT 1 #define HAVE_ISFINITE 1 #define HAVE_ISINF 1 #define HAVE_ISNAN 1 #define HAVE_LDEXPF 1 #define HAVE_LLRINT 1 #define HAVE_LLRINTF 1 #define HAVE_LOG2 1 #define HAVE_LOG2F 1 #define HAVE_LOG10F 1 #define HAVE_LRINT 1 #define HAVE_LRINTF 1 #define HAVE_POWF 1 #define HAVE_RINT 1 #define HAVE_ROUND 1 #define HAVE_ROUNDF 1 #define HAVE_SINF 1 #define HAVE_TRUNC 1 #define HAVE_TRUNCF 1 #define HAVE_ACCESS 1 #define HAVE_ALIGNED_MALLOC 0 #define HAVE_ARC4RANDOM 1 #define HAVE_CLOCK_GETTIME 1 #define HAVE_CLOSESOCKET 0 #define HAVE_COMMANDLINETOARGVW 0 #define HAVE_COTASKMEMFREE 0 #define HAVE_CRYPTGENRANDOM 0 #define HAVE_DLOPEN 1 #define HAVE_FCNTL 1 #define HAVE_FLT_LIM 1 #define HAVE_FORK 1 #define HAVE_GETADDRINFO 1 #define HAVE_GETHRTIME 0 #define HAVE_GETOPT 1 #define HAVE_GETPROCESSAFFINITYMASK 0 #define HAVE_GETPROCESSMEMORYINFO 0 #define HAVE_GETPROCESSTIMES 0 #define HAVE_GETRUSAGE 1 #define HAVE_GETSYSTEMTIMEASFILETIME 0 #define HAVE_GETTIMEOFDAY 1 #define HAVE_GLOB 1 #define HAVE_GLXGETPROCADDRESS 0 #define HAVE_GMTIME_R 1 #define HAVE_INET_ATON 1 #define HAVE_ISATTY 1 #define HAVE_JACK_PORT_GET_LATENCY_RANGE 0 #define HAVE_KBHIT 0 #define HAVE_LOADLIBRARY 0 #define HAVE_LOCALTIME_R 1 #define HAVE_LSTAT 1 #define HAVE_LZO1X_999_COMPRESS 0 #define HAVE_MACH_ABSOLUTE_TIME 1 #define HAVE_MAPVIEWOFFILE 0 #define HAVE_MEMALIGN 0 #define HAVE_MKSTEMP 1 #define HAVE_MMAP 1 #define HAVE_MPROTECT 1 #define HAVE_NANOSLEEP 1 #define HAVE_PEEKNAMEDPIPE 0 #define HAVE_POSIX_MEMALIGN 1 #define HAVE_PTHREAD_CANCEL 1 #define HAVE_SCHED_GETAFFINITY 0 #define HAVE_SETCONSOLETEXTATTRIBUTE 0 #define HAVE_SETCONSOLECTRLHANDLER 0 #define HAVE_SETMODE 0 #define HAVE_SETRLIMIT 1 #define HAVE_SLEEP 0 #define HAVE_STRERROR_R 1 #define HAVE_SYSCONF 1 #define HAVE_SYSCTL 1 #define HAVE_USLEEP 1 #define HAVE_UTGETOSTYPEFROMSTRING 0 #define HAVE_VIRTUALALLOC 0 #define HAVE_WGLGETPROCADDRESS 0 #define HAVE_PTHREADS 1 #define HAVE_OS2THREADS 0 #define HAVE_W32THREADS 0 #define HAVE_AS_DN_DIRECTIVE 0 #define HAVE_AS_FUNC 0 #define HAVE_AS_OBJECT_ARCH 0 #define HAVE_ASM_MOD_Q 0 #define HAVE_ATTRIBUTE_MAY_ALIAS 1 #define HAVE_ATTRIBUTE_PACKED 1 #define HAVE_EBP_AVAILABLE 0 #define HAVE_EBX_AVAILABLE 0 #define HAVE_GNU_AS 1 #define HAVE_GNU_WINDRES 0 #define HAVE_IBM_ASM 0 #define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0 #define HAVE_INLINE_ASM_LABELS 1 #define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 #define HAVE_PRAGMA_DEPRECATED 1 #define HAVE_RSYNC_CONTIMEOUT 0 #define HAVE_SYMVER_ASM_LABEL 1 #define HAVE_SYMVER_GNU_ASM 0 #define HAVE_VFP_ARGS 0 #define HAVE_XFORM_ASM 0 #define HAVE_XMM_CLOBBERS 0 #define HAVE_CONDITION_VARIABLE_PTR 0 #define HAVE_SOCKLEN_T 1 #define HAVE_STRUCT_ADDRINFO 1 #define HAVE_STRUCT_GROUP_SOURCE_REQ 1 #define HAVE_STRUCT_IP_MREQ_SOURCE 1 #define HAVE_STRUCT_IPV6_MREQ 1 #define HAVE_STRUCT_MSGHDR_MSG_FLAGS 1 #define HAVE_STRUCT_POLLFD 1 #define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1 #define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 #define HAVE_STRUCT_SOCKADDR_IN6 1 #define HAVE_STRUCT_SOCKADDR_SA_LEN 1 #define HAVE_STRUCT_SOCKADDR_STORAGE 1 #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 #define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 #define HAVE_ATOMICS_NATIVE 1 #define HAVE_DOS_PATHS 0 #define HAVE_DXVA2_LIB 0 #define HAVE_DXVA2API_COBJ 0 #define HAVE_LIBC_MSVCRT 0 #define HAVE_LIBDC1394_1 0 #define HAVE_LIBDC1394_2 0 #define HAVE_MAKEINFO 1 #define HAVE_MAKEINFO_HTML 0 #define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 #define HAVE_PERL 1 #define HAVE_POD2MAN 1 #define HAVE_SDL2 0 #define HAVE_SECTION_DATA_REL_RO 0 #define HAVE_TEXI2HTML 0 #define HAVE_THREADS 1 #define HAVE_VAAPI_DRM 0 #define HAVE_VAAPI_X11 0 #define HAVE_VDPAU_X11 0 #define HAVE_WINRT 0 #define HAVE_XLIB 0 #define CONFIG_BSFS 1 #define CONFIG_DECODERS 1 #define CONFIG_ENCODERS 0 #define CONFIG_HWACCELS 0 #define CONFIG_PARSERS 1 #define CONFIG_INDEVS 0 #define CONFIG_OUTDEVS 0 #define CONFIG_FILTERS 0 #define CONFIG_DEMUXERS 1 #define CONFIG_MUXERS 1 #define CONFIG_PROTOCOLS 1 #define CONFIG_DOC 0 #define CONFIG_HTMLPAGES 0 #define CONFIG_MANPAGES 0 #define CONFIG_PODPAGES 0 #define CONFIG_TXTPAGES 0 #define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 #define CONFIG_AVIO_READING_EXAMPLE 1 #define CONFIG_DECODING_ENCODING_EXAMPLE 1 #define CONFIG_DEMUXING_DECODING_EXAMPLE 1 #define CONFIG_EXTRACT_MVS_EXAMPLE 1 #define CONFIG_FILTER_AUDIO_EXAMPLE 1 #define CONFIG_FILTERING_AUDIO_EXAMPLE 1 #define CONFIG_FILTERING_VIDEO_EXAMPLE 1 #define CONFIG_HTTP_MULTICLIENT_EXAMPLE 1 #define CONFIG_METADATA_EXAMPLE 1 #define CONFIG_MUXING_EXAMPLE 1 #define CONFIG_QSVDEC_EXAMPLE 0 #define CONFIG_REMUXING_EXAMPLE 1 #define CONFIG_RESAMPLING_AUDIO_EXAMPLE 1 #define CONFIG_SCALING_VIDEO_EXAMPLE 1 #define CONFIG_TRANSCODE_AAC_EXAMPLE 1 #define CONFIG_TRANSCODING_EXAMPLE 1 #define CONFIG_AVISYNTH 0 #define CONFIG_BZLIB 0 #define CONFIG_CHROMAPRINT 0 #define CONFIG_CRYSTALHD 0 #define CONFIG_DECKLINK 0 #define CONFIG_FREI0R 0 #define CONFIG_GCRYPT 0 #define CONFIG_GMP 0 #define CONFIG_GNUTLS 0 #define CONFIG_ICONV 0 #define CONFIG_JNI 0 #define CONFIG_LADSPA 0 #define CONFIG_LIBASS 0 #define CONFIG_LIBBLURAY 0 #define CONFIG_LIBBS2B 0 #define CONFIG_LIBCACA 0 #define CONFIG_LIBCDIO 0 #define CONFIG_LIBCELT 0 #define CONFIG_LIBDC1394 0 #define CONFIG_LIBEBUR128 0 #define CONFIG_LIBFDK_AAC 0 #define CONFIG_LIBFLITE 0 #define CONFIG_LIBFONTCONFIG 0 #define CONFIG_LIBFREETYPE 0 #define CONFIG_LIBFRIBIDI 0 #define CONFIG_LIBGME 0 #define CONFIG_LIBGSM 0 #define CONFIG_LIBIEC61883 0 #define CONFIG_LIBILBC 0 #define CONFIG_LIBKVAZAAR 0 #define CONFIG_LIBMODPLUG 0 #define CONFIG_LIBMP3LAME 0 #define CONFIG_LIBNUT 0 #define CONFIG_LIBOPENCORE_AMRNB 0 #define CONFIG_LIBOPENCORE_AMRWB 0 #define CONFIG_LIBOPENCV 0 #define CONFIG_LIBOPENH264 0 #define CONFIG_LIBOPENJPEG 0 #define CONFIG_LIBOPENMPT 0 #define CONFIG_LIBOPUS 0 #define CONFIG_LIBPULSE 0 #define CONFIG_LIBRTMP 0 #define CONFIG_LIBRUBBERBAND 0 #define CONFIG_LIBSCHROEDINGER 0 #define CONFIG_LIBSHINE 0 #define CONFIG_LIBSMBCLIENT 0 #define CONFIG_LIBSNAPPY 0 #define CONFIG_LIBSOXR 0 #define CONFIG_LIBSPEEX 0 #define CONFIG_LIBSSH 0 #define CONFIG_LIBTESSERACT 0 #define CONFIG_LIBTHEORA 0 #define CONFIG_LIBTWOLAME 0 #define CONFIG_LIBV4L2 0 #define CONFIG_LIBVIDSTAB 0 #define CONFIG_LIBVO_AMRWBENC 0 #define CONFIG_LIBVORBIS 0 #define CONFIG_LIBVPX 0 #define CONFIG_LIBWAVPACK 0 #define CONFIG_LIBWEBP 0 #define CONFIG_LIBX264 0 #define CONFIG_LIBX265 0 #define CONFIG_LIBXAVS 0 #define CONFIG_LIBXCB 0 #define CONFIG_LIBXCB_SHM 0 #define CONFIG_LIBXCB_SHAPE 0 #define CONFIG_LIBXCB_XFIXES 0 #define CONFIG_LIBXVID 0 #define CONFIG_LIBZIMG 0 #define CONFIG_LIBZMQ 0 #define CONFIG_LIBZVBI 0 #define CONFIG_LZMA 0 #define CONFIG_MEDIACODEC 0 #define CONFIG_NETCDF 0 #define CONFIG_OPENAL 0 #define CONFIG_OPENCL 0 #define CONFIG_OPENGL 0 #define CONFIG_OPENSSL 1 #define CONFIG_SCHANNEL 0 #define CONFIG_SDL 0 #define CONFIG_SDL2 0 #define CONFIG_SECURETRANSPORT 0 #define CONFIG_VIDEOTOOLBOX 0 #define CONFIG_X11GRAB 0 #define CONFIG_XLIB 0 #define CONFIG_ZLIB 1 #define CONFIG_AUDIOTOOLBOX 0 #define CONFIG_CUDA 0 #define CONFIG_CUVID 0 #define CONFIG_D3D11VA 0 #define CONFIG_DXVA2 0 #define CONFIG_LIBMFX 0 #define CONFIG_LIBNPP 0 #define CONFIG_MMAL 0 #define CONFIG_NVENC 0 #define CONFIG_OMX 0 #define CONFIG_VAAPI 0 #define CONFIG_VDA 0 #define CONFIG_VDPAU 0 #define CONFIG_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_XVMC 0 #define CONFIG_FTRAPV 0 #define CONFIG_GRAY 0 #define CONFIG_HARDCODED_TABLES 0 #define CONFIG_OMX_RPI 0 #define CONFIG_RUNTIME_CPUDETECT 1 #define CONFIG_SAFE_BITSTREAM_READER 1 #define CONFIG_SHARED 0 #define CONFIG_SMALL 1 #define CONFIG_STATIC 1 #define CONFIG_SWSCALE_ALPHA 0 #define CONFIG_GPL 0 #define CONFIG_NONFREE 0 #define CONFIG_VERSION3 0 #define CONFIG_AVCODEC 1 #define CONFIG_AVDEVICE 0 #define CONFIG_AVFILTER 1 #define CONFIG_AVFORMAT 1 #define CONFIG_AVRESAMPLE 0 #define CONFIG_AVUTIL 1 #define CONFIG_POSTPROC 0 #define CONFIG_SWRESAMPLE 1 #define CONFIG_SWSCALE 1 #define CONFIG_FFPLAY 0 #define CONFIG_FFPROBE 0 #define CONFIG_FFSERVER 0 #define CONFIG_FFMPEG 0 #define CONFIG_DCT 1 #define CONFIG_DWT 0 #define CONFIG_ERROR_RESILIENCE 1 #define CONFIG_FAAN 1 #define CONFIG_FAST_UNALIGNED 1 #define CONFIG_FFT 1 #define CONFIG_LSP 0 #define CONFIG_LZO 0 #define CONFIG_MDCT 1 #define CONFIG_PIXELUTILS 0 #define CONFIG_NETWORK 1 #define CONFIG_RDFT 1 #define CONFIG_FONTCONFIG 0 #define CONFIG_MEMALIGN_HACK 0 #define CONFIG_MEMORY_POISONING 0 #define CONFIG_NEON_CLOBBER_TEST 0 #define CONFIG_PIC 1 #define CONFIG_POD2MAN 1 #define CONFIG_RAISE_MAJOR 0 #define CONFIG_THUMB 0 #define CONFIG_VALGRIND_BACKTRACE 0 #define CONFIG_XMM_CLOBBER_TEST 0 #define CONFIG_AANDCTTABLES 0 #define CONFIG_AC3DSP 0 #define CONFIG_AUDIO_FRAME_QUEUE 0 #define CONFIG_AUDIODSP 0 #define CONFIG_BLOCKDSP 1 #define CONFIG_BSWAPDSP 0 #define CONFIG_CABAC 1 #define CONFIG_DIRAC_PARSE 0 #define CONFIG_DVPROFILE 0 #define CONFIG_EXIF 0 #define CONFIG_FAANDCT 1 #define CONFIG_FAANIDCT 1 #define CONFIG_FDCTDSP 1 #define CONFIG_FLACDSP 0 #define CONFIG_FMTCONVERT 0 #define CONFIG_FRAME_THREAD_ENCODER 0 #define CONFIG_G722DSP 0 #define CONFIG_GOLOMB 1 #define CONFIG_GPLV3 0 #define CONFIG_H263DSP 1 #define CONFIG_H264CHROMA 1 #define CONFIG_H264DSP 1 #define CONFIG_H264PRED 1 #define CONFIG_H264QPEL 1 #define CONFIG_HPELDSP 1 #define CONFIG_HUFFMAN 1 #define CONFIG_HUFFYUVDSP 0 #define CONFIG_HUFFYUVENCDSP 0 #define CONFIG_IDCTDSP 1 #define CONFIG_IIRFILTER 0 #define CONFIG_IMDCT15 1 #define CONFIG_INTRAX8 0 #define CONFIG_ISO_MEDIA 1 #define CONFIG_IVIDSP 0 #define CONFIG_JPEGTABLES 0 #define CONFIG_LGPLV3 0 #define CONFIG_LIBX262 0 #define CONFIG_LLAUDDSP 0 #define CONFIG_LLVIDDSP 0 #define CONFIG_LPC 0 #define CONFIG_LZF 0 #define CONFIG_ME_CMP 1 #define CONFIG_MPEG_ER 1 #define CONFIG_MPEGAUDIO 1 #define CONFIG_MPEGAUDIODSP 1 #define CONFIG_MPEGVIDEO 1 #define CONFIG_MPEGVIDEOENC 0 #define CONFIG_MSS34DSP 0 #define CONFIG_PIXBLOCKDSP 1 #define CONFIG_QPELDSP 1 #define CONFIG_QSV 0 #define CONFIG_QSVDEC 0 #define CONFIG_QSVENC 0 #define CONFIG_RANGECODER 0 #define CONFIG_RIFFDEC 1 #define CONFIG_RIFFENC 1 #define CONFIG_RTPDEC 0 #define CONFIG_RTPENC_CHAIN 1 #define CONFIG_RV34DSP 0 #define CONFIG_SINEWIN 1 #define CONFIG_SNAPPY 0 #define CONFIG_SRTP 0 #define CONFIG_STARTCODE 1 #define CONFIG_TEXTUREDSP 0 #define CONFIG_TEXTUREDSPENC 0 #define CONFIG_TPELDSP 0 #define CONFIG_VAAPI_ENCODE 0 #define CONFIG_VC1DSP 0 #define CONFIG_VIDEODSP 1 #define CONFIG_VP3DSP 1 #define CONFIG_VP56DSP 1 #define CONFIG_VP8DSP 0 #define CONFIG_VT_BT2020 0 #define CONFIG_WMA_FREQS 0 #define CONFIG_WMV2DSP 0 #define CONFIG_AAC_ADTSTOASC_BSF 1 #define CONFIG_CHOMP_BSF 0 #define CONFIG_DUMP_EXTRADATA_BSF 0 #define CONFIG_DCA_CORE_BSF 0 #define CONFIG_H264_MP4TOANNEXB_BSF 1 #define CONFIG_HEVC_MP4TOANNEXB_BSF 0 #define CONFIG_IMX_DUMP_HEADER_BSF 0 #define CONFIG_MJPEG2JPEG_BSF 0 #define CONFIG_MJPEGA_DUMP_HEADER_BSF 0 #define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0 #define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0 #define CONFIG_MOV2TEXTSUB_BSF 0 #define CONFIG_NOISE_BSF 0 #define CONFIG_REMOVE_EXTRADATA_BSF 0 #define CONFIG_TEXT2MOVSUB_BSF 0 #define CONFIG_VP9_SUPERFRAME_BSF 0 #define CONFIG_AASC_DECODER 0 #define CONFIG_AIC_DECODER 0 #define CONFIG_ALIAS_PIX_DECODER 0 #define CONFIG_AMV_DECODER 0 #define CONFIG_ANM_DECODER 0 #define CONFIG_ANSI_DECODER 0 #define CONFIG_APNG_DECODER 0 #define CONFIG_ASV1_DECODER 0 #define CONFIG_ASV2_DECODER 0 #define CONFIG_AURA_DECODER 0 #define CONFIG_AURA2_DECODER 0 #define CONFIG_AVRP_DECODER 0 #define CONFIG_AVRN_DECODER 0 #define CONFIG_AVS_DECODER 0 #define CONFIG_AVUI_DECODER 0 #define CONFIG_AYUV_DECODER 0 #define CONFIG_BETHSOFTVID_DECODER 0 #define CONFIG_BFI_DECODER 0 #define CONFIG_BINK_DECODER 0 #define CONFIG_BMP_DECODER 0 #define CONFIG_BMV_VIDEO_DECODER 0 #define CONFIG_BRENDER_PIX_DECODER 0 #define CONFIG_C93_DECODER 0 #define CONFIG_CAVS_DECODER 0 #define CONFIG_CDGRAPHICS_DECODER 0 #define CONFIG_CDXL_DECODER 0 #define CONFIG_CFHD_DECODER 0 #define CONFIG_CINEPAK_DECODER 0 #define CONFIG_CLJR_DECODER 0 #define CONFIG_CLLC_DECODER 0 #define CONFIG_COMFORTNOISE_DECODER 0 #define CONFIG_CPIA_DECODER 0 #define CONFIG_CSCD_DECODER 0 #define CONFIG_CYUV_DECODER 0 #define CONFIG_DDS_DECODER 0 #define CONFIG_DFA_DECODER 0 #define CONFIG_DIRAC_DECODER 0 #define CONFIG_DNXHD_DECODER 0 #define CONFIG_DPX_DECODER 0 #define CONFIG_DSICINVIDEO_DECODER 0 #define CONFIG_DVAUDIO_DECODER 0 #define CONFIG_DVVIDEO_DECODER 0 #define CONFIG_DXA_DECODER 0 #define CONFIG_DXTORY_DECODER 0 #define CONFIG_DXV_DECODER 0 #define CONFIG_EACMV_DECODER 0 #define CONFIG_EAMAD_DECODER 0 #define CONFIG_EATGQ_DECODER 0 #define CONFIG_EATGV_DECODER 0 #define CONFIG_EATQI_DECODER 0 #define CONFIG_EIGHTBPS_DECODER 0 #define CONFIG_EIGHTSVX_EXP_DECODER 0 #define CONFIG_EIGHTSVX_FIB_DECODER 0 #define CONFIG_ESCAPE124_DECODER 0 #define CONFIG_ESCAPE130_DECODER 0 #define CONFIG_EXR_DECODER 0 #define CONFIG_FFV1_DECODER 0 #define CONFIG_FFVHUFF_DECODER 0 #define CONFIG_FIC_DECODER 0 #define CONFIG_FLASHSV_DECODER 0 #define CONFIG_FLASHSV2_DECODER 0 #define CONFIG_FLIC_DECODER 0 #define CONFIG_FLV_DECODER 1 #define CONFIG_FOURXM_DECODER 0 #define CONFIG_FRAPS_DECODER 0 #define CONFIG_FRWU_DECODER 0 #define CONFIG_G2M_DECODER 0 #define CONFIG_GIF_DECODER 0 #define CONFIG_H261_DECODER 0 #define CONFIG_H263_DECODER 1 #define CONFIG_H263I_DECODER 0 #define CONFIG_H263P_DECODER 0 #define CONFIG_H264_DECODER 1 #define CONFIG_H264_CRYSTALHD_DECODER 0 #define CONFIG_H264_MEDIACODEC_DECODER 0 #define CONFIG_H264_MMAL_DECODER 0 #define CONFIG_H264_QSV_DECODER 0 #define CONFIG_H264_VDA_DECODER 0 #define CONFIG_H264_VDPAU_DECODER 0 #define CONFIG_HAP_DECODER 0 #define CONFIG_HEVC_DECODER 0 #define CONFIG_HEVC_QSV_DECODER 0 #define CONFIG_HNM4_VIDEO_DECODER 0 #define CONFIG_HQ_HQA_DECODER 0 #define CONFIG_HQX_DECODER 0 #define CONFIG_HUFFYUV_DECODER 0 #define CONFIG_IDCIN_DECODER 0 #define CONFIG_IFF_ILBM_DECODER 0 #define CONFIG_INDEO2_DECODER 0 #define CONFIG_INDEO3_DECODER 0 #define CONFIG_INDEO4_DECODER 0 #define CONFIG_INDEO5_DECODER 0 #define CONFIG_INTERPLAY_VIDEO_DECODER 0 #define CONFIG_JPEG2000_DECODER 0 #define CONFIG_JPEGLS_DECODER 0 #define CONFIG_JV_DECODER 0 #define CONFIG_KGV1_DECODER 0 #define CONFIG_KMVC_DECODER 0 #define CONFIG_LAGARITH_DECODER 0 #define CONFIG_LOCO_DECODER 0 #define CONFIG_M101_DECODER 0 #define CONFIG_MAGICYUV_DECODER 0 #define CONFIG_MDEC_DECODER 0 #define CONFIG_MIMIC_DECODER 0 #define CONFIG_MJPEG_DECODER 0 #define CONFIG_MJPEGB_DECODER 0 #define CONFIG_MMVIDEO_DECODER 0 #define CONFIG_MOTIONPIXELS_DECODER 0 #define CONFIG_MPEG_XVMC_DECODER 0 #define CONFIG_MPEG1VIDEO_DECODER 0 #define CONFIG_MPEG2VIDEO_DECODER 0 #define CONFIG_MPEG4_DECODER 0 #define CONFIG_MPEG4_CRYSTALHD_DECODER 0 #define CONFIG_MPEG4_MMAL_DECODER 0 #define CONFIG_MPEG4_VDPAU_DECODER 0 #define CONFIG_MPEGVIDEO_DECODER 0 #define CONFIG_MPEG_VDPAU_DECODER 0 #define CONFIG_MPEG1_VDPAU_DECODER 0 #define CONFIG_MPEG2_MMAL_DECODER 0 #define CONFIG_MPEG2_CRYSTALHD_DECODER 0 #define CONFIG_MPEG2_QSV_DECODER 0 #define CONFIG_MSA1_DECODER 0 #define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 #define CONFIG_MSMPEG4V1_DECODER 0 #define CONFIG_MSMPEG4V2_DECODER 0 #define CONFIG_MSMPEG4V3_DECODER 0 #define CONFIG_MSRLE_DECODER 0 #define CONFIG_MSS1_DECODER 0 #define CONFIG_MSS2_DECODER 0 #define CONFIG_MSVIDEO1_DECODER 0 #define CONFIG_MSZH_DECODER 0 #define CONFIG_MTS2_DECODER 0 #define CONFIG_MVC1_DECODER 0 #define CONFIG_MVC2_DECODER 0 #define CONFIG_MXPEG_DECODER 0 #define CONFIG_NUV_DECODER 0 #define CONFIG_PAF_VIDEO_DECODER 0 #define CONFIG_PAM_DECODER 0 #define CONFIG_PBM_DECODER 0 #define CONFIG_PCX_DECODER 0 #define CONFIG_PGM_DECODER 0 #define CONFIG_PGMYUV_DECODER 0 #define CONFIG_PICTOR_DECODER 0 #define CONFIG_PNG_DECODER 0 #define CONFIG_PPM_DECODER 0 #define CONFIG_PRORES_DECODER 0 #define CONFIG_PRORES_LGPL_DECODER 0 #define CONFIG_PTX_DECODER 0 #define CONFIG_QDRAW_DECODER 0 #define CONFIG_QPEG_DECODER 0 #define CONFIG_QTRLE_DECODER 0 #define CONFIG_R10K_DECODER 0 #define CONFIG_R210_DECODER 0 #define CONFIG_RAWVIDEO_DECODER 0 #define CONFIG_RL2_DECODER 0 #define CONFIG_ROQ_DECODER 0 #define CONFIG_RPZA_DECODER 0 #define CONFIG_RSCC_DECODER 0 #define CONFIG_RV10_DECODER 0 #define CONFIG_RV20_DECODER 0 #define CONFIG_RV30_DECODER 0 #define CONFIG_RV40_DECODER 0 #define CONFIG_S302M_DECODER 0 #define CONFIG_SANM_DECODER 0 #define CONFIG_SCREENPRESSO_DECODER 0 #define CONFIG_SDX2_DPCM_DECODER 0 #define CONFIG_SGI_DECODER 0 #define CONFIG_SGIRLE_DECODER 0 #define CONFIG_SHEERVIDEO_DECODER 0 #define CONFIG_SMACKER_DECODER 0 #define CONFIG_SMC_DECODER 0 #define CONFIG_SMVJPEG_DECODER 0 #define CONFIG_SNOW_DECODER 0 #define CONFIG_SP5X_DECODER 0 #define CONFIG_SUNRAST_DECODER 0 #define CONFIG_SVQ1_DECODER 0 #define CONFIG_SVQ3_DECODER 0 #define CONFIG_TARGA_DECODER 0 #define CONFIG_TARGA_Y216_DECODER 0 #define CONFIG_TDSC_DECODER 0 #define CONFIG_THEORA_DECODER 0 #define CONFIG_THP_DECODER 0 #define CONFIG_TIERTEXSEQVIDEO_DECODER 0 #define CONFIG_TIFF_DECODER 0 #define CONFIG_TMV_DECODER 0 #define CONFIG_TRUEMOTION1_DECODER 0 #define CONFIG_TRUEMOTION2_DECODER 0 #define CONFIG_TRUEMOTION2RT_DECODER 0 #define CONFIG_TSCC_DECODER 0 #define CONFIG_TSCC2_DECODER 0 #define CONFIG_TXD_DECODER 0 #define CONFIG_ULTI_DECODER 0 #define CONFIG_UTVIDEO_DECODER 0 #define CONFIG_V210_DECODER 0 #define CONFIG_V210X_DECODER 0 #define CONFIG_V308_DECODER 0 #define CONFIG_V408_DECODER 0 #define CONFIG_V410_DECODER 0 #define CONFIG_VB_DECODER 0 #define CONFIG_VBLE_DECODER 0 #define CONFIG_VC1_DECODER 0 #define CONFIG_VC1_CRYSTALHD_DECODER 0 #define CONFIG_VC1_VDPAU_DECODER 0 #define CONFIG_VC1IMAGE_DECODER 0 #define CONFIG_VC1_MMAL_DECODER 0 #define CONFIG_VC1_QSV_DECODER 0 #define CONFIG_VCR1_DECODER 0 #define CONFIG_VMDVIDEO_DECODER 0 #define CONFIG_VMNC_DECODER 0 #define CONFIG_VP3_DECODER 0 #define CONFIG_VP5_DECODER 0 #define CONFIG_VP6_DECODER 1 #define CONFIG_VP6A_DECODER 0 #define CONFIG_VP6F_DECODER 1 #define CONFIG_VP7_DECODER 0 #define CONFIG_VP8_DECODER 0 #define CONFIG_VP9_DECODER 0 #define CONFIG_VQA_DECODER 0 #define CONFIG_WEBP_DECODER 0 #define CONFIG_WMV1_DECODER 0 #define CONFIG_WMV2_DECODER 0 #define CONFIG_WMV3_DECODER 0 #define CONFIG_WMV3_CRYSTALHD_DECODER 0 #define CONFIG_WMV3_VDPAU_DECODER 0 #define CONFIG_WMV3IMAGE_DECODER 0 #define CONFIG_WNV1_DECODER 0 #define CONFIG_XAN_WC3_DECODER 0 #define CONFIG_XAN_WC4_DECODER 0 #define CONFIG_XBM_DECODER 0 #define CONFIG_XFACE_DECODER 0 #define CONFIG_XL_DECODER 0 #define CONFIG_XWD_DECODER 0 #define CONFIG_Y41P_DECODER 0 #define CONFIG_YLC_DECODER 0 #define CONFIG_YOP_DECODER 0 #define CONFIG_YUV4_DECODER 0 #define CONFIG_ZERO12V_DECODER 0 #define CONFIG_ZEROCODEC_DECODER 0 #define CONFIG_ZLIB_DECODER 0 #define CONFIG_ZMBV_DECODER 0 #define CONFIG_AAC_DECODER 1 #define CONFIG_AAC_FIXED_DECODER 0 #define CONFIG_AAC_LATM_DECODER 1 #define CONFIG_AC3_DECODER 0 #define CONFIG_AC3_FIXED_DECODER 0 #define CONFIG_ALAC_DECODER 0 #define CONFIG_ALS_DECODER 0 #define CONFIG_AMRNB_DECODER 0 #define CONFIG_AMRWB_DECODER 0 #define CONFIG_APE_DECODER 0 #define CONFIG_ATRAC1_DECODER 0 #define CONFIG_ATRAC3_DECODER 0 #define CONFIG_ATRAC3P_DECODER 0 #define CONFIG_BINKAUDIO_DCT_DECODER 0 #define CONFIG_BINKAUDIO_RDFT_DECODER 0 #define CONFIG_BMV_AUDIO_DECODER 0 #define CONFIG_COOK_DECODER 0 #define CONFIG_DCA_DECODER 0 #define CONFIG_DSD_LSBF_DECODER 0 #define CONFIG_DSD_MSBF_DECODER 0 #define CONFIG_DSD_LSBF_PLANAR_DECODER 0 #define CONFIG_DSD_MSBF_PLANAR_DECODER 0 #define CONFIG_DSICINAUDIO_DECODER 0 #define CONFIG_DSS_SP_DECODER 0 #define CONFIG_DST_DECODER 0 #define CONFIG_EAC3_DECODER 0 #define CONFIG_EVRC_DECODER 0 #define CONFIG_FFWAVESYNTH_DECODER 0 #define CONFIG_FLAC_DECODER 0 #define CONFIG_G723_1_DECODER 0 #define CONFIG_G729_DECODER 0 #define CONFIG_GSM_DECODER 0 #define CONFIG_GSM_MS_DECODER 0 #define CONFIG_IAC_DECODER 0 #define CONFIG_IMC_DECODER 0 #define CONFIG_INTERPLAY_ACM_DECODER 0 #define CONFIG_MACE3_DECODER 0 #define CONFIG_MACE6_DECODER 0 #define CONFIG_METASOUND_DECODER 0 #define CONFIG_MLP_DECODER 0 #define CONFIG_MP1_DECODER 0 #define CONFIG_MP1FLOAT_DECODER 0 #define CONFIG_MP2_DECODER 0 #define CONFIG_MP2FLOAT_DECODER 0 #define CONFIG_MP3_DECODER 1 #define CONFIG_MP3FLOAT_DECODER 1 #define CONFIG_MP3ADU_DECODER 1 #define CONFIG_MP3ADUFLOAT_DECODER 1 #define CONFIG_MP3ON4_DECODER 1 #define CONFIG_MP3ON4FLOAT_DECODER 1 #define CONFIG_MPC7_DECODER 0 #define CONFIG_MPC8_DECODER 0 #define CONFIG_NELLYMOSER_DECODER 0 #define CONFIG_ON2AVC_DECODER 0 #define CONFIG_OPUS_DECODER 0 #define CONFIG_PAF_AUDIO_DECODER 0 #define CONFIG_QCELP_DECODER 0 #define CONFIG_QDM2_DECODER 0 #define CONFIG_RA_144_DECODER 0 #define CONFIG_RA_288_DECODER 0 #define CONFIG_RALF_DECODER 0 #define CONFIG_SHORTEN_DECODER 0 #define CONFIG_SIPR_DECODER 0 #define CONFIG_SMACKAUD_DECODER 0 #define CONFIG_SONIC_DECODER 0 #define CONFIG_TAK_DECODER 0 #define CONFIG_TRUEHD_DECODER 0 #define CONFIG_TRUESPEECH_DECODER 0 #define CONFIG_TTA_DECODER 0 #define CONFIG_TWINVQ_DECODER 0 #define CONFIG_VMDAUDIO_DECODER 0 #define CONFIG_VORBIS_DECODER 0 #define CONFIG_WAVPACK_DECODER 0 #define CONFIG_WMALOSSLESS_DECODER 0 #define CONFIG_WMAPRO_DECODER 0 #define CONFIG_WMAV1_DECODER 0 #define CONFIG_WMAV2_DECODER 0 #define CONFIG_WMAVOICE_DECODER 0 #define CONFIG_WS_SND1_DECODER 0 #define CONFIG_XMA1_DECODER 0 #define CONFIG_XMA2_DECODER 0 #define CONFIG_PCM_ALAW_DECODER 0 #define CONFIG_PCM_BLURAY_DECODER 0 #define CONFIG_PCM_DVD_DECODER 0 #define CONFIG_PCM_F32BE_DECODER 0 #define CONFIG_PCM_F32LE_DECODER 0 #define CONFIG_PCM_F64BE_DECODER 0 #define CONFIG_PCM_F64LE_DECODER 0 #define CONFIG_PCM_LXF_DECODER 0 #define CONFIG_PCM_MULAW_DECODER 0 #define CONFIG_PCM_S8_DECODER 0 #define CONFIG_PCM_S8_PLANAR_DECODER 0 #define CONFIG_PCM_S16BE_DECODER 0 #define CONFIG_PCM_S16BE_PLANAR_DECODER 0 #define CONFIG_PCM_S16LE_DECODER 0 #define CONFIG_PCM_S16LE_PLANAR_DECODER 0 #define CONFIG_PCM_S24BE_DECODER 0 #define CONFIG_PCM_S24DAUD_DECODER 0 #define CONFIG_PCM_S24LE_DECODER 0 #define CONFIG_PCM_S24LE_PLANAR_DECODER 0 #define CONFIG_PCM_S32BE_DECODER 0 #define CONFIG_PCM_S32LE_DECODER 0 #define CONFIG_PCM_S32LE_PLANAR_DECODER 0 #define CONFIG_PCM_S64BE_DECODER 0 #define CONFIG_PCM_S64LE_DECODER 0 #define CONFIG_PCM_U8_DECODER 0 #define CONFIG_PCM_U16BE_DECODER 0 #define CONFIG_PCM_U16LE_DECODER 0 #define CONFIG_PCM_U24BE_DECODER 0 #define CONFIG_PCM_U24LE_DECODER 0 #define CONFIG_PCM_U32BE_DECODER 0 #define CONFIG_PCM_U32LE_DECODER 0 #define CONFIG_PCM_ZORK_DECODER 0 #define CONFIG_INTERPLAY_DPCM_DECODER 0 #define CONFIG_ROQ_DPCM_DECODER 0 #define CONFIG_SOL_DPCM_DECODER 0 #define CONFIG_XAN_DPCM_DECODER 0 #define CONFIG_ADPCM_4XM_DECODER 0 #define CONFIG_ADPCM_ADX_DECODER 0 #define CONFIG_ADPCM_AFC_DECODER 0 #define CONFIG_ADPCM_AICA_DECODER 0 #define CONFIG_ADPCM_CT_DECODER 0 #define CONFIG_ADPCM_DTK_DECODER 0 #define CONFIG_ADPCM_EA_DECODER 0 #define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 #define CONFIG_ADPCM_EA_R1_DECODER 0 #define CONFIG_ADPCM_EA_R2_DECODER 0 #define CONFIG_ADPCM_EA_R3_DECODER 0 #define CONFIG_ADPCM_EA_XAS_DECODER 0 #define CONFIG_ADPCM_G722_DECODER 0 #define CONFIG_ADPCM_G726_DECODER 0 #define CONFIG_ADPCM_G726LE_DECODER 0 #define CONFIG_ADPCM_IMA_AMV_DECODER 0 #define CONFIG_ADPCM_IMA_APC_DECODER 0 #define CONFIG_ADPCM_IMA_DAT4_DECODER 0 #define CONFIG_ADPCM_IMA_DK3_DECODER 0 #define CONFIG_ADPCM_IMA_DK4_DECODER 0 #define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 #define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 #define CONFIG_ADPCM_IMA_ISS_DECODER 0 #define CONFIG_ADPCM_IMA_OKI_DECODER 0 #define CONFIG_ADPCM_IMA_QT_DECODER 0 #define CONFIG_ADPCM_IMA_RAD_DECODER 0 #define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 #define CONFIG_ADPCM_IMA_WAV_DECODER 0 #define CONFIG_ADPCM_IMA_WS_DECODER 0 #define CONFIG_ADPCM_MS_DECODER 0 #define CONFIG_ADPCM_MTAF_DECODER 0 #define CONFIG_ADPCM_PSX_DECODER 0 #define CONFIG_ADPCM_SBPRO_2_DECODER 0 #define CONFIG_ADPCM_SBPRO_3_DECODER 0 #define CONFIG_ADPCM_SBPRO_4_DECODER 0 #define CONFIG_ADPCM_SWF_DECODER 0 #define CONFIG_ADPCM_THP_DECODER 0 #define CONFIG_ADPCM_THP_LE_DECODER 0 #define CONFIG_ADPCM_VIMA_DECODER 0 #define CONFIG_ADPCM_XA_DECODER 0 #define CONFIG_ADPCM_YAMAHA_DECODER 0 #define CONFIG_SSA_DECODER 0 #define CONFIG_ASS_DECODER 0 #define CONFIG_CCAPTION_DECODER 0 #define CONFIG_DVBSUB_DECODER 0 #define CONFIG_DVDSUB_DECODER 0 #define CONFIG_JACOSUB_DECODER 0 #define CONFIG_MICRODVD_DECODER 0 #define CONFIG_MOVTEXT_DECODER 0 #define CONFIG_MPL2_DECODER 0 #define CONFIG_PGSSUB_DECODER 0 #define CONFIG_PJS_DECODER 0 #define CONFIG_REALTEXT_DECODER 0 #define CONFIG_SAMI_DECODER 0 #define CONFIG_SRT_DECODER 0 #define CONFIG_STL_DECODER 0 #define CONFIG_SUBRIP_DECODER 0 #define CONFIG_SUBVIEWER_DECODER 0 #define CONFIG_SUBVIEWER1_DECODER 0 #define CONFIG_TEXT_DECODER 0 #define CONFIG_VPLAYER_DECODER 0 #define CONFIG_WEBVTT_DECODER 0 #define CONFIG_XSUB_DECODER 0 #define CONFIG_AAC_AT_DECODER 0 #define CONFIG_AC3_AT_DECODER 0 #define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 #define CONFIG_ALAC_AT_DECODER 0 #define CONFIG_AMR_NB_AT_DECODER 0 #define CONFIG_EAC3_AT_DECODER 0 #define CONFIG_GSM_MS_AT_DECODER 0 #define CONFIG_ILBC_AT_DECODER 0 #define CONFIG_MP1_AT_DECODER 0 #define CONFIG_MP2_AT_DECODER 0 #define CONFIG_MP3_AT_DECODER 0 #define CONFIG_PCM_ALAW_AT_DECODER 0 #define CONFIG_PCM_MULAW_AT_DECODER 0 #define CONFIG_QDMC_AT_DECODER 0 #define CONFIG_QDM2_AT_DECODER 0 #define CONFIG_LIBCELT_DECODER 0 #define CONFIG_LIBFDK_AAC_DECODER 0 #define CONFIG_LIBGSM_DECODER 0 #define CONFIG_LIBGSM_MS_DECODER 0 #define CONFIG_LIBILBC_DECODER 0 #define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 #define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 #define CONFIG_LIBOPENJPEG_DECODER 0 #define CONFIG_LIBOPUS_DECODER 0 #define CONFIG_LIBSCHROEDINGER_DECODER 0 #define CONFIG_LIBSPEEX_DECODER 0 #define CONFIG_LIBVORBIS_DECODER 0 #define CONFIG_LIBVPX_VP8_DECODER 0 #define CONFIG_LIBVPX_VP9_DECODER 0 #define CONFIG_LIBZVBI_TELETEXT_DECODER 0 #define CONFIG_BINTEXT_DECODER 0 #define CONFIG_XBIN_DECODER 0 #define CONFIG_IDF_DECODER 0 #define CONFIG_LIBOPENH264_DECODER 0 #define CONFIG_H263_CUVID_DECODER 0 #define CONFIG_H264_CUVID_DECODER 0 #define CONFIG_HEVC_CUVID_DECODER 0 #define CONFIG_HEVC_MEDIACODEC_DECODER 0 #define CONFIG_MJPEG_CUVID_DECODER 0 #define CONFIG_MPEG1_CUVID_DECODER 0 #define CONFIG_MPEG2_CUVID_DECODER 0 #define CONFIG_MPEG4_CUVID_DECODER 0 #define CONFIG_MPEG4_MEDIACODEC_DECODER 0 #define CONFIG_VC1_CUVID_DECODER 0 #define CONFIG_VP8_CUVID_DECODER 0 #define CONFIG_VP8_MEDIACODEC_DECODER 0 #define CONFIG_VP9_CUVID_DECODER 0 #define CONFIG_VP9_MEDIACODEC_DECODER 0 #define CONFIG_AA_DEMUXER 0 #define CONFIG_AAC_DEMUXER 1 #define CONFIG_AC3_DEMUXER 0 #define CONFIG_ACM_DEMUXER 0 #define CONFIG_ACT_DEMUXER 0 #define CONFIG_ADF_DEMUXER 0 #define CONFIG_ADP_DEMUXER 0 #define CONFIG_ADS_DEMUXER 0 #define CONFIG_ADX_DEMUXER 0 #define CONFIG_AEA_DEMUXER 0 #define CONFIG_AFC_DEMUXER 0 #define CONFIG_AIFF_DEMUXER 0 #define CONFIG_AIX_DEMUXER 0 #define CONFIG_AMR_DEMUXER 0 #define CONFIG_ANM_DEMUXER 0 #define CONFIG_APC_DEMUXER 0 #define CONFIG_APE_DEMUXER 0 #define CONFIG_APNG_DEMUXER 0 #define CONFIG_AQTITLE_DEMUXER 0 #define CONFIG_ASF_DEMUXER 0 #define CONFIG_ASF_O_DEMUXER 0 #define CONFIG_ASS_DEMUXER 0 #define CONFIG_AST_DEMUXER 0 #define CONFIG_AU_DEMUXER 0 #define CONFIG_AVI_DEMUXER 0 #define CONFIG_AVISYNTH_DEMUXER 0 #define CONFIG_AVR_DEMUXER 0 #define CONFIG_AVS_DEMUXER 0 #define CONFIG_BETHSOFTVID_DEMUXER 0 #define CONFIG_BFI_DEMUXER 0 #define CONFIG_BINTEXT_DEMUXER 0 #define CONFIG_BINK_DEMUXER 0 #define CONFIG_BIT_DEMUXER 0 #define CONFIG_BMV_DEMUXER 0 #define CONFIG_BFSTM_DEMUXER 0 #define CONFIG_BRSTM_DEMUXER 0 #define CONFIG_BOA_DEMUXER 0 #define CONFIG_C93_DEMUXER 0 #define CONFIG_CAF_DEMUXER 0 #define CONFIG_CAVSVIDEO_DEMUXER 0 #define CONFIG_CDG_DEMUXER 0 #define CONFIG_CDXL_DEMUXER 0 #define CONFIG_CINE_DEMUXER 0 #define CONFIG_CONCAT_DEMUXER 1 #define CONFIG_DATA_DEMUXER 1 #define CONFIG_DAUD_DEMUXER 0 #define CONFIG_DCSTR_DEMUXER 0 #define CONFIG_DFA_DEMUXER 0 #define CONFIG_DIRAC_DEMUXER 0 #define CONFIG_DNXHD_DEMUXER 0 #define CONFIG_DSF_DEMUXER 0 #define CONFIG_DSICIN_DEMUXER 0 #define CONFIG_DSS_DEMUXER 0 #define CONFIG_DTS_DEMUXER 0 #define CONFIG_DTSHD_DEMUXER 0 #define CONFIG_DV_DEMUXER 0 #define CONFIG_DVBSUB_DEMUXER 0 #define CONFIG_DVBTXT_DEMUXER 0 #define CONFIG_DXA_DEMUXER 0 #define CONFIG_EA_DEMUXER 0 #define CONFIG_EA_CDATA_DEMUXER 0 #define CONFIG_EAC3_DEMUXER 0 #define CONFIG_EPAF_DEMUXER 0 #define CONFIG_FFM_DEMUXER 0 #define CONFIG_FFMETADATA_DEMUXER 0 #define CONFIG_FILMSTRIP_DEMUXER 0 #define CONFIG_FLAC_DEMUXER 0 #define CONFIG_FLIC_DEMUXER 0 #define CONFIG_FLV_DEMUXER 1 #define CONFIG_LIVE_FLV_DEMUXER 1 #define CONFIG_FOURXM_DEMUXER 0 #define CONFIG_FRM_DEMUXER 0 #define CONFIG_FSB_DEMUXER 0 #define CONFIG_G722_DEMUXER 0 #define CONFIG_G723_1_DEMUXER 0 #define CONFIG_G729_DEMUXER 0 #define CONFIG_GENH_DEMUXER 0 #define CONFIG_GIF_DEMUXER 0 #define CONFIG_GSM_DEMUXER 0 #define CONFIG_GXF_DEMUXER 0 #define CONFIG_H261_DEMUXER 0 #define CONFIG_H263_DEMUXER 0 #define CONFIG_H264_DEMUXER 0 #define CONFIG_HEVC_DEMUXER 0 #define CONFIG_HLS_DEMUXER 1 #define CONFIG_HNM_DEMUXER 0 #define CONFIG_ICO_DEMUXER 0 #define CONFIG_IDCIN_DEMUXER 0 #define CONFIG_IDF_DEMUXER 0 #define CONFIG_IFF_DEMUXER 0 #define CONFIG_ILBC_DEMUXER 0 #define CONFIG_IMAGE2_DEMUXER 0 #define CONFIG_IMAGE2PIPE_DEMUXER 0 #define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 #define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 #define CONFIG_INGENIENT_DEMUXER 0 #define CONFIG_IPMOVIE_DEMUXER 0 #define CONFIG_IRCAM_DEMUXER 0 #define CONFIG_ISS_DEMUXER 0 #define CONFIG_IV8_DEMUXER 0 #define CONFIG_IVF_DEMUXER 0 #define CONFIG_IVR_DEMUXER 0 #define CONFIG_JACOSUB_DEMUXER 0 #define CONFIG_JV_DEMUXER 0 #define CONFIG_LMLM4_DEMUXER 0 #define CONFIG_LOAS_DEMUXER 0 #define CONFIG_LRC_DEMUXER 0 #define CONFIG_LVF_DEMUXER 0 #define CONFIG_LXF_DEMUXER 0 #define CONFIG_M4V_DEMUXER 0 #define CONFIG_MATROSKA_DEMUXER 0 #define CONFIG_MGSTS_DEMUXER 0 #define CONFIG_MICRODVD_DEMUXER 0 #define CONFIG_MJPEG_DEMUXER 0 #define CONFIG_MLP_DEMUXER 0 #define CONFIG_MLV_DEMUXER 0 #define CONFIG_MM_DEMUXER 0 #define CONFIG_MMF_DEMUXER 0 #define CONFIG_MOV_DEMUXER 1 #define CONFIG_MP3_DEMUXER 1 #define CONFIG_MPC_DEMUXER 0 #define CONFIG_MPC8_DEMUXER 0 #define CONFIG_MPEGPS_DEMUXER 1 #define CONFIG_MPEGTS_DEMUXER 1 #define CONFIG_MPEGTSRAW_DEMUXER 0 #define CONFIG_MPEGVIDEO_DEMUXER 1 #define CONFIG_MPJPEG_DEMUXER 0 #define CONFIG_MPL2_DEMUXER 0 #define CONFIG_MPSUB_DEMUXER 0 #define CONFIG_MSF_DEMUXER 0 #define CONFIG_MSNWC_TCP_DEMUXER 0 #define CONFIG_MTAF_DEMUXER 0 #define CONFIG_MTV_DEMUXER 0 #define CONFIG_MUSX_DEMUXER 0 #define CONFIG_MV_DEMUXER 0 #define CONFIG_MVI_DEMUXER 0 #define CONFIG_MXF_DEMUXER 0 #define CONFIG_MXG_DEMUXER 0 #define CONFIG_NC_DEMUXER 0 #define CONFIG_NISTSPHERE_DEMUXER 0 #define CONFIG_NSV_DEMUXER 0 #define CONFIG_NUT_DEMUXER 0 #define CONFIG_NUV_DEMUXER 0 #define CONFIG_OGG_DEMUXER 0 #define CONFIG_OMA_DEMUXER 0 #define CONFIG_PAF_DEMUXER 0 #define CONFIG_PCM_ALAW_DEMUXER 0 #define CONFIG_PCM_MULAW_DEMUXER 0 #define CONFIG_PCM_F64BE_DEMUXER 0 #define CONFIG_PCM_F64LE_DEMUXER 0 #define CONFIG_PCM_F32BE_DEMUXER 0 #define CONFIG_PCM_F32LE_DEMUXER 0 #define CONFIG_PCM_S32BE_DEMUXER 0 #define CONFIG_PCM_S32LE_DEMUXER 0 #define CONFIG_PCM_S24BE_DEMUXER 0 #define CONFIG_PCM_S24LE_DEMUXER 0 #define CONFIG_PCM_S16BE_DEMUXER 0 #define CONFIG_PCM_S16LE_DEMUXER 0 #define CONFIG_PCM_S8_DEMUXER 0 #define CONFIG_PCM_U32BE_DEMUXER 0 #define CONFIG_PCM_U32LE_DEMUXER 0 #define CONFIG_PCM_U24BE_DEMUXER 0 #define CONFIG_PCM_U24LE_DEMUXER 0 #define CONFIG_PCM_U16BE_DEMUXER 0 #define CONFIG_PCM_U16LE_DEMUXER 0 #define CONFIG_PCM_U8_DEMUXER 0 #define CONFIG_PJS_DEMUXER 0 #define CONFIG_PMP_DEMUXER 0 #define CONFIG_PVA_DEMUXER 0 #define CONFIG_PVF_DEMUXER 0 #define CONFIG_QCP_DEMUXER 0 #define CONFIG_R3D_DEMUXER 0 #define CONFIG_RAWVIDEO_DEMUXER 0 #define CONFIG_REALTEXT_DEMUXER 0 #define CONFIG_REDSPARK_DEMUXER 0 #define CONFIG_RL2_DEMUXER 0 #define CONFIG_RM_DEMUXER 0 #define CONFIG_ROQ_DEMUXER 0 #define CONFIG_RPL_DEMUXER 0 #define CONFIG_RSD_DEMUXER 0 #define CONFIG_RSO_DEMUXER 0 #define CONFIG_RTP_DEMUXER 0 #define CONFIG_RTSP_DEMUXER 0 #define CONFIG_SAMI_DEMUXER 0 #define CONFIG_SAP_DEMUXER 0 #define CONFIG_SBG_DEMUXER 0 #define CONFIG_SDP_DEMUXER 0 #define CONFIG_SDR2_DEMUXER 0 #define CONFIG_SEGAFILM_DEMUXER 0 #define CONFIG_SHORTEN_DEMUXER 0 #define CONFIG_SIFF_DEMUXER 0 #define CONFIG_SLN_DEMUXER 0 #define CONFIG_SMACKER_DEMUXER 0 #define CONFIG_SMJPEG_DEMUXER 0 #define CONFIG_SMUSH_DEMUXER 0 #define CONFIG_SOL_DEMUXER 0 #define CONFIG_SOX_DEMUXER 0 #define CONFIG_SPDIF_DEMUXER 0 #define CONFIG_SRT_DEMUXER 0 #define CONFIG_STR_DEMUXER 0 #define CONFIG_STL_DEMUXER 0 #define CONFIG_SUBVIEWER1_DEMUXER 0 #define CONFIG_SUBVIEWER_DEMUXER 0 #define CONFIG_SUP_DEMUXER 0 #define CONFIG_SVAG_DEMUXER 0 #define CONFIG_SWF_DEMUXER 0 #define CONFIG_TAK_DEMUXER 0 #define CONFIG_TEDCAPTIONS_DEMUXER 0 #define CONFIG_THP_DEMUXER 0 #define CONFIG_THREEDOSTR_DEMUXER 0 #define CONFIG_TIERTEXSEQ_DEMUXER 0 #define CONFIG_TMV_DEMUXER 0 #define CONFIG_TRUEHD_DEMUXER 0 #define CONFIG_TTA_DEMUXER 0 #define CONFIG_TXD_DEMUXER 0 #define CONFIG_TTY_DEMUXER 0 #define CONFIG_V210_DEMUXER 0 #define CONFIG_V210X_DEMUXER 0 #define CONFIG_VAG_DEMUXER 0 #define CONFIG_VC1_DEMUXER 0 #define CONFIG_VC1T_DEMUXER 0 #define CONFIG_VIVO_DEMUXER 0 #define CONFIG_VMD_DEMUXER 0 #define CONFIG_VOBSUB_DEMUXER 0 #define CONFIG_VOC_DEMUXER 0 #define CONFIG_VPK_DEMUXER 0 #define CONFIG_VPLAYER_DEMUXER 0 #define CONFIG_VQF_DEMUXER 0 #define CONFIG_W64_DEMUXER 0 #define CONFIG_WAV_DEMUXER 0 #define CONFIG_WC3_DEMUXER 0 #define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 #define CONFIG_WEBVTT_DEMUXER 0 #define CONFIG_WSAUD_DEMUXER 0 #define CONFIG_WSD_DEMUXER 0 #define CONFIG_WSVQA_DEMUXER 0 #define CONFIG_WTV_DEMUXER 0 #define CONFIG_WVE_DEMUXER 0 #define CONFIG_WV_DEMUXER 0 #define CONFIG_XA_DEMUXER 0 #define CONFIG_XBIN_DEMUXER 0 #define CONFIG_XMV_DEMUXER 0 #define CONFIG_XVAG_DEMUXER 0 #define CONFIG_XWMA_DEMUXER 0 #define CONFIG_YOP_DEMUXER 0 #define CONFIG_YUV4MPEGPIPE_DEMUXER 0 #define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 #define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 #define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 #define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 #define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 #define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 #define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 #define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 #define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 #define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 #define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 #define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 #define CONFIG_LIBGME_DEMUXER 0 #define CONFIG_LIBMODPLUG_DEMUXER 0 #define CONFIG_LIBNUT_DEMUXER 0 #define CONFIG_LIBOPENMPT_DEMUXER 0 #define CONFIG_A64MULTI_ENCODER 0 #define CONFIG_A64MULTI5_ENCODER 0 #define CONFIG_ALIAS_PIX_ENCODER 0 #define CONFIG_AMV_ENCODER 0 #define CONFIG_APNG_ENCODER 0 #define CONFIG_ASV1_ENCODER 0 #define CONFIG_ASV2_ENCODER 0 #define CONFIG_AVRP_ENCODER 0 #define CONFIG_AVUI_ENCODER 0 #define CONFIG_AYUV_ENCODER 0 #define CONFIG_BMP_ENCODER 0 #define CONFIG_CINEPAK_ENCODER 0 #define CONFIG_CLJR_ENCODER 0 #define CONFIG_COMFORTNOISE_ENCODER 0 #define CONFIG_DNXHD_ENCODER 0 #define CONFIG_DPX_ENCODER 0 #define CONFIG_DVVIDEO_ENCODER 0 #define CONFIG_FFV1_ENCODER 0 #define CONFIG_FFVHUFF_ENCODER 0 #define CONFIG_FLASHSV_ENCODER 0 #define CONFIG_FLASHSV2_ENCODER 0 #define CONFIG_FLV_ENCODER 0 #define CONFIG_GIF_ENCODER 0 #define CONFIG_H261_ENCODER 0 #define CONFIG_H263_ENCODER 0 #define CONFIG_H263P_ENCODER 0 #define CONFIG_HAP_ENCODER 0 #define CONFIG_HUFFYUV_ENCODER 0 #define CONFIG_JPEG2000_ENCODER 0 #define CONFIG_JPEGLS_ENCODER 0 #define CONFIG_LJPEG_ENCODER 0 #define CONFIG_MJPEG_ENCODER 0 #define CONFIG_MPEG1VIDEO_ENCODER 0 #define CONFIG_MPEG2VIDEO_ENCODER 0 #define CONFIG_MPEG4_ENCODER 0 #define CONFIG_MSMPEG4V2_ENCODER 0 #define CONFIG_MSMPEG4V3_ENCODER 0 #define CONFIG_MSVIDEO1_ENCODER 0 #define CONFIG_PAM_ENCODER 0 #define CONFIG_PBM_ENCODER 0 #define CONFIG_PCX_ENCODER 0 #define CONFIG_PGM_ENCODER 0 #define CONFIG_PGMYUV_ENCODER 0 #define CONFIG_PNG_ENCODER 0 #define CONFIG_PPM_ENCODER 0 #define CONFIG_PRORES_ENCODER 0 #define CONFIG_PRORES_AW_ENCODER 0 #define CONFIG_PRORES_KS_ENCODER 0 #define CONFIG_QTRLE_ENCODER 0 #define CONFIG_R10K_ENCODER 0 #define CONFIG_R210_ENCODER 0 #define CONFIG_RAWVIDEO_ENCODER 0 #define CONFIG_ROQ_ENCODER 0 #define CONFIG_RV10_ENCODER 0 #define CONFIG_RV20_ENCODER 0 #define CONFIG_S302M_ENCODER 0 #define CONFIG_SGI_ENCODER 0 #define CONFIG_SNOW_ENCODER 0 #define CONFIG_SUNRAST_ENCODER 0 #define CONFIG_SVQ1_ENCODER 0 #define CONFIG_TARGA_ENCODER 0 #define CONFIG_TIFF_ENCODER 0 #define CONFIG_UTVIDEO_ENCODER 0 #define CONFIG_V210_ENCODER 0 #define CONFIG_V308_ENCODER 0 #define CONFIG_V408_ENCODER 0 #define CONFIG_V410_ENCODER 0 #define CONFIG_VC2_ENCODER 0 #define CONFIG_WRAPPED_AVFRAME_ENCODER 0 #define CONFIG_WMV1_ENCODER 0 #define CONFIG_WMV2_ENCODER 0 #define CONFIG_XBM_ENCODER 0 #define CONFIG_XFACE_ENCODER 0 #define CONFIG_XWD_ENCODER 0 #define CONFIG_Y41P_ENCODER 0 #define CONFIG_YUV4_ENCODER 0 #define CONFIG_ZLIB_ENCODER 0 #define CONFIG_ZMBV_ENCODER 0 #define CONFIG_AAC_ENCODER 0 #define CONFIG_AC3_ENCODER 0 #define CONFIG_AC3_FIXED_ENCODER 0 #define CONFIG_ALAC_ENCODER 0 #define CONFIG_DCA_ENCODER 0 #define CONFIG_EAC3_ENCODER 0 #define CONFIG_FLAC_ENCODER 0 #define CONFIG_G723_1_ENCODER 0 #define CONFIG_MLP_ENCODER 0 #define CONFIG_MP2_ENCODER 0 #define CONFIG_MP2FIXED_ENCODER 0 #define CONFIG_NELLYMOSER_ENCODER 0 #define CONFIG_RA_144_ENCODER 0 #define CONFIG_SONIC_ENCODER 0 #define CONFIG_SONIC_LS_ENCODER 0 #define CONFIG_TRUEHD_ENCODER 0 #define CONFIG_TTA_ENCODER 0 #define CONFIG_VORBIS_ENCODER 0 #define CONFIG_WAVPACK_ENCODER 0 #define CONFIG_WMAV1_ENCODER 0 #define CONFIG_WMAV2_ENCODER 0 #define CONFIG_PCM_ALAW_ENCODER 0 #define CONFIG_PCM_F32BE_ENCODER 0 #define CONFIG_PCM_F32LE_ENCODER 0 #define CONFIG_PCM_F64BE_ENCODER 0 #define CONFIG_PCM_F64LE_ENCODER 0 #define CONFIG_PCM_MULAW_ENCODER 0 #define CONFIG_PCM_S8_ENCODER 0 #define CONFIG_PCM_S8_PLANAR_ENCODER 0 #define CONFIG_PCM_S16BE_ENCODER 0 #define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 #define CONFIG_PCM_S16LE_ENCODER 0 #define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 #define CONFIG_PCM_S24BE_ENCODER 0 #define CONFIG_PCM_S24DAUD_ENCODER 0 #define CONFIG_PCM_S24LE_ENCODER 0 #define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 #define CONFIG_PCM_S32BE_ENCODER 0 #define CONFIG_PCM_S32LE_ENCODER 0 #define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 #define CONFIG_PCM_S64BE_ENCODER 0 #define CONFIG_PCM_S64LE_ENCODER 0 #define CONFIG_PCM_U8_ENCODER 0 #define CONFIG_PCM_U16BE_ENCODER 0 #define CONFIG_PCM_U16LE_ENCODER 0 #define CONFIG_PCM_U24BE_ENCODER 0 #define CONFIG_PCM_U24LE_ENCODER 0 #define CONFIG_PCM_U32BE_ENCODER 0 #define CONFIG_PCM_U32LE_ENCODER 0 #define CONFIG_ROQ_DPCM_ENCODER 0 #define CONFIG_ADPCM_ADX_ENCODER 0 #define CONFIG_ADPCM_G722_ENCODER 0 #define CONFIG_ADPCM_G726_ENCODER 0 #define CONFIG_ADPCM_IMA_QT_ENCODER 0 #define CONFIG_ADPCM_IMA_WAV_ENCODER 0 #define CONFIG_ADPCM_MS_ENCODER 0 #define CONFIG_ADPCM_SWF_ENCODER 0 #define CONFIG_ADPCM_YAMAHA_ENCODER 0 #define CONFIG_SSA_ENCODER 0 #define CONFIG_ASS_ENCODER 0 #define CONFIG_DVBSUB_ENCODER 0 #define CONFIG_DVDSUB_ENCODER 0 #define CONFIG_MOVTEXT_ENCODER 0 #define CONFIG_SRT_ENCODER 0 #define CONFIG_SUBRIP_ENCODER 0 #define CONFIG_TEXT_ENCODER 0 #define CONFIG_WEBVTT_ENCODER 0 #define CONFIG_XSUB_ENCODER 0 #define CONFIG_AAC_AT_ENCODER 0 #define CONFIG_ALAC_AT_ENCODER 0 #define CONFIG_ILBC_AT_ENCODER 0 #define CONFIG_PCM_ALAW_AT_ENCODER 0 #define CONFIG_PCM_MULAW_AT_ENCODER 0 #define CONFIG_LIBFDK_AAC_ENCODER 0 #define CONFIG_LIBGSM_ENCODER 0 #define CONFIG_LIBGSM_MS_ENCODER 0 #define CONFIG_LIBILBC_ENCODER 0 #define CONFIG_LIBMP3LAME_ENCODER 0 #define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 #define CONFIG_LIBOPENJPEG_ENCODER 0 #define CONFIG_LIBOPUS_ENCODER 0 #define CONFIG_LIBSCHROEDINGER_ENCODER 0 #define CONFIG_LIBSHINE_ENCODER 0 #define CONFIG_LIBSPEEX_ENCODER 0 #define CONFIG_LIBTHEORA_ENCODER 0 #define CONFIG_LIBTWOLAME_ENCODER 0 #define CONFIG_LIBVO_AMRWBENC_ENCODER 0 #define CONFIG_LIBVORBIS_ENCODER 0 #define CONFIG_LIBVPX_VP8_ENCODER 0 #define CONFIG_LIBVPX_VP9_ENCODER 0 #define CONFIG_LIBWAVPACK_ENCODER 0 #define CONFIG_LIBWEBP_ANIM_ENCODER 0 #define CONFIG_LIBWEBP_ENCODER 0 #define CONFIG_LIBX262_ENCODER 0 #define CONFIG_LIBX264_ENCODER 0 #define CONFIG_LIBX264RGB_ENCODER 0 #define CONFIG_LIBX265_ENCODER 0 #define CONFIG_LIBXAVS_ENCODER 0 #define CONFIG_LIBXVID_ENCODER 0 #define CONFIG_LIBOPENH264_ENCODER 0 #define CONFIG_H264_NVENC_ENCODER 0 #define CONFIG_H264_OMX_ENCODER 0 #define CONFIG_H264_QSV_ENCODER 0 #define CONFIG_H264_VAAPI_ENCODER 0 #define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 #define CONFIG_NVENC_ENCODER 0 #define CONFIG_NVENC_H264_ENCODER 0 #define CONFIG_NVENC_HEVC_ENCODER 0 #define CONFIG_HEVC_NVENC_ENCODER 0 #define CONFIG_HEVC_QSV_ENCODER 0 #define CONFIG_HEVC_VAAPI_ENCODER 0 #define CONFIG_LIBKVAZAAR_ENCODER 0 #define CONFIG_MJPEG_VAAPI_ENCODER 0 #define CONFIG_MPEG2_QSV_ENCODER 0 #define CONFIG_ABENCH_FILTER 0 #define CONFIG_ACOMPRESSOR_FILTER 0 #define CONFIG_ACROSSFADE_FILTER 0 #define CONFIG_ACRUSHER_FILTER 0 #define CONFIG_ADELAY_FILTER 0 #define CONFIG_AECHO_FILTER 0 #define CONFIG_AEMPHASIS_FILTER 0 #define CONFIG_AEVAL_FILTER 0 #define CONFIG_AFADE_FILTER 0 #define CONFIG_AFFTFILT_FILTER 0 #define CONFIG_AFORMAT_FILTER 0 #define CONFIG_AGATE_FILTER 0 #define CONFIG_AINTERLEAVE_FILTER 0 #define CONFIG_ALIMITER_FILTER 0 #define CONFIG_ALLPASS_FILTER 0 #define CONFIG_ALOOP_FILTER 0 #define CONFIG_AMERGE_FILTER 0 #define CONFIG_AMETADATA_FILTER 0 #define CONFIG_AMIX_FILTER 0 #define CONFIG_ANEQUALIZER_FILTER 0 #define CONFIG_ANULL_FILTER 0 #define CONFIG_APAD_FILTER 0 #define CONFIG_APERMS_FILTER 0 #define CONFIG_APHASER_FILTER 0 #define CONFIG_APULSATOR_FILTER 0 #define CONFIG_AREALTIME_FILTER 0 #define CONFIG_ARESAMPLE_FILTER 0 #define CONFIG_AREVERSE_FILTER 0 #define CONFIG_ASELECT_FILTER 0 #define CONFIG_ASENDCMD_FILTER 0 #define CONFIG_ASETNSAMPLES_FILTER 0 #define CONFIG_ASETPTS_FILTER 0 #define CONFIG_ASETRATE_FILTER 0 #define CONFIG_ASETTB_FILTER 0 #define CONFIG_ASHOWINFO_FILTER 0 #define CONFIG_ASIDEDATA_FILTER 0 #define CONFIG_ASPLIT_FILTER 0 #define CONFIG_ASTATS_FILTER 0 #define CONFIG_ASTREAMSELECT_FILTER 0 #define CONFIG_ASYNCTS_FILTER 0 #define CONFIG_ATEMPO_FILTER 0 #define CONFIG_ATRIM_FILTER 0 #define CONFIG_AZMQ_FILTER 0 #define CONFIG_BANDPASS_FILTER 0 #define CONFIG_BANDREJECT_FILTER 0 #define CONFIG_BASS_FILTER 0 #define CONFIG_BIQUAD_FILTER 0 #define CONFIG_BS2B_FILTER 0 #define CONFIG_CHANNELMAP_FILTER 0 #define CONFIG_CHANNELSPLIT_FILTER 0 #define CONFIG_CHORUS_FILTER 0 #define CONFIG_COMPAND_FILTER 0 #define CONFIG_COMPENSATIONDELAY_FILTER 0 #define CONFIG_CRYSTALIZER_FILTER 0 #define CONFIG_DCSHIFT_FILTER 0 #define CONFIG_DYNAUDNORM_FILTER 0 #define CONFIG_EARWAX_FILTER 0 #define CONFIG_EBUR128_FILTER 0 #define CONFIG_EQUALIZER_FILTER 0 #define CONFIG_EXTRASTEREO_FILTER 0 #define CONFIG_FIREQUALIZER_FILTER 0 #define CONFIG_FLANGER_FILTER 0 #define CONFIG_HDCD_FILTER 0 #define CONFIG_HIGHPASS_FILTER 0 #define CONFIG_JOIN_FILTER 0 #define CONFIG_LADSPA_FILTER 0 #define CONFIG_LOUDNORM_FILTER 0 #define CONFIG_LOWPASS_FILTER 0 #define CONFIG_PAN_FILTER 0 #define CONFIG_REPLAYGAIN_FILTER 0 #define CONFIG_RESAMPLE_FILTER 0 #define CONFIG_RUBBERBAND_FILTER 0 #define CONFIG_SIDECHAINCOMPRESS_FILTER 0 #define CONFIG_SIDECHAINGATE_FILTER 0 #define CONFIG_SILENCEDETECT_FILTER 0 #define CONFIG_SILENCEREMOVE_FILTER 0 #define CONFIG_SOFALIZER_FILTER 0 #define CONFIG_STEREOTOOLS_FILTER 0 #define CONFIG_STEREOWIDEN_FILTER 0 #define CONFIG_TREBLE_FILTER 0 #define CONFIG_TREMOLO_FILTER 0 #define CONFIG_VIBRATO_FILTER 0 #define CONFIG_VOLUME_FILTER 0 #define CONFIG_VOLUMEDETECT_FILTER 0 #define CONFIG_AEVALSRC_FILTER 0 #define CONFIG_ANOISESRC_FILTER 0 #define CONFIG_ANULLSRC_FILTER 0 #define CONFIG_FLITE_FILTER 0 #define CONFIG_SINE_FILTER 0 #define CONFIG_ANULLSINK_FILTER 0 #define CONFIG_ALPHAEXTRACT_FILTER 0 #define CONFIG_ALPHAMERGE_FILTER 0 #define CONFIG_ASS_FILTER 0 #define CONFIG_ATADENOISE_FILTER 0 #define CONFIG_AVGBLUR_FILTER 0 #define CONFIG_BBOX_FILTER 0 #define CONFIG_BENCH_FILTER 0 #define CONFIG_BITPLANENOISE_FILTER 0 #define CONFIG_BLACKDETECT_FILTER 0 #define CONFIG_BLACKFRAME_FILTER 0 #define CONFIG_BLEND_FILTER 0 #define CONFIG_BOXBLUR_FILTER 0 #define CONFIG_BWDIF_FILTER 0 #define CONFIG_CHROMAKEY_FILTER 0 #define CONFIG_CIESCOPE_FILTER 0 #define CONFIG_CODECVIEW_FILTER 0 #define CONFIG_COLORBALANCE_FILTER 0 #define CONFIG_COLORCHANNELMIXER_FILTER 0 #define CONFIG_COLORKEY_FILTER 0 #define CONFIG_COLORLEVELS_FILTER 0 #define CONFIG_COLORMATRIX_FILTER 0 #define CONFIG_COLORSPACE_FILTER 0 #define CONFIG_CONVOLUTION_FILTER 0 #define CONFIG_COPY_FILTER 0 #define CONFIG_COREIMAGE_FILTER 0 #define CONFIG_COVER_RECT_FILTER 0 #define CONFIG_CROP_FILTER 0 #define CONFIG_CROPDETECT_FILTER 0 #define CONFIG_CURVES_FILTER 0 #define CONFIG_DATASCOPE_FILTER 0 #define CONFIG_DCTDNOIZ_FILTER 0 #define CONFIG_DEBAND_FILTER 0 #define CONFIG_DECIMATE_FILTER 0 #define CONFIG_DEFLATE_FILTER 0 #define CONFIG_DEJUDDER_FILTER 0 #define CONFIG_DELOGO_FILTER 0 #define CONFIG_DESHAKE_FILTER 0 #define CONFIG_DETELECINE_FILTER 0 #define CONFIG_DILATION_FILTER 0 #define CONFIG_DISPLACE_FILTER 0 #define CONFIG_DRAWBOX_FILTER 0 #define CONFIG_DRAWGRAPH_FILTER 0 #define CONFIG_DRAWGRID_FILTER 0 #define CONFIG_DRAWTEXT_FILTER 0 #define CONFIG_EDGEDETECT_FILTER 0 #define CONFIG_ELBG_FILTER 0 #define CONFIG_EQ_FILTER 0 #define CONFIG_EROSION_FILTER 0 #define CONFIG_EXTRACTPLANES_FILTER 0 #define CONFIG_FADE_FILTER 0 #define CONFIG_FFTFILT_FILTER 0 #define CONFIG_FIELD_FILTER 0 #define CONFIG_FIELDHINT_FILTER 0 #define CONFIG_FIELDMATCH_FILTER 0 #define CONFIG_FIELDORDER_FILTER 0 #define CONFIG_FIND_RECT_FILTER 0 #define CONFIG_FORMAT_FILTER 0 #define CONFIG_FPS_FILTER 0 #define CONFIG_FRAMEPACK_FILTER 0 #define CONFIG_FRAMERATE_FILTER 0 #define CONFIG_FRAMESTEP_FILTER 0 #define CONFIG_FREI0R_FILTER 0 #define CONFIG_FSPP_FILTER 0 #define CONFIG_GBLUR_FILTER 0 #define CONFIG_GEQ_FILTER 0 #define CONFIG_GRADFUN_FILTER 0 #define CONFIG_HALDCLUT_FILTER 0 #define CONFIG_HFLIP_FILTER 0 #define CONFIG_HISTEQ_FILTER 0 #define CONFIG_HISTOGRAM_FILTER 0 #define CONFIG_HQDN3D_FILTER 0 #define CONFIG_HQX_FILTER 0 #define CONFIG_HSTACK_FILTER 0 #define CONFIG_HUE_FILTER 0 #define CONFIG_HWDOWNLOAD_FILTER 0 #define CONFIG_HWUPLOAD_FILTER 0 #define CONFIG_HWUPLOAD_CUDA_FILTER 0 #define CONFIG_HYSTERESIS_FILTER 0 #define CONFIG_IDET_FILTER 0 #define CONFIG_IL_FILTER 0 #define CONFIG_INFLATE_FILTER 0 #define CONFIG_INTERLACE_FILTER 0 #define CONFIG_INTERLEAVE_FILTER 0 #define CONFIG_KERNDEINT_FILTER 0 #define CONFIG_LENSCORRECTION_FILTER 0 #define CONFIG_LOOP_FILTER 0 #define CONFIG_LUT_FILTER 0 #define CONFIG_LUT2_FILTER 0 #define CONFIG_LUT3D_FILTER 0 #define CONFIG_LUTRGB_FILTER 0 #define CONFIG_LUTYUV_FILTER 0 #define CONFIG_MASKEDCLAMP_FILTER 0 #define CONFIG_MASKEDMERGE_FILTER 0 #define CONFIG_MCDEINT_FILTER 0 #define CONFIG_MERGEPLANES_FILTER 0 #define CONFIG_MESTIMATE_FILTER 0 #define CONFIG_METADATA_FILTER 0 #define CONFIG_MINTERPOLATE_FILTER 0 #define CONFIG_MPDECIMATE_FILTER 0 #define CONFIG_NEGATE_FILTER 0 #define CONFIG_NLMEANS_FILTER 0 #define CONFIG_NNEDI_FILTER 0 #define CONFIG_NOFORMAT_FILTER 0 #define CONFIG_NOISE_FILTER 0 #define CONFIG_NULL_FILTER 0 #define CONFIG_OCR_FILTER 0 #define CONFIG_OCV_FILTER 0 #define CONFIG_OVERLAY_FILTER 0 #define CONFIG_OWDENOISE_FILTER 0 #define CONFIG_PAD_FILTER 0 #define CONFIG_PALETTEGEN_FILTER 0 #define CONFIG_PALETTEUSE_FILTER 0 #define CONFIG_PERMS_FILTER 0 #define CONFIG_PERSPECTIVE_FILTER 0 #define CONFIG_PHASE_FILTER 0 #define CONFIG_PIXDESCTEST_FILTER 0 #define CONFIG_PP_FILTER 0 #define CONFIG_PP7_FILTER 0 #define CONFIG_PREWITT_FILTER 0 #define CONFIG_PSNR_FILTER 0 #define CONFIG_PULLUP_FILTER 0 #define CONFIG_QP_FILTER 0 #define CONFIG_RANDOM_FILTER 0 #define CONFIG_READVITC_FILTER 0 #define CONFIG_REALTIME_FILTER 0 #define CONFIG_REMAP_FILTER 0 #define CONFIG_REMOVEGRAIN_FILTER 0 #define CONFIG_REMOVELOGO_FILTER 0 #define CONFIG_REPEATFIELDS_FILTER 0 #define CONFIG_REVERSE_FILTER 0 #define CONFIG_ROTATE_FILTER 0 #define CONFIG_SAB_FILTER 0 #define CONFIG_SCALE_FILTER 0 #define CONFIG_SCALE_NPP_FILTER 0 #define CONFIG_SCALE_VAAPI_FILTER 0 #define CONFIG_SCALE2REF_FILTER 0 #define CONFIG_SELECT_FILTER 0 #define CONFIG_SELECTIVECOLOR_FILTER 0 #define CONFIG_SENDCMD_FILTER 0 #define CONFIG_SEPARATEFIELDS_FILTER 0 #define CONFIG_SETDAR_FILTER 0 #define CONFIG_SETFIELD_FILTER 0 #define CONFIG_SETPTS_FILTER 0 #define CONFIG_SETSAR_FILTER 0 #define CONFIG_SETTB_FILTER 0 #define CONFIG_SHOWINFO_FILTER 0 #define CONFIG_SHOWPALETTE_FILTER 0 #define CONFIG_SHUFFLEFRAMES_FILTER 0 #define CONFIG_SHUFFLEPLANES_FILTER 0 #define CONFIG_SIDEDATA_FILTER 0 #define CONFIG_SIGNALSTATS_FILTER 0 #define CONFIG_SMARTBLUR_FILTER 0 #define CONFIG_SOBEL_FILTER 0 #define CONFIG_SPLIT_FILTER 0 #define CONFIG_SPP_FILTER 0 #define CONFIG_SSIM_FILTER 0 #define CONFIG_STEREO3D_FILTER 0 #define CONFIG_STREAMSELECT_FILTER 0 #define CONFIG_SUBTITLES_FILTER 0 #define CONFIG_SUPER2XSAI_FILTER 0 #define CONFIG_SWAPRECT_FILTER 0 #define CONFIG_SWAPUV_FILTER 0 #define CONFIG_TBLEND_FILTER 0 #define CONFIG_TELECINE_FILTER 0 #define CONFIG_THUMBNAIL_FILTER 0 #define CONFIG_TILE_FILTER 0 #define CONFIG_TINTERLACE_FILTER 0 #define CONFIG_TRANSPOSE_FILTER 0 #define CONFIG_TRIM_FILTER 0 #define CONFIG_UNSHARP_FILTER 0 #define CONFIG_USPP_FILTER 0 #define CONFIG_VAGUEDENOISER_FILTER 0 #define CONFIG_VECTORSCOPE_FILTER 0 #define CONFIG_VFLIP_FILTER 0 #define CONFIG_VIDSTABDETECT_FILTER 0 #define CONFIG_VIDSTABTRANSFORM_FILTER 0 #define CONFIG_VIGNETTE_FILTER 0 #define CONFIG_VSTACK_FILTER 0 #define CONFIG_W3FDIF_FILTER 0 #define CONFIG_WAVEFORM_FILTER 0 #define CONFIG_WEAVE_FILTER 0 #define CONFIG_XBR_FILTER 0 #define CONFIG_YADIF_FILTER 0 #define CONFIG_ZMQ_FILTER 0 #define CONFIG_ZOOMPAN_FILTER 0 #define CONFIG_ZSCALE_FILTER 0 #define CONFIG_ALLRGB_FILTER 0 #define CONFIG_ALLYUV_FILTER 0 #define CONFIG_CELLAUTO_FILTER 0 #define CONFIG_COLOR_FILTER 0 #define CONFIG_COREIMAGESRC_FILTER 0 #define CONFIG_FREI0R_SRC_FILTER 0 #define CONFIG_HALDCLUTSRC_FILTER 0 #define CONFIG_LIFE_FILTER 0 #define CONFIG_MANDELBROT_FILTER 0 #define CONFIG_MPTESTSRC_FILTER 0 #define CONFIG_NULLSRC_FILTER 0 #define CONFIG_RGBTESTSRC_FILTER 0 #define CONFIG_SMPTEBARS_FILTER 0 #define CONFIG_SMPTEHDBARS_FILTER 0 #define CONFIG_TESTSRC_FILTER 0 #define CONFIG_TESTSRC2_FILTER 0 #define CONFIG_YUVTESTSRC_FILTER 0 #define CONFIG_NULLSINK_FILTER 0 #define CONFIG_ADRAWGRAPH_FILTER 0 #define CONFIG_AHISTOGRAM_FILTER 0 #define CONFIG_APHASEMETER_FILTER 0 #define CONFIG_AVECTORSCOPE_FILTER 0 #define CONFIG_CONCAT_FILTER 0 #define CONFIG_SHOWCQT_FILTER 0 #define CONFIG_SHOWFREQS_FILTER 0 #define CONFIG_SHOWSPECTRUM_FILTER 0 #define CONFIG_SHOWSPECTRUMPIC_FILTER 0 #define CONFIG_SHOWVOLUME_FILTER 0 #define CONFIG_SHOWWAVES_FILTER 0 #define CONFIG_SHOWWAVESPIC_FILTER 0 #define CONFIG_SPECTRUMSYNTH_FILTER 0 #define CONFIG_AMOVIE_FILTER 0 #define CONFIG_MOVIE_FILTER 0 #define CONFIG_H263_CUVID_HWACCEL 0 #define CONFIG_H263_VAAPI_HWACCEL 0 #define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_H264_CUVID_HWACCEL 0 #define CONFIG_H264_D3D11VA_HWACCEL 0 #define CONFIG_H264_DXVA2_HWACCEL 0 #define CONFIG_H264_MEDIACODEC_HWACCEL 0 #define CONFIG_H264_MMAL_HWACCEL 0 #define CONFIG_H264_QSV_HWACCEL 0 #define CONFIG_H264_VAAPI_HWACCEL 0 #define CONFIG_H264_VDA_HWACCEL 0 #define CONFIG_H264_VDA_OLD_HWACCEL 0 #define CONFIG_H264_VDPAU_HWACCEL 0 #define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_HEVC_CUVID_HWACCEL 0 #define CONFIG_HEVC_D3D11VA_HWACCEL 0 #define CONFIG_HEVC_DXVA2_HWACCEL 0 #define CONFIG_HEVC_MEDIACODEC_HWACCEL 0 #define CONFIG_HEVC_QSV_HWACCEL 0 #define CONFIG_HEVC_VAAPI_HWACCEL 0 #define CONFIG_HEVC_VDPAU_HWACCEL 0 #define CONFIG_MJPEG_CUVID_HWACCEL 0 #define CONFIG_MPEG1_CUVID_HWACCEL 0 #define CONFIG_MPEG1_XVMC_HWACCEL 0 #define CONFIG_MPEG1_VDPAU_HWACCEL 0 #define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_MPEG2_CUVID_HWACCEL 0 #define CONFIG_MPEG2_XVMC_HWACCEL 0 #define CONFIG_MPEG2_D3D11VA_HWACCEL 0 #define CONFIG_MPEG2_DXVA2_HWACCEL 0 #define CONFIG_MPEG2_MMAL_HWACCEL 0 #define CONFIG_MPEG2_QSV_HWACCEL 0 #define CONFIG_MPEG2_VAAPI_HWACCEL 0 #define CONFIG_MPEG2_VDPAU_HWACCEL 0 #define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_MPEG4_CUVID_HWACCEL 0 #define CONFIG_MPEG4_MEDIACODEC_HWACCEL 0 #define CONFIG_MPEG4_MMAL_HWACCEL 0 #define CONFIG_MPEG4_VAAPI_HWACCEL 0 #define CONFIG_MPEG4_VDPAU_HWACCEL 0 #define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_VC1_CUVID_HWACCEL 0 #define CONFIG_VC1_D3D11VA_HWACCEL 0 #define CONFIG_VC1_DXVA2_HWACCEL 0 #define CONFIG_VC1_VAAPI_HWACCEL 0 #define CONFIG_VC1_VDPAU_HWACCEL 0 #define CONFIG_VC1_MMAL_HWACCEL 0 #define CONFIG_VC1_QSV_HWACCEL 0 #define CONFIG_VP8_CUVID_HWACCEL 0 #define CONFIG_VP8_MEDIACODEC_HWACCEL 0 #define CONFIG_VP9_CUVID_HWACCEL 0 #define CONFIG_VP9_D3D11VA_HWACCEL 0 #define CONFIG_VP9_DXVA2_HWACCEL 0 #define CONFIG_VP9_MEDIACODEC_HWACCEL 0 #define CONFIG_VP9_VAAPI_HWACCEL 0 #define CONFIG_WMV3_D3D11VA_HWACCEL 0 #define CONFIG_WMV3_DXVA2_HWACCEL 0 #define CONFIG_WMV3_VAAPI_HWACCEL 0 #define CONFIG_WMV3_VDPAU_HWACCEL 0 #define CONFIG_ALSA_INDEV 0 #define CONFIG_AVFOUNDATION_INDEV 0 #define CONFIG_BKTR_INDEV 0 #define CONFIG_DECKLINK_INDEV 0 #define CONFIG_DSHOW_INDEV 0 #define CONFIG_DV1394_INDEV 0 #define CONFIG_FBDEV_INDEV 0 #define CONFIG_GDIGRAB_INDEV 0 #define CONFIG_IEC61883_INDEV 0 #define CONFIG_JACK_INDEV 0 #define CONFIG_LAVFI_INDEV 0 #define CONFIG_OPENAL_INDEV 0 #define CONFIG_OSS_INDEV 0 #define CONFIG_PULSE_INDEV 0 #define CONFIG_QTKIT_INDEV 0 #define CONFIG_SNDIO_INDEV 0 #define CONFIG_V4L2_INDEV 0 #define CONFIG_VFWCAP_INDEV 0 #define CONFIG_X11GRAB_INDEV 0 #define CONFIG_X11GRAB_XCB_INDEV 0 #define CONFIG_LIBCDIO_INDEV 0 #define CONFIG_LIBDC1394_INDEV 0 #define CONFIG_A64_MUXER 0 #define CONFIG_AC3_MUXER 0 #define CONFIG_ADTS_MUXER 0 #define CONFIG_ADX_MUXER 0 #define CONFIG_AIFF_MUXER 0 #define CONFIG_AMR_MUXER 0 #define CONFIG_APNG_MUXER 0 #define CONFIG_ASF_MUXER 0 #define CONFIG_ASS_MUXER 0 #define CONFIG_AST_MUXER 0 #define CONFIG_ASF_STREAM_MUXER 0 #define CONFIG_AU_MUXER 0 #define CONFIG_AVI_MUXER 0 #define CONFIG_AVM2_MUXER 0 #define CONFIG_BIT_MUXER 0 #define CONFIG_CAF_MUXER 0 #define CONFIG_CAVSVIDEO_MUXER 0 #define CONFIG_CRC_MUXER 0 #define CONFIG_DASH_MUXER 0 #define CONFIG_DATA_MUXER 0 #define CONFIG_DAUD_MUXER 0 #define CONFIG_DIRAC_MUXER 0 #define CONFIG_DNXHD_MUXER 0 #define CONFIG_DTS_MUXER 0 #define CONFIG_DV_MUXER 0 #define CONFIG_EAC3_MUXER 0 #define CONFIG_F4V_MUXER 0 #define CONFIG_FFM_MUXER 0 #define CONFIG_FFMETADATA_MUXER 0 #define CONFIG_FIFO_MUXER 0 #define CONFIG_FILMSTRIP_MUXER 0 #define CONFIG_FLAC_MUXER 0 #define CONFIG_FLV_MUXER 0 #define CONFIG_FRAMECRC_MUXER 0 #define CONFIG_FRAMEHASH_MUXER 0 #define CONFIG_FRAMEMD5_MUXER 0 #define CONFIG_G722_MUXER 0 #define CONFIG_G723_1_MUXER 0 #define CONFIG_GIF_MUXER 0 #define CONFIG_GSM_MUXER 0 #define CONFIG_GXF_MUXER 0 #define CONFIG_H261_MUXER 0 #define CONFIG_H263_MUXER 0 #define CONFIG_H264_MUXER 0 #define CONFIG_HASH_MUXER 0 #define CONFIG_HDS_MUXER 0 #define CONFIG_HEVC_MUXER 0 #define CONFIG_HLS_MUXER 0 #define CONFIG_ICO_MUXER 0 #define CONFIG_ILBC_MUXER 0 #define CONFIG_IMAGE2_MUXER 0 #define CONFIG_IMAGE2PIPE_MUXER 0 #define CONFIG_IPOD_MUXER 0 #define CONFIG_IRCAM_MUXER 0 #define CONFIG_ISMV_MUXER 0 #define CONFIG_IVF_MUXER 0 #define CONFIG_JACOSUB_MUXER 0 #define CONFIG_LATM_MUXER 0 #define CONFIG_LRC_MUXER 0 #define CONFIG_M4V_MUXER 0 #define CONFIG_MD5_MUXER 0 #define CONFIG_MATROSKA_MUXER 0 #define CONFIG_MATROSKA_AUDIO_MUXER 0 #define CONFIG_MICRODVD_MUXER 0 #define CONFIG_MJPEG_MUXER 0 #define CONFIG_MLP_MUXER 0 #define CONFIG_MMF_MUXER 0 #define CONFIG_MOV_MUXER 1 #define CONFIG_MP2_MUXER 0 #define CONFIG_MP3_MUXER 0 #define CONFIG_MP4_MUXER 1 #define CONFIG_MPEG1SYSTEM_MUXER 0 #define CONFIG_MPEG1VCD_MUXER 0 #define CONFIG_MPEG1VIDEO_MUXER 0 #define CONFIG_MPEG2DVD_MUXER 0 #define CONFIG_MPEG2SVCD_MUXER 0 #define CONFIG_MPEG2VIDEO_MUXER 0 #define CONFIG_MPEG2VOB_MUXER 0 #define CONFIG_MPEGTS_MUXER 0 #define CONFIG_MPJPEG_MUXER 0 #define CONFIG_MXF_MUXER 0 #define CONFIG_MXF_D10_MUXER 0 #define CONFIG_MXF_OPATOM_MUXER 0 #define CONFIG_NULL_MUXER 0 #define CONFIG_NUT_MUXER 0 #define CONFIG_OGA_MUXER 0 #define CONFIG_OGG_MUXER 0 #define CONFIG_OGV_MUXER 0 #define CONFIG_OMA_MUXER 0 #define CONFIG_OPUS_MUXER 0 #define CONFIG_PCM_ALAW_MUXER 0 #define CONFIG_PCM_MULAW_MUXER 0 #define CONFIG_PCM_F64BE_MUXER 0 #define CONFIG_PCM_F64LE_MUXER 0 #define CONFIG_PCM_F32BE_MUXER 0 #define CONFIG_PCM_F32LE_MUXER 0 #define CONFIG_PCM_S32BE_MUXER 0 #define CONFIG_PCM_S32LE_MUXER 0 #define CONFIG_PCM_S24BE_MUXER 0 #define CONFIG_PCM_S24LE_MUXER 0 #define CONFIG_PCM_S16BE_MUXER 0 #define CONFIG_PCM_S16LE_MUXER 0 #define CONFIG_PCM_S8_MUXER 0 #define CONFIG_PCM_U32BE_MUXER 0 #define CONFIG_PCM_U32LE_MUXER 0 #define CONFIG_PCM_U24BE_MUXER 0 #define CONFIG_PCM_U24LE_MUXER 0 #define CONFIG_PCM_U16BE_MUXER 0 #define CONFIG_PCM_U16LE_MUXER 0 #define CONFIG_PCM_U8_MUXER 0 #define CONFIG_PSP_MUXER 0 #define CONFIG_RAWVIDEO_MUXER 0 #define CONFIG_RM_MUXER 0 #define CONFIG_ROQ_MUXER 0 #define CONFIG_RSO_MUXER 0 #define CONFIG_RTP_MUXER 0 #define CONFIG_RTP_MPEGTS_MUXER 0 #define CONFIG_RTSP_MUXER 0 #define CONFIG_SAP_MUXER 0 #define CONFIG_SEGMENT_MUXER 0 #define CONFIG_STREAM_SEGMENT_MUXER 0 #define CONFIG_SINGLEJPEG_MUXER 0 #define CONFIG_SMJPEG_MUXER 0 #define CONFIG_SMOOTHSTREAMING_MUXER 0 #define CONFIG_SOX_MUXER 0 #define CONFIG_SPX_MUXER 0 #define CONFIG_SPDIF_MUXER 0 #define CONFIG_SRT_MUXER 0 #define CONFIG_SWF_MUXER 0 #define CONFIG_TEE_MUXER 0 #define CONFIG_TG2_MUXER 0 #define CONFIG_TGP_MUXER 0 #define CONFIG_MKVTIMESTAMP_V2_MUXER 0 #define CONFIG_TRUEHD_MUXER 0 #define CONFIG_TTA_MUXER 0 #define CONFIG_UNCODEDFRAMECRC_MUXER 0 #define CONFIG_VC1_MUXER 0 #define CONFIG_VC1T_MUXER 0 #define CONFIG_VOC_MUXER 0 #define CONFIG_W64_MUXER 0 #define CONFIG_WAV_MUXER 0 #define CONFIG_WEBM_MUXER 0 #define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 #define CONFIG_WEBM_CHUNK_MUXER 0 #define CONFIG_WEBP_MUXER 0 #define CONFIG_WEBVTT_MUXER 0 #define CONFIG_WTV_MUXER 0 #define CONFIG_WV_MUXER 0 #define CONFIG_YUV4MPEGPIPE_MUXER 0 #define CONFIG_CHROMAPRINT_MUXER 0 #define CONFIG_LIBNUT_MUXER 0 #define CONFIG_ALSA_OUTDEV 0 #define CONFIG_CACA_OUTDEV 0 #define CONFIG_DECKLINK_OUTDEV 0 #define CONFIG_FBDEV_OUTDEV 0 #define CONFIG_OPENGL_OUTDEV 0 #define CONFIG_OSS_OUTDEV 0 #define CONFIG_PULSE_OUTDEV 0 #define CONFIG_SDL2_OUTDEV 0 #define CONFIG_SNDIO_OUTDEV 0 #define CONFIG_V4L2_OUTDEV 0 #define CONFIG_XV_OUTDEV 0 #define CONFIG_AAC_PARSER 1 #define CONFIG_AAC_LATM_PARSER 1 #define CONFIG_AC3_PARSER 0 #define CONFIG_ADX_PARSER 0 #define CONFIG_BMP_PARSER 0 #define CONFIG_CAVSVIDEO_PARSER 0 #define CONFIG_COOK_PARSER 0 #define CONFIG_DCA_PARSER 0 #define CONFIG_DIRAC_PARSER 0 #define CONFIG_DNXHD_PARSER 0 #define CONFIG_DPX_PARSER 0 #define CONFIG_DVAUDIO_PARSER 0 #define CONFIG_DVBSUB_PARSER 0 #define CONFIG_DVDSUB_PARSER 0 #define CONFIG_DVD_NAV_PARSER 0 #define CONFIG_FLAC_PARSER 0 #define CONFIG_G729_PARSER 0 #define CONFIG_GSM_PARSER 0 #define CONFIG_H261_PARSER 0 #define CONFIG_H263_PARSER 1 #define CONFIG_H264_PARSER 1 #define CONFIG_HEVC_PARSER 0 #define CONFIG_MJPEG_PARSER 0 #define CONFIG_MLP_PARSER 0 #define CONFIG_MPEG4VIDEO_PARSER 0 #define CONFIG_MPEGAUDIO_PARSER 1 #define CONFIG_MPEGVIDEO_PARSER 0 #define CONFIG_OPUS_PARSER 0 #define CONFIG_PNG_PARSER 0 #define CONFIG_PNM_PARSER 0 #define CONFIG_RV30_PARSER 0 #define CONFIG_RV40_PARSER 0 #define CONFIG_TAK_PARSER 0 #define CONFIG_VC1_PARSER 0 #define CONFIG_VORBIS_PARSER 0 #define CONFIG_VP3_PARSER 0 #define CONFIG_VP8_PARSER 0 #define CONFIG_VP9_PARSER 0 #define CONFIG_ASYNC_PROTOCOL 1 #define CONFIG_BLURAY_PROTOCOL 0 #define CONFIG_CACHE_PROTOCOL 1 #define CONFIG_CONCAT_PROTOCOL 0 #define CONFIG_CRYPTO_PROTOCOL 0 #define CONFIG_DATA_PROTOCOL 1 #define CONFIG_FFRTMPCRYPT_PROTOCOL 0 #define CONFIG_FFRTMPHTTP_PROTOCOL 1 #define CONFIG_FILE_PROTOCOL 1 #define CONFIG_FTP_PROTOCOL 1 #define CONFIG_GOPHER_PROTOCOL 0 #define CONFIG_HLS_PROTOCOL 1 #define CONFIG_HTTP_PROTOCOL 1 #define CONFIG_HTTPPROXY_PROTOCOL 1 #define CONFIG_HTTPS_PROTOCOL 1 #define CONFIG_ICECAST_PROTOCOL 0 #define CONFIG_IJKHTTPHOOK_PROTOCOL 1 #define CONFIG_IJKLONGURL_PROTOCOL 1 #define CONFIG_IJKMEDIADATASOURCE_PROTOCOL 1 #define CONFIG_IJKSEGMENT_PROTOCOL 1 #define CONFIG_IJKTCPHOOK_PROTOCOL 1 #define CONFIG_IJKIO_PROTOCOL 1 #define CONFIG_MMSH_PROTOCOL 0 #define CONFIG_MMST_PROTOCOL 0 #define CONFIG_MD5_PROTOCOL 0 #define CONFIG_PIPE_PROTOCOL 1 #define CONFIG_RTMP_PROTOCOL 1 #define CONFIG_RTMPE_PROTOCOL 0 #define CONFIG_RTMPS_PROTOCOL 0 #define CONFIG_RTMPT_PROTOCOL 1 #define CONFIG_RTMPTE_PROTOCOL 0 #define CONFIG_RTMPTS_PROTOCOL 0 #define CONFIG_RTP_PROTOCOL 0 #define CONFIG_SCTP_PROTOCOL 0 #define CONFIG_SRTP_PROTOCOL 0 #define CONFIG_SUBFILE_PROTOCOL 0 #define CONFIG_TEE_PROTOCOL 1 #define CONFIG_TCP_PROTOCOL 1 #define CONFIG_TLS_GNUTLS_PROTOCOL 0 #define CONFIG_TLS_SCHANNEL_PROTOCOL 0 #define CONFIG_TLS_SECURETRANSPORT_PROTOCOL 0 #define CONFIG_TLS_OPENSSL_PROTOCOL 1 #define CONFIG_UDP_PROTOCOL 1 #define CONFIG_UDPLITE_PROTOCOL 1 #define CONFIG_UNIX_PROTOCOL 0 #define CONFIG_LIBRTMP_PROTOCOL 0 #define CONFIG_LIBRTMPE_PROTOCOL 0 #define CONFIG_LIBRTMPS_PROTOCOL 0 #define CONFIG_LIBRTMPT_PROTOCOL 0 #define CONFIG_LIBRTMPTE_PROTOCOL 0 #define CONFIG_LIBSSH_PROTOCOL 0 #define CONFIG_LIBSMBCLIENT_PROTOCOL 0 #endif /* FFMPEG_CONFIG_H */ ================================================ FILE: 3rParty/FFmpeg/include/libffmpeg/armv7/config.h ================================================ /* Automatically generated by configure - do not modify! */ #ifndef FFMPEG_CONFIG_H #define FFMPEG_CONFIG_H #define FFMPEG_CONFIGURATION "--disable-gpl --disable-nonfree --enable-runtime-cpudetect --disable-gray --disable-swscale-alpha --disable-programs --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-avdevice --enable-avcodec --enable-avformat --enable-avutil --enable-swresample --enable-swscale --disable-postproc --enable-avfilter --disable-avresample --enable-network --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --disable-encoders --disable-decoders --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=flv --enable-decoder=h264 --enable-decoder='mp3*' --enable-decoder=vp6f --disable-hwaccels --disable-muxers --enable-muxer=mp4 --disable-demuxers --enable-demuxer=aac --enable-demuxer=concat --enable-demuxer=data --enable-demuxer=flv --enable-demuxer=hls --enable-demuxer=live_flv --enable-demuxer=mov --enable-demuxer=mp3 --enable-demuxer=mpegps --enable-demuxer=mpegts --enable-demuxer=mpegvideo --disable-parsers --enable-parser=aac --enable-parser=aac_latm --enable-parser=h264 --enable-bsfs --disable-bsf=chomp --disable-bsf=dca_core --disable-bsf=dump_extradata --disable-bsf=hevc_mp4toannexb --disable-bsf=imx_dump_header --disable-bsf=mjpeg2jpeg --disable-bsf=mjpega_dump_header --disable-bsf=mov2textsub --disable-bsf=mp3_header_decompress --disable-bsf=mpeg4_unpack_bframes --disable-bsf=noise --disable-bsf=remove_extradata --disable-bsf=text2movsub --disable-bsf=vp9_superframe --enable-protocols --enable-protocol=async --disable-protocol=bluray --disable-protocol=concat --disable-protocol=crypto --disable-protocol=ffrtmpcrypt --enable-protocol=ffrtmphttp --disable-protocol=gopher --disable-protocol=icecast --disable-protocol='librtmp*' --disable-protocol=libssh --disable-protocol=md5 --disable-protocol=mmsh --disable-protocol=mmst --disable-protocol='rtmp*' --enable-protocol=rtmp --enable-protocol=rtmpt --disable-protocol=rtp --disable-protocol=sctp --disable-protocol=srtp --disable-protocol=subfile --disable-protocol=unix --disable-devices --disable-filters --disable-iconv --disable-audiotoolbox --disable-videotoolbox --enable-cross-compile --disable-stripping --arch=armv7 --target-os=darwin --enable-static --disable-shared --enable-pic --enable-neon --enable-optimizations --enable-debug --enable-small --prefix=/Users/lhl/Downloads/ijkplayer-master/ios/build/ffmpeg-armv7/output --enable-openssl --cc='xcrun -sdk iphoneos clang' --extra-cflags=' -arch armv7 -miphoneos-version-min=6.0 -fembed-bitcode -I/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-armv7/output/include' --extra-cxxflags=' -arch armv7 -miphoneos-version-min=6.0 -fembed-bitcode -I/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-armv7/output/include' --extra-ldflags=' -arch armv7 -miphoneos-version-min=6.0 -fembed-bitcode -arch armv7 -miphoneos-version-min=6.0 -fembed-bitcode -I/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-armv7/output/include -L/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-armv7/output/lib -lssl -lcrypto'" #define FFMPEG_LICENSE "LGPL version 2.1 or later" #define CONFIG_THIS_YEAR 2016 #define FFMPEG_DATADIR "/Users/lhl/Downloads/ijkplayer-master/ios/build/ffmpeg-armv7/output/share/ffmpeg" #define AVCONV_DATADIR "/Users/lhl/Downloads/ijkplayer-master/ios/build/ffmpeg-armv7/output/share/ffmpeg" #define CC_IDENT "Apple LLVM version 8.0.0 (clang-800.0.42.1)" #define av_restrict restrict #define EXTERN_PREFIX "_" #define EXTERN_ASM _ #define BUILDSUF "" #define SLIBSUF ".dylib" #define HAVE_MMX2 HAVE_MMXEXT #define SWS_MAX_FILTER_SIZE 256 #define ARCH_AARCH64 0 #define ARCH_ALPHA 0 #define ARCH_ARM 1 #define ARCH_AVR32 0 #define ARCH_AVR32_AP 0 #define ARCH_AVR32_UC 0 #define ARCH_BFIN 0 #define ARCH_IA64 0 #define ARCH_M68K 0 #define ARCH_MIPS 0 #define ARCH_MIPS64 0 #define ARCH_PARISC 0 #define ARCH_PPC 0 #define ARCH_PPC64 0 #define ARCH_S390 0 #define ARCH_SH4 0 #define ARCH_SPARC 0 #define ARCH_SPARC64 0 #define ARCH_TILEGX 0 #define ARCH_TILEPRO 0 #define ARCH_TOMI 0 #define ARCH_X86 0 #define ARCH_X86_32 0 #define ARCH_X86_64 0 #define HAVE_ARMV5TE 1 #define HAVE_ARMV6 1 #define HAVE_ARMV6T2 1 #define HAVE_ARMV8 0 #define HAVE_NEON 1 #define HAVE_VFP 1 #define HAVE_VFPV3 1 #define HAVE_SETEND 1 #define HAVE_ALTIVEC 0 #define HAVE_DCBZL 0 #define HAVE_LDBRX 0 #define HAVE_POWER8 0 #define HAVE_PPC4XX 0 #define HAVE_VSX 0 #define HAVE_AESNI 0 #define HAVE_AMD3DNOW 0 #define HAVE_AMD3DNOWEXT 0 #define HAVE_AVX 0 #define HAVE_AVX2 0 #define HAVE_FMA3 0 #define HAVE_FMA4 0 #define HAVE_MMX 0 #define HAVE_MMXEXT 0 #define HAVE_SSE 0 #define HAVE_SSE2 0 #define HAVE_SSE3 0 #define HAVE_SSE4 0 #define HAVE_SSE42 0 #define HAVE_SSSE3 0 #define HAVE_XOP 0 #define HAVE_CPUNOP 0 #define HAVE_I686 0 #define HAVE_MIPSFPU 0 #define HAVE_MIPS32R2 0 #define HAVE_MIPS32R5 0 #define HAVE_MIPS64R2 0 #define HAVE_MIPS32R6 0 #define HAVE_MIPS64R6 0 #define HAVE_MIPSDSP 0 #define HAVE_MIPSDSPR2 0 #define HAVE_MSA 0 #define HAVE_LOONGSON2 0 #define HAVE_LOONGSON3 0 #define HAVE_MMI 0 #define HAVE_ARMV5TE_EXTERNAL 1 #define HAVE_ARMV6_EXTERNAL 1 #define HAVE_ARMV6T2_EXTERNAL 1 #define HAVE_ARMV8_EXTERNAL 0 #define HAVE_NEON_EXTERNAL 1 #define HAVE_VFP_EXTERNAL 1 #define HAVE_VFPV3_EXTERNAL 1 #define HAVE_SETEND_EXTERNAL 1 #define HAVE_ALTIVEC_EXTERNAL 0 #define HAVE_DCBZL_EXTERNAL 0 #define HAVE_LDBRX_EXTERNAL 0 #define HAVE_POWER8_EXTERNAL 0 #define HAVE_PPC4XX_EXTERNAL 0 #define HAVE_VSX_EXTERNAL 0 #define HAVE_AESNI_EXTERNAL 0 #define HAVE_AMD3DNOW_EXTERNAL 0 #define HAVE_AMD3DNOWEXT_EXTERNAL 0 #define HAVE_AVX_EXTERNAL 0 #define HAVE_AVX2_EXTERNAL 0 #define HAVE_FMA3_EXTERNAL 0 #define HAVE_FMA4_EXTERNAL 0 #define HAVE_MMX_EXTERNAL 0 #define HAVE_MMXEXT_EXTERNAL 0 #define HAVE_SSE_EXTERNAL 0 #define HAVE_SSE2_EXTERNAL 0 #define HAVE_SSE3_EXTERNAL 0 #define HAVE_SSE4_EXTERNAL 0 #define HAVE_SSE42_EXTERNAL 0 #define HAVE_SSSE3_EXTERNAL 0 #define HAVE_XOP_EXTERNAL 0 #define HAVE_CPUNOP_EXTERNAL 0 #define HAVE_I686_EXTERNAL 0 #define HAVE_MIPSFPU_EXTERNAL 0 #define HAVE_MIPS32R2_EXTERNAL 0 #define HAVE_MIPS32R5_EXTERNAL 0 #define HAVE_MIPS64R2_EXTERNAL 0 #define HAVE_MIPS32R6_EXTERNAL 0 #define HAVE_MIPS64R6_EXTERNAL 0 #define HAVE_MIPSDSP_EXTERNAL 0 #define HAVE_MIPSDSPR2_EXTERNAL 0 #define HAVE_MSA_EXTERNAL 0 #define HAVE_LOONGSON2_EXTERNAL 0 #define HAVE_LOONGSON3_EXTERNAL 0 #define HAVE_MMI_EXTERNAL 0 #define HAVE_ARMV5TE_INLINE 1 #define HAVE_ARMV6_INLINE 1 #define HAVE_ARMV6T2_INLINE 1 #define HAVE_ARMV8_INLINE 0 #define HAVE_NEON_INLINE 1 #define HAVE_VFP_INLINE 1 #define HAVE_VFPV3_INLINE 1 #define HAVE_SETEND_INLINE 1 #define HAVE_ALTIVEC_INLINE 0 #define HAVE_DCBZL_INLINE 0 #define HAVE_LDBRX_INLINE 0 #define HAVE_POWER8_INLINE 0 #define HAVE_PPC4XX_INLINE 0 #define HAVE_VSX_INLINE 0 #define HAVE_AESNI_INLINE 0 #define HAVE_AMD3DNOW_INLINE 0 #define HAVE_AMD3DNOWEXT_INLINE 0 #define HAVE_AVX_INLINE 0 #define HAVE_AVX2_INLINE 0 #define HAVE_FMA3_INLINE 0 #define HAVE_FMA4_INLINE 0 #define HAVE_MMX_INLINE 0 #define HAVE_MMXEXT_INLINE 0 #define HAVE_SSE_INLINE 0 #define HAVE_SSE2_INLINE 0 #define HAVE_SSE3_INLINE 0 #define HAVE_SSE4_INLINE 0 #define HAVE_SSE42_INLINE 0 #define HAVE_SSSE3_INLINE 0 #define HAVE_XOP_INLINE 0 #define HAVE_CPUNOP_INLINE 0 #define HAVE_I686_INLINE 0 #define HAVE_MIPSFPU_INLINE 0 #define HAVE_MIPS32R2_INLINE 0 #define HAVE_MIPS32R5_INLINE 0 #define HAVE_MIPS64R2_INLINE 0 #define HAVE_MIPS32R6_INLINE 0 #define HAVE_MIPS64R6_INLINE 0 #define HAVE_MIPSDSP_INLINE 0 #define HAVE_MIPSDSPR2_INLINE 0 #define HAVE_MSA_INLINE 0 #define HAVE_LOONGSON2_INLINE 0 #define HAVE_LOONGSON3_INLINE 0 #define HAVE_MMI_INLINE 0 #define HAVE_ALIGNED_STACK 0 #define HAVE_FAST_64BIT 0 #define HAVE_FAST_CLZ 1 #define HAVE_FAST_CMOV 0 #define HAVE_LOCAL_ALIGNED_8 0 #define HAVE_LOCAL_ALIGNED_16 0 #define HAVE_LOCAL_ALIGNED_32 0 #define HAVE_SIMD_ALIGN_16 1 #define HAVE_ATOMICS_GCC 1 #define HAVE_ATOMICS_SUNCC 0 #define HAVE_ATOMICS_WIN32 0 #define HAVE_ATOMIC_CAS_PTR 0 #define HAVE_ATOMIC_COMPARE_EXCHANGE 1 #define HAVE_MACHINE_RW_BARRIER 0 #define HAVE_MEMORYBARRIER 0 #define HAVE_MM_EMPTY 0 #define HAVE_RDTSC 0 #define HAVE_SARESTART 1 #define HAVE_SEM_TIMEDWAIT 0 #define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 #define HAVE_CABS 1 #define HAVE_CEXP 1 #define HAVE_INLINE_ASM 1 #define HAVE_SYMVER 1 #define HAVE_YASM 0 #define HAVE_BIGENDIAN 0 #define HAVE_FAST_UNALIGNED 1 #define HAVE_ALSA_ASOUNDLIB_H 0 #define HAVE_ALTIVEC_H 0 #define HAVE_ARPA_INET_H 1 #define HAVE_ASM_TYPES_H 0 #define HAVE_CDIO_PARANOIA_H 0 #define HAVE_CDIO_PARANOIA_PARANOIA_H 0 #define HAVE_DISPATCH_DISPATCH_H 1 #define HAVE_DEV_BKTR_IOCTL_BT848_H 0 #define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 #define HAVE_DEV_IC_BT8XX_H 0 #define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 #define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 #define HAVE_DIRECT_H 0 #define HAVE_DIRENT_H 1 #define HAVE_DLFCN_H 1 #define HAVE_D3D11_H 0 #define HAVE_DXVA_H 0 #define HAVE_ES2_GL_H 0 #define HAVE_GSM_H 0 #define HAVE_IO_H 0 #define HAVE_MACH_MACH_TIME_H 1 #define HAVE_MACHINE_IOCTL_BT848_H 0 #define HAVE_MACHINE_IOCTL_METEOR_H 0 #define HAVE_MALLOC_H 0 #define HAVE_OPENCV2_CORE_CORE_C_H 0 #define HAVE_OPENJPEG_2_1_OPENJPEG_H 0 #define HAVE_OPENJPEG_2_0_OPENJPEG_H 0 #define HAVE_OPENJPEG_1_5_OPENJPEG_H 0 #define HAVE_OPENGL_GL3_H 0 #define HAVE_POLL_H 1 #define HAVE_SNDIO_H 0 #define HAVE_SOUNDCARD_H 0 #define HAVE_SYS_MMAN_H 1 #define HAVE_SYS_PARAM_H 1 #define HAVE_SYS_RESOURCE_H 1 #define HAVE_SYS_SELECT_H 1 #define HAVE_SYS_SOUNDCARD_H 0 #define HAVE_SYS_TIME_H 1 #define HAVE_SYS_UN_H 1 #define HAVE_SYS_VIDEOIO_H 0 #define HAVE_TERMIOS_H 1 #define HAVE_UDPLITE_H 0 #define HAVE_UNISTD_H 1 #define HAVE_VALGRIND_VALGRIND_H 0 #define HAVE_WINDOWS_H 0 #define HAVE_WINSOCK2_H 0 #define HAVE_INTRINSICS_NEON 1 #define HAVE_ATANF 1 #define HAVE_ATAN2F 1 #define HAVE_CBRT 1 #define HAVE_CBRTF 1 #define HAVE_COPYSIGN 1 #define HAVE_COSF 1 #define HAVE_ERF 1 #define HAVE_EXP2 1 #define HAVE_EXP2F 1 #define HAVE_EXPF 1 #define HAVE_HYPOT 1 #define HAVE_ISFINITE 1 #define HAVE_ISINF 1 #define HAVE_ISNAN 1 #define HAVE_LDEXPF 1 #define HAVE_LLRINT 1 #define HAVE_LLRINTF 1 #define HAVE_LOG2 1 #define HAVE_LOG2F 1 #define HAVE_LOG10F 1 #define HAVE_LRINT 1 #define HAVE_LRINTF 1 #define HAVE_POWF 1 #define HAVE_RINT 1 #define HAVE_ROUND 1 #define HAVE_ROUNDF 1 #define HAVE_SINF 1 #define HAVE_TRUNC 1 #define HAVE_TRUNCF 1 #define HAVE_ACCESS 1 #define HAVE_ALIGNED_MALLOC 0 #define HAVE_ARC4RANDOM 1 #define HAVE_CLOCK_GETTIME 1 #define HAVE_CLOSESOCKET 0 #define HAVE_COMMANDLINETOARGVW 0 #define HAVE_COTASKMEMFREE 0 #define HAVE_CRYPTGENRANDOM 0 #define HAVE_DLOPEN 1 #define HAVE_FCNTL 1 #define HAVE_FLT_LIM 1 #define HAVE_FORK 1 #define HAVE_GETADDRINFO 1 #define HAVE_GETHRTIME 0 #define HAVE_GETOPT 1 #define HAVE_GETPROCESSAFFINITYMASK 0 #define HAVE_GETPROCESSMEMORYINFO 0 #define HAVE_GETPROCESSTIMES 0 #define HAVE_GETRUSAGE 1 #define HAVE_GETSYSTEMTIMEASFILETIME 0 #define HAVE_GETTIMEOFDAY 1 #define HAVE_GLOB 1 #define HAVE_GLXGETPROCADDRESS 0 #define HAVE_GMTIME_R 1 #define HAVE_INET_ATON 1 #define HAVE_ISATTY 1 #define HAVE_JACK_PORT_GET_LATENCY_RANGE 0 #define HAVE_KBHIT 0 #define HAVE_LOADLIBRARY 0 #define HAVE_LOCALTIME_R 1 #define HAVE_LSTAT 1 #define HAVE_LZO1X_999_COMPRESS 0 #define HAVE_MACH_ABSOLUTE_TIME 1 #define HAVE_MAPVIEWOFFILE 0 #define HAVE_MEMALIGN 0 #define HAVE_MKSTEMP 1 #define HAVE_MMAP 1 #define HAVE_MPROTECT 1 #define HAVE_NANOSLEEP 1 #define HAVE_PEEKNAMEDPIPE 0 #define HAVE_POSIX_MEMALIGN 1 #define HAVE_PTHREAD_CANCEL 1 #define HAVE_SCHED_GETAFFINITY 0 #define HAVE_SETCONSOLETEXTATTRIBUTE 0 #define HAVE_SETCONSOLECTRLHANDLER 0 #define HAVE_SETMODE 0 #define HAVE_SETRLIMIT 1 #define HAVE_SLEEP 0 #define HAVE_STRERROR_R 1 #define HAVE_SYSCONF 1 #define HAVE_SYSCTL 1 #define HAVE_USLEEP 1 #define HAVE_UTGETOSTYPEFROMSTRING 0 #define HAVE_VIRTUALALLOC 0 #define HAVE_WGLGETPROCADDRESS 0 #define HAVE_PTHREADS 1 #define HAVE_OS2THREADS 0 #define HAVE_W32THREADS 0 #define HAVE_AS_DN_DIRECTIVE 1 #define HAVE_AS_FUNC 1 #define HAVE_AS_OBJECT_ARCH 0 #define HAVE_ASM_MOD_Q 1 #define HAVE_ATTRIBUTE_MAY_ALIAS 1 #define HAVE_ATTRIBUTE_PACKED 1 #define HAVE_EBP_AVAILABLE 0 #define HAVE_EBX_AVAILABLE 0 #define HAVE_GNU_AS 1 #define HAVE_GNU_WINDRES 0 #define HAVE_IBM_ASM 0 #define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0 #define HAVE_INLINE_ASM_LABELS 1 #define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 #define HAVE_PRAGMA_DEPRECATED 1 #define HAVE_RSYNC_CONTIMEOUT 0 #define HAVE_SYMVER_ASM_LABEL 1 #define HAVE_SYMVER_GNU_ASM 0 #define HAVE_VFP_ARGS 0 #define HAVE_XFORM_ASM 0 #define HAVE_XMM_CLOBBERS 0 #define HAVE_CONDITION_VARIABLE_PTR 0 #define HAVE_SOCKLEN_T 1 #define HAVE_STRUCT_ADDRINFO 1 #define HAVE_STRUCT_GROUP_SOURCE_REQ 1 #define HAVE_STRUCT_IP_MREQ_SOURCE 1 #define HAVE_STRUCT_IPV6_MREQ 1 #define HAVE_STRUCT_MSGHDR_MSG_FLAGS 1 #define HAVE_STRUCT_POLLFD 1 #define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1 #define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 #define HAVE_STRUCT_SOCKADDR_IN6 1 #define HAVE_STRUCT_SOCKADDR_SA_LEN 1 #define HAVE_STRUCT_SOCKADDR_STORAGE 1 #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 #define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 #define HAVE_ATOMICS_NATIVE 1 #define HAVE_DOS_PATHS 0 #define HAVE_DXVA2_LIB 0 #define HAVE_DXVA2API_COBJ 0 #define HAVE_LIBC_MSVCRT 0 #define HAVE_LIBDC1394_1 0 #define HAVE_LIBDC1394_2 0 #define HAVE_MAKEINFO 1 #define HAVE_MAKEINFO_HTML 0 #define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 #define HAVE_PERL 1 #define HAVE_POD2MAN 1 #define HAVE_SDL2 0 #define HAVE_SECTION_DATA_REL_RO 0 #define HAVE_TEXI2HTML 0 #define HAVE_THREADS 1 #define HAVE_VAAPI_DRM 0 #define HAVE_VAAPI_X11 0 #define HAVE_VDPAU_X11 0 #define HAVE_WINRT 0 #define HAVE_XLIB 0 #define CONFIG_BSFS 1 #define CONFIG_DECODERS 1 #define CONFIG_ENCODERS 0 #define CONFIG_HWACCELS 0 #define CONFIG_PARSERS 1 #define CONFIG_INDEVS 0 #define CONFIG_OUTDEVS 0 #define CONFIG_FILTERS 0 #define CONFIG_DEMUXERS 1 #define CONFIG_MUXERS 1 #define CONFIG_PROTOCOLS 1 #define CONFIG_DOC 0 #define CONFIG_HTMLPAGES 0 #define CONFIG_MANPAGES 0 #define CONFIG_PODPAGES 0 #define CONFIG_TXTPAGES 0 #define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 #define CONFIG_AVIO_READING_EXAMPLE 1 #define CONFIG_DECODING_ENCODING_EXAMPLE 1 #define CONFIG_DEMUXING_DECODING_EXAMPLE 1 #define CONFIG_EXTRACT_MVS_EXAMPLE 1 #define CONFIG_FILTER_AUDIO_EXAMPLE 1 #define CONFIG_FILTERING_AUDIO_EXAMPLE 1 #define CONFIG_FILTERING_VIDEO_EXAMPLE 1 #define CONFIG_HTTP_MULTICLIENT_EXAMPLE 1 #define CONFIG_METADATA_EXAMPLE 1 #define CONFIG_MUXING_EXAMPLE 1 #define CONFIG_QSVDEC_EXAMPLE 0 #define CONFIG_REMUXING_EXAMPLE 1 #define CONFIG_RESAMPLING_AUDIO_EXAMPLE 1 #define CONFIG_SCALING_VIDEO_EXAMPLE 1 #define CONFIG_TRANSCODE_AAC_EXAMPLE 1 #define CONFIG_TRANSCODING_EXAMPLE 1 #define CONFIG_AVISYNTH 0 #define CONFIG_BZLIB 0 #define CONFIG_CHROMAPRINT 0 #define CONFIG_CRYSTALHD 0 #define CONFIG_DECKLINK 0 #define CONFIG_FREI0R 0 #define CONFIG_GCRYPT 0 #define CONFIG_GMP 0 #define CONFIG_GNUTLS 0 #define CONFIG_ICONV 0 #define CONFIG_JNI 0 #define CONFIG_LADSPA 0 #define CONFIG_LIBASS 0 #define CONFIG_LIBBLURAY 0 #define CONFIG_LIBBS2B 0 #define CONFIG_LIBCACA 0 #define CONFIG_LIBCDIO 0 #define CONFIG_LIBCELT 0 #define CONFIG_LIBDC1394 0 #define CONFIG_LIBEBUR128 0 #define CONFIG_LIBFDK_AAC 0 #define CONFIG_LIBFLITE 0 #define CONFIG_LIBFONTCONFIG 0 #define CONFIG_LIBFREETYPE 0 #define CONFIG_LIBFRIBIDI 0 #define CONFIG_LIBGME 0 #define CONFIG_LIBGSM 0 #define CONFIG_LIBIEC61883 0 #define CONFIG_LIBILBC 0 #define CONFIG_LIBKVAZAAR 0 #define CONFIG_LIBMODPLUG 0 #define CONFIG_LIBMP3LAME 0 #define CONFIG_LIBNUT 0 #define CONFIG_LIBOPENCORE_AMRNB 0 #define CONFIG_LIBOPENCORE_AMRWB 0 #define CONFIG_LIBOPENCV 0 #define CONFIG_LIBOPENH264 0 #define CONFIG_LIBOPENJPEG 0 #define CONFIG_LIBOPENMPT 0 #define CONFIG_LIBOPUS 0 #define CONFIG_LIBPULSE 0 #define CONFIG_LIBRTMP 0 #define CONFIG_LIBRUBBERBAND 0 #define CONFIG_LIBSCHROEDINGER 0 #define CONFIG_LIBSHINE 0 #define CONFIG_LIBSMBCLIENT 0 #define CONFIG_LIBSNAPPY 0 #define CONFIG_LIBSOXR 0 #define CONFIG_LIBSPEEX 0 #define CONFIG_LIBSSH 0 #define CONFIG_LIBTESSERACT 0 #define CONFIG_LIBTHEORA 0 #define CONFIG_LIBTWOLAME 0 #define CONFIG_LIBV4L2 0 #define CONFIG_LIBVIDSTAB 0 #define CONFIG_LIBVO_AMRWBENC 0 #define CONFIG_LIBVORBIS 0 #define CONFIG_LIBVPX 0 #define CONFIG_LIBWAVPACK 0 #define CONFIG_LIBWEBP 0 #define CONFIG_LIBX264 0 #define CONFIG_LIBX265 0 #define CONFIG_LIBXAVS 0 #define CONFIG_LIBXCB 0 #define CONFIG_LIBXCB_SHM 0 #define CONFIG_LIBXCB_SHAPE 0 #define CONFIG_LIBXCB_XFIXES 0 #define CONFIG_LIBXVID 0 #define CONFIG_LIBZIMG 0 #define CONFIG_LIBZMQ 0 #define CONFIG_LIBZVBI 0 #define CONFIG_LZMA 0 #define CONFIG_MEDIACODEC 0 #define CONFIG_NETCDF 0 #define CONFIG_OPENAL 0 #define CONFIG_OPENCL 0 #define CONFIG_OPENGL 0 #define CONFIG_OPENSSL 1 #define CONFIG_SCHANNEL 0 #define CONFIG_SDL 0 #define CONFIG_SDL2 0 #define CONFIG_SECURETRANSPORT 0 #define CONFIG_VIDEOTOOLBOX 0 #define CONFIG_X11GRAB 0 #define CONFIG_XLIB 0 #define CONFIG_ZLIB 1 #define CONFIG_AUDIOTOOLBOX 0 #define CONFIG_CUDA 0 #define CONFIG_CUVID 0 #define CONFIG_D3D11VA 0 #define CONFIG_DXVA2 0 #define CONFIG_LIBMFX 0 #define CONFIG_LIBNPP 0 #define CONFIG_MMAL 0 #define CONFIG_NVENC 0 #define CONFIG_OMX 0 #define CONFIG_VAAPI 0 #define CONFIG_VDA 0 #define CONFIG_VDPAU 0 #define CONFIG_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_XVMC 0 #define CONFIG_FTRAPV 0 #define CONFIG_GRAY 0 #define CONFIG_HARDCODED_TABLES 0 #define CONFIG_OMX_RPI 0 #define CONFIG_RUNTIME_CPUDETECT 1 #define CONFIG_SAFE_BITSTREAM_READER 1 #define CONFIG_SHARED 0 #define CONFIG_SMALL 1 #define CONFIG_STATIC 1 #define CONFIG_SWSCALE_ALPHA 0 #define CONFIG_GPL 0 #define CONFIG_NONFREE 0 #define CONFIG_VERSION3 0 #define CONFIG_AVCODEC 1 #define CONFIG_AVDEVICE 0 #define CONFIG_AVFILTER 1 #define CONFIG_AVFORMAT 1 #define CONFIG_AVRESAMPLE 0 #define CONFIG_AVUTIL 1 #define CONFIG_POSTPROC 0 #define CONFIG_SWRESAMPLE 1 #define CONFIG_SWSCALE 1 #define CONFIG_FFPLAY 0 #define CONFIG_FFPROBE 0 #define CONFIG_FFSERVER 0 #define CONFIG_FFMPEG 0 #define CONFIG_DCT 1 #define CONFIG_DWT 0 #define CONFIG_ERROR_RESILIENCE 1 #define CONFIG_FAAN 1 #define CONFIG_FAST_UNALIGNED 1 #define CONFIG_FFT 1 #define CONFIG_LSP 0 #define CONFIG_LZO 0 #define CONFIG_MDCT 1 #define CONFIG_PIXELUTILS 0 #define CONFIG_NETWORK 1 #define CONFIG_RDFT 1 #define CONFIG_FONTCONFIG 0 #define CONFIG_MEMALIGN_HACK 0 #define CONFIG_MEMORY_POISONING 0 #define CONFIG_NEON_CLOBBER_TEST 0 #define CONFIG_PIC 1 #define CONFIG_POD2MAN 1 #define CONFIG_RAISE_MAJOR 0 #define CONFIG_THUMB 1 #define CONFIG_VALGRIND_BACKTRACE 0 #define CONFIG_XMM_CLOBBER_TEST 0 #define CONFIG_AANDCTTABLES 0 #define CONFIG_AC3DSP 0 #define CONFIG_AUDIO_FRAME_QUEUE 0 #define CONFIG_AUDIODSP 0 #define CONFIG_BLOCKDSP 1 #define CONFIG_BSWAPDSP 0 #define CONFIG_CABAC 1 #define CONFIG_DIRAC_PARSE 0 #define CONFIG_DVPROFILE 0 #define CONFIG_EXIF 0 #define CONFIG_FAANDCT 1 #define CONFIG_FAANIDCT 1 #define CONFIG_FDCTDSP 1 #define CONFIG_FLACDSP 0 #define CONFIG_FMTCONVERT 0 #define CONFIG_FRAME_THREAD_ENCODER 0 #define CONFIG_G722DSP 0 #define CONFIG_GOLOMB 1 #define CONFIG_GPLV3 0 #define CONFIG_H263DSP 1 #define CONFIG_H264CHROMA 1 #define CONFIG_H264DSP 1 #define CONFIG_H264PRED 1 #define CONFIG_H264QPEL 1 #define CONFIG_HPELDSP 1 #define CONFIG_HUFFMAN 1 #define CONFIG_HUFFYUVDSP 0 #define CONFIG_HUFFYUVENCDSP 0 #define CONFIG_IDCTDSP 1 #define CONFIG_IIRFILTER 0 #define CONFIG_IMDCT15 1 #define CONFIG_INTRAX8 0 #define CONFIG_ISO_MEDIA 1 #define CONFIG_IVIDSP 0 #define CONFIG_JPEGTABLES 0 #define CONFIG_LGPLV3 0 #define CONFIG_LIBX262 0 #define CONFIG_LLAUDDSP 0 #define CONFIG_LLVIDDSP 0 #define CONFIG_LPC 0 #define CONFIG_LZF 0 #define CONFIG_ME_CMP 1 #define CONFIG_MPEG_ER 1 #define CONFIG_MPEGAUDIO 1 #define CONFIG_MPEGAUDIODSP 1 #define CONFIG_MPEGVIDEO 1 #define CONFIG_MPEGVIDEOENC 0 #define CONFIG_MSS34DSP 0 #define CONFIG_PIXBLOCKDSP 1 #define CONFIG_QPELDSP 1 #define CONFIG_QSV 0 #define CONFIG_QSVDEC 0 #define CONFIG_QSVENC 0 #define CONFIG_RANGECODER 0 #define CONFIG_RIFFDEC 1 #define CONFIG_RIFFENC 1 #define CONFIG_RTPDEC 0 #define CONFIG_RTPENC_CHAIN 1 #define CONFIG_RV34DSP 0 #define CONFIG_SINEWIN 1 #define CONFIG_SNAPPY 0 #define CONFIG_SRTP 0 #define CONFIG_STARTCODE 1 #define CONFIG_TEXTUREDSP 0 #define CONFIG_TEXTUREDSPENC 0 #define CONFIG_TPELDSP 0 #define CONFIG_VAAPI_ENCODE 0 #define CONFIG_VC1DSP 0 #define CONFIG_VIDEODSP 1 #define CONFIG_VP3DSP 1 #define CONFIG_VP56DSP 1 #define CONFIG_VP8DSP 0 #define CONFIG_VT_BT2020 0 #define CONFIG_WMA_FREQS 0 #define CONFIG_WMV2DSP 0 #define CONFIG_AAC_ADTSTOASC_BSF 1 #define CONFIG_CHOMP_BSF 0 #define CONFIG_DUMP_EXTRADATA_BSF 0 #define CONFIG_DCA_CORE_BSF 0 #define CONFIG_H264_MP4TOANNEXB_BSF 1 #define CONFIG_HEVC_MP4TOANNEXB_BSF 0 #define CONFIG_IMX_DUMP_HEADER_BSF 0 #define CONFIG_MJPEG2JPEG_BSF 0 #define CONFIG_MJPEGA_DUMP_HEADER_BSF 0 #define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0 #define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0 #define CONFIG_MOV2TEXTSUB_BSF 0 #define CONFIG_NOISE_BSF 0 #define CONFIG_REMOVE_EXTRADATA_BSF 0 #define CONFIG_TEXT2MOVSUB_BSF 0 #define CONFIG_VP9_SUPERFRAME_BSF 0 #define CONFIG_AASC_DECODER 0 #define CONFIG_AIC_DECODER 0 #define CONFIG_ALIAS_PIX_DECODER 0 #define CONFIG_AMV_DECODER 0 #define CONFIG_ANM_DECODER 0 #define CONFIG_ANSI_DECODER 0 #define CONFIG_APNG_DECODER 0 #define CONFIG_ASV1_DECODER 0 #define CONFIG_ASV2_DECODER 0 #define CONFIG_AURA_DECODER 0 #define CONFIG_AURA2_DECODER 0 #define CONFIG_AVRP_DECODER 0 #define CONFIG_AVRN_DECODER 0 #define CONFIG_AVS_DECODER 0 #define CONFIG_AVUI_DECODER 0 #define CONFIG_AYUV_DECODER 0 #define CONFIG_BETHSOFTVID_DECODER 0 #define CONFIG_BFI_DECODER 0 #define CONFIG_BINK_DECODER 0 #define CONFIG_BMP_DECODER 0 #define CONFIG_BMV_VIDEO_DECODER 0 #define CONFIG_BRENDER_PIX_DECODER 0 #define CONFIG_C93_DECODER 0 #define CONFIG_CAVS_DECODER 0 #define CONFIG_CDGRAPHICS_DECODER 0 #define CONFIG_CDXL_DECODER 0 #define CONFIG_CFHD_DECODER 0 #define CONFIG_CINEPAK_DECODER 0 #define CONFIG_CLJR_DECODER 0 #define CONFIG_CLLC_DECODER 0 #define CONFIG_COMFORTNOISE_DECODER 0 #define CONFIG_CPIA_DECODER 0 #define CONFIG_CSCD_DECODER 0 #define CONFIG_CYUV_DECODER 0 #define CONFIG_DDS_DECODER 0 #define CONFIG_DFA_DECODER 0 #define CONFIG_DIRAC_DECODER 0 #define CONFIG_DNXHD_DECODER 0 #define CONFIG_DPX_DECODER 0 #define CONFIG_DSICINVIDEO_DECODER 0 #define CONFIG_DVAUDIO_DECODER 0 #define CONFIG_DVVIDEO_DECODER 0 #define CONFIG_DXA_DECODER 0 #define CONFIG_DXTORY_DECODER 0 #define CONFIG_DXV_DECODER 0 #define CONFIG_EACMV_DECODER 0 #define CONFIG_EAMAD_DECODER 0 #define CONFIG_EATGQ_DECODER 0 #define CONFIG_EATGV_DECODER 0 #define CONFIG_EATQI_DECODER 0 #define CONFIG_EIGHTBPS_DECODER 0 #define CONFIG_EIGHTSVX_EXP_DECODER 0 #define CONFIG_EIGHTSVX_FIB_DECODER 0 #define CONFIG_ESCAPE124_DECODER 0 #define CONFIG_ESCAPE130_DECODER 0 #define CONFIG_EXR_DECODER 0 #define CONFIG_FFV1_DECODER 0 #define CONFIG_FFVHUFF_DECODER 0 #define CONFIG_FIC_DECODER 0 #define CONFIG_FLASHSV_DECODER 0 #define CONFIG_FLASHSV2_DECODER 0 #define CONFIG_FLIC_DECODER 0 #define CONFIG_FLV_DECODER 1 #define CONFIG_FOURXM_DECODER 0 #define CONFIG_FRAPS_DECODER 0 #define CONFIG_FRWU_DECODER 0 #define CONFIG_G2M_DECODER 0 #define CONFIG_GIF_DECODER 0 #define CONFIG_H261_DECODER 0 #define CONFIG_H263_DECODER 1 #define CONFIG_H263I_DECODER 0 #define CONFIG_H263P_DECODER 0 #define CONFIG_H264_DECODER 1 #define CONFIG_H264_CRYSTALHD_DECODER 0 #define CONFIG_H264_MEDIACODEC_DECODER 0 #define CONFIG_H264_MMAL_DECODER 0 #define CONFIG_H264_QSV_DECODER 0 #define CONFIG_H264_VDA_DECODER 0 #define CONFIG_H264_VDPAU_DECODER 0 #define CONFIG_HAP_DECODER 0 #define CONFIG_HEVC_DECODER 0 #define CONFIG_HEVC_QSV_DECODER 0 #define CONFIG_HNM4_VIDEO_DECODER 0 #define CONFIG_HQ_HQA_DECODER 0 #define CONFIG_HQX_DECODER 0 #define CONFIG_HUFFYUV_DECODER 0 #define CONFIG_IDCIN_DECODER 0 #define CONFIG_IFF_ILBM_DECODER 0 #define CONFIG_INDEO2_DECODER 0 #define CONFIG_INDEO3_DECODER 0 #define CONFIG_INDEO4_DECODER 0 #define CONFIG_INDEO5_DECODER 0 #define CONFIG_INTERPLAY_VIDEO_DECODER 0 #define CONFIG_JPEG2000_DECODER 0 #define CONFIG_JPEGLS_DECODER 0 #define CONFIG_JV_DECODER 0 #define CONFIG_KGV1_DECODER 0 #define CONFIG_KMVC_DECODER 0 #define CONFIG_LAGARITH_DECODER 0 #define CONFIG_LOCO_DECODER 0 #define CONFIG_M101_DECODER 0 #define CONFIG_MAGICYUV_DECODER 0 #define CONFIG_MDEC_DECODER 0 #define CONFIG_MIMIC_DECODER 0 #define CONFIG_MJPEG_DECODER 0 #define CONFIG_MJPEGB_DECODER 0 #define CONFIG_MMVIDEO_DECODER 0 #define CONFIG_MOTIONPIXELS_DECODER 0 #define CONFIG_MPEG_XVMC_DECODER 0 #define CONFIG_MPEG1VIDEO_DECODER 0 #define CONFIG_MPEG2VIDEO_DECODER 0 #define CONFIG_MPEG4_DECODER 0 #define CONFIG_MPEG4_CRYSTALHD_DECODER 0 #define CONFIG_MPEG4_MMAL_DECODER 0 #define CONFIG_MPEG4_VDPAU_DECODER 0 #define CONFIG_MPEGVIDEO_DECODER 0 #define CONFIG_MPEG_VDPAU_DECODER 0 #define CONFIG_MPEG1_VDPAU_DECODER 0 #define CONFIG_MPEG2_MMAL_DECODER 0 #define CONFIG_MPEG2_CRYSTALHD_DECODER 0 #define CONFIG_MPEG2_QSV_DECODER 0 #define CONFIG_MSA1_DECODER 0 #define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 #define CONFIG_MSMPEG4V1_DECODER 0 #define CONFIG_MSMPEG4V2_DECODER 0 #define CONFIG_MSMPEG4V3_DECODER 0 #define CONFIG_MSRLE_DECODER 0 #define CONFIG_MSS1_DECODER 0 #define CONFIG_MSS2_DECODER 0 #define CONFIG_MSVIDEO1_DECODER 0 #define CONFIG_MSZH_DECODER 0 #define CONFIG_MTS2_DECODER 0 #define CONFIG_MVC1_DECODER 0 #define CONFIG_MVC2_DECODER 0 #define CONFIG_MXPEG_DECODER 0 #define CONFIG_NUV_DECODER 0 #define CONFIG_PAF_VIDEO_DECODER 0 #define CONFIG_PAM_DECODER 0 #define CONFIG_PBM_DECODER 0 #define CONFIG_PCX_DECODER 0 #define CONFIG_PGM_DECODER 0 #define CONFIG_PGMYUV_DECODER 0 #define CONFIG_PICTOR_DECODER 0 #define CONFIG_PNG_DECODER 0 #define CONFIG_PPM_DECODER 0 #define CONFIG_PRORES_DECODER 0 #define CONFIG_PRORES_LGPL_DECODER 0 #define CONFIG_PTX_DECODER 0 #define CONFIG_QDRAW_DECODER 0 #define CONFIG_QPEG_DECODER 0 #define CONFIG_QTRLE_DECODER 0 #define CONFIG_R10K_DECODER 0 #define CONFIG_R210_DECODER 0 #define CONFIG_RAWVIDEO_DECODER 0 #define CONFIG_RL2_DECODER 0 #define CONFIG_ROQ_DECODER 0 #define CONFIG_RPZA_DECODER 0 #define CONFIG_RSCC_DECODER 0 #define CONFIG_RV10_DECODER 0 #define CONFIG_RV20_DECODER 0 #define CONFIG_RV30_DECODER 0 #define CONFIG_RV40_DECODER 0 #define CONFIG_S302M_DECODER 0 #define CONFIG_SANM_DECODER 0 #define CONFIG_SCREENPRESSO_DECODER 0 #define CONFIG_SDX2_DPCM_DECODER 0 #define CONFIG_SGI_DECODER 0 #define CONFIG_SGIRLE_DECODER 0 #define CONFIG_SHEERVIDEO_DECODER 0 #define CONFIG_SMACKER_DECODER 0 #define CONFIG_SMC_DECODER 0 #define CONFIG_SMVJPEG_DECODER 0 #define CONFIG_SNOW_DECODER 0 #define CONFIG_SP5X_DECODER 0 #define CONFIG_SUNRAST_DECODER 0 #define CONFIG_SVQ1_DECODER 0 #define CONFIG_SVQ3_DECODER 0 #define CONFIG_TARGA_DECODER 0 #define CONFIG_TARGA_Y216_DECODER 0 #define CONFIG_TDSC_DECODER 0 #define CONFIG_THEORA_DECODER 0 #define CONFIG_THP_DECODER 0 #define CONFIG_TIERTEXSEQVIDEO_DECODER 0 #define CONFIG_TIFF_DECODER 0 #define CONFIG_TMV_DECODER 0 #define CONFIG_TRUEMOTION1_DECODER 0 #define CONFIG_TRUEMOTION2_DECODER 0 #define CONFIG_TRUEMOTION2RT_DECODER 0 #define CONFIG_TSCC_DECODER 0 #define CONFIG_TSCC2_DECODER 0 #define CONFIG_TXD_DECODER 0 #define CONFIG_ULTI_DECODER 0 #define CONFIG_UTVIDEO_DECODER 0 #define CONFIG_V210_DECODER 0 #define CONFIG_V210X_DECODER 0 #define CONFIG_V308_DECODER 0 #define CONFIG_V408_DECODER 0 #define CONFIG_V410_DECODER 0 #define CONFIG_VB_DECODER 0 #define CONFIG_VBLE_DECODER 0 #define CONFIG_VC1_DECODER 0 #define CONFIG_VC1_CRYSTALHD_DECODER 0 #define CONFIG_VC1_VDPAU_DECODER 0 #define CONFIG_VC1IMAGE_DECODER 0 #define CONFIG_VC1_MMAL_DECODER 0 #define CONFIG_VC1_QSV_DECODER 0 #define CONFIG_VCR1_DECODER 0 #define CONFIG_VMDVIDEO_DECODER 0 #define CONFIG_VMNC_DECODER 0 #define CONFIG_VP3_DECODER 0 #define CONFIG_VP5_DECODER 0 #define CONFIG_VP6_DECODER 1 #define CONFIG_VP6A_DECODER 0 #define CONFIG_VP6F_DECODER 1 #define CONFIG_VP7_DECODER 0 #define CONFIG_VP8_DECODER 0 #define CONFIG_VP9_DECODER 0 #define CONFIG_VQA_DECODER 0 #define CONFIG_WEBP_DECODER 0 #define CONFIG_WMV1_DECODER 0 #define CONFIG_WMV2_DECODER 0 #define CONFIG_WMV3_DECODER 0 #define CONFIG_WMV3_CRYSTALHD_DECODER 0 #define CONFIG_WMV3_VDPAU_DECODER 0 #define CONFIG_WMV3IMAGE_DECODER 0 #define CONFIG_WNV1_DECODER 0 #define CONFIG_XAN_WC3_DECODER 0 #define CONFIG_XAN_WC4_DECODER 0 #define CONFIG_XBM_DECODER 0 #define CONFIG_XFACE_DECODER 0 #define CONFIG_XL_DECODER 0 #define CONFIG_XWD_DECODER 0 #define CONFIG_Y41P_DECODER 0 #define CONFIG_YLC_DECODER 0 #define CONFIG_YOP_DECODER 0 #define CONFIG_YUV4_DECODER 0 #define CONFIG_ZERO12V_DECODER 0 #define CONFIG_ZEROCODEC_DECODER 0 #define CONFIG_ZLIB_DECODER 0 #define CONFIG_ZMBV_DECODER 0 #define CONFIG_AAC_DECODER 1 #define CONFIG_AAC_FIXED_DECODER 0 #define CONFIG_AAC_LATM_DECODER 1 #define CONFIG_AC3_DECODER 0 #define CONFIG_AC3_FIXED_DECODER 0 #define CONFIG_ALAC_DECODER 0 #define CONFIG_ALS_DECODER 0 #define CONFIG_AMRNB_DECODER 0 #define CONFIG_AMRWB_DECODER 0 #define CONFIG_APE_DECODER 0 #define CONFIG_ATRAC1_DECODER 0 #define CONFIG_ATRAC3_DECODER 0 #define CONFIG_ATRAC3P_DECODER 0 #define CONFIG_BINKAUDIO_DCT_DECODER 0 #define CONFIG_BINKAUDIO_RDFT_DECODER 0 #define CONFIG_BMV_AUDIO_DECODER 0 #define CONFIG_COOK_DECODER 0 #define CONFIG_DCA_DECODER 0 #define CONFIG_DSD_LSBF_DECODER 0 #define CONFIG_DSD_MSBF_DECODER 0 #define CONFIG_DSD_LSBF_PLANAR_DECODER 0 #define CONFIG_DSD_MSBF_PLANAR_DECODER 0 #define CONFIG_DSICINAUDIO_DECODER 0 #define CONFIG_DSS_SP_DECODER 0 #define CONFIG_DST_DECODER 0 #define CONFIG_EAC3_DECODER 0 #define CONFIG_EVRC_DECODER 0 #define CONFIG_FFWAVESYNTH_DECODER 0 #define CONFIG_FLAC_DECODER 0 #define CONFIG_G723_1_DECODER 0 #define CONFIG_G729_DECODER 0 #define CONFIG_GSM_DECODER 0 #define CONFIG_GSM_MS_DECODER 0 #define CONFIG_IAC_DECODER 0 #define CONFIG_IMC_DECODER 0 #define CONFIG_INTERPLAY_ACM_DECODER 0 #define CONFIG_MACE3_DECODER 0 #define CONFIG_MACE6_DECODER 0 #define CONFIG_METASOUND_DECODER 0 #define CONFIG_MLP_DECODER 0 #define CONFIG_MP1_DECODER 0 #define CONFIG_MP1FLOAT_DECODER 0 #define CONFIG_MP2_DECODER 0 #define CONFIG_MP2FLOAT_DECODER 0 #define CONFIG_MP3_DECODER 1 #define CONFIG_MP3FLOAT_DECODER 1 #define CONFIG_MP3ADU_DECODER 1 #define CONFIG_MP3ADUFLOAT_DECODER 1 #define CONFIG_MP3ON4_DECODER 1 #define CONFIG_MP3ON4FLOAT_DECODER 1 #define CONFIG_MPC7_DECODER 0 #define CONFIG_MPC8_DECODER 0 #define CONFIG_NELLYMOSER_DECODER 0 #define CONFIG_ON2AVC_DECODER 0 #define CONFIG_OPUS_DECODER 0 #define CONFIG_PAF_AUDIO_DECODER 0 #define CONFIG_QCELP_DECODER 0 #define CONFIG_QDM2_DECODER 0 #define CONFIG_RA_144_DECODER 0 #define CONFIG_RA_288_DECODER 0 #define CONFIG_RALF_DECODER 0 #define CONFIG_SHORTEN_DECODER 0 #define CONFIG_SIPR_DECODER 0 #define CONFIG_SMACKAUD_DECODER 0 #define CONFIG_SONIC_DECODER 0 #define CONFIG_TAK_DECODER 0 #define CONFIG_TRUEHD_DECODER 0 #define CONFIG_TRUESPEECH_DECODER 0 #define CONFIG_TTA_DECODER 0 #define CONFIG_TWINVQ_DECODER 0 #define CONFIG_VMDAUDIO_DECODER 0 #define CONFIG_VORBIS_DECODER 0 #define CONFIG_WAVPACK_DECODER 0 #define CONFIG_WMALOSSLESS_DECODER 0 #define CONFIG_WMAPRO_DECODER 0 #define CONFIG_WMAV1_DECODER 0 #define CONFIG_WMAV2_DECODER 0 #define CONFIG_WMAVOICE_DECODER 0 #define CONFIG_WS_SND1_DECODER 0 #define CONFIG_XMA1_DECODER 0 #define CONFIG_XMA2_DECODER 0 #define CONFIG_PCM_ALAW_DECODER 0 #define CONFIG_PCM_BLURAY_DECODER 0 #define CONFIG_PCM_DVD_DECODER 0 #define CONFIG_PCM_F32BE_DECODER 0 #define CONFIG_PCM_F32LE_DECODER 0 #define CONFIG_PCM_F64BE_DECODER 0 #define CONFIG_PCM_F64LE_DECODER 0 #define CONFIG_PCM_LXF_DECODER 0 #define CONFIG_PCM_MULAW_DECODER 0 #define CONFIG_PCM_S8_DECODER 0 #define CONFIG_PCM_S8_PLANAR_DECODER 0 #define CONFIG_PCM_S16BE_DECODER 0 #define CONFIG_PCM_S16BE_PLANAR_DECODER 0 #define CONFIG_PCM_S16LE_DECODER 0 #define CONFIG_PCM_S16LE_PLANAR_DECODER 0 #define CONFIG_PCM_S24BE_DECODER 0 #define CONFIG_PCM_S24DAUD_DECODER 0 #define CONFIG_PCM_S24LE_DECODER 0 #define CONFIG_PCM_S24LE_PLANAR_DECODER 0 #define CONFIG_PCM_S32BE_DECODER 0 #define CONFIG_PCM_S32LE_DECODER 0 #define CONFIG_PCM_S32LE_PLANAR_DECODER 0 #define CONFIG_PCM_S64BE_DECODER 0 #define CONFIG_PCM_S64LE_DECODER 0 #define CONFIG_PCM_U8_DECODER 0 #define CONFIG_PCM_U16BE_DECODER 0 #define CONFIG_PCM_U16LE_DECODER 0 #define CONFIG_PCM_U24BE_DECODER 0 #define CONFIG_PCM_U24LE_DECODER 0 #define CONFIG_PCM_U32BE_DECODER 0 #define CONFIG_PCM_U32LE_DECODER 0 #define CONFIG_PCM_ZORK_DECODER 0 #define CONFIG_INTERPLAY_DPCM_DECODER 0 #define CONFIG_ROQ_DPCM_DECODER 0 #define CONFIG_SOL_DPCM_DECODER 0 #define CONFIG_XAN_DPCM_DECODER 0 #define CONFIG_ADPCM_4XM_DECODER 0 #define CONFIG_ADPCM_ADX_DECODER 0 #define CONFIG_ADPCM_AFC_DECODER 0 #define CONFIG_ADPCM_AICA_DECODER 0 #define CONFIG_ADPCM_CT_DECODER 0 #define CONFIG_ADPCM_DTK_DECODER 0 #define CONFIG_ADPCM_EA_DECODER 0 #define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 #define CONFIG_ADPCM_EA_R1_DECODER 0 #define CONFIG_ADPCM_EA_R2_DECODER 0 #define CONFIG_ADPCM_EA_R3_DECODER 0 #define CONFIG_ADPCM_EA_XAS_DECODER 0 #define CONFIG_ADPCM_G722_DECODER 0 #define CONFIG_ADPCM_G726_DECODER 0 #define CONFIG_ADPCM_G726LE_DECODER 0 #define CONFIG_ADPCM_IMA_AMV_DECODER 0 #define CONFIG_ADPCM_IMA_APC_DECODER 0 #define CONFIG_ADPCM_IMA_DAT4_DECODER 0 #define CONFIG_ADPCM_IMA_DK3_DECODER 0 #define CONFIG_ADPCM_IMA_DK4_DECODER 0 #define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 #define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 #define CONFIG_ADPCM_IMA_ISS_DECODER 0 #define CONFIG_ADPCM_IMA_OKI_DECODER 0 #define CONFIG_ADPCM_IMA_QT_DECODER 0 #define CONFIG_ADPCM_IMA_RAD_DECODER 0 #define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 #define CONFIG_ADPCM_IMA_WAV_DECODER 0 #define CONFIG_ADPCM_IMA_WS_DECODER 0 #define CONFIG_ADPCM_MS_DECODER 0 #define CONFIG_ADPCM_MTAF_DECODER 0 #define CONFIG_ADPCM_PSX_DECODER 0 #define CONFIG_ADPCM_SBPRO_2_DECODER 0 #define CONFIG_ADPCM_SBPRO_3_DECODER 0 #define CONFIG_ADPCM_SBPRO_4_DECODER 0 #define CONFIG_ADPCM_SWF_DECODER 0 #define CONFIG_ADPCM_THP_DECODER 0 #define CONFIG_ADPCM_THP_LE_DECODER 0 #define CONFIG_ADPCM_VIMA_DECODER 0 #define CONFIG_ADPCM_XA_DECODER 0 #define CONFIG_ADPCM_YAMAHA_DECODER 0 #define CONFIG_SSA_DECODER 0 #define CONFIG_ASS_DECODER 0 #define CONFIG_CCAPTION_DECODER 0 #define CONFIG_DVBSUB_DECODER 0 #define CONFIG_DVDSUB_DECODER 0 #define CONFIG_JACOSUB_DECODER 0 #define CONFIG_MICRODVD_DECODER 0 #define CONFIG_MOVTEXT_DECODER 0 #define CONFIG_MPL2_DECODER 0 #define CONFIG_PGSSUB_DECODER 0 #define CONFIG_PJS_DECODER 0 #define CONFIG_REALTEXT_DECODER 0 #define CONFIG_SAMI_DECODER 0 #define CONFIG_SRT_DECODER 0 #define CONFIG_STL_DECODER 0 #define CONFIG_SUBRIP_DECODER 0 #define CONFIG_SUBVIEWER_DECODER 0 #define CONFIG_SUBVIEWER1_DECODER 0 #define CONFIG_TEXT_DECODER 0 #define CONFIG_VPLAYER_DECODER 0 #define CONFIG_WEBVTT_DECODER 0 #define CONFIG_XSUB_DECODER 0 #define CONFIG_AAC_AT_DECODER 0 #define CONFIG_AC3_AT_DECODER 0 #define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 #define CONFIG_ALAC_AT_DECODER 0 #define CONFIG_AMR_NB_AT_DECODER 0 #define CONFIG_EAC3_AT_DECODER 0 #define CONFIG_GSM_MS_AT_DECODER 0 #define CONFIG_ILBC_AT_DECODER 0 #define CONFIG_MP1_AT_DECODER 0 #define CONFIG_MP2_AT_DECODER 0 #define CONFIG_MP3_AT_DECODER 0 #define CONFIG_PCM_ALAW_AT_DECODER 0 #define CONFIG_PCM_MULAW_AT_DECODER 0 #define CONFIG_QDMC_AT_DECODER 0 #define CONFIG_QDM2_AT_DECODER 0 #define CONFIG_LIBCELT_DECODER 0 #define CONFIG_LIBFDK_AAC_DECODER 0 #define CONFIG_LIBGSM_DECODER 0 #define CONFIG_LIBGSM_MS_DECODER 0 #define CONFIG_LIBILBC_DECODER 0 #define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 #define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 #define CONFIG_LIBOPENJPEG_DECODER 0 #define CONFIG_LIBOPUS_DECODER 0 #define CONFIG_LIBSCHROEDINGER_DECODER 0 #define CONFIG_LIBSPEEX_DECODER 0 #define CONFIG_LIBVORBIS_DECODER 0 #define CONFIG_LIBVPX_VP8_DECODER 0 #define CONFIG_LIBVPX_VP9_DECODER 0 #define CONFIG_LIBZVBI_TELETEXT_DECODER 0 #define CONFIG_BINTEXT_DECODER 0 #define CONFIG_XBIN_DECODER 0 #define CONFIG_IDF_DECODER 0 #define CONFIG_LIBOPENH264_DECODER 0 #define CONFIG_H263_CUVID_DECODER 0 #define CONFIG_H264_CUVID_DECODER 0 #define CONFIG_HEVC_CUVID_DECODER 0 #define CONFIG_HEVC_MEDIACODEC_DECODER 0 #define CONFIG_MJPEG_CUVID_DECODER 0 #define CONFIG_MPEG1_CUVID_DECODER 0 #define CONFIG_MPEG2_CUVID_DECODER 0 #define CONFIG_MPEG4_CUVID_DECODER 0 #define CONFIG_MPEG4_MEDIACODEC_DECODER 0 #define CONFIG_VC1_CUVID_DECODER 0 #define CONFIG_VP8_CUVID_DECODER 0 #define CONFIG_VP8_MEDIACODEC_DECODER 0 #define CONFIG_VP9_CUVID_DECODER 0 #define CONFIG_VP9_MEDIACODEC_DECODER 0 #define CONFIG_AA_DEMUXER 0 #define CONFIG_AAC_DEMUXER 1 #define CONFIG_AC3_DEMUXER 0 #define CONFIG_ACM_DEMUXER 0 #define CONFIG_ACT_DEMUXER 0 #define CONFIG_ADF_DEMUXER 0 #define CONFIG_ADP_DEMUXER 0 #define CONFIG_ADS_DEMUXER 0 #define CONFIG_ADX_DEMUXER 0 #define CONFIG_AEA_DEMUXER 0 #define CONFIG_AFC_DEMUXER 0 #define CONFIG_AIFF_DEMUXER 0 #define CONFIG_AIX_DEMUXER 0 #define CONFIG_AMR_DEMUXER 0 #define CONFIG_ANM_DEMUXER 0 #define CONFIG_APC_DEMUXER 0 #define CONFIG_APE_DEMUXER 0 #define CONFIG_APNG_DEMUXER 0 #define CONFIG_AQTITLE_DEMUXER 0 #define CONFIG_ASF_DEMUXER 0 #define CONFIG_ASF_O_DEMUXER 0 #define CONFIG_ASS_DEMUXER 0 #define CONFIG_AST_DEMUXER 0 #define CONFIG_AU_DEMUXER 0 #define CONFIG_AVI_DEMUXER 0 #define CONFIG_AVISYNTH_DEMUXER 0 #define CONFIG_AVR_DEMUXER 0 #define CONFIG_AVS_DEMUXER 0 #define CONFIG_BETHSOFTVID_DEMUXER 0 #define CONFIG_BFI_DEMUXER 0 #define CONFIG_BINTEXT_DEMUXER 0 #define CONFIG_BINK_DEMUXER 0 #define CONFIG_BIT_DEMUXER 0 #define CONFIG_BMV_DEMUXER 0 #define CONFIG_BFSTM_DEMUXER 0 #define CONFIG_BRSTM_DEMUXER 0 #define CONFIG_BOA_DEMUXER 0 #define CONFIG_C93_DEMUXER 0 #define CONFIG_CAF_DEMUXER 0 #define CONFIG_CAVSVIDEO_DEMUXER 0 #define CONFIG_CDG_DEMUXER 0 #define CONFIG_CDXL_DEMUXER 0 #define CONFIG_CINE_DEMUXER 0 #define CONFIG_CONCAT_DEMUXER 1 #define CONFIG_DATA_DEMUXER 1 #define CONFIG_DAUD_DEMUXER 0 #define CONFIG_DCSTR_DEMUXER 0 #define CONFIG_DFA_DEMUXER 0 #define CONFIG_DIRAC_DEMUXER 0 #define CONFIG_DNXHD_DEMUXER 0 #define CONFIG_DSF_DEMUXER 0 #define CONFIG_DSICIN_DEMUXER 0 #define CONFIG_DSS_DEMUXER 0 #define CONFIG_DTS_DEMUXER 0 #define CONFIG_DTSHD_DEMUXER 0 #define CONFIG_DV_DEMUXER 0 #define CONFIG_DVBSUB_DEMUXER 0 #define CONFIG_DVBTXT_DEMUXER 0 #define CONFIG_DXA_DEMUXER 0 #define CONFIG_EA_DEMUXER 0 #define CONFIG_EA_CDATA_DEMUXER 0 #define CONFIG_EAC3_DEMUXER 0 #define CONFIG_EPAF_DEMUXER 0 #define CONFIG_FFM_DEMUXER 0 #define CONFIG_FFMETADATA_DEMUXER 0 #define CONFIG_FILMSTRIP_DEMUXER 0 #define CONFIG_FLAC_DEMUXER 0 #define CONFIG_FLIC_DEMUXER 0 #define CONFIG_FLV_DEMUXER 1 #define CONFIG_LIVE_FLV_DEMUXER 1 #define CONFIG_FOURXM_DEMUXER 0 #define CONFIG_FRM_DEMUXER 0 #define CONFIG_FSB_DEMUXER 0 #define CONFIG_G722_DEMUXER 0 #define CONFIG_G723_1_DEMUXER 0 #define CONFIG_G729_DEMUXER 0 #define CONFIG_GENH_DEMUXER 0 #define CONFIG_GIF_DEMUXER 0 #define CONFIG_GSM_DEMUXER 0 #define CONFIG_GXF_DEMUXER 0 #define CONFIG_H261_DEMUXER 0 #define CONFIG_H263_DEMUXER 0 #define CONFIG_H264_DEMUXER 0 #define CONFIG_HEVC_DEMUXER 0 #define CONFIG_HLS_DEMUXER 1 #define CONFIG_HNM_DEMUXER 0 #define CONFIG_ICO_DEMUXER 0 #define CONFIG_IDCIN_DEMUXER 0 #define CONFIG_IDF_DEMUXER 0 #define CONFIG_IFF_DEMUXER 0 #define CONFIG_ILBC_DEMUXER 0 #define CONFIG_IMAGE2_DEMUXER 0 #define CONFIG_IMAGE2PIPE_DEMUXER 0 #define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 #define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 #define CONFIG_INGENIENT_DEMUXER 0 #define CONFIG_IPMOVIE_DEMUXER 0 #define CONFIG_IRCAM_DEMUXER 0 #define CONFIG_ISS_DEMUXER 0 #define CONFIG_IV8_DEMUXER 0 #define CONFIG_IVF_DEMUXER 0 #define CONFIG_IVR_DEMUXER 0 #define CONFIG_JACOSUB_DEMUXER 0 #define CONFIG_JV_DEMUXER 0 #define CONFIG_LMLM4_DEMUXER 0 #define CONFIG_LOAS_DEMUXER 0 #define CONFIG_LRC_DEMUXER 0 #define CONFIG_LVF_DEMUXER 0 #define CONFIG_LXF_DEMUXER 0 #define CONFIG_M4V_DEMUXER 0 #define CONFIG_MATROSKA_DEMUXER 0 #define CONFIG_MGSTS_DEMUXER 0 #define CONFIG_MICRODVD_DEMUXER 0 #define CONFIG_MJPEG_DEMUXER 0 #define CONFIG_MLP_DEMUXER 0 #define CONFIG_MLV_DEMUXER 0 #define CONFIG_MM_DEMUXER 0 #define CONFIG_MMF_DEMUXER 0 #define CONFIG_MOV_DEMUXER 1 #define CONFIG_MP3_DEMUXER 1 #define CONFIG_MPC_DEMUXER 0 #define CONFIG_MPC8_DEMUXER 0 #define CONFIG_MPEGPS_DEMUXER 1 #define CONFIG_MPEGTS_DEMUXER 1 #define CONFIG_MPEGTSRAW_DEMUXER 0 #define CONFIG_MPEGVIDEO_DEMUXER 1 #define CONFIG_MPJPEG_DEMUXER 0 #define CONFIG_MPL2_DEMUXER 0 #define CONFIG_MPSUB_DEMUXER 0 #define CONFIG_MSF_DEMUXER 0 #define CONFIG_MSNWC_TCP_DEMUXER 0 #define CONFIG_MTAF_DEMUXER 0 #define CONFIG_MTV_DEMUXER 0 #define CONFIG_MUSX_DEMUXER 0 #define CONFIG_MV_DEMUXER 0 #define CONFIG_MVI_DEMUXER 0 #define CONFIG_MXF_DEMUXER 0 #define CONFIG_MXG_DEMUXER 0 #define CONFIG_NC_DEMUXER 0 #define CONFIG_NISTSPHERE_DEMUXER 0 #define CONFIG_NSV_DEMUXER 0 #define CONFIG_NUT_DEMUXER 0 #define CONFIG_NUV_DEMUXER 0 #define CONFIG_OGG_DEMUXER 0 #define CONFIG_OMA_DEMUXER 0 #define CONFIG_PAF_DEMUXER 0 #define CONFIG_PCM_ALAW_DEMUXER 0 #define CONFIG_PCM_MULAW_DEMUXER 0 #define CONFIG_PCM_F64BE_DEMUXER 0 #define CONFIG_PCM_F64LE_DEMUXER 0 #define CONFIG_PCM_F32BE_DEMUXER 0 #define CONFIG_PCM_F32LE_DEMUXER 0 #define CONFIG_PCM_S32BE_DEMUXER 0 #define CONFIG_PCM_S32LE_DEMUXER 0 #define CONFIG_PCM_S24BE_DEMUXER 0 #define CONFIG_PCM_S24LE_DEMUXER 0 #define CONFIG_PCM_S16BE_DEMUXER 0 #define CONFIG_PCM_S16LE_DEMUXER 0 #define CONFIG_PCM_S8_DEMUXER 0 #define CONFIG_PCM_U32BE_DEMUXER 0 #define CONFIG_PCM_U32LE_DEMUXER 0 #define CONFIG_PCM_U24BE_DEMUXER 0 #define CONFIG_PCM_U24LE_DEMUXER 0 #define CONFIG_PCM_U16BE_DEMUXER 0 #define CONFIG_PCM_U16LE_DEMUXER 0 #define CONFIG_PCM_U8_DEMUXER 0 #define CONFIG_PJS_DEMUXER 0 #define CONFIG_PMP_DEMUXER 0 #define CONFIG_PVA_DEMUXER 0 #define CONFIG_PVF_DEMUXER 0 #define CONFIG_QCP_DEMUXER 0 #define CONFIG_R3D_DEMUXER 0 #define CONFIG_RAWVIDEO_DEMUXER 0 #define CONFIG_REALTEXT_DEMUXER 0 #define CONFIG_REDSPARK_DEMUXER 0 #define CONFIG_RL2_DEMUXER 0 #define CONFIG_RM_DEMUXER 0 #define CONFIG_ROQ_DEMUXER 0 #define CONFIG_RPL_DEMUXER 0 #define CONFIG_RSD_DEMUXER 0 #define CONFIG_RSO_DEMUXER 0 #define CONFIG_RTP_DEMUXER 0 #define CONFIG_RTSP_DEMUXER 0 #define CONFIG_SAMI_DEMUXER 0 #define CONFIG_SAP_DEMUXER 0 #define CONFIG_SBG_DEMUXER 0 #define CONFIG_SDP_DEMUXER 0 #define CONFIG_SDR2_DEMUXER 0 #define CONFIG_SEGAFILM_DEMUXER 0 #define CONFIG_SHORTEN_DEMUXER 0 #define CONFIG_SIFF_DEMUXER 0 #define CONFIG_SLN_DEMUXER 0 #define CONFIG_SMACKER_DEMUXER 0 #define CONFIG_SMJPEG_DEMUXER 0 #define CONFIG_SMUSH_DEMUXER 0 #define CONFIG_SOL_DEMUXER 0 #define CONFIG_SOX_DEMUXER 0 #define CONFIG_SPDIF_DEMUXER 0 #define CONFIG_SRT_DEMUXER 0 #define CONFIG_STR_DEMUXER 0 #define CONFIG_STL_DEMUXER 0 #define CONFIG_SUBVIEWER1_DEMUXER 0 #define CONFIG_SUBVIEWER_DEMUXER 0 #define CONFIG_SUP_DEMUXER 0 #define CONFIG_SVAG_DEMUXER 0 #define CONFIG_SWF_DEMUXER 0 #define CONFIG_TAK_DEMUXER 0 #define CONFIG_TEDCAPTIONS_DEMUXER 0 #define CONFIG_THP_DEMUXER 0 #define CONFIG_THREEDOSTR_DEMUXER 0 #define CONFIG_TIERTEXSEQ_DEMUXER 0 #define CONFIG_TMV_DEMUXER 0 #define CONFIG_TRUEHD_DEMUXER 0 #define CONFIG_TTA_DEMUXER 0 #define CONFIG_TXD_DEMUXER 0 #define CONFIG_TTY_DEMUXER 0 #define CONFIG_V210_DEMUXER 0 #define CONFIG_V210X_DEMUXER 0 #define CONFIG_VAG_DEMUXER 0 #define CONFIG_VC1_DEMUXER 0 #define CONFIG_VC1T_DEMUXER 0 #define CONFIG_VIVO_DEMUXER 0 #define CONFIG_VMD_DEMUXER 0 #define CONFIG_VOBSUB_DEMUXER 0 #define CONFIG_VOC_DEMUXER 0 #define CONFIG_VPK_DEMUXER 0 #define CONFIG_VPLAYER_DEMUXER 0 #define CONFIG_VQF_DEMUXER 0 #define CONFIG_W64_DEMUXER 0 #define CONFIG_WAV_DEMUXER 0 #define CONFIG_WC3_DEMUXER 0 #define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 #define CONFIG_WEBVTT_DEMUXER 0 #define CONFIG_WSAUD_DEMUXER 0 #define CONFIG_WSD_DEMUXER 0 #define CONFIG_WSVQA_DEMUXER 0 #define CONFIG_WTV_DEMUXER 0 #define CONFIG_WVE_DEMUXER 0 #define CONFIG_WV_DEMUXER 0 #define CONFIG_XA_DEMUXER 0 #define CONFIG_XBIN_DEMUXER 0 #define CONFIG_XMV_DEMUXER 0 #define CONFIG_XVAG_DEMUXER 0 #define CONFIG_XWMA_DEMUXER 0 #define CONFIG_YOP_DEMUXER 0 #define CONFIG_YUV4MPEGPIPE_DEMUXER 0 #define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 #define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 #define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 #define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 #define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 #define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 #define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 #define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 #define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 #define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 #define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 #define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 #define CONFIG_LIBGME_DEMUXER 0 #define CONFIG_LIBMODPLUG_DEMUXER 0 #define CONFIG_LIBNUT_DEMUXER 0 #define CONFIG_LIBOPENMPT_DEMUXER 0 #define CONFIG_A64MULTI_ENCODER 0 #define CONFIG_A64MULTI5_ENCODER 0 #define CONFIG_ALIAS_PIX_ENCODER 0 #define CONFIG_AMV_ENCODER 0 #define CONFIG_APNG_ENCODER 0 #define CONFIG_ASV1_ENCODER 0 #define CONFIG_ASV2_ENCODER 0 #define CONFIG_AVRP_ENCODER 0 #define CONFIG_AVUI_ENCODER 0 #define CONFIG_AYUV_ENCODER 0 #define CONFIG_BMP_ENCODER 0 #define CONFIG_CINEPAK_ENCODER 0 #define CONFIG_CLJR_ENCODER 0 #define CONFIG_COMFORTNOISE_ENCODER 0 #define CONFIG_DNXHD_ENCODER 0 #define CONFIG_DPX_ENCODER 0 #define CONFIG_DVVIDEO_ENCODER 0 #define CONFIG_FFV1_ENCODER 0 #define CONFIG_FFVHUFF_ENCODER 0 #define CONFIG_FLASHSV_ENCODER 0 #define CONFIG_FLASHSV2_ENCODER 0 #define CONFIG_FLV_ENCODER 0 #define CONFIG_GIF_ENCODER 0 #define CONFIG_H261_ENCODER 0 #define CONFIG_H263_ENCODER 0 #define CONFIG_H263P_ENCODER 0 #define CONFIG_HAP_ENCODER 0 #define CONFIG_HUFFYUV_ENCODER 0 #define CONFIG_JPEG2000_ENCODER 0 #define CONFIG_JPEGLS_ENCODER 0 #define CONFIG_LJPEG_ENCODER 0 #define CONFIG_MJPEG_ENCODER 0 #define CONFIG_MPEG1VIDEO_ENCODER 0 #define CONFIG_MPEG2VIDEO_ENCODER 0 #define CONFIG_MPEG4_ENCODER 0 #define CONFIG_MSMPEG4V2_ENCODER 0 #define CONFIG_MSMPEG4V3_ENCODER 0 #define CONFIG_MSVIDEO1_ENCODER 0 #define CONFIG_PAM_ENCODER 0 #define CONFIG_PBM_ENCODER 0 #define CONFIG_PCX_ENCODER 0 #define CONFIG_PGM_ENCODER 0 #define CONFIG_PGMYUV_ENCODER 0 #define CONFIG_PNG_ENCODER 0 #define CONFIG_PPM_ENCODER 0 #define CONFIG_PRORES_ENCODER 0 #define CONFIG_PRORES_AW_ENCODER 0 #define CONFIG_PRORES_KS_ENCODER 0 #define CONFIG_QTRLE_ENCODER 0 #define CONFIG_R10K_ENCODER 0 #define CONFIG_R210_ENCODER 0 #define CONFIG_RAWVIDEO_ENCODER 0 #define CONFIG_ROQ_ENCODER 0 #define CONFIG_RV10_ENCODER 0 #define CONFIG_RV20_ENCODER 0 #define CONFIG_S302M_ENCODER 0 #define CONFIG_SGI_ENCODER 0 #define CONFIG_SNOW_ENCODER 0 #define CONFIG_SUNRAST_ENCODER 0 #define CONFIG_SVQ1_ENCODER 0 #define CONFIG_TARGA_ENCODER 0 #define CONFIG_TIFF_ENCODER 0 #define CONFIG_UTVIDEO_ENCODER 0 #define CONFIG_V210_ENCODER 0 #define CONFIG_V308_ENCODER 0 #define CONFIG_V408_ENCODER 0 #define CONFIG_V410_ENCODER 0 #define CONFIG_VC2_ENCODER 0 #define CONFIG_WRAPPED_AVFRAME_ENCODER 0 #define CONFIG_WMV1_ENCODER 0 #define CONFIG_WMV2_ENCODER 0 #define CONFIG_XBM_ENCODER 0 #define CONFIG_XFACE_ENCODER 0 #define CONFIG_XWD_ENCODER 0 #define CONFIG_Y41P_ENCODER 0 #define CONFIG_YUV4_ENCODER 0 #define CONFIG_ZLIB_ENCODER 0 #define CONFIG_ZMBV_ENCODER 0 #define CONFIG_AAC_ENCODER 0 #define CONFIG_AC3_ENCODER 0 #define CONFIG_AC3_FIXED_ENCODER 0 #define CONFIG_ALAC_ENCODER 0 #define CONFIG_DCA_ENCODER 0 #define CONFIG_EAC3_ENCODER 0 #define CONFIG_FLAC_ENCODER 0 #define CONFIG_G723_1_ENCODER 0 #define CONFIG_MLP_ENCODER 0 #define CONFIG_MP2_ENCODER 0 #define CONFIG_MP2FIXED_ENCODER 0 #define CONFIG_NELLYMOSER_ENCODER 0 #define CONFIG_RA_144_ENCODER 0 #define CONFIG_SONIC_ENCODER 0 #define CONFIG_SONIC_LS_ENCODER 0 #define CONFIG_TRUEHD_ENCODER 0 #define CONFIG_TTA_ENCODER 0 #define CONFIG_VORBIS_ENCODER 0 #define CONFIG_WAVPACK_ENCODER 0 #define CONFIG_WMAV1_ENCODER 0 #define CONFIG_WMAV2_ENCODER 0 #define CONFIG_PCM_ALAW_ENCODER 0 #define CONFIG_PCM_F32BE_ENCODER 0 #define CONFIG_PCM_F32LE_ENCODER 0 #define CONFIG_PCM_F64BE_ENCODER 0 #define CONFIG_PCM_F64LE_ENCODER 0 #define CONFIG_PCM_MULAW_ENCODER 0 #define CONFIG_PCM_S8_ENCODER 0 #define CONFIG_PCM_S8_PLANAR_ENCODER 0 #define CONFIG_PCM_S16BE_ENCODER 0 #define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 #define CONFIG_PCM_S16LE_ENCODER 0 #define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 #define CONFIG_PCM_S24BE_ENCODER 0 #define CONFIG_PCM_S24DAUD_ENCODER 0 #define CONFIG_PCM_S24LE_ENCODER 0 #define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 #define CONFIG_PCM_S32BE_ENCODER 0 #define CONFIG_PCM_S32LE_ENCODER 0 #define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 #define CONFIG_PCM_S64BE_ENCODER 0 #define CONFIG_PCM_S64LE_ENCODER 0 #define CONFIG_PCM_U8_ENCODER 0 #define CONFIG_PCM_U16BE_ENCODER 0 #define CONFIG_PCM_U16LE_ENCODER 0 #define CONFIG_PCM_U24BE_ENCODER 0 #define CONFIG_PCM_U24LE_ENCODER 0 #define CONFIG_PCM_U32BE_ENCODER 0 #define CONFIG_PCM_U32LE_ENCODER 0 #define CONFIG_ROQ_DPCM_ENCODER 0 #define CONFIG_ADPCM_ADX_ENCODER 0 #define CONFIG_ADPCM_G722_ENCODER 0 #define CONFIG_ADPCM_G726_ENCODER 0 #define CONFIG_ADPCM_IMA_QT_ENCODER 0 #define CONFIG_ADPCM_IMA_WAV_ENCODER 0 #define CONFIG_ADPCM_MS_ENCODER 0 #define CONFIG_ADPCM_SWF_ENCODER 0 #define CONFIG_ADPCM_YAMAHA_ENCODER 0 #define CONFIG_SSA_ENCODER 0 #define CONFIG_ASS_ENCODER 0 #define CONFIG_DVBSUB_ENCODER 0 #define CONFIG_DVDSUB_ENCODER 0 #define CONFIG_MOVTEXT_ENCODER 0 #define CONFIG_SRT_ENCODER 0 #define CONFIG_SUBRIP_ENCODER 0 #define CONFIG_TEXT_ENCODER 0 #define CONFIG_WEBVTT_ENCODER 0 #define CONFIG_XSUB_ENCODER 0 #define CONFIG_AAC_AT_ENCODER 0 #define CONFIG_ALAC_AT_ENCODER 0 #define CONFIG_ILBC_AT_ENCODER 0 #define CONFIG_PCM_ALAW_AT_ENCODER 0 #define CONFIG_PCM_MULAW_AT_ENCODER 0 #define CONFIG_LIBFDK_AAC_ENCODER 0 #define CONFIG_LIBGSM_ENCODER 0 #define CONFIG_LIBGSM_MS_ENCODER 0 #define CONFIG_LIBILBC_ENCODER 0 #define CONFIG_LIBMP3LAME_ENCODER 0 #define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 #define CONFIG_LIBOPENJPEG_ENCODER 0 #define CONFIG_LIBOPUS_ENCODER 0 #define CONFIG_LIBSCHROEDINGER_ENCODER 0 #define CONFIG_LIBSHINE_ENCODER 0 #define CONFIG_LIBSPEEX_ENCODER 0 #define CONFIG_LIBTHEORA_ENCODER 0 #define CONFIG_LIBTWOLAME_ENCODER 0 #define CONFIG_LIBVO_AMRWBENC_ENCODER 0 #define CONFIG_LIBVORBIS_ENCODER 0 #define CONFIG_LIBVPX_VP8_ENCODER 0 #define CONFIG_LIBVPX_VP9_ENCODER 0 #define CONFIG_LIBWAVPACK_ENCODER 0 #define CONFIG_LIBWEBP_ANIM_ENCODER 0 #define CONFIG_LIBWEBP_ENCODER 0 #define CONFIG_LIBX262_ENCODER 0 #define CONFIG_LIBX264_ENCODER 0 #define CONFIG_LIBX264RGB_ENCODER 0 #define CONFIG_LIBX265_ENCODER 0 #define CONFIG_LIBXAVS_ENCODER 0 #define CONFIG_LIBXVID_ENCODER 0 #define CONFIG_LIBOPENH264_ENCODER 0 #define CONFIG_H264_NVENC_ENCODER 0 #define CONFIG_H264_OMX_ENCODER 0 #define CONFIG_H264_QSV_ENCODER 0 #define CONFIG_H264_VAAPI_ENCODER 0 #define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 #define CONFIG_NVENC_ENCODER 0 #define CONFIG_NVENC_H264_ENCODER 0 #define CONFIG_NVENC_HEVC_ENCODER 0 #define CONFIG_HEVC_NVENC_ENCODER 0 #define CONFIG_HEVC_QSV_ENCODER 0 #define CONFIG_HEVC_VAAPI_ENCODER 0 #define CONFIG_LIBKVAZAAR_ENCODER 0 #define CONFIG_MJPEG_VAAPI_ENCODER 0 #define CONFIG_MPEG2_QSV_ENCODER 0 #define CONFIG_ABENCH_FILTER 0 #define CONFIG_ACOMPRESSOR_FILTER 0 #define CONFIG_ACROSSFADE_FILTER 0 #define CONFIG_ACRUSHER_FILTER 0 #define CONFIG_ADELAY_FILTER 0 #define CONFIG_AECHO_FILTER 0 #define CONFIG_AEMPHASIS_FILTER 0 #define CONFIG_AEVAL_FILTER 0 #define CONFIG_AFADE_FILTER 0 #define CONFIG_AFFTFILT_FILTER 0 #define CONFIG_AFORMAT_FILTER 0 #define CONFIG_AGATE_FILTER 0 #define CONFIG_AINTERLEAVE_FILTER 0 #define CONFIG_ALIMITER_FILTER 0 #define CONFIG_ALLPASS_FILTER 0 #define CONFIG_ALOOP_FILTER 0 #define CONFIG_AMERGE_FILTER 0 #define CONFIG_AMETADATA_FILTER 0 #define CONFIG_AMIX_FILTER 0 #define CONFIG_ANEQUALIZER_FILTER 0 #define CONFIG_ANULL_FILTER 0 #define CONFIG_APAD_FILTER 0 #define CONFIG_APERMS_FILTER 0 #define CONFIG_APHASER_FILTER 0 #define CONFIG_APULSATOR_FILTER 0 #define CONFIG_AREALTIME_FILTER 0 #define CONFIG_ARESAMPLE_FILTER 0 #define CONFIG_AREVERSE_FILTER 0 #define CONFIG_ASELECT_FILTER 0 #define CONFIG_ASENDCMD_FILTER 0 #define CONFIG_ASETNSAMPLES_FILTER 0 #define CONFIG_ASETPTS_FILTER 0 #define CONFIG_ASETRATE_FILTER 0 #define CONFIG_ASETTB_FILTER 0 #define CONFIG_ASHOWINFO_FILTER 0 #define CONFIG_ASIDEDATA_FILTER 0 #define CONFIG_ASPLIT_FILTER 0 #define CONFIG_ASTATS_FILTER 0 #define CONFIG_ASTREAMSELECT_FILTER 0 #define CONFIG_ASYNCTS_FILTER 0 #define CONFIG_ATEMPO_FILTER 0 #define CONFIG_ATRIM_FILTER 0 #define CONFIG_AZMQ_FILTER 0 #define CONFIG_BANDPASS_FILTER 0 #define CONFIG_BANDREJECT_FILTER 0 #define CONFIG_BASS_FILTER 0 #define CONFIG_BIQUAD_FILTER 0 #define CONFIG_BS2B_FILTER 0 #define CONFIG_CHANNELMAP_FILTER 0 #define CONFIG_CHANNELSPLIT_FILTER 0 #define CONFIG_CHORUS_FILTER 0 #define CONFIG_COMPAND_FILTER 0 #define CONFIG_COMPENSATIONDELAY_FILTER 0 #define CONFIG_CRYSTALIZER_FILTER 0 #define CONFIG_DCSHIFT_FILTER 0 #define CONFIG_DYNAUDNORM_FILTER 0 #define CONFIG_EARWAX_FILTER 0 #define CONFIG_EBUR128_FILTER 0 #define CONFIG_EQUALIZER_FILTER 0 #define CONFIG_EXTRASTEREO_FILTER 0 #define CONFIG_FIREQUALIZER_FILTER 0 #define CONFIG_FLANGER_FILTER 0 #define CONFIG_HDCD_FILTER 0 #define CONFIG_HIGHPASS_FILTER 0 #define CONFIG_JOIN_FILTER 0 #define CONFIG_LADSPA_FILTER 0 #define CONFIG_LOUDNORM_FILTER 0 #define CONFIG_LOWPASS_FILTER 0 #define CONFIG_PAN_FILTER 0 #define CONFIG_REPLAYGAIN_FILTER 0 #define CONFIG_RESAMPLE_FILTER 0 #define CONFIG_RUBBERBAND_FILTER 0 #define CONFIG_SIDECHAINCOMPRESS_FILTER 0 #define CONFIG_SIDECHAINGATE_FILTER 0 #define CONFIG_SILENCEDETECT_FILTER 0 #define CONFIG_SILENCEREMOVE_FILTER 0 #define CONFIG_SOFALIZER_FILTER 0 #define CONFIG_STEREOTOOLS_FILTER 0 #define CONFIG_STEREOWIDEN_FILTER 0 #define CONFIG_TREBLE_FILTER 0 #define CONFIG_TREMOLO_FILTER 0 #define CONFIG_VIBRATO_FILTER 0 #define CONFIG_VOLUME_FILTER 0 #define CONFIG_VOLUMEDETECT_FILTER 0 #define CONFIG_AEVALSRC_FILTER 0 #define CONFIG_ANOISESRC_FILTER 0 #define CONFIG_ANULLSRC_FILTER 0 #define CONFIG_FLITE_FILTER 0 #define CONFIG_SINE_FILTER 0 #define CONFIG_ANULLSINK_FILTER 0 #define CONFIG_ALPHAEXTRACT_FILTER 0 #define CONFIG_ALPHAMERGE_FILTER 0 #define CONFIG_ASS_FILTER 0 #define CONFIG_ATADENOISE_FILTER 0 #define CONFIG_AVGBLUR_FILTER 0 #define CONFIG_BBOX_FILTER 0 #define CONFIG_BENCH_FILTER 0 #define CONFIG_BITPLANENOISE_FILTER 0 #define CONFIG_BLACKDETECT_FILTER 0 #define CONFIG_BLACKFRAME_FILTER 0 #define CONFIG_BLEND_FILTER 0 #define CONFIG_BOXBLUR_FILTER 0 #define CONFIG_BWDIF_FILTER 0 #define CONFIG_CHROMAKEY_FILTER 0 #define CONFIG_CIESCOPE_FILTER 0 #define CONFIG_CODECVIEW_FILTER 0 #define CONFIG_COLORBALANCE_FILTER 0 #define CONFIG_COLORCHANNELMIXER_FILTER 0 #define CONFIG_COLORKEY_FILTER 0 #define CONFIG_COLORLEVELS_FILTER 0 #define CONFIG_COLORMATRIX_FILTER 0 #define CONFIG_COLORSPACE_FILTER 0 #define CONFIG_CONVOLUTION_FILTER 0 #define CONFIG_COPY_FILTER 0 #define CONFIG_COREIMAGE_FILTER 0 #define CONFIG_COVER_RECT_FILTER 0 #define CONFIG_CROP_FILTER 0 #define CONFIG_CROPDETECT_FILTER 0 #define CONFIG_CURVES_FILTER 0 #define CONFIG_DATASCOPE_FILTER 0 #define CONFIG_DCTDNOIZ_FILTER 0 #define CONFIG_DEBAND_FILTER 0 #define CONFIG_DECIMATE_FILTER 0 #define CONFIG_DEFLATE_FILTER 0 #define CONFIG_DEJUDDER_FILTER 0 #define CONFIG_DELOGO_FILTER 0 #define CONFIG_DESHAKE_FILTER 0 #define CONFIG_DETELECINE_FILTER 0 #define CONFIG_DILATION_FILTER 0 #define CONFIG_DISPLACE_FILTER 0 #define CONFIG_DRAWBOX_FILTER 0 #define CONFIG_DRAWGRAPH_FILTER 0 #define CONFIG_DRAWGRID_FILTER 0 #define CONFIG_DRAWTEXT_FILTER 0 #define CONFIG_EDGEDETECT_FILTER 0 #define CONFIG_ELBG_FILTER 0 #define CONFIG_EQ_FILTER 0 #define CONFIG_EROSION_FILTER 0 #define CONFIG_EXTRACTPLANES_FILTER 0 #define CONFIG_FADE_FILTER 0 #define CONFIG_FFTFILT_FILTER 0 #define CONFIG_FIELD_FILTER 0 #define CONFIG_FIELDHINT_FILTER 0 #define CONFIG_FIELDMATCH_FILTER 0 #define CONFIG_FIELDORDER_FILTER 0 #define CONFIG_FIND_RECT_FILTER 0 #define CONFIG_FORMAT_FILTER 0 #define CONFIG_FPS_FILTER 0 #define CONFIG_FRAMEPACK_FILTER 0 #define CONFIG_FRAMERATE_FILTER 0 #define CONFIG_FRAMESTEP_FILTER 0 #define CONFIG_FREI0R_FILTER 0 #define CONFIG_FSPP_FILTER 0 #define CONFIG_GBLUR_FILTER 0 #define CONFIG_GEQ_FILTER 0 #define CONFIG_GRADFUN_FILTER 0 #define CONFIG_HALDCLUT_FILTER 0 #define CONFIG_HFLIP_FILTER 0 #define CONFIG_HISTEQ_FILTER 0 #define CONFIG_HISTOGRAM_FILTER 0 #define CONFIG_HQDN3D_FILTER 0 #define CONFIG_HQX_FILTER 0 #define CONFIG_HSTACK_FILTER 0 #define CONFIG_HUE_FILTER 0 #define CONFIG_HWDOWNLOAD_FILTER 0 #define CONFIG_HWUPLOAD_FILTER 0 #define CONFIG_HWUPLOAD_CUDA_FILTER 0 #define CONFIG_HYSTERESIS_FILTER 0 #define CONFIG_IDET_FILTER 0 #define CONFIG_IL_FILTER 0 #define CONFIG_INFLATE_FILTER 0 #define CONFIG_INTERLACE_FILTER 0 #define CONFIG_INTERLEAVE_FILTER 0 #define CONFIG_KERNDEINT_FILTER 0 #define CONFIG_LENSCORRECTION_FILTER 0 #define CONFIG_LOOP_FILTER 0 #define CONFIG_LUT_FILTER 0 #define CONFIG_LUT2_FILTER 0 #define CONFIG_LUT3D_FILTER 0 #define CONFIG_LUTRGB_FILTER 0 #define CONFIG_LUTYUV_FILTER 0 #define CONFIG_MASKEDCLAMP_FILTER 0 #define CONFIG_MASKEDMERGE_FILTER 0 #define CONFIG_MCDEINT_FILTER 0 #define CONFIG_MERGEPLANES_FILTER 0 #define CONFIG_MESTIMATE_FILTER 0 #define CONFIG_METADATA_FILTER 0 #define CONFIG_MINTERPOLATE_FILTER 0 #define CONFIG_MPDECIMATE_FILTER 0 #define CONFIG_NEGATE_FILTER 0 #define CONFIG_NLMEANS_FILTER 0 #define CONFIG_NNEDI_FILTER 0 #define CONFIG_NOFORMAT_FILTER 0 #define CONFIG_NOISE_FILTER 0 #define CONFIG_NULL_FILTER 0 #define CONFIG_OCR_FILTER 0 #define CONFIG_OCV_FILTER 0 #define CONFIG_OVERLAY_FILTER 0 #define CONFIG_OWDENOISE_FILTER 0 #define CONFIG_PAD_FILTER 0 #define CONFIG_PALETTEGEN_FILTER 0 #define CONFIG_PALETTEUSE_FILTER 0 #define CONFIG_PERMS_FILTER 0 #define CONFIG_PERSPECTIVE_FILTER 0 #define CONFIG_PHASE_FILTER 0 #define CONFIG_PIXDESCTEST_FILTER 0 #define CONFIG_PP_FILTER 0 #define CONFIG_PP7_FILTER 0 #define CONFIG_PREWITT_FILTER 0 #define CONFIG_PSNR_FILTER 0 #define CONFIG_PULLUP_FILTER 0 #define CONFIG_QP_FILTER 0 #define CONFIG_RANDOM_FILTER 0 #define CONFIG_READVITC_FILTER 0 #define CONFIG_REALTIME_FILTER 0 #define CONFIG_REMAP_FILTER 0 #define CONFIG_REMOVEGRAIN_FILTER 0 #define CONFIG_REMOVELOGO_FILTER 0 #define CONFIG_REPEATFIELDS_FILTER 0 #define CONFIG_REVERSE_FILTER 0 #define CONFIG_ROTATE_FILTER 0 #define CONFIG_SAB_FILTER 0 #define CONFIG_SCALE_FILTER 0 #define CONFIG_SCALE_NPP_FILTER 0 #define CONFIG_SCALE_VAAPI_FILTER 0 #define CONFIG_SCALE2REF_FILTER 0 #define CONFIG_SELECT_FILTER 0 #define CONFIG_SELECTIVECOLOR_FILTER 0 #define CONFIG_SENDCMD_FILTER 0 #define CONFIG_SEPARATEFIELDS_FILTER 0 #define CONFIG_SETDAR_FILTER 0 #define CONFIG_SETFIELD_FILTER 0 #define CONFIG_SETPTS_FILTER 0 #define CONFIG_SETSAR_FILTER 0 #define CONFIG_SETTB_FILTER 0 #define CONFIG_SHOWINFO_FILTER 0 #define CONFIG_SHOWPALETTE_FILTER 0 #define CONFIG_SHUFFLEFRAMES_FILTER 0 #define CONFIG_SHUFFLEPLANES_FILTER 0 #define CONFIG_SIDEDATA_FILTER 0 #define CONFIG_SIGNALSTATS_FILTER 0 #define CONFIG_SMARTBLUR_FILTER 0 #define CONFIG_SOBEL_FILTER 0 #define CONFIG_SPLIT_FILTER 0 #define CONFIG_SPP_FILTER 0 #define CONFIG_SSIM_FILTER 0 #define CONFIG_STEREO3D_FILTER 0 #define CONFIG_STREAMSELECT_FILTER 0 #define CONFIG_SUBTITLES_FILTER 0 #define CONFIG_SUPER2XSAI_FILTER 0 #define CONFIG_SWAPRECT_FILTER 0 #define CONFIG_SWAPUV_FILTER 0 #define CONFIG_TBLEND_FILTER 0 #define CONFIG_TELECINE_FILTER 0 #define CONFIG_THUMBNAIL_FILTER 0 #define CONFIG_TILE_FILTER 0 #define CONFIG_TINTERLACE_FILTER 0 #define CONFIG_TRANSPOSE_FILTER 0 #define CONFIG_TRIM_FILTER 0 #define CONFIG_UNSHARP_FILTER 0 #define CONFIG_USPP_FILTER 0 #define CONFIG_VAGUEDENOISER_FILTER 0 #define CONFIG_VECTORSCOPE_FILTER 0 #define CONFIG_VFLIP_FILTER 0 #define CONFIG_VIDSTABDETECT_FILTER 0 #define CONFIG_VIDSTABTRANSFORM_FILTER 0 #define CONFIG_VIGNETTE_FILTER 0 #define CONFIG_VSTACK_FILTER 0 #define CONFIG_W3FDIF_FILTER 0 #define CONFIG_WAVEFORM_FILTER 0 #define CONFIG_WEAVE_FILTER 0 #define CONFIG_XBR_FILTER 0 #define CONFIG_YADIF_FILTER 0 #define CONFIG_ZMQ_FILTER 0 #define CONFIG_ZOOMPAN_FILTER 0 #define CONFIG_ZSCALE_FILTER 0 #define CONFIG_ALLRGB_FILTER 0 #define CONFIG_ALLYUV_FILTER 0 #define CONFIG_CELLAUTO_FILTER 0 #define CONFIG_COLOR_FILTER 0 #define CONFIG_COREIMAGESRC_FILTER 0 #define CONFIG_FREI0R_SRC_FILTER 0 #define CONFIG_HALDCLUTSRC_FILTER 0 #define CONFIG_LIFE_FILTER 0 #define CONFIG_MANDELBROT_FILTER 0 #define CONFIG_MPTESTSRC_FILTER 0 #define CONFIG_NULLSRC_FILTER 0 #define CONFIG_RGBTESTSRC_FILTER 0 #define CONFIG_SMPTEBARS_FILTER 0 #define CONFIG_SMPTEHDBARS_FILTER 0 #define CONFIG_TESTSRC_FILTER 0 #define CONFIG_TESTSRC2_FILTER 0 #define CONFIG_YUVTESTSRC_FILTER 0 #define CONFIG_NULLSINK_FILTER 0 #define CONFIG_ADRAWGRAPH_FILTER 0 #define CONFIG_AHISTOGRAM_FILTER 0 #define CONFIG_APHASEMETER_FILTER 0 #define CONFIG_AVECTORSCOPE_FILTER 0 #define CONFIG_CONCAT_FILTER 0 #define CONFIG_SHOWCQT_FILTER 0 #define CONFIG_SHOWFREQS_FILTER 0 #define CONFIG_SHOWSPECTRUM_FILTER 0 #define CONFIG_SHOWSPECTRUMPIC_FILTER 0 #define CONFIG_SHOWVOLUME_FILTER 0 #define CONFIG_SHOWWAVES_FILTER 0 #define CONFIG_SHOWWAVESPIC_FILTER 0 #define CONFIG_SPECTRUMSYNTH_FILTER 0 #define CONFIG_AMOVIE_FILTER 0 #define CONFIG_MOVIE_FILTER 0 #define CONFIG_H263_CUVID_HWACCEL 0 #define CONFIG_H263_VAAPI_HWACCEL 0 #define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_H264_CUVID_HWACCEL 0 #define CONFIG_H264_D3D11VA_HWACCEL 0 #define CONFIG_H264_DXVA2_HWACCEL 0 #define CONFIG_H264_MEDIACODEC_HWACCEL 0 #define CONFIG_H264_MMAL_HWACCEL 0 #define CONFIG_H264_QSV_HWACCEL 0 #define CONFIG_H264_VAAPI_HWACCEL 0 #define CONFIG_H264_VDA_HWACCEL 0 #define CONFIG_H264_VDA_OLD_HWACCEL 0 #define CONFIG_H264_VDPAU_HWACCEL 0 #define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_HEVC_CUVID_HWACCEL 0 #define CONFIG_HEVC_D3D11VA_HWACCEL 0 #define CONFIG_HEVC_DXVA2_HWACCEL 0 #define CONFIG_HEVC_MEDIACODEC_HWACCEL 0 #define CONFIG_HEVC_QSV_HWACCEL 0 #define CONFIG_HEVC_VAAPI_HWACCEL 0 #define CONFIG_HEVC_VDPAU_HWACCEL 0 #define CONFIG_MJPEG_CUVID_HWACCEL 0 #define CONFIG_MPEG1_CUVID_HWACCEL 0 #define CONFIG_MPEG1_XVMC_HWACCEL 0 #define CONFIG_MPEG1_VDPAU_HWACCEL 0 #define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_MPEG2_CUVID_HWACCEL 0 #define CONFIG_MPEG2_XVMC_HWACCEL 0 #define CONFIG_MPEG2_D3D11VA_HWACCEL 0 #define CONFIG_MPEG2_DXVA2_HWACCEL 0 #define CONFIG_MPEG2_MMAL_HWACCEL 0 #define CONFIG_MPEG2_QSV_HWACCEL 0 #define CONFIG_MPEG2_VAAPI_HWACCEL 0 #define CONFIG_MPEG2_VDPAU_HWACCEL 0 #define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_MPEG4_CUVID_HWACCEL 0 #define CONFIG_MPEG4_MEDIACODEC_HWACCEL 0 #define CONFIG_MPEG4_MMAL_HWACCEL 0 #define CONFIG_MPEG4_VAAPI_HWACCEL 0 #define CONFIG_MPEG4_VDPAU_HWACCEL 0 #define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_VC1_CUVID_HWACCEL 0 #define CONFIG_VC1_D3D11VA_HWACCEL 0 #define CONFIG_VC1_DXVA2_HWACCEL 0 #define CONFIG_VC1_VAAPI_HWACCEL 0 #define CONFIG_VC1_VDPAU_HWACCEL 0 #define CONFIG_VC1_MMAL_HWACCEL 0 #define CONFIG_VC1_QSV_HWACCEL 0 #define CONFIG_VP8_CUVID_HWACCEL 0 #define CONFIG_VP8_MEDIACODEC_HWACCEL 0 #define CONFIG_VP9_CUVID_HWACCEL 0 #define CONFIG_VP9_D3D11VA_HWACCEL 0 #define CONFIG_VP9_DXVA2_HWACCEL 0 #define CONFIG_VP9_MEDIACODEC_HWACCEL 0 #define CONFIG_VP9_VAAPI_HWACCEL 0 #define CONFIG_WMV3_D3D11VA_HWACCEL 0 #define CONFIG_WMV3_DXVA2_HWACCEL 0 #define CONFIG_WMV3_VAAPI_HWACCEL 0 #define CONFIG_WMV3_VDPAU_HWACCEL 0 #define CONFIG_ALSA_INDEV 0 #define CONFIG_AVFOUNDATION_INDEV 0 #define CONFIG_BKTR_INDEV 0 #define CONFIG_DECKLINK_INDEV 0 #define CONFIG_DSHOW_INDEV 0 #define CONFIG_DV1394_INDEV 0 #define CONFIG_FBDEV_INDEV 0 #define CONFIG_GDIGRAB_INDEV 0 #define CONFIG_IEC61883_INDEV 0 #define CONFIG_JACK_INDEV 0 #define CONFIG_LAVFI_INDEV 0 #define CONFIG_OPENAL_INDEV 0 #define CONFIG_OSS_INDEV 0 #define CONFIG_PULSE_INDEV 0 #define CONFIG_QTKIT_INDEV 0 #define CONFIG_SNDIO_INDEV 0 #define CONFIG_V4L2_INDEV 0 #define CONFIG_VFWCAP_INDEV 0 #define CONFIG_X11GRAB_INDEV 0 #define CONFIG_X11GRAB_XCB_INDEV 0 #define CONFIG_LIBCDIO_INDEV 0 #define CONFIG_LIBDC1394_INDEV 0 #define CONFIG_A64_MUXER 0 #define CONFIG_AC3_MUXER 0 #define CONFIG_ADTS_MUXER 0 #define CONFIG_ADX_MUXER 0 #define CONFIG_AIFF_MUXER 0 #define CONFIG_AMR_MUXER 0 #define CONFIG_APNG_MUXER 0 #define CONFIG_ASF_MUXER 0 #define CONFIG_ASS_MUXER 0 #define CONFIG_AST_MUXER 0 #define CONFIG_ASF_STREAM_MUXER 0 #define CONFIG_AU_MUXER 0 #define CONFIG_AVI_MUXER 0 #define CONFIG_AVM2_MUXER 0 #define CONFIG_BIT_MUXER 0 #define CONFIG_CAF_MUXER 0 #define CONFIG_CAVSVIDEO_MUXER 0 #define CONFIG_CRC_MUXER 0 #define CONFIG_DASH_MUXER 0 #define CONFIG_DATA_MUXER 0 #define CONFIG_DAUD_MUXER 0 #define CONFIG_DIRAC_MUXER 0 #define CONFIG_DNXHD_MUXER 0 #define CONFIG_DTS_MUXER 0 #define CONFIG_DV_MUXER 0 #define CONFIG_EAC3_MUXER 0 #define CONFIG_F4V_MUXER 0 #define CONFIG_FFM_MUXER 0 #define CONFIG_FFMETADATA_MUXER 0 #define CONFIG_FIFO_MUXER 0 #define CONFIG_FILMSTRIP_MUXER 0 #define CONFIG_FLAC_MUXER 0 #define CONFIG_FLV_MUXER 0 #define CONFIG_FRAMECRC_MUXER 0 #define CONFIG_FRAMEHASH_MUXER 0 #define CONFIG_FRAMEMD5_MUXER 0 #define CONFIG_G722_MUXER 0 #define CONFIG_G723_1_MUXER 0 #define CONFIG_GIF_MUXER 0 #define CONFIG_GSM_MUXER 0 #define CONFIG_GXF_MUXER 0 #define CONFIG_H261_MUXER 0 #define CONFIG_H263_MUXER 0 #define CONFIG_H264_MUXER 0 #define CONFIG_HASH_MUXER 0 #define CONFIG_HDS_MUXER 0 #define CONFIG_HEVC_MUXER 0 #define CONFIG_HLS_MUXER 0 #define CONFIG_ICO_MUXER 0 #define CONFIG_ILBC_MUXER 0 #define CONFIG_IMAGE2_MUXER 0 #define CONFIG_IMAGE2PIPE_MUXER 0 #define CONFIG_IPOD_MUXER 0 #define CONFIG_IRCAM_MUXER 0 #define CONFIG_ISMV_MUXER 0 #define CONFIG_IVF_MUXER 0 #define CONFIG_JACOSUB_MUXER 0 #define CONFIG_LATM_MUXER 0 #define CONFIG_LRC_MUXER 0 #define CONFIG_M4V_MUXER 0 #define CONFIG_MD5_MUXER 0 #define CONFIG_MATROSKA_MUXER 0 #define CONFIG_MATROSKA_AUDIO_MUXER 0 #define CONFIG_MICRODVD_MUXER 0 #define CONFIG_MJPEG_MUXER 0 #define CONFIG_MLP_MUXER 0 #define CONFIG_MMF_MUXER 0 #define CONFIG_MOV_MUXER 1 #define CONFIG_MP2_MUXER 0 #define CONFIG_MP3_MUXER 0 #define CONFIG_MP4_MUXER 1 #define CONFIG_MPEG1SYSTEM_MUXER 0 #define CONFIG_MPEG1VCD_MUXER 0 #define CONFIG_MPEG1VIDEO_MUXER 0 #define CONFIG_MPEG2DVD_MUXER 0 #define CONFIG_MPEG2SVCD_MUXER 0 #define CONFIG_MPEG2VIDEO_MUXER 0 #define CONFIG_MPEG2VOB_MUXER 0 #define CONFIG_MPEGTS_MUXER 0 #define CONFIG_MPJPEG_MUXER 0 #define CONFIG_MXF_MUXER 0 #define CONFIG_MXF_D10_MUXER 0 #define CONFIG_MXF_OPATOM_MUXER 0 #define CONFIG_NULL_MUXER 0 #define CONFIG_NUT_MUXER 0 #define CONFIG_OGA_MUXER 0 #define CONFIG_OGG_MUXER 0 #define CONFIG_OGV_MUXER 0 #define CONFIG_OMA_MUXER 0 #define CONFIG_OPUS_MUXER 0 #define CONFIG_PCM_ALAW_MUXER 0 #define CONFIG_PCM_MULAW_MUXER 0 #define CONFIG_PCM_F64BE_MUXER 0 #define CONFIG_PCM_F64LE_MUXER 0 #define CONFIG_PCM_F32BE_MUXER 0 #define CONFIG_PCM_F32LE_MUXER 0 #define CONFIG_PCM_S32BE_MUXER 0 #define CONFIG_PCM_S32LE_MUXER 0 #define CONFIG_PCM_S24BE_MUXER 0 #define CONFIG_PCM_S24LE_MUXER 0 #define CONFIG_PCM_S16BE_MUXER 0 #define CONFIG_PCM_S16LE_MUXER 0 #define CONFIG_PCM_S8_MUXER 0 #define CONFIG_PCM_U32BE_MUXER 0 #define CONFIG_PCM_U32LE_MUXER 0 #define CONFIG_PCM_U24BE_MUXER 0 #define CONFIG_PCM_U24LE_MUXER 0 #define CONFIG_PCM_U16BE_MUXER 0 #define CONFIG_PCM_U16LE_MUXER 0 #define CONFIG_PCM_U8_MUXER 0 #define CONFIG_PSP_MUXER 0 #define CONFIG_RAWVIDEO_MUXER 0 #define CONFIG_RM_MUXER 0 #define CONFIG_ROQ_MUXER 0 #define CONFIG_RSO_MUXER 0 #define CONFIG_RTP_MUXER 0 #define CONFIG_RTP_MPEGTS_MUXER 0 #define CONFIG_RTSP_MUXER 0 #define CONFIG_SAP_MUXER 0 #define CONFIG_SEGMENT_MUXER 0 #define CONFIG_STREAM_SEGMENT_MUXER 0 #define CONFIG_SINGLEJPEG_MUXER 0 #define CONFIG_SMJPEG_MUXER 0 #define CONFIG_SMOOTHSTREAMING_MUXER 0 #define CONFIG_SOX_MUXER 0 #define CONFIG_SPX_MUXER 0 #define CONFIG_SPDIF_MUXER 0 #define CONFIG_SRT_MUXER 0 #define CONFIG_SWF_MUXER 0 #define CONFIG_TEE_MUXER 0 #define CONFIG_TG2_MUXER 0 #define CONFIG_TGP_MUXER 0 #define CONFIG_MKVTIMESTAMP_V2_MUXER 0 #define CONFIG_TRUEHD_MUXER 0 #define CONFIG_TTA_MUXER 0 #define CONFIG_UNCODEDFRAMECRC_MUXER 0 #define CONFIG_VC1_MUXER 0 #define CONFIG_VC1T_MUXER 0 #define CONFIG_VOC_MUXER 0 #define CONFIG_W64_MUXER 0 #define CONFIG_WAV_MUXER 0 #define CONFIG_WEBM_MUXER 0 #define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 #define CONFIG_WEBM_CHUNK_MUXER 0 #define CONFIG_WEBP_MUXER 0 #define CONFIG_WEBVTT_MUXER 0 #define CONFIG_WTV_MUXER 0 #define CONFIG_WV_MUXER 0 #define CONFIG_YUV4MPEGPIPE_MUXER 0 #define CONFIG_CHROMAPRINT_MUXER 0 #define CONFIG_LIBNUT_MUXER 0 #define CONFIG_ALSA_OUTDEV 0 #define CONFIG_CACA_OUTDEV 0 #define CONFIG_DECKLINK_OUTDEV 0 #define CONFIG_FBDEV_OUTDEV 0 #define CONFIG_OPENGL_OUTDEV 0 #define CONFIG_OSS_OUTDEV 0 #define CONFIG_PULSE_OUTDEV 0 #define CONFIG_SDL2_OUTDEV 0 #define CONFIG_SNDIO_OUTDEV 0 #define CONFIG_V4L2_OUTDEV 0 #define CONFIG_XV_OUTDEV 0 #define CONFIG_AAC_PARSER 1 #define CONFIG_AAC_LATM_PARSER 1 #define CONFIG_AC3_PARSER 0 #define CONFIG_ADX_PARSER 0 #define CONFIG_BMP_PARSER 0 #define CONFIG_CAVSVIDEO_PARSER 0 #define CONFIG_COOK_PARSER 0 #define CONFIG_DCA_PARSER 0 #define CONFIG_DIRAC_PARSER 0 #define CONFIG_DNXHD_PARSER 0 #define CONFIG_DPX_PARSER 0 #define CONFIG_DVAUDIO_PARSER 0 #define CONFIG_DVBSUB_PARSER 0 #define CONFIG_DVDSUB_PARSER 0 #define CONFIG_DVD_NAV_PARSER 0 #define CONFIG_FLAC_PARSER 0 #define CONFIG_G729_PARSER 0 #define CONFIG_GSM_PARSER 0 #define CONFIG_H261_PARSER 0 #define CONFIG_H263_PARSER 1 #define CONFIG_H264_PARSER 1 #define CONFIG_HEVC_PARSER 0 #define CONFIG_MJPEG_PARSER 0 #define CONFIG_MLP_PARSER 0 #define CONFIG_MPEG4VIDEO_PARSER 0 #define CONFIG_MPEGAUDIO_PARSER 1 #define CONFIG_MPEGVIDEO_PARSER 0 #define CONFIG_OPUS_PARSER 0 #define CONFIG_PNG_PARSER 0 #define CONFIG_PNM_PARSER 0 #define CONFIG_RV30_PARSER 0 #define CONFIG_RV40_PARSER 0 #define CONFIG_TAK_PARSER 0 #define CONFIG_VC1_PARSER 0 #define CONFIG_VORBIS_PARSER 0 #define CONFIG_VP3_PARSER 0 #define CONFIG_VP8_PARSER 0 #define CONFIG_VP9_PARSER 0 #define CONFIG_ASYNC_PROTOCOL 1 #define CONFIG_BLURAY_PROTOCOL 0 #define CONFIG_CACHE_PROTOCOL 1 #define CONFIG_CONCAT_PROTOCOL 0 #define CONFIG_CRYPTO_PROTOCOL 0 #define CONFIG_DATA_PROTOCOL 1 #define CONFIG_FFRTMPCRYPT_PROTOCOL 0 #define CONFIG_FFRTMPHTTP_PROTOCOL 1 #define CONFIG_FILE_PROTOCOL 1 #define CONFIG_FTP_PROTOCOL 1 #define CONFIG_GOPHER_PROTOCOL 0 #define CONFIG_HLS_PROTOCOL 1 #define CONFIG_HTTP_PROTOCOL 1 #define CONFIG_HTTPPROXY_PROTOCOL 1 #define CONFIG_HTTPS_PROTOCOL 1 #define CONFIG_ICECAST_PROTOCOL 0 #define CONFIG_IJKHTTPHOOK_PROTOCOL 1 #define CONFIG_IJKLONGURL_PROTOCOL 1 #define CONFIG_IJKMEDIADATASOURCE_PROTOCOL 1 #define CONFIG_IJKSEGMENT_PROTOCOL 1 #define CONFIG_IJKTCPHOOK_PROTOCOL 1 #define CONFIG_IJKIO_PROTOCOL 1 #define CONFIG_MMSH_PROTOCOL 0 #define CONFIG_MMST_PROTOCOL 0 #define CONFIG_MD5_PROTOCOL 0 #define CONFIG_PIPE_PROTOCOL 1 #define CONFIG_RTMP_PROTOCOL 1 #define CONFIG_RTMPE_PROTOCOL 0 #define CONFIG_RTMPS_PROTOCOL 0 #define CONFIG_RTMPT_PROTOCOL 1 #define CONFIG_RTMPTE_PROTOCOL 0 #define CONFIG_RTMPTS_PROTOCOL 0 #define CONFIG_RTP_PROTOCOL 0 #define CONFIG_SCTP_PROTOCOL 0 #define CONFIG_SRTP_PROTOCOL 0 #define CONFIG_SUBFILE_PROTOCOL 0 #define CONFIG_TEE_PROTOCOL 1 #define CONFIG_TCP_PROTOCOL 1 #define CONFIG_TLS_GNUTLS_PROTOCOL 0 #define CONFIG_TLS_SCHANNEL_PROTOCOL 0 #define CONFIG_TLS_SECURETRANSPORT_PROTOCOL 0 #define CONFIG_TLS_OPENSSL_PROTOCOL 1 #define CONFIG_UDP_PROTOCOL 1 #define CONFIG_UDPLITE_PROTOCOL 1 #define CONFIG_UNIX_PROTOCOL 0 #define CONFIG_LIBRTMP_PROTOCOL 0 #define CONFIG_LIBRTMPE_PROTOCOL 0 #define CONFIG_LIBRTMPS_PROTOCOL 0 #define CONFIG_LIBRTMPT_PROTOCOL 0 #define CONFIG_LIBRTMPTE_PROTOCOL 0 #define CONFIG_LIBSSH_PROTOCOL 0 #define CONFIG_LIBSMBCLIENT_PROTOCOL 0 #endif /* FFMPEG_CONFIG_H */ ================================================ FILE: 3rParty/FFmpeg/include/libffmpeg/config.h ================================================ /* * config.h * * Copyright (c) 2013 Bilibili * Copyright (c) 2013 Zhang Rui * * This file is part of ijkPlayer. * * ijkPlayer 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. * * ijkPlayer 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 ijkPlayer; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #if defined(__aarch64__) # include "arm64/config.h" #elif defined(__x86_64__) # include "x86_64/config.h" #elif defined(__arm__) # if defined(__ARM_ARCH_7S__) # include "armv7s/config.h" # elif defined(__ARM_ARCH) # if __ARM_ARCH == 7 # include "armv7/config.h" # else # error Unsupport ARM architecture # endif # else # error Unsupport ARM architecture # endif #elif defined(__i386__) # include "i386/config.h" #else # error Unsupport architecture #endif ================================================ FILE: 3rParty/FFmpeg/include/libffmpeg/i386/config.h ================================================ /* Automatically generated by configure - do not modify! */ #ifndef FFMPEG_CONFIG_H #define FFMPEG_CONFIG_H #define FFMPEG_CONFIGURATION "--disable-gpl --disable-nonfree --enable-runtime-cpudetect --disable-gray --disable-swscale-alpha --disable-programs --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-avdevice --enable-avcodec --enable-avformat --enable-avutil --enable-swresample --enable-swscale --disable-postproc --enable-avfilter --disable-avresample --enable-network --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --disable-encoders --disable-decoders --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=flv --enable-decoder=h264 --enable-decoder='mp3*' --enable-decoder=vp6f --disable-hwaccels --disable-muxers --enable-muxer=mp4 --disable-demuxers --enable-demuxer=aac --enable-demuxer=concat --enable-demuxer=data --enable-demuxer=flv --enable-demuxer=hls --enable-demuxer=live_flv --enable-demuxer=mov --enable-demuxer=mp3 --enable-demuxer=mpegps --enable-demuxer=mpegts --enable-demuxer=mpegvideo --disable-parsers --enable-parser=aac --enable-parser=aac_latm --enable-parser=h264 --enable-bsfs --disable-bsf=chomp --disable-bsf=dca_core --disable-bsf=dump_extradata --disable-bsf=hevc_mp4toannexb --disable-bsf=imx_dump_header --disable-bsf=mjpeg2jpeg --disable-bsf=mjpega_dump_header --disable-bsf=mov2textsub --disable-bsf=mp3_header_decompress --disable-bsf=mpeg4_unpack_bframes --disable-bsf=noise --disable-bsf=remove_extradata --disable-bsf=text2movsub --disable-bsf=vp9_superframe --enable-protocols --enable-protocol=async --disable-protocol=bluray --disable-protocol=concat --disable-protocol=crypto --disable-protocol=ffrtmpcrypt --enable-protocol=ffrtmphttp --disable-protocol=gopher --disable-protocol=icecast --disable-protocol='librtmp*' --disable-protocol=libssh --disable-protocol=md5 --disable-protocol=mmsh --disable-protocol=mmst --disable-protocol='rtmp*' --enable-protocol=rtmp --enable-protocol=rtmpt --disable-protocol=rtp --disable-protocol=sctp --disable-protocol=srtp --disable-protocol=subfile --disable-protocol=unix --disable-devices --disable-filters --disable-iconv --disable-audiotoolbox --disable-videotoolbox --enable-cross-compile --disable-stripping --arch=i386 --target-os=darwin --enable-static --disable-shared --disable-asm --disable-mmx --assert-level=2 --prefix=/Users/lhl/Downloads/ijkplayer-master/ios/build/ffmpeg-i386/output --enable-openssl --cc='xcrun -sdk iphonesimulator clang' --extra-cflags=' -arch i386 -mios-simulator-version-min=6.0 -I/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-i386/output/include' --extra-cxxflags=' -arch i386 -mios-simulator-version-min=6.0 -I/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-i386/output/include' --extra-ldflags=' -arch i386 -mios-simulator-version-min=6.0 -arch i386 -mios-simulator-version-min=6.0 -I/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-i386/output/include -L/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-i386/output/lib -lssl -lcrypto'" #define FFMPEG_LICENSE "LGPL version 2.1 or later" #define CONFIG_THIS_YEAR 2016 #define FFMPEG_DATADIR "/Users/lhl/Downloads/ijkplayer-master/ios/build/ffmpeg-i386/output/share/ffmpeg" #define AVCONV_DATADIR "/Users/lhl/Downloads/ijkplayer-master/ios/build/ffmpeg-i386/output/share/ffmpeg" #define CC_IDENT "Apple LLVM version 8.0.0 (clang-800.0.42.1)" #define av_restrict restrict #define EXTERN_PREFIX "_" #define EXTERN_ASM _ #define BUILDSUF "" #define SLIBSUF ".dylib" #define HAVE_MMX2 HAVE_MMXEXT #define SWS_MAX_FILTER_SIZE 256 #define ASSERT_LEVEL 2 #define ARCH_AARCH64 0 #define ARCH_ALPHA 0 #define ARCH_ARM 0 #define ARCH_AVR32 0 #define ARCH_AVR32_AP 0 #define ARCH_AVR32_UC 0 #define ARCH_BFIN 0 #define ARCH_IA64 0 #define ARCH_M68K 0 #define ARCH_MIPS 0 #define ARCH_MIPS64 0 #define ARCH_PARISC 0 #define ARCH_PPC 0 #define ARCH_PPC64 0 #define ARCH_S390 0 #define ARCH_SH4 0 #define ARCH_SPARC 0 #define ARCH_SPARC64 0 #define ARCH_TILEGX 0 #define ARCH_TILEPRO 0 #define ARCH_TOMI 0 #define ARCH_X86 0 #define ARCH_X86_32 0 #define ARCH_X86_64 0 #define HAVE_ARMV5TE 0 #define HAVE_ARMV6 0 #define HAVE_ARMV6T2 0 #define HAVE_ARMV8 0 #define HAVE_NEON 0 #define HAVE_VFP 0 #define HAVE_VFPV3 0 #define HAVE_SETEND 0 #define HAVE_ALTIVEC 0 #define HAVE_DCBZL 0 #define HAVE_LDBRX 0 #define HAVE_POWER8 0 #define HAVE_PPC4XX 0 #define HAVE_VSX 0 #define HAVE_AESNI 0 #define HAVE_AMD3DNOW 0 #define HAVE_AMD3DNOWEXT 0 #define HAVE_AVX 0 #define HAVE_AVX2 0 #define HAVE_FMA3 0 #define HAVE_FMA4 0 #define HAVE_MMX 0 #define HAVE_MMXEXT 0 #define HAVE_SSE 0 #define HAVE_SSE2 0 #define HAVE_SSE3 0 #define HAVE_SSE4 0 #define HAVE_SSE42 0 #define HAVE_SSSE3 0 #define HAVE_XOP 0 #define HAVE_CPUNOP 0 #define HAVE_I686 0 #define HAVE_MIPSFPU 0 #define HAVE_MIPS32R2 0 #define HAVE_MIPS32R5 0 #define HAVE_MIPS64R2 0 #define HAVE_MIPS32R6 0 #define HAVE_MIPS64R6 0 #define HAVE_MIPSDSP 0 #define HAVE_MIPSDSPR2 0 #define HAVE_MSA 0 #define HAVE_LOONGSON2 0 #define HAVE_LOONGSON3 0 #define HAVE_MMI 0 #define HAVE_ARMV5TE_EXTERNAL 0 #define HAVE_ARMV6_EXTERNAL 0 #define HAVE_ARMV6T2_EXTERNAL 0 #define HAVE_ARMV8_EXTERNAL 0 #define HAVE_NEON_EXTERNAL 0 #define HAVE_VFP_EXTERNAL 0 #define HAVE_VFPV3_EXTERNAL 0 #define HAVE_SETEND_EXTERNAL 0 #define HAVE_ALTIVEC_EXTERNAL 0 #define HAVE_DCBZL_EXTERNAL 0 #define HAVE_LDBRX_EXTERNAL 0 #define HAVE_POWER8_EXTERNAL 0 #define HAVE_PPC4XX_EXTERNAL 0 #define HAVE_VSX_EXTERNAL 0 #define HAVE_AESNI_EXTERNAL 0 #define HAVE_AMD3DNOW_EXTERNAL 0 #define HAVE_AMD3DNOWEXT_EXTERNAL 0 #define HAVE_AVX_EXTERNAL 0 #define HAVE_AVX2_EXTERNAL 0 #define HAVE_FMA3_EXTERNAL 0 #define HAVE_FMA4_EXTERNAL 0 #define HAVE_MMX_EXTERNAL 0 #define HAVE_MMXEXT_EXTERNAL 0 #define HAVE_SSE_EXTERNAL 0 #define HAVE_SSE2_EXTERNAL 0 #define HAVE_SSE3_EXTERNAL 0 #define HAVE_SSE4_EXTERNAL 0 #define HAVE_SSE42_EXTERNAL 0 #define HAVE_SSSE3_EXTERNAL 0 #define HAVE_XOP_EXTERNAL 0 #define HAVE_CPUNOP_EXTERNAL 0 #define HAVE_I686_EXTERNAL 0 #define HAVE_MIPSFPU_EXTERNAL 0 #define HAVE_MIPS32R2_EXTERNAL 0 #define HAVE_MIPS32R5_EXTERNAL 0 #define HAVE_MIPS64R2_EXTERNAL 0 #define HAVE_MIPS32R6_EXTERNAL 0 #define HAVE_MIPS64R6_EXTERNAL 0 #define HAVE_MIPSDSP_EXTERNAL 0 #define HAVE_MIPSDSPR2_EXTERNAL 0 #define HAVE_MSA_EXTERNAL 0 #define HAVE_LOONGSON2_EXTERNAL 0 #define HAVE_LOONGSON3_EXTERNAL 0 #define HAVE_MMI_EXTERNAL 0 #define HAVE_ARMV5TE_INLINE 0 #define HAVE_ARMV6_INLINE 0 #define HAVE_ARMV6T2_INLINE 0 #define HAVE_ARMV8_INLINE 0 #define HAVE_NEON_INLINE 0 #define HAVE_VFP_INLINE 0 #define HAVE_VFPV3_INLINE 0 #define HAVE_SETEND_INLINE 0 #define HAVE_ALTIVEC_INLINE 0 #define HAVE_DCBZL_INLINE 0 #define HAVE_LDBRX_INLINE 0 #define HAVE_POWER8_INLINE 0 #define HAVE_PPC4XX_INLINE 0 #define HAVE_VSX_INLINE 0 #define HAVE_AESNI_INLINE 0 #define HAVE_AMD3DNOW_INLINE 0 #define HAVE_AMD3DNOWEXT_INLINE 0 #define HAVE_AVX_INLINE 0 #define HAVE_AVX2_INLINE 0 #define HAVE_FMA3_INLINE 0 #define HAVE_FMA4_INLINE 0 #define HAVE_MMX_INLINE 0 #define HAVE_MMXEXT_INLINE 0 #define HAVE_SSE_INLINE 0 #define HAVE_SSE2_INLINE 0 #define HAVE_SSE3_INLINE 0 #define HAVE_SSE4_INLINE 0 #define HAVE_SSE42_INLINE 0 #define HAVE_SSSE3_INLINE 0 #define HAVE_XOP_INLINE 0 #define HAVE_CPUNOP_INLINE 0 #define HAVE_I686_INLINE 0 #define HAVE_MIPSFPU_INLINE 0 #define HAVE_MIPS32R2_INLINE 0 #define HAVE_MIPS32R5_INLINE 0 #define HAVE_MIPS64R2_INLINE 0 #define HAVE_MIPS32R6_INLINE 0 #define HAVE_MIPS64R6_INLINE 0 #define HAVE_MIPSDSP_INLINE 0 #define HAVE_MIPSDSPR2_INLINE 0 #define HAVE_MSA_INLINE 0 #define HAVE_LOONGSON2_INLINE 0 #define HAVE_LOONGSON3_INLINE 0 #define HAVE_MMI_INLINE 0 #define HAVE_ALIGNED_STACK 0 #define HAVE_FAST_64BIT 0 #define HAVE_FAST_CLZ 0 #define HAVE_FAST_CMOV 0 #define HAVE_LOCAL_ALIGNED_8 1 #define HAVE_LOCAL_ALIGNED_16 1 #define HAVE_LOCAL_ALIGNED_32 1 #define HAVE_SIMD_ALIGN_16 0 #define HAVE_ATOMICS_GCC 1 #define HAVE_ATOMICS_SUNCC 0 #define HAVE_ATOMICS_WIN32 0 #define HAVE_ATOMIC_CAS_PTR 0 #define HAVE_ATOMIC_COMPARE_EXCHANGE 1 #define HAVE_MACHINE_RW_BARRIER 0 #define HAVE_MEMORYBARRIER 0 #define HAVE_MM_EMPTY 1 #define HAVE_RDTSC 0 #define HAVE_SARESTART 1 #define HAVE_SEM_TIMEDWAIT 0 #define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 #define HAVE_CABS 1 #define HAVE_CEXP 1 #define HAVE_INLINE_ASM 1 #define HAVE_SYMVER 1 #define HAVE_YASM 0 #define HAVE_BIGENDIAN 0 #define HAVE_FAST_UNALIGNED 0 #define HAVE_ALSA_ASOUNDLIB_H 0 #define HAVE_ALTIVEC_H 0 #define HAVE_ARPA_INET_H 1 #define HAVE_ASM_TYPES_H 0 #define HAVE_CDIO_PARANOIA_H 0 #define HAVE_CDIO_PARANOIA_PARANOIA_H 0 #define HAVE_DISPATCH_DISPATCH_H 1 #define HAVE_DEV_BKTR_IOCTL_BT848_H 0 #define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 #define HAVE_DEV_IC_BT8XX_H 0 #define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 #define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 #define HAVE_DIRECT_H 0 #define HAVE_DIRENT_H 1 #define HAVE_DLFCN_H 1 #define HAVE_D3D11_H 0 #define HAVE_DXVA_H 0 #define HAVE_ES2_GL_H 0 #define HAVE_GSM_H 0 #define HAVE_IO_H 0 #define HAVE_MACH_MACH_TIME_H 1 #define HAVE_MACHINE_IOCTL_BT848_H 0 #define HAVE_MACHINE_IOCTL_METEOR_H 0 #define HAVE_MALLOC_H 0 #define HAVE_OPENCV2_CORE_CORE_C_H 0 #define HAVE_OPENJPEG_2_1_OPENJPEG_H 0 #define HAVE_OPENJPEG_2_0_OPENJPEG_H 0 #define HAVE_OPENJPEG_1_5_OPENJPEG_H 0 #define HAVE_OPENGL_GL3_H 0 #define HAVE_POLL_H 1 #define HAVE_SNDIO_H 0 #define HAVE_SOUNDCARD_H 0 #define HAVE_SYS_MMAN_H 1 #define HAVE_SYS_PARAM_H 1 #define HAVE_SYS_RESOURCE_H 1 #define HAVE_SYS_SELECT_H 1 #define HAVE_SYS_SOUNDCARD_H 0 #define HAVE_SYS_TIME_H 1 #define HAVE_SYS_UN_H 1 #define HAVE_SYS_VIDEOIO_H 0 #define HAVE_TERMIOS_H 1 #define HAVE_UDPLITE_H 0 #define HAVE_UNISTD_H 1 #define HAVE_VALGRIND_VALGRIND_H 0 #define HAVE_WINDOWS_H 0 #define HAVE_WINSOCK2_H 0 #define HAVE_INTRINSICS_NEON 0 #define HAVE_ATANF 1 #define HAVE_ATAN2F 1 #define HAVE_CBRT 1 #define HAVE_CBRTF 1 #define HAVE_COPYSIGN 1 #define HAVE_COSF 1 #define HAVE_ERF 1 #define HAVE_EXP2 1 #define HAVE_EXP2F 1 #define HAVE_EXPF 1 #define HAVE_HYPOT 1 #define HAVE_ISFINITE 1 #define HAVE_ISINF 1 #define HAVE_ISNAN 1 #define HAVE_LDEXPF 1 #define HAVE_LLRINT 1 #define HAVE_LLRINTF 1 #define HAVE_LOG2 1 #define HAVE_LOG2F 1 #define HAVE_LOG10F 1 #define HAVE_LRINT 1 #define HAVE_LRINTF 1 #define HAVE_POWF 1 #define HAVE_RINT 1 #define HAVE_ROUND 1 #define HAVE_ROUNDF 1 #define HAVE_SINF 1 #define HAVE_TRUNC 1 #define HAVE_TRUNCF 1 #define HAVE_ACCESS 1 #define HAVE_ALIGNED_MALLOC 0 #define HAVE_ARC4RANDOM 1 #define HAVE_CLOCK_GETTIME 1 #define HAVE_CLOSESOCKET 0 #define HAVE_COMMANDLINETOARGVW 0 #define HAVE_COTASKMEMFREE 0 #define HAVE_CRYPTGENRANDOM 0 #define HAVE_DLOPEN 1 #define HAVE_FCNTL 1 #define HAVE_FLT_LIM 1 #define HAVE_FORK 1 #define HAVE_GETADDRINFO 1 #define HAVE_GETHRTIME 0 #define HAVE_GETOPT 1 #define HAVE_GETPROCESSAFFINITYMASK 0 #define HAVE_GETPROCESSMEMORYINFO 0 #define HAVE_GETPROCESSTIMES 0 #define HAVE_GETRUSAGE 1 #define HAVE_GETSYSTEMTIMEASFILETIME 0 #define HAVE_GETTIMEOFDAY 1 #define HAVE_GLOB 1 #define HAVE_GLXGETPROCADDRESS 0 #define HAVE_GMTIME_R 1 #define HAVE_INET_ATON 1 #define HAVE_ISATTY 1 #define HAVE_JACK_PORT_GET_LATENCY_RANGE 0 #define HAVE_KBHIT 0 #define HAVE_LOADLIBRARY 0 #define HAVE_LOCALTIME_R 1 #define HAVE_LSTAT 1 #define HAVE_LZO1X_999_COMPRESS 0 #define HAVE_MACH_ABSOLUTE_TIME 1 #define HAVE_MAPVIEWOFFILE 0 #define HAVE_MEMALIGN 0 #define HAVE_MKSTEMP 1 #define HAVE_MMAP 1 #define HAVE_MPROTECT 1 #define HAVE_NANOSLEEP 1 #define HAVE_PEEKNAMEDPIPE 0 #define HAVE_POSIX_MEMALIGN 1 #define HAVE_PTHREAD_CANCEL 1 #define HAVE_SCHED_GETAFFINITY 0 #define HAVE_SETCONSOLETEXTATTRIBUTE 0 #define HAVE_SETCONSOLECTRLHANDLER 0 #define HAVE_SETMODE 0 #define HAVE_SETRLIMIT 1 #define HAVE_SLEEP 0 #define HAVE_STRERROR_R 1 #define HAVE_SYSCONF 1 #define HAVE_SYSCTL 1 #define HAVE_USLEEP 1 #define HAVE_UTGETOSTYPEFROMSTRING 0 #define HAVE_VIRTUALALLOC 0 #define HAVE_WGLGETPROCADDRESS 0 #define HAVE_PTHREADS 1 #define HAVE_OS2THREADS 0 #define HAVE_W32THREADS 0 #define HAVE_AS_DN_DIRECTIVE 0 #define HAVE_AS_FUNC 0 #define HAVE_AS_OBJECT_ARCH 0 #define HAVE_ASM_MOD_Q 0 #define HAVE_ATTRIBUTE_MAY_ALIAS 1 #define HAVE_ATTRIBUTE_PACKED 1 #define HAVE_EBP_AVAILABLE 1 #define HAVE_EBX_AVAILABLE 1 #define HAVE_GNU_AS 0 #define HAVE_GNU_WINDRES 0 #define HAVE_IBM_ASM 0 #define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 1 #define HAVE_INLINE_ASM_LABELS 1 #define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 #define HAVE_PRAGMA_DEPRECATED 1 #define HAVE_RSYNC_CONTIMEOUT 0 #define HAVE_SYMVER_ASM_LABEL 1 #define HAVE_SYMVER_GNU_ASM 0 #define HAVE_VFP_ARGS 0 #define HAVE_XFORM_ASM 0 #define HAVE_XMM_CLOBBERS 1 #define HAVE_CONDITION_VARIABLE_PTR 0 #define HAVE_SOCKLEN_T 1 #define HAVE_STRUCT_ADDRINFO 1 #define HAVE_STRUCT_GROUP_SOURCE_REQ 1 #define HAVE_STRUCT_IP_MREQ_SOURCE 1 #define HAVE_STRUCT_IPV6_MREQ 1 #define HAVE_STRUCT_MSGHDR_MSG_FLAGS 1 #define HAVE_STRUCT_POLLFD 1 #define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1 #define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 #define HAVE_STRUCT_SOCKADDR_IN6 1 #define HAVE_STRUCT_SOCKADDR_SA_LEN 1 #define HAVE_STRUCT_SOCKADDR_STORAGE 1 #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 #define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 #define HAVE_ATOMICS_NATIVE 1 #define HAVE_DOS_PATHS 0 #define HAVE_DXVA2_LIB 0 #define HAVE_DXVA2API_COBJ 0 #define HAVE_LIBC_MSVCRT 0 #define HAVE_LIBDC1394_1 0 #define HAVE_LIBDC1394_2 0 #define HAVE_MAKEINFO 1 #define HAVE_MAKEINFO_HTML 0 #define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 #define HAVE_PERL 1 #define HAVE_POD2MAN 1 #define HAVE_SDL2 0 #define HAVE_SECTION_DATA_REL_RO 0 #define HAVE_TEXI2HTML 0 #define HAVE_THREADS 1 #define HAVE_VAAPI_DRM 0 #define HAVE_VAAPI_X11 0 #define HAVE_VDPAU_X11 0 #define HAVE_WINRT 0 #define HAVE_XLIB 0 #define CONFIG_BSFS 1 #define CONFIG_DECODERS 1 #define CONFIG_ENCODERS 0 #define CONFIG_HWACCELS 0 #define CONFIG_PARSERS 1 #define CONFIG_INDEVS 0 #define CONFIG_OUTDEVS 0 #define CONFIG_FILTERS 0 #define CONFIG_DEMUXERS 1 #define CONFIG_MUXERS 1 #define CONFIG_PROTOCOLS 1 #define CONFIG_DOC 0 #define CONFIG_HTMLPAGES 0 #define CONFIG_MANPAGES 0 #define CONFIG_PODPAGES 0 #define CONFIG_TXTPAGES 0 #define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 #define CONFIG_AVIO_READING_EXAMPLE 1 #define CONFIG_DECODING_ENCODING_EXAMPLE 1 #define CONFIG_DEMUXING_DECODING_EXAMPLE 1 #define CONFIG_EXTRACT_MVS_EXAMPLE 1 #define CONFIG_FILTER_AUDIO_EXAMPLE 1 #define CONFIG_FILTERING_AUDIO_EXAMPLE 1 #define CONFIG_FILTERING_VIDEO_EXAMPLE 1 #define CONFIG_HTTP_MULTICLIENT_EXAMPLE 1 #define CONFIG_METADATA_EXAMPLE 1 #define CONFIG_MUXING_EXAMPLE 1 #define CONFIG_QSVDEC_EXAMPLE 0 #define CONFIG_REMUXING_EXAMPLE 1 #define CONFIG_RESAMPLING_AUDIO_EXAMPLE 1 #define CONFIG_SCALING_VIDEO_EXAMPLE 1 #define CONFIG_TRANSCODE_AAC_EXAMPLE 1 #define CONFIG_TRANSCODING_EXAMPLE 1 #define CONFIG_AVISYNTH 0 #define CONFIG_BZLIB 0 #define CONFIG_CHROMAPRINT 0 #define CONFIG_CRYSTALHD 0 #define CONFIG_DECKLINK 0 #define CONFIG_FREI0R 0 #define CONFIG_GCRYPT 0 #define CONFIG_GMP 0 #define CONFIG_GNUTLS 0 #define CONFIG_ICONV 0 #define CONFIG_JNI 0 #define CONFIG_LADSPA 0 #define CONFIG_LIBASS 0 #define CONFIG_LIBBLURAY 0 #define CONFIG_LIBBS2B 0 #define CONFIG_LIBCACA 0 #define CONFIG_LIBCDIO 0 #define CONFIG_LIBCELT 0 #define CONFIG_LIBDC1394 0 #define CONFIG_LIBEBUR128 0 #define CONFIG_LIBFDK_AAC 0 #define CONFIG_LIBFLITE 0 #define CONFIG_LIBFONTCONFIG 0 #define CONFIG_LIBFREETYPE 0 #define CONFIG_LIBFRIBIDI 0 #define CONFIG_LIBGME 0 #define CONFIG_LIBGSM 0 #define CONFIG_LIBIEC61883 0 #define CONFIG_LIBILBC 0 #define CONFIG_LIBKVAZAAR 0 #define CONFIG_LIBMODPLUG 0 #define CONFIG_LIBMP3LAME 0 #define CONFIG_LIBNUT 0 #define CONFIG_LIBOPENCORE_AMRNB 0 #define CONFIG_LIBOPENCORE_AMRWB 0 #define CONFIG_LIBOPENCV 0 #define CONFIG_LIBOPENH264 0 #define CONFIG_LIBOPENJPEG 0 #define CONFIG_LIBOPENMPT 0 #define CONFIG_LIBOPUS 0 #define CONFIG_LIBPULSE 0 #define CONFIG_LIBRTMP 0 #define CONFIG_LIBRUBBERBAND 0 #define CONFIG_LIBSCHROEDINGER 0 #define CONFIG_LIBSHINE 0 #define CONFIG_LIBSMBCLIENT 0 #define CONFIG_LIBSNAPPY 0 #define CONFIG_LIBSOXR 0 #define CONFIG_LIBSPEEX 0 #define CONFIG_LIBSSH 0 #define CONFIG_LIBTESSERACT 0 #define CONFIG_LIBTHEORA 0 #define CONFIG_LIBTWOLAME 0 #define CONFIG_LIBV4L2 0 #define CONFIG_LIBVIDSTAB 0 #define CONFIG_LIBVO_AMRWBENC 0 #define CONFIG_LIBVORBIS 0 #define CONFIG_LIBVPX 0 #define CONFIG_LIBWAVPACK 0 #define CONFIG_LIBWEBP 0 #define CONFIG_LIBX264 0 #define CONFIG_LIBX265 0 #define CONFIG_LIBXAVS 0 #define CONFIG_LIBXCB 0 #define CONFIG_LIBXCB_SHM 0 #define CONFIG_LIBXCB_SHAPE 0 #define CONFIG_LIBXCB_XFIXES 0 #define CONFIG_LIBXVID 0 #define CONFIG_LIBZIMG 0 #define CONFIG_LIBZMQ 0 #define CONFIG_LIBZVBI 0 #define CONFIG_LZMA 0 #define CONFIG_MEDIACODEC 0 #define CONFIG_NETCDF 0 #define CONFIG_OPENAL 0 #define CONFIG_OPENCL 0 #define CONFIG_OPENGL 0 #define CONFIG_OPENSSL 1 #define CONFIG_SCHANNEL 0 #define CONFIG_SDL 0 #define CONFIG_SDL2 0 #define CONFIG_SECURETRANSPORT 0 #define CONFIG_VIDEOTOOLBOX 0 #define CONFIG_X11GRAB 0 #define CONFIG_XLIB 0 #define CONFIG_ZLIB 1 #define CONFIG_AUDIOTOOLBOX 0 #define CONFIG_CUDA 0 #define CONFIG_CUVID 0 #define CONFIG_D3D11VA 0 #define CONFIG_DXVA2 0 #define CONFIG_LIBMFX 0 #define CONFIG_LIBNPP 0 #define CONFIG_MMAL 0 #define CONFIG_NVENC 0 #define CONFIG_OMX 0 #define CONFIG_VAAPI 0 #define CONFIG_VDA 0 #define CONFIG_VDPAU 0 #define CONFIG_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_XVMC 0 #define CONFIG_FTRAPV 0 #define CONFIG_GRAY 0 #define CONFIG_HARDCODED_TABLES 0 #define CONFIG_OMX_RPI 0 #define CONFIG_RUNTIME_CPUDETECT 1 #define CONFIG_SAFE_BITSTREAM_READER 1 #define CONFIG_SHARED 0 #define CONFIG_SMALL 0 #define CONFIG_STATIC 1 #define CONFIG_SWSCALE_ALPHA 0 #define CONFIG_GPL 0 #define CONFIG_NONFREE 0 #define CONFIG_VERSION3 0 #define CONFIG_AVCODEC 1 #define CONFIG_AVDEVICE 0 #define CONFIG_AVFILTER 1 #define CONFIG_AVFORMAT 1 #define CONFIG_AVRESAMPLE 0 #define CONFIG_AVUTIL 1 #define CONFIG_POSTPROC 0 #define CONFIG_SWRESAMPLE 1 #define CONFIG_SWSCALE 1 #define CONFIG_FFPLAY 0 #define CONFIG_FFPROBE 0 #define CONFIG_FFSERVER 0 #define CONFIG_FFMPEG 0 #define CONFIG_DCT 1 #define CONFIG_DWT 0 #define CONFIG_ERROR_RESILIENCE 1 #define CONFIG_FAAN 1 #define CONFIG_FAST_UNALIGNED 0 #define CONFIG_FFT 1 #define CONFIG_LSP 0 #define CONFIG_LZO 0 #define CONFIG_MDCT 1 #define CONFIG_PIXELUTILS 0 #define CONFIG_NETWORK 1 #define CONFIG_RDFT 1 #define CONFIG_FONTCONFIG 0 #define CONFIG_MEMALIGN_HACK 0 #define CONFIG_MEMORY_POISONING 0 #define CONFIG_NEON_CLOBBER_TEST 0 #define CONFIG_PIC 0 #define CONFIG_POD2MAN 1 #define CONFIG_RAISE_MAJOR 0 #define CONFIG_THUMB 0 #define CONFIG_VALGRIND_BACKTRACE 0 #define CONFIG_XMM_CLOBBER_TEST 0 #define CONFIG_AANDCTTABLES 0 #define CONFIG_AC3DSP 0 #define CONFIG_AUDIO_FRAME_QUEUE 0 #define CONFIG_AUDIODSP 0 #define CONFIG_BLOCKDSP 1 #define CONFIG_BSWAPDSP 0 #define CONFIG_CABAC 1 #define CONFIG_DIRAC_PARSE 0 #define CONFIG_DVPROFILE 0 #define CONFIG_EXIF 0 #define CONFIG_FAANDCT 1 #define CONFIG_FAANIDCT 1 #define CONFIG_FDCTDSP 1 #define CONFIG_FLACDSP 0 #define CONFIG_FMTCONVERT 0 #define CONFIG_FRAME_THREAD_ENCODER 0 #define CONFIG_G722DSP 0 #define CONFIG_GOLOMB 1 #define CONFIG_GPLV3 0 #define CONFIG_H263DSP 1 #define CONFIG_H264CHROMA 1 #define CONFIG_H264DSP 1 #define CONFIG_H264PRED 1 #define CONFIG_H264QPEL 1 #define CONFIG_HPELDSP 1 #define CONFIG_HUFFMAN 1 #define CONFIG_HUFFYUVDSP 0 #define CONFIG_HUFFYUVENCDSP 0 #define CONFIG_IDCTDSP 1 #define CONFIG_IIRFILTER 0 #define CONFIG_IMDCT15 1 #define CONFIG_INTRAX8 0 #define CONFIG_ISO_MEDIA 1 #define CONFIG_IVIDSP 0 #define CONFIG_JPEGTABLES 0 #define CONFIG_LGPLV3 0 #define CONFIG_LIBX262 0 #define CONFIG_LLAUDDSP 0 #define CONFIG_LLVIDDSP 0 #define CONFIG_LPC 0 #define CONFIG_LZF 0 #define CONFIG_ME_CMP 1 #define CONFIG_MPEG_ER 1 #define CONFIG_MPEGAUDIO 1 #define CONFIG_MPEGAUDIODSP 1 #define CONFIG_MPEGVIDEO 1 #define CONFIG_MPEGVIDEOENC 0 #define CONFIG_MSS34DSP 0 #define CONFIG_PIXBLOCKDSP 1 #define CONFIG_QPELDSP 1 #define CONFIG_QSV 0 #define CONFIG_QSVDEC 0 #define CONFIG_QSVENC 0 #define CONFIG_RANGECODER 0 #define CONFIG_RIFFDEC 1 #define CONFIG_RIFFENC 1 #define CONFIG_RTPDEC 0 #define CONFIG_RTPENC_CHAIN 1 #define CONFIG_RV34DSP 0 #define CONFIG_SINEWIN 1 #define CONFIG_SNAPPY 0 #define CONFIG_SRTP 0 #define CONFIG_STARTCODE 1 #define CONFIG_TEXTUREDSP 0 #define CONFIG_TEXTUREDSPENC 0 #define CONFIG_TPELDSP 0 #define CONFIG_VAAPI_ENCODE 0 #define CONFIG_VC1DSP 0 #define CONFIG_VIDEODSP 1 #define CONFIG_VP3DSP 1 #define CONFIG_VP56DSP 1 #define CONFIG_VP8DSP 0 #define CONFIG_VT_BT2020 0 #define CONFIG_WMA_FREQS 0 #define CONFIG_WMV2DSP 0 #define CONFIG_AAC_ADTSTOASC_BSF 1 #define CONFIG_CHOMP_BSF 0 #define CONFIG_DUMP_EXTRADATA_BSF 0 #define CONFIG_DCA_CORE_BSF 0 #define CONFIG_H264_MP4TOANNEXB_BSF 1 #define CONFIG_HEVC_MP4TOANNEXB_BSF 0 #define CONFIG_IMX_DUMP_HEADER_BSF 0 #define CONFIG_MJPEG2JPEG_BSF 0 #define CONFIG_MJPEGA_DUMP_HEADER_BSF 0 #define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0 #define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0 #define CONFIG_MOV2TEXTSUB_BSF 0 #define CONFIG_NOISE_BSF 0 #define CONFIG_REMOVE_EXTRADATA_BSF 0 #define CONFIG_TEXT2MOVSUB_BSF 0 #define CONFIG_VP9_SUPERFRAME_BSF 0 #define CONFIG_AASC_DECODER 0 #define CONFIG_AIC_DECODER 0 #define CONFIG_ALIAS_PIX_DECODER 0 #define CONFIG_AMV_DECODER 0 #define CONFIG_ANM_DECODER 0 #define CONFIG_ANSI_DECODER 0 #define CONFIG_APNG_DECODER 0 #define CONFIG_ASV1_DECODER 0 #define CONFIG_ASV2_DECODER 0 #define CONFIG_AURA_DECODER 0 #define CONFIG_AURA2_DECODER 0 #define CONFIG_AVRP_DECODER 0 #define CONFIG_AVRN_DECODER 0 #define CONFIG_AVS_DECODER 0 #define CONFIG_AVUI_DECODER 0 #define CONFIG_AYUV_DECODER 0 #define CONFIG_BETHSOFTVID_DECODER 0 #define CONFIG_BFI_DECODER 0 #define CONFIG_BINK_DECODER 0 #define CONFIG_BMP_DECODER 0 #define CONFIG_BMV_VIDEO_DECODER 0 #define CONFIG_BRENDER_PIX_DECODER 0 #define CONFIG_C93_DECODER 0 #define CONFIG_CAVS_DECODER 0 #define CONFIG_CDGRAPHICS_DECODER 0 #define CONFIG_CDXL_DECODER 0 #define CONFIG_CFHD_DECODER 0 #define CONFIG_CINEPAK_DECODER 0 #define CONFIG_CLJR_DECODER 0 #define CONFIG_CLLC_DECODER 0 #define CONFIG_COMFORTNOISE_DECODER 0 #define CONFIG_CPIA_DECODER 0 #define CONFIG_CSCD_DECODER 0 #define CONFIG_CYUV_DECODER 0 #define CONFIG_DDS_DECODER 0 #define CONFIG_DFA_DECODER 0 #define CONFIG_DIRAC_DECODER 0 #define CONFIG_DNXHD_DECODER 0 #define CONFIG_DPX_DECODER 0 #define CONFIG_DSICINVIDEO_DECODER 0 #define CONFIG_DVAUDIO_DECODER 0 #define CONFIG_DVVIDEO_DECODER 0 #define CONFIG_DXA_DECODER 0 #define CONFIG_DXTORY_DECODER 0 #define CONFIG_DXV_DECODER 0 #define CONFIG_EACMV_DECODER 0 #define CONFIG_EAMAD_DECODER 0 #define CONFIG_EATGQ_DECODER 0 #define CONFIG_EATGV_DECODER 0 #define CONFIG_EATQI_DECODER 0 #define CONFIG_EIGHTBPS_DECODER 0 #define CONFIG_EIGHTSVX_EXP_DECODER 0 #define CONFIG_EIGHTSVX_FIB_DECODER 0 #define CONFIG_ESCAPE124_DECODER 0 #define CONFIG_ESCAPE130_DECODER 0 #define CONFIG_EXR_DECODER 0 #define CONFIG_FFV1_DECODER 0 #define CONFIG_FFVHUFF_DECODER 0 #define CONFIG_FIC_DECODER 0 #define CONFIG_FLASHSV_DECODER 0 #define CONFIG_FLASHSV2_DECODER 0 #define CONFIG_FLIC_DECODER 0 #define CONFIG_FLV_DECODER 1 #define CONFIG_FOURXM_DECODER 0 #define CONFIG_FRAPS_DECODER 0 #define CONFIG_FRWU_DECODER 0 #define CONFIG_G2M_DECODER 0 #define CONFIG_GIF_DECODER 0 #define CONFIG_H261_DECODER 0 #define CONFIG_H263_DECODER 1 #define CONFIG_H263I_DECODER 0 #define CONFIG_H263P_DECODER 0 #define CONFIG_H264_DECODER 1 #define CONFIG_H264_CRYSTALHD_DECODER 0 #define CONFIG_H264_MEDIACODEC_DECODER 0 #define CONFIG_H264_MMAL_DECODER 0 #define CONFIG_H264_QSV_DECODER 0 #define CONFIG_H264_VDA_DECODER 0 #define CONFIG_H264_VDPAU_DECODER 0 #define CONFIG_HAP_DECODER 0 #define CONFIG_HEVC_DECODER 0 #define CONFIG_HEVC_QSV_DECODER 0 #define CONFIG_HNM4_VIDEO_DECODER 0 #define CONFIG_HQ_HQA_DECODER 0 #define CONFIG_HQX_DECODER 0 #define CONFIG_HUFFYUV_DECODER 0 #define CONFIG_IDCIN_DECODER 0 #define CONFIG_IFF_ILBM_DECODER 0 #define CONFIG_INDEO2_DECODER 0 #define CONFIG_INDEO3_DECODER 0 #define CONFIG_INDEO4_DECODER 0 #define CONFIG_INDEO5_DECODER 0 #define CONFIG_INTERPLAY_VIDEO_DECODER 0 #define CONFIG_JPEG2000_DECODER 0 #define CONFIG_JPEGLS_DECODER 0 #define CONFIG_JV_DECODER 0 #define CONFIG_KGV1_DECODER 0 #define CONFIG_KMVC_DECODER 0 #define CONFIG_LAGARITH_DECODER 0 #define CONFIG_LOCO_DECODER 0 #define CONFIG_M101_DECODER 0 #define CONFIG_MAGICYUV_DECODER 0 #define CONFIG_MDEC_DECODER 0 #define CONFIG_MIMIC_DECODER 0 #define CONFIG_MJPEG_DECODER 0 #define CONFIG_MJPEGB_DECODER 0 #define CONFIG_MMVIDEO_DECODER 0 #define CONFIG_MOTIONPIXELS_DECODER 0 #define CONFIG_MPEG_XVMC_DECODER 0 #define CONFIG_MPEG1VIDEO_DECODER 0 #define CONFIG_MPEG2VIDEO_DECODER 0 #define CONFIG_MPEG4_DECODER 0 #define CONFIG_MPEG4_CRYSTALHD_DECODER 0 #define CONFIG_MPEG4_MMAL_DECODER 0 #define CONFIG_MPEG4_VDPAU_DECODER 0 #define CONFIG_MPEGVIDEO_DECODER 0 #define CONFIG_MPEG_VDPAU_DECODER 0 #define CONFIG_MPEG1_VDPAU_DECODER 0 #define CONFIG_MPEG2_MMAL_DECODER 0 #define CONFIG_MPEG2_CRYSTALHD_DECODER 0 #define CONFIG_MPEG2_QSV_DECODER 0 #define CONFIG_MSA1_DECODER 0 #define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 #define CONFIG_MSMPEG4V1_DECODER 0 #define CONFIG_MSMPEG4V2_DECODER 0 #define CONFIG_MSMPEG4V3_DECODER 0 #define CONFIG_MSRLE_DECODER 0 #define CONFIG_MSS1_DECODER 0 #define CONFIG_MSS2_DECODER 0 #define CONFIG_MSVIDEO1_DECODER 0 #define CONFIG_MSZH_DECODER 0 #define CONFIG_MTS2_DECODER 0 #define CONFIG_MVC1_DECODER 0 #define CONFIG_MVC2_DECODER 0 #define CONFIG_MXPEG_DECODER 0 #define CONFIG_NUV_DECODER 0 #define CONFIG_PAF_VIDEO_DECODER 0 #define CONFIG_PAM_DECODER 0 #define CONFIG_PBM_DECODER 0 #define CONFIG_PCX_DECODER 0 #define CONFIG_PGM_DECODER 0 #define CONFIG_PGMYUV_DECODER 0 #define CONFIG_PICTOR_DECODER 0 #define CONFIG_PNG_DECODER 0 #define CONFIG_PPM_DECODER 0 #define CONFIG_PRORES_DECODER 0 #define CONFIG_PRORES_LGPL_DECODER 0 #define CONFIG_PTX_DECODER 0 #define CONFIG_QDRAW_DECODER 0 #define CONFIG_QPEG_DECODER 0 #define CONFIG_QTRLE_DECODER 0 #define CONFIG_R10K_DECODER 0 #define CONFIG_R210_DECODER 0 #define CONFIG_RAWVIDEO_DECODER 0 #define CONFIG_RL2_DECODER 0 #define CONFIG_ROQ_DECODER 0 #define CONFIG_RPZA_DECODER 0 #define CONFIG_RSCC_DECODER 0 #define CONFIG_RV10_DECODER 0 #define CONFIG_RV20_DECODER 0 #define CONFIG_RV30_DECODER 0 #define CONFIG_RV40_DECODER 0 #define CONFIG_S302M_DECODER 0 #define CONFIG_SANM_DECODER 0 #define CONFIG_SCREENPRESSO_DECODER 0 #define CONFIG_SDX2_DPCM_DECODER 0 #define CONFIG_SGI_DECODER 0 #define CONFIG_SGIRLE_DECODER 0 #define CONFIG_SHEERVIDEO_DECODER 0 #define CONFIG_SMACKER_DECODER 0 #define CONFIG_SMC_DECODER 0 #define CONFIG_SMVJPEG_DECODER 0 #define CONFIG_SNOW_DECODER 0 #define CONFIG_SP5X_DECODER 0 #define CONFIG_SUNRAST_DECODER 0 #define CONFIG_SVQ1_DECODER 0 #define CONFIG_SVQ3_DECODER 0 #define CONFIG_TARGA_DECODER 0 #define CONFIG_TARGA_Y216_DECODER 0 #define CONFIG_TDSC_DECODER 0 #define CONFIG_THEORA_DECODER 0 #define CONFIG_THP_DECODER 0 #define CONFIG_TIERTEXSEQVIDEO_DECODER 0 #define CONFIG_TIFF_DECODER 0 #define CONFIG_TMV_DECODER 0 #define CONFIG_TRUEMOTION1_DECODER 0 #define CONFIG_TRUEMOTION2_DECODER 0 #define CONFIG_TRUEMOTION2RT_DECODER 0 #define CONFIG_TSCC_DECODER 0 #define CONFIG_TSCC2_DECODER 0 #define CONFIG_TXD_DECODER 0 #define CONFIG_ULTI_DECODER 0 #define CONFIG_UTVIDEO_DECODER 0 #define CONFIG_V210_DECODER 0 #define CONFIG_V210X_DECODER 0 #define CONFIG_V308_DECODER 0 #define CONFIG_V408_DECODER 0 #define CONFIG_V410_DECODER 0 #define CONFIG_VB_DECODER 0 #define CONFIG_VBLE_DECODER 0 #define CONFIG_VC1_DECODER 0 #define CONFIG_VC1_CRYSTALHD_DECODER 0 #define CONFIG_VC1_VDPAU_DECODER 0 #define CONFIG_VC1IMAGE_DECODER 0 #define CONFIG_VC1_MMAL_DECODER 0 #define CONFIG_VC1_QSV_DECODER 0 #define CONFIG_VCR1_DECODER 0 #define CONFIG_VMDVIDEO_DECODER 0 #define CONFIG_VMNC_DECODER 0 #define CONFIG_VP3_DECODER 0 #define CONFIG_VP5_DECODER 0 #define CONFIG_VP6_DECODER 1 #define CONFIG_VP6A_DECODER 0 #define CONFIG_VP6F_DECODER 1 #define CONFIG_VP7_DECODER 0 #define CONFIG_VP8_DECODER 0 #define CONFIG_VP9_DECODER 0 #define CONFIG_VQA_DECODER 0 #define CONFIG_WEBP_DECODER 0 #define CONFIG_WMV1_DECODER 0 #define CONFIG_WMV2_DECODER 0 #define CONFIG_WMV3_DECODER 0 #define CONFIG_WMV3_CRYSTALHD_DECODER 0 #define CONFIG_WMV3_VDPAU_DECODER 0 #define CONFIG_WMV3IMAGE_DECODER 0 #define CONFIG_WNV1_DECODER 0 #define CONFIG_XAN_WC3_DECODER 0 #define CONFIG_XAN_WC4_DECODER 0 #define CONFIG_XBM_DECODER 0 #define CONFIG_XFACE_DECODER 0 #define CONFIG_XL_DECODER 0 #define CONFIG_XWD_DECODER 0 #define CONFIG_Y41P_DECODER 0 #define CONFIG_YLC_DECODER 0 #define CONFIG_YOP_DECODER 0 #define CONFIG_YUV4_DECODER 0 #define CONFIG_ZERO12V_DECODER 0 #define CONFIG_ZEROCODEC_DECODER 0 #define CONFIG_ZLIB_DECODER 0 #define CONFIG_ZMBV_DECODER 0 #define CONFIG_AAC_DECODER 1 #define CONFIG_AAC_FIXED_DECODER 0 #define CONFIG_AAC_LATM_DECODER 1 #define CONFIG_AC3_DECODER 0 #define CONFIG_AC3_FIXED_DECODER 0 #define CONFIG_ALAC_DECODER 0 #define CONFIG_ALS_DECODER 0 #define CONFIG_AMRNB_DECODER 0 #define CONFIG_AMRWB_DECODER 0 #define CONFIG_APE_DECODER 0 #define CONFIG_ATRAC1_DECODER 0 #define CONFIG_ATRAC3_DECODER 0 #define CONFIG_ATRAC3P_DECODER 0 #define CONFIG_BINKAUDIO_DCT_DECODER 0 #define CONFIG_BINKAUDIO_RDFT_DECODER 0 #define CONFIG_BMV_AUDIO_DECODER 0 #define CONFIG_COOK_DECODER 0 #define CONFIG_DCA_DECODER 0 #define CONFIG_DSD_LSBF_DECODER 0 #define CONFIG_DSD_MSBF_DECODER 0 #define CONFIG_DSD_LSBF_PLANAR_DECODER 0 #define CONFIG_DSD_MSBF_PLANAR_DECODER 0 #define CONFIG_DSICINAUDIO_DECODER 0 #define CONFIG_DSS_SP_DECODER 0 #define CONFIG_DST_DECODER 0 #define CONFIG_EAC3_DECODER 0 #define CONFIG_EVRC_DECODER 0 #define CONFIG_FFWAVESYNTH_DECODER 0 #define CONFIG_FLAC_DECODER 0 #define CONFIG_G723_1_DECODER 0 #define CONFIG_G729_DECODER 0 #define CONFIG_GSM_DECODER 0 #define CONFIG_GSM_MS_DECODER 0 #define CONFIG_IAC_DECODER 0 #define CONFIG_IMC_DECODER 0 #define CONFIG_INTERPLAY_ACM_DECODER 0 #define CONFIG_MACE3_DECODER 0 #define CONFIG_MACE6_DECODER 0 #define CONFIG_METASOUND_DECODER 0 #define CONFIG_MLP_DECODER 0 #define CONFIG_MP1_DECODER 0 #define CONFIG_MP1FLOAT_DECODER 0 #define CONFIG_MP2_DECODER 0 #define CONFIG_MP2FLOAT_DECODER 0 #define CONFIG_MP3_DECODER 1 #define CONFIG_MP3FLOAT_DECODER 1 #define CONFIG_MP3ADU_DECODER 1 #define CONFIG_MP3ADUFLOAT_DECODER 1 #define CONFIG_MP3ON4_DECODER 1 #define CONFIG_MP3ON4FLOAT_DECODER 1 #define CONFIG_MPC7_DECODER 0 #define CONFIG_MPC8_DECODER 0 #define CONFIG_NELLYMOSER_DECODER 0 #define CONFIG_ON2AVC_DECODER 0 #define CONFIG_OPUS_DECODER 0 #define CONFIG_PAF_AUDIO_DECODER 0 #define CONFIG_QCELP_DECODER 0 #define CONFIG_QDM2_DECODER 0 #define CONFIG_RA_144_DECODER 0 #define CONFIG_RA_288_DECODER 0 #define CONFIG_RALF_DECODER 0 #define CONFIG_SHORTEN_DECODER 0 #define CONFIG_SIPR_DECODER 0 #define CONFIG_SMACKAUD_DECODER 0 #define CONFIG_SONIC_DECODER 0 #define CONFIG_TAK_DECODER 0 #define CONFIG_TRUEHD_DECODER 0 #define CONFIG_TRUESPEECH_DECODER 0 #define CONFIG_TTA_DECODER 0 #define CONFIG_TWINVQ_DECODER 0 #define CONFIG_VMDAUDIO_DECODER 0 #define CONFIG_VORBIS_DECODER 0 #define CONFIG_WAVPACK_DECODER 0 #define CONFIG_WMALOSSLESS_DECODER 0 #define CONFIG_WMAPRO_DECODER 0 #define CONFIG_WMAV1_DECODER 0 #define CONFIG_WMAV2_DECODER 0 #define CONFIG_WMAVOICE_DECODER 0 #define CONFIG_WS_SND1_DECODER 0 #define CONFIG_XMA1_DECODER 0 #define CONFIG_XMA2_DECODER 0 #define CONFIG_PCM_ALAW_DECODER 0 #define CONFIG_PCM_BLURAY_DECODER 0 #define CONFIG_PCM_DVD_DECODER 0 #define CONFIG_PCM_F32BE_DECODER 0 #define CONFIG_PCM_F32LE_DECODER 0 #define CONFIG_PCM_F64BE_DECODER 0 #define CONFIG_PCM_F64LE_DECODER 0 #define CONFIG_PCM_LXF_DECODER 0 #define CONFIG_PCM_MULAW_DECODER 0 #define CONFIG_PCM_S8_DECODER 0 #define CONFIG_PCM_S8_PLANAR_DECODER 0 #define CONFIG_PCM_S16BE_DECODER 0 #define CONFIG_PCM_S16BE_PLANAR_DECODER 0 #define CONFIG_PCM_S16LE_DECODER 0 #define CONFIG_PCM_S16LE_PLANAR_DECODER 0 #define CONFIG_PCM_S24BE_DECODER 0 #define CONFIG_PCM_S24DAUD_DECODER 0 #define CONFIG_PCM_S24LE_DECODER 0 #define CONFIG_PCM_S24LE_PLANAR_DECODER 0 #define CONFIG_PCM_S32BE_DECODER 0 #define CONFIG_PCM_S32LE_DECODER 0 #define CONFIG_PCM_S32LE_PLANAR_DECODER 0 #define CONFIG_PCM_S64BE_DECODER 0 #define CONFIG_PCM_S64LE_DECODER 0 #define CONFIG_PCM_U8_DECODER 0 #define CONFIG_PCM_U16BE_DECODER 0 #define CONFIG_PCM_U16LE_DECODER 0 #define CONFIG_PCM_U24BE_DECODER 0 #define CONFIG_PCM_U24LE_DECODER 0 #define CONFIG_PCM_U32BE_DECODER 0 #define CONFIG_PCM_U32LE_DECODER 0 #define CONFIG_PCM_ZORK_DECODER 0 #define CONFIG_INTERPLAY_DPCM_DECODER 0 #define CONFIG_ROQ_DPCM_DECODER 0 #define CONFIG_SOL_DPCM_DECODER 0 #define CONFIG_XAN_DPCM_DECODER 0 #define CONFIG_ADPCM_4XM_DECODER 0 #define CONFIG_ADPCM_ADX_DECODER 0 #define CONFIG_ADPCM_AFC_DECODER 0 #define CONFIG_ADPCM_AICA_DECODER 0 #define CONFIG_ADPCM_CT_DECODER 0 #define CONFIG_ADPCM_DTK_DECODER 0 #define CONFIG_ADPCM_EA_DECODER 0 #define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 #define CONFIG_ADPCM_EA_R1_DECODER 0 #define CONFIG_ADPCM_EA_R2_DECODER 0 #define CONFIG_ADPCM_EA_R3_DECODER 0 #define CONFIG_ADPCM_EA_XAS_DECODER 0 #define CONFIG_ADPCM_G722_DECODER 0 #define CONFIG_ADPCM_G726_DECODER 0 #define CONFIG_ADPCM_G726LE_DECODER 0 #define CONFIG_ADPCM_IMA_AMV_DECODER 0 #define CONFIG_ADPCM_IMA_APC_DECODER 0 #define CONFIG_ADPCM_IMA_DAT4_DECODER 0 #define CONFIG_ADPCM_IMA_DK3_DECODER 0 #define CONFIG_ADPCM_IMA_DK4_DECODER 0 #define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 #define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 #define CONFIG_ADPCM_IMA_ISS_DECODER 0 #define CONFIG_ADPCM_IMA_OKI_DECODER 0 #define CONFIG_ADPCM_IMA_QT_DECODER 0 #define CONFIG_ADPCM_IMA_RAD_DECODER 0 #define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 #define CONFIG_ADPCM_IMA_WAV_DECODER 0 #define CONFIG_ADPCM_IMA_WS_DECODER 0 #define CONFIG_ADPCM_MS_DECODER 0 #define CONFIG_ADPCM_MTAF_DECODER 0 #define CONFIG_ADPCM_PSX_DECODER 0 #define CONFIG_ADPCM_SBPRO_2_DECODER 0 #define CONFIG_ADPCM_SBPRO_3_DECODER 0 #define CONFIG_ADPCM_SBPRO_4_DECODER 0 #define CONFIG_ADPCM_SWF_DECODER 0 #define CONFIG_ADPCM_THP_DECODER 0 #define CONFIG_ADPCM_THP_LE_DECODER 0 #define CONFIG_ADPCM_VIMA_DECODER 0 #define CONFIG_ADPCM_XA_DECODER 0 #define CONFIG_ADPCM_YAMAHA_DECODER 0 #define CONFIG_SSA_DECODER 0 #define CONFIG_ASS_DECODER 0 #define CONFIG_CCAPTION_DECODER 0 #define CONFIG_DVBSUB_DECODER 0 #define CONFIG_DVDSUB_DECODER 0 #define CONFIG_JACOSUB_DECODER 0 #define CONFIG_MICRODVD_DECODER 0 #define CONFIG_MOVTEXT_DECODER 0 #define CONFIG_MPL2_DECODER 0 #define CONFIG_PGSSUB_DECODER 0 #define CONFIG_PJS_DECODER 0 #define CONFIG_REALTEXT_DECODER 0 #define CONFIG_SAMI_DECODER 0 #define CONFIG_SRT_DECODER 0 #define CONFIG_STL_DECODER 0 #define CONFIG_SUBRIP_DECODER 0 #define CONFIG_SUBVIEWER_DECODER 0 #define CONFIG_SUBVIEWER1_DECODER 0 #define CONFIG_TEXT_DECODER 0 #define CONFIG_VPLAYER_DECODER 0 #define CONFIG_WEBVTT_DECODER 0 #define CONFIG_XSUB_DECODER 0 #define CONFIG_AAC_AT_DECODER 0 #define CONFIG_AC3_AT_DECODER 0 #define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 #define CONFIG_ALAC_AT_DECODER 0 #define CONFIG_AMR_NB_AT_DECODER 0 #define CONFIG_EAC3_AT_DECODER 0 #define CONFIG_GSM_MS_AT_DECODER 0 #define CONFIG_ILBC_AT_DECODER 0 #define CONFIG_MP1_AT_DECODER 0 #define CONFIG_MP2_AT_DECODER 0 #define CONFIG_MP3_AT_DECODER 0 #define CONFIG_PCM_ALAW_AT_DECODER 0 #define CONFIG_PCM_MULAW_AT_DECODER 0 #define CONFIG_QDMC_AT_DECODER 0 #define CONFIG_QDM2_AT_DECODER 0 #define CONFIG_LIBCELT_DECODER 0 #define CONFIG_LIBFDK_AAC_DECODER 0 #define CONFIG_LIBGSM_DECODER 0 #define CONFIG_LIBGSM_MS_DECODER 0 #define CONFIG_LIBILBC_DECODER 0 #define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 #define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 #define CONFIG_LIBOPENJPEG_DECODER 0 #define CONFIG_LIBOPUS_DECODER 0 #define CONFIG_LIBSCHROEDINGER_DECODER 0 #define CONFIG_LIBSPEEX_DECODER 0 #define CONFIG_LIBVORBIS_DECODER 0 #define CONFIG_LIBVPX_VP8_DECODER 0 #define CONFIG_LIBVPX_VP9_DECODER 0 #define CONFIG_LIBZVBI_TELETEXT_DECODER 0 #define CONFIG_BINTEXT_DECODER 0 #define CONFIG_XBIN_DECODER 0 #define CONFIG_IDF_DECODER 0 #define CONFIG_LIBOPENH264_DECODER 0 #define CONFIG_H263_CUVID_DECODER 0 #define CONFIG_H264_CUVID_DECODER 0 #define CONFIG_HEVC_CUVID_DECODER 0 #define CONFIG_HEVC_MEDIACODEC_DECODER 0 #define CONFIG_MJPEG_CUVID_DECODER 0 #define CONFIG_MPEG1_CUVID_DECODER 0 #define CONFIG_MPEG2_CUVID_DECODER 0 #define CONFIG_MPEG4_CUVID_DECODER 0 #define CONFIG_MPEG4_MEDIACODEC_DECODER 0 #define CONFIG_VC1_CUVID_DECODER 0 #define CONFIG_VP8_CUVID_DECODER 0 #define CONFIG_VP8_MEDIACODEC_DECODER 0 #define CONFIG_VP9_CUVID_DECODER 0 #define CONFIG_VP9_MEDIACODEC_DECODER 0 #define CONFIG_AA_DEMUXER 0 #define CONFIG_AAC_DEMUXER 1 #define CONFIG_AC3_DEMUXER 0 #define CONFIG_ACM_DEMUXER 0 #define CONFIG_ACT_DEMUXER 0 #define CONFIG_ADF_DEMUXER 0 #define CONFIG_ADP_DEMUXER 0 #define CONFIG_ADS_DEMUXER 0 #define CONFIG_ADX_DEMUXER 0 #define CONFIG_AEA_DEMUXER 0 #define CONFIG_AFC_DEMUXER 0 #define CONFIG_AIFF_DEMUXER 0 #define CONFIG_AIX_DEMUXER 0 #define CONFIG_AMR_DEMUXER 0 #define CONFIG_ANM_DEMUXER 0 #define CONFIG_APC_DEMUXER 0 #define CONFIG_APE_DEMUXER 0 #define CONFIG_APNG_DEMUXER 0 #define CONFIG_AQTITLE_DEMUXER 0 #define CONFIG_ASF_DEMUXER 0 #define CONFIG_ASF_O_DEMUXER 0 #define CONFIG_ASS_DEMUXER 0 #define CONFIG_AST_DEMUXER 0 #define CONFIG_AU_DEMUXER 0 #define CONFIG_AVI_DEMUXER 0 #define CONFIG_AVISYNTH_DEMUXER 0 #define CONFIG_AVR_DEMUXER 0 #define CONFIG_AVS_DEMUXER 0 #define CONFIG_BETHSOFTVID_DEMUXER 0 #define CONFIG_BFI_DEMUXER 0 #define CONFIG_BINTEXT_DEMUXER 0 #define CONFIG_BINK_DEMUXER 0 #define CONFIG_BIT_DEMUXER 0 #define CONFIG_BMV_DEMUXER 0 #define CONFIG_BFSTM_DEMUXER 0 #define CONFIG_BRSTM_DEMUXER 0 #define CONFIG_BOA_DEMUXER 0 #define CONFIG_C93_DEMUXER 0 #define CONFIG_CAF_DEMUXER 0 #define CONFIG_CAVSVIDEO_DEMUXER 0 #define CONFIG_CDG_DEMUXER 0 #define CONFIG_CDXL_DEMUXER 0 #define CONFIG_CINE_DEMUXER 0 #define CONFIG_CONCAT_DEMUXER 1 #define CONFIG_DATA_DEMUXER 1 #define CONFIG_DAUD_DEMUXER 0 #define CONFIG_DCSTR_DEMUXER 0 #define CONFIG_DFA_DEMUXER 0 #define CONFIG_DIRAC_DEMUXER 0 #define CONFIG_DNXHD_DEMUXER 0 #define CONFIG_DSF_DEMUXER 0 #define CONFIG_DSICIN_DEMUXER 0 #define CONFIG_DSS_DEMUXER 0 #define CONFIG_DTS_DEMUXER 0 #define CONFIG_DTSHD_DEMUXER 0 #define CONFIG_DV_DEMUXER 0 #define CONFIG_DVBSUB_DEMUXER 0 #define CONFIG_DVBTXT_DEMUXER 0 #define CONFIG_DXA_DEMUXER 0 #define CONFIG_EA_DEMUXER 0 #define CONFIG_EA_CDATA_DEMUXER 0 #define CONFIG_EAC3_DEMUXER 0 #define CONFIG_EPAF_DEMUXER 0 #define CONFIG_FFM_DEMUXER 0 #define CONFIG_FFMETADATA_DEMUXER 0 #define CONFIG_FILMSTRIP_DEMUXER 0 #define CONFIG_FLAC_DEMUXER 0 #define CONFIG_FLIC_DEMUXER 0 #define CONFIG_FLV_DEMUXER 1 #define CONFIG_LIVE_FLV_DEMUXER 1 #define CONFIG_FOURXM_DEMUXER 0 #define CONFIG_FRM_DEMUXER 0 #define CONFIG_FSB_DEMUXER 0 #define CONFIG_G722_DEMUXER 0 #define CONFIG_G723_1_DEMUXER 0 #define CONFIG_G729_DEMUXER 0 #define CONFIG_GENH_DEMUXER 0 #define CONFIG_GIF_DEMUXER 0 #define CONFIG_GSM_DEMUXER 0 #define CONFIG_GXF_DEMUXER 0 #define CONFIG_H261_DEMUXER 0 #define CONFIG_H263_DEMUXER 0 #define CONFIG_H264_DEMUXER 0 #define CONFIG_HEVC_DEMUXER 0 #define CONFIG_HLS_DEMUXER 1 #define CONFIG_HNM_DEMUXER 0 #define CONFIG_ICO_DEMUXER 0 #define CONFIG_IDCIN_DEMUXER 0 #define CONFIG_IDF_DEMUXER 0 #define CONFIG_IFF_DEMUXER 0 #define CONFIG_ILBC_DEMUXER 0 #define CONFIG_IMAGE2_DEMUXER 0 #define CONFIG_IMAGE2PIPE_DEMUXER 0 #define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 #define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 #define CONFIG_INGENIENT_DEMUXER 0 #define CONFIG_IPMOVIE_DEMUXER 0 #define CONFIG_IRCAM_DEMUXER 0 #define CONFIG_ISS_DEMUXER 0 #define CONFIG_IV8_DEMUXER 0 #define CONFIG_IVF_DEMUXER 0 #define CONFIG_IVR_DEMUXER 0 #define CONFIG_JACOSUB_DEMUXER 0 #define CONFIG_JV_DEMUXER 0 #define CONFIG_LMLM4_DEMUXER 0 #define CONFIG_LOAS_DEMUXER 0 #define CONFIG_LRC_DEMUXER 0 #define CONFIG_LVF_DEMUXER 0 #define CONFIG_LXF_DEMUXER 0 #define CONFIG_M4V_DEMUXER 0 #define CONFIG_MATROSKA_DEMUXER 0 #define CONFIG_MGSTS_DEMUXER 0 #define CONFIG_MICRODVD_DEMUXER 0 #define CONFIG_MJPEG_DEMUXER 0 #define CONFIG_MLP_DEMUXER 0 #define CONFIG_MLV_DEMUXER 0 #define CONFIG_MM_DEMUXER 0 #define CONFIG_MMF_DEMUXER 0 #define CONFIG_MOV_DEMUXER 1 #define CONFIG_MP3_DEMUXER 1 #define CONFIG_MPC_DEMUXER 0 #define CONFIG_MPC8_DEMUXER 0 #define CONFIG_MPEGPS_DEMUXER 1 #define CONFIG_MPEGTS_DEMUXER 1 #define CONFIG_MPEGTSRAW_DEMUXER 0 #define CONFIG_MPEGVIDEO_DEMUXER 1 #define CONFIG_MPJPEG_DEMUXER 0 #define CONFIG_MPL2_DEMUXER 0 #define CONFIG_MPSUB_DEMUXER 0 #define CONFIG_MSF_DEMUXER 0 #define CONFIG_MSNWC_TCP_DEMUXER 0 #define CONFIG_MTAF_DEMUXER 0 #define CONFIG_MTV_DEMUXER 0 #define CONFIG_MUSX_DEMUXER 0 #define CONFIG_MV_DEMUXER 0 #define CONFIG_MVI_DEMUXER 0 #define CONFIG_MXF_DEMUXER 0 #define CONFIG_MXG_DEMUXER 0 #define CONFIG_NC_DEMUXER 0 #define CONFIG_NISTSPHERE_DEMUXER 0 #define CONFIG_NSV_DEMUXER 0 #define CONFIG_NUT_DEMUXER 0 #define CONFIG_NUV_DEMUXER 0 #define CONFIG_OGG_DEMUXER 0 #define CONFIG_OMA_DEMUXER 0 #define CONFIG_PAF_DEMUXER 0 #define CONFIG_PCM_ALAW_DEMUXER 0 #define CONFIG_PCM_MULAW_DEMUXER 0 #define CONFIG_PCM_F64BE_DEMUXER 0 #define CONFIG_PCM_F64LE_DEMUXER 0 #define CONFIG_PCM_F32BE_DEMUXER 0 #define CONFIG_PCM_F32LE_DEMUXER 0 #define CONFIG_PCM_S32BE_DEMUXER 0 #define CONFIG_PCM_S32LE_DEMUXER 0 #define CONFIG_PCM_S24BE_DEMUXER 0 #define CONFIG_PCM_S24LE_DEMUXER 0 #define CONFIG_PCM_S16BE_DEMUXER 0 #define CONFIG_PCM_S16LE_DEMUXER 0 #define CONFIG_PCM_S8_DEMUXER 0 #define CONFIG_PCM_U32BE_DEMUXER 0 #define CONFIG_PCM_U32LE_DEMUXER 0 #define CONFIG_PCM_U24BE_DEMUXER 0 #define CONFIG_PCM_U24LE_DEMUXER 0 #define CONFIG_PCM_U16BE_DEMUXER 0 #define CONFIG_PCM_U16LE_DEMUXER 0 #define CONFIG_PCM_U8_DEMUXER 0 #define CONFIG_PJS_DEMUXER 0 #define CONFIG_PMP_DEMUXER 0 #define CONFIG_PVA_DEMUXER 0 #define CONFIG_PVF_DEMUXER 0 #define CONFIG_QCP_DEMUXER 0 #define CONFIG_R3D_DEMUXER 0 #define CONFIG_RAWVIDEO_DEMUXER 0 #define CONFIG_REALTEXT_DEMUXER 0 #define CONFIG_REDSPARK_DEMUXER 0 #define CONFIG_RL2_DEMUXER 0 #define CONFIG_RM_DEMUXER 0 #define CONFIG_ROQ_DEMUXER 0 #define CONFIG_RPL_DEMUXER 0 #define CONFIG_RSD_DEMUXER 0 #define CONFIG_RSO_DEMUXER 0 #define CONFIG_RTP_DEMUXER 0 #define CONFIG_RTSP_DEMUXER 0 #define CONFIG_SAMI_DEMUXER 0 #define CONFIG_SAP_DEMUXER 0 #define CONFIG_SBG_DEMUXER 0 #define CONFIG_SDP_DEMUXER 0 #define CONFIG_SDR2_DEMUXER 0 #define CONFIG_SEGAFILM_DEMUXER 0 #define CONFIG_SHORTEN_DEMUXER 0 #define CONFIG_SIFF_DEMUXER 0 #define CONFIG_SLN_DEMUXER 0 #define CONFIG_SMACKER_DEMUXER 0 #define CONFIG_SMJPEG_DEMUXER 0 #define CONFIG_SMUSH_DEMUXER 0 #define CONFIG_SOL_DEMUXER 0 #define CONFIG_SOX_DEMUXER 0 #define CONFIG_SPDIF_DEMUXER 0 #define CONFIG_SRT_DEMUXER 0 #define CONFIG_STR_DEMUXER 0 #define CONFIG_STL_DEMUXER 0 #define CONFIG_SUBVIEWER1_DEMUXER 0 #define CONFIG_SUBVIEWER_DEMUXER 0 #define CONFIG_SUP_DEMUXER 0 #define CONFIG_SVAG_DEMUXER 0 #define CONFIG_SWF_DEMUXER 0 #define CONFIG_TAK_DEMUXER 0 #define CONFIG_TEDCAPTIONS_DEMUXER 0 #define CONFIG_THP_DEMUXER 0 #define CONFIG_THREEDOSTR_DEMUXER 0 #define CONFIG_TIERTEXSEQ_DEMUXER 0 #define CONFIG_TMV_DEMUXER 0 #define CONFIG_TRUEHD_DEMUXER 0 #define CONFIG_TTA_DEMUXER 0 #define CONFIG_TXD_DEMUXER 0 #define CONFIG_TTY_DEMUXER 0 #define CONFIG_V210_DEMUXER 0 #define CONFIG_V210X_DEMUXER 0 #define CONFIG_VAG_DEMUXER 0 #define CONFIG_VC1_DEMUXER 0 #define CONFIG_VC1T_DEMUXER 0 #define CONFIG_VIVO_DEMUXER 0 #define CONFIG_VMD_DEMUXER 0 #define CONFIG_VOBSUB_DEMUXER 0 #define CONFIG_VOC_DEMUXER 0 #define CONFIG_VPK_DEMUXER 0 #define CONFIG_VPLAYER_DEMUXER 0 #define CONFIG_VQF_DEMUXER 0 #define CONFIG_W64_DEMUXER 0 #define CONFIG_WAV_DEMUXER 0 #define CONFIG_WC3_DEMUXER 0 #define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 #define CONFIG_WEBVTT_DEMUXER 0 #define CONFIG_WSAUD_DEMUXER 0 #define CONFIG_WSD_DEMUXER 0 #define CONFIG_WSVQA_DEMUXER 0 #define CONFIG_WTV_DEMUXER 0 #define CONFIG_WVE_DEMUXER 0 #define CONFIG_WV_DEMUXER 0 #define CONFIG_XA_DEMUXER 0 #define CONFIG_XBIN_DEMUXER 0 #define CONFIG_XMV_DEMUXER 0 #define CONFIG_XVAG_DEMUXER 0 #define CONFIG_XWMA_DEMUXER 0 #define CONFIG_YOP_DEMUXER 0 #define CONFIG_YUV4MPEGPIPE_DEMUXER 0 #define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 #define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 #define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 #define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 #define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 #define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 #define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 #define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 #define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 #define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 #define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 #define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 #define CONFIG_LIBGME_DEMUXER 0 #define CONFIG_LIBMODPLUG_DEMUXER 0 #define CONFIG_LIBNUT_DEMUXER 0 #define CONFIG_LIBOPENMPT_DEMUXER 0 #define CONFIG_A64MULTI_ENCODER 0 #define CONFIG_A64MULTI5_ENCODER 0 #define CONFIG_ALIAS_PIX_ENCODER 0 #define CONFIG_AMV_ENCODER 0 #define CONFIG_APNG_ENCODER 0 #define CONFIG_ASV1_ENCODER 0 #define CONFIG_ASV2_ENCODER 0 #define CONFIG_AVRP_ENCODER 0 #define CONFIG_AVUI_ENCODER 0 #define CONFIG_AYUV_ENCODER 0 #define CONFIG_BMP_ENCODER 0 #define CONFIG_CINEPAK_ENCODER 0 #define CONFIG_CLJR_ENCODER 0 #define CONFIG_COMFORTNOISE_ENCODER 0 #define CONFIG_DNXHD_ENCODER 0 #define CONFIG_DPX_ENCODER 0 #define CONFIG_DVVIDEO_ENCODER 0 #define CONFIG_FFV1_ENCODER 0 #define CONFIG_FFVHUFF_ENCODER 0 #define CONFIG_FLASHSV_ENCODER 0 #define CONFIG_FLASHSV2_ENCODER 0 #define CONFIG_FLV_ENCODER 0 #define CONFIG_GIF_ENCODER 0 #define CONFIG_H261_ENCODER 0 #define CONFIG_H263_ENCODER 0 #define CONFIG_H263P_ENCODER 0 #define CONFIG_HAP_ENCODER 0 #define CONFIG_HUFFYUV_ENCODER 0 #define CONFIG_JPEG2000_ENCODER 0 #define CONFIG_JPEGLS_ENCODER 0 #define CONFIG_LJPEG_ENCODER 0 #define CONFIG_MJPEG_ENCODER 0 #define CONFIG_MPEG1VIDEO_ENCODER 0 #define CONFIG_MPEG2VIDEO_ENCODER 0 #define CONFIG_MPEG4_ENCODER 0 #define CONFIG_MSMPEG4V2_ENCODER 0 #define CONFIG_MSMPEG4V3_ENCODER 0 #define CONFIG_MSVIDEO1_ENCODER 0 #define CONFIG_PAM_ENCODER 0 #define CONFIG_PBM_ENCODER 0 #define CONFIG_PCX_ENCODER 0 #define CONFIG_PGM_ENCODER 0 #define CONFIG_PGMYUV_ENCODER 0 #define CONFIG_PNG_ENCODER 0 #define CONFIG_PPM_ENCODER 0 #define CONFIG_PRORES_ENCODER 0 #define CONFIG_PRORES_AW_ENCODER 0 #define CONFIG_PRORES_KS_ENCODER 0 #define CONFIG_QTRLE_ENCODER 0 #define CONFIG_R10K_ENCODER 0 #define CONFIG_R210_ENCODER 0 #define CONFIG_RAWVIDEO_ENCODER 0 #define CONFIG_ROQ_ENCODER 0 #define CONFIG_RV10_ENCODER 0 #define CONFIG_RV20_ENCODER 0 #define CONFIG_S302M_ENCODER 0 #define CONFIG_SGI_ENCODER 0 #define CONFIG_SNOW_ENCODER 0 #define CONFIG_SUNRAST_ENCODER 0 #define CONFIG_SVQ1_ENCODER 0 #define CONFIG_TARGA_ENCODER 0 #define CONFIG_TIFF_ENCODER 0 #define CONFIG_UTVIDEO_ENCODER 0 #define CONFIG_V210_ENCODER 0 #define CONFIG_V308_ENCODER 0 #define CONFIG_V408_ENCODER 0 #define CONFIG_V410_ENCODER 0 #define CONFIG_VC2_ENCODER 0 #define CONFIG_WRAPPED_AVFRAME_ENCODER 0 #define CONFIG_WMV1_ENCODER 0 #define CONFIG_WMV2_ENCODER 0 #define CONFIG_XBM_ENCODER 0 #define CONFIG_XFACE_ENCODER 0 #define CONFIG_XWD_ENCODER 0 #define CONFIG_Y41P_ENCODER 0 #define CONFIG_YUV4_ENCODER 0 #define CONFIG_ZLIB_ENCODER 0 #define CONFIG_ZMBV_ENCODER 0 #define CONFIG_AAC_ENCODER 0 #define CONFIG_AC3_ENCODER 0 #define CONFIG_AC3_FIXED_ENCODER 0 #define CONFIG_ALAC_ENCODER 0 #define CONFIG_DCA_ENCODER 0 #define CONFIG_EAC3_ENCODER 0 #define CONFIG_FLAC_ENCODER 0 #define CONFIG_G723_1_ENCODER 0 #define CONFIG_MLP_ENCODER 0 #define CONFIG_MP2_ENCODER 0 #define CONFIG_MP2FIXED_ENCODER 0 #define CONFIG_NELLYMOSER_ENCODER 0 #define CONFIG_RA_144_ENCODER 0 #define CONFIG_SONIC_ENCODER 0 #define CONFIG_SONIC_LS_ENCODER 0 #define CONFIG_TRUEHD_ENCODER 0 #define CONFIG_TTA_ENCODER 0 #define CONFIG_VORBIS_ENCODER 0 #define CONFIG_WAVPACK_ENCODER 0 #define CONFIG_WMAV1_ENCODER 0 #define CONFIG_WMAV2_ENCODER 0 #define CONFIG_PCM_ALAW_ENCODER 0 #define CONFIG_PCM_F32BE_ENCODER 0 #define CONFIG_PCM_F32LE_ENCODER 0 #define CONFIG_PCM_F64BE_ENCODER 0 #define CONFIG_PCM_F64LE_ENCODER 0 #define CONFIG_PCM_MULAW_ENCODER 0 #define CONFIG_PCM_S8_ENCODER 0 #define CONFIG_PCM_S8_PLANAR_ENCODER 0 #define CONFIG_PCM_S16BE_ENCODER 0 #define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 #define CONFIG_PCM_S16LE_ENCODER 0 #define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 #define CONFIG_PCM_S24BE_ENCODER 0 #define CONFIG_PCM_S24DAUD_ENCODER 0 #define CONFIG_PCM_S24LE_ENCODER 0 #define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 #define CONFIG_PCM_S32BE_ENCODER 0 #define CONFIG_PCM_S32LE_ENCODER 0 #define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 #define CONFIG_PCM_S64BE_ENCODER 0 #define CONFIG_PCM_S64LE_ENCODER 0 #define CONFIG_PCM_U8_ENCODER 0 #define CONFIG_PCM_U16BE_ENCODER 0 #define CONFIG_PCM_U16LE_ENCODER 0 #define CONFIG_PCM_U24BE_ENCODER 0 #define CONFIG_PCM_U24LE_ENCODER 0 #define CONFIG_PCM_U32BE_ENCODER 0 #define CONFIG_PCM_U32LE_ENCODER 0 #define CONFIG_ROQ_DPCM_ENCODER 0 #define CONFIG_ADPCM_ADX_ENCODER 0 #define CONFIG_ADPCM_G722_ENCODER 0 #define CONFIG_ADPCM_G726_ENCODER 0 #define CONFIG_ADPCM_IMA_QT_ENCODER 0 #define CONFIG_ADPCM_IMA_WAV_ENCODER 0 #define CONFIG_ADPCM_MS_ENCODER 0 #define CONFIG_ADPCM_SWF_ENCODER 0 #define CONFIG_ADPCM_YAMAHA_ENCODER 0 #define CONFIG_SSA_ENCODER 0 #define CONFIG_ASS_ENCODER 0 #define CONFIG_DVBSUB_ENCODER 0 #define CONFIG_DVDSUB_ENCODER 0 #define CONFIG_MOVTEXT_ENCODER 0 #define CONFIG_SRT_ENCODER 0 #define CONFIG_SUBRIP_ENCODER 0 #define CONFIG_TEXT_ENCODER 0 #define CONFIG_WEBVTT_ENCODER 0 #define CONFIG_XSUB_ENCODER 0 #define CONFIG_AAC_AT_ENCODER 0 #define CONFIG_ALAC_AT_ENCODER 0 #define CONFIG_ILBC_AT_ENCODER 0 #define CONFIG_PCM_ALAW_AT_ENCODER 0 #define CONFIG_PCM_MULAW_AT_ENCODER 0 #define CONFIG_LIBFDK_AAC_ENCODER 0 #define CONFIG_LIBGSM_ENCODER 0 #define CONFIG_LIBGSM_MS_ENCODER 0 #define CONFIG_LIBILBC_ENCODER 0 #define CONFIG_LIBMP3LAME_ENCODER 0 #define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 #define CONFIG_LIBOPENJPEG_ENCODER 0 #define CONFIG_LIBOPUS_ENCODER 0 #define CONFIG_LIBSCHROEDINGER_ENCODER 0 #define CONFIG_LIBSHINE_ENCODER 0 #define CONFIG_LIBSPEEX_ENCODER 0 #define CONFIG_LIBTHEORA_ENCODER 0 #define CONFIG_LIBTWOLAME_ENCODER 0 #define CONFIG_LIBVO_AMRWBENC_ENCODER 0 #define CONFIG_LIBVORBIS_ENCODER 0 #define CONFIG_LIBVPX_VP8_ENCODER 0 #define CONFIG_LIBVPX_VP9_ENCODER 0 #define CONFIG_LIBWAVPACK_ENCODER 0 #define CONFIG_LIBWEBP_ANIM_ENCODER 0 #define CONFIG_LIBWEBP_ENCODER 0 #define CONFIG_LIBX262_ENCODER 0 #define CONFIG_LIBX264_ENCODER 0 #define CONFIG_LIBX264RGB_ENCODER 0 #define CONFIG_LIBX265_ENCODER 0 #define CONFIG_LIBXAVS_ENCODER 0 #define CONFIG_LIBXVID_ENCODER 0 #define CONFIG_LIBOPENH264_ENCODER 0 #define CONFIG_H264_NVENC_ENCODER 0 #define CONFIG_H264_OMX_ENCODER 0 #define CONFIG_H264_QSV_ENCODER 0 #define CONFIG_H264_VAAPI_ENCODER 0 #define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 #define CONFIG_NVENC_ENCODER 0 #define CONFIG_NVENC_H264_ENCODER 0 #define CONFIG_NVENC_HEVC_ENCODER 0 #define CONFIG_HEVC_NVENC_ENCODER 0 #define CONFIG_HEVC_QSV_ENCODER 0 #define CONFIG_HEVC_VAAPI_ENCODER 0 #define CONFIG_LIBKVAZAAR_ENCODER 0 #define CONFIG_MJPEG_VAAPI_ENCODER 0 #define CONFIG_MPEG2_QSV_ENCODER 0 #define CONFIG_ABENCH_FILTER 0 #define CONFIG_ACOMPRESSOR_FILTER 0 #define CONFIG_ACROSSFADE_FILTER 0 #define CONFIG_ACRUSHER_FILTER 0 #define CONFIG_ADELAY_FILTER 0 #define CONFIG_AECHO_FILTER 0 #define CONFIG_AEMPHASIS_FILTER 0 #define CONFIG_AEVAL_FILTER 0 #define CONFIG_AFADE_FILTER 0 #define CONFIG_AFFTFILT_FILTER 0 #define CONFIG_AFORMAT_FILTER 0 #define CONFIG_AGATE_FILTER 0 #define CONFIG_AINTERLEAVE_FILTER 0 #define CONFIG_ALIMITER_FILTER 0 #define CONFIG_ALLPASS_FILTER 0 #define CONFIG_ALOOP_FILTER 0 #define CONFIG_AMERGE_FILTER 0 #define CONFIG_AMETADATA_FILTER 0 #define CONFIG_AMIX_FILTER 0 #define CONFIG_ANEQUALIZER_FILTER 0 #define CONFIG_ANULL_FILTER 0 #define CONFIG_APAD_FILTER 0 #define CONFIG_APERMS_FILTER 0 #define CONFIG_APHASER_FILTER 0 #define CONFIG_APULSATOR_FILTER 0 #define CONFIG_AREALTIME_FILTER 0 #define CONFIG_ARESAMPLE_FILTER 0 #define CONFIG_AREVERSE_FILTER 0 #define CONFIG_ASELECT_FILTER 0 #define CONFIG_ASENDCMD_FILTER 0 #define CONFIG_ASETNSAMPLES_FILTER 0 #define CONFIG_ASETPTS_FILTER 0 #define CONFIG_ASETRATE_FILTER 0 #define CONFIG_ASETTB_FILTER 0 #define CONFIG_ASHOWINFO_FILTER 0 #define CONFIG_ASIDEDATA_FILTER 0 #define CONFIG_ASPLIT_FILTER 0 #define CONFIG_ASTATS_FILTER 0 #define CONFIG_ASTREAMSELECT_FILTER 0 #define CONFIG_ASYNCTS_FILTER 0 #define CONFIG_ATEMPO_FILTER 0 #define CONFIG_ATRIM_FILTER 0 #define CONFIG_AZMQ_FILTER 0 #define CONFIG_BANDPASS_FILTER 0 #define CONFIG_BANDREJECT_FILTER 0 #define CONFIG_BASS_FILTER 0 #define CONFIG_BIQUAD_FILTER 0 #define CONFIG_BS2B_FILTER 0 #define CONFIG_CHANNELMAP_FILTER 0 #define CONFIG_CHANNELSPLIT_FILTER 0 #define CONFIG_CHORUS_FILTER 0 #define CONFIG_COMPAND_FILTER 0 #define CONFIG_COMPENSATIONDELAY_FILTER 0 #define CONFIG_CRYSTALIZER_FILTER 0 #define CONFIG_DCSHIFT_FILTER 0 #define CONFIG_DYNAUDNORM_FILTER 0 #define CONFIG_EARWAX_FILTER 0 #define CONFIG_EBUR128_FILTER 0 #define CONFIG_EQUALIZER_FILTER 0 #define CONFIG_EXTRASTEREO_FILTER 0 #define CONFIG_FIREQUALIZER_FILTER 0 #define CONFIG_FLANGER_FILTER 0 #define CONFIG_HDCD_FILTER 0 #define CONFIG_HIGHPASS_FILTER 0 #define CONFIG_JOIN_FILTER 0 #define CONFIG_LADSPA_FILTER 0 #define CONFIG_LOUDNORM_FILTER 0 #define CONFIG_LOWPASS_FILTER 0 #define CONFIG_PAN_FILTER 0 #define CONFIG_REPLAYGAIN_FILTER 0 #define CONFIG_RESAMPLE_FILTER 0 #define CONFIG_RUBBERBAND_FILTER 0 #define CONFIG_SIDECHAINCOMPRESS_FILTER 0 #define CONFIG_SIDECHAINGATE_FILTER 0 #define CONFIG_SILENCEDETECT_FILTER 0 #define CONFIG_SILENCEREMOVE_FILTER 0 #define CONFIG_SOFALIZER_FILTER 0 #define CONFIG_STEREOTOOLS_FILTER 0 #define CONFIG_STEREOWIDEN_FILTER 0 #define CONFIG_TREBLE_FILTER 0 #define CONFIG_TREMOLO_FILTER 0 #define CONFIG_VIBRATO_FILTER 0 #define CONFIG_VOLUME_FILTER 0 #define CONFIG_VOLUMEDETECT_FILTER 0 #define CONFIG_AEVALSRC_FILTER 0 #define CONFIG_ANOISESRC_FILTER 0 #define CONFIG_ANULLSRC_FILTER 0 #define CONFIG_FLITE_FILTER 0 #define CONFIG_SINE_FILTER 0 #define CONFIG_ANULLSINK_FILTER 0 #define CONFIG_ALPHAEXTRACT_FILTER 0 #define CONFIG_ALPHAMERGE_FILTER 0 #define CONFIG_ASS_FILTER 0 #define CONFIG_ATADENOISE_FILTER 0 #define CONFIG_AVGBLUR_FILTER 0 #define CONFIG_BBOX_FILTER 0 #define CONFIG_BENCH_FILTER 0 #define CONFIG_BITPLANENOISE_FILTER 0 #define CONFIG_BLACKDETECT_FILTER 0 #define CONFIG_BLACKFRAME_FILTER 0 #define CONFIG_BLEND_FILTER 0 #define CONFIG_BOXBLUR_FILTER 0 #define CONFIG_BWDIF_FILTER 0 #define CONFIG_CHROMAKEY_FILTER 0 #define CONFIG_CIESCOPE_FILTER 0 #define CONFIG_CODECVIEW_FILTER 0 #define CONFIG_COLORBALANCE_FILTER 0 #define CONFIG_COLORCHANNELMIXER_FILTER 0 #define CONFIG_COLORKEY_FILTER 0 #define CONFIG_COLORLEVELS_FILTER 0 #define CONFIG_COLORMATRIX_FILTER 0 #define CONFIG_COLORSPACE_FILTER 0 #define CONFIG_CONVOLUTION_FILTER 0 #define CONFIG_COPY_FILTER 0 #define CONFIG_COREIMAGE_FILTER 0 #define CONFIG_COVER_RECT_FILTER 0 #define CONFIG_CROP_FILTER 0 #define CONFIG_CROPDETECT_FILTER 0 #define CONFIG_CURVES_FILTER 0 #define CONFIG_DATASCOPE_FILTER 0 #define CONFIG_DCTDNOIZ_FILTER 0 #define CONFIG_DEBAND_FILTER 0 #define CONFIG_DECIMATE_FILTER 0 #define CONFIG_DEFLATE_FILTER 0 #define CONFIG_DEJUDDER_FILTER 0 #define CONFIG_DELOGO_FILTER 0 #define CONFIG_DESHAKE_FILTER 0 #define CONFIG_DETELECINE_FILTER 0 #define CONFIG_DILATION_FILTER 0 #define CONFIG_DISPLACE_FILTER 0 #define CONFIG_DRAWBOX_FILTER 0 #define CONFIG_DRAWGRAPH_FILTER 0 #define CONFIG_DRAWGRID_FILTER 0 #define CONFIG_DRAWTEXT_FILTER 0 #define CONFIG_EDGEDETECT_FILTER 0 #define CONFIG_ELBG_FILTER 0 #define CONFIG_EQ_FILTER 0 #define CONFIG_EROSION_FILTER 0 #define CONFIG_EXTRACTPLANES_FILTER 0 #define CONFIG_FADE_FILTER 0 #define CONFIG_FFTFILT_FILTER 0 #define CONFIG_FIELD_FILTER 0 #define CONFIG_FIELDHINT_FILTER 0 #define CONFIG_FIELDMATCH_FILTER 0 #define CONFIG_FIELDORDER_FILTER 0 #define CONFIG_FIND_RECT_FILTER 0 #define CONFIG_FORMAT_FILTER 0 #define CONFIG_FPS_FILTER 0 #define CONFIG_FRAMEPACK_FILTER 0 #define CONFIG_FRAMERATE_FILTER 0 #define CONFIG_FRAMESTEP_FILTER 0 #define CONFIG_FREI0R_FILTER 0 #define CONFIG_FSPP_FILTER 0 #define CONFIG_GBLUR_FILTER 0 #define CONFIG_GEQ_FILTER 0 #define CONFIG_GRADFUN_FILTER 0 #define CONFIG_HALDCLUT_FILTER 0 #define CONFIG_HFLIP_FILTER 0 #define CONFIG_HISTEQ_FILTER 0 #define CONFIG_HISTOGRAM_FILTER 0 #define CONFIG_HQDN3D_FILTER 0 #define CONFIG_HQX_FILTER 0 #define CONFIG_HSTACK_FILTER 0 #define CONFIG_HUE_FILTER 0 #define CONFIG_HWDOWNLOAD_FILTER 0 #define CONFIG_HWUPLOAD_FILTER 0 #define CONFIG_HWUPLOAD_CUDA_FILTER 0 #define CONFIG_HYSTERESIS_FILTER 0 #define CONFIG_IDET_FILTER 0 #define CONFIG_IL_FILTER 0 #define CONFIG_INFLATE_FILTER 0 #define CONFIG_INTERLACE_FILTER 0 #define CONFIG_INTERLEAVE_FILTER 0 #define CONFIG_KERNDEINT_FILTER 0 #define CONFIG_LENSCORRECTION_FILTER 0 #define CONFIG_LOOP_FILTER 0 #define CONFIG_LUT_FILTER 0 #define CONFIG_LUT2_FILTER 0 #define CONFIG_LUT3D_FILTER 0 #define CONFIG_LUTRGB_FILTER 0 #define CONFIG_LUTYUV_FILTER 0 #define CONFIG_MASKEDCLAMP_FILTER 0 #define CONFIG_MASKEDMERGE_FILTER 0 #define CONFIG_MCDEINT_FILTER 0 #define CONFIG_MERGEPLANES_FILTER 0 #define CONFIG_MESTIMATE_FILTER 0 #define CONFIG_METADATA_FILTER 0 #define CONFIG_MINTERPOLATE_FILTER 0 #define CONFIG_MPDECIMATE_FILTER 0 #define CONFIG_NEGATE_FILTER 0 #define CONFIG_NLMEANS_FILTER 0 #define CONFIG_NNEDI_FILTER 0 #define CONFIG_NOFORMAT_FILTER 0 #define CONFIG_NOISE_FILTER 0 #define CONFIG_NULL_FILTER 0 #define CONFIG_OCR_FILTER 0 #define CONFIG_OCV_FILTER 0 #define CONFIG_OVERLAY_FILTER 0 #define CONFIG_OWDENOISE_FILTER 0 #define CONFIG_PAD_FILTER 0 #define CONFIG_PALETTEGEN_FILTER 0 #define CONFIG_PALETTEUSE_FILTER 0 #define CONFIG_PERMS_FILTER 0 #define CONFIG_PERSPECTIVE_FILTER 0 #define CONFIG_PHASE_FILTER 0 #define CONFIG_PIXDESCTEST_FILTER 0 #define CONFIG_PP_FILTER 0 #define CONFIG_PP7_FILTER 0 #define CONFIG_PREWITT_FILTER 0 #define CONFIG_PSNR_FILTER 0 #define CONFIG_PULLUP_FILTER 0 #define CONFIG_QP_FILTER 0 #define CONFIG_RANDOM_FILTER 0 #define CONFIG_READVITC_FILTER 0 #define CONFIG_REALTIME_FILTER 0 #define CONFIG_REMAP_FILTER 0 #define CONFIG_REMOVEGRAIN_FILTER 0 #define CONFIG_REMOVELOGO_FILTER 0 #define CONFIG_REPEATFIELDS_FILTER 0 #define CONFIG_REVERSE_FILTER 0 #define CONFIG_ROTATE_FILTER 0 #define CONFIG_SAB_FILTER 0 #define CONFIG_SCALE_FILTER 0 #define CONFIG_SCALE_NPP_FILTER 0 #define CONFIG_SCALE_VAAPI_FILTER 0 #define CONFIG_SCALE2REF_FILTER 0 #define CONFIG_SELECT_FILTER 0 #define CONFIG_SELECTIVECOLOR_FILTER 0 #define CONFIG_SENDCMD_FILTER 0 #define CONFIG_SEPARATEFIELDS_FILTER 0 #define CONFIG_SETDAR_FILTER 0 #define CONFIG_SETFIELD_FILTER 0 #define CONFIG_SETPTS_FILTER 0 #define CONFIG_SETSAR_FILTER 0 #define CONFIG_SETTB_FILTER 0 #define CONFIG_SHOWINFO_FILTER 0 #define CONFIG_SHOWPALETTE_FILTER 0 #define CONFIG_SHUFFLEFRAMES_FILTER 0 #define CONFIG_SHUFFLEPLANES_FILTER 0 #define CONFIG_SIDEDATA_FILTER 0 #define CONFIG_SIGNALSTATS_FILTER 0 #define CONFIG_SMARTBLUR_FILTER 0 #define CONFIG_SOBEL_FILTER 0 #define CONFIG_SPLIT_FILTER 0 #define CONFIG_SPP_FILTER 0 #define CONFIG_SSIM_FILTER 0 #define CONFIG_STEREO3D_FILTER 0 #define CONFIG_STREAMSELECT_FILTER 0 #define CONFIG_SUBTITLES_FILTER 0 #define CONFIG_SUPER2XSAI_FILTER 0 #define CONFIG_SWAPRECT_FILTER 0 #define CONFIG_SWAPUV_FILTER 0 #define CONFIG_TBLEND_FILTER 0 #define CONFIG_TELECINE_FILTER 0 #define CONFIG_THUMBNAIL_FILTER 0 #define CONFIG_TILE_FILTER 0 #define CONFIG_TINTERLACE_FILTER 0 #define CONFIG_TRANSPOSE_FILTER 0 #define CONFIG_TRIM_FILTER 0 #define CONFIG_UNSHARP_FILTER 0 #define CONFIG_USPP_FILTER 0 #define CONFIG_VAGUEDENOISER_FILTER 0 #define CONFIG_VECTORSCOPE_FILTER 0 #define CONFIG_VFLIP_FILTER 0 #define CONFIG_VIDSTABDETECT_FILTER 0 #define CONFIG_VIDSTABTRANSFORM_FILTER 0 #define CONFIG_VIGNETTE_FILTER 0 #define CONFIG_VSTACK_FILTER 0 #define CONFIG_W3FDIF_FILTER 0 #define CONFIG_WAVEFORM_FILTER 0 #define CONFIG_WEAVE_FILTER 0 #define CONFIG_XBR_FILTER 0 #define CONFIG_YADIF_FILTER 0 #define CONFIG_ZMQ_FILTER 0 #define CONFIG_ZOOMPAN_FILTER 0 #define CONFIG_ZSCALE_FILTER 0 #define CONFIG_ALLRGB_FILTER 0 #define CONFIG_ALLYUV_FILTER 0 #define CONFIG_CELLAUTO_FILTER 0 #define CONFIG_COLOR_FILTER 0 #define CONFIG_COREIMAGESRC_FILTER 0 #define CONFIG_FREI0R_SRC_FILTER 0 #define CONFIG_HALDCLUTSRC_FILTER 0 #define CONFIG_LIFE_FILTER 0 #define CONFIG_MANDELBROT_FILTER 0 #define CONFIG_MPTESTSRC_FILTER 0 #define CONFIG_NULLSRC_FILTER 0 #define CONFIG_RGBTESTSRC_FILTER 0 #define CONFIG_SMPTEBARS_FILTER 0 #define CONFIG_SMPTEHDBARS_FILTER 0 #define CONFIG_TESTSRC_FILTER 0 #define CONFIG_TESTSRC2_FILTER 0 #define CONFIG_YUVTESTSRC_FILTER 0 #define CONFIG_NULLSINK_FILTER 0 #define CONFIG_ADRAWGRAPH_FILTER 0 #define CONFIG_AHISTOGRAM_FILTER 0 #define CONFIG_APHASEMETER_FILTER 0 #define CONFIG_AVECTORSCOPE_FILTER 0 #define CONFIG_CONCAT_FILTER 0 #define CONFIG_SHOWCQT_FILTER 0 #define CONFIG_SHOWFREQS_FILTER 0 #define CONFIG_SHOWSPECTRUM_FILTER 0 #define CONFIG_SHOWSPECTRUMPIC_FILTER 0 #define CONFIG_SHOWVOLUME_FILTER 0 #define CONFIG_SHOWWAVES_FILTER 0 #define CONFIG_SHOWWAVESPIC_FILTER 0 #define CONFIG_SPECTRUMSYNTH_FILTER 0 #define CONFIG_AMOVIE_FILTER 0 #define CONFIG_MOVIE_FILTER 0 #define CONFIG_H263_CUVID_HWACCEL 0 #define CONFIG_H263_VAAPI_HWACCEL 0 #define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_H264_CUVID_HWACCEL 0 #define CONFIG_H264_D3D11VA_HWACCEL 0 #define CONFIG_H264_DXVA2_HWACCEL 0 #define CONFIG_H264_MEDIACODEC_HWACCEL 0 #define CONFIG_H264_MMAL_HWACCEL 0 #define CONFIG_H264_QSV_HWACCEL 0 #define CONFIG_H264_VAAPI_HWACCEL 0 #define CONFIG_H264_VDA_HWACCEL 0 #define CONFIG_H264_VDA_OLD_HWACCEL 0 #define CONFIG_H264_VDPAU_HWACCEL 0 #define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_HEVC_CUVID_HWACCEL 0 #define CONFIG_HEVC_D3D11VA_HWACCEL 0 #define CONFIG_HEVC_DXVA2_HWACCEL 0 #define CONFIG_HEVC_MEDIACODEC_HWACCEL 0 #define CONFIG_HEVC_QSV_HWACCEL 0 #define CONFIG_HEVC_VAAPI_HWACCEL 0 #define CONFIG_HEVC_VDPAU_HWACCEL 0 #define CONFIG_MJPEG_CUVID_HWACCEL 0 #define CONFIG_MPEG1_CUVID_HWACCEL 0 #define CONFIG_MPEG1_XVMC_HWACCEL 0 #define CONFIG_MPEG1_VDPAU_HWACCEL 0 #define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_MPEG2_CUVID_HWACCEL 0 #define CONFIG_MPEG2_XVMC_HWACCEL 0 #define CONFIG_MPEG2_D3D11VA_HWACCEL 0 #define CONFIG_MPEG2_DXVA2_HWACCEL 0 #define CONFIG_MPEG2_MMAL_HWACCEL 0 #define CONFIG_MPEG2_QSV_HWACCEL 0 #define CONFIG_MPEG2_VAAPI_HWACCEL 0 #define CONFIG_MPEG2_VDPAU_HWACCEL 0 #define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_MPEG4_CUVID_HWACCEL 0 #define CONFIG_MPEG4_MEDIACODEC_HWACCEL 0 #define CONFIG_MPEG4_MMAL_HWACCEL 0 #define CONFIG_MPEG4_VAAPI_HWACCEL 0 #define CONFIG_MPEG4_VDPAU_HWACCEL 0 #define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_VC1_CUVID_HWACCEL 0 #define CONFIG_VC1_D3D11VA_HWACCEL 0 #define CONFIG_VC1_DXVA2_HWACCEL 0 #define CONFIG_VC1_VAAPI_HWACCEL 0 #define CONFIG_VC1_VDPAU_HWACCEL 0 #define CONFIG_VC1_MMAL_HWACCEL 0 #define CONFIG_VC1_QSV_HWACCEL 0 #define CONFIG_VP8_CUVID_HWACCEL 0 #define CONFIG_VP8_MEDIACODEC_HWACCEL 0 #define CONFIG_VP9_CUVID_HWACCEL 0 #define CONFIG_VP9_D3D11VA_HWACCEL 0 #define CONFIG_VP9_DXVA2_HWACCEL 0 #define CONFIG_VP9_MEDIACODEC_HWACCEL 0 #define CONFIG_VP9_VAAPI_HWACCEL 0 #define CONFIG_WMV3_D3D11VA_HWACCEL 0 #define CONFIG_WMV3_DXVA2_HWACCEL 0 #define CONFIG_WMV3_VAAPI_HWACCEL 0 #define CONFIG_WMV3_VDPAU_HWACCEL 0 #define CONFIG_ALSA_INDEV 0 #define CONFIG_AVFOUNDATION_INDEV 0 #define CONFIG_BKTR_INDEV 0 #define CONFIG_DECKLINK_INDEV 0 #define CONFIG_DSHOW_INDEV 0 #define CONFIG_DV1394_INDEV 0 #define CONFIG_FBDEV_INDEV 0 #define CONFIG_GDIGRAB_INDEV 0 #define CONFIG_IEC61883_INDEV 0 #define CONFIG_JACK_INDEV 0 #define CONFIG_LAVFI_INDEV 0 #define CONFIG_OPENAL_INDEV 0 #define CONFIG_OSS_INDEV 0 #define CONFIG_PULSE_INDEV 0 #define CONFIG_QTKIT_INDEV 0 #define CONFIG_SNDIO_INDEV 0 #define CONFIG_V4L2_INDEV 0 #define CONFIG_VFWCAP_INDEV 0 #define CONFIG_X11GRAB_INDEV 0 #define CONFIG_X11GRAB_XCB_INDEV 0 #define CONFIG_LIBCDIO_INDEV 0 #define CONFIG_LIBDC1394_INDEV 0 #define CONFIG_A64_MUXER 0 #define CONFIG_AC3_MUXER 0 #define CONFIG_ADTS_MUXER 0 #define CONFIG_ADX_MUXER 0 #define CONFIG_AIFF_MUXER 0 #define CONFIG_AMR_MUXER 0 #define CONFIG_APNG_MUXER 0 #define CONFIG_ASF_MUXER 0 #define CONFIG_ASS_MUXER 0 #define CONFIG_AST_MUXER 0 #define CONFIG_ASF_STREAM_MUXER 0 #define CONFIG_AU_MUXER 0 #define CONFIG_AVI_MUXER 0 #define CONFIG_AVM2_MUXER 0 #define CONFIG_BIT_MUXER 0 #define CONFIG_CAF_MUXER 0 #define CONFIG_CAVSVIDEO_MUXER 0 #define CONFIG_CRC_MUXER 0 #define CONFIG_DASH_MUXER 0 #define CONFIG_DATA_MUXER 0 #define CONFIG_DAUD_MUXER 0 #define CONFIG_DIRAC_MUXER 0 #define CONFIG_DNXHD_MUXER 0 #define CONFIG_DTS_MUXER 0 #define CONFIG_DV_MUXER 0 #define CONFIG_EAC3_MUXER 0 #define CONFIG_F4V_MUXER 0 #define CONFIG_FFM_MUXER 0 #define CONFIG_FFMETADATA_MUXER 0 #define CONFIG_FIFO_MUXER 0 #define CONFIG_FILMSTRIP_MUXER 0 #define CONFIG_FLAC_MUXER 0 #define CONFIG_FLV_MUXER 0 #define CONFIG_FRAMECRC_MUXER 0 #define CONFIG_FRAMEHASH_MUXER 0 #define CONFIG_FRAMEMD5_MUXER 0 #define CONFIG_G722_MUXER 0 #define CONFIG_G723_1_MUXER 0 #define CONFIG_GIF_MUXER 0 #define CONFIG_GSM_MUXER 0 #define CONFIG_GXF_MUXER 0 #define CONFIG_H261_MUXER 0 #define CONFIG_H263_MUXER 0 #define CONFIG_H264_MUXER 0 #define CONFIG_HASH_MUXER 0 #define CONFIG_HDS_MUXER 0 #define CONFIG_HEVC_MUXER 0 #define CONFIG_HLS_MUXER 0 #define CONFIG_ICO_MUXER 0 #define CONFIG_ILBC_MUXER 0 #define CONFIG_IMAGE2_MUXER 0 #define CONFIG_IMAGE2PIPE_MUXER 0 #define CONFIG_IPOD_MUXER 0 #define CONFIG_IRCAM_MUXER 0 #define CONFIG_ISMV_MUXER 0 #define CONFIG_IVF_MUXER 0 #define CONFIG_JACOSUB_MUXER 0 #define CONFIG_LATM_MUXER 0 #define CONFIG_LRC_MUXER 0 #define CONFIG_M4V_MUXER 0 #define CONFIG_MD5_MUXER 0 #define CONFIG_MATROSKA_MUXER 0 #define CONFIG_MATROSKA_AUDIO_MUXER 0 #define CONFIG_MICRODVD_MUXER 0 #define CONFIG_MJPEG_MUXER 0 #define CONFIG_MLP_MUXER 0 #define CONFIG_MMF_MUXER 0 #define CONFIG_MOV_MUXER 1 #define CONFIG_MP2_MUXER 0 #define CONFIG_MP3_MUXER 0 #define CONFIG_MP4_MUXER 1 #define CONFIG_MPEG1SYSTEM_MUXER 0 #define CONFIG_MPEG1VCD_MUXER 0 #define CONFIG_MPEG1VIDEO_MUXER 0 #define CONFIG_MPEG2DVD_MUXER 0 #define CONFIG_MPEG2SVCD_MUXER 0 #define CONFIG_MPEG2VIDEO_MUXER 0 #define CONFIG_MPEG2VOB_MUXER 0 #define CONFIG_MPEGTS_MUXER 0 #define CONFIG_MPJPEG_MUXER 0 #define CONFIG_MXF_MUXER 0 #define CONFIG_MXF_D10_MUXER 0 #define CONFIG_MXF_OPATOM_MUXER 0 #define CONFIG_NULL_MUXER 0 #define CONFIG_NUT_MUXER 0 #define CONFIG_OGA_MUXER 0 #define CONFIG_OGG_MUXER 0 #define CONFIG_OGV_MUXER 0 #define CONFIG_OMA_MUXER 0 #define CONFIG_OPUS_MUXER 0 #define CONFIG_PCM_ALAW_MUXER 0 #define CONFIG_PCM_MULAW_MUXER 0 #define CONFIG_PCM_F64BE_MUXER 0 #define CONFIG_PCM_F64LE_MUXER 0 #define CONFIG_PCM_F32BE_MUXER 0 #define CONFIG_PCM_F32LE_MUXER 0 #define CONFIG_PCM_S32BE_MUXER 0 #define CONFIG_PCM_S32LE_MUXER 0 #define CONFIG_PCM_S24BE_MUXER 0 #define CONFIG_PCM_S24LE_MUXER 0 #define CONFIG_PCM_S16BE_MUXER 0 #define CONFIG_PCM_S16LE_MUXER 0 #define CONFIG_PCM_S8_MUXER 0 #define CONFIG_PCM_U32BE_MUXER 0 #define CONFIG_PCM_U32LE_MUXER 0 #define CONFIG_PCM_U24BE_MUXER 0 #define CONFIG_PCM_U24LE_MUXER 0 #define CONFIG_PCM_U16BE_MUXER 0 #define CONFIG_PCM_U16LE_MUXER 0 #define CONFIG_PCM_U8_MUXER 0 #define CONFIG_PSP_MUXER 0 #define CONFIG_RAWVIDEO_MUXER 0 #define CONFIG_RM_MUXER 0 #define CONFIG_ROQ_MUXER 0 #define CONFIG_RSO_MUXER 0 #define CONFIG_RTP_MUXER 0 #define CONFIG_RTP_MPEGTS_MUXER 0 #define CONFIG_RTSP_MUXER 0 #define CONFIG_SAP_MUXER 0 #define CONFIG_SEGMENT_MUXER 0 #define CONFIG_STREAM_SEGMENT_MUXER 0 #define CONFIG_SINGLEJPEG_MUXER 0 #define CONFIG_SMJPEG_MUXER 0 #define CONFIG_SMOOTHSTREAMING_MUXER 0 #define CONFIG_SOX_MUXER 0 #define CONFIG_SPX_MUXER 0 #define CONFIG_SPDIF_MUXER 0 #define CONFIG_SRT_MUXER 0 #define CONFIG_SWF_MUXER 0 #define CONFIG_TEE_MUXER 0 #define CONFIG_TG2_MUXER 0 #define CONFIG_TGP_MUXER 0 #define CONFIG_MKVTIMESTAMP_V2_MUXER 0 #define CONFIG_TRUEHD_MUXER 0 #define CONFIG_TTA_MUXER 0 #define CONFIG_UNCODEDFRAMECRC_MUXER 0 #define CONFIG_VC1_MUXER 0 #define CONFIG_VC1T_MUXER 0 #define CONFIG_VOC_MUXER 0 #define CONFIG_W64_MUXER 0 #define CONFIG_WAV_MUXER 0 #define CONFIG_WEBM_MUXER 0 #define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 #define CONFIG_WEBM_CHUNK_MUXER 0 #define CONFIG_WEBP_MUXER 0 #define CONFIG_WEBVTT_MUXER 0 #define CONFIG_WTV_MUXER 0 #define CONFIG_WV_MUXER 0 #define CONFIG_YUV4MPEGPIPE_MUXER 0 #define CONFIG_CHROMAPRINT_MUXER 0 #define CONFIG_LIBNUT_MUXER 0 #define CONFIG_ALSA_OUTDEV 0 #define CONFIG_CACA_OUTDEV 0 #define CONFIG_DECKLINK_OUTDEV 0 #define CONFIG_FBDEV_OUTDEV 0 #define CONFIG_OPENGL_OUTDEV 0 #define CONFIG_OSS_OUTDEV 0 #define CONFIG_PULSE_OUTDEV 0 #define CONFIG_SDL2_OUTDEV 0 #define CONFIG_SNDIO_OUTDEV 0 #define CONFIG_V4L2_OUTDEV 0 #define CONFIG_XV_OUTDEV 0 #define CONFIG_AAC_PARSER 1 #define CONFIG_AAC_LATM_PARSER 1 #define CONFIG_AC3_PARSER 0 #define CONFIG_ADX_PARSER 0 #define CONFIG_BMP_PARSER 0 #define CONFIG_CAVSVIDEO_PARSER 0 #define CONFIG_COOK_PARSER 0 #define CONFIG_DCA_PARSER 0 #define CONFIG_DIRAC_PARSER 0 #define CONFIG_DNXHD_PARSER 0 #define CONFIG_DPX_PARSER 0 #define CONFIG_DVAUDIO_PARSER 0 #define CONFIG_DVBSUB_PARSER 0 #define CONFIG_DVDSUB_PARSER 0 #define CONFIG_DVD_NAV_PARSER 0 #define CONFIG_FLAC_PARSER 0 #define CONFIG_G729_PARSER 0 #define CONFIG_GSM_PARSER 0 #define CONFIG_H261_PARSER 0 #define CONFIG_H263_PARSER 1 #define CONFIG_H264_PARSER 1 #define CONFIG_HEVC_PARSER 0 #define CONFIG_MJPEG_PARSER 0 #define CONFIG_MLP_PARSER 0 #define CONFIG_MPEG4VIDEO_PARSER 0 #define CONFIG_MPEGAUDIO_PARSER 1 #define CONFIG_MPEGVIDEO_PARSER 0 #define CONFIG_OPUS_PARSER 0 #define CONFIG_PNG_PARSER 0 #define CONFIG_PNM_PARSER 0 #define CONFIG_RV30_PARSER 0 #define CONFIG_RV40_PARSER 0 #define CONFIG_TAK_PARSER 0 #define CONFIG_VC1_PARSER 0 #define CONFIG_VORBIS_PARSER 0 #define CONFIG_VP3_PARSER 0 #define CONFIG_VP8_PARSER 0 #define CONFIG_VP9_PARSER 0 #define CONFIG_ASYNC_PROTOCOL 1 #define CONFIG_BLURAY_PROTOCOL 0 #define CONFIG_CACHE_PROTOCOL 1 #define CONFIG_CONCAT_PROTOCOL 0 #define CONFIG_CRYPTO_PROTOCOL 0 #define CONFIG_DATA_PROTOCOL 1 #define CONFIG_FFRTMPCRYPT_PROTOCOL 0 #define CONFIG_FFRTMPHTTP_PROTOCOL 1 #define CONFIG_FILE_PROTOCOL 1 #define CONFIG_FTP_PROTOCOL 1 #define CONFIG_GOPHER_PROTOCOL 0 #define CONFIG_HLS_PROTOCOL 1 #define CONFIG_HTTP_PROTOCOL 1 #define CONFIG_HTTPPROXY_PROTOCOL 1 #define CONFIG_HTTPS_PROTOCOL 1 #define CONFIG_ICECAST_PROTOCOL 0 #define CONFIG_IJKHTTPHOOK_PROTOCOL 1 #define CONFIG_IJKLONGURL_PROTOCOL 1 #define CONFIG_IJKMEDIADATASOURCE_PROTOCOL 1 #define CONFIG_IJKSEGMENT_PROTOCOL 1 #define CONFIG_IJKTCPHOOK_PROTOCOL 1 #define CONFIG_IJKIO_PROTOCOL 1 #define CONFIG_MMSH_PROTOCOL 0 #define CONFIG_MMST_PROTOCOL 0 #define CONFIG_MD5_PROTOCOL 0 #define CONFIG_PIPE_PROTOCOL 1 #define CONFIG_RTMP_PROTOCOL 1 #define CONFIG_RTMPE_PROTOCOL 0 #define CONFIG_RTMPS_PROTOCOL 0 #define CONFIG_RTMPT_PROTOCOL 1 #define CONFIG_RTMPTE_PROTOCOL 0 #define CONFIG_RTMPTS_PROTOCOL 0 #define CONFIG_RTP_PROTOCOL 0 #define CONFIG_SCTP_PROTOCOL 0 #define CONFIG_SRTP_PROTOCOL 0 #define CONFIG_SUBFILE_PROTOCOL 0 #define CONFIG_TEE_PROTOCOL 1 #define CONFIG_TCP_PROTOCOL 1 #define CONFIG_TLS_GNUTLS_PROTOCOL 0 #define CONFIG_TLS_SCHANNEL_PROTOCOL 0 #define CONFIG_TLS_SECURETRANSPORT_PROTOCOL 0 #define CONFIG_TLS_OPENSSL_PROTOCOL 1 #define CONFIG_UDP_PROTOCOL 1 #define CONFIG_UDPLITE_PROTOCOL 1 #define CONFIG_UNIX_PROTOCOL 0 #define CONFIG_LIBRTMP_PROTOCOL 0 #define CONFIG_LIBRTMPE_PROTOCOL 0 #define CONFIG_LIBRTMPS_PROTOCOL 0 #define CONFIG_LIBRTMPT_PROTOCOL 0 #define CONFIG_LIBRTMPTE_PROTOCOL 0 #define CONFIG_LIBSSH_PROTOCOL 0 #define CONFIG_LIBSMBCLIENT_PROTOCOL 0 #endif /* FFMPEG_CONFIG_H */ ================================================ FILE: 3rParty/FFmpeg/include/libffmpeg/x86_64/config.h ================================================ /* Automatically generated by configure - do not modify! */ #ifndef FFMPEG_CONFIG_H #define FFMPEG_CONFIG_H #define FFMPEG_CONFIGURATION "--disable-gpl --disable-nonfree --enable-runtime-cpudetect --disable-gray --disable-swscale-alpha --disable-programs --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-avdevice --enable-avcodec --enable-avformat --enable-avutil --enable-swresample --enable-swscale --disable-postproc --enable-avfilter --disable-avresample --enable-network --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --disable-encoders --disable-decoders --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=flv --enable-decoder=h264 --enable-decoder='mp3*' --enable-decoder=vp6f --disable-hwaccels --disable-muxers --enable-muxer=mp4 --disable-demuxers --enable-demuxer=aac --enable-demuxer=concat --enable-demuxer=data --enable-demuxer=flv --enable-demuxer=hls --enable-demuxer=live_flv --enable-demuxer=mov --enable-demuxer=mp3 --enable-demuxer=mpegps --enable-demuxer=mpegts --enable-demuxer=mpegvideo --disable-parsers --enable-parser=aac --enable-parser=aac_latm --enable-parser=h264 --enable-bsfs --disable-bsf=chomp --disable-bsf=dca_core --disable-bsf=dump_extradata --disable-bsf=hevc_mp4toannexb --disable-bsf=imx_dump_header --disable-bsf=mjpeg2jpeg --disable-bsf=mjpega_dump_header --disable-bsf=mov2textsub --disable-bsf=mp3_header_decompress --disable-bsf=mpeg4_unpack_bframes --disable-bsf=noise --disable-bsf=remove_extradata --disable-bsf=text2movsub --disable-bsf=vp9_superframe --enable-protocols --enable-protocol=async --disable-protocol=bluray --disable-protocol=concat --disable-protocol=crypto --disable-protocol=ffrtmpcrypt --enable-protocol=ffrtmphttp --disable-protocol=gopher --disable-protocol=icecast --disable-protocol='librtmp*' --disable-protocol=libssh --disable-protocol=md5 --disable-protocol=mmsh --disable-protocol=mmst --disable-protocol='rtmp*' --enable-protocol=rtmp --enable-protocol=rtmpt --disable-protocol=rtp --disable-protocol=sctp --disable-protocol=srtp --disable-protocol=subfile --disable-protocol=unix --disable-devices --disable-filters --disable-iconv --disable-audiotoolbox --disable-videotoolbox --enable-cross-compile --disable-stripping --arch=x86_64 --target-os=darwin --enable-static --disable-shared --disable-asm --disable-mmx --assert-level=2 --prefix=/Users/lhl/Downloads/ijkplayer-master/ios/build/ffmpeg-x86_64/output --enable-openssl --cc='xcrun -sdk iphonesimulator clang' --extra-cflags=' -arch x86_64 -mios-simulator-version-min=7.0 -I/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-x86_64/output/include' --extra-cxxflags=' -arch x86_64 -mios-simulator-version-min=7.0 -I/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-x86_64/output/include' --extra-ldflags=' -arch x86_64 -mios-simulator-version-min=7.0 -arch x86_64 -mios-simulator-version-min=7.0 -I/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-x86_64/output/include -L/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-x86_64/output/lib -lssl -lcrypto'" #define FFMPEG_LICENSE "LGPL version 2.1 or later" #define CONFIG_THIS_YEAR 2016 #define FFMPEG_DATADIR "/Users/lhl/Downloads/ijkplayer-master/ios/build/ffmpeg-x86_64/output/share/ffmpeg" #define AVCONV_DATADIR "/Users/lhl/Downloads/ijkplayer-master/ios/build/ffmpeg-x86_64/output/share/ffmpeg" #define CC_IDENT "Apple LLVM version 8.0.0 (clang-800.0.42.1)" #define av_restrict restrict #define EXTERN_PREFIX "_" #define EXTERN_ASM _ #define BUILDSUF "" #define SLIBSUF ".dylib" #define HAVE_MMX2 HAVE_MMXEXT #define SWS_MAX_FILTER_SIZE 256 #define ASSERT_LEVEL 2 #define ARCH_AARCH64 0 #define ARCH_ALPHA 0 #define ARCH_ARM 0 #define ARCH_AVR32 0 #define ARCH_AVR32_AP 0 #define ARCH_AVR32_UC 0 #define ARCH_BFIN 0 #define ARCH_IA64 0 #define ARCH_M68K 0 #define ARCH_MIPS 0 #define ARCH_MIPS64 0 #define ARCH_PARISC 0 #define ARCH_PPC 0 #define ARCH_PPC64 0 #define ARCH_S390 0 #define ARCH_SH4 0 #define ARCH_SPARC 0 #define ARCH_SPARC64 0 #define ARCH_TILEGX 0 #define ARCH_TILEPRO 0 #define ARCH_TOMI 0 #define ARCH_X86 0 #define ARCH_X86_32 0 #define ARCH_X86_64 0 #define HAVE_ARMV5TE 0 #define HAVE_ARMV6 0 #define HAVE_ARMV6T2 0 #define HAVE_ARMV8 0 #define HAVE_NEON 0 #define HAVE_VFP 0 #define HAVE_VFPV3 0 #define HAVE_SETEND 0 #define HAVE_ALTIVEC 0 #define HAVE_DCBZL 0 #define HAVE_LDBRX 0 #define HAVE_POWER8 0 #define HAVE_PPC4XX 0 #define HAVE_VSX 0 #define HAVE_AESNI 0 #define HAVE_AMD3DNOW 0 #define HAVE_AMD3DNOWEXT 0 #define HAVE_AVX 0 #define HAVE_AVX2 0 #define HAVE_FMA3 0 #define HAVE_FMA4 0 #define HAVE_MMX 0 #define HAVE_MMXEXT 0 #define HAVE_SSE 0 #define HAVE_SSE2 0 #define HAVE_SSE3 0 #define HAVE_SSE4 0 #define HAVE_SSE42 0 #define HAVE_SSSE3 0 #define HAVE_XOP 0 #define HAVE_CPUNOP 0 #define HAVE_I686 0 #define HAVE_MIPSFPU 0 #define HAVE_MIPS32R2 0 #define HAVE_MIPS32R5 0 #define HAVE_MIPS64R2 0 #define HAVE_MIPS32R6 0 #define HAVE_MIPS64R6 0 #define HAVE_MIPSDSP 0 #define HAVE_MIPSDSPR2 0 #define HAVE_MSA 0 #define HAVE_LOONGSON2 0 #define HAVE_LOONGSON3 0 #define HAVE_MMI 0 #define HAVE_ARMV5TE_EXTERNAL 0 #define HAVE_ARMV6_EXTERNAL 0 #define HAVE_ARMV6T2_EXTERNAL 0 #define HAVE_ARMV8_EXTERNAL 0 #define HAVE_NEON_EXTERNAL 0 #define HAVE_VFP_EXTERNAL 0 #define HAVE_VFPV3_EXTERNAL 0 #define HAVE_SETEND_EXTERNAL 0 #define HAVE_ALTIVEC_EXTERNAL 0 #define HAVE_DCBZL_EXTERNAL 0 #define HAVE_LDBRX_EXTERNAL 0 #define HAVE_POWER8_EXTERNAL 0 #define HAVE_PPC4XX_EXTERNAL 0 #define HAVE_VSX_EXTERNAL 0 #define HAVE_AESNI_EXTERNAL 0 #define HAVE_AMD3DNOW_EXTERNAL 0 #define HAVE_AMD3DNOWEXT_EXTERNAL 0 #define HAVE_AVX_EXTERNAL 0 #define HAVE_AVX2_EXTERNAL 0 #define HAVE_FMA3_EXTERNAL 0 #define HAVE_FMA4_EXTERNAL 0 #define HAVE_MMX_EXTERNAL 0 #define HAVE_MMXEXT_EXTERNAL 0 #define HAVE_SSE_EXTERNAL 0 #define HAVE_SSE2_EXTERNAL 0 #define HAVE_SSE3_EXTERNAL 0 #define HAVE_SSE4_EXTERNAL 0 #define HAVE_SSE42_EXTERNAL 0 #define HAVE_SSSE3_EXTERNAL 0 #define HAVE_XOP_EXTERNAL 0 #define HAVE_CPUNOP_EXTERNAL 0 #define HAVE_I686_EXTERNAL 0 #define HAVE_MIPSFPU_EXTERNAL 0 #define HAVE_MIPS32R2_EXTERNAL 0 #define HAVE_MIPS32R5_EXTERNAL 0 #define HAVE_MIPS64R2_EXTERNAL 0 #define HAVE_MIPS32R6_EXTERNAL 0 #define HAVE_MIPS64R6_EXTERNAL 0 #define HAVE_MIPSDSP_EXTERNAL 0 #define HAVE_MIPSDSPR2_EXTERNAL 0 #define HAVE_MSA_EXTERNAL 0 #define HAVE_LOONGSON2_EXTERNAL 0 #define HAVE_LOONGSON3_EXTERNAL 0 #define HAVE_MMI_EXTERNAL 0 #define HAVE_ARMV5TE_INLINE 0 #define HAVE_ARMV6_INLINE 0 #define HAVE_ARMV6T2_INLINE 0 #define HAVE_ARMV8_INLINE 0 #define HAVE_NEON_INLINE 0 #define HAVE_VFP_INLINE 0 #define HAVE_VFPV3_INLINE 0 #define HAVE_SETEND_INLINE 0 #define HAVE_ALTIVEC_INLINE 0 #define HAVE_DCBZL_INLINE 0 #define HAVE_LDBRX_INLINE 0 #define HAVE_POWER8_INLINE 0 #define HAVE_PPC4XX_INLINE 0 #define HAVE_VSX_INLINE 0 #define HAVE_AESNI_INLINE 0 #define HAVE_AMD3DNOW_INLINE 0 #define HAVE_AMD3DNOWEXT_INLINE 0 #define HAVE_AVX_INLINE 0 #define HAVE_AVX2_INLINE 0 #define HAVE_FMA3_INLINE 0 #define HAVE_FMA4_INLINE 0 #define HAVE_MMX_INLINE 0 #define HAVE_MMXEXT_INLINE 0 #define HAVE_SSE_INLINE 0 #define HAVE_SSE2_INLINE 0 #define HAVE_SSE3_INLINE 0 #define HAVE_SSE4_INLINE 0 #define HAVE_SSE42_INLINE 0 #define HAVE_SSSE3_INLINE 0 #define HAVE_XOP_INLINE 0 #define HAVE_CPUNOP_INLINE 0 #define HAVE_I686_INLINE 0 #define HAVE_MIPSFPU_INLINE 0 #define HAVE_MIPS32R2_INLINE 0 #define HAVE_MIPS32R5_INLINE 0 #define HAVE_MIPS64R2_INLINE 0 #define HAVE_MIPS32R6_INLINE 0 #define HAVE_MIPS64R6_INLINE 0 #define HAVE_MIPSDSP_INLINE 0 #define HAVE_MIPSDSPR2_INLINE 0 #define HAVE_MSA_INLINE 0 #define HAVE_LOONGSON2_INLINE 0 #define HAVE_LOONGSON3_INLINE 0 #define HAVE_MMI_INLINE 0 #define HAVE_ALIGNED_STACK 0 #define HAVE_FAST_64BIT 0 #define HAVE_FAST_CLZ 0 #define HAVE_FAST_CMOV 0 #define HAVE_LOCAL_ALIGNED_8 1 #define HAVE_LOCAL_ALIGNED_16 1 #define HAVE_LOCAL_ALIGNED_32 1 #define HAVE_SIMD_ALIGN_16 0 #define HAVE_ATOMICS_GCC 1 #define HAVE_ATOMICS_SUNCC 0 #define HAVE_ATOMICS_WIN32 0 #define HAVE_ATOMIC_CAS_PTR 0 #define HAVE_ATOMIC_COMPARE_EXCHANGE 1 #define HAVE_MACHINE_RW_BARRIER 0 #define HAVE_MEMORYBARRIER 0 #define HAVE_MM_EMPTY 1 #define HAVE_RDTSC 0 #define HAVE_SARESTART 1 #define HAVE_SEM_TIMEDWAIT 0 #define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 #define HAVE_CABS 1 #define HAVE_CEXP 1 #define HAVE_INLINE_ASM 1 #define HAVE_SYMVER 1 #define HAVE_YASM 0 #define HAVE_BIGENDIAN 0 #define HAVE_FAST_UNALIGNED 0 #define HAVE_ALSA_ASOUNDLIB_H 0 #define HAVE_ALTIVEC_H 0 #define HAVE_ARPA_INET_H 1 #define HAVE_ASM_TYPES_H 0 #define HAVE_CDIO_PARANOIA_H 0 #define HAVE_CDIO_PARANOIA_PARANOIA_H 0 #define HAVE_DISPATCH_DISPATCH_H 1 #define HAVE_DEV_BKTR_IOCTL_BT848_H 0 #define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 #define HAVE_DEV_IC_BT8XX_H 0 #define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 #define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 #define HAVE_DIRECT_H 0 #define HAVE_DIRENT_H 1 #define HAVE_DLFCN_H 1 #define HAVE_D3D11_H 0 #define HAVE_DXVA_H 0 #define HAVE_ES2_GL_H 0 #define HAVE_GSM_H 0 #define HAVE_IO_H 0 #define HAVE_MACH_MACH_TIME_H 1 #define HAVE_MACHINE_IOCTL_BT848_H 0 #define HAVE_MACHINE_IOCTL_METEOR_H 0 #define HAVE_MALLOC_H 0 #define HAVE_OPENCV2_CORE_CORE_C_H 0 #define HAVE_OPENJPEG_2_1_OPENJPEG_H 0 #define HAVE_OPENJPEG_2_0_OPENJPEG_H 0 #define HAVE_OPENJPEG_1_5_OPENJPEG_H 0 #define HAVE_OPENGL_GL3_H 0 #define HAVE_POLL_H 1 #define HAVE_SNDIO_H 0 #define HAVE_SOUNDCARD_H 0 #define HAVE_SYS_MMAN_H 1 #define HAVE_SYS_PARAM_H 1 #define HAVE_SYS_RESOURCE_H 1 #define HAVE_SYS_SELECT_H 1 #define HAVE_SYS_SOUNDCARD_H 0 #define HAVE_SYS_TIME_H 1 #define HAVE_SYS_UN_H 1 #define HAVE_SYS_VIDEOIO_H 0 #define HAVE_TERMIOS_H 1 #define HAVE_UDPLITE_H 0 #define HAVE_UNISTD_H 1 #define HAVE_VALGRIND_VALGRIND_H 0 #define HAVE_WINDOWS_H 0 #define HAVE_WINSOCK2_H 0 #define HAVE_INTRINSICS_NEON 0 #define HAVE_ATANF 1 #define HAVE_ATAN2F 1 #define HAVE_CBRT 1 #define HAVE_CBRTF 1 #define HAVE_COPYSIGN 1 #define HAVE_COSF 1 #define HAVE_ERF 1 #define HAVE_EXP2 1 #define HAVE_EXP2F 1 #define HAVE_EXPF 1 #define HAVE_HYPOT 1 #define HAVE_ISFINITE 1 #define HAVE_ISINF 1 #define HAVE_ISNAN 1 #define HAVE_LDEXPF 1 #define HAVE_LLRINT 1 #define HAVE_LLRINTF 1 #define HAVE_LOG2 1 #define HAVE_LOG2F 1 #define HAVE_LOG10F 1 #define HAVE_LRINT 1 #define HAVE_LRINTF 1 #define HAVE_POWF 1 #define HAVE_RINT 1 #define HAVE_ROUND 1 #define HAVE_ROUNDF 1 #define HAVE_SINF 1 #define HAVE_TRUNC 1 #define HAVE_TRUNCF 1 #define HAVE_ACCESS 1 #define HAVE_ALIGNED_MALLOC 0 #define HAVE_ARC4RANDOM 1 #define HAVE_CLOCK_GETTIME 1 #define HAVE_CLOSESOCKET 0 #define HAVE_COMMANDLINETOARGVW 0 #define HAVE_COTASKMEMFREE 0 #define HAVE_CRYPTGENRANDOM 0 #define HAVE_DLOPEN 1 #define HAVE_FCNTL 1 #define HAVE_FLT_LIM 1 #define HAVE_FORK 1 #define HAVE_GETADDRINFO 1 #define HAVE_GETHRTIME 0 #define HAVE_GETOPT 1 #define HAVE_GETPROCESSAFFINITYMASK 0 #define HAVE_GETPROCESSMEMORYINFO 0 #define HAVE_GETPROCESSTIMES 0 #define HAVE_GETRUSAGE 1 #define HAVE_GETSYSTEMTIMEASFILETIME 0 #define HAVE_GETTIMEOFDAY 1 #define HAVE_GLOB 1 #define HAVE_GLXGETPROCADDRESS 0 #define HAVE_GMTIME_R 1 #define HAVE_INET_ATON 1 #define HAVE_ISATTY 1 #define HAVE_JACK_PORT_GET_LATENCY_RANGE 0 #define HAVE_KBHIT 0 #define HAVE_LOADLIBRARY 0 #define HAVE_LOCALTIME_R 1 #define HAVE_LSTAT 1 #define HAVE_LZO1X_999_COMPRESS 0 #define HAVE_MACH_ABSOLUTE_TIME 1 #define HAVE_MAPVIEWOFFILE 0 #define HAVE_MEMALIGN 0 #define HAVE_MKSTEMP 1 #define HAVE_MMAP 1 #define HAVE_MPROTECT 1 #define HAVE_NANOSLEEP 1 #define HAVE_PEEKNAMEDPIPE 0 #define HAVE_POSIX_MEMALIGN 1 #define HAVE_PTHREAD_CANCEL 1 #define HAVE_SCHED_GETAFFINITY 0 #define HAVE_SETCONSOLETEXTATTRIBUTE 0 #define HAVE_SETCONSOLECTRLHANDLER 0 #define HAVE_SETMODE 0 #define HAVE_SETRLIMIT 1 #define HAVE_SLEEP 0 #define HAVE_STRERROR_R 1 #define HAVE_SYSCONF 1 #define HAVE_SYSCTL 1 #define HAVE_USLEEP 1 #define HAVE_UTGETOSTYPEFROMSTRING 0 #define HAVE_VIRTUALALLOC 0 #define HAVE_WGLGETPROCADDRESS 0 #define HAVE_PTHREADS 1 #define HAVE_OS2THREADS 0 #define HAVE_W32THREADS 0 #define HAVE_AS_DN_DIRECTIVE 0 #define HAVE_AS_FUNC 0 #define HAVE_AS_OBJECT_ARCH 0 #define HAVE_ASM_MOD_Q 0 #define HAVE_ATTRIBUTE_MAY_ALIAS 1 #define HAVE_ATTRIBUTE_PACKED 1 #define HAVE_EBP_AVAILABLE 1 #define HAVE_EBX_AVAILABLE 1 #define HAVE_GNU_AS 0 #define HAVE_GNU_WINDRES 0 #define HAVE_IBM_ASM 0 #define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 1 #define HAVE_INLINE_ASM_LABELS 1 #define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 #define HAVE_PRAGMA_DEPRECATED 1 #define HAVE_RSYNC_CONTIMEOUT 0 #define HAVE_SYMVER_ASM_LABEL 1 #define HAVE_SYMVER_GNU_ASM 0 #define HAVE_VFP_ARGS 0 #define HAVE_XFORM_ASM 0 #define HAVE_XMM_CLOBBERS 1 #define HAVE_CONDITION_VARIABLE_PTR 0 #define HAVE_SOCKLEN_T 1 #define HAVE_STRUCT_ADDRINFO 1 #define HAVE_STRUCT_GROUP_SOURCE_REQ 1 #define HAVE_STRUCT_IP_MREQ_SOURCE 1 #define HAVE_STRUCT_IPV6_MREQ 1 #define HAVE_STRUCT_MSGHDR_MSG_FLAGS 1 #define HAVE_STRUCT_POLLFD 1 #define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1 #define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 #define HAVE_STRUCT_SOCKADDR_IN6 1 #define HAVE_STRUCT_SOCKADDR_SA_LEN 1 #define HAVE_STRUCT_SOCKADDR_STORAGE 1 #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 #define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 #define HAVE_ATOMICS_NATIVE 1 #define HAVE_DOS_PATHS 0 #define HAVE_DXVA2_LIB 0 #define HAVE_DXVA2API_COBJ 0 #define HAVE_LIBC_MSVCRT 0 #define HAVE_LIBDC1394_1 0 #define HAVE_LIBDC1394_2 0 #define HAVE_MAKEINFO 1 #define HAVE_MAKEINFO_HTML 0 #define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 #define HAVE_PERL 1 #define HAVE_POD2MAN 1 #define HAVE_SDL2 0 #define HAVE_SECTION_DATA_REL_RO 0 #define HAVE_TEXI2HTML 0 #define HAVE_THREADS 1 #define HAVE_VAAPI_DRM 0 #define HAVE_VAAPI_X11 0 #define HAVE_VDPAU_X11 0 #define HAVE_WINRT 0 #define HAVE_XLIB 0 #define CONFIG_BSFS 1 #define CONFIG_DECODERS 1 #define CONFIG_ENCODERS 0 #define CONFIG_HWACCELS 0 #define CONFIG_PARSERS 1 #define CONFIG_INDEVS 0 #define CONFIG_OUTDEVS 0 #define CONFIG_FILTERS 0 #define CONFIG_DEMUXERS 1 #define CONFIG_MUXERS 1 #define CONFIG_PROTOCOLS 1 #define CONFIG_DOC 0 #define CONFIG_HTMLPAGES 0 #define CONFIG_MANPAGES 0 #define CONFIG_PODPAGES 0 #define CONFIG_TXTPAGES 0 #define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 #define CONFIG_AVIO_READING_EXAMPLE 1 #define CONFIG_DECODING_ENCODING_EXAMPLE 1 #define CONFIG_DEMUXING_DECODING_EXAMPLE 1 #define CONFIG_EXTRACT_MVS_EXAMPLE 1 #define CONFIG_FILTER_AUDIO_EXAMPLE 1 #define CONFIG_FILTERING_AUDIO_EXAMPLE 1 #define CONFIG_FILTERING_VIDEO_EXAMPLE 1 #define CONFIG_HTTP_MULTICLIENT_EXAMPLE 1 #define CONFIG_METADATA_EXAMPLE 1 #define CONFIG_MUXING_EXAMPLE 1 #define CONFIG_QSVDEC_EXAMPLE 0 #define CONFIG_REMUXING_EXAMPLE 1 #define CONFIG_RESAMPLING_AUDIO_EXAMPLE 1 #define CONFIG_SCALING_VIDEO_EXAMPLE 1 #define CONFIG_TRANSCODE_AAC_EXAMPLE 1 #define CONFIG_TRANSCODING_EXAMPLE 1 #define CONFIG_AVISYNTH 0 #define CONFIG_BZLIB 0 #define CONFIG_CHROMAPRINT 0 #define CONFIG_CRYSTALHD 0 #define CONFIG_DECKLINK 0 #define CONFIG_FREI0R 0 #define CONFIG_GCRYPT 0 #define CONFIG_GMP 0 #define CONFIG_GNUTLS 0 #define CONFIG_ICONV 0 #define CONFIG_JNI 0 #define CONFIG_LADSPA 0 #define CONFIG_LIBASS 0 #define CONFIG_LIBBLURAY 0 #define CONFIG_LIBBS2B 0 #define CONFIG_LIBCACA 0 #define CONFIG_LIBCDIO 0 #define CONFIG_LIBCELT 0 #define CONFIG_LIBDC1394 0 #define CONFIG_LIBEBUR128 0 #define CONFIG_LIBFDK_AAC 0 #define CONFIG_LIBFLITE 0 #define CONFIG_LIBFONTCONFIG 0 #define CONFIG_LIBFREETYPE 0 #define CONFIG_LIBFRIBIDI 0 #define CONFIG_LIBGME 0 #define CONFIG_LIBGSM 0 #define CONFIG_LIBIEC61883 0 #define CONFIG_LIBILBC 0 #define CONFIG_LIBKVAZAAR 0 #define CONFIG_LIBMODPLUG 0 #define CONFIG_LIBMP3LAME 0 #define CONFIG_LIBNUT 0 #define CONFIG_LIBOPENCORE_AMRNB 0 #define CONFIG_LIBOPENCORE_AMRWB 0 #define CONFIG_LIBOPENCV 0 #define CONFIG_LIBOPENH264 0 #define CONFIG_LIBOPENJPEG 0 #define CONFIG_LIBOPENMPT 0 #define CONFIG_LIBOPUS 0 #define CONFIG_LIBPULSE 0 #define CONFIG_LIBRTMP 0 #define CONFIG_LIBRUBBERBAND 0 #define CONFIG_LIBSCHROEDINGER 0 #define CONFIG_LIBSHINE 0 #define CONFIG_LIBSMBCLIENT 0 #define CONFIG_LIBSNAPPY 0 #define CONFIG_LIBSOXR 0 #define CONFIG_LIBSPEEX 0 #define CONFIG_LIBSSH 0 #define CONFIG_LIBTESSERACT 0 #define CONFIG_LIBTHEORA 0 #define CONFIG_LIBTWOLAME 0 #define CONFIG_LIBV4L2 0 #define CONFIG_LIBVIDSTAB 0 #define CONFIG_LIBVO_AMRWBENC 0 #define CONFIG_LIBVORBIS 0 #define CONFIG_LIBVPX 0 #define CONFIG_LIBWAVPACK 0 #define CONFIG_LIBWEBP 0 #define CONFIG_LIBX264 0 #define CONFIG_LIBX265 0 #define CONFIG_LIBXAVS 0 #define CONFIG_LIBXCB 0 #define CONFIG_LIBXCB_SHM 0 #define CONFIG_LIBXCB_SHAPE 0 #define CONFIG_LIBXCB_XFIXES 0 #define CONFIG_LIBXVID 0 #define CONFIG_LIBZIMG 0 #define CONFIG_LIBZMQ 0 #define CONFIG_LIBZVBI 0 #define CONFIG_LZMA 0 #define CONFIG_MEDIACODEC 0 #define CONFIG_NETCDF 0 #define CONFIG_OPENAL 0 #define CONFIG_OPENCL 0 #define CONFIG_OPENGL 0 #define CONFIG_OPENSSL 1 #define CONFIG_SCHANNEL 0 #define CONFIG_SDL 0 #define CONFIG_SDL2 0 #define CONFIG_SECURETRANSPORT 0 #define CONFIG_VIDEOTOOLBOX 0 #define CONFIG_X11GRAB 0 #define CONFIG_XLIB 0 #define CONFIG_ZLIB 1 #define CONFIG_AUDIOTOOLBOX 0 #define CONFIG_CUDA 0 #define CONFIG_CUVID 0 #define CONFIG_D3D11VA 0 #define CONFIG_DXVA2 0 #define CONFIG_LIBMFX 0 #define CONFIG_LIBNPP 0 #define CONFIG_MMAL 0 #define CONFIG_NVENC 0 #define CONFIG_OMX 0 #define CONFIG_VAAPI 0 #define CONFIG_VDA 0 #define CONFIG_VDPAU 0 #define CONFIG_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_XVMC 0 #define CONFIG_FTRAPV 0 #define CONFIG_GRAY 0 #define CONFIG_HARDCODED_TABLES 0 #define CONFIG_OMX_RPI 0 #define CONFIG_RUNTIME_CPUDETECT 1 #define CONFIG_SAFE_BITSTREAM_READER 1 #define CONFIG_SHARED 0 #define CONFIG_SMALL 0 #define CONFIG_STATIC 1 #define CONFIG_SWSCALE_ALPHA 0 #define CONFIG_GPL 0 #define CONFIG_NONFREE 0 #define CONFIG_VERSION3 0 #define CONFIG_AVCODEC 1 #define CONFIG_AVDEVICE 0 #define CONFIG_AVFILTER 1 #define CONFIG_AVFORMAT 1 #define CONFIG_AVRESAMPLE 0 #define CONFIG_AVUTIL 1 #define CONFIG_POSTPROC 0 #define CONFIG_SWRESAMPLE 1 #define CONFIG_SWSCALE 1 #define CONFIG_FFPLAY 0 #define CONFIG_FFPROBE 0 #define CONFIG_FFSERVER 0 #define CONFIG_FFMPEG 0 #define CONFIG_DCT 1 #define CONFIG_DWT 0 #define CONFIG_ERROR_RESILIENCE 1 #define CONFIG_FAAN 1 #define CONFIG_FAST_UNALIGNED 0 #define CONFIG_FFT 1 #define CONFIG_LSP 0 #define CONFIG_LZO 0 #define CONFIG_MDCT 1 #define CONFIG_PIXELUTILS 0 #define CONFIG_NETWORK 1 #define CONFIG_RDFT 1 #define CONFIG_FONTCONFIG 0 #define CONFIG_MEMALIGN_HACK 0 #define CONFIG_MEMORY_POISONING 0 #define CONFIG_NEON_CLOBBER_TEST 0 #define CONFIG_PIC 1 #define CONFIG_POD2MAN 1 #define CONFIG_RAISE_MAJOR 0 #define CONFIG_THUMB 0 #define CONFIG_VALGRIND_BACKTRACE 0 #define CONFIG_XMM_CLOBBER_TEST 0 #define CONFIG_AANDCTTABLES 0 #define CONFIG_AC3DSP 0 #define CONFIG_AUDIO_FRAME_QUEUE 0 #define CONFIG_AUDIODSP 0 #define CONFIG_BLOCKDSP 1 #define CONFIG_BSWAPDSP 0 #define CONFIG_CABAC 1 #define CONFIG_DIRAC_PARSE 0 #define CONFIG_DVPROFILE 0 #define CONFIG_EXIF 0 #define CONFIG_FAANDCT 1 #define CONFIG_FAANIDCT 1 #define CONFIG_FDCTDSP 1 #define CONFIG_FLACDSP 0 #define CONFIG_FMTCONVERT 0 #define CONFIG_FRAME_THREAD_ENCODER 0 #define CONFIG_G722DSP 0 #define CONFIG_GOLOMB 1 #define CONFIG_GPLV3 0 #define CONFIG_H263DSP 1 #define CONFIG_H264CHROMA 1 #define CONFIG_H264DSP 1 #define CONFIG_H264PRED 1 #define CONFIG_H264QPEL 1 #define CONFIG_HPELDSP 1 #define CONFIG_HUFFMAN 1 #define CONFIG_HUFFYUVDSP 0 #define CONFIG_HUFFYUVENCDSP 0 #define CONFIG_IDCTDSP 1 #define CONFIG_IIRFILTER 0 #define CONFIG_IMDCT15 1 #define CONFIG_INTRAX8 0 #define CONFIG_ISO_MEDIA 1 #define CONFIG_IVIDSP 0 #define CONFIG_JPEGTABLES 0 #define CONFIG_LGPLV3 0 #define CONFIG_LIBX262 0 #define CONFIG_LLAUDDSP 0 #define CONFIG_LLVIDDSP 0 #define CONFIG_LPC 0 #define CONFIG_LZF 0 #define CONFIG_ME_CMP 1 #define CONFIG_MPEG_ER 1 #define CONFIG_MPEGAUDIO 1 #define CONFIG_MPEGAUDIODSP 1 #define CONFIG_MPEGVIDEO 1 #define CONFIG_MPEGVIDEOENC 0 #define CONFIG_MSS34DSP 0 #define CONFIG_PIXBLOCKDSP 1 #define CONFIG_QPELDSP 1 #define CONFIG_QSV 0 #define CONFIG_QSVDEC 0 #define CONFIG_QSVENC 0 #define CONFIG_RANGECODER 0 #define CONFIG_RIFFDEC 1 #define CONFIG_RIFFENC 1 #define CONFIG_RTPDEC 0 #define CONFIG_RTPENC_CHAIN 1 #define CONFIG_RV34DSP 0 #define CONFIG_SINEWIN 1 #define CONFIG_SNAPPY 0 #define CONFIG_SRTP 0 #define CONFIG_STARTCODE 1 #define CONFIG_TEXTUREDSP 0 #define CONFIG_TEXTUREDSPENC 0 #define CONFIG_TPELDSP 0 #define CONFIG_VAAPI_ENCODE 0 #define CONFIG_VC1DSP 0 #define CONFIG_VIDEODSP 1 #define CONFIG_VP3DSP 1 #define CONFIG_VP56DSP 1 #define CONFIG_VP8DSP 0 #define CONFIG_VT_BT2020 0 #define CONFIG_WMA_FREQS 0 #define CONFIG_WMV2DSP 0 #define CONFIG_AAC_ADTSTOASC_BSF 1 #define CONFIG_CHOMP_BSF 0 #define CONFIG_DUMP_EXTRADATA_BSF 0 #define CONFIG_DCA_CORE_BSF 0 #define CONFIG_H264_MP4TOANNEXB_BSF 1 #define CONFIG_HEVC_MP4TOANNEXB_BSF 0 #define CONFIG_IMX_DUMP_HEADER_BSF 0 #define CONFIG_MJPEG2JPEG_BSF 0 #define CONFIG_MJPEGA_DUMP_HEADER_BSF 0 #define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0 #define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0 #define CONFIG_MOV2TEXTSUB_BSF 0 #define CONFIG_NOISE_BSF 0 #define CONFIG_REMOVE_EXTRADATA_BSF 0 #define CONFIG_TEXT2MOVSUB_BSF 0 #define CONFIG_VP9_SUPERFRAME_BSF 0 #define CONFIG_AASC_DECODER 0 #define CONFIG_AIC_DECODER 0 #define CONFIG_ALIAS_PIX_DECODER 0 #define CONFIG_AMV_DECODER 0 #define CONFIG_ANM_DECODER 0 #define CONFIG_ANSI_DECODER 0 #define CONFIG_APNG_DECODER 0 #define CONFIG_ASV1_DECODER 0 #define CONFIG_ASV2_DECODER 0 #define CONFIG_AURA_DECODER 0 #define CONFIG_AURA2_DECODER 0 #define CONFIG_AVRP_DECODER 0 #define CONFIG_AVRN_DECODER 0 #define CONFIG_AVS_DECODER 0 #define CONFIG_AVUI_DECODER 0 #define CONFIG_AYUV_DECODER 0 #define CONFIG_BETHSOFTVID_DECODER 0 #define CONFIG_BFI_DECODER 0 #define CONFIG_BINK_DECODER 0 #define CONFIG_BMP_DECODER 0 #define CONFIG_BMV_VIDEO_DECODER 0 #define CONFIG_BRENDER_PIX_DECODER 0 #define CONFIG_C93_DECODER 0 #define CONFIG_CAVS_DECODER 0 #define CONFIG_CDGRAPHICS_DECODER 0 #define CONFIG_CDXL_DECODER 0 #define CONFIG_CFHD_DECODER 0 #define CONFIG_CINEPAK_DECODER 0 #define CONFIG_CLJR_DECODER 0 #define CONFIG_CLLC_DECODER 0 #define CONFIG_COMFORTNOISE_DECODER 0 #define CONFIG_CPIA_DECODER 0 #define CONFIG_CSCD_DECODER 0 #define CONFIG_CYUV_DECODER 0 #define CONFIG_DDS_DECODER 0 #define CONFIG_DFA_DECODER 0 #define CONFIG_DIRAC_DECODER 0 #define CONFIG_DNXHD_DECODER 0 #define CONFIG_DPX_DECODER 0 #define CONFIG_DSICINVIDEO_DECODER 0 #define CONFIG_DVAUDIO_DECODER 0 #define CONFIG_DVVIDEO_DECODER 0 #define CONFIG_DXA_DECODER 0 #define CONFIG_DXTORY_DECODER 0 #define CONFIG_DXV_DECODER 0 #define CONFIG_EACMV_DECODER 0 #define CONFIG_EAMAD_DECODER 0 #define CONFIG_EATGQ_DECODER 0 #define CONFIG_EATGV_DECODER 0 #define CONFIG_EATQI_DECODER 0 #define CONFIG_EIGHTBPS_DECODER 0 #define CONFIG_EIGHTSVX_EXP_DECODER 0 #define CONFIG_EIGHTSVX_FIB_DECODER 0 #define CONFIG_ESCAPE124_DECODER 0 #define CONFIG_ESCAPE130_DECODER 0 #define CONFIG_EXR_DECODER 0 #define CONFIG_FFV1_DECODER 0 #define CONFIG_FFVHUFF_DECODER 0 #define CONFIG_FIC_DECODER 0 #define CONFIG_FLASHSV_DECODER 0 #define CONFIG_FLASHSV2_DECODER 0 #define CONFIG_FLIC_DECODER 0 #define CONFIG_FLV_DECODER 1 #define CONFIG_FOURXM_DECODER 0 #define CONFIG_FRAPS_DECODER 0 #define CONFIG_FRWU_DECODER 0 #define CONFIG_G2M_DECODER 0 #define CONFIG_GIF_DECODER 0 #define CONFIG_H261_DECODER 0 #define CONFIG_H263_DECODER 1 #define CONFIG_H263I_DECODER 0 #define CONFIG_H263P_DECODER 0 #define CONFIG_H264_DECODER 1 #define CONFIG_H264_CRYSTALHD_DECODER 0 #define CONFIG_H264_MEDIACODEC_DECODER 0 #define CONFIG_H264_MMAL_DECODER 0 #define CONFIG_H264_QSV_DECODER 0 #define CONFIG_H264_VDA_DECODER 0 #define CONFIG_H264_VDPAU_DECODER 0 #define CONFIG_HAP_DECODER 0 #define CONFIG_HEVC_DECODER 0 #define CONFIG_HEVC_QSV_DECODER 0 #define CONFIG_HNM4_VIDEO_DECODER 0 #define CONFIG_HQ_HQA_DECODER 0 #define CONFIG_HQX_DECODER 0 #define CONFIG_HUFFYUV_DECODER 0 #define CONFIG_IDCIN_DECODER 0 #define CONFIG_IFF_ILBM_DECODER 0 #define CONFIG_INDEO2_DECODER 0 #define CONFIG_INDEO3_DECODER 0 #define CONFIG_INDEO4_DECODER 0 #define CONFIG_INDEO5_DECODER 0 #define CONFIG_INTERPLAY_VIDEO_DECODER 0 #define CONFIG_JPEG2000_DECODER 0 #define CONFIG_JPEGLS_DECODER 0 #define CONFIG_JV_DECODER 0 #define CONFIG_KGV1_DECODER 0 #define CONFIG_KMVC_DECODER 0 #define CONFIG_LAGARITH_DECODER 0 #define CONFIG_LOCO_DECODER 0 #define CONFIG_M101_DECODER 0 #define CONFIG_MAGICYUV_DECODER 0 #define CONFIG_MDEC_DECODER 0 #define CONFIG_MIMIC_DECODER 0 #define CONFIG_MJPEG_DECODER 0 #define CONFIG_MJPEGB_DECODER 0 #define CONFIG_MMVIDEO_DECODER 0 #define CONFIG_MOTIONPIXELS_DECODER 0 #define CONFIG_MPEG_XVMC_DECODER 0 #define CONFIG_MPEG1VIDEO_DECODER 0 #define CONFIG_MPEG2VIDEO_DECODER 0 #define CONFIG_MPEG4_DECODER 0 #define CONFIG_MPEG4_CRYSTALHD_DECODER 0 #define CONFIG_MPEG4_MMAL_DECODER 0 #define CONFIG_MPEG4_VDPAU_DECODER 0 #define CONFIG_MPEGVIDEO_DECODER 0 #define CONFIG_MPEG_VDPAU_DECODER 0 #define CONFIG_MPEG1_VDPAU_DECODER 0 #define CONFIG_MPEG2_MMAL_DECODER 0 #define CONFIG_MPEG2_CRYSTALHD_DECODER 0 #define CONFIG_MPEG2_QSV_DECODER 0 #define CONFIG_MSA1_DECODER 0 #define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 #define CONFIG_MSMPEG4V1_DECODER 0 #define CONFIG_MSMPEG4V2_DECODER 0 #define CONFIG_MSMPEG4V3_DECODER 0 #define CONFIG_MSRLE_DECODER 0 #define CONFIG_MSS1_DECODER 0 #define CONFIG_MSS2_DECODER 0 #define CONFIG_MSVIDEO1_DECODER 0 #define CONFIG_MSZH_DECODER 0 #define CONFIG_MTS2_DECODER 0 #define CONFIG_MVC1_DECODER 0 #define CONFIG_MVC2_DECODER 0 #define CONFIG_MXPEG_DECODER 0 #define CONFIG_NUV_DECODER 0 #define CONFIG_PAF_VIDEO_DECODER 0 #define CONFIG_PAM_DECODER 0 #define CONFIG_PBM_DECODER 0 #define CONFIG_PCX_DECODER 0 #define CONFIG_PGM_DECODER 0 #define CONFIG_PGMYUV_DECODER 0 #define CONFIG_PICTOR_DECODER 0 #define CONFIG_PNG_DECODER 0 #define CONFIG_PPM_DECODER 0 #define CONFIG_PRORES_DECODER 0 #define CONFIG_PRORES_LGPL_DECODER 0 #define CONFIG_PTX_DECODER 0 #define CONFIG_QDRAW_DECODER 0 #define CONFIG_QPEG_DECODER 0 #define CONFIG_QTRLE_DECODER 0 #define CONFIG_R10K_DECODER 0 #define CONFIG_R210_DECODER 0 #define CONFIG_RAWVIDEO_DECODER 0 #define CONFIG_RL2_DECODER 0 #define CONFIG_ROQ_DECODER 0 #define CONFIG_RPZA_DECODER 0 #define CONFIG_RSCC_DECODER 0 #define CONFIG_RV10_DECODER 0 #define CONFIG_RV20_DECODER 0 #define CONFIG_RV30_DECODER 0 #define CONFIG_RV40_DECODER 0 #define CONFIG_S302M_DECODER 0 #define CONFIG_SANM_DECODER 0 #define CONFIG_SCREENPRESSO_DECODER 0 #define CONFIG_SDX2_DPCM_DECODER 0 #define CONFIG_SGI_DECODER 0 #define CONFIG_SGIRLE_DECODER 0 #define CONFIG_SHEERVIDEO_DECODER 0 #define CONFIG_SMACKER_DECODER 0 #define CONFIG_SMC_DECODER 0 #define CONFIG_SMVJPEG_DECODER 0 #define CONFIG_SNOW_DECODER 0 #define CONFIG_SP5X_DECODER 0 #define CONFIG_SUNRAST_DECODER 0 #define CONFIG_SVQ1_DECODER 0 #define CONFIG_SVQ3_DECODER 0 #define CONFIG_TARGA_DECODER 0 #define CONFIG_TARGA_Y216_DECODER 0 #define CONFIG_TDSC_DECODER 0 #define CONFIG_THEORA_DECODER 0 #define CONFIG_THP_DECODER 0 #define CONFIG_TIERTEXSEQVIDEO_DECODER 0 #define CONFIG_TIFF_DECODER 0 #define CONFIG_TMV_DECODER 0 #define CONFIG_TRUEMOTION1_DECODER 0 #define CONFIG_TRUEMOTION2_DECODER 0 #define CONFIG_TRUEMOTION2RT_DECODER 0 #define CONFIG_TSCC_DECODER 0 #define CONFIG_TSCC2_DECODER 0 #define CONFIG_TXD_DECODER 0 #define CONFIG_ULTI_DECODER 0 #define CONFIG_UTVIDEO_DECODER 0 #define CONFIG_V210_DECODER 0 #define CONFIG_V210X_DECODER 0 #define CONFIG_V308_DECODER 0 #define CONFIG_V408_DECODER 0 #define CONFIG_V410_DECODER 0 #define CONFIG_VB_DECODER 0 #define CONFIG_VBLE_DECODER 0 #define CONFIG_VC1_DECODER 0 #define CONFIG_VC1_CRYSTALHD_DECODER 0 #define CONFIG_VC1_VDPAU_DECODER 0 #define CONFIG_VC1IMAGE_DECODER 0 #define CONFIG_VC1_MMAL_DECODER 0 #define CONFIG_VC1_QSV_DECODER 0 #define CONFIG_VCR1_DECODER 0 #define CONFIG_VMDVIDEO_DECODER 0 #define CONFIG_VMNC_DECODER 0 #define CONFIG_VP3_DECODER 0 #define CONFIG_VP5_DECODER 0 #define CONFIG_VP6_DECODER 1 #define CONFIG_VP6A_DECODER 0 #define CONFIG_VP6F_DECODER 1 #define CONFIG_VP7_DECODER 0 #define CONFIG_VP8_DECODER 0 #define CONFIG_VP9_DECODER 0 #define CONFIG_VQA_DECODER 0 #define CONFIG_WEBP_DECODER 0 #define CONFIG_WMV1_DECODER 0 #define CONFIG_WMV2_DECODER 0 #define CONFIG_WMV3_DECODER 0 #define CONFIG_WMV3_CRYSTALHD_DECODER 0 #define CONFIG_WMV3_VDPAU_DECODER 0 #define CONFIG_WMV3IMAGE_DECODER 0 #define CONFIG_WNV1_DECODER 0 #define CONFIG_XAN_WC3_DECODER 0 #define CONFIG_XAN_WC4_DECODER 0 #define CONFIG_XBM_DECODER 0 #define CONFIG_XFACE_DECODER 0 #define CONFIG_XL_DECODER 0 #define CONFIG_XWD_DECODER 0 #define CONFIG_Y41P_DECODER 0 #define CONFIG_YLC_DECODER 0 #define CONFIG_YOP_DECODER 0 #define CONFIG_YUV4_DECODER 0 #define CONFIG_ZERO12V_DECODER 0 #define CONFIG_ZEROCODEC_DECODER 0 #define CONFIG_ZLIB_DECODER 0 #define CONFIG_ZMBV_DECODER 0 #define CONFIG_AAC_DECODER 1 #define CONFIG_AAC_FIXED_DECODER 0 #define CONFIG_AAC_LATM_DECODER 1 #define CONFIG_AC3_DECODER 0 #define CONFIG_AC3_FIXED_DECODER 0 #define CONFIG_ALAC_DECODER 0 #define CONFIG_ALS_DECODER 0 #define CONFIG_AMRNB_DECODER 0 #define CONFIG_AMRWB_DECODER 0 #define CONFIG_APE_DECODER 0 #define CONFIG_ATRAC1_DECODER 0 #define CONFIG_ATRAC3_DECODER 0 #define CONFIG_ATRAC3P_DECODER 0 #define CONFIG_BINKAUDIO_DCT_DECODER 0 #define CONFIG_BINKAUDIO_RDFT_DECODER 0 #define CONFIG_BMV_AUDIO_DECODER 0 #define CONFIG_COOK_DECODER 0 #define CONFIG_DCA_DECODER 0 #define CONFIG_DSD_LSBF_DECODER 0 #define CONFIG_DSD_MSBF_DECODER 0 #define CONFIG_DSD_LSBF_PLANAR_DECODER 0 #define CONFIG_DSD_MSBF_PLANAR_DECODER 0 #define CONFIG_DSICINAUDIO_DECODER 0 #define CONFIG_DSS_SP_DECODER 0 #define CONFIG_DST_DECODER 0 #define CONFIG_EAC3_DECODER 0 #define CONFIG_EVRC_DECODER 0 #define CONFIG_FFWAVESYNTH_DECODER 0 #define CONFIG_FLAC_DECODER 0 #define CONFIG_G723_1_DECODER 0 #define CONFIG_G729_DECODER 0 #define CONFIG_GSM_DECODER 0 #define CONFIG_GSM_MS_DECODER 0 #define CONFIG_IAC_DECODER 0 #define CONFIG_IMC_DECODER 0 #define CONFIG_INTERPLAY_ACM_DECODER 0 #define CONFIG_MACE3_DECODER 0 #define CONFIG_MACE6_DECODER 0 #define CONFIG_METASOUND_DECODER 0 #define CONFIG_MLP_DECODER 0 #define CONFIG_MP1_DECODER 0 #define CONFIG_MP1FLOAT_DECODER 0 #define CONFIG_MP2_DECODER 0 #define CONFIG_MP2FLOAT_DECODER 0 #define CONFIG_MP3_DECODER 1 #define CONFIG_MP3FLOAT_DECODER 1 #define CONFIG_MP3ADU_DECODER 1 #define CONFIG_MP3ADUFLOAT_DECODER 1 #define CONFIG_MP3ON4_DECODER 1 #define CONFIG_MP3ON4FLOAT_DECODER 1 #define CONFIG_MPC7_DECODER 0 #define CONFIG_MPC8_DECODER 0 #define CONFIG_NELLYMOSER_DECODER 0 #define CONFIG_ON2AVC_DECODER 0 #define CONFIG_OPUS_DECODER 0 #define CONFIG_PAF_AUDIO_DECODER 0 #define CONFIG_QCELP_DECODER 0 #define CONFIG_QDM2_DECODER 0 #define CONFIG_RA_144_DECODER 0 #define CONFIG_RA_288_DECODER 0 #define CONFIG_RALF_DECODER 0 #define CONFIG_SHORTEN_DECODER 0 #define CONFIG_SIPR_DECODER 0 #define CONFIG_SMACKAUD_DECODER 0 #define CONFIG_SONIC_DECODER 0 #define CONFIG_TAK_DECODER 0 #define CONFIG_TRUEHD_DECODER 0 #define CONFIG_TRUESPEECH_DECODER 0 #define CONFIG_TTA_DECODER 0 #define CONFIG_TWINVQ_DECODER 0 #define CONFIG_VMDAUDIO_DECODER 0 #define CONFIG_VORBIS_DECODER 0 #define CONFIG_WAVPACK_DECODER 0 #define CONFIG_WMALOSSLESS_DECODER 0 #define CONFIG_WMAPRO_DECODER 0 #define CONFIG_WMAV1_DECODER 0 #define CONFIG_WMAV2_DECODER 0 #define CONFIG_WMAVOICE_DECODER 0 #define CONFIG_WS_SND1_DECODER 0 #define CONFIG_XMA1_DECODER 0 #define CONFIG_XMA2_DECODER 0 #define CONFIG_PCM_ALAW_DECODER 0 #define CONFIG_PCM_BLURAY_DECODER 0 #define CONFIG_PCM_DVD_DECODER 0 #define CONFIG_PCM_F32BE_DECODER 0 #define CONFIG_PCM_F32LE_DECODER 0 #define CONFIG_PCM_F64BE_DECODER 0 #define CONFIG_PCM_F64LE_DECODER 0 #define CONFIG_PCM_LXF_DECODER 0 #define CONFIG_PCM_MULAW_DECODER 0 #define CONFIG_PCM_S8_DECODER 0 #define CONFIG_PCM_S8_PLANAR_DECODER 0 #define CONFIG_PCM_S16BE_DECODER 0 #define CONFIG_PCM_S16BE_PLANAR_DECODER 0 #define CONFIG_PCM_S16LE_DECODER 0 #define CONFIG_PCM_S16LE_PLANAR_DECODER 0 #define CONFIG_PCM_S24BE_DECODER 0 #define CONFIG_PCM_S24DAUD_DECODER 0 #define CONFIG_PCM_S24LE_DECODER 0 #define CONFIG_PCM_S24LE_PLANAR_DECODER 0 #define CONFIG_PCM_S32BE_DECODER 0 #define CONFIG_PCM_S32LE_DECODER 0 #define CONFIG_PCM_S32LE_PLANAR_DECODER 0 #define CONFIG_PCM_S64BE_DECODER 0 #define CONFIG_PCM_S64LE_DECODER 0 #define CONFIG_PCM_U8_DECODER 0 #define CONFIG_PCM_U16BE_DECODER 0 #define CONFIG_PCM_U16LE_DECODER 0 #define CONFIG_PCM_U24BE_DECODER 0 #define CONFIG_PCM_U24LE_DECODER 0 #define CONFIG_PCM_U32BE_DECODER 0 #define CONFIG_PCM_U32LE_DECODER 0 #define CONFIG_PCM_ZORK_DECODER 0 #define CONFIG_INTERPLAY_DPCM_DECODER 0 #define CONFIG_ROQ_DPCM_DECODER 0 #define CONFIG_SOL_DPCM_DECODER 0 #define CONFIG_XAN_DPCM_DECODER 0 #define CONFIG_ADPCM_4XM_DECODER 0 #define CONFIG_ADPCM_ADX_DECODER 0 #define CONFIG_ADPCM_AFC_DECODER 0 #define CONFIG_ADPCM_AICA_DECODER 0 #define CONFIG_ADPCM_CT_DECODER 0 #define CONFIG_ADPCM_DTK_DECODER 0 #define CONFIG_ADPCM_EA_DECODER 0 #define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 #define CONFIG_ADPCM_EA_R1_DECODER 0 #define CONFIG_ADPCM_EA_R2_DECODER 0 #define CONFIG_ADPCM_EA_R3_DECODER 0 #define CONFIG_ADPCM_EA_XAS_DECODER 0 #define CONFIG_ADPCM_G722_DECODER 0 #define CONFIG_ADPCM_G726_DECODER 0 #define CONFIG_ADPCM_G726LE_DECODER 0 #define CONFIG_ADPCM_IMA_AMV_DECODER 0 #define CONFIG_ADPCM_IMA_APC_DECODER 0 #define CONFIG_ADPCM_IMA_DAT4_DECODER 0 #define CONFIG_ADPCM_IMA_DK3_DECODER 0 #define CONFIG_ADPCM_IMA_DK4_DECODER 0 #define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 #define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 #define CONFIG_ADPCM_IMA_ISS_DECODER 0 #define CONFIG_ADPCM_IMA_OKI_DECODER 0 #define CONFIG_ADPCM_IMA_QT_DECODER 0 #define CONFIG_ADPCM_IMA_RAD_DECODER 0 #define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 #define CONFIG_ADPCM_IMA_WAV_DECODER 0 #define CONFIG_ADPCM_IMA_WS_DECODER 0 #define CONFIG_ADPCM_MS_DECODER 0 #define CONFIG_ADPCM_MTAF_DECODER 0 #define CONFIG_ADPCM_PSX_DECODER 0 #define CONFIG_ADPCM_SBPRO_2_DECODER 0 #define CONFIG_ADPCM_SBPRO_3_DECODER 0 #define CONFIG_ADPCM_SBPRO_4_DECODER 0 #define CONFIG_ADPCM_SWF_DECODER 0 #define CONFIG_ADPCM_THP_DECODER 0 #define CONFIG_ADPCM_THP_LE_DECODER 0 #define CONFIG_ADPCM_VIMA_DECODER 0 #define CONFIG_ADPCM_XA_DECODER 0 #define CONFIG_ADPCM_YAMAHA_DECODER 0 #define CONFIG_SSA_DECODER 0 #define CONFIG_ASS_DECODER 0 #define CONFIG_CCAPTION_DECODER 0 #define CONFIG_DVBSUB_DECODER 0 #define CONFIG_DVDSUB_DECODER 0 #define CONFIG_JACOSUB_DECODER 0 #define CONFIG_MICRODVD_DECODER 0 #define CONFIG_MOVTEXT_DECODER 0 #define CONFIG_MPL2_DECODER 0 #define CONFIG_PGSSUB_DECODER 0 #define CONFIG_PJS_DECODER 0 #define CONFIG_REALTEXT_DECODER 0 #define CONFIG_SAMI_DECODER 0 #define CONFIG_SRT_DECODER 0 #define CONFIG_STL_DECODER 0 #define CONFIG_SUBRIP_DECODER 0 #define CONFIG_SUBVIEWER_DECODER 0 #define CONFIG_SUBVIEWER1_DECODER 0 #define CONFIG_TEXT_DECODER 0 #define CONFIG_VPLAYER_DECODER 0 #define CONFIG_WEBVTT_DECODER 0 #define CONFIG_XSUB_DECODER 0 #define CONFIG_AAC_AT_DECODER 0 #define CONFIG_AC3_AT_DECODER 0 #define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 #define CONFIG_ALAC_AT_DECODER 0 #define CONFIG_AMR_NB_AT_DECODER 0 #define CONFIG_EAC3_AT_DECODER 0 #define CONFIG_GSM_MS_AT_DECODER 0 #define CONFIG_ILBC_AT_DECODER 0 #define CONFIG_MP1_AT_DECODER 0 #define CONFIG_MP2_AT_DECODER 0 #define CONFIG_MP3_AT_DECODER 0 #define CONFIG_PCM_ALAW_AT_DECODER 0 #define CONFIG_PCM_MULAW_AT_DECODER 0 #define CONFIG_QDMC_AT_DECODER 0 #define CONFIG_QDM2_AT_DECODER 0 #define CONFIG_LIBCELT_DECODER 0 #define CONFIG_LIBFDK_AAC_DECODER 0 #define CONFIG_LIBGSM_DECODER 0 #define CONFIG_LIBGSM_MS_DECODER 0 #define CONFIG_LIBILBC_DECODER 0 #define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 #define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 #define CONFIG_LIBOPENJPEG_DECODER 0 #define CONFIG_LIBOPUS_DECODER 0 #define CONFIG_LIBSCHROEDINGER_DECODER 0 #define CONFIG_LIBSPEEX_DECODER 0 #define CONFIG_LIBVORBIS_DECODER 0 #define CONFIG_LIBVPX_VP8_DECODER 0 #define CONFIG_LIBVPX_VP9_DECODER 0 #define CONFIG_LIBZVBI_TELETEXT_DECODER 0 #define CONFIG_BINTEXT_DECODER 0 #define CONFIG_XBIN_DECODER 0 #define CONFIG_IDF_DECODER 0 #define CONFIG_LIBOPENH264_DECODER 0 #define CONFIG_H263_CUVID_DECODER 0 #define CONFIG_H264_CUVID_DECODER 0 #define CONFIG_HEVC_CUVID_DECODER 0 #define CONFIG_HEVC_MEDIACODEC_DECODER 0 #define CONFIG_MJPEG_CUVID_DECODER 0 #define CONFIG_MPEG1_CUVID_DECODER 0 #define CONFIG_MPEG2_CUVID_DECODER 0 #define CONFIG_MPEG4_CUVID_DECODER 0 #define CONFIG_MPEG4_MEDIACODEC_DECODER 0 #define CONFIG_VC1_CUVID_DECODER 0 #define CONFIG_VP8_CUVID_DECODER 0 #define CONFIG_VP8_MEDIACODEC_DECODER 0 #define CONFIG_VP9_CUVID_DECODER 0 #define CONFIG_VP9_MEDIACODEC_DECODER 0 #define CONFIG_AA_DEMUXER 0 #define CONFIG_AAC_DEMUXER 1 #define CONFIG_AC3_DEMUXER 0 #define CONFIG_ACM_DEMUXER 0 #define CONFIG_ACT_DEMUXER 0 #define CONFIG_ADF_DEMUXER 0 #define CONFIG_ADP_DEMUXER 0 #define CONFIG_ADS_DEMUXER 0 #define CONFIG_ADX_DEMUXER 0 #define CONFIG_AEA_DEMUXER 0 #define CONFIG_AFC_DEMUXER 0 #define CONFIG_AIFF_DEMUXER 0 #define CONFIG_AIX_DEMUXER 0 #define CONFIG_AMR_DEMUXER 0 #define CONFIG_ANM_DEMUXER 0 #define CONFIG_APC_DEMUXER 0 #define CONFIG_APE_DEMUXER 0 #define CONFIG_APNG_DEMUXER 0 #define CONFIG_AQTITLE_DEMUXER 0 #define CONFIG_ASF_DEMUXER 0 #define CONFIG_ASF_O_DEMUXER 0 #define CONFIG_ASS_DEMUXER 0 #define CONFIG_AST_DEMUXER 0 #define CONFIG_AU_DEMUXER 0 #define CONFIG_AVI_DEMUXER 0 #define CONFIG_AVISYNTH_DEMUXER 0 #define CONFIG_AVR_DEMUXER 0 #define CONFIG_AVS_DEMUXER 0 #define CONFIG_BETHSOFTVID_DEMUXER 0 #define CONFIG_BFI_DEMUXER 0 #define CONFIG_BINTEXT_DEMUXER 0 #define CONFIG_BINK_DEMUXER 0 #define CONFIG_BIT_DEMUXER 0 #define CONFIG_BMV_DEMUXER 0 #define CONFIG_BFSTM_DEMUXER 0 #define CONFIG_BRSTM_DEMUXER 0 #define CONFIG_BOA_DEMUXER 0 #define CONFIG_C93_DEMUXER 0 #define CONFIG_CAF_DEMUXER 0 #define CONFIG_CAVSVIDEO_DEMUXER 0 #define CONFIG_CDG_DEMUXER 0 #define CONFIG_CDXL_DEMUXER 0 #define CONFIG_CINE_DEMUXER 0 #define CONFIG_CONCAT_DEMUXER 1 #define CONFIG_DATA_DEMUXER 1 #define CONFIG_DAUD_DEMUXER 0 #define CONFIG_DCSTR_DEMUXER 0 #define CONFIG_DFA_DEMUXER 0 #define CONFIG_DIRAC_DEMUXER 0 #define CONFIG_DNXHD_DEMUXER 0 #define CONFIG_DSF_DEMUXER 0 #define CONFIG_DSICIN_DEMUXER 0 #define CONFIG_DSS_DEMUXER 0 #define CONFIG_DTS_DEMUXER 0 #define CONFIG_DTSHD_DEMUXER 0 #define CONFIG_DV_DEMUXER 0 #define CONFIG_DVBSUB_DEMUXER 0 #define CONFIG_DVBTXT_DEMUXER 0 #define CONFIG_DXA_DEMUXER 0 #define CONFIG_EA_DEMUXER 0 #define CONFIG_EA_CDATA_DEMUXER 0 #define CONFIG_EAC3_DEMUXER 0 #define CONFIG_EPAF_DEMUXER 0 #define CONFIG_FFM_DEMUXER 0 #define CONFIG_FFMETADATA_DEMUXER 0 #define CONFIG_FILMSTRIP_DEMUXER 0 #define CONFIG_FLAC_DEMUXER 0 #define CONFIG_FLIC_DEMUXER 0 #define CONFIG_FLV_DEMUXER 1 #define CONFIG_LIVE_FLV_DEMUXER 1 #define CONFIG_FOURXM_DEMUXER 0 #define CONFIG_FRM_DEMUXER 0 #define CONFIG_FSB_DEMUXER 0 #define CONFIG_G722_DEMUXER 0 #define CONFIG_G723_1_DEMUXER 0 #define CONFIG_G729_DEMUXER 0 #define CONFIG_GENH_DEMUXER 0 #define CONFIG_GIF_DEMUXER 0 #define CONFIG_GSM_DEMUXER 0 #define CONFIG_GXF_DEMUXER 0 #define CONFIG_H261_DEMUXER 0 #define CONFIG_H263_DEMUXER 0 #define CONFIG_H264_DEMUXER 0 #define CONFIG_HEVC_DEMUXER 0 #define CONFIG_HLS_DEMUXER 1 #define CONFIG_HNM_DEMUXER 0 #define CONFIG_ICO_DEMUXER 0 #define CONFIG_IDCIN_DEMUXER 0 #define CONFIG_IDF_DEMUXER 0 #define CONFIG_IFF_DEMUXER 0 #define CONFIG_ILBC_DEMUXER 0 #define CONFIG_IMAGE2_DEMUXER 0 #define CONFIG_IMAGE2PIPE_DEMUXER 0 #define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 #define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 #define CONFIG_INGENIENT_DEMUXER 0 #define CONFIG_IPMOVIE_DEMUXER 0 #define CONFIG_IRCAM_DEMUXER 0 #define CONFIG_ISS_DEMUXER 0 #define CONFIG_IV8_DEMUXER 0 #define CONFIG_IVF_DEMUXER 0 #define CONFIG_IVR_DEMUXER 0 #define CONFIG_JACOSUB_DEMUXER 0 #define CONFIG_JV_DEMUXER 0 #define CONFIG_LMLM4_DEMUXER 0 #define CONFIG_LOAS_DEMUXER 0 #define CONFIG_LRC_DEMUXER 0 #define CONFIG_LVF_DEMUXER 0 #define CONFIG_LXF_DEMUXER 0 #define CONFIG_M4V_DEMUXER 0 #define CONFIG_MATROSKA_DEMUXER 0 #define CONFIG_MGSTS_DEMUXER 0 #define CONFIG_MICRODVD_DEMUXER 0 #define CONFIG_MJPEG_DEMUXER 0 #define CONFIG_MLP_DEMUXER 0 #define CONFIG_MLV_DEMUXER 0 #define CONFIG_MM_DEMUXER 0 #define CONFIG_MMF_DEMUXER 0 #define CONFIG_MOV_DEMUXER 1 #define CONFIG_MP3_DEMUXER 1 #define CONFIG_MPC_DEMUXER 0 #define CONFIG_MPC8_DEMUXER 0 #define CONFIG_MPEGPS_DEMUXER 1 #define CONFIG_MPEGTS_DEMUXER 1 #define CONFIG_MPEGTSRAW_DEMUXER 0 #define CONFIG_MPEGVIDEO_DEMUXER 1 #define CONFIG_MPJPEG_DEMUXER 0 #define CONFIG_MPL2_DEMUXER 0 #define CONFIG_MPSUB_DEMUXER 0 #define CONFIG_MSF_DEMUXER 0 #define CONFIG_MSNWC_TCP_DEMUXER 0 #define CONFIG_MTAF_DEMUXER 0 #define CONFIG_MTV_DEMUXER 0 #define CONFIG_MUSX_DEMUXER 0 #define CONFIG_MV_DEMUXER 0 #define CONFIG_MVI_DEMUXER 0 #define CONFIG_MXF_DEMUXER 0 #define CONFIG_MXG_DEMUXER 0 #define CONFIG_NC_DEMUXER 0 #define CONFIG_NISTSPHERE_DEMUXER 0 #define CONFIG_NSV_DEMUXER 0 #define CONFIG_NUT_DEMUXER 0 #define CONFIG_NUV_DEMUXER 0 #define CONFIG_OGG_DEMUXER 0 #define CONFIG_OMA_DEMUXER 0 #define CONFIG_PAF_DEMUXER 0 #define CONFIG_PCM_ALAW_DEMUXER 0 #define CONFIG_PCM_MULAW_DEMUXER 0 #define CONFIG_PCM_F64BE_DEMUXER 0 #define CONFIG_PCM_F64LE_DEMUXER 0 #define CONFIG_PCM_F32BE_DEMUXER 0 #define CONFIG_PCM_F32LE_DEMUXER 0 #define CONFIG_PCM_S32BE_DEMUXER 0 #define CONFIG_PCM_S32LE_DEMUXER 0 #define CONFIG_PCM_S24BE_DEMUXER 0 #define CONFIG_PCM_S24LE_DEMUXER 0 #define CONFIG_PCM_S16BE_DEMUXER 0 #define CONFIG_PCM_S16LE_DEMUXER 0 #define CONFIG_PCM_S8_DEMUXER 0 #define CONFIG_PCM_U32BE_DEMUXER 0 #define CONFIG_PCM_U32LE_DEMUXER 0 #define CONFIG_PCM_U24BE_DEMUXER 0 #define CONFIG_PCM_U24LE_DEMUXER 0 #define CONFIG_PCM_U16BE_DEMUXER 0 #define CONFIG_PCM_U16LE_DEMUXER 0 #define CONFIG_PCM_U8_DEMUXER 0 #define CONFIG_PJS_DEMUXER 0 #define CONFIG_PMP_DEMUXER 0 #define CONFIG_PVA_DEMUXER 0 #define CONFIG_PVF_DEMUXER 0 #define CONFIG_QCP_DEMUXER 0 #define CONFIG_R3D_DEMUXER 0 #define CONFIG_RAWVIDEO_DEMUXER 0 #define CONFIG_REALTEXT_DEMUXER 0 #define CONFIG_REDSPARK_DEMUXER 0 #define CONFIG_RL2_DEMUXER 0 #define CONFIG_RM_DEMUXER 0 #define CONFIG_ROQ_DEMUXER 0 #define CONFIG_RPL_DEMUXER 0 #define CONFIG_RSD_DEMUXER 0 #define CONFIG_RSO_DEMUXER 0 #define CONFIG_RTP_DEMUXER 0 #define CONFIG_RTSP_DEMUXER 0 #define CONFIG_SAMI_DEMUXER 0 #define CONFIG_SAP_DEMUXER 0 #define CONFIG_SBG_DEMUXER 0 #define CONFIG_SDP_DEMUXER 0 #define CONFIG_SDR2_DEMUXER 0 #define CONFIG_SEGAFILM_DEMUXER 0 #define CONFIG_SHORTEN_DEMUXER 0 #define CONFIG_SIFF_DEMUXER 0 #define CONFIG_SLN_DEMUXER 0 #define CONFIG_SMACKER_DEMUXER 0 #define CONFIG_SMJPEG_DEMUXER 0 #define CONFIG_SMUSH_DEMUXER 0 #define CONFIG_SOL_DEMUXER 0 #define CONFIG_SOX_DEMUXER 0 #define CONFIG_SPDIF_DEMUXER 0 #define CONFIG_SRT_DEMUXER 0 #define CONFIG_STR_DEMUXER 0 #define CONFIG_STL_DEMUXER 0 #define CONFIG_SUBVIEWER1_DEMUXER 0 #define CONFIG_SUBVIEWER_DEMUXER 0 #define CONFIG_SUP_DEMUXER 0 #define CONFIG_SVAG_DEMUXER 0 #define CONFIG_SWF_DEMUXER 0 #define CONFIG_TAK_DEMUXER 0 #define CONFIG_TEDCAPTIONS_DEMUXER 0 #define CONFIG_THP_DEMUXER 0 #define CONFIG_THREEDOSTR_DEMUXER 0 #define CONFIG_TIERTEXSEQ_DEMUXER 0 #define CONFIG_TMV_DEMUXER 0 #define CONFIG_TRUEHD_DEMUXER 0 #define CONFIG_TTA_DEMUXER 0 #define CONFIG_TXD_DEMUXER 0 #define CONFIG_TTY_DEMUXER 0 #define CONFIG_V210_DEMUXER 0 #define CONFIG_V210X_DEMUXER 0 #define CONFIG_VAG_DEMUXER 0 #define CONFIG_VC1_DEMUXER 0 #define CONFIG_VC1T_DEMUXER 0 #define CONFIG_VIVO_DEMUXER 0 #define CONFIG_VMD_DEMUXER 0 #define CONFIG_VOBSUB_DEMUXER 0 #define CONFIG_VOC_DEMUXER 0 #define CONFIG_VPK_DEMUXER 0 #define CONFIG_VPLAYER_DEMUXER 0 #define CONFIG_VQF_DEMUXER 0 #define CONFIG_W64_DEMUXER 0 #define CONFIG_WAV_DEMUXER 0 #define CONFIG_WC3_DEMUXER 0 #define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 #define CONFIG_WEBVTT_DEMUXER 0 #define CONFIG_WSAUD_DEMUXER 0 #define CONFIG_WSD_DEMUXER 0 #define CONFIG_WSVQA_DEMUXER 0 #define CONFIG_WTV_DEMUXER 0 #define CONFIG_WVE_DEMUXER 0 #define CONFIG_WV_DEMUXER 0 #define CONFIG_XA_DEMUXER 0 #define CONFIG_XBIN_DEMUXER 0 #define CONFIG_XMV_DEMUXER 0 #define CONFIG_XVAG_DEMUXER 0 #define CONFIG_XWMA_DEMUXER 0 #define CONFIG_YOP_DEMUXER 0 #define CONFIG_YUV4MPEGPIPE_DEMUXER 0 #define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 #define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 #define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 #define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 #define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 #define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 #define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 #define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 #define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 #define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 #define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 #define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 #define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 #define CONFIG_LIBGME_DEMUXER 0 #define CONFIG_LIBMODPLUG_DEMUXER 0 #define CONFIG_LIBNUT_DEMUXER 0 #define CONFIG_LIBOPENMPT_DEMUXER 0 #define CONFIG_A64MULTI_ENCODER 0 #define CONFIG_A64MULTI5_ENCODER 0 #define CONFIG_ALIAS_PIX_ENCODER 0 #define CONFIG_AMV_ENCODER 0 #define CONFIG_APNG_ENCODER 0 #define CONFIG_ASV1_ENCODER 0 #define CONFIG_ASV2_ENCODER 0 #define CONFIG_AVRP_ENCODER 0 #define CONFIG_AVUI_ENCODER 0 #define CONFIG_AYUV_ENCODER 0 #define CONFIG_BMP_ENCODER 0 #define CONFIG_CINEPAK_ENCODER 0 #define CONFIG_CLJR_ENCODER 0 #define CONFIG_COMFORTNOISE_ENCODER 0 #define CONFIG_DNXHD_ENCODER 0 #define CONFIG_DPX_ENCODER 0 #define CONFIG_DVVIDEO_ENCODER 0 #define CONFIG_FFV1_ENCODER 0 #define CONFIG_FFVHUFF_ENCODER 0 #define CONFIG_FLASHSV_ENCODER 0 #define CONFIG_FLASHSV2_ENCODER 0 #define CONFIG_FLV_ENCODER 0 #define CONFIG_GIF_ENCODER 0 #define CONFIG_H261_ENCODER 0 #define CONFIG_H263_ENCODER 0 #define CONFIG_H263P_ENCODER 0 #define CONFIG_HAP_ENCODER 0 #define CONFIG_HUFFYUV_ENCODER 0 #define CONFIG_JPEG2000_ENCODER 0 #define CONFIG_JPEGLS_ENCODER 0 #define CONFIG_LJPEG_ENCODER 0 #define CONFIG_MJPEG_ENCODER 0 #define CONFIG_MPEG1VIDEO_ENCODER 0 #define CONFIG_MPEG2VIDEO_ENCODER 0 #define CONFIG_MPEG4_ENCODER 0 #define CONFIG_MSMPEG4V2_ENCODER 0 #define CONFIG_MSMPEG4V3_ENCODER 0 #define CONFIG_MSVIDEO1_ENCODER 0 #define CONFIG_PAM_ENCODER 0 #define CONFIG_PBM_ENCODER 0 #define CONFIG_PCX_ENCODER 0 #define CONFIG_PGM_ENCODER 0 #define CONFIG_PGMYUV_ENCODER 0 #define CONFIG_PNG_ENCODER 0 #define CONFIG_PPM_ENCODER 0 #define CONFIG_PRORES_ENCODER 0 #define CONFIG_PRORES_AW_ENCODER 0 #define CONFIG_PRORES_KS_ENCODER 0 #define CONFIG_QTRLE_ENCODER 0 #define CONFIG_R10K_ENCODER 0 #define CONFIG_R210_ENCODER 0 #define CONFIG_RAWVIDEO_ENCODER 0 #define CONFIG_ROQ_ENCODER 0 #define CONFIG_RV10_ENCODER 0 #define CONFIG_RV20_ENCODER 0 #define CONFIG_S302M_ENCODER 0 #define CONFIG_SGI_ENCODER 0 #define CONFIG_SNOW_ENCODER 0 #define CONFIG_SUNRAST_ENCODER 0 #define CONFIG_SVQ1_ENCODER 0 #define CONFIG_TARGA_ENCODER 0 #define CONFIG_TIFF_ENCODER 0 #define CONFIG_UTVIDEO_ENCODER 0 #define CONFIG_V210_ENCODER 0 #define CONFIG_V308_ENCODER 0 #define CONFIG_V408_ENCODER 0 #define CONFIG_V410_ENCODER 0 #define CONFIG_VC2_ENCODER 0 #define CONFIG_WRAPPED_AVFRAME_ENCODER 0 #define CONFIG_WMV1_ENCODER 0 #define CONFIG_WMV2_ENCODER 0 #define CONFIG_XBM_ENCODER 0 #define CONFIG_XFACE_ENCODER 0 #define CONFIG_XWD_ENCODER 0 #define CONFIG_Y41P_ENCODER 0 #define CONFIG_YUV4_ENCODER 0 #define CONFIG_ZLIB_ENCODER 0 #define CONFIG_ZMBV_ENCODER 0 #define CONFIG_AAC_ENCODER 0 #define CONFIG_AC3_ENCODER 0 #define CONFIG_AC3_FIXED_ENCODER 0 #define CONFIG_ALAC_ENCODER 0 #define CONFIG_DCA_ENCODER 0 #define CONFIG_EAC3_ENCODER 0 #define CONFIG_FLAC_ENCODER 0 #define CONFIG_G723_1_ENCODER 0 #define CONFIG_MLP_ENCODER 0 #define CONFIG_MP2_ENCODER 0 #define CONFIG_MP2FIXED_ENCODER 0 #define CONFIG_NELLYMOSER_ENCODER 0 #define CONFIG_RA_144_ENCODER 0 #define CONFIG_SONIC_ENCODER 0 #define CONFIG_SONIC_LS_ENCODER 0 #define CONFIG_TRUEHD_ENCODER 0 #define CONFIG_TTA_ENCODER 0 #define CONFIG_VORBIS_ENCODER 0 #define CONFIG_WAVPACK_ENCODER 0 #define CONFIG_WMAV1_ENCODER 0 #define CONFIG_WMAV2_ENCODER 0 #define CONFIG_PCM_ALAW_ENCODER 0 #define CONFIG_PCM_F32BE_ENCODER 0 #define CONFIG_PCM_F32LE_ENCODER 0 #define CONFIG_PCM_F64BE_ENCODER 0 #define CONFIG_PCM_F64LE_ENCODER 0 #define CONFIG_PCM_MULAW_ENCODER 0 #define CONFIG_PCM_S8_ENCODER 0 #define CONFIG_PCM_S8_PLANAR_ENCODER 0 #define CONFIG_PCM_S16BE_ENCODER 0 #define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 #define CONFIG_PCM_S16LE_ENCODER 0 #define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 #define CONFIG_PCM_S24BE_ENCODER 0 #define CONFIG_PCM_S24DAUD_ENCODER 0 #define CONFIG_PCM_S24LE_ENCODER 0 #define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 #define CONFIG_PCM_S32BE_ENCODER 0 #define CONFIG_PCM_S32LE_ENCODER 0 #define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 #define CONFIG_PCM_S64BE_ENCODER 0 #define CONFIG_PCM_S64LE_ENCODER 0 #define CONFIG_PCM_U8_ENCODER 0 #define CONFIG_PCM_U16BE_ENCODER 0 #define CONFIG_PCM_U16LE_ENCODER 0 #define CONFIG_PCM_U24BE_ENCODER 0 #define CONFIG_PCM_U24LE_ENCODER 0 #define CONFIG_PCM_U32BE_ENCODER 0 #define CONFIG_PCM_U32LE_ENCODER 0 #define CONFIG_ROQ_DPCM_ENCODER 0 #define CONFIG_ADPCM_ADX_ENCODER 0 #define CONFIG_ADPCM_G722_ENCODER 0 #define CONFIG_ADPCM_G726_ENCODER 0 #define CONFIG_ADPCM_IMA_QT_ENCODER 0 #define CONFIG_ADPCM_IMA_WAV_ENCODER 0 #define CONFIG_ADPCM_MS_ENCODER 0 #define CONFIG_ADPCM_SWF_ENCODER 0 #define CONFIG_ADPCM_YAMAHA_ENCODER 0 #define CONFIG_SSA_ENCODER 0 #define CONFIG_ASS_ENCODER 0 #define CONFIG_DVBSUB_ENCODER 0 #define CONFIG_DVDSUB_ENCODER 0 #define CONFIG_MOVTEXT_ENCODER 0 #define CONFIG_SRT_ENCODER 0 #define CONFIG_SUBRIP_ENCODER 0 #define CONFIG_TEXT_ENCODER 0 #define CONFIG_WEBVTT_ENCODER 0 #define CONFIG_XSUB_ENCODER 0 #define CONFIG_AAC_AT_ENCODER 0 #define CONFIG_ALAC_AT_ENCODER 0 #define CONFIG_ILBC_AT_ENCODER 0 #define CONFIG_PCM_ALAW_AT_ENCODER 0 #define CONFIG_PCM_MULAW_AT_ENCODER 0 #define CONFIG_LIBFDK_AAC_ENCODER 0 #define CONFIG_LIBGSM_ENCODER 0 #define CONFIG_LIBGSM_MS_ENCODER 0 #define CONFIG_LIBILBC_ENCODER 0 #define CONFIG_LIBMP3LAME_ENCODER 0 #define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 #define CONFIG_LIBOPENJPEG_ENCODER 0 #define CONFIG_LIBOPUS_ENCODER 0 #define CONFIG_LIBSCHROEDINGER_ENCODER 0 #define CONFIG_LIBSHINE_ENCODER 0 #define CONFIG_LIBSPEEX_ENCODER 0 #define CONFIG_LIBTHEORA_ENCODER 0 #define CONFIG_LIBTWOLAME_ENCODER 0 #define CONFIG_LIBVO_AMRWBENC_ENCODER 0 #define CONFIG_LIBVORBIS_ENCODER 0 #define CONFIG_LIBVPX_VP8_ENCODER 0 #define CONFIG_LIBVPX_VP9_ENCODER 0 #define CONFIG_LIBWAVPACK_ENCODER 0 #define CONFIG_LIBWEBP_ANIM_ENCODER 0 #define CONFIG_LIBWEBP_ENCODER 0 #define CONFIG_LIBX262_ENCODER 0 #define CONFIG_LIBX264_ENCODER 0 #define CONFIG_LIBX264RGB_ENCODER 0 #define CONFIG_LIBX265_ENCODER 0 #define CONFIG_LIBXAVS_ENCODER 0 #define CONFIG_LIBXVID_ENCODER 0 #define CONFIG_LIBOPENH264_ENCODER 0 #define CONFIG_H264_NVENC_ENCODER 0 #define CONFIG_H264_OMX_ENCODER 0 #define CONFIG_H264_QSV_ENCODER 0 #define CONFIG_H264_VAAPI_ENCODER 0 #define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 #define CONFIG_NVENC_ENCODER 0 #define CONFIG_NVENC_H264_ENCODER 0 #define CONFIG_NVENC_HEVC_ENCODER 0 #define CONFIG_HEVC_NVENC_ENCODER 0 #define CONFIG_HEVC_QSV_ENCODER 0 #define CONFIG_HEVC_VAAPI_ENCODER 0 #define CONFIG_LIBKVAZAAR_ENCODER 0 #define CONFIG_MJPEG_VAAPI_ENCODER 0 #define CONFIG_MPEG2_QSV_ENCODER 0 #define CONFIG_ABENCH_FILTER 0 #define CONFIG_ACOMPRESSOR_FILTER 0 #define CONFIG_ACROSSFADE_FILTER 0 #define CONFIG_ACRUSHER_FILTER 0 #define CONFIG_ADELAY_FILTER 0 #define CONFIG_AECHO_FILTER 0 #define CONFIG_AEMPHASIS_FILTER 0 #define CONFIG_AEVAL_FILTER 0 #define CONFIG_AFADE_FILTER 0 #define CONFIG_AFFTFILT_FILTER 0 #define CONFIG_AFORMAT_FILTER 0 #define CONFIG_AGATE_FILTER 0 #define CONFIG_AINTERLEAVE_FILTER 0 #define CONFIG_ALIMITER_FILTER 0 #define CONFIG_ALLPASS_FILTER 0 #define CONFIG_ALOOP_FILTER 0 #define CONFIG_AMERGE_FILTER 0 #define CONFIG_AMETADATA_FILTER 0 #define CONFIG_AMIX_FILTER 0 #define CONFIG_ANEQUALIZER_FILTER 0 #define CONFIG_ANULL_FILTER 0 #define CONFIG_APAD_FILTER 0 #define CONFIG_APERMS_FILTER 0 #define CONFIG_APHASER_FILTER 0 #define CONFIG_APULSATOR_FILTER 0 #define CONFIG_AREALTIME_FILTER 0 #define CONFIG_ARESAMPLE_FILTER 0 #define CONFIG_AREVERSE_FILTER 0 #define CONFIG_ASELECT_FILTER 0 #define CONFIG_ASENDCMD_FILTER 0 #define CONFIG_ASETNSAMPLES_FILTER 0 #define CONFIG_ASETPTS_FILTER 0 #define CONFIG_ASETRATE_FILTER 0 #define CONFIG_ASETTB_FILTER 0 #define CONFIG_ASHOWINFO_FILTER 0 #define CONFIG_ASIDEDATA_FILTER 0 #define CONFIG_ASPLIT_FILTER 0 #define CONFIG_ASTATS_FILTER 0 #define CONFIG_ASTREAMSELECT_FILTER 0 #define CONFIG_ASYNCTS_FILTER 0 #define CONFIG_ATEMPO_FILTER 0 #define CONFIG_ATRIM_FILTER 0 #define CONFIG_AZMQ_FILTER 0 #define CONFIG_BANDPASS_FILTER 0 #define CONFIG_BANDREJECT_FILTER 0 #define CONFIG_BASS_FILTER 0 #define CONFIG_BIQUAD_FILTER 0 #define CONFIG_BS2B_FILTER 0 #define CONFIG_CHANNELMAP_FILTER 0 #define CONFIG_CHANNELSPLIT_FILTER 0 #define CONFIG_CHORUS_FILTER 0 #define CONFIG_COMPAND_FILTER 0 #define CONFIG_COMPENSATIONDELAY_FILTER 0 #define CONFIG_CRYSTALIZER_FILTER 0 #define CONFIG_DCSHIFT_FILTER 0 #define CONFIG_DYNAUDNORM_FILTER 0 #define CONFIG_EARWAX_FILTER 0 #define CONFIG_EBUR128_FILTER 0 #define CONFIG_EQUALIZER_FILTER 0 #define CONFIG_EXTRASTEREO_FILTER 0 #define CONFIG_FIREQUALIZER_FILTER 0 #define CONFIG_FLANGER_FILTER 0 #define CONFIG_HDCD_FILTER 0 #define CONFIG_HIGHPASS_FILTER 0 #define CONFIG_JOIN_FILTER 0 #define CONFIG_LADSPA_FILTER 0 #define CONFIG_LOUDNORM_FILTER 0 #define CONFIG_LOWPASS_FILTER 0 #define CONFIG_PAN_FILTER 0 #define CONFIG_REPLAYGAIN_FILTER 0 #define CONFIG_RESAMPLE_FILTER 0 #define CONFIG_RUBBERBAND_FILTER 0 #define CONFIG_SIDECHAINCOMPRESS_FILTER 0 #define CONFIG_SIDECHAINGATE_FILTER 0 #define CONFIG_SILENCEDETECT_FILTER 0 #define CONFIG_SILENCEREMOVE_FILTER 0 #define CONFIG_SOFALIZER_FILTER 0 #define CONFIG_STEREOTOOLS_FILTER 0 #define CONFIG_STEREOWIDEN_FILTER 0 #define CONFIG_TREBLE_FILTER 0 #define CONFIG_TREMOLO_FILTER 0 #define CONFIG_VIBRATO_FILTER 0 #define CONFIG_VOLUME_FILTER 0 #define CONFIG_VOLUMEDETECT_FILTER 0 #define CONFIG_AEVALSRC_FILTER 0 #define CONFIG_ANOISESRC_FILTER 0 #define CONFIG_ANULLSRC_FILTER 0 #define CONFIG_FLITE_FILTER 0 #define CONFIG_SINE_FILTER 0 #define CONFIG_ANULLSINK_FILTER 0 #define CONFIG_ALPHAEXTRACT_FILTER 0 #define CONFIG_ALPHAMERGE_FILTER 0 #define CONFIG_ASS_FILTER 0 #define CONFIG_ATADENOISE_FILTER 0 #define CONFIG_AVGBLUR_FILTER 0 #define CONFIG_BBOX_FILTER 0 #define CONFIG_BENCH_FILTER 0 #define CONFIG_BITPLANENOISE_FILTER 0 #define CONFIG_BLACKDETECT_FILTER 0 #define CONFIG_BLACKFRAME_FILTER 0 #define CONFIG_BLEND_FILTER 0 #define CONFIG_BOXBLUR_FILTER 0 #define CONFIG_BWDIF_FILTER 0 #define CONFIG_CHROMAKEY_FILTER 0 #define CONFIG_CIESCOPE_FILTER 0 #define CONFIG_CODECVIEW_FILTER 0 #define CONFIG_COLORBALANCE_FILTER 0 #define CONFIG_COLORCHANNELMIXER_FILTER 0 #define CONFIG_COLORKEY_FILTER 0 #define CONFIG_COLORLEVELS_FILTER 0 #define CONFIG_COLORMATRIX_FILTER 0 #define CONFIG_COLORSPACE_FILTER 0 #define CONFIG_CONVOLUTION_FILTER 0 #define CONFIG_COPY_FILTER 0 #define CONFIG_COREIMAGE_FILTER 0 #define CONFIG_COVER_RECT_FILTER 0 #define CONFIG_CROP_FILTER 0 #define CONFIG_CROPDETECT_FILTER 0 #define CONFIG_CURVES_FILTER 0 #define CONFIG_DATASCOPE_FILTER 0 #define CONFIG_DCTDNOIZ_FILTER 0 #define CONFIG_DEBAND_FILTER 0 #define CONFIG_DECIMATE_FILTER 0 #define CONFIG_DEFLATE_FILTER 0 #define CONFIG_DEJUDDER_FILTER 0 #define CONFIG_DELOGO_FILTER 0 #define CONFIG_DESHAKE_FILTER 0 #define CONFIG_DETELECINE_FILTER 0 #define CONFIG_DILATION_FILTER 0 #define CONFIG_DISPLACE_FILTER 0 #define CONFIG_DRAWBOX_FILTER 0 #define CONFIG_DRAWGRAPH_FILTER 0 #define CONFIG_DRAWGRID_FILTER 0 #define CONFIG_DRAWTEXT_FILTER 0 #define CONFIG_EDGEDETECT_FILTER 0 #define CONFIG_ELBG_FILTER 0 #define CONFIG_EQ_FILTER 0 #define CONFIG_EROSION_FILTER 0 #define CONFIG_EXTRACTPLANES_FILTER 0 #define CONFIG_FADE_FILTER 0 #define CONFIG_FFTFILT_FILTER 0 #define CONFIG_FIELD_FILTER 0 #define CONFIG_FIELDHINT_FILTER 0 #define CONFIG_FIELDMATCH_FILTER 0 #define CONFIG_FIELDORDER_FILTER 0 #define CONFIG_FIND_RECT_FILTER 0 #define CONFIG_FORMAT_FILTER 0 #define CONFIG_FPS_FILTER 0 #define CONFIG_FRAMEPACK_FILTER 0 #define CONFIG_FRAMERATE_FILTER 0 #define CONFIG_FRAMESTEP_FILTER 0 #define CONFIG_FREI0R_FILTER 0 #define CONFIG_FSPP_FILTER 0 #define CONFIG_GBLUR_FILTER 0 #define CONFIG_GEQ_FILTER 0 #define CONFIG_GRADFUN_FILTER 0 #define CONFIG_HALDCLUT_FILTER 0 #define CONFIG_HFLIP_FILTER 0 #define CONFIG_HISTEQ_FILTER 0 #define CONFIG_HISTOGRAM_FILTER 0 #define CONFIG_HQDN3D_FILTER 0 #define CONFIG_HQX_FILTER 0 #define CONFIG_HSTACK_FILTER 0 #define CONFIG_HUE_FILTER 0 #define CONFIG_HWDOWNLOAD_FILTER 0 #define CONFIG_HWUPLOAD_FILTER 0 #define CONFIG_HWUPLOAD_CUDA_FILTER 0 #define CONFIG_HYSTERESIS_FILTER 0 #define CONFIG_IDET_FILTER 0 #define CONFIG_IL_FILTER 0 #define CONFIG_INFLATE_FILTER 0 #define CONFIG_INTERLACE_FILTER 0 #define CONFIG_INTERLEAVE_FILTER 0 #define CONFIG_KERNDEINT_FILTER 0 #define CONFIG_LENSCORRECTION_FILTER 0 #define CONFIG_LOOP_FILTER 0 #define CONFIG_LUT_FILTER 0 #define CONFIG_LUT2_FILTER 0 #define CONFIG_LUT3D_FILTER 0 #define CONFIG_LUTRGB_FILTER 0 #define CONFIG_LUTYUV_FILTER 0 #define CONFIG_MASKEDCLAMP_FILTER 0 #define CONFIG_MASKEDMERGE_FILTER 0 #define CONFIG_MCDEINT_FILTER 0 #define CONFIG_MERGEPLANES_FILTER 0 #define CONFIG_MESTIMATE_FILTER 0 #define CONFIG_METADATA_FILTER 0 #define CONFIG_MINTERPOLATE_FILTER 0 #define CONFIG_MPDECIMATE_FILTER 0 #define CONFIG_NEGATE_FILTER 0 #define CONFIG_NLMEANS_FILTER 0 #define CONFIG_NNEDI_FILTER 0 #define CONFIG_NOFORMAT_FILTER 0 #define CONFIG_NOISE_FILTER 0 #define CONFIG_NULL_FILTER 0 #define CONFIG_OCR_FILTER 0 #define CONFIG_OCV_FILTER 0 #define CONFIG_OVERLAY_FILTER 0 #define CONFIG_OWDENOISE_FILTER 0 #define CONFIG_PAD_FILTER 0 #define CONFIG_PALETTEGEN_FILTER 0 #define CONFIG_PALETTEUSE_FILTER 0 #define CONFIG_PERMS_FILTER 0 #define CONFIG_PERSPECTIVE_FILTER 0 #define CONFIG_PHASE_FILTER 0 #define CONFIG_PIXDESCTEST_FILTER 0 #define CONFIG_PP_FILTER 0 #define CONFIG_PP7_FILTER 0 #define CONFIG_PREWITT_FILTER 0 #define CONFIG_PSNR_FILTER 0 #define CONFIG_PULLUP_FILTER 0 #define CONFIG_QP_FILTER 0 #define CONFIG_RANDOM_FILTER 0 #define CONFIG_READVITC_FILTER 0 #define CONFIG_REALTIME_FILTER 0 #define CONFIG_REMAP_FILTER 0 #define CONFIG_REMOVEGRAIN_FILTER 0 #define CONFIG_REMOVELOGO_FILTER 0 #define CONFIG_REPEATFIELDS_FILTER 0 #define CONFIG_REVERSE_FILTER 0 #define CONFIG_ROTATE_FILTER 0 #define CONFIG_SAB_FILTER 0 #define CONFIG_SCALE_FILTER 0 #define CONFIG_SCALE_NPP_FILTER 0 #define CONFIG_SCALE_VAAPI_FILTER 0 #define CONFIG_SCALE2REF_FILTER 0 #define CONFIG_SELECT_FILTER 0 #define CONFIG_SELECTIVECOLOR_FILTER 0 #define CONFIG_SENDCMD_FILTER 0 #define CONFIG_SEPARATEFIELDS_FILTER 0 #define CONFIG_SETDAR_FILTER 0 #define CONFIG_SETFIELD_FILTER 0 #define CONFIG_SETPTS_FILTER 0 #define CONFIG_SETSAR_FILTER 0 #define CONFIG_SETTB_FILTER 0 #define CONFIG_SHOWINFO_FILTER 0 #define CONFIG_SHOWPALETTE_FILTER 0 #define CONFIG_SHUFFLEFRAMES_FILTER 0 #define CONFIG_SHUFFLEPLANES_FILTER 0 #define CONFIG_SIDEDATA_FILTER 0 #define CONFIG_SIGNALSTATS_FILTER 0 #define CONFIG_SMARTBLUR_FILTER 0 #define CONFIG_SOBEL_FILTER 0 #define CONFIG_SPLIT_FILTER 0 #define CONFIG_SPP_FILTER 0 #define CONFIG_SSIM_FILTER 0 #define CONFIG_STEREO3D_FILTER 0 #define CONFIG_STREAMSELECT_FILTER 0 #define CONFIG_SUBTITLES_FILTER 0 #define CONFIG_SUPER2XSAI_FILTER 0 #define CONFIG_SWAPRECT_FILTER 0 #define CONFIG_SWAPUV_FILTER 0 #define CONFIG_TBLEND_FILTER 0 #define CONFIG_TELECINE_FILTER 0 #define CONFIG_THUMBNAIL_FILTER 0 #define CONFIG_TILE_FILTER 0 #define CONFIG_TINTERLACE_FILTER 0 #define CONFIG_TRANSPOSE_FILTER 0 #define CONFIG_TRIM_FILTER 0 #define CONFIG_UNSHARP_FILTER 0 #define CONFIG_USPP_FILTER 0 #define CONFIG_VAGUEDENOISER_FILTER 0 #define CONFIG_VECTORSCOPE_FILTER 0 #define CONFIG_VFLIP_FILTER 0 #define CONFIG_VIDSTABDETECT_FILTER 0 #define CONFIG_VIDSTABTRANSFORM_FILTER 0 #define CONFIG_VIGNETTE_FILTER 0 #define CONFIG_VSTACK_FILTER 0 #define CONFIG_W3FDIF_FILTER 0 #define CONFIG_WAVEFORM_FILTER 0 #define CONFIG_WEAVE_FILTER 0 #define CONFIG_XBR_FILTER 0 #define CONFIG_YADIF_FILTER 0 #define CONFIG_ZMQ_FILTER 0 #define CONFIG_ZOOMPAN_FILTER 0 #define CONFIG_ZSCALE_FILTER 0 #define CONFIG_ALLRGB_FILTER 0 #define CONFIG_ALLYUV_FILTER 0 #define CONFIG_CELLAUTO_FILTER 0 #define CONFIG_COLOR_FILTER 0 #define CONFIG_COREIMAGESRC_FILTER 0 #define CONFIG_FREI0R_SRC_FILTER 0 #define CONFIG_HALDCLUTSRC_FILTER 0 #define CONFIG_LIFE_FILTER 0 #define CONFIG_MANDELBROT_FILTER 0 #define CONFIG_MPTESTSRC_FILTER 0 #define CONFIG_NULLSRC_FILTER 0 #define CONFIG_RGBTESTSRC_FILTER 0 #define CONFIG_SMPTEBARS_FILTER 0 #define CONFIG_SMPTEHDBARS_FILTER 0 #define CONFIG_TESTSRC_FILTER 0 #define CONFIG_TESTSRC2_FILTER 0 #define CONFIG_YUVTESTSRC_FILTER 0 #define CONFIG_NULLSINK_FILTER 0 #define CONFIG_ADRAWGRAPH_FILTER 0 #define CONFIG_AHISTOGRAM_FILTER 0 #define CONFIG_APHASEMETER_FILTER 0 #define CONFIG_AVECTORSCOPE_FILTER 0 #define CONFIG_CONCAT_FILTER 0 #define CONFIG_SHOWCQT_FILTER 0 #define CONFIG_SHOWFREQS_FILTER 0 #define CONFIG_SHOWSPECTRUM_FILTER 0 #define CONFIG_SHOWSPECTRUMPIC_FILTER 0 #define CONFIG_SHOWVOLUME_FILTER 0 #define CONFIG_SHOWWAVES_FILTER 0 #define CONFIG_SHOWWAVESPIC_FILTER 0 #define CONFIG_SPECTRUMSYNTH_FILTER 0 #define CONFIG_AMOVIE_FILTER 0 #define CONFIG_MOVIE_FILTER 0 #define CONFIG_H263_CUVID_HWACCEL 0 #define CONFIG_H263_VAAPI_HWACCEL 0 #define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_H264_CUVID_HWACCEL 0 #define CONFIG_H264_D3D11VA_HWACCEL 0 #define CONFIG_H264_DXVA2_HWACCEL 0 #define CONFIG_H264_MEDIACODEC_HWACCEL 0 #define CONFIG_H264_MMAL_HWACCEL 0 #define CONFIG_H264_QSV_HWACCEL 0 #define CONFIG_H264_VAAPI_HWACCEL 0 #define CONFIG_H264_VDA_HWACCEL 0 #define CONFIG_H264_VDA_OLD_HWACCEL 0 #define CONFIG_H264_VDPAU_HWACCEL 0 #define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_HEVC_CUVID_HWACCEL 0 #define CONFIG_HEVC_D3D11VA_HWACCEL 0 #define CONFIG_HEVC_DXVA2_HWACCEL 0 #define CONFIG_HEVC_MEDIACODEC_HWACCEL 0 #define CONFIG_HEVC_QSV_HWACCEL 0 #define CONFIG_HEVC_VAAPI_HWACCEL 0 #define CONFIG_HEVC_VDPAU_HWACCEL 0 #define CONFIG_MJPEG_CUVID_HWACCEL 0 #define CONFIG_MPEG1_CUVID_HWACCEL 0 #define CONFIG_MPEG1_XVMC_HWACCEL 0 #define CONFIG_MPEG1_VDPAU_HWACCEL 0 #define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_MPEG2_CUVID_HWACCEL 0 #define CONFIG_MPEG2_XVMC_HWACCEL 0 #define CONFIG_MPEG2_D3D11VA_HWACCEL 0 #define CONFIG_MPEG2_DXVA2_HWACCEL 0 #define CONFIG_MPEG2_MMAL_HWACCEL 0 #define CONFIG_MPEG2_QSV_HWACCEL 0 #define CONFIG_MPEG2_VAAPI_HWACCEL 0 #define CONFIG_MPEG2_VDPAU_HWACCEL 0 #define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_MPEG4_CUVID_HWACCEL 0 #define CONFIG_MPEG4_MEDIACODEC_HWACCEL 0 #define CONFIG_MPEG4_MMAL_HWACCEL 0 #define CONFIG_MPEG4_VAAPI_HWACCEL 0 #define CONFIG_MPEG4_VDPAU_HWACCEL 0 #define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_VC1_CUVID_HWACCEL 0 #define CONFIG_VC1_D3D11VA_HWACCEL 0 #define CONFIG_VC1_DXVA2_HWACCEL 0 #define CONFIG_VC1_VAAPI_HWACCEL 0 #define CONFIG_VC1_VDPAU_HWACCEL 0 #define CONFIG_VC1_MMAL_HWACCEL 0 #define CONFIG_VC1_QSV_HWACCEL 0 #define CONFIG_VP8_CUVID_HWACCEL 0 #define CONFIG_VP8_MEDIACODEC_HWACCEL 0 #define CONFIG_VP9_CUVID_HWACCEL 0 #define CONFIG_VP9_D3D11VA_HWACCEL 0 #define CONFIG_VP9_DXVA2_HWACCEL 0 #define CONFIG_VP9_MEDIACODEC_HWACCEL 0 #define CONFIG_VP9_VAAPI_HWACCEL 0 #define CONFIG_WMV3_D3D11VA_HWACCEL 0 #define CONFIG_WMV3_DXVA2_HWACCEL 0 #define CONFIG_WMV3_VAAPI_HWACCEL 0 #define CONFIG_WMV3_VDPAU_HWACCEL 0 #define CONFIG_ALSA_INDEV 0 #define CONFIG_AVFOUNDATION_INDEV 0 #define CONFIG_BKTR_INDEV 0 #define CONFIG_DECKLINK_INDEV 0 #define CONFIG_DSHOW_INDEV 0 #define CONFIG_DV1394_INDEV 0 #define CONFIG_FBDEV_INDEV 0 #define CONFIG_GDIGRAB_INDEV 0 #define CONFIG_IEC61883_INDEV 0 #define CONFIG_JACK_INDEV 0 #define CONFIG_LAVFI_INDEV 0 #define CONFIG_OPENAL_INDEV 0 #define CONFIG_OSS_INDEV 0 #define CONFIG_PULSE_INDEV 0 #define CONFIG_QTKIT_INDEV 0 #define CONFIG_SNDIO_INDEV 0 #define CONFIG_V4L2_INDEV 0 #define CONFIG_VFWCAP_INDEV 0 #define CONFIG_X11GRAB_INDEV 0 #define CONFIG_X11GRAB_XCB_INDEV 0 #define CONFIG_LIBCDIO_INDEV 0 #define CONFIG_LIBDC1394_INDEV 0 #define CONFIG_A64_MUXER 0 #define CONFIG_AC3_MUXER 0 #define CONFIG_ADTS_MUXER 0 #define CONFIG_ADX_MUXER 0 #define CONFIG_AIFF_MUXER 0 #define CONFIG_AMR_MUXER 0 #define CONFIG_APNG_MUXER 0 #define CONFIG_ASF_MUXER 0 #define CONFIG_ASS_MUXER 0 #define CONFIG_AST_MUXER 0 #define CONFIG_ASF_STREAM_MUXER 0 #define CONFIG_AU_MUXER 0 #define CONFIG_AVI_MUXER 0 #define CONFIG_AVM2_MUXER 0 #define CONFIG_BIT_MUXER 0 #define CONFIG_CAF_MUXER 0 #define CONFIG_CAVSVIDEO_MUXER 0 #define CONFIG_CRC_MUXER 0 #define CONFIG_DASH_MUXER 0 #define CONFIG_DATA_MUXER 0 #define CONFIG_DAUD_MUXER 0 #define CONFIG_DIRAC_MUXER 0 #define CONFIG_DNXHD_MUXER 0 #define CONFIG_DTS_MUXER 0 #define CONFIG_DV_MUXER 0 #define CONFIG_EAC3_MUXER 0 #define CONFIG_F4V_MUXER 0 #define CONFIG_FFM_MUXER 0 #define CONFIG_FFMETADATA_MUXER 0 #define CONFIG_FIFO_MUXER 0 #define CONFIG_FILMSTRIP_MUXER 0 #define CONFIG_FLAC_MUXER 0 #define CONFIG_FLV_MUXER 0 #define CONFIG_FRAMECRC_MUXER 0 #define CONFIG_FRAMEHASH_MUXER 0 #define CONFIG_FRAMEMD5_MUXER 0 #define CONFIG_G722_MUXER 0 #define CONFIG_G723_1_MUXER 0 #define CONFIG_GIF_MUXER 0 #define CONFIG_GSM_MUXER 0 #define CONFIG_GXF_MUXER 0 #define CONFIG_H261_MUXER 0 #define CONFIG_H263_MUXER 0 #define CONFIG_H264_MUXER 0 #define CONFIG_HASH_MUXER 0 #define CONFIG_HDS_MUXER 0 #define CONFIG_HEVC_MUXER 0 #define CONFIG_HLS_MUXER 0 #define CONFIG_ICO_MUXER 0 #define CONFIG_ILBC_MUXER 0 #define CONFIG_IMAGE2_MUXER 0 #define CONFIG_IMAGE2PIPE_MUXER 0 #define CONFIG_IPOD_MUXER 0 #define CONFIG_IRCAM_MUXER 0 #define CONFIG_ISMV_MUXER 0 #define CONFIG_IVF_MUXER 0 #define CONFIG_JACOSUB_MUXER 0 #define CONFIG_LATM_MUXER 0 #define CONFIG_LRC_MUXER 0 #define CONFIG_M4V_MUXER 0 #define CONFIG_MD5_MUXER 0 #define CONFIG_MATROSKA_MUXER 0 #define CONFIG_MATROSKA_AUDIO_MUXER 0 #define CONFIG_MICRODVD_MUXER 0 #define CONFIG_MJPEG_MUXER 0 #define CONFIG_MLP_MUXER 0 #define CONFIG_MMF_MUXER 0 #define CONFIG_MOV_MUXER 1 #define CONFIG_MP2_MUXER 0 #define CONFIG_MP3_MUXER 0 #define CONFIG_MP4_MUXER 1 #define CONFIG_MPEG1SYSTEM_MUXER 0 #define CONFIG_MPEG1VCD_MUXER 0 #define CONFIG_MPEG1VIDEO_MUXER 0 #define CONFIG_MPEG2DVD_MUXER 0 #define CONFIG_MPEG2SVCD_MUXER 0 #define CONFIG_MPEG2VIDEO_MUXER 0 #define CONFIG_MPEG2VOB_MUXER 0 #define CONFIG_MPEGTS_MUXER 0 #define CONFIG_MPJPEG_MUXER 0 #define CONFIG_MXF_MUXER 0 #define CONFIG_MXF_D10_MUXER 0 #define CONFIG_MXF_OPATOM_MUXER 0 #define CONFIG_NULL_MUXER 0 #define CONFIG_NUT_MUXER 0 #define CONFIG_OGA_MUXER 0 #define CONFIG_OGG_MUXER 0 #define CONFIG_OGV_MUXER 0 #define CONFIG_OMA_MUXER 0 #define CONFIG_OPUS_MUXER 0 #define CONFIG_PCM_ALAW_MUXER 0 #define CONFIG_PCM_MULAW_MUXER 0 #define CONFIG_PCM_F64BE_MUXER 0 #define CONFIG_PCM_F64LE_MUXER 0 #define CONFIG_PCM_F32BE_MUXER 0 #define CONFIG_PCM_F32LE_MUXER 0 #define CONFIG_PCM_S32BE_MUXER 0 #define CONFIG_PCM_S32LE_MUXER 0 #define CONFIG_PCM_S24BE_MUXER 0 #define CONFIG_PCM_S24LE_MUXER 0 #define CONFIG_PCM_S16BE_MUXER 0 #define CONFIG_PCM_S16LE_MUXER 0 #define CONFIG_PCM_S8_MUXER 0 #define CONFIG_PCM_U32BE_MUXER 0 #define CONFIG_PCM_U32LE_MUXER 0 #define CONFIG_PCM_U24BE_MUXER 0 #define CONFIG_PCM_U24LE_MUXER 0 #define CONFIG_PCM_U16BE_MUXER 0 #define CONFIG_PCM_U16LE_MUXER 0 #define CONFIG_PCM_U8_MUXER 0 #define CONFIG_PSP_MUXER 0 #define CONFIG_RAWVIDEO_MUXER 0 #define CONFIG_RM_MUXER 0 #define CONFIG_ROQ_MUXER 0 #define CONFIG_RSO_MUXER 0 #define CONFIG_RTP_MUXER 0 #define CONFIG_RTP_MPEGTS_MUXER 0 #define CONFIG_RTSP_MUXER 0 #define CONFIG_SAP_MUXER 0 #define CONFIG_SEGMENT_MUXER 0 #define CONFIG_STREAM_SEGMENT_MUXER 0 #define CONFIG_SINGLEJPEG_MUXER 0 #define CONFIG_SMJPEG_MUXER 0 #define CONFIG_SMOOTHSTREAMING_MUXER 0 #define CONFIG_SOX_MUXER 0 #define CONFIG_SPX_MUXER 0 #define CONFIG_SPDIF_MUXER 0 #define CONFIG_SRT_MUXER 0 #define CONFIG_SWF_MUXER 0 #define CONFIG_TEE_MUXER 0 #define CONFIG_TG2_MUXER 0 #define CONFIG_TGP_MUXER 0 #define CONFIG_MKVTIMESTAMP_V2_MUXER 0 #define CONFIG_TRUEHD_MUXER 0 #define CONFIG_TTA_MUXER 0 #define CONFIG_UNCODEDFRAMECRC_MUXER 0 #define CONFIG_VC1_MUXER 0 #define CONFIG_VC1T_MUXER 0 #define CONFIG_VOC_MUXER 0 #define CONFIG_W64_MUXER 0 #define CONFIG_WAV_MUXER 0 #define CONFIG_WEBM_MUXER 0 #define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 #define CONFIG_WEBM_CHUNK_MUXER 0 #define CONFIG_WEBP_MUXER 0 #define CONFIG_WEBVTT_MUXER 0 #define CONFIG_WTV_MUXER 0 #define CONFIG_WV_MUXER 0 #define CONFIG_YUV4MPEGPIPE_MUXER 0 #define CONFIG_CHROMAPRINT_MUXER 0 #define CONFIG_LIBNUT_MUXER 0 #define CONFIG_ALSA_OUTDEV 0 #define CONFIG_CACA_OUTDEV 0 #define CONFIG_DECKLINK_OUTDEV 0 #define CONFIG_FBDEV_OUTDEV 0 #define CONFIG_OPENGL_OUTDEV 0 #define CONFIG_OSS_OUTDEV 0 #define CONFIG_PULSE_OUTDEV 0 #define CONFIG_SDL2_OUTDEV 0 #define CONFIG_SNDIO_OUTDEV 0 #define CONFIG_V4L2_OUTDEV 0 #define CONFIG_XV_OUTDEV 0 #define CONFIG_AAC_PARSER 1 #define CONFIG_AAC_LATM_PARSER 1 #define CONFIG_AC3_PARSER 0 #define CONFIG_ADX_PARSER 0 #define CONFIG_BMP_PARSER 0 #define CONFIG_CAVSVIDEO_PARSER 0 #define CONFIG_COOK_PARSER 0 #define CONFIG_DCA_PARSER 0 #define CONFIG_DIRAC_PARSER 0 #define CONFIG_DNXHD_PARSER 0 #define CONFIG_DPX_PARSER 0 #define CONFIG_DVAUDIO_PARSER 0 #define CONFIG_DVBSUB_PARSER 0 #define CONFIG_DVDSUB_PARSER 0 #define CONFIG_DVD_NAV_PARSER 0 #define CONFIG_FLAC_PARSER 0 #define CONFIG_G729_PARSER 0 #define CONFIG_GSM_PARSER 0 #define CONFIG_H261_PARSER 0 #define CONFIG_H263_PARSER 1 #define CONFIG_H264_PARSER 1 #define CONFIG_HEVC_PARSER 0 #define CONFIG_MJPEG_PARSER 0 #define CONFIG_MLP_PARSER 0 #define CONFIG_MPEG4VIDEO_PARSER 0 #define CONFIG_MPEGAUDIO_PARSER 1 #define CONFIG_MPEGVIDEO_PARSER 0 #define CONFIG_OPUS_PARSER 0 #define CONFIG_PNG_PARSER 0 #define CONFIG_PNM_PARSER 0 #define CONFIG_RV30_PARSER 0 #define CONFIG_RV40_PARSER 0 #define CONFIG_TAK_PARSER 0 #define CONFIG_VC1_PARSER 0 #define CONFIG_VORBIS_PARSER 0 #define CONFIG_VP3_PARSER 0 #define CONFIG_VP8_PARSER 0 #define CONFIG_VP9_PARSER 0 #define CONFIG_ASYNC_PROTOCOL 1 #define CONFIG_BLURAY_PROTOCOL 0 #define CONFIG_CACHE_PROTOCOL 1 #define CONFIG_CONCAT_PROTOCOL 0 #define CONFIG_CRYPTO_PROTOCOL 0 #define CONFIG_DATA_PROTOCOL 1 #define CONFIG_FFRTMPCRYPT_PROTOCOL 0 #define CONFIG_FFRTMPHTTP_PROTOCOL 1 #define CONFIG_FILE_PROTOCOL 1 #define CONFIG_FTP_PROTOCOL 1 #define CONFIG_GOPHER_PROTOCOL 0 #define CONFIG_HLS_PROTOCOL 1 #define CONFIG_HTTP_PROTOCOL 1 #define CONFIG_HTTPPROXY_PROTOCOL 1 #define CONFIG_HTTPS_PROTOCOL 1 #define CONFIG_ICECAST_PROTOCOL 0 #define CONFIG_IJKHTTPHOOK_PROTOCOL 1 #define CONFIG_IJKLONGURL_PROTOCOL 1 #define CONFIG_IJKMEDIADATASOURCE_PROTOCOL 1 #define CONFIG_IJKSEGMENT_PROTOCOL 1 #define CONFIG_IJKTCPHOOK_PROTOCOL 1 #define CONFIG_IJKIO_PROTOCOL 1 #define CONFIG_MMSH_PROTOCOL 0 #define CONFIG_MMST_PROTOCOL 0 #define CONFIG_MD5_PROTOCOL 0 #define CONFIG_PIPE_PROTOCOL 1 #define CONFIG_RTMP_PROTOCOL 1 #define CONFIG_RTMPE_PROTOCOL 0 #define CONFIG_RTMPS_PROTOCOL 0 #define CONFIG_RTMPT_PROTOCOL 1 #define CONFIG_RTMPTE_PROTOCOL 0 #define CONFIG_RTMPTS_PROTOCOL 0 #define CONFIG_RTP_PROTOCOL 0 #define CONFIG_SCTP_PROTOCOL 0 #define CONFIG_SRTP_PROTOCOL 0 #define CONFIG_SUBFILE_PROTOCOL 0 #define CONFIG_TEE_PROTOCOL 1 #define CONFIG_TCP_PROTOCOL 1 #define CONFIG_TLS_GNUTLS_PROTOCOL 0 #define CONFIG_TLS_SCHANNEL_PROTOCOL 0 #define CONFIG_TLS_SECURETRANSPORT_PROTOCOL 0 #define CONFIG_TLS_OPENSSL_PROTOCOL 1 #define CONFIG_UDP_PROTOCOL 1 #define CONFIG_UDPLITE_PROTOCOL 1 #define CONFIG_UNIX_PROTOCOL 0 #define CONFIG_LIBRTMP_PROTOCOL 0 #define CONFIG_LIBRTMPE_PROTOCOL 0 #define CONFIG_LIBRTMPS_PROTOCOL 0 #define CONFIG_LIBRTMPT_PROTOCOL 0 #define CONFIG_LIBRTMPTE_PROTOCOL 0 #define CONFIG_LIBSSH_PROTOCOL 0 #define CONFIG_LIBSMBCLIENT_PROTOCOL 0 #endif /* FFMPEG_CONFIG_H */ ================================================ FILE: 3rParty/FFmpeg/include/libswresample/swresample.h ================================================ /* * Copyright (C) 2011-2013 Michael Niedermayer (michaelni@gmx.at) * * This file is part of libswresample * * libswresample is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * libswresample is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with libswresample; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef SWRESAMPLE_SWRESAMPLE_H #define SWRESAMPLE_SWRESAMPLE_H /** * @file * @ingroup lswr * libswresample public header */ /** * @defgroup lswr libswresample * @{ * * Audio resampling, sample format conversion and mixing library. * * Interaction with lswr is done through SwrContext, which is * allocated with swr_alloc() or swr_alloc_set_opts(). It is opaque, so all parameters * must be set with the @ref avoptions API. * * The first thing you will need to do in order to use lswr is to allocate * SwrContext. This can be done with swr_alloc() or swr_alloc_set_opts(). If you * are using the former, you must set options through the @ref avoptions API. * The latter function provides the same feature, but it allows you to set some * common options in the same statement. * * For example the following code will setup conversion from planar float sample * format to interleaved signed 16-bit integer, downsampling from 48kHz to * 44.1kHz and downmixing from 5.1 channels to stereo (using the default mixing * matrix). This is using the swr_alloc() function. * @code * SwrContext *swr = swr_alloc(); * av_opt_set_channel_layout(swr, "in_channel_layout", AV_CH_LAYOUT_5POINT1, 0); * av_opt_set_channel_layout(swr, "out_channel_layout", AV_CH_LAYOUT_STEREO, 0); * av_opt_set_int(swr, "in_sample_rate", 48000, 0); * av_opt_set_int(swr, "out_sample_rate", 44100, 0); * av_opt_set_sample_fmt(swr, "in_sample_fmt", AV_SAMPLE_FMT_FLTP, 0); * av_opt_set_sample_fmt(swr, "out_sample_fmt", AV_SAMPLE_FMT_S16, 0); * @endcode * * The same job can be done using swr_alloc_set_opts() as well: * @code * SwrContext *swr = swr_alloc_set_opts(NULL, // we're allocating a new context * AV_CH_LAYOUT_STEREO, // out_ch_layout * AV_SAMPLE_FMT_S16, // out_sample_fmt * 44100, // out_sample_rate * AV_CH_LAYOUT_5POINT1, // in_ch_layout * AV_SAMPLE_FMT_FLTP, // in_sample_fmt * 48000, // in_sample_rate * 0, // log_offset * NULL); // log_ctx * @endcode * * Once all values have been set, it must be initialized with swr_init(). If * you need to change the conversion parameters, you can change the parameters * using @ref AVOptions, as described above in the first example; or by using * swr_alloc_set_opts(), but with the first argument the allocated context. * You must then call swr_init() again. * * The conversion itself is done by repeatedly calling swr_convert(). * Note that the samples may get buffered in swr if you provide insufficient * output space or if sample rate conversion is done, which requires "future" * samples. Samples that do not require future input can be retrieved at any * time by using swr_convert() (in_count can be set to 0). * At the end of conversion the resampling buffer can be flushed by calling * swr_convert() with NULL in and 0 in_count. * * The samples used in the conversion process can be managed with the libavutil * @ref lavu_sampmanip "samples manipulation" API, including av_samples_alloc() * function used in the following example. * * The delay between input and output, can at any time be found by using * swr_get_delay(). * * The following code demonstrates the conversion loop assuming the parameters * from above and caller-defined functions get_input() and handle_output(): * @code * uint8_t **input; * int in_samples; * * while (get_input(&input, &in_samples)) { * uint8_t *output; * int out_samples = av_rescale_rnd(swr_get_delay(swr, 48000) + * in_samples, 44100, 48000, AV_ROUND_UP); * av_samples_alloc(&output, NULL, 2, out_samples, * AV_SAMPLE_FMT_S16, 0); * out_samples = swr_convert(swr, &output, out_samples, * input, in_samples); * handle_output(output, out_samples); * av_freep(&output); * } * @endcode * * When the conversion is finished, the conversion * context and everything associated with it must be freed with swr_free(). * A swr_close() function is also available, but it exists mainly for * compatibility with libavresample, and is not required to be called. * * There will be no memory leak if the data is not completely flushed before * swr_free(). */ #include #include "libavutil/channel_layout.h" #include "libavutil/frame.h" #include "libavutil/samplefmt.h" #include "libswresample/version.h" #if LIBSWRESAMPLE_VERSION_MAJOR < 1 #define SWR_CH_MAX 32 ///< Maximum number of channels #endif /** * @name Option constants * These constants are used for the @ref avoptions interface for lswr. * @{ * */ #define SWR_FLAG_RESAMPLE 1 ///< Force resampling even if equal sample rate //TODO use int resample ? //long term TODO can we enable this dynamically? /** Dithering algorithms */ enum SwrDitherType { SWR_DITHER_NONE = 0, SWR_DITHER_RECTANGULAR, SWR_DITHER_TRIANGULAR, SWR_DITHER_TRIANGULAR_HIGHPASS, SWR_DITHER_NS = 64, ///< not part of API/ABI SWR_DITHER_NS_LIPSHITZ, SWR_DITHER_NS_F_WEIGHTED, SWR_DITHER_NS_MODIFIED_E_WEIGHTED, SWR_DITHER_NS_IMPROVED_E_WEIGHTED, SWR_DITHER_NS_SHIBATA, SWR_DITHER_NS_LOW_SHIBATA, SWR_DITHER_NS_HIGH_SHIBATA, SWR_DITHER_NB, ///< not part of API/ABI }; /** Resampling Engines */ enum SwrEngine { SWR_ENGINE_SWR, /**< SW Resampler */ SWR_ENGINE_SOXR, /**< SoX Resampler */ SWR_ENGINE_NB, ///< not part of API/ABI }; /** Resampling Filter Types */ enum SwrFilterType { SWR_FILTER_TYPE_CUBIC, /**< Cubic */ SWR_FILTER_TYPE_BLACKMAN_NUTTALL, /**< Blackman Nuttall windowed sinc */ SWR_FILTER_TYPE_KAISER, /**< Kaiser windowed sinc */ }; /** * @} */ /** * The libswresample context. Unlike libavcodec and libavformat, this structure * is opaque. This means that if you would like to set options, you must use * the @ref avoptions API and cannot directly set values to members of the * structure. */ typedef struct SwrContext SwrContext; /** * Get the AVClass for SwrContext. It can be used in combination with * AV_OPT_SEARCH_FAKE_OBJ for examining options. * * @see av_opt_find(). * @return the AVClass of SwrContext */ const AVClass *swr_get_class(void); /** * @name SwrContext constructor functions * @{ */ /** * Allocate SwrContext. * * If you use this function you will need to set the parameters (manually or * with swr_alloc_set_opts()) before calling swr_init(). * * @see swr_alloc_set_opts(), swr_init(), swr_free() * @return NULL on error, allocated context otherwise */ struct SwrContext *swr_alloc(void); /** * Initialize context after user parameters have been set. * @note The context must be configured using the AVOption API. * * @see av_opt_set_int() * @see av_opt_set_dict() * * @param[in,out] s Swr context to initialize * @return AVERROR error code in case of failure. */ int swr_init(struct SwrContext *s); /** * Check whether an swr context has been initialized or not. * * @param[in] s Swr context to check * @see swr_init() * @return positive if it has been initialized, 0 if not initialized */ int swr_is_initialized(struct SwrContext *s); /** * Allocate SwrContext if needed and set/reset common parameters. * * This function does not require s to be allocated with swr_alloc(). On the * other hand, swr_alloc() can use swr_alloc_set_opts() to set the parameters * on the allocated context. * * @param s existing Swr context if available, or NULL if not * @param out_ch_layout output channel layout (AV_CH_LAYOUT_*) * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_*). * @param out_sample_rate output sample rate (frequency in Hz) * @param in_ch_layout input channel layout (AV_CH_LAYOUT_*) * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_*). * @param in_sample_rate input sample rate (frequency in Hz) * @param log_offset logging level offset * @param log_ctx parent logging context, can be NULL * * @see swr_init(), swr_free() * @return NULL on error, allocated context otherwise */ struct SwrContext *swr_alloc_set_opts(struct SwrContext *s, int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate, int64_t in_ch_layout, enum AVSampleFormat in_sample_fmt, int in_sample_rate, int log_offset, void *log_ctx); /** * @} * * @name SwrContext destructor functions * @{ */ /** * Free the given SwrContext and set the pointer to NULL. * * @param[in] s a pointer to a pointer to Swr context */ void swr_free(struct SwrContext **s); /** * Closes the context so that swr_is_initialized() returns 0. * * The context can be brought back to life by running swr_init(), * swr_init() can also be used without swr_close(). * This function is mainly provided for simplifying the usecase * where one tries to support libavresample and libswresample. * * @param[in,out] s Swr context to be closed */ void swr_close(struct SwrContext *s); /** * @} * * @name Core conversion functions * @{ */ /** Convert audio. * * in and in_count can be set to 0 to flush the last few samples out at the * end. * * If more input is provided than output space, then the input will be buffered. * You can avoid this buffering by using swr_get_out_samples() to retrieve an * upper bound on the required number of output samples for the given number of * input samples. Conversion will run directly without copying whenever possible. * * @param s allocated Swr context, with parameters set * @param out output buffers, only the first one need be set in case of packed audio * @param out_count amount of space available for output in samples per channel * @param in input buffers, only the first one need to be set in case of packed audio * @param in_count number of input samples available in one channel * * @return number of samples output per channel, negative value on error */ int swr_convert(struct SwrContext *s, uint8_t **out, int out_count, const uint8_t **in , int in_count); /** * Convert the next timestamp from input to output * timestamps are in 1/(in_sample_rate * out_sample_rate) units. * * @note There are 2 slightly differently behaving modes. * @li When automatic timestamp compensation is not used, (min_compensation >= FLT_MAX) * in this case timestamps will be passed through with delays compensated * @li When automatic timestamp compensation is used, (min_compensation < FLT_MAX) * in this case the output timestamps will match output sample numbers. * See ffmpeg-resampler(1) for the two modes of compensation. * * @param s[in] initialized Swr context * @param pts[in] timestamp for the next input sample, INT64_MIN if unknown * @see swr_set_compensation(), swr_drop_output(), and swr_inject_silence() are * function used internally for timestamp compensation. * @return the output timestamp for the next output sample */ int64_t swr_next_pts(struct SwrContext *s, int64_t pts); /** * @} * * @name Low-level option setting functions * These functons provide a means to set low-level options that is not possible * with the AVOption API. * @{ */ /** * Activate resampling compensation ("soft" compensation). This function is * internally called when needed in swr_next_pts(). * * @param[in,out] s allocated Swr context. If it is not initialized, * or SWR_FLAG_RESAMPLE is not set, swr_init() is * called with the flag set. * @param[in] sample_delta delta in PTS per sample * @param[in] compensation_distance number of samples to compensate for * @return >= 0 on success, AVERROR error codes if: * @li @c s is NULL, * @li @c compensation_distance is less than 0, * @li @c compensation_distance is 0 but sample_delta is not, * @li compensation unsupported by resampler, or * @li swr_init() fails when called. */ int swr_set_compensation(struct SwrContext *s, int sample_delta, int compensation_distance); /** * Set a customized input channel mapping. * * @param[in,out] s allocated Swr context, not yet initialized * @param[in] channel_map customized input channel mapping (array of channel * indexes, -1 for a muted channel) * @return >= 0 on success, or AVERROR error code in case of failure. */ int swr_set_channel_mapping(struct SwrContext *s, const int *channel_map); /** * Generate a channel mixing matrix. * * This function is the one used internally by libswresample for building the * default mixing matrix. It is made public just as a utility function for * building custom matrices. * * @param in_layout input channel layout * @param out_layout output channel layout * @param center_mix_level mix level for the center channel * @param surround_mix_level mix level for the surround channel(s) * @param lfe_mix_level mix level for the low-frequency effects channel * @param rematrix_maxval if 1.0, coefficients will be normalized to prevent * overflow. if INT_MAX, coefficients will not be * normalized. * @param[out] matrix mixing coefficients; matrix[i + stride * o] is * the weight of input channel i in output channel o. * @param stride distance between adjacent input channels in the * matrix array * @param matrix_encoding matrixed stereo downmix mode (e.g. dplii) * @param log_ctx parent logging context, can be NULL * @return 0 on success, negative AVERROR code on failure */ int swr_build_matrix(uint64_t in_layout, uint64_t out_layout, double center_mix_level, double surround_mix_level, double lfe_mix_level, double rematrix_maxval, double rematrix_volume, double *matrix, int stride, enum AVMatrixEncoding matrix_encoding, void *log_ctx); /** * Set a customized remix matrix. * * @param s allocated Swr context, not yet initialized * @param matrix remix coefficients; matrix[i + stride * o] is * the weight of input channel i in output channel o * @param stride offset between lines of the matrix * @return >= 0 on success, or AVERROR error code in case of failure. */ int swr_set_matrix(struct SwrContext *s, const double *matrix, int stride); /** * @} * * @name Sample handling functions * @{ */ /** * Drops the specified number of output samples. * * This function, along with swr_inject_silence(), is called by swr_next_pts() * if needed for "hard" compensation. * * @param s allocated Swr context * @param count number of samples to be dropped * * @return >= 0 on success, or a negative AVERROR code on failure */ int swr_drop_output(struct SwrContext *s, int count); /** * Injects the specified number of silence samples. * * This function, along with swr_drop_output(), is called by swr_next_pts() * if needed for "hard" compensation. * * @param s allocated Swr context * @param count number of samples to be dropped * * @return >= 0 on success, or a negative AVERROR code on failure */ int swr_inject_silence(struct SwrContext *s, int count); /** * Gets the delay the next input sample will experience relative to the next output sample. * * Swresample can buffer data if more input has been provided than available * output space, also converting between sample rates needs a delay. * This function returns the sum of all such delays. * The exact delay is not necessarily an integer value in either input or * output sample rate. Especially when downsampling by a large value, the * output sample rate may be a poor choice to represent the delay, similarly * for upsampling and the input sample rate. * * @param s swr context * @param base timebase in which the returned delay will be: * @li if it's set to 1 the returned delay is in seconds * @li if it's set to 1000 the returned delay is in milliseconds * @li if it's set to the input sample rate then the returned * delay is in input samples * @li if it's set to the output sample rate then the returned * delay is in output samples * @li if it's the least common multiple of in_sample_rate and * out_sample_rate then an exact rounding-free delay will be * returned * @returns the delay in 1 / @c base units. */ int64_t swr_get_delay(struct SwrContext *s, int64_t base); /** * Find an upper bound on the number of samples that the next swr_convert * call will output, if called with in_samples of input samples. This * depends on the internal state, and anything changing the internal state * (like further swr_convert() calls) will may change the number of samples * swr_get_out_samples() returns for the same number of input samples. * * @param in_samples number of input samples. * @note any call to swr_inject_silence(), swr_convert(), swr_next_pts() * or swr_set_compensation() invalidates this limit * @note it is recommended to pass the correct available buffer size * to all functions like swr_convert() even if swr_get_out_samples() * indicates that less would be used. * @returns an upper bound on the number of samples that the next swr_convert * will output or a negative value to indicate an error */ int swr_get_out_samples(struct SwrContext *s, int in_samples); /** * @} * * @name Configuration accessors * @{ */ /** * Return the @ref LIBSWRESAMPLE_VERSION_INT constant. * * This is useful to check if the build-time libswresample has the same version * as the run-time one. * * @returns the unsigned int-typed version */ unsigned swresample_version(void); /** * Return the swr build-time configuration. * * @returns the build-time @c ./configure flags */ const char *swresample_configuration(void); /** * Return the swr license. * * @returns the license of libswresample, determined at build-time */ const char *swresample_license(void); /** * @} * * @name AVFrame based API * @{ */ /** * Convert the samples in the input AVFrame and write them to the output AVFrame. * * Input and output AVFrames must have channel_layout, sample_rate and format set. * * If the output AVFrame does not have the data pointers allocated the nb_samples * field will be set using av_frame_get_buffer() * is called to allocate the frame. * * The output AVFrame can be NULL or have fewer allocated samples than required. * In this case, any remaining samples not written to the output will be added * to an internal FIFO buffer, to be returned at the next call to this function * or to swr_convert(). * * If converting sample rate, there may be data remaining in the internal * resampling delay buffer. swr_get_delay() tells the number of * remaining samples. To get this data as output, call this function or * swr_convert() with NULL input. * * If the SwrContext configuration does not match the output and * input AVFrame settings the conversion does not take place and depending on * which AVFrame is not matching AVERROR_OUTPUT_CHANGED, AVERROR_INPUT_CHANGED * or the result of a bitwise-OR of them is returned. * * @see swr_delay() * @see swr_convert() * @see swr_get_delay() * * @param swr audio resample context * @param output output AVFrame * @param input input AVFrame * @return 0 on success, AVERROR on failure or nonmatching * configuration. */ int swr_convert_frame(SwrContext *swr, AVFrame *output, const AVFrame *input); /** * Configure or reconfigure the SwrContext using the information * provided by the AVFrames. * * The original resampling context is reset even on failure. * The function calls swr_close() internally if the context is open. * * @see swr_close(); * * @param swr audio resample context * @param output output AVFrame * @param input input AVFrame * @return 0 on success, AVERROR on failure. */ int swr_config_frame(SwrContext *swr, const AVFrame *out, const AVFrame *in); /** * @} * @} */ #endif /* SWRESAMPLE_SWRESAMPLE_H */ ================================================ FILE: 3rParty/FFmpeg/include/libswresample/version.h ================================================ /* * Version macros. * * This file is part of libswresample * * libswresample is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * libswresample is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with libswresample; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef SWRESAMPLE_VERSION_H #define SWRESAMPLE_VERSION_H /** * @file * Libswresample version macros */ #include "libavutil/avutil.h" #define LIBSWRESAMPLE_VERSION_MAJOR 2 #define LIBSWRESAMPLE_VERSION_MINOR 3 #define LIBSWRESAMPLE_VERSION_MICRO 100 #define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \ LIBSWRESAMPLE_VERSION_MINOR, \ LIBSWRESAMPLE_VERSION_MICRO) #define LIBSWRESAMPLE_VERSION AV_VERSION(LIBSWRESAMPLE_VERSION_MAJOR, \ LIBSWRESAMPLE_VERSION_MINOR, \ LIBSWRESAMPLE_VERSION_MICRO) #define LIBSWRESAMPLE_BUILD LIBSWRESAMPLE_VERSION_INT #define LIBSWRESAMPLE_IDENT "SwR" AV_STRINGIFY(LIBSWRESAMPLE_VERSION) #endif /* SWRESAMPLE_VERSION_H */ ================================================ FILE: 3rParty/FFmpeg/include/libswscale/swscale.h ================================================ /* * Copyright (C) 2001-2011 Michael Niedermayer * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef SWSCALE_SWSCALE_H #define SWSCALE_SWSCALE_H /** * @file * @ingroup libsws * external API header */ #include #include "libavutil/avutil.h" #include "libavutil/log.h" #include "libavutil/pixfmt.h" #include "version.h" /** * @defgroup libsws libswscale * Color conversion and scaling library. * * @{ * * Return the LIBSWSCALE_VERSION_INT constant. */ unsigned swscale_version(void); /** * Return the libswscale build-time configuration. */ const char *swscale_configuration(void); /** * Return the libswscale license. */ const char *swscale_license(void); /* values for the flags, the stuff on the command line is different */ #define SWS_FAST_BILINEAR 1 #define SWS_BILINEAR 2 #define SWS_BICUBIC 4 #define SWS_X 8 #define SWS_POINT 0x10 #define SWS_AREA 0x20 #define SWS_BICUBLIN 0x40 #define SWS_GAUSS 0x80 #define SWS_SINC 0x100 #define SWS_LANCZOS 0x200 #define SWS_SPLINE 0x400 #define SWS_SRC_V_CHR_DROP_MASK 0x30000 #define SWS_SRC_V_CHR_DROP_SHIFT 16 #define SWS_PARAM_DEFAULT 123456 #define SWS_PRINT_INFO 0x1000 //the following 3 flags are not completely implemented //internal chrominance subsampling info #define SWS_FULL_CHR_H_INT 0x2000 //input subsampling info #define SWS_FULL_CHR_H_INP 0x4000 #define SWS_DIRECT_BGR 0x8000 #define SWS_ACCURATE_RND 0x40000 #define SWS_BITEXACT 0x80000 #define SWS_ERROR_DIFFUSION 0x800000 #define SWS_MAX_REDUCE_CUTOFF 0.002 #define SWS_CS_ITU709 1 #define SWS_CS_FCC 4 #define SWS_CS_ITU601 5 #define SWS_CS_ITU624 5 #define SWS_CS_SMPTE170M 5 #define SWS_CS_SMPTE240M 7 #define SWS_CS_DEFAULT 5 #define SWS_CS_BT2020 9 /** * Return a pointer to yuv<->rgb coefficients for the given colorspace * suitable for sws_setColorspaceDetails(). * * @param colorspace One of the SWS_CS_* macros. If invalid, * SWS_CS_DEFAULT is used. */ const int *sws_getCoefficients(int colorspace); // when used for filters they must have an odd number of elements // coeffs cannot be shared between vectors typedef struct SwsVector { double *coeff; ///< pointer to the list of coefficients int length; ///< number of coefficients in the vector } SwsVector; // vectors can be shared typedef struct SwsFilter { SwsVector *lumH; SwsVector *lumV; SwsVector *chrH; SwsVector *chrV; } SwsFilter; struct SwsContext; /** * Return a positive value if pix_fmt is a supported input format, 0 * otherwise. */ int sws_isSupportedInput(enum AVPixelFormat pix_fmt); /** * Return a positive value if pix_fmt is a supported output format, 0 * otherwise. */ int sws_isSupportedOutput(enum AVPixelFormat pix_fmt); /** * @param[in] pix_fmt the pixel format * @return a positive value if an endianness conversion for pix_fmt is * supported, 0 otherwise. */ int sws_isSupportedEndiannessConversion(enum AVPixelFormat pix_fmt); /** * Allocate an empty SwsContext. This must be filled and passed to * sws_init_context(). For filling see AVOptions, options.c and * sws_setColorspaceDetails(). */ struct SwsContext *sws_alloc_context(void); /** * Initialize the swscaler context sws_context. * * @return zero or positive value on success, a negative value on * error */ av_warn_unused_result int sws_init_context(struct SwsContext *sws_context, SwsFilter *srcFilter, SwsFilter *dstFilter); /** * Free the swscaler context swsContext. * If swsContext is NULL, then does nothing. */ void sws_freeContext(struct SwsContext *swsContext); /** * Allocate and return an SwsContext. You need it to perform * scaling/conversion operations using sws_scale(). * * @param srcW the width of the source image * @param srcH the height of the source image * @param srcFormat the source image format * @param dstW the width of the destination image * @param dstH the height of the destination image * @param dstFormat the destination image format * @param flags specify which algorithm and options to use for rescaling * @param param extra parameters to tune the used scaler * For SWS_BICUBIC param[0] and [1] tune the shape of the basis * function, param[0] tunes f(1) and param[1] f´(1) * For SWS_GAUSS param[0] tunes the exponent and thus cutoff * frequency * For SWS_LANCZOS param[0] tunes the width of the window function * @return a pointer to an allocated context, or NULL in case of error * @note this function is to be removed after a saner alternative is * written */ struct SwsContext *sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat, int dstW, int dstH, enum AVPixelFormat dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param); /** * Scale the image slice in srcSlice and put the resulting scaled * slice in the image in dst. A slice is a sequence of consecutive * rows in an image. * * Slices have to be provided in sequential order, either in * top-bottom or bottom-top order. If slices are provided in * non-sequential order the behavior of the function is undefined. * * @param c the scaling context previously created with * sws_getContext() * @param srcSlice the array containing the pointers to the planes of * the source slice * @param srcStride the array containing the strides for each plane of * the source image * @param srcSliceY the position in the source image of the slice to * process, that is the number (counted starting from * zero) in the image of the first row of the slice * @param srcSliceH the height of the source slice, that is the number * of rows in the slice * @param dst the array containing the pointers to the planes of * the destination image * @param dstStride the array containing the strides for each plane of * the destination image * @return the height of the output slice */ int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]); /** * @param dstRange flag indicating the while-black range of the output (1=jpeg / 0=mpeg) * @param srcRange flag indicating the while-black range of the input (1=jpeg / 0=mpeg) * @param table the yuv2rgb coefficients describing the output yuv space, normally ff_yuv2rgb_coeffs[x] * @param inv_table the yuv2rgb coefficients describing the input yuv space, normally ff_yuv2rgb_coeffs[x] * @param brightness 16.16 fixed point brightness correction * @param contrast 16.16 fixed point contrast correction * @param saturation 16.16 fixed point saturation correction * @return -1 if not supported */ int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4], int srcRange, const int table[4], int dstRange, int brightness, int contrast, int saturation); /** * @return -1 if not supported */ int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table, int *srcRange, int **table, int *dstRange, int *brightness, int *contrast, int *saturation); /** * Allocate and return an uninitialized vector with length coefficients. */ SwsVector *sws_allocVec(int length); /** * Return a normalized Gaussian curve used to filter stuff * quality = 3 is high quality, lower is lower quality. */ SwsVector *sws_getGaussianVec(double variance, double quality); /** * Scale all the coefficients of a by the scalar value. */ void sws_scaleVec(SwsVector *a, double scalar); /** * Scale all the coefficients of a so that their sum equals height. */ void sws_normalizeVec(SwsVector *a, double height); #if FF_API_SWS_VECTOR attribute_deprecated SwsVector *sws_getConstVec(double c, int length); attribute_deprecated SwsVector *sws_getIdentityVec(void); attribute_deprecated void sws_convVec(SwsVector *a, SwsVector *b); attribute_deprecated void sws_addVec(SwsVector *a, SwsVector *b); attribute_deprecated void sws_subVec(SwsVector *a, SwsVector *b); attribute_deprecated void sws_shiftVec(SwsVector *a, int shift); attribute_deprecated SwsVector *sws_cloneVec(SwsVector *a); attribute_deprecated void sws_printVec2(SwsVector *a, AVClass *log_ctx, int log_level); #endif void sws_freeVec(SwsVector *a); SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur, float lumaSharpen, float chromaSharpen, float chromaHShift, float chromaVShift, int verbose); void sws_freeFilter(SwsFilter *filter); /** * Check if context can be reused, otherwise reallocate a new one. * * If context is NULL, just calls sws_getContext() to get a new * context. Otherwise, checks if the parameters are the ones already * saved in context. If that is the case, returns the current * context. Otherwise, frees context and gets a new context with * the new parameters. * * Be warned that srcFilter and dstFilter are not checked, they * are assumed to remain the same. */ struct SwsContext *sws_getCachedContext(struct SwsContext *context, int srcW, int srcH, enum AVPixelFormat srcFormat, int dstW, int dstH, enum AVPixelFormat dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param); /** * Convert an 8-bit paletted frame into a frame with a color depth of 32 bits. * * The output frame will have the same packed format as the palette. * * @param src source frame buffer * @param dst destination frame buffer * @param num_pixels number of pixels to convert * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src */ void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette); /** * Convert an 8-bit paletted frame into a frame with a color depth of 24 bits. * * With the palette format "ABCD", the destination frame ends up with the format "ABC". * * @param src source frame buffer * @param dst destination frame buffer * @param num_pixels number of pixels to convert * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src */ void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette); /** * Get the AVClass for swsContext. It can be used in combination with * AV_OPT_SEARCH_FAKE_OBJ for examining options. * * @see av_opt_find(). */ const AVClass *sws_get_class(void); /** * @} */ #endif /* SWSCALE_SWSCALE_H */ ================================================ FILE: 3rParty/FFmpeg/include/libswscale/version.h ================================================ /* * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef SWSCALE_VERSION_H #define SWSCALE_VERSION_H /** * @file * swscale version macros */ #include "libavutil/version.h" #define LIBSWSCALE_VERSION_MAJOR 4 #define LIBSWSCALE_VERSION_MINOR 2 #define LIBSWSCALE_VERSION_MICRO 100 #define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \ LIBSWSCALE_VERSION_MINOR, \ LIBSWSCALE_VERSION_MICRO) #define LIBSWSCALE_VERSION AV_VERSION(LIBSWSCALE_VERSION_MAJOR, \ LIBSWSCALE_VERSION_MINOR, \ LIBSWSCALE_VERSION_MICRO) #define LIBSWSCALE_BUILD LIBSWSCALE_VERSION_INT #define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION) /** * FF_API_* defines may be placed below to indicate public API that will be * dropped at a future version bump. The defines themselves are not part of * the public API and may change, break or disappear at any time. */ #ifndef FF_API_SWS_VECTOR #define FF_API_SWS_VECTOR (LIBSWSCALE_VERSION_MAJOR < 6) #endif #endif /* SWSCALE_VERSION_H */ ================================================ FILE: 3rParty/FFmpeg/include/openssl/aes.h ================================================ /* crypto/aes/aes.h */ /* ==================================================================== * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * */ #ifndef HEADER_AES_H # define HEADER_AES_H # include # ifdef OPENSSL_NO_AES # error AES is disabled. # endif # include # define AES_ENCRYPT 1 # define AES_DECRYPT 0 /* * Because array size can't be a const in C, the following two are macros. * Both sizes are in bytes. */ # define AES_MAXNR 14 # define AES_BLOCK_SIZE 16 #ifdef __cplusplus extern "C" { #endif /* This should be a hidden type, but EVP requires that the size be known */ struct aes_key_st { # ifdef AES_LONG unsigned long rd_key[4 * (AES_MAXNR + 1)]; # else unsigned int rd_key[4 * (AES_MAXNR + 1)]; # endif int rounds; }; typedef struct aes_key_st AES_KEY; const char *AES_options(void); int AES_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); int AES_set_decrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); int private_AES_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); int private_AES_set_decrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); void AES_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key); void AES_decrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key); void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key, const int enc); void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, const int enc); void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num, const int enc); void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num, const int enc); void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num, const int enc); void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, int *num); void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char ivec[AES_BLOCK_SIZE], unsigned char ecount_buf[AES_BLOCK_SIZE], unsigned int *num); /* NB: the IV is _two_ blocks long */ void AES_ige_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, unsigned char *ivec, const int enc); /* NB: the IV is _four_ blocks long */ void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, size_t length, const AES_KEY *key, const AES_KEY *key2, const unsigned char *ivec, const int enc); int AES_wrap_key(AES_KEY *key, const unsigned char *iv, unsigned char *out, const unsigned char *in, unsigned int inlen); int AES_unwrap_key(AES_KEY *key, const unsigned char *iv, unsigned char *out, const unsigned char *in, unsigned int inlen); #ifdef __cplusplus } #endif #endif /* !HEADER_AES_H */ ================================================ FILE: 3rParty/FFmpeg/include/openssl/asn1.h ================================================ /* crypto/asn1/asn1.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_ASN1_H # define HEADER_ASN1_H # include # include # ifndef OPENSSL_NO_BIO # include # endif # include # include # include # include # ifndef OPENSSL_NO_DEPRECATED # include # endif # ifdef OPENSSL_BUILD_SHLIBCRYPTO # undef OPENSSL_EXTERN # define OPENSSL_EXTERN OPENSSL_EXPORT # endif #ifdef __cplusplus extern "C" { #endif # define V_ASN1_UNIVERSAL 0x00 # define V_ASN1_APPLICATION 0x40 # define V_ASN1_CONTEXT_SPECIFIC 0x80 # define V_ASN1_PRIVATE 0xc0 # define V_ASN1_CONSTRUCTED 0x20 # define V_ASN1_PRIMITIVE_TAG 0x1f # define V_ASN1_PRIMATIVE_TAG 0x1f # define V_ASN1_APP_CHOOSE -2/* let the recipient choose */ # define V_ASN1_OTHER -3/* used in ASN1_TYPE */ # define V_ASN1_ANY -4/* used in ASN1 template code */ # define V_ASN1_NEG 0x100/* negative flag */ # define V_ASN1_UNDEF -1 # define V_ASN1_EOC 0 # define V_ASN1_BOOLEAN 1 /**/ # define V_ASN1_INTEGER 2 # define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) # define V_ASN1_BIT_STRING 3 # define V_ASN1_OCTET_STRING 4 # define V_ASN1_NULL 5 # define V_ASN1_OBJECT 6 # define V_ASN1_OBJECT_DESCRIPTOR 7 # define V_ASN1_EXTERNAL 8 # define V_ASN1_REAL 9 # define V_ASN1_ENUMERATED 10 # define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) # define V_ASN1_UTF8STRING 12 # define V_ASN1_SEQUENCE 16 # define V_ASN1_SET 17 # define V_ASN1_NUMERICSTRING 18 /**/ # define V_ASN1_PRINTABLESTRING 19 # define V_ASN1_T61STRING 20 # define V_ASN1_TELETEXSTRING 20/* alias */ # define V_ASN1_VIDEOTEXSTRING 21 /**/ # define V_ASN1_IA5STRING 22 # define V_ASN1_UTCTIME 23 # define V_ASN1_GENERALIZEDTIME 24 /**/ # define V_ASN1_GRAPHICSTRING 25 /**/ # define V_ASN1_ISO64STRING 26 /**/ # define V_ASN1_VISIBLESTRING 26/* alias */ # define V_ASN1_GENERALSTRING 27 /**/ # define V_ASN1_UNIVERSALSTRING 28 /**/ # define V_ASN1_BMPSTRING 30 /* For use with d2i_ASN1_type_bytes() */ # define B_ASN1_NUMERICSTRING 0x0001 # define B_ASN1_PRINTABLESTRING 0x0002 # define B_ASN1_T61STRING 0x0004 # define B_ASN1_TELETEXSTRING 0x0004 # define B_ASN1_VIDEOTEXSTRING 0x0008 # define B_ASN1_IA5STRING 0x0010 # define B_ASN1_GRAPHICSTRING 0x0020 # define B_ASN1_ISO64STRING 0x0040 # define B_ASN1_VISIBLESTRING 0x0040 # define B_ASN1_GENERALSTRING 0x0080 # define B_ASN1_UNIVERSALSTRING 0x0100 # define B_ASN1_OCTET_STRING 0x0200 # define B_ASN1_BIT_STRING 0x0400 # define B_ASN1_BMPSTRING 0x0800 # define B_ASN1_UNKNOWN 0x1000 # define B_ASN1_UTF8STRING 0x2000 # define B_ASN1_UTCTIME 0x4000 # define B_ASN1_GENERALIZEDTIME 0x8000 # define B_ASN1_SEQUENCE 0x10000 /* For use with ASN1_mbstring_copy() */ # define MBSTRING_FLAG 0x1000 # define MBSTRING_UTF8 (MBSTRING_FLAG) # define MBSTRING_ASC (MBSTRING_FLAG|1) # define MBSTRING_BMP (MBSTRING_FLAG|2) # define MBSTRING_UNIV (MBSTRING_FLAG|4) # define SMIME_OLDMIME 0x400 # define SMIME_CRLFEOL 0x800 # define SMIME_STREAM 0x1000 struct X509_algor_st; DECLARE_STACK_OF(X509_ALGOR) # define DECLARE_ASN1_SET_OF(type)/* filled in by mkstack.pl */ # define IMPLEMENT_ASN1_SET_OF(type)/* nothing, no longer needed */ /* * We MUST make sure that, except for constness, asn1_ctx_st and * asn1_const_ctx are exactly the same. Fortunately, as soon as the old ASN1 * parsing macros are gone, we can throw this away as well... */ typedef struct asn1_ctx_st { unsigned char *p; /* work char pointer */ int eos; /* end of sequence read for indefinite * encoding */ int error; /* error code to use when returning an error */ int inf; /* constructed if 0x20, indefinite is 0x21 */ int tag; /* tag from last 'get object' */ int xclass; /* class from last 'get object' */ long slen; /* length of last 'get object' */ unsigned char *max; /* largest value of p allowed */ unsigned char *q; /* temporary variable */ unsigned char **pp; /* variable */ int line; /* used in error processing */ } ASN1_CTX; typedef struct asn1_const_ctx_st { const unsigned char *p; /* work char pointer */ int eos; /* end of sequence read for indefinite * encoding */ int error; /* error code to use when returning an error */ int inf; /* constructed if 0x20, indefinite is 0x21 */ int tag; /* tag from last 'get object' */ int xclass; /* class from last 'get object' */ long slen; /* length of last 'get object' */ const unsigned char *max; /* largest value of p allowed */ const unsigned char *q; /* temporary variable */ const unsigned char **pp; /* variable */ int line; /* used in error processing */ } ASN1_const_CTX; /* * These are used internally in the ASN1_OBJECT to keep track of whether the * names and data need to be free()ed */ # define ASN1_OBJECT_FLAG_DYNAMIC 0x01/* internal use */ # define ASN1_OBJECT_FLAG_CRITICAL 0x02/* critical x509v3 object id */ # define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04/* internal use */ # define ASN1_OBJECT_FLAG_DYNAMIC_DATA 0x08/* internal use */ struct asn1_object_st { const char *sn, *ln; int nid; int length; const unsigned char *data; /* data remains const after init */ int flags; /* Should we free this one */ }; # define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ /* * This indicates that the ASN1_STRING is not a real value but just a place * holder for the location where indefinite length constructed data should be * inserted in the memory buffer */ # define ASN1_STRING_FLAG_NDEF 0x010 /* * This flag is used by the CMS code to indicate that a string is not * complete and is a place holder for content when it had all been accessed. * The flag will be reset when content has been written to it. */ # define ASN1_STRING_FLAG_CONT 0x020 /* * This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING * type. */ # define ASN1_STRING_FLAG_MSTRING 0x040 /* This is the base type that holds just about everything :-) */ struct asn1_string_st { int length; int type; unsigned char *data; /* * The value of the following field depends on the type being held. It * is mostly being used for BIT_STRING so if the input data has a * non-zero 'unused bits' value, it will be handled correctly */ long flags; }; /* * ASN1_ENCODING structure: this is used to save the received encoding of an * ASN1 type. This is useful to get round problems with invalid encodings * which can break signatures. */ typedef struct ASN1_ENCODING_st { unsigned char *enc; /* DER encoding */ long len; /* Length of encoding */ int modified; /* set to 1 if 'enc' is invalid */ } ASN1_ENCODING; /* Used with ASN1 LONG type: if a long is set to this it is omitted */ # define ASN1_LONG_UNDEF 0x7fffffffL # define STABLE_FLAGS_MALLOC 0x01 # define STABLE_NO_MASK 0x02 # define DIRSTRING_TYPE \ (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) # define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) typedef struct asn1_string_table_st { int nid; long minsize; long maxsize; unsigned long mask; unsigned long flags; } ASN1_STRING_TABLE; DECLARE_STACK_OF(ASN1_STRING_TABLE) /* size limits: this stuff is taken straight from RFC2459 */ # define ub_name 32768 # define ub_common_name 64 # define ub_locality_name 128 # define ub_state_name 128 # define ub_organization_name 64 # define ub_organization_unit_name 64 # define ub_title 64 # define ub_email_address 128 /* * Declarations for template structures: for full definitions see asn1t.h */ typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; typedef struct ASN1_TLC_st ASN1_TLC; /* This is just an opaque pointer */ typedef struct ASN1_VALUE_st ASN1_VALUE; /* Declare ASN1 functions: the implement macro in in asn1t.h */ # define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) # define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type) # define DECLARE_ASN1_FUNCTIONS_name(type, name) \ DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) # define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) # define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ type *d2i_##name(type **a, const unsigned char **in, long len); \ int i2d_##name(type *a, unsigned char **out); \ DECLARE_ASN1_ITEM(itname) # define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ type *d2i_##name(type **a, const unsigned char **in, long len); \ int i2d_##name(const type *a, unsigned char **out); \ DECLARE_ASN1_ITEM(name) # define DECLARE_ASN1_NDEF_FUNCTION(name) \ int i2d_##name##_NDEF(name *a, unsigned char **out); # define DECLARE_ASN1_FUNCTIONS_const(name) \ DECLARE_ASN1_ALLOC_FUNCTIONS(name) \ DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name) # define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ type *name##_new(void); \ void name##_free(type *a); # define DECLARE_ASN1_PRINT_FUNCTION(stname) \ DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) # define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ int fname##_print_ctx(BIO *out, stname *x, int indent, \ const ASN1_PCTX *pctx); # define D2I_OF(type) type *(*)(type **,const unsigned char **,long) # define I2D_OF(type) int (*)(type *,unsigned char **) # define I2D_OF_const(type) int (*)(const type *,unsigned char **) # define CHECKED_D2I_OF(type, d2i) \ ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) # define CHECKED_I2D_OF(type, i2d) \ ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0))) # define CHECKED_NEW_OF(type, xnew) \ ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0))) # define CHECKED_PTR_OF(type, p) \ ((void*) (1 ? p : (type*)0)) # define CHECKED_PPTR_OF(type, p) \ ((void**) (1 ? p : (type**)0)) # define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) # define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **) # define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) TYPEDEF_D2I2D_OF(void); /*- * The following macros and typedefs allow an ASN1_ITEM * to be embedded in a structure and referenced. Since * the ASN1_ITEM pointers need to be globally accessible * (possibly from shared libraries) they may exist in * different forms. On platforms that support it the * ASN1_ITEM structure itself will be globally exported. * Other platforms will export a function that returns * an ASN1_ITEM pointer. * * To handle both cases transparently the macros below * should be used instead of hard coding an ASN1_ITEM * pointer in a structure. * * The structure will look like this: * * typedef struct SOMETHING_st { * ... * ASN1_ITEM_EXP *iptr; * ... * } SOMETHING; * * It would be initialised as e.g.: * * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; * * and the actual pointer extracted with: * * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); * * Finally an ASN1_ITEM pointer can be extracted from an * appropriate reference with: ASN1_ITEM_rptr(X509). This * would be used when a function takes an ASN1_ITEM * argument. * */ # ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION /* ASN1_ITEM pointer exported type */ typedef const ASN1_ITEM ASN1_ITEM_EXP; /* Macro to obtain ASN1_ITEM pointer from exported type */ # define ASN1_ITEM_ptr(iptr) (iptr) /* Macro to include ASN1_ITEM pointer from base type */ # define ASN1_ITEM_ref(iptr) (&(iptr##_it)) # define ASN1_ITEM_rptr(ref) (&(ref##_it)) # define DECLARE_ASN1_ITEM(name) \ OPENSSL_EXTERN const ASN1_ITEM name##_it; # else /* * Platforms that can't easily handle shared global variables are declared as * functions returning ASN1_ITEM pointers. */ /* ASN1_ITEM pointer exported type */ typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); /* Macro to obtain ASN1_ITEM pointer from exported type */ # define ASN1_ITEM_ptr(iptr) (iptr()) /* Macro to include ASN1_ITEM pointer from base type */ # define ASN1_ITEM_ref(iptr) (iptr##_it) # define ASN1_ITEM_rptr(ref) (ref##_it()) # define DECLARE_ASN1_ITEM(name) \ const ASN1_ITEM * name##_it(void); # endif /* Parameters used by ASN1_STRING_print_ex() */ /* * These determine which characters to escape: RFC2253 special characters, * control characters and MSB set characters */ # define ASN1_STRFLGS_ESC_2253 1 # define ASN1_STRFLGS_ESC_CTRL 2 # define ASN1_STRFLGS_ESC_MSB 4 /* * This flag determines how we do escaping: normally RC2253 backslash only, * set this to use backslash and quote. */ # define ASN1_STRFLGS_ESC_QUOTE 8 /* These three flags are internal use only. */ /* Character is a valid PrintableString character */ # define CHARTYPE_PRINTABLESTRING 0x10 /* Character needs escaping if it is the first character */ # define CHARTYPE_FIRST_ESC_2253 0x20 /* Character needs escaping if it is the last character */ # define CHARTYPE_LAST_ESC_2253 0x40 /* * NB the internal flags are safely reused below by flags handled at the top * level. */ /* * If this is set we convert all character strings to UTF8 first */ # define ASN1_STRFLGS_UTF8_CONVERT 0x10 /* * If this is set we don't attempt to interpret content: just assume all * strings are 1 byte per character. This will produce some pretty odd * looking output! */ # define ASN1_STRFLGS_IGNORE_TYPE 0x20 /* If this is set we include the string type in the output */ # define ASN1_STRFLGS_SHOW_TYPE 0x40 /* * This determines which strings to display and which to 'dump' (hex dump of * content octets or DER encoding). We can only dump non character strings or * everything. If we don't dump 'unknown' they are interpreted as character * strings with 1 octet per character and are subject to the usual escaping * options. */ # define ASN1_STRFLGS_DUMP_ALL 0x80 # define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 /* * These determine what 'dumping' does, we can dump the content octets or the * DER encoding: both use the RFC2253 #XXXXX notation. */ # define ASN1_STRFLGS_DUMP_DER 0x200 /* * All the string flags consistent with RFC2253, escaping control characters * isn't essential in RFC2253 but it is advisable anyway. */ # define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ ASN1_STRFLGS_ESC_CTRL | \ ASN1_STRFLGS_ESC_MSB | \ ASN1_STRFLGS_UTF8_CONVERT | \ ASN1_STRFLGS_DUMP_UNKNOWN | \ ASN1_STRFLGS_DUMP_DER) DECLARE_STACK_OF(ASN1_INTEGER) DECLARE_ASN1_SET_OF(ASN1_INTEGER) DECLARE_STACK_OF(ASN1_GENERALSTRING) typedef struct asn1_type_st { int type; union { char *ptr; ASN1_BOOLEAN boolean; ASN1_STRING *asn1_string; ASN1_OBJECT *object; ASN1_INTEGER *integer; ASN1_ENUMERATED *enumerated; ASN1_BIT_STRING *bit_string; ASN1_OCTET_STRING *octet_string; ASN1_PRINTABLESTRING *printablestring; ASN1_T61STRING *t61string; ASN1_IA5STRING *ia5string; ASN1_GENERALSTRING *generalstring; ASN1_BMPSTRING *bmpstring; ASN1_UNIVERSALSTRING *universalstring; ASN1_UTCTIME *utctime; ASN1_GENERALIZEDTIME *generalizedtime; ASN1_VISIBLESTRING *visiblestring; ASN1_UTF8STRING *utf8string; /* * set and sequence are left complete and still contain the set or * sequence bytes */ ASN1_STRING *set; ASN1_STRING *sequence; ASN1_VALUE *asn1_value; } value; } ASN1_TYPE; DECLARE_STACK_OF(ASN1_TYPE) DECLARE_ASN1_SET_OF(ASN1_TYPE) typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) typedef struct NETSCAPE_X509_st { ASN1_OCTET_STRING *header; X509 *cert; } NETSCAPE_X509; /* This is used to contain a list of bit names */ typedef struct BIT_STRING_BITNAME_st { int bitnum; const char *lname; const char *sname; } BIT_STRING_BITNAME; # define M_ASN1_STRING_length(x) ((x)->length) # define M_ASN1_STRING_length_set(x, n) ((x)->length = (n)) # define M_ASN1_STRING_type(x) ((x)->type) # define M_ASN1_STRING_data(x) ((x)->data) /* Macros for string operations */ # define M_ASN1_BIT_STRING_new() (ASN1_BIT_STRING *)\ ASN1_STRING_type_new(V_ASN1_BIT_STRING) # define M_ASN1_BIT_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_ASN1_BIT_STRING_dup(a) (ASN1_BIT_STRING *)\ ASN1_STRING_dup((const ASN1_STRING *)a) # define M_ASN1_BIT_STRING_cmp(a,b) ASN1_STRING_cmp(\ (const ASN1_STRING *)a,(const ASN1_STRING *)b) # define M_ASN1_BIT_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) # define M_ASN1_INTEGER_new() (ASN1_INTEGER *)\ ASN1_STRING_type_new(V_ASN1_INTEGER) # define M_ASN1_INTEGER_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_ASN1_INTEGER_dup(a) (ASN1_INTEGER *)\ ASN1_STRING_dup((const ASN1_STRING *)a) # define M_ASN1_INTEGER_cmp(a,b) ASN1_STRING_cmp(\ (const ASN1_STRING *)a,(const ASN1_STRING *)b) # define M_ASN1_ENUMERATED_new() (ASN1_ENUMERATED *)\ ASN1_STRING_type_new(V_ASN1_ENUMERATED) # define M_ASN1_ENUMERATED_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_ASN1_ENUMERATED_dup(a) (ASN1_ENUMERATED *)\ ASN1_STRING_dup((const ASN1_STRING *)a) # define M_ASN1_ENUMERATED_cmp(a,b) ASN1_STRING_cmp(\ (const ASN1_STRING *)a,(const ASN1_STRING *)b) # define M_ASN1_OCTET_STRING_new() (ASN1_OCTET_STRING *)\ ASN1_STRING_type_new(V_ASN1_OCTET_STRING) # define M_ASN1_OCTET_STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_ASN1_OCTET_STRING_dup(a) (ASN1_OCTET_STRING *)\ ASN1_STRING_dup((const ASN1_STRING *)a) # define M_ASN1_OCTET_STRING_cmp(a,b) ASN1_STRING_cmp(\ (const ASN1_STRING *)a,(const ASN1_STRING *)b) # define M_ASN1_OCTET_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c) # define M_ASN1_OCTET_STRING_print(a,b) ASN1_STRING_print(a,(ASN1_STRING *)b) # define M_i2d_ASN1_OCTET_STRING(a,pp) \ i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_OCTET_STRING,\ V_ASN1_UNIVERSAL) # define B_ASN1_TIME \ B_ASN1_UTCTIME | \ B_ASN1_GENERALIZEDTIME # define B_ASN1_PRINTABLE \ B_ASN1_NUMERICSTRING| \ B_ASN1_PRINTABLESTRING| \ B_ASN1_T61STRING| \ B_ASN1_IA5STRING| \ B_ASN1_BIT_STRING| \ B_ASN1_UNIVERSALSTRING|\ B_ASN1_BMPSTRING|\ B_ASN1_UTF8STRING|\ B_ASN1_SEQUENCE|\ B_ASN1_UNKNOWN # define B_ASN1_DIRECTORYSTRING \ B_ASN1_PRINTABLESTRING| \ B_ASN1_TELETEXSTRING|\ B_ASN1_BMPSTRING|\ B_ASN1_UNIVERSALSTRING|\ B_ASN1_UTF8STRING # define B_ASN1_DISPLAYTEXT \ B_ASN1_IA5STRING| \ B_ASN1_VISIBLESTRING| \ B_ASN1_BMPSTRING|\ B_ASN1_UTF8STRING # define M_ASN1_PRINTABLE_new() ASN1_STRING_type_new(V_ASN1_T61STRING) # define M_ASN1_PRINTABLE_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_i2d_ASN1_PRINTABLE(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ pp,a->type,V_ASN1_UNIVERSAL) # define M_d2i_ASN1_PRINTABLE(a,pp,l) \ d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ B_ASN1_PRINTABLE) # define M_DIRECTORYSTRING_new() ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING) # define M_DIRECTORYSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_i2d_DIRECTORYSTRING(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ pp,a->type,V_ASN1_UNIVERSAL) # define M_d2i_DIRECTORYSTRING(a,pp,l) \ d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ B_ASN1_DIRECTORYSTRING) # define M_DISPLAYTEXT_new() ASN1_STRING_type_new(V_ASN1_VISIBLESTRING) # define M_DISPLAYTEXT_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_i2d_DISPLAYTEXT(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\ pp,a->type,V_ASN1_UNIVERSAL) # define M_d2i_DISPLAYTEXT(a,pp,l) \ d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \ B_ASN1_DISPLAYTEXT) # define M_ASN1_PRINTABLESTRING_new() (ASN1_PRINTABLESTRING *)\ ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING) # define M_ASN1_PRINTABLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_i2d_ASN1_PRINTABLESTRING(a,pp) \ i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_PRINTABLESTRING,\ V_ASN1_UNIVERSAL) # define M_d2i_ASN1_PRINTABLESTRING(a,pp,l) \ (ASN1_PRINTABLESTRING *)d2i_ASN1_type_bytes\ ((ASN1_STRING **)a,pp,l,B_ASN1_PRINTABLESTRING) # define M_ASN1_T61STRING_new() (ASN1_T61STRING *)\ ASN1_STRING_type_new(V_ASN1_T61STRING) # define M_ASN1_T61STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_i2d_ASN1_T61STRING(a,pp) \ i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_T61STRING,\ V_ASN1_UNIVERSAL) # define M_d2i_ASN1_T61STRING(a,pp,l) \ (ASN1_T61STRING *)d2i_ASN1_type_bytes\ ((ASN1_STRING **)a,pp,l,B_ASN1_T61STRING) # define M_ASN1_IA5STRING_new() (ASN1_IA5STRING *)\ ASN1_STRING_type_new(V_ASN1_IA5STRING) # define M_ASN1_IA5STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_ASN1_IA5STRING_dup(a) \ (ASN1_IA5STRING *)ASN1_STRING_dup((const ASN1_STRING *)a) # define M_i2d_ASN1_IA5STRING(a,pp) \ i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_IA5STRING,\ V_ASN1_UNIVERSAL) # define M_d2i_ASN1_IA5STRING(a,pp,l) \ (ASN1_IA5STRING *)d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l,\ B_ASN1_IA5STRING) # define M_ASN1_UTCTIME_new() (ASN1_UTCTIME *)\ ASN1_STRING_type_new(V_ASN1_UTCTIME) # define M_ASN1_UTCTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_ASN1_UTCTIME_dup(a) (ASN1_UTCTIME *)\ ASN1_STRING_dup((const ASN1_STRING *)a) # define M_ASN1_GENERALIZEDTIME_new() (ASN1_GENERALIZEDTIME *)\ ASN1_STRING_type_new(V_ASN1_GENERALIZEDTIME) # define M_ASN1_GENERALIZEDTIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_ASN1_GENERALIZEDTIME_dup(a) (ASN1_GENERALIZEDTIME *)ASN1_STRING_dup(\ (const ASN1_STRING *)a) # define M_ASN1_TIME_new() (ASN1_TIME *)\ ASN1_STRING_type_new(V_ASN1_UTCTIME) # define M_ASN1_TIME_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_ASN1_TIME_dup(a) (ASN1_TIME *)\ ASN1_STRING_dup((const ASN1_STRING *)a) # define M_ASN1_GENERALSTRING_new() (ASN1_GENERALSTRING *)\ ASN1_STRING_type_new(V_ASN1_GENERALSTRING) # define M_ASN1_GENERALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_i2d_ASN1_GENERALSTRING(a,pp) \ i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_GENERALSTRING,\ V_ASN1_UNIVERSAL) # define M_d2i_ASN1_GENERALSTRING(a,pp,l) \ (ASN1_GENERALSTRING *)d2i_ASN1_type_bytes\ ((ASN1_STRING **)a,pp,l,B_ASN1_GENERALSTRING) # define M_ASN1_UNIVERSALSTRING_new() (ASN1_UNIVERSALSTRING *)\ ASN1_STRING_type_new(V_ASN1_UNIVERSALSTRING) # define M_ASN1_UNIVERSALSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_i2d_ASN1_UNIVERSALSTRING(a,pp) \ i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UNIVERSALSTRING,\ V_ASN1_UNIVERSAL) # define M_d2i_ASN1_UNIVERSALSTRING(a,pp,l) \ (ASN1_UNIVERSALSTRING *)d2i_ASN1_type_bytes\ ((ASN1_STRING **)a,pp,l,B_ASN1_UNIVERSALSTRING) # define M_ASN1_BMPSTRING_new() (ASN1_BMPSTRING *)\ ASN1_STRING_type_new(V_ASN1_BMPSTRING) # define M_ASN1_BMPSTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_i2d_ASN1_BMPSTRING(a,pp) \ i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_BMPSTRING,\ V_ASN1_UNIVERSAL) # define M_d2i_ASN1_BMPSTRING(a,pp,l) \ (ASN1_BMPSTRING *)d2i_ASN1_type_bytes\ ((ASN1_STRING **)a,pp,l,B_ASN1_BMPSTRING) # define M_ASN1_VISIBLESTRING_new() (ASN1_VISIBLESTRING *)\ ASN1_STRING_type_new(V_ASN1_VISIBLESTRING) # define M_ASN1_VISIBLESTRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_i2d_ASN1_VISIBLESTRING(a,pp) \ i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_VISIBLESTRING,\ V_ASN1_UNIVERSAL) # define M_d2i_ASN1_VISIBLESTRING(a,pp,l) \ (ASN1_VISIBLESTRING *)d2i_ASN1_type_bytes\ ((ASN1_STRING **)a,pp,l,B_ASN1_VISIBLESTRING) # define M_ASN1_UTF8STRING_new() (ASN1_UTF8STRING *)\ ASN1_STRING_type_new(V_ASN1_UTF8STRING) # define M_ASN1_UTF8STRING_free(a) ASN1_STRING_free((ASN1_STRING *)a) # define M_i2d_ASN1_UTF8STRING(a,pp) \ i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UTF8STRING,\ V_ASN1_UNIVERSAL) # define M_d2i_ASN1_UTF8STRING(a,pp,l) \ (ASN1_UTF8STRING *)d2i_ASN1_type_bytes\ ((ASN1_STRING **)a,pp,l,B_ASN1_UTF8STRING) /* for the is_set parameter to i2d_ASN1_SET */ # define IS_SEQUENCE 0 # define IS_SET 1 DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) int ASN1_TYPE_get(ASN1_TYPE *a); void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); ASN1_OBJECT *ASN1_OBJECT_new(void); void ASN1_OBJECT_free(ASN1_OBJECT *a); int i2d_ASN1_OBJECT(ASN1_OBJECT *a, unsigned char **pp); ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, long length); ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, long length); DECLARE_ASN1_ITEM(ASN1_OBJECT) DECLARE_STACK_OF(ASN1_OBJECT) DECLARE_ASN1_SET_OF(ASN1_OBJECT) ASN1_STRING *ASN1_STRING_new(void); void ASN1_STRING_free(ASN1_STRING *a); void ASN1_STRING_clear_free(ASN1_STRING *a); int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a); ASN1_STRING *ASN1_STRING_type_new(int type); int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); /* * Since this is used to store all sorts of things, via macros, for now, * make its data void * */ int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); int ASN1_STRING_length(const ASN1_STRING *x); void ASN1_STRING_length_set(ASN1_STRING *x, int n); int ASN1_STRING_type(ASN1_STRING *x); unsigned char *ASN1_STRING_data(ASN1_STRING *x); DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp); ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, const unsigned char **pp, long length); int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length); int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); int ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *a, int n); int ASN1_BIT_STRING_check(ASN1_BIT_STRING *a, unsigned char *flags, int flags_len); # ifndef OPENSSL_NO_BIO int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, BIT_STRING_BITNAME *tbl, int indent); # endif int ASN1_BIT_STRING_num_asc(char *name, BIT_STRING_BITNAME *tbl); int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, char *name, int value, BIT_STRING_BITNAME *tbl); int i2d_ASN1_BOOLEAN(int a, unsigned char **pp); int d2i_ASN1_BOOLEAN(int *a, const unsigned char **pp, long length); DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp); ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp, long length); ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, long length); ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x); int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, int offset_day, long offset_sec); int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); # if 0 time_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s); # endif int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, time_t t); ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, time_t t, int offset_day, long offset_sec); int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); int ASN1_TIME_diff(int *pday, int *psec, const ASN1_TIME *from, const ASN1_TIME *to); DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, const ASN1_OCTET_STRING *b); int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, int len); DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) DECLARE_ASN1_FUNCTIONS(ASN1_NULL) DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) int UTF8_getc(const unsigned char *str, int len, unsigned long *val); int UTF8_putc(unsigned char *str, int len, unsigned long value); DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT) DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING) DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING) DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING) DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING) DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) DECLARE_ASN1_FUNCTIONS(ASN1_TIME) DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, int offset_day, long offset_sec); int ASN1_TIME_check(ASN1_TIME *t); ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZEDTIME **out); int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); int i2d_ASN1_SET(STACK_OF(OPENSSL_BLOCK) *a, unsigned char **pp, i2d_of_void *i2d, int ex_tag, int ex_class, int is_set); STACK_OF(OPENSSL_BLOCK) *d2i_ASN1_SET(STACK_OF(OPENSSL_BLOCK) **a, const unsigned char **pp, long length, d2i_of_void *d2i, void (*free_func) (OPENSSL_BLOCK), int ex_tag, int ex_class); # ifndef OPENSSL_NO_BIO int i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a); int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); int i2a_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *a); int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size); int i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a); int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size); int i2a_ASN1_STRING(BIO *bp, ASN1_STRING *a, int type); # endif int i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *a); int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num); ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, const char *sn, const char *ln); int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); long ASN1_INTEGER_get(const ASN1_INTEGER *a); ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn); int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); long ASN1_ENUMERATED_get(ASN1_ENUMERATED *a); ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai); BIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai, BIGNUM *bn); /* General */ /* given a string, return the correct type, max is the maximum length */ int ASN1_PRINTABLE_type(const unsigned char *s, int max); int i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass); ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, const unsigned char **pp, long length, int Ptag, int Pclass); unsigned long ASN1_tag2bit(int tag); /* type is one or more of the B_ASN1_ values. */ ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a, const unsigned char **pp, long length, int type); /* PARSING */ int asn1_Finish(ASN1_CTX *c); int asn1_const_Finish(ASN1_const_CTX *c); /* SPECIALS */ int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, int *pclass, long omax); int ASN1_check_infinite_end(unsigned char **p, long len); int ASN1_const_check_infinite_end(const unsigned char **p, long len); void ASN1_put_object(unsigned char **pp, int constructed, int length, int tag, int xclass); int ASN1_put_eoc(unsigned char **pp); int ASN1_object_size(int constructed, int length, int tag); /* Used to implement other functions */ void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); # define ASN1_dup_of(type,i2d,d2i,x) \ ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ CHECKED_D2I_OF(type, d2i), \ CHECKED_PTR_OF(type, x))) # define ASN1_dup_of_const(type,i2d,d2i,x) \ ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ CHECKED_D2I_OF(type, d2i), \ CHECKED_PTR_OF(const type, x))) void *ASN1_item_dup(const ASN1_ITEM *it, void *x); /* ASN1 alloc/free macros for when a type is only used internally */ # define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type)) # define M_ASN1_free_of(x, type) \ ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type)) # ifndef OPENSSL_NO_FP_API void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); # define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ CHECKED_D2I_OF(type, d2i), \ in, \ CHECKED_PPTR_OF(type, x))) void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x); # define ASN1_i2d_fp_of(type,i2d,out,x) \ (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ out, \ CHECKED_PTR_OF(type, x))) # define ASN1_i2d_fp_of_const(type,i2d,out,x) \ (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \ out, \ CHECKED_PTR_OF(const type, x))) int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); int ASN1_STRING_print_ex_fp(FILE *fp, ASN1_STRING *str, unsigned long flags); # endif int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in); # ifndef OPENSSL_NO_BIO void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); # define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \ ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \ CHECKED_D2I_OF(type, d2i), \ in, \ CHECKED_PPTR_OF(type, x))) void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x); # define ASN1_i2d_bio_of(type,i2d,out,x) \ (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ out, \ CHECKED_PTR_OF(type, x))) # define ASN1_i2d_bio_of_const(type,i2d,out,x) \ (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \ out, \ CHECKED_PTR_OF(const type, x))) int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); int ASN1_STRING_print_ex(BIO *out, ASN1_STRING *str, unsigned long flags); int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num, unsigned char *buf, int off); int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent); int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, int dump); # endif const char *ASN1_tag2str(int tag); /* Used to load and write netscape format cert */ DECLARE_ASN1_FUNCTIONS(NETSCAPE_X509) int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s); int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len); int ASN1_TYPE_get_octetstring(ASN1_TYPE *a, unsigned char *data, int max_len); int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, unsigned char *data, int len); int ASN1_TYPE_get_int_octetstring(ASN1_TYPE *a, long *num, unsigned char *data, int max_len); STACK_OF(OPENSSL_BLOCK) *ASN1_seq_unpack(const unsigned char *buf, int len, d2i_of_void *d2i, void (*free_func) (OPENSSL_BLOCK)); unsigned char *ASN1_seq_pack(STACK_OF(OPENSSL_BLOCK) *safes, i2d_of_void *i2d, unsigned char **buf, int *len); void *ASN1_unpack_string(ASN1_STRING *oct, d2i_of_void *d2i); void *ASN1_item_unpack(ASN1_STRING *oct, const ASN1_ITEM *it); ASN1_STRING *ASN1_pack_string(void *obj, i2d_of_void *i2d, ASN1_OCTET_STRING **oct); # define ASN1_pack_string_of(type,obj,i2d,oct) \ (ASN1_pack_string(CHECKED_PTR_OF(type, obj), \ CHECKED_I2D_OF(type, i2d), \ oct)) ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_OCTET_STRING **oct); void ASN1_STRING_set_default_mask(unsigned long mask); int ASN1_STRING_set_default_mask_asc(const char *p); unsigned long ASN1_STRING_get_default_mask(void); int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, int inform, unsigned long mask); int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, int inform, unsigned long mask, long minsize, long maxsize); ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, const unsigned char *in, int inlen, int inform, int nid); ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); void ASN1_STRING_TABLE_cleanup(void); /* ASN1 template functions */ /* Old API compatible functions */ ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_ITEM *it); int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); void ASN1_add_oid_module(void); ASN1_TYPE *ASN1_generate_nconf(char *str, CONF *nconf); ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf); /* ASN1 Print flags */ /* Indicate missing OPTIONAL fields */ # define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001 /* Mark start and end of SEQUENCE */ # define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002 /* Mark start and end of SEQUENCE/SET OF */ # define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004 /* Show the ASN1 type of primitives */ # define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008 /* Don't show ASN1 type of ANY */ # define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010 /* Don't show ASN1 type of MSTRINGs */ # define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020 /* Don't show field names in SEQUENCE */ # define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040 /* Show structure names of each SEQUENCE field */ # define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080 /* Don't show structure name even at top level */ # define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent, const ASN1_ITEM *it, const ASN1_PCTX *pctx); ASN1_PCTX *ASN1_PCTX_new(void); void ASN1_PCTX_free(ASN1_PCTX *p); unsigned long ASN1_PCTX_get_flags(ASN1_PCTX *p); void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); unsigned long ASN1_PCTX_get_nm_flags(ASN1_PCTX *p); void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); unsigned long ASN1_PCTX_get_cert_flags(ASN1_PCTX *p); void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); unsigned long ASN1_PCTX_get_oid_flags(ASN1_PCTX *p); void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); unsigned long ASN1_PCTX_get_str_flags(ASN1_PCTX *p); void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); BIO_METHOD *BIO_f_asn1(void); BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, const ASN1_ITEM *it); int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, const char *hdr, const ASN1_ITEM *it); int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, int ctype_nid, int econt_nid, STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); int SMIME_crlf_copy(BIO *in, BIO *out, int flags); int SMIME_text(BIO *in, BIO *out); /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_ASN1_strings(void); /* Error codes for the ASN1 functions. */ /* Function codes. */ # define ASN1_F_A2D_ASN1_OBJECT 100 # define ASN1_F_A2I_ASN1_ENUMERATED 101 # define ASN1_F_A2I_ASN1_INTEGER 102 # define ASN1_F_A2I_ASN1_STRING 103 # define ASN1_F_APPEND_EXP 176 # define ASN1_F_ASN1_BIT_STRING_SET_BIT 183 # define ASN1_F_ASN1_CB 177 # define ASN1_F_ASN1_CHECK_TLEN 104 # define ASN1_F_ASN1_COLLATE_PRIMITIVE 105 # define ASN1_F_ASN1_COLLECT 106 # define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 # define ASN1_F_ASN1_D2I_FP 109 # define ASN1_F_ASN1_D2I_READ_BIO 107 # define ASN1_F_ASN1_DIGEST 184 # define ASN1_F_ASN1_DO_ADB 110 # define ASN1_F_ASN1_DUP 111 # define ASN1_F_ASN1_ENUMERATED_SET 112 # define ASN1_F_ASN1_ENUMERATED_TO_BN 113 # define ASN1_F_ASN1_EX_C2I 204 # define ASN1_F_ASN1_FIND_END 190 # define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 216 # define ASN1_F_ASN1_GENERALIZEDTIME_SET 185 # define ASN1_F_ASN1_GENERATE_V3 178 # define ASN1_F_ASN1_GET_OBJECT 114 # define ASN1_F_ASN1_HEADER_NEW 115 # define ASN1_F_ASN1_I2D_BIO 116 # define ASN1_F_ASN1_I2D_FP 117 # define ASN1_F_ASN1_INTEGER_SET 118 # define ASN1_F_ASN1_INTEGER_TO_BN 119 # define ASN1_F_ASN1_ITEM_D2I_FP 206 # define ASN1_F_ASN1_ITEM_DUP 191 # define ASN1_F_ASN1_ITEM_EX_COMBINE_NEW 121 # define ASN1_F_ASN1_ITEM_EX_D2I 120 # define ASN1_F_ASN1_ITEM_I2D_BIO 192 # define ASN1_F_ASN1_ITEM_I2D_FP 193 # define ASN1_F_ASN1_ITEM_PACK 198 # define ASN1_F_ASN1_ITEM_SIGN 195 # define ASN1_F_ASN1_ITEM_SIGN_CTX 220 # define ASN1_F_ASN1_ITEM_UNPACK 199 # define ASN1_F_ASN1_ITEM_VERIFY 197 # define ASN1_F_ASN1_MBSTRING_NCOPY 122 # define ASN1_F_ASN1_OBJECT_NEW 123 # define ASN1_F_ASN1_OUTPUT_DATA 214 # define ASN1_F_ASN1_PACK_STRING 124 # define ASN1_F_ASN1_PCTX_NEW 205 # define ASN1_F_ASN1_PKCS5_PBE_SET 125 # define ASN1_F_ASN1_SEQ_PACK 126 # define ASN1_F_ASN1_SEQ_UNPACK 127 # define ASN1_F_ASN1_SIGN 128 # define ASN1_F_ASN1_STR2TYPE 179 # define ASN1_F_ASN1_STRING_SET 186 # define ASN1_F_ASN1_STRING_TABLE_ADD 129 # define ASN1_F_ASN1_STRING_TYPE_NEW 130 # define ASN1_F_ASN1_TEMPLATE_EX_D2I 132 # define ASN1_F_ASN1_TEMPLATE_NEW 133 # define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 131 # define ASN1_F_ASN1_TIME_ADJ 217 # define ASN1_F_ASN1_TIME_SET 175 # define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 # define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 # define ASN1_F_ASN1_UNPACK_STRING 136 # define ASN1_F_ASN1_UTCTIME_ADJ 218 # define ASN1_F_ASN1_UTCTIME_SET 187 # define ASN1_F_ASN1_VERIFY 137 # define ASN1_F_B64_READ_ASN1 209 # define ASN1_F_B64_WRITE_ASN1 210 # define ASN1_F_BIO_NEW_NDEF 208 # define ASN1_F_BITSTR_CB 180 # define ASN1_F_BN_TO_ASN1_ENUMERATED 138 # define ASN1_F_BN_TO_ASN1_INTEGER 139 # define ASN1_F_C2I_ASN1_BIT_STRING 189 # define ASN1_F_C2I_ASN1_INTEGER 194 # define ASN1_F_C2I_ASN1_OBJECT 196 # define ASN1_F_COLLECT_DATA 140 # define ASN1_F_D2I_ASN1_BIT_STRING 141 # define ASN1_F_D2I_ASN1_BOOLEAN 142 # define ASN1_F_D2I_ASN1_BYTES 143 # define ASN1_F_D2I_ASN1_GENERALIZEDTIME 144 # define ASN1_F_D2I_ASN1_HEADER 145 # define ASN1_F_D2I_ASN1_INTEGER 146 # define ASN1_F_D2I_ASN1_OBJECT 147 # define ASN1_F_D2I_ASN1_SET 148 # define ASN1_F_D2I_ASN1_TYPE_BYTES 149 # define ASN1_F_D2I_ASN1_UINTEGER 150 # define ASN1_F_D2I_ASN1_UTCTIME 151 # define ASN1_F_D2I_AUTOPRIVATEKEY 207 # define ASN1_F_D2I_NETSCAPE_RSA 152 # define ASN1_F_D2I_NETSCAPE_RSA_2 153 # define ASN1_F_D2I_PRIVATEKEY 154 # define ASN1_F_D2I_PUBLICKEY 155 # define ASN1_F_D2I_RSA_NET 200 # define ASN1_F_D2I_RSA_NET_2 201 # define ASN1_F_D2I_X509 156 # define ASN1_F_D2I_X509_CINF 157 # define ASN1_F_D2I_X509_PKEY 159 # define ASN1_F_I2D_ASN1_BIO_STREAM 211 # define ASN1_F_I2D_ASN1_SET 188 # define ASN1_F_I2D_ASN1_TIME 160 # define ASN1_F_I2D_DSA_PUBKEY 161 # define ASN1_F_I2D_EC_PUBKEY 181 # define ASN1_F_I2D_PRIVATEKEY 163 # define ASN1_F_I2D_PUBLICKEY 164 # define ASN1_F_I2D_RSA_NET 162 # define ASN1_F_I2D_RSA_PUBKEY 165 # define ASN1_F_LONG_C2I 166 # define ASN1_F_OID_MODULE_INIT 174 # define ASN1_F_PARSE_TAGGING 182 # define ASN1_F_PKCS5_PBE2_SET_IV 167 # define ASN1_F_PKCS5_PBE_SET 202 # define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 # define ASN1_F_PKCS5_PBKDF2_SET 219 # define ASN1_F_SMIME_READ_ASN1 212 # define ASN1_F_SMIME_TEXT 213 # define ASN1_F_X509_CINF_NEW 168 # define ASN1_F_X509_CRL_ADD0_REVOKED 169 # define ASN1_F_X509_INFO_NEW 170 # define ASN1_F_X509_NAME_ENCODE 203 # define ASN1_F_X509_NAME_EX_D2I 158 # define ASN1_F_X509_NAME_EX_NEW 171 # define ASN1_F_X509_NEW 172 # define ASN1_F_X509_PKEY_NEW 173 /* Reason codes. */ # define ASN1_R_ADDING_OBJECT 171 # define ASN1_R_ASN1_PARSE_ERROR 203 # define ASN1_R_ASN1_SIG_PARSE_ERROR 204 # define ASN1_R_AUX_ERROR 100 # define ASN1_R_BAD_CLASS 101 # define ASN1_R_BAD_OBJECT_HEADER 102 # define ASN1_R_BAD_PASSWORD_READ 103 # define ASN1_R_BAD_TAG 104 # define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 214 # define ASN1_R_BN_LIB 105 # define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106 # define ASN1_R_BUFFER_TOO_SMALL 107 # define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 108 # define ASN1_R_CONTEXT_NOT_INITIALISED 217 # define ASN1_R_DATA_IS_WRONG 109 # define ASN1_R_DECODE_ERROR 110 # define ASN1_R_DECODING_ERROR 111 # define ASN1_R_DEPTH_EXCEEDED 174 # define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 198 # define ASN1_R_ENCODE_ERROR 112 # define ASN1_R_ERROR_GETTING_TIME 173 # define ASN1_R_ERROR_LOADING_SECTION 172 # define ASN1_R_ERROR_PARSING_SET_ELEMENT 113 # define ASN1_R_ERROR_SETTING_CIPHER_PARAMS 114 # define ASN1_R_EXPECTING_AN_INTEGER 115 # define ASN1_R_EXPECTING_AN_OBJECT 116 # define ASN1_R_EXPECTING_A_BOOLEAN 117 # define ASN1_R_EXPECTING_A_TIME 118 # define ASN1_R_EXPLICIT_LENGTH_MISMATCH 119 # define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 120 # define ASN1_R_FIELD_MISSING 121 # define ASN1_R_FIRST_NUM_TOO_LARGE 122 # define ASN1_R_HEADER_TOO_LONG 123 # define ASN1_R_ILLEGAL_BITSTRING_FORMAT 175 # define ASN1_R_ILLEGAL_BOOLEAN 176 # define ASN1_R_ILLEGAL_CHARACTERS 124 # define ASN1_R_ILLEGAL_FORMAT 177 # define ASN1_R_ILLEGAL_HEX 178 # define ASN1_R_ILLEGAL_IMPLICIT_TAG 179 # define ASN1_R_ILLEGAL_INTEGER 180 # define ASN1_R_ILLEGAL_NESTED_TAGGING 181 # define ASN1_R_ILLEGAL_NULL 125 # define ASN1_R_ILLEGAL_NULL_VALUE 182 # define ASN1_R_ILLEGAL_OBJECT 183 # define ASN1_R_ILLEGAL_OPTIONAL_ANY 126 # define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 170 # define ASN1_R_ILLEGAL_TAGGED_ANY 127 # define ASN1_R_ILLEGAL_TIME_VALUE 184 # define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185 # define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128 # define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 220 # define ASN1_R_INVALID_BMPSTRING_LENGTH 129 # define ASN1_R_INVALID_DIGIT 130 # define ASN1_R_INVALID_MIME_TYPE 205 # define ASN1_R_INVALID_MODIFIER 186 # define ASN1_R_INVALID_NUMBER 187 # define ASN1_R_INVALID_OBJECT_ENCODING 216 # define ASN1_R_INVALID_SEPARATOR 131 # define ASN1_R_INVALID_TIME_FORMAT 132 # define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 # define ASN1_R_INVALID_UTF8STRING 134 # define ASN1_R_IV_TOO_LARGE 135 # define ASN1_R_LENGTH_ERROR 136 # define ASN1_R_LIST_ERROR 188 # define ASN1_R_MIME_NO_CONTENT_TYPE 206 # define ASN1_R_MIME_PARSE_ERROR 207 # define ASN1_R_MIME_SIG_PARSE_ERROR 208 # define ASN1_R_MISSING_EOC 137 # define ASN1_R_MISSING_SECOND_NUMBER 138 # define ASN1_R_MISSING_VALUE 189 # define ASN1_R_MSTRING_NOT_UNIVERSAL 139 # define ASN1_R_MSTRING_WRONG_TAG 140 # define ASN1_R_NESTED_ASN1_STRING 197 # define ASN1_R_NON_HEX_CHARACTERS 141 # define ASN1_R_NOT_ASCII_FORMAT 190 # define ASN1_R_NOT_ENOUGH_DATA 142 # define ASN1_R_NO_CONTENT_TYPE 209 # define ASN1_R_NO_DEFAULT_DIGEST 201 # define ASN1_R_NO_MATCHING_CHOICE_TYPE 143 # define ASN1_R_NO_MULTIPART_BODY_FAILURE 210 # define ASN1_R_NO_MULTIPART_BOUNDARY 211 # define ASN1_R_NO_SIG_CONTENT_TYPE 212 # define ASN1_R_NULL_IS_WRONG_LENGTH 144 # define ASN1_R_OBJECT_NOT_ASCII_FORMAT 191 # define ASN1_R_ODD_NUMBER_OF_CHARS 145 # define ASN1_R_PRIVATE_KEY_HEADER_MISSING 146 # define ASN1_R_SECOND_NUMBER_TOO_LARGE 147 # define ASN1_R_SEQUENCE_LENGTH_MISMATCH 148 # define ASN1_R_SEQUENCE_NOT_CONSTRUCTED 149 # define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG 192 # define ASN1_R_SHORT_LINE 150 # define ASN1_R_SIG_INVALID_MIME_TYPE 213 # define ASN1_R_STREAMING_NOT_SUPPORTED 202 # define ASN1_R_STRING_TOO_LONG 151 # define ASN1_R_STRING_TOO_SHORT 152 # define ASN1_R_TAG_VALUE_TOO_HIGH 153 # define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154 # define ASN1_R_TIME_NOT_ASCII_FORMAT 193 # define ASN1_R_TOO_LONG 155 # define ASN1_R_TYPE_NOT_CONSTRUCTED 156 # define ASN1_R_TYPE_NOT_PRIMITIVE 218 # define ASN1_R_UNABLE_TO_DECODE_RSA_KEY 157 # define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY 158 # define ASN1_R_UNEXPECTED_EOC 159 # define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 215 # define ASN1_R_UNKNOWN_FORMAT 160 # define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161 # define ASN1_R_UNKNOWN_OBJECT_TYPE 162 # define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE 163 # define ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM 199 # define ASN1_R_UNKNOWN_TAG 194 # define ASN1_R_UNKOWN_FORMAT 195 # define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164 # define ASN1_R_UNSUPPORTED_CIPHER 165 # define ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM 166 # define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 # define ASN1_R_UNSUPPORTED_TYPE 196 # define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 # define ASN1_R_WRONG_TAG 168 # define ASN1_R_WRONG_TYPE 169 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/asn1_mac.h ================================================ /* crypto/asn1/asn1_mac.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_ASN1_MAC_H # define HEADER_ASN1_MAC_H # include #ifdef __cplusplus extern "C" { #endif # ifndef ASN1_MAC_ERR_LIB # define ASN1_MAC_ERR_LIB ERR_LIB_ASN1 # endif # define ASN1_MAC_H_err(f,r,line) \ ERR_PUT_error(ASN1_MAC_ERR_LIB,(f),(r),__FILE__,(line)) # define M_ASN1_D2I_vars(a,type,func) \ ASN1_const_CTX c; \ type ret=NULL; \ \ c.pp=(const unsigned char **)pp; \ c.q= *(const unsigned char **)pp; \ c.error=ERR_R_NESTED_ASN1_ERROR; \ if ((a == NULL) || ((*a) == NULL)) \ { if ((ret=(type)func()) == NULL) \ { c.line=__LINE__; goto err; } } \ else ret=(*a); # define M_ASN1_D2I_Init() \ c.p= *(const unsigned char **)pp; \ c.max=(length == 0)?0:(c.p+length); # define M_ASN1_D2I_Finish_2(a) \ if (!asn1_const_Finish(&c)) \ { c.line=__LINE__; goto err; } \ *(const unsigned char **)pp=c.p; \ if (a != NULL) (*a)=ret; \ return(ret); # define M_ASN1_D2I_Finish(a,func,e) \ M_ASN1_D2I_Finish_2(a); \ err:\ ASN1_MAC_H_err((e),c.error,c.line); \ asn1_add_error(*(const unsigned char **)pp,(int)(c.q- *pp)); \ if ((ret != NULL) && ((a == NULL) || (*a != ret))) func(ret); \ return(NULL) # define M_ASN1_D2I_start_sequence() \ if (!asn1_GetSequence(&c,&length)) \ { c.line=__LINE__; goto err; } /* Begin reading ASN1 without a surrounding sequence */ # define M_ASN1_D2I_begin() \ c.slen = length; /* End reading ASN1 with no check on length */ # define M_ASN1_D2I_Finish_nolen(a, func, e) \ *pp=c.p; \ if (a != NULL) (*a)=ret; \ return(ret); \ err:\ ASN1_MAC_H_err((e),c.error,c.line); \ asn1_add_error(*pp,(int)(c.q- *pp)); \ if ((ret != NULL) && ((a == NULL) || (*a != ret))) func(ret); \ return(NULL) # define M_ASN1_D2I_end_sequence() \ (((c.inf&1) == 0)?(c.slen <= 0): \ (c.eos=ASN1_const_check_infinite_end(&c.p,c.slen))) /* Don't use this with d2i_ASN1_BOOLEAN() */ # define M_ASN1_D2I_get(b, func) \ c.q=c.p; \ if (func(&(b),&c.p,c.slen) == NULL) \ {c.line=__LINE__; goto err; } \ c.slen-=(c.p-c.q); /* Don't use this with d2i_ASN1_BOOLEAN() */ # define M_ASN1_D2I_get_x(type,b,func) \ c.q=c.p; \ if (((D2I_OF(type))func)(&(b),&c.p,c.slen) == NULL) \ {c.line=__LINE__; goto err; } \ c.slen-=(c.p-c.q); /* use this instead () */ # define M_ASN1_D2I_get_int(b,func) \ c.q=c.p; \ if (func(&(b),&c.p,c.slen) < 0) \ {c.line=__LINE__; goto err; } \ c.slen-=(c.p-c.q); # define M_ASN1_D2I_get_opt(b,func,type) \ if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) \ == (V_ASN1_UNIVERSAL|(type)))) \ { \ M_ASN1_D2I_get(b,func); \ } # define M_ASN1_D2I_get_int_opt(b,func,type) \ if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) \ == (V_ASN1_UNIVERSAL|(type)))) \ { \ M_ASN1_D2I_get_int(b,func); \ } # define M_ASN1_D2I_get_imp(b,func, type) \ M_ASN1_next=(_tmp& V_ASN1_CONSTRUCTED)|type; \ c.q=c.p; \ if (func(&(b),&c.p,c.slen) == NULL) \ {c.line=__LINE__; M_ASN1_next_prev = _tmp; goto err; } \ c.slen-=(c.p-c.q);\ M_ASN1_next_prev=_tmp; # define M_ASN1_D2I_get_IMP_opt(b,func,tag,type) \ if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) == \ (V_ASN1_CONTEXT_SPECIFIC|(tag)))) \ { \ unsigned char _tmp = M_ASN1_next; \ M_ASN1_D2I_get_imp(b,func, type);\ } # define M_ASN1_D2I_get_set(r,func,free_func) \ M_ASN1_D2I_get_imp_set(r,func,free_func, \ V_ASN1_SET,V_ASN1_UNIVERSAL); # define M_ASN1_D2I_get_set_type(type,r,func,free_func) \ M_ASN1_D2I_get_imp_set_type(type,r,func,free_func, \ V_ASN1_SET,V_ASN1_UNIVERSAL); # define M_ASN1_D2I_get_set_opt(r,func,free_func) \ if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ V_ASN1_CONSTRUCTED|V_ASN1_SET)))\ { M_ASN1_D2I_get_set(r,func,free_func); } # define M_ASN1_D2I_get_set_opt_type(type,r,func,free_func) \ if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ V_ASN1_CONSTRUCTED|V_ASN1_SET)))\ { M_ASN1_D2I_get_set_type(type,r,func,free_func); } # define M_ASN1_I2D_len_SET_opt(a,f) \ if ((a != NULL) && (sk_num(a) != 0)) \ M_ASN1_I2D_len_SET(a,f); # define M_ASN1_I2D_put_SET_opt(a,f) \ if ((a != NULL) && (sk_num(a) != 0)) \ M_ASN1_I2D_put_SET(a,f); # define M_ASN1_I2D_put_SEQUENCE_opt(a,f) \ if ((a != NULL) && (sk_num(a) != 0)) \ M_ASN1_I2D_put_SEQUENCE(a,f); # define M_ASN1_I2D_put_SEQUENCE_opt_type(type,a,f) \ if ((a != NULL) && (sk_##type##_num(a) != 0)) \ M_ASN1_I2D_put_SEQUENCE_type(type,a,f); # define M_ASN1_D2I_get_IMP_set_opt(b,func,free_func,tag) \ if ((c.slen != 0) && \ (M_ASN1_next == \ (V_ASN1_CONTEXT_SPECIFIC|V_ASN1_CONSTRUCTED|(tag))))\ { \ M_ASN1_D2I_get_imp_set(b,func,free_func,\ tag,V_ASN1_CONTEXT_SPECIFIC); \ } # define M_ASN1_D2I_get_IMP_set_opt_type(type,b,func,free_func,tag) \ if ((c.slen != 0) && \ (M_ASN1_next == \ (V_ASN1_CONTEXT_SPECIFIC|V_ASN1_CONSTRUCTED|(tag))))\ { \ M_ASN1_D2I_get_imp_set_type(type,b,func,free_func,\ tag,V_ASN1_CONTEXT_SPECIFIC); \ } # define M_ASN1_D2I_get_seq(r,func,free_func) \ M_ASN1_D2I_get_imp_set(r,func,free_func,\ V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL); # define M_ASN1_D2I_get_seq_type(type,r,func,free_func) \ M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,\ V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL) # define M_ASN1_D2I_get_seq_opt(r,func,free_func) \ if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\ { M_ASN1_D2I_get_seq(r,func,free_func); } # define M_ASN1_D2I_get_seq_opt_type(type,r,func,free_func) \ if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \ V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\ { M_ASN1_D2I_get_seq_type(type,r,func,free_func); } # define M_ASN1_D2I_get_IMP_set(r,func,free_func,x) \ M_ASN1_D2I_get_imp_set(r,func,free_func,\ x,V_ASN1_CONTEXT_SPECIFIC); # define M_ASN1_D2I_get_IMP_set_type(type,r,func,free_func,x) \ M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,\ x,V_ASN1_CONTEXT_SPECIFIC); # define M_ASN1_D2I_get_imp_set(r,func,free_func,a,b) \ c.q=c.p; \ if (d2i_ASN1_SET(&(r),&c.p,c.slen,(char *(*)())func,\ (void (*)())free_func,a,b) == NULL) \ { c.line=__LINE__; goto err; } \ c.slen-=(c.p-c.q); # define M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,a,b) \ c.q=c.p; \ if (d2i_ASN1_SET_OF_##type(&(r),&c.p,c.slen,func,\ free_func,a,b) == NULL) \ { c.line=__LINE__; goto err; } \ c.slen-=(c.p-c.q); # define M_ASN1_D2I_get_set_strings(r,func,a,b) \ c.q=c.p; \ if (d2i_ASN1_STRING_SET(&(r),&c.p,c.slen,a,b) == NULL) \ { c.line=__LINE__; goto err; } \ c.slen-=(c.p-c.q); # define M_ASN1_D2I_get_EXP_opt(r,func,tag) \ if ((c.slen != 0L) && (M_ASN1_next == \ (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \ { \ int Tinf,Ttag,Tclass; \ long Tlen; \ \ c.q=c.p; \ Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \ if (Tinf & 0x80) \ { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ c.line=__LINE__; goto err; } \ if (Tinf == (V_ASN1_CONSTRUCTED+1)) \ Tlen = c.slen - (c.p - c.q) - 2; \ if (func(&(r),&c.p,Tlen) == NULL) \ { c.line=__LINE__; goto err; } \ if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \ Tlen = c.slen - (c.p - c.q); \ if(!ASN1_const_check_infinite_end(&c.p, Tlen)) \ { c.error=ERR_R_MISSING_ASN1_EOS; \ c.line=__LINE__; goto err; } \ }\ c.slen-=(c.p-c.q); \ } # define M_ASN1_D2I_get_EXP_set_opt(r,func,free_func,tag,b) \ if ((c.slen != 0) && (M_ASN1_next == \ (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \ { \ int Tinf,Ttag,Tclass; \ long Tlen; \ \ c.q=c.p; \ Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \ if (Tinf & 0x80) \ { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ c.line=__LINE__; goto err; } \ if (Tinf == (V_ASN1_CONSTRUCTED+1)) \ Tlen = c.slen - (c.p - c.q) - 2; \ if (d2i_ASN1_SET(&(r),&c.p,Tlen,(char *(*)())func, \ (void (*)())free_func, \ b,V_ASN1_UNIVERSAL) == NULL) \ { c.line=__LINE__; goto err; } \ if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \ Tlen = c.slen - (c.p - c.q); \ if(!ASN1_check_infinite_end(&c.p, Tlen)) \ { c.error=ERR_R_MISSING_ASN1_EOS; \ c.line=__LINE__; goto err; } \ }\ c.slen-=(c.p-c.q); \ } # define M_ASN1_D2I_get_EXP_set_opt_type(type,r,func,free_func,tag,b) \ if ((c.slen != 0) && (M_ASN1_next == \ (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \ { \ int Tinf,Ttag,Tclass; \ long Tlen; \ \ c.q=c.p; \ Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \ if (Tinf & 0x80) \ { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \ c.line=__LINE__; goto err; } \ if (Tinf == (V_ASN1_CONSTRUCTED+1)) \ Tlen = c.slen - (c.p - c.q) - 2; \ if (d2i_ASN1_SET_OF_##type(&(r),&c.p,Tlen,func, \ free_func,b,V_ASN1_UNIVERSAL) == NULL) \ { c.line=__LINE__; goto err; } \ if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \ Tlen = c.slen - (c.p - c.q); \ if(!ASN1_check_infinite_end(&c.p, Tlen)) \ { c.error=ERR_R_MISSING_ASN1_EOS; \ c.line=__LINE__; goto err; } \ }\ c.slen-=(c.p-c.q); \ } /* New macros */ # define M_ASN1_New_Malloc(ret,type) \ if ((ret=(type *)OPENSSL_malloc(sizeof(type))) == NULL) \ { c.line=__LINE__; goto err2; } # define M_ASN1_New(arg,func) \ if (((arg)=func()) == NULL) return(NULL) # define M_ASN1_New_Error(a) \ /*- err: ASN1_MAC_H_err((a),ERR_R_NESTED_ASN1_ERROR,c.line); \ return(NULL);*/ \ err2: ASN1_MAC_H_err((a),ERR_R_MALLOC_FAILURE,c.line); \ return(NULL) /* * BIG UGLY WARNING! This is so damn ugly I wanna puke. Unfortunately, some * macros that use ASN1_const_CTX still insist on writing in the input * stream. ARGH! ARGH! ARGH! Let's get rid of this macro package. Please? -- * Richard Levitte */ # define M_ASN1_next (*((unsigned char *)(c.p))) # define M_ASN1_next_prev (*((unsigned char *)(c.q))) /*************************************************/ # define M_ASN1_I2D_vars(a) int r=0,ret=0; \ unsigned char *p; \ if (a == NULL) return(0) /* Length Macros */ # define M_ASN1_I2D_len(a,f) ret+=f(a,NULL) # define M_ASN1_I2D_len_IMP_opt(a,f) if (a != NULL) M_ASN1_I2D_len(a,f) # define M_ASN1_I2D_len_SET(a,f) \ ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET); # define M_ASN1_I2D_len_SET_type(type,a,f) \ ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,V_ASN1_SET, \ V_ASN1_UNIVERSAL,IS_SET); # define M_ASN1_I2D_len_SEQUENCE(a,f) \ ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \ IS_SEQUENCE); # define M_ASN1_I2D_len_SEQUENCE_type(type,a,f) \ ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,V_ASN1_SEQUENCE, \ V_ASN1_UNIVERSAL,IS_SEQUENCE) # define M_ASN1_I2D_len_SEQUENCE_opt(a,f) \ if ((a != NULL) && (sk_num(a) != 0)) \ M_ASN1_I2D_len_SEQUENCE(a,f); # define M_ASN1_I2D_len_SEQUENCE_opt_type(type,a,f) \ if ((a != NULL) && (sk_##type##_num(a) != 0)) \ M_ASN1_I2D_len_SEQUENCE_type(type,a,f); # define M_ASN1_I2D_len_IMP_SET(a,f,x) \ ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET); # define M_ASN1_I2D_len_IMP_SET_type(type,a,f,x) \ ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \ V_ASN1_CONTEXT_SPECIFIC,IS_SET); # define M_ASN1_I2D_len_IMP_SET_opt(a,f,x) \ if ((a != NULL) && (sk_num(a) != 0)) \ ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \ IS_SET); # define M_ASN1_I2D_len_IMP_SET_opt_type(type,a,f,x) \ if ((a != NULL) && (sk_##type##_num(a) != 0)) \ ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \ V_ASN1_CONTEXT_SPECIFIC,IS_SET); # define M_ASN1_I2D_len_IMP_SEQUENCE(a,f,x) \ ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \ IS_SEQUENCE); # define M_ASN1_I2D_len_IMP_SEQUENCE_opt(a,f,x) \ if ((a != NULL) && (sk_num(a) != 0)) \ ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \ IS_SEQUENCE); # define M_ASN1_I2D_len_IMP_SEQUENCE_opt_type(type,a,f,x) \ if ((a != NULL) && (sk_##type##_num(a) != 0)) \ ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \ V_ASN1_CONTEXT_SPECIFIC, \ IS_SEQUENCE); # define M_ASN1_I2D_len_EXP_opt(a,f,mtag,v) \ if (a != NULL)\ { \ v=f(a,NULL); \ ret+=ASN1_object_size(1,v,mtag); \ } # define M_ASN1_I2D_len_EXP_SET_opt(a,f,mtag,tag,v) \ if ((a != NULL) && (sk_num(a) != 0))\ { \ v=i2d_ASN1_SET(a,NULL,f,tag,V_ASN1_UNIVERSAL,IS_SET); \ ret+=ASN1_object_size(1,v,mtag); \ } # define M_ASN1_I2D_len_EXP_SEQUENCE_opt(a,f,mtag,tag,v) \ if ((a != NULL) && (sk_num(a) != 0))\ { \ v=i2d_ASN1_SET(a,NULL,f,tag,V_ASN1_UNIVERSAL, \ IS_SEQUENCE); \ ret+=ASN1_object_size(1,v,mtag); \ } # define M_ASN1_I2D_len_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \ if ((a != NULL) && (sk_##type##_num(a) != 0))\ { \ v=i2d_ASN1_SET_OF_##type(a,NULL,f,tag, \ V_ASN1_UNIVERSAL, \ IS_SEQUENCE); \ ret+=ASN1_object_size(1,v,mtag); \ } /* Put Macros */ # define M_ASN1_I2D_put(a,f) f(a,&p) # define M_ASN1_I2D_put_IMP_opt(a,f,t) \ if (a != NULL) \ { \ unsigned char *q=p; \ f(a,&p); \ *q=(V_ASN1_CONTEXT_SPECIFIC|t|(*q&V_ASN1_CONSTRUCTED));\ } # define M_ASN1_I2D_put_SET(a,f) i2d_ASN1_SET(a,&p,f,V_ASN1_SET,\ V_ASN1_UNIVERSAL,IS_SET) # define M_ASN1_I2D_put_SET_type(type,a,f) \ i2d_ASN1_SET_OF_##type(a,&p,f,V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET) # define M_ASN1_I2D_put_IMP_SET(a,f,x) i2d_ASN1_SET(a,&p,f,x,\ V_ASN1_CONTEXT_SPECIFIC,IS_SET) # define M_ASN1_I2D_put_IMP_SET_type(type,a,f,x) \ i2d_ASN1_SET_OF_##type(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET) # define M_ASN1_I2D_put_IMP_SEQUENCE(a,f,x) i2d_ASN1_SET(a,&p,f,x,\ V_ASN1_CONTEXT_SPECIFIC,IS_SEQUENCE) # define M_ASN1_I2D_put_SEQUENCE(a,f) i2d_ASN1_SET(a,&p,f,V_ASN1_SEQUENCE,\ V_ASN1_UNIVERSAL,IS_SEQUENCE) # define M_ASN1_I2D_put_SEQUENCE_type(type,a,f) \ i2d_ASN1_SET_OF_##type(a,&p,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \ IS_SEQUENCE) # define M_ASN1_I2D_put_SEQUENCE_opt(a,f) \ if ((a != NULL) && (sk_num(a) != 0)) \ M_ASN1_I2D_put_SEQUENCE(a,f); # define M_ASN1_I2D_put_IMP_SET_opt(a,f,x) \ if ((a != NULL) && (sk_num(a) != 0)) \ { i2d_ASN1_SET(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC, \ IS_SET); } # define M_ASN1_I2D_put_IMP_SET_opt_type(type,a,f,x) \ if ((a != NULL) && (sk_##type##_num(a) != 0)) \ { i2d_ASN1_SET_OF_##type(a,&p,f,x, \ V_ASN1_CONTEXT_SPECIFIC, \ IS_SET); } # define M_ASN1_I2D_put_IMP_SEQUENCE_opt(a,f,x) \ if ((a != NULL) && (sk_num(a) != 0)) \ { i2d_ASN1_SET(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC, \ IS_SEQUENCE); } # define M_ASN1_I2D_put_IMP_SEQUENCE_opt_type(type,a,f,x) \ if ((a != NULL) && (sk_##type##_num(a) != 0)) \ { i2d_ASN1_SET_OF_##type(a,&p,f,x, \ V_ASN1_CONTEXT_SPECIFIC, \ IS_SEQUENCE); } # define M_ASN1_I2D_put_EXP_opt(a,f,tag,v) \ if (a != NULL) \ { \ ASN1_put_object(&p,1,v,tag,V_ASN1_CONTEXT_SPECIFIC); \ f(a,&p); \ } # define M_ASN1_I2D_put_EXP_SET_opt(a,f,mtag,tag,v) \ if ((a != NULL) && (sk_num(a) != 0)) \ { \ ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \ i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SET); \ } # define M_ASN1_I2D_put_EXP_SEQUENCE_opt(a,f,mtag,tag,v) \ if ((a != NULL) && (sk_num(a) != 0)) \ { \ ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \ i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SEQUENCE); \ } # define M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \ if ((a != NULL) && (sk_##type##_num(a) != 0)) \ { \ ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \ i2d_ASN1_SET_OF_##type(a,&p,f,tag,V_ASN1_UNIVERSAL, \ IS_SEQUENCE); \ } # define M_ASN1_I2D_seq_total() \ r=ASN1_object_size(1,ret,V_ASN1_SEQUENCE); \ if (pp == NULL) return(r); \ p= *pp; \ ASN1_put_object(&p,1,ret,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL) # define M_ASN1_I2D_INF_seq_start(tag,ctx) \ *(p++)=(V_ASN1_CONSTRUCTED|(tag)|(ctx)); \ *(p++)=0x80 # define M_ASN1_I2D_INF_seq_end() *(p++)=0x00; *(p++)=0x00 # define M_ASN1_I2D_finish() *pp=p; \ return(r); int asn1_GetSequence(ASN1_const_CTX *c, long *length); void asn1_add_error(const unsigned char *address, int offset); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/asn1t.h ================================================ /* asn1t.h */ /* * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project * 2000. */ /* ==================================================================== * Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_ASN1T_H # define HEADER_ASN1T_H # include # include # include # ifdef OPENSSL_BUILD_SHLIBCRYPTO # undef OPENSSL_EXTERN # define OPENSSL_EXTERN OPENSSL_EXPORT # endif /* ASN1 template defines, structures and functions */ #ifdef __cplusplus extern "C" { #endif # ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION /* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ # define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr)) /* Macros for start and end of ASN1_ITEM definition */ # define ASN1_ITEM_start(itname) \ OPENSSL_GLOBAL const ASN1_ITEM itname##_it = { # define ASN1_ITEM_end(itname) \ }; # else /* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ # define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr())) /* Macros for start and end of ASN1_ITEM definition */ # define ASN1_ITEM_start(itname) \ const ASN1_ITEM * itname##_it(void) \ { \ static const ASN1_ITEM local_it = { # define ASN1_ITEM_end(itname) \ }; \ return &local_it; \ } # endif /* Macros to aid ASN1 template writing */ # define ASN1_ITEM_TEMPLATE(tname) \ static const ASN1_TEMPLATE tname##_item_tt # define ASN1_ITEM_TEMPLATE_END(tname) \ ;\ ASN1_ITEM_start(tname) \ ASN1_ITYPE_PRIMITIVE,\ -1,\ &tname##_item_tt,\ 0,\ NULL,\ 0,\ #tname \ ASN1_ITEM_end(tname) /* This is a ASN1 type which just embeds a template */ /*- * This pair helps declare a SEQUENCE. We can do: * * ASN1_SEQUENCE(stname) = { * ... SEQUENCE components ... * } ASN1_SEQUENCE_END(stname) * * This will produce an ASN1_ITEM called stname_it * for a structure called stname. * * If you want the same structure but a different * name then use: * * ASN1_SEQUENCE(itname) = { * ... SEQUENCE components ... * } ASN1_SEQUENCE_END_name(stname, itname) * * This will create an item called itname_it using * a structure called stname. */ # define ASN1_SEQUENCE(tname) \ static const ASN1_TEMPLATE tname##_seq_tt[] # define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname) # define ASN1_SEQUENCE_END_name(stname, tname) \ ;\ ASN1_ITEM_start(tname) \ ASN1_ITYPE_SEQUENCE,\ V_ASN1_SEQUENCE,\ tname##_seq_tt,\ sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ NULL,\ sizeof(stname),\ #stname \ ASN1_ITEM_end(tname) # define ASN1_NDEF_SEQUENCE(tname) \ ASN1_SEQUENCE(tname) # define ASN1_NDEF_SEQUENCE_cb(tname, cb) \ ASN1_SEQUENCE_cb(tname, cb) # define ASN1_SEQUENCE_cb(tname, cb) \ static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ ASN1_SEQUENCE(tname) # define ASN1_BROKEN_SEQUENCE(tname) \ static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \ ASN1_SEQUENCE(tname) # define ASN1_SEQUENCE_ref(tname, cb, lck) \ static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), lck, cb, 0}; \ ASN1_SEQUENCE(tname) # define ASN1_SEQUENCE_enc(tname, enc, cb) \ static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \ ASN1_SEQUENCE(tname) # define ASN1_NDEF_SEQUENCE_END(tname) \ ;\ ASN1_ITEM_start(tname) \ ASN1_ITYPE_NDEF_SEQUENCE,\ V_ASN1_SEQUENCE,\ tname##_seq_tt,\ sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ NULL,\ sizeof(tname),\ #tname \ ASN1_ITEM_end(tname) # define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname) # define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) # define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) # define ASN1_SEQUENCE_END_ref(stname, tname) \ ;\ ASN1_ITEM_start(tname) \ ASN1_ITYPE_SEQUENCE,\ V_ASN1_SEQUENCE,\ tname##_seq_tt,\ sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ &tname##_aux,\ sizeof(stname),\ #stname \ ASN1_ITEM_end(tname) # define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \ ;\ ASN1_ITEM_start(tname) \ ASN1_ITYPE_NDEF_SEQUENCE,\ V_ASN1_SEQUENCE,\ tname##_seq_tt,\ sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ &tname##_aux,\ sizeof(stname),\ #stname \ ASN1_ITEM_end(tname) /*- * This pair helps declare a CHOICE type. We can do: * * ASN1_CHOICE(chname) = { * ... CHOICE options ... * ASN1_CHOICE_END(chname) * * This will produce an ASN1_ITEM called chname_it * for a structure called chname. The structure * definition must look like this: * typedef struct { * int type; * union { * ASN1_SOMETHING *opt1; * ASN1_SOMEOTHER *opt2; * } value; * } chname; * * the name of the selector must be 'type'. * to use an alternative selector name use the * ASN1_CHOICE_END_selector() version. */ # define ASN1_CHOICE(tname) \ static const ASN1_TEMPLATE tname##_ch_tt[] # define ASN1_CHOICE_cb(tname, cb) \ static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ ASN1_CHOICE(tname) # define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) # define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type) # define ASN1_CHOICE_END_selector(stname, tname, selname) \ ;\ ASN1_ITEM_start(tname) \ ASN1_ITYPE_CHOICE,\ offsetof(stname,selname) ,\ tname##_ch_tt,\ sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ NULL,\ sizeof(stname),\ #stname \ ASN1_ITEM_end(tname) # define ASN1_CHOICE_END_cb(stname, tname, selname) \ ;\ ASN1_ITEM_start(tname) \ ASN1_ITYPE_CHOICE,\ offsetof(stname,selname) ,\ tname##_ch_tt,\ sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ &tname##_aux,\ sizeof(stname),\ #stname \ ASN1_ITEM_end(tname) /* This helps with the template wrapper form of ASN1_ITEM */ # define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \ (flags), (tag), 0,\ #name, ASN1_ITEM_ref(type) } /* These help with SEQUENCE or CHOICE components */ /* used to declare other types */ # define ASN1_EX_TYPE(flags, tag, stname, field, type) { \ (flags), (tag), offsetof(stname, field),\ #field, ASN1_ITEM_ref(type) } /* used when the structure is combined with the parent */ # define ASN1_EX_COMBINE(flags, tag, type) { \ (flags)|ASN1_TFLG_COMBINE, (tag), 0, NULL, ASN1_ITEM_ref(type) } /* implicit and explicit helper macros */ # define ASN1_IMP_EX(stname, field, type, tag, ex) \ ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | ex, tag, stname, field, type) # define ASN1_EXP_EX(stname, field, type, tag, ex) \ ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | ex, tag, stname, field, type) /* Any defined by macros: the field used is in the table itself */ # ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION # define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } # define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } # else # define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } # define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } # endif /* Plain simple type */ # define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) /* OPTIONAL simple type */ # define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type) /* IMPLICIT tagged simple type */ # define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0) /* IMPLICIT tagged OPTIONAL simple type */ # define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) /* Same as above but EXPLICIT */ # define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0) # define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) /* SEQUENCE OF type */ # define ASN1_SEQUENCE_OF(stname, field, type) \ ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type) /* OPTIONAL SEQUENCE OF */ # define ASN1_SEQUENCE_OF_OPT(stname, field, type) \ ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) /* Same as above but for SET OF */ # define ASN1_SET_OF(stname, field, type) \ ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type) # define ASN1_SET_OF_OPT(stname, field, type) \ ASN1_EX_TYPE(ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) /* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */ # define ASN1_IMP_SET_OF(stname, field, type, tag) \ ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) # define ASN1_EXP_SET_OF(stname, field, type, tag) \ ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) # define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \ ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) # define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \ ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) # define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \ ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) # define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \ ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) # define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \ ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) # define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \ ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) /* EXPLICIT using indefinite length constructed form */ # define ASN1_NDEF_EXP(stname, field, type, tag) \ ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF) /* EXPLICIT OPTIONAL using indefinite length constructed form */ # define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \ ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF) /* Macros for the ASN1_ADB structure */ # define ASN1_ADB(name) \ static const ASN1_ADB_TABLE name##_adbtbl[] # ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION # define ASN1_ADB_END(name, flags, field, app_table, def, none) \ ;\ static const ASN1_ADB name##_adb = {\ flags,\ offsetof(name, field),\ app_table,\ name##_adbtbl,\ sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ def,\ none\ } # else # define ASN1_ADB_END(name, flags, field, app_table, def, none) \ ;\ static const ASN1_ITEM *name##_adb(void) \ { \ static const ASN1_ADB internal_adb = \ {\ flags,\ offsetof(name, field),\ app_table,\ name##_adbtbl,\ sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ def,\ none\ }; \ return (const ASN1_ITEM *) &internal_adb; \ } \ void dummy_function(void) # endif # define ADB_ENTRY(val, template) {val, template} # define ASN1_ADB_TEMPLATE(name) \ static const ASN1_TEMPLATE name##_tt /* * This is the ASN1 template structure that defines a wrapper round the * actual type. It determines the actual position of the field in the value * structure, various flags such as OPTIONAL and the field name. */ struct ASN1_TEMPLATE_st { unsigned long flags; /* Various flags */ long tag; /* tag, not used if no tagging */ unsigned long offset; /* Offset of this field in structure */ # ifndef NO_ASN1_FIELD_NAMES const char *field_name; /* Field name */ # endif ASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */ }; /* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */ # define ASN1_TEMPLATE_item(t) (t->item_ptr) # define ASN1_TEMPLATE_adb(t) (t->item_ptr) typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE; typedef struct ASN1_ADB_st ASN1_ADB; struct ASN1_ADB_st { unsigned long flags; /* Various flags */ unsigned long offset; /* Offset of selector field */ STACK_OF(ASN1_ADB_TABLE) **app_items; /* Application defined items */ const ASN1_ADB_TABLE *tbl; /* Table of possible types */ long tblcount; /* Number of entries in tbl */ const ASN1_TEMPLATE *default_tt; /* Type to use if no match */ const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */ }; struct ASN1_ADB_TABLE_st { long value; /* NID for an object or value for an int */ const ASN1_TEMPLATE tt; /* item for this value */ }; /* template flags */ /* Field is optional */ # define ASN1_TFLG_OPTIONAL (0x1) /* Field is a SET OF */ # define ASN1_TFLG_SET_OF (0x1 << 1) /* Field is a SEQUENCE OF */ # define ASN1_TFLG_SEQUENCE_OF (0x2 << 1) /* * Special case: this refers to a SET OF that will be sorted into DER order * when encoded *and* the corresponding STACK will be modified to match the * new order. */ # define ASN1_TFLG_SET_ORDER (0x3 << 1) /* Mask for SET OF or SEQUENCE OF */ # define ASN1_TFLG_SK_MASK (0x3 << 1) /* * These flags mean the tag should be taken from the tag field. If EXPLICIT * then the underlying type is used for the inner tag. */ /* IMPLICIT tagging */ # define ASN1_TFLG_IMPTAG (0x1 << 3) /* EXPLICIT tagging, inner tag from underlying type */ # define ASN1_TFLG_EXPTAG (0x2 << 3) # define ASN1_TFLG_TAG_MASK (0x3 << 3) /* context specific IMPLICIT */ # define ASN1_TFLG_IMPLICIT ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT /* context specific EXPLICIT */ # define ASN1_TFLG_EXPLICIT ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT /* * If tagging is in force these determine the type of tag to use. Otherwise * the tag is determined by the underlying type. These values reflect the * actual octet format. */ /* Universal tag */ # define ASN1_TFLG_UNIVERSAL (0x0<<6) /* Application tag */ # define ASN1_TFLG_APPLICATION (0x1<<6) /* Context specific tag */ # define ASN1_TFLG_CONTEXT (0x2<<6) /* Private tag */ # define ASN1_TFLG_PRIVATE (0x3<<6) # define ASN1_TFLG_TAG_CLASS (0x3<<6) /* * These are for ANY DEFINED BY type. In this case the 'item' field points to * an ASN1_ADB structure which contains a table of values to decode the * relevant type */ # define ASN1_TFLG_ADB_MASK (0x3<<8) # define ASN1_TFLG_ADB_OID (0x1<<8) # define ASN1_TFLG_ADB_INT (0x1<<9) /* * This flag means a parent structure is passed instead of the field: this is * useful is a SEQUENCE is being combined with a CHOICE for example. Since * this means the structure and item name will differ we need to use the * ASN1_CHOICE_END_name() macro for example. */ # define ASN1_TFLG_COMBINE (0x1<<10) /* * This flag when present in a SEQUENCE OF, SET OF or EXPLICIT causes * indefinite length constructed encoding to be used if required. */ # define ASN1_TFLG_NDEF (0x1<<11) /* This is the actual ASN1 item itself */ struct ASN1_ITEM_st { char itype; /* The item type, primitive, SEQUENCE, CHOICE * or extern */ long utype; /* underlying type */ const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains * the contents */ long tcount; /* Number of templates if SEQUENCE or CHOICE */ const void *funcs; /* functions that handle this type */ long size; /* Structure size (usually) */ # ifndef NO_ASN1_FIELD_NAMES const char *sname; /* Structure name */ # endif }; /*- * These are values for the itype field and * determine how the type is interpreted. * * For PRIMITIVE types the underlying type * determines the behaviour if items is NULL. * * Otherwise templates must contain a single * template and the type is treated in the * same way as the type specified in the template. * * For SEQUENCE types the templates field points * to the members, the size field is the * structure size. * * For CHOICE types the templates field points * to each possible member (typically a union) * and the 'size' field is the offset of the * selector. * * The 'funcs' field is used for application * specific functions. * * For COMPAT types the funcs field gives a * set of functions that handle this type, this * supports the old d2i, i2d convention. * * The EXTERN type uses a new style d2i/i2d. * The new style should be used where possible * because it avoids things like the d2i IMPLICIT * hack. * * MSTRING is a multiple string type, it is used * for a CHOICE of character strings where the * actual strings all occupy an ASN1_STRING * structure. In this case the 'utype' field * has a special meaning, it is used as a mask * of acceptable types using the B_ASN1 constants. * * NDEF_SEQUENCE is the same as SEQUENCE except * that it will use indefinite length constructed * encoding if requested. * */ # define ASN1_ITYPE_PRIMITIVE 0x0 # define ASN1_ITYPE_SEQUENCE 0x1 # define ASN1_ITYPE_CHOICE 0x2 # define ASN1_ITYPE_COMPAT 0x3 # define ASN1_ITYPE_EXTERN 0x4 # define ASN1_ITYPE_MSTRING 0x5 # define ASN1_ITYPE_NDEF_SEQUENCE 0x6 /* * Cache for ASN1 tag and length, so we don't keep re-reading it for things * like CHOICE */ struct ASN1_TLC_st { char valid; /* Values below are valid */ int ret; /* return value */ long plen; /* length */ int ptag; /* class value */ int pclass; /* class value */ int hdrlen; /* header length */ }; /* Typedefs for ASN1 function pointers */ typedef ASN1_VALUE *ASN1_new_func(void); typedef void ASN1_free_func(ASN1_VALUE *a); typedef ASN1_VALUE *ASN1_d2i_func(ASN1_VALUE **a, const unsigned char **in, long length); typedef int ASN1_i2d_func(ASN1_VALUE *a, unsigned char **in); typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it, int tag, int aclass, char opt, ASN1_TLC *ctx); typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass); typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval, int indent, const char *fname, const ASN1_PCTX *pctx); typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it); typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it); typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it, int indent, const ASN1_PCTX *pctx); typedef struct ASN1_COMPAT_FUNCS_st { ASN1_new_func *asn1_new; ASN1_free_func *asn1_free; ASN1_d2i_func *asn1_d2i; ASN1_i2d_func *asn1_i2d; } ASN1_COMPAT_FUNCS; typedef struct ASN1_EXTERN_FUNCS_st { void *app_data; ASN1_ex_new_func *asn1_ex_new; ASN1_ex_free_func *asn1_ex_free; ASN1_ex_free_func *asn1_ex_clear; ASN1_ex_d2i *asn1_ex_d2i; ASN1_ex_i2d *asn1_ex_i2d; ASN1_ex_print_func *asn1_ex_print; } ASN1_EXTERN_FUNCS; typedef struct ASN1_PRIMITIVE_FUNCS_st { void *app_data; unsigned long flags; ASN1_ex_new_func *prim_new; ASN1_ex_free_func *prim_free; ASN1_ex_free_func *prim_clear; ASN1_primitive_c2i *prim_c2i; ASN1_primitive_i2c *prim_i2c; ASN1_primitive_print *prim_print; } ASN1_PRIMITIVE_FUNCS; /* * This is the ASN1_AUX structure: it handles various miscellaneous * requirements. For example the use of reference counts and an informational * callback. The "informational callback" is called at various points during * the ASN1 encoding and decoding. It can be used to provide minor * customisation of the structures used. This is most useful where the * supplied routines *almost* do the right thing but need some extra help at * a few points. If the callback returns zero then it is assumed a fatal * error has occurred and the main operation should be abandoned. If major * changes in the default behaviour are required then an external type is * more appropriate. */ typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, void *exarg); typedef struct ASN1_AUX_st { void *app_data; int flags; int ref_offset; /* Offset of reference value */ int ref_lock; /* Lock type to use */ ASN1_aux_cb *asn1_cb; int enc_offset; /* Offset of ASN1_ENCODING structure */ } ASN1_AUX; /* For print related callbacks exarg points to this structure */ typedef struct ASN1_PRINT_ARG_st { BIO *out; int indent; const ASN1_PCTX *pctx; } ASN1_PRINT_ARG; /* For streaming related callbacks exarg points to this structure */ typedef struct ASN1_STREAM_ARG_st { /* BIO to stream through */ BIO *out; /* BIO with filters appended */ BIO *ndef_bio; /* Streaming I/O boundary */ unsigned char **boundary; } ASN1_STREAM_ARG; /* Flags in ASN1_AUX */ /* Use a reference count */ # define ASN1_AFLG_REFCOUNT 1 /* Save the encoding of structure (useful for signatures) */ # define ASN1_AFLG_ENCODING 2 /* The Sequence length is invalid */ # define ASN1_AFLG_BROKEN 4 /* operation values for asn1_cb */ # define ASN1_OP_NEW_PRE 0 # define ASN1_OP_NEW_POST 1 # define ASN1_OP_FREE_PRE 2 # define ASN1_OP_FREE_POST 3 # define ASN1_OP_D2I_PRE 4 # define ASN1_OP_D2I_POST 5 # define ASN1_OP_I2D_PRE 6 # define ASN1_OP_I2D_POST 7 # define ASN1_OP_PRINT_PRE 8 # define ASN1_OP_PRINT_POST 9 # define ASN1_OP_STREAM_PRE 10 # define ASN1_OP_STREAM_POST 11 # define ASN1_OP_DETACHED_PRE 12 # define ASN1_OP_DETACHED_POST 13 /* Macro to implement a primitive type */ # define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) # define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \ ASN1_ITEM_start(itname) \ ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \ ASN1_ITEM_end(itname) /* Macro to implement a multi string type */ # define IMPLEMENT_ASN1_MSTRING(itname, mask) \ ASN1_ITEM_start(itname) \ ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \ ASN1_ITEM_end(itname) /* Macro to implement an ASN1_ITEM in terms of old style funcs */ # define IMPLEMENT_COMPAT_ASN1(sname) IMPLEMENT_COMPAT_ASN1_type(sname, V_ASN1_SEQUENCE) # define IMPLEMENT_COMPAT_ASN1_type(sname, tag) \ static const ASN1_COMPAT_FUNCS sname##_ff = { \ (ASN1_new_func *)sname##_new, \ (ASN1_free_func *)sname##_free, \ (ASN1_d2i_func *)d2i_##sname, \ (ASN1_i2d_func *)i2d_##sname, \ }; \ ASN1_ITEM_start(sname) \ ASN1_ITYPE_COMPAT, \ tag, \ NULL, \ 0, \ &sname##_ff, \ 0, \ #sname \ ASN1_ITEM_end(sname) # define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \ ASN1_ITEM_start(sname) \ ASN1_ITYPE_EXTERN, \ tag, \ NULL, \ 0, \ &fptrs, \ 0, \ #sname \ ASN1_ITEM_end(sname) /* Macro to implement standard functions in terms of ASN1_ITEM structures */ # define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname) # define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname) # define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \ IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname) # define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \ IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname) # define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \ IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname) # define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \ pre stname *fname##_new(void) \ { \ return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ } \ pre void fname##_free(stname *a) \ { \ ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ } # define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \ stname *fname##_new(void) \ { \ return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ } \ void fname##_free(stname *a) \ { \ ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ } # define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \ IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) # define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ { \ return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ } \ int i2d_##fname(stname *a, unsigned char **out) \ { \ return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ } # define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ int i2d_##stname##_NDEF(stname *a, unsigned char **out) \ { \ return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ } /* * This includes evil casts to remove const: they will go away when full ASN1 * constification is done. */ # define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ { \ return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ } \ int i2d_##fname(const stname *a, unsigned char **out) \ { \ return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ } # define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ stname * stname##_dup(stname *x) \ { \ return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ } # define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \ IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) # define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ int fname##_print_ctx(BIO *out, stname *x, int indent, \ const ASN1_PCTX *pctx) \ { \ return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \ ASN1_ITEM_rptr(itname), pctx); \ } # define IMPLEMENT_ASN1_FUNCTIONS_const(name) \ IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name) # define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \ IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) /* external definitions for primitive types */ DECLARE_ASN1_ITEM(ASN1_BOOLEAN) DECLARE_ASN1_ITEM(ASN1_TBOOLEAN) DECLARE_ASN1_ITEM(ASN1_FBOOLEAN) DECLARE_ASN1_ITEM(ASN1_SEQUENCE) DECLARE_ASN1_ITEM(CBIGNUM) DECLARE_ASN1_ITEM(BIGNUM) DECLARE_ASN1_ITEM(LONG) DECLARE_ASN1_ITEM(ZLONG) DECLARE_STACK_OF(ASN1_VALUE) /* Functions used internally by the ASN1 code */ int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it); void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it); int ASN1_template_new(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it); void ASN1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); int ASN1_template_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_TEMPLATE *tt); int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it, int tag, int aclass, char opt, ASN1_TLC *ctx); int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass); int ASN1_template_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_TEMPLATE *tt); void ASN1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it); int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it); int asn1_ex_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it); int asn1_get_choice_selector(ASN1_VALUE **pval, const ASN1_ITEM *it); int asn1_set_choice_selector(ASN1_VALUE **pval, int value, const ASN1_ITEM *it); ASN1_VALUE **asn1_get_field_ptr(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); const ASN1_TEMPLATE *asn1_do_adb(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt, int nullerr); int asn1_do_lock(ASN1_VALUE **pval, int op, const ASN1_ITEM *it); void asn1_enc_init(ASN1_VALUE **pval, const ASN1_ITEM *it); void asn1_enc_free(ASN1_VALUE **pval, const ASN1_ITEM *it); int asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval, const ASN1_ITEM *it); int asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen, const ASN1_ITEM *it); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/bio.h ================================================ /* crypto/bio/bio.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_BIO_H # define HEADER_BIO_H # include # ifndef OPENSSL_NO_FP_API # include # endif # include # include # ifndef OPENSSL_NO_SCTP # ifndef OPENSSL_SYS_VMS # include # else # include # endif # endif #ifdef __cplusplus extern "C" { #endif /* These are the 'types' of BIOs */ # define BIO_TYPE_NONE 0 # define BIO_TYPE_MEM (1|0x0400) # define BIO_TYPE_FILE (2|0x0400) # define BIO_TYPE_FD (4|0x0400|0x0100) # define BIO_TYPE_SOCKET (5|0x0400|0x0100) # define BIO_TYPE_NULL (6|0x0400) # define BIO_TYPE_SSL (7|0x0200) # define BIO_TYPE_MD (8|0x0200)/* passive filter */ # define BIO_TYPE_BUFFER (9|0x0200)/* filter */ # define BIO_TYPE_CIPHER (10|0x0200)/* filter */ # define BIO_TYPE_BASE64 (11|0x0200)/* filter */ # define BIO_TYPE_CONNECT (12|0x0400|0x0100)/* socket - connect */ # define BIO_TYPE_ACCEPT (13|0x0400|0x0100)/* socket for accept */ # define BIO_TYPE_PROXY_CLIENT (14|0x0200)/* client proxy BIO */ # define BIO_TYPE_PROXY_SERVER (15|0x0200)/* server proxy BIO */ # define BIO_TYPE_NBIO_TEST (16|0x0200)/* server proxy BIO */ # define BIO_TYPE_NULL_FILTER (17|0x0200) # define BIO_TYPE_BER (18|0x0200)/* BER -> bin filter */ # define BIO_TYPE_BIO (19|0x0400)/* (half a) BIO pair */ # define BIO_TYPE_LINEBUFFER (20|0x0200)/* filter */ # define BIO_TYPE_DGRAM (21|0x0400|0x0100) # ifndef OPENSSL_NO_SCTP # define BIO_TYPE_DGRAM_SCTP (24|0x0400|0x0100) # endif # define BIO_TYPE_ASN1 (22|0x0200)/* filter */ # define BIO_TYPE_COMP (23|0x0200)/* filter */ # define BIO_TYPE_DESCRIPTOR 0x0100/* socket, fd, connect or accept */ # define BIO_TYPE_FILTER 0x0200 # define BIO_TYPE_SOURCE_SINK 0x0400 /* * BIO_FILENAME_READ|BIO_CLOSE to open or close on free. * BIO_set_fp(in,stdin,BIO_NOCLOSE); */ # define BIO_NOCLOSE 0x00 # define BIO_CLOSE 0x01 /* * These are used in the following macros and are passed to BIO_ctrl() */ # define BIO_CTRL_RESET 1/* opt - rewind/zero etc */ # define BIO_CTRL_EOF 2/* opt - are we at the eof */ # define BIO_CTRL_INFO 3/* opt - extra tit-bits */ # define BIO_CTRL_SET 4/* man - set the 'IO' type */ # define BIO_CTRL_GET 5/* man - get the 'IO' type */ # define BIO_CTRL_PUSH 6/* opt - internal, used to signify change */ # define BIO_CTRL_POP 7/* opt - internal, used to signify change */ # define BIO_CTRL_GET_CLOSE 8/* man - set the 'close' on free */ # define BIO_CTRL_SET_CLOSE 9/* man - set the 'close' on free */ # define BIO_CTRL_PENDING 10/* opt - is their more data buffered */ # define BIO_CTRL_FLUSH 11/* opt - 'flush' buffered output */ # define BIO_CTRL_DUP 12/* man - extra stuff for 'duped' BIO */ # define BIO_CTRL_WPENDING 13/* opt - number of bytes still to write */ /* callback is int cb(BIO *bio,state,ret); */ # define BIO_CTRL_SET_CALLBACK 14/* opt - set callback function */ # define BIO_CTRL_GET_CALLBACK 15/* opt - set callback function */ # define BIO_CTRL_SET_FILENAME 30/* BIO_s_file special */ /* dgram BIO stuff */ # define BIO_CTRL_DGRAM_CONNECT 31/* BIO dgram special */ # define BIO_CTRL_DGRAM_SET_CONNECTED 32/* allow for an externally connected * socket to be passed in */ # define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33/* setsockopt, essentially */ # define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34/* getsockopt, essentially */ # define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35/* setsockopt, essentially */ # define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */ # define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */ # define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation tiemd out */ /* #ifdef IP_MTU_DISCOVER */ # define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ /* #endif */ # define BIO_CTRL_DGRAM_QUERY_MTU 40/* as kernel for current MTU */ # define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47 # define BIO_CTRL_DGRAM_GET_MTU 41/* get cached value for MTU */ # define BIO_CTRL_DGRAM_SET_MTU 42/* set cached value for MTU. * want to use this if asking * the kernel fails */ # define BIO_CTRL_DGRAM_MTU_EXCEEDED 43/* check whether the MTU was * exceed in the previous write * operation */ # define BIO_CTRL_DGRAM_GET_PEER 46 # define BIO_CTRL_DGRAM_SET_PEER 44/* Destination for the data */ # define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45/* Next DTLS handshake timeout * to adjust socket timeouts */ # define BIO_CTRL_DGRAM_SET_DONT_FRAG 48 # define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD 49 # ifndef OPENSSL_NO_SCTP /* SCTP stuff */ # define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE 50 # define BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY 51 # define BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY 52 # define BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD 53 # define BIO_CTRL_DGRAM_SCTP_GET_SNDINFO 60 # define BIO_CTRL_DGRAM_SCTP_SET_SNDINFO 61 # define BIO_CTRL_DGRAM_SCTP_GET_RCVINFO 62 # define BIO_CTRL_DGRAM_SCTP_SET_RCVINFO 63 # define BIO_CTRL_DGRAM_SCTP_GET_PRINFO 64 # define BIO_CTRL_DGRAM_SCTP_SET_PRINFO 65 # define BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN 70 # endif /* modifiers */ # define BIO_FP_READ 0x02 # define BIO_FP_WRITE 0x04 # define BIO_FP_APPEND 0x08 # define BIO_FP_TEXT 0x10 # define BIO_FLAGS_READ 0x01 # define BIO_FLAGS_WRITE 0x02 # define BIO_FLAGS_IO_SPECIAL 0x04 # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) # define BIO_FLAGS_SHOULD_RETRY 0x08 # ifndef BIO_FLAGS_UPLINK /* * "UPLINK" flag denotes file descriptors provided by application. It * defaults to 0, as most platforms don't require UPLINK interface. */ # define BIO_FLAGS_UPLINK 0 # endif /* Used in BIO_gethostbyname() */ # define BIO_GHBN_CTRL_HITS 1 # define BIO_GHBN_CTRL_MISSES 2 # define BIO_GHBN_CTRL_CACHE_SIZE 3 # define BIO_GHBN_CTRL_GET_ENTRY 4 # define BIO_GHBN_CTRL_FLUSH 5 /* Mostly used in the SSL BIO */ /*- * Not used anymore * #define BIO_FLAGS_PROTOCOL_DELAYED_READ 0x10 * #define BIO_FLAGS_PROTOCOL_DELAYED_WRITE 0x20 * #define BIO_FLAGS_PROTOCOL_STARTUP 0x40 */ # define BIO_FLAGS_BASE64_NO_NL 0x100 /* * This is used with memory BIOs: it means we shouldn't free up or change the * data in any way. */ # define BIO_FLAGS_MEM_RDONLY 0x200 typedef struct bio_st BIO; void BIO_set_flags(BIO *b, int flags); int BIO_test_flags(const BIO *b, int flags); void BIO_clear_flags(BIO *b, int flags); # define BIO_get_flags(b) BIO_test_flags(b, ~(0x0)) # define BIO_set_retry_special(b) \ BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY)) # define BIO_set_retry_read(b) \ BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY)) # define BIO_set_retry_write(b) \ BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY)) /* These are normally used internally in BIOs */ # define BIO_clear_retry_flags(b) \ BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) # define BIO_get_retry_flags(b) \ BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) /* These should be used by the application to tell why we should retry */ # define BIO_should_read(a) BIO_test_flags(a, BIO_FLAGS_READ) # define BIO_should_write(a) BIO_test_flags(a, BIO_FLAGS_WRITE) # define BIO_should_io_special(a) BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL) # define BIO_retry_type(a) BIO_test_flags(a, BIO_FLAGS_RWS) # define BIO_should_retry(a) BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY) /* * The next three are used in conjunction with the BIO_should_io_special() * condition. After this returns true, BIO *BIO_get_retry_BIO(BIO *bio, int * *reason); will walk the BIO stack and return the 'reason' for the special * and the offending BIO. Given a BIO, BIO_get_retry_reason(bio) will return * the code. */ /* * Returned from the SSL bio when the certificate retrieval code had an error */ # define BIO_RR_SSL_X509_LOOKUP 0x01 /* Returned from the connect BIO when a connect would have blocked */ # define BIO_RR_CONNECT 0x02 /* Returned from the accept BIO when an accept would have blocked */ # define BIO_RR_ACCEPT 0x03 /* These are passed by the BIO callback */ # define BIO_CB_FREE 0x01 # define BIO_CB_READ 0x02 # define BIO_CB_WRITE 0x03 # define BIO_CB_PUTS 0x04 # define BIO_CB_GETS 0x05 # define BIO_CB_CTRL 0x06 /* * The callback is called before and after the underling operation, The * BIO_CB_RETURN flag indicates if it is after the call */ # define BIO_CB_RETURN 0x80 # define BIO_CB_return(a) ((a)|BIO_CB_RETURN) # define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) # define BIO_cb_post(a) ((a)&BIO_CB_RETURN) long (*BIO_get_callback(const BIO *b)) (struct bio_st *, int, const char *, int, long, long); void BIO_set_callback(BIO *b, long (*callback) (struct bio_st *, int, const char *, int, long, long)); char *BIO_get_callback_arg(const BIO *b); void BIO_set_callback_arg(BIO *b, char *arg); const char *BIO_method_name(const BIO *b); int BIO_method_type(const BIO *b); typedef void bio_info_cb (struct bio_st *, int, const char *, int, long, long); typedef struct bio_method_st { int type; const char *name; int (*bwrite) (BIO *, const char *, int); int (*bread) (BIO *, char *, int); int (*bputs) (BIO *, const char *); int (*bgets) (BIO *, char *, int); long (*ctrl) (BIO *, int, long, void *); int (*create) (BIO *); int (*destroy) (BIO *); long (*callback_ctrl) (BIO *, int, bio_info_cb *); } BIO_METHOD; struct bio_st { BIO_METHOD *method; /* bio, mode, argp, argi, argl, ret */ long (*callback) (struct bio_st *, int, const char *, int, long, long); char *cb_arg; /* first argument for the callback */ int init; int shutdown; int flags; /* extra storage */ int retry_reason; int num; void *ptr; struct bio_st *next_bio; /* used by filter BIOs */ struct bio_st *prev_bio; /* used by filter BIOs */ int references; unsigned long num_read; unsigned long num_write; CRYPTO_EX_DATA ex_data; }; DECLARE_STACK_OF(BIO) typedef struct bio_f_buffer_ctx_struct { /*- * Buffers are setup like this: * * <---------------------- size -----------------------> * +---------------------------------------------------+ * | consumed | remaining | free space | * +---------------------------------------------------+ * <-- off --><------- len -------> */ /*- BIO *bio; *//* * this is now in the BIO struct */ int ibuf_size; /* how big is the input buffer */ int obuf_size; /* how big is the output buffer */ char *ibuf; /* the char array */ int ibuf_len; /* how many bytes are in it */ int ibuf_off; /* write/read offset */ char *obuf; /* the char array */ int obuf_len; /* how many bytes are in it */ int obuf_off; /* write/read offset */ } BIO_F_BUFFER_CTX; /* Prefix and suffix callback in ASN1 BIO */ typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, void *parg); # ifndef OPENSSL_NO_SCTP /* SCTP parameter structs */ struct bio_dgram_sctp_sndinfo { uint16_t snd_sid; uint16_t snd_flags; uint32_t snd_ppid; uint32_t snd_context; }; struct bio_dgram_sctp_rcvinfo { uint16_t rcv_sid; uint16_t rcv_ssn; uint16_t rcv_flags; uint32_t rcv_ppid; uint32_t rcv_tsn; uint32_t rcv_cumtsn; uint32_t rcv_context; }; struct bio_dgram_sctp_prinfo { uint16_t pr_policy; uint32_t pr_value; }; # endif /* connect BIO stuff */ # define BIO_CONN_S_BEFORE 1 # define BIO_CONN_S_GET_IP 2 # define BIO_CONN_S_GET_PORT 3 # define BIO_CONN_S_CREATE_SOCKET 4 # define BIO_CONN_S_CONNECT 5 # define BIO_CONN_S_OK 6 # define BIO_CONN_S_BLOCKED_CONNECT 7 # define BIO_CONN_S_NBIO 8 /* * #define BIO_CONN_get_param_hostname BIO_ctrl */ # define BIO_C_SET_CONNECT 100 # define BIO_C_DO_STATE_MACHINE 101 # define BIO_C_SET_NBIO 102 # define BIO_C_SET_PROXY_PARAM 103 # define BIO_C_SET_FD 104 # define BIO_C_GET_FD 105 # define BIO_C_SET_FILE_PTR 106 # define BIO_C_GET_FILE_PTR 107 # define BIO_C_SET_FILENAME 108 # define BIO_C_SET_SSL 109 # define BIO_C_GET_SSL 110 # define BIO_C_SET_MD 111 # define BIO_C_GET_MD 112 # define BIO_C_GET_CIPHER_STATUS 113 # define BIO_C_SET_BUF_MEM 114 # define BIO_C_GET_BUF_MEM_PTR 115 # define BIO_C_GET_BUFF_NUM_LINES 116 # define BIO_C_SET_BUFF_SIZE 117 # define BIO_C_SET_ACCEPT 118 # define BIO_C_SSL_MODE 119 # define BIO_C_GET_MD_CTX 120 # define BIO_C_GET_PROXY_PARAM 121 # define BIO_C_SET_BUFF_READ_DATA 122/* data to read first */ # define BIO_C_GET_CONNECT 123 # define BIO_C_GET_ACCEPT 124 # define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125 # define BIO_C_GET_SSL_NUM_RENEGOTIATES 126 # define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127 # define BIO_C_FILE_SEEK 128 # define BIO_C_GET_CIPHER_CTX 129 # define BIO_C_SET_BUF_MEM_EOF_RETURN 130/* return end of input * value */ # define BIO_C_SET_BIND_MODE 131 # define BIO_C_GET_BIND_MODE 132 # define BIO_C_FILE_TELL 133 # define BIO_C_GET_SOCKS 134 # define BIO_C_SET_SOCKS 135 # define BIO_C_SET_WRITE_BUF_SIZE 136/* for BIO_s_bio */ # define BIO_C_GET_WRITE_BUF_SIZE 137 # define BIO_C_MAKE_BIO_PAIR 138 # define BIO_C_DESTROY_BIO_PAIR 139 # define BIO_C_GET_WRITE_GUARANTEE 140 # define BIO_C_GET_READ_REQUEST 141 # define BIO_C_SHUTDOWN_WR 142 # define BIO_C_NREAD0 143 # define BIO_C_NREAD 144 # define BIO_C_NWRITE0 145 # define BIO_C_NWRITE 146 # define BIO_C_RESET_READ_REQUEST 147 # define BIO_C_SET_MD_CTX 148 # define BIO_C_SET_PREFIX 149 # define BIO_C_GET_PREFIX 150 # define BIO_C_SET_SUFFIX 151 # define BIO_C_GET_SUFFIX 152 # define BIO_C_SET_EX_ARG 153 # define BIO_C_GET_EX_ARG 154 # define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg) # define BIO_get_app_data(s) BIO_get_ex_data(s,0) /* BIO_s_connect() and BIO_s_socks4a_connect() */ # define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0,(char *)name) # define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1,(char *)port) # define BIO_set_conn_ip(b,ip) BIO_ctrl(b,BIO_C_SET_CONNECT,2,(char *)ip) # define BIO_set_conn_int_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,3,(char *)port) # define BIO_get_conn_hostname(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0) # define BIO_get_conn_port(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1) # define BIO_get_conn_ip(b) BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2) # define BIO_get_conn_int_port(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,NULL) # define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) /* BIO_s_accept() */ # define BIO_set_accept_port(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0,(char *)name) # define BIO_get_accept_port(b) BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0) /* #define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */ # define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(n)?(void *)"a":NULL) # define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(char *)bio) # define BIO_BIND_NORMAL 0 # define BIO_BIND_REUSEADDR_IF_UNUSED 1 # define BIO_BIND_REUSEADDR 2 # define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) # define BIO_get_bind_mode(b,mode) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) /* BIO_s_accept() and BIO_s_connect() */ # define BIO_do_connect(b) BIO_do_handshake(b) # define BIO_do_accept(b) BIO_do_handshake(b) # define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) /* BIO_s_proxy_client() */ # define BIO_set_url(b,url) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,0,(char *)(url)) # define BIO_set_proxies(b,p) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,1,(char *)(p)) /* BIO_set_nbio(b,n) */ # define BIO_set_filter_bio(b,s) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,2,(char *)(s)) /* BIO *BIO_get_filter_bio(BIO *bio); */ # define BIO_set_proxy_cb(b,cb) BIO_callback_ctrl(b,BIO_C_SET_PROXY_PARAM,3,(void *(*cb)())) # define BIO_set_proxy_header(b,sk) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,4,(char *)sk) # define BIO_set_no_connect_return(b,bool) BIO_int_ctrl(b,BIO_C_SET_PROXY_PARAM,5,bool) # define BIO_get_proxy_header(b,skp) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,0,(char *)skp) # define BIO_get_proxies(b,pxy_p) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,1,(char *)(pxy_p)) # define BIO_get_url(b,url) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,2,(char *)(url)) # define BIO_get_no_connect_return(b) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,5,NULL) /* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ # define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd) # define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)c) /* BIO_s_file() */ # define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)fp) # define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)fpp) /* BIO_s_fd() and BIO_s_file() */ # define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) # define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL) /* * name is cast to lose const, but might be better to route through a * function so we can do it safely */ # ifdef CONST_STRICT /* * If you are wondering why this isn't defined, its because CONST_STRICT is * purely a compile-time kludge to allow const to be checked. */ int BIO_read_filename(BIO *b, const char *name); # else # define BIO_read_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ BIO_CLOSE|BIO_FP_READ,(char *)name) # endif # define BIO_write_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ BIO_CLOSE|BIO_FP_WRITE,name) # define BIO_append_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ BIO_CLOSE|BIO_FP_APPEND,name) # define BIO_rw_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \ BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name) /* * WARNING WARNING, this ups the reference count on the read bio of the SSL * structure. This is because the ssl read BIO is now pointed to by the * next_bio field in the bio. So when you free the BIO, make sure you are * doing a BIO_free_all() to catch the underlying BIO. */ # define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)ssl) # define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)sslp) # define BIO_set_ssl_mode(b,client) BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL) # define BIO_set_ssl_renegotiate_bytes(b,num) \ BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL); # define BIO_get_num_renegotiates(b) \ BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL); # define BIO_set_ssl_renegotiate_timeout(b,seconds) \ BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL); /* defined in evp.h */ /* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)md) */ # define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp) # define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)bm) # define BIO_get_mem_ptr(b,pp) BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0,(char *)pp) # define BIO_set_mem_eof_return(b,v) \ BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL) /* For the BIO_f_buffer() type */ # define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL) # define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL) # define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0) # define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1) # define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf) /* Don't use the next one unless you know what you are doing :-) */ # define BIO_dup_state(b,ret) BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret)) # define BIO_reset(b) (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL) # define BIO_eof(b) (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL) # define BIO_set_close(b,c) (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL) # define BIO_get_close(b) (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL) # define BIO_pending(b) (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) # define BIO_wpending(b) (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL) /* ...pending macros have inappropriate return type */ size_t BIO_ctrl_pending(BIO *b); size_t BIO_ctrl_wpending(BIO *b); # define BIO_flush(b) (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL) # define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \ cbp) # define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb) /* For the BIO_f_buffer() type */ # define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL) /* For BIO_s_bio() */ # define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL) # define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL) # define BIO_make_bio_pair(b1,b2) (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2) # define BIO_destroy_bio_pair(b) (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL) # define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL) /* macros with inappropriate type -- but ...pending macros use int too: */ # define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL) # define BIO_get_read_request(b) (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL) size_t BIO_ctrl_get_write_guarantee(BIO *b); size_t BIO_ctrl_get_read_request(BIO *b); int BIO_ctrl_reset_read_request(BIO *b); /* ctrl macros for dgram */ # define BIO_ctrl_dgram_connect(b,peer) \ (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)peer) # define BIO_ctrl_set_connected(b, state, peer) \ (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, state, (char *)peer) # define BIO_dgram_recv_timedout(b) \ (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL) # define BIO_dgram_send_timedout(b) \ (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL) # define BIO_dgram_get_peer(b,peer) \ (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)peer) # define BIO_dgram_set_peer(b,peer) \ (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)peer) # define BIO_dgram_get_mtu_overhead(b) \ (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) /* These two aren't currently implemented */ /* int BIO_get_ex_num(BIO *bio); */ /* void BIO_set_ex_free_func(BIO *bio,int idx,void (*cb)()); */ int BIO_set_ex_data(BIO *bio, int idx, void *data); void *BIO_get_ex_data(BIO *bio, int idx); int BIO_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); unsigned long BIO_number_read(BIO *bio); unsigned long BIO_number_written(BIO *bio); /* For BIO_f_asn1() */ int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix, asn1_ps_func *prefix_free); int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix, asn1_ps_func **pprefix_free); int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix, asn1_ps_func *suffix_free); int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, asn1_ps_func **psuffix_free); # ifndef OPENSSL_NO_FP_API BIO_METHOD *BIO_s_file(void); BIO *BIO_new_file(const char *filename, const char *mode); BIO *BIO_new_fp(FILE *stream, int close_flag); # define BIO_s_file_internal BIO_s_file # endif BIO *BIO_new(BIO_METHOD *type); int BIO_set(BIO *a, BIO_METHOD *type); int BIO_free(BIO *a); void BIO_vfree(BIO *a); int BIO_read(BIO *b, void *data, int len); int BIO_gets(BIO *bp, char *buf, int size); int BIO_write(BIO *b, const void *data, int len); int BIO_puts(BIO *bp, const char *buf); int BIO_indent(BIO *b, int indent, int max); long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); long BIO_callback_ctrl(BIO *b, int cmd, void (*fp) (struct bio_st *, int, const char *, int, long, long)); char *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); BIO *BIO_push(BIO *b, BIO *append); BIO *BIO_pop(BIO *b); void BIO_free_all(BIO *a); BIO *BIO_find_type(BIO *b, int bio_type); BIO *BIO_next(BIO *b); BIO *BIO_get_retry_BIO(BIO *bio, int *reason); int BIO_get_retry_reason(BIO *bio); BIO *BIO_dup_chain(BIO *in); int BIO_nread0(BIO *bio, char **buf); int BIO_nread(BIO *bio, char **buf, int num); int BIO_nwrite0(BIO *bio, char **buf); int BIO_nwrite(BIO *bio, char **buf, int num); long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, long argl, long ret); BIO_METHOD *BIO_s_mem(void); BIO *BIO_new_mem_buf(const void *buf, int len); BIO_METHOD *BIO_s_socket(void); BIO_METHOD *BIO_s_connect(void); BIO_METHOD *BIO_s_accept(void); BIO_METHOD *BIO_s_fd(void); # ifndef OPENSSL_SYS_OS2 BIO_METHOD *BIO_s_log(void); # endif BIO_METHOD *BIO_s_bio(void); BIO_METHOD *BIO_s_null(void); BIO_METHOD *BIO_f_null(void); BIO_METHOD *BIO_f_buffer(void); # ifdef OPENSSL_SYS_VMS BIO_METHOD *BIO_f_linebuffer(void); # endif BIO_METHOD *BIO_f_nbio_test(void); # ifndef OPENSSL_NO_DGRAM BIO_METHOD *BIO_s_datagram(void); # ifndef OPENSSL_NO_SCTP BIO_METHOD *BIO_s_datagram_sctp(void); # endif # endif /* BIO_METHOD *BIO_f_ber(void); */ int BIO_sock_should_retry(int i); int BIO_sock_non_fatal_error(int error); int BIO_dgram_non_fatal_error(int error); int BIO_fd_should_retry(int i); int BIO_fd_non_fatal_error(int error); int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), void *u, const char *s, int len); int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), void *u, const char *s, int len, int indent); int BIO_dump(BIO *b, const char *bytes, int len); int BIO_dump_indent(BIO *b, const char *bytes, int len, int indent); # ifndef OPENSSL_NO_FP_API int BIO_dump_fp(FILE *fp, const char *s, int len); int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent); # endif int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data, int datalen); struct hostent *BIO_gethostbyname(const char *name); /*- * We might want a thread-safe interface too: * struct hostent *BIO_gethostbyname_r(const char *name, * struct hostent *result, void *buffer, size_t buflen); * or something similar (caller allocates a struct hostent, * pointed to by "result", and additional buffer space for the various * substructures; if the buffer does not suffice, NULL is returned * and an appropriate error code is set). */ int BIO_sock_error(int sock); int BIO_socket_ioctl(int fd, long type, void *arg); int BIO_socket_nbio(int fd, int mode); int BIO_get_port(const char *str, unsigned short *port_ptr); int BIO_get_host_ip(const char *str, unsigned char *ip); int BIO_get_accept_socket(char *host_port, int mode); int BIO_accept(int sock, char **ip_port); int BIO_sock_init(void); void BIO_sock_cleanup(void); int BIO_set_tcp_ndelay(int sock, int turn_on); BIO *BIO_new_socket(int sock, int close_flag); BIO *BIO_new_dgram(int fd, int close_flag); # ifndef OPENSSL_NO_SCTP BIO *BIO_new_dgram_sctp(int fd, int close_flag); int BIO_dgram_is_sctp(BIO *bio); int BIO_dgram_sctp_notification_cb(BIO *b, void (*handle_notifications) (BIO *bio, void *context, void *buf), void *context); int BIO_dgram_sctp_wait_for_dry(BIO *b); int BIO_dgram_sctp_msg_waiting(BIO *b); # endif BIO *BIO_new_fd(int fd, int close_flag); BIO *BIO_new_connect(const char *host_port); BIO *BIO_new_accept(const char *host_port); int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, BIO **bio2, size_t writebuf2); /* * If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints. * Otherwise returns 0 and sets *bio1 and *bio2 to NULL. Size 0 uses default * value. */ void BIO_copy_next_retry(BIO *b); /* * long BIO_ghbn_ctrl(int cmd,int iarg,char *parg); */ # ifdef __GNUC__ # define __bio_h__attr__ __attribute__ # else # define __bio_h__attr__(x) # endif int BIO_printf(BIO *bio, const char *format, ...) __bio_h__attr__((__format__(__printf__, 2, 3))); int BIO_vprintf(BIO *bio, const char *format, va_list args) __bio_h__attr__((__format__(__printf__, 2, 0))); int BIO_snprintf(char *buf, size_t n, const char *format, ...) __bio_h__attr__((__format__(__printf__, 3, 4))); int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) __bio_h__attr__((__format__(__printf__, 3, 0))); # undef __bio_h__attr__ /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_BIO_strings(void); /* Error codes for the BIO functions. */ /* Function codes. */ # define BIO_F_ACPT_STATE 100 # define BIO_F_BIO_ACCEPT 101 # define BIO_F_BIO_BER_GET_HEADER 102 # define BIO_F_BIO_CALLBACK_CTRL 131 # define BIO_F_BIO_CTRL 103 # define BIO_F_BIO_GETHOSTBYNAME 120 # define BIO_F_BIO_GETS 104 # define BIO_F_BIO_GET_ACCEPT_SOCKET 105 # define BIO_F_BIO_GET_HOST_IP 106 # define BIO_F_BIO_GET_PORT 107 # define BIO_F_BIO_MAKE_PAIR 121 # define BIO_F_BIO_NEW 108 # define BIO_F_BIO_NEW_FILE 109 # define BIO_F_BIO_NEW_MEM_BUF 126 # define BIO_F_BIO_NREAD 123 # define BIO_F_BIO_NREAD0 124 # define BIO_F_BIO_NWRITE 125 # define BIO_F_BIO_NWRITE0 122 # define BIO_F_BIO_PUTS 110 # define BIO_F_BIO_READ 111 # define BIO_F_BIO_SOCK_INIT 112 # define BIO_F_BIO_WRITE 113 # define BIO_F_BUFFER_CTRL 114 # define BIO_F_CONN_CTRL 127 # define BIO_F_CONN_STATE 115 # define BIO_F_DGRAM_SCTP_READ 132 # define BIO_F_DGRAM_SCTP_WRITE 133 # define BIO_F_FILE_CTRL 116 # define BIO_F_FILE_READ 130 # define BIO_F_LINEBUFFER_CTRL 129 # define BIO_F_MEM_READ 128 # define BIO_F_MEM_WRITE 117 # define BIO_F_SSL_NEW 118 # define BIO_F_WSASTARTUP 119 /* Reason codes. */ # define BIO_R_ACCEPT_ERROR 100 # define BIO_R_BAD_FOPEN_MODE 101 # define BIO_R_BAD_HOSTNAME_LOOKUP 102 # define BIO_R_BROKEN_PIPE 124 # define BIO_R_CONNECT_ERROR 103 # define BIO_R_EOF_ON_MEMORY_BIO 127 # define BIO_R_ERROR_SETTING_NBIO 104 # define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPTED_SOCKET 105 # define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPT_SOCKET 106 # define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 # define BIO_R_INVALID_ARGUMENT 125 # define BIO_R_INVALID_IP_ADDRESS 108 # define BIO_R_IN_USE 123 # define BIO_R_KEEPALIVE 109 # define BIO_R_NBIO_CONNECT_ERROR 110 # define BIO_R_NO_ACCEPT_PORT_SPECIFIED 111 # define BIO_R_NO_HOSTNAME_SPECIFIED 112 # define BIO_R_NO_PORT_DEFINED 113 # define BIO_R_NO_PORT_SPECIFIED 114 # define BIO_R_NO_SUCH_FILE 128 # define BIO_R_NULL_PARAMETER 115 # define BIO_R_TAG_MISMATCH 116 # define BIO_R_UNABLE_TO_BIND_SOCKET 117 # define BIO_R_UNABLE_TO_CREATE_SOCKET 118 # define BIO_R_UNABLE_TO_LISTEN_SOCKET 119 # define BIO_R_UNINITIALIZED 120 # define BIO_R_UNSUPPORTED_METHOD 121 # define BIO_R_WRITE_TO_READ_ONLY_BIO 126 # define BIO_R_WSASTARTUP 122 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/blowfish.h ================================================ /* crypto/bf/blowfish.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_BLOWFISH_H # define HEADER_BLOWFISH_H # include #ifdef __cplusplus extern "C" { #endif # ifdef OPENSSL_NO_BF # error BF is disabled. # endif # define BF_ENCRYPT 1 # define BF_DECRYPT 0 /*- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! BF_LONG has to be at least 32 bits wide. If it's wider, then ! * ! BF_LONG_LOG2 has to be defined along. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ # if defined(__LP32__) # define BF_LONG unsigned long # elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) # define BF_LONG unsigned long # define BF_LONG_LOG2 3 /* * _CRAY note. I could declare short, but I have no idea what impact * does it have on performance on none-T3E machines. I could declare * int, but at least on C90 sizeof(int) can be chosen at compile time. * So I've chosen long... * */ # else # define BF_LONG unsigned int # endif # define BF_ROUNDS 16 # define BF_BLOCK 8 typedef struct bf_key_st { BF_LONG P[BF_ROUNDS + 2]; BF_LONG S[4 * 256]; } BF_KEY; # ifdef OPENSSL_FIPS void private_BF_set_key(BF_KEY *key, int len, const unsigned char *data); # endif void BF_set_key(BF_KEY *key, int len, const unsigned char *data); void BF_encrypt(BF_LONG *data, const BF_KEY *key); void BF_decrypt(BF_LONG *data, const BF_KEY *key); void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, const BF_KEY *key, int enc); void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, const BF_KEY *schedule, unsigned char *ivec, int enc); void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, const BF_KEY *schedule, unsigned char *ivec, int *num, int enc); void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, const BF_KEY *schedule, unsigned char *ivec, int *num); const char *BF_options(void); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/bn.h ================================================ /* crypto/bn/bn.h */ /* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * * Portions of the attached software ("Contribution") are developed by * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. * * The Contribution is licensed pursuant to the Eric Young open source * license provided above. * * The binary polynomial arithmetic software is originally written by * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. * */ #ifndef HEADER_BN_H # define HEADER_BN_H # include # include # ifndef OPENSSL_NO_FP_API # include /* FILE */ # endif # include # include #ifdef __cplusplus extern "C" { #endif /* * These preprocessor symbols control various aspects of the bignum headers * and library code. They're not defined by any "normal" configuration, as * they are intended for development and testing purposes. NB: defining all * three can be useful for debugging application code as well as openssl * itself. BN_DEBUG - turn on various debugging alterations to the bignum * code BN_DEBUG_RAND - uses random poisoning of unused words to trip up * mismanagement of bignum internals. You must also define BN_DEBUG. */ /* #define BN_DEBUG */ /* #define BN_DEBUG_RAND */ # ifndef OPENSSL_SMALL_FOOTPRINT # define BN_MUL_COMBA # define BN_SQR_COMBA # define BN_RECURSION # endif /* * This next option uses the C libraries (2 word)/(1 word) function. If it is * not defined, I use my C version (which is slower). The reason for this * flag is that when the particular C compiler library routine is used, and * the library is linked with a different compiler, the library is missing. * This mostly happens when the library is built with gcc and then linked * using normal cc. This would be a common occurrence because gcc normally * produces code that is 2 times faster than system compilers for the big * number stuff. For machines with only one compiler (or shared libraries), * this should be on. Again this in only really a problem on machines using * "long long's", are 32bit, and are not using my assembler code. */ # if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS) || \ defined(OPENSSL_SYS_WIN32) || defined(linux) # ifndef BN_DIV2W # define BN_DIV2W # endif # endif /* * assuming long is 64bit - this is the DEC Alpha unsigned long long is only * 64 bits :-(, don't define BN_LLONG for the DEC Alpha */ # ifdef SIXTY_FOUR_BIT_LONG # define BN_ULLONG unsigned long long # define BN_ULONG unsigned long # define BN_LONG long # define BN_BITS 128 # define BN_BYTES 8 # define BN_BITS2 64 # define BN_BITS4 32 # define BN_MASK (0xffffffffffffffffffffffffffffffffLL) # define BN_MASK2 (0xffffffffffffffffL) # define BN_MASK2l (0xffffffffL) # define BN_MASK2h (0xffffffff00000000L) # define BN_MASK2h1 (0xffffffff80000000L) # define BN_TBIT (0x8000000000000000L) # define BN_DEC_CONV (10000000000000000000UL) # define BN_DEC_FMT1 "%lu" # define BN_DEC_FMT2 "%019lu" # define BN_DEC_NUM 19 # define BN_HEX_FMT1 "%lX" # define BN_HEX_FMT2 "%016lX" # endif /* * This is where the long long data type is 64 bits, but long is 32. For * machines where there are 64bit registers, this is the mode to use. IRIX, * on R4000 and above should use this mode, along with the relevant assembler * code :-). Do NOT define BN_LLONG. */ # ifdef SIXTY_FOUR_BIT # undef BN_LLONG # undef BN_ULLONG # define BN_ULONG unsigned long long # define BN_LONG long long # define BN_BITS 128 # define BN_BYTES 8 # define BN_BITS2 64 # define BN_BITS4 32 # define BN_MASK2 (0xffffffffffffffffLL) # define BN_MASK2l (0xffffffffL) # define BN_MASK2h (0xffffffff00000000LL) # define BN_MASK2h1 (0xffffffff80000000LL) # define BN_TBIT (0x8000000000000000LL) # define BN_DEC_CONV (10000000000000000000ULL) # define BN_DEC_FMT1 "%llu" # define BN_DEC_FMT2 "%019llu" # define BN_DEC_NUM 19 # define BN_HEX_FMT1 "%llX" # define BN_HEX_FMT2 "%016llX" # endif # ifdef THIRTY_TWO_BIT # ifdef BN_LLONG # if defined(_WIN32) && !defined(__GNUC__) # define BN_ULLONG unsigned __int64 # define BN_MASK (0xffffffffffffffffI64) # else # define BN_ULLONG unsigned long long # define BN_MASK (0xffffffffffffffffLL) # endif # endif # define BN_ULONG unsigned int # define BN_LONG int # define BN_BITS 64 # define BN_BYTES 4 # define BN_BITS2 32 # define BN_BITS4 16 # define BN_MASK2 (0xffffffffL) # define BN_MASK2l (0xffff) # define BN_MASK2h1 (0xffff8000L) # define BN_MASK2h (0xffff0000L) # define BN_TBIT (0x80000000L) # define BN_DEC_CONV (1000000000L) # define BN_DEC_FMT1 "%u" # define BN_DEC_FMT2 "%09u" # define BN_DEC_NUM 9 # define BN_HEX_FMT1 "%X" # define BN_HEX_FMT2 "%08X" # endif # define BN_DEFAULT_BITS 1280 # define BN_FLG_MALLOCED 0x01 # define BN_FLG_STATIC_DATA 0x02 /* * avoid leaking exponent information through timing, * BN_mod_exp_mont() will call BN_mod_exp_mont_consttime, * BN_div() will call BN_div_no_branch, * BN_mod_inverse() will call BN_mod_inverse_no_branch. */ # define BN_FLG_CONSTTIME 0x04 # ifdef OPENSSL_NO_DEPRECATED /* deprecated name for the flag */ # define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME /* * avoid leaking exponent information through timings * (BN_mod_exp_mont() will call BN_mod_exp_mont_consttime) */ # endif # ifndef OPENSSL_NO_DEPRECATED # define BN_FLG_FREE 0x8000 /* used for debuging */ # endif # define BN_set_flags(b,n) ((b)->flags|=(n)) # define BN_get_flags(b,n) ((b)->flags&(n)) /* * get a clone of a BIGNUM with changed flags, for *temporary* use only (the * two BIGNUMs cannot not be used in parallel!) */ # define BN_with_flags(dest,b,n) ((dest)->d=(b)->d, \ (dest)->top=(b)->top, \ (dest)->dmax=(b)->dmax, \ (dest)->neg=(b)->neg, \ (dest)->flags=(((dest)->flags & BN_FLG_MALLOCED) \ | ((b)->flags & ~BN_FLG_MALLOCED) \ | BN_FLG_STATIC_DATA \ | (n))) /* Already declared in ossl_typ.h */ # if 0 typedef struct bignum_st BIGNUM; /* Used for temp variables (declaration hidden in bn_lcl.h) */ typedef struct bignum_ctx BN_CTX; typedef struct bn_blinding_st BN_BLINDING; typedef struct bn_mont_ctx_st BN_MONT_CTX; typedef struct bn_recp_ctx_st BN_RECP_CTX; typedef struct bn_gencb_st BN_GENCB; # endif struct bignum_st { BN_ULONG *d; /* Pointer to an array of 'BN_BITS2' bit * chunks. */ int top; /* Index of last used d +1. */ /* The next are internal book keeping for bn_expand. */ int dmax; /* Size of the d array. */ int neg; /* one if the number is negative */ int flags; }; /* Used for montgomery multiplication */ struct bn_mont_ctx_st { int ri; /* number of bits in R */ BIGNUM RR; /* used to convert to montgomery form */ BIGNUM N; /* The modulus */ BIGNUM Ni; /* R*(1/R mod N) - N*Ni = 1 (Ni is only * stored for bignum algorithm) */ BN_ULONG n0[2]; /* least significant word(s) of Ni; (type * changed with 0.9.9, was "BN_ULONG n0;" * before) */ int flags; }; /* * Used for reciprocal division/mod functions It cannot be shared between * threads */ struct bn_recp_ctx_st { BIGNUM N; /* the divisor */ BIGNUM Nr; /* the reciprocal */ int num_bits; int shift; int flags; }; /* Used for slow "generation" functions. */ struct bn_gencb_st { unsigned int ver; /* To handle binary (in)compatibility */ void *arg; /* callback-specific data */ union { /* if(ver==1) - handles old style callbacks */ void (*cb_1) (int, int, void *); /* if(ver==2) - new callback style */ int (*cb_2) (int, int, BN_GENCB *); } cb; }; /* Wrapper function to make using BN_GENCB easier, */ int BN_GENCB_call(BN_GENCB *cb, int a, int b); /* Macro to populate a BN_GENCB structure with an "old"-style callback */ # define BN_GENCB_set_old(gencb, callback, cb_arg) { \ BN_GENCB *tmp_gencb = (gencb); \ tmp_gencb->ver = 1; \ tmp_gencb->arg = (cb_arg); \ tmp_gencb->cb.cb_1 = (callback); } /* Macro to populate a BN_GENCB structure with a "new"-style callback */ # define BN_GENCB_set(gencb, callback, cb_arg) { \ BN_GENCB *tmp_gencb = (gencb); \ tmp_gencb->ver = 2; \ tmp_gencb->arg = (cb_arg); \ tmp_gencb->cb.cb_2 = (callback); } # define BN_prime_checks 0 /* default: select number of iterations based * on the size of the number */ /* * number of Miller-Rabin iterations for an error rate of less than 2^-80 for * random 'b'-bit input, b >= 100 (taken from table 4.4 in the Handbook of * Applied Cryptography [Menezes, van Oorschot, Vanstone; CRC Press 1996]; * original paper: Damgaard, Landrock, Pomerance: Average case error * estimates for the strong probable prime test. -- Math. Comp. 61 (1993) * 177-194) */ # define BN_prime_checks_for_size(b) ((b) >= 1300 ? 2 : \ (b) >= 850 ? 3 : \ (b) >= 650 ? 4 : \ (b) >= 550 ? 5 : \ (b) >= 450 ? 6 : \ (b) >= 400 ? 7 : \ (b) >= 350 ? 8 : \ (b) >= 300 ? 9 : \ (b) >= 250 ? 12 : \ (b) >= 200 ? 15 : \ (b) >= 150 ? 18 : \ /* b >= 100 */ 27) # define BN_num_bytes(a) ((BN_num_bits(a)+7)/8) /* Note that BN_abs_is_word didn't work reliably for w == 0 until 0.9.8 */ # define BN_abs_is_word(a,w) ((((a)->top == 1) && ((a)->d[0] == (BN_ULONG)(w))) || \ (((w) == 0) && ((a)->top == 0))) # define BN_is_zero(a) ((a)->top == 0) # define BN_is_one(a) (BN_abs_is_word((a),1) && !(a)->neg) # define BN_is_word(a,w) (BN_abs_is_word((a),(w)) && (!(w) || !(a)->neg)) # define BN_is_odd(a) (((a)->top > 0) && ((a)->d[0] & 1)) # define BN_one(a) (BN_set_word((a),1)) # define BN_zero_ex(a) \ do { \ BIGNUM *_tmp_bn = (a); \ _tmp_bn->top = 0; \ _tmp_bn->neg = 0; \ } while(0) # ifdef OPENSSL_NO_DEPRECATED # define BN_zero(a) BN_zero_ex(a) # else # define BN_zero(a) (BN_set_word((a),0)) # endif const BIGNUM *BN_value_one(void); char *BN_options(void); BN_CTX *BN_CTX_new(void); # ifndef OPENSSL_NO_DEPRECATED void BN_CTX_init(BN_CTX *c); # endif void BN_CTX_free(BN_CTX *c); void BN_CTX_start(BN_CTX *ctx); BIGNUM *BN_CTX_get(BN_CTX *ctx); void BN_CTX_end(BN_CTX *ctx); int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); int BN_rand_range(BIGNUM *rnd, const BIGNUM *range); int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range); int BN_num_bits(const BIGNUM *a); int BN_num_bits_word(BN_ULONG); BIGNUM *BN_new(void); void BN_init(BIGNUM *); void BN_clear_free(BIGNUM *a); BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b); void BN_swap(BIGNUM *a, BIGNUM *b); BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret); int BN_bn2bin(const BIGNUM *a, unsigned char *to); BIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret); int BN_bn2mpi(const BIGNUM *a, unsigned char *to); int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx); /** BN_set_negative sets sign of a BIGNUM * \param b pointer to the BIGNUM object * \param n 0 if the BIGNUM b should be positive and a value != 0 otherwise */ void BN_set_negative(BIGNUM *b, int n); /** BN_is_negative returns 1 if the BIGNUM is negative * \param a pointer to the BIGNUM object * \return 1 if a < 0 and 0 otherwise */ # define BN_is_negative(a) ((a)->neg != 0) int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); # define BN_mod(rem,m,d,ctx) BN_div(NULL,(rem),(m),(d),(ctx)) int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx); int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m); int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx); int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m); int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_CTX *ctx); int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m); int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, BN_CTX *ctx); int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m); BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w); BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w); int BN_mul_word(BIGNUM *a, BN_ULONG w); int BN_add_word(BIGNUM *a, BN_ULONG w); int BN_sub_word(BIGNUM *a, BN_ULONG w); int BN_set_word(BIGNUM *a, BN_ULONG w); BN_ULONG BN_get_word(const BIGNUM *a); int BN_cmp(const BIGNUM *a, const BIGNUM *b); void BN_free(BIGNUM *a); int BN_is_bit_set(const BIGNUM *a, int n); int BN_lshift(BIGNUM *r, const BIGNUM *a, int n); int BN_lshift1(BIGNUM *r, const BIGNUM *a); int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx); int BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *in_mont); int BN_mod_exp_mont_word(BIGNUM *r, BN_ULONG a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1, const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx); int BN_mask_bits(BIGNUM *a, int n); # ifndef OPENSSL_NO_FP_API int BN_print_fp(FILE *fp, const BIGNUM *a); # endif # ifdef HEADER_BIO_H int BN_print(BIO *fp, const BIGNUM *a); # else int BN_print(void *fp, const BIGNUM *a); # endif int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx); int BN_rshift(BIGNUM *r, const BIGNUM *a, int n); int BN_rshift1(BIGNUM *r, const BIGNUM *a); void BN_clear(BIGNUM *a); BIGNUM *BN_dup(const BIGNUM *a); int BN_ucmp(const BIGNUM *a, const BIGNUM *b); int BN_set_bit(BIGNUM *a, int n); int BN_clear_bit(BIGNUM *a, int n); char *BN_bn2hex(const BIGNUM *a); char *BN_bn2dec(const BIGNUM *a); int BN_hex2bn(BIGNUM **a, const char *str); int BN_dec2bn(BIGNUM **a, const char *str); int BN_asc2bn(BIGNUM **a, const char *str); int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /* returns * -2 for * error */ BIGNUM *BN_mod_inverse(BIGNUM *ret, const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); BIGNUM *BN_mod_sqrt(BIGNUM *ret, const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); /* Deprecated versions */ # ifndef OPENSSL_NO_DEPRECATED BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, const BIGNUM *add, const BIGNUM *rem, void (*callback) (int, int, void *), void *cb_arg); int BN_is_prime(const BIGNUM *p, int nchecks, void (*callback) (int, int, void *), BN_CTX *ctx, void *cb_arg); int BN_is_prime_fasttest(const BIGNUM *p, int nchecks, void (*callback) (int, int, void *), BN_CTX *ctx, void *cb_arg, int do_trial_division); # endif /* !defined(OPENSSL_NO_DEPRECATED) */ /* Newer versions */ int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, const BIGNUM *rem, BN_GENCB *cb); int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb); int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, int do_trial_division, BN_GENCB *cb); int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx); int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, const BIGNUM *Xp, const BIGNUM *Xp1, const BIGNUM *Xp2, const BIGNUM *e, BN_CTX *ctx, BN_GENCB *cb); int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, BIGNUM *Xp1, BIGNUM *Xp2, const BIGNUM *Xp, const BIGNUM *e, BN_CTX *ctx, BN_GENCB *cb); BN_MONT_CTX *BN_MONT_CTX_new(void); void BN_MONT_CTX_init(BN_MONT_CTX *ctx); int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_MONT_CTX *mont, BN_CTX *ctx); # define BN_to_montgomery(r,a,mont,ctx) BN_mod_mul_montgomery(\ (r),(a),&((mont)->RR),(mont),(ctx)) int BN_from_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, BN_CTX *ctx); void BN_MONT_CTX_free(BN_MONT_CTX *mont); int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx); BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from); BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, int lock, const BIGNUM *mod, BN_CTX *ctx); /* BN_BLINDING flags */ # define BN_BLINDING_NO_UPDATE 0x00000001 # define BN_BLINDING_NO_RECREATE 0x00000002 BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod); void BN_BLINDING_free(BN_BLINDING *b); int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx); int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *); int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, BN_CTX *); # ifndef OPENSSL_NO_DEPRECATED unsigned long BN_BLINDING_get_thread_id(const BN_BLINDING *); void BN_BLINDING_set_thread_id(BN_BLINDING *, unsigned long); # endif CRYPTO_THREADID *BN_BLINDING_thread_id(BN_BLINDING *); unsigned long BN_BLINDING_get_flags(const BN_BLINDING *); void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long); BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, const BIGNUM *e, BIGNUM *m, BN_CTX *ctx, int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx), BN_MONT_CTX *m_ctx); # ifndef OPENSSL_NO_DEPRECATED void BN_set_params(int mul, int high, int low, int mont); int BN_get_params(int which); /* 0, mul, 1 high, 2 low, 3 mont */ # endif void BN_RECP_CTX_init(BN_RECP_CTX *recp); BN_RECP_CTX *BN_RECP_CTX_new(void); void BN_RECP_CTX_free(BN_RECP_CTX *recp); int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *rdiv, BN_CTX *ctx); int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y, BN_RECP_CTX *recp, BN_CTX *ctx); int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx); int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, BN_RECP_CTX *recp, BN_CTX *ctx); # ifndef OPENSSL_NO_EC2M /* * Functions for arithmetic over binary polynomials represented by BIGNUMs. * The BIGNUM::neg property of BIGNUMs representing binary polynomials is * ignored. Note that input arguments are not const so that their bit arrays * can be expanded to the appropriate size if needed. */ /* * r = a + b */ int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); # define BN_GF2m_sub(r, a, b) BN_GF2m_add(r, a, b) /* * r=a mod p */ int BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p); /* r = (a * b) mod p */ int BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx); /* r = (a * a) mod p */ int BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); /* r = (1 / b) mod p */ int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx); /* r = (a / b) mod p */ int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx); /* r = (a ^ b) mod p */ int BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx); /* r = sqrt(a) mod p */ int BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); /* r^2 + r = a mod p */ int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); # define BN_GF2m_cmp(a, b) BN_ucmp((a), (b)) /*- * Some functions allow for representation of the irreducible polynomials * as an unsigned int[], say p. The irreducible f(t) is then of the form: * t^p[0] + t^p[1] + ... + t^p[k] * where m = p[0] > p[1] > ... > p[k] = 0. */ /* r = a mod p */ int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]); /* r = (a * b) mod p */ int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const int p[], BN_CTX *ctx); /* r = (a * a) mod p */ int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[], BN_CTX *ctx); /* r = (1 / b) mod p */ int BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[], BN_CTX *ctx); /* r = (a / b) mod p */ int BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const int p[], BN_CTX *ctx); /* r = (a ^ b) mod p */ int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const int p[], BN_CTX *ctx); /* r = sqrt(a) mod p */ int BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a, const int p[], BN_CTX *ctx); /* r^2 + r = a mod p */ int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a, const int p[], BN_CTX *ctx); int BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max); int BN_GF2m_arr2poly(const int p[], BIGNUM *a); # endif /* * faster mod functions for the 'NIST primes' 0 <= a < p^2 */ int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); const BIGNUM *BN_get0_nist_prime_192(void); const BIGNUM *BN_get0_nist_prime_224(void); const BIGNUM *BN_get0_nist_prime_256(void); const BIGNUM *BN_get0_nist_prime_384(void); const BIGNUM *BN_get0_nist_prime_521(void); /* library internal functions */ # define bn_expand(a,bits) \ ( \ bits > (INT_MAX - BN_BITS2 + 1) ? \ NULL \ : \ (((bits+BN_BITS2-1)/BN_BITS2) <= (a)->dmax) ? \ (a) \ : \ bn_expand2((a),(bits+BN_BITS2-1)/BN_BITS2) \ ) # define bn_wexpand(a,words) (((words) <= (a)->dmax)?(a):bn_expand2((a),(words))) BIGNUM *bn_expand2(BIGNUM *a, int words); # ifndef OPENSSL_NO_DEPRECATED BIGNUM *bn_dup_expand(const BIGNUM *a, int words); /* unused */ # endif /*- * Bignum consistency macros * There is one "API" macro, bn_fix_top(), for stripping leading zeroes from * bignum data after direct manipulations on the data. There is also an * "internal" macro, bn_check_top(), for verifying that there are no leading * zeroes. Unfortunately, some auditing is required due to the fact that * bn_fix_top() has become an overabused duct-tape because bignum data is * occasionally passed around in an inconsistent state. So the following * changes have been made to sort this out; * - bn_fix_top()s implementation has been moved to bn_correct_top() * - if BN_DEBUG isn't defined, bn_fix_top() maps to bn_correct_top(), and * bn_check_top() is as before. * - if BN_DEBUG *is* defined; * - bn_check_top() tries to pollute unused words even if the bignum 'top' is * consistent. (ed: only if BN_DEBUG_RAND is defined) * - bn_fix_top() maps to bn_check_top() rather than "fixing" anything. * The idea is to have debug builds flag up inconsistent bignums when they * occur. If that occurs in a bn_fix_top(), we examine the code in question; if * the use of bn_fix_top() was appropriate (ie. it follows directly after code * that manipulates the bignum) it is converted to bn_correct_top(), and if it * was not appropriate, we convert it permanently to bn_check_top() and track * down the cause of the bug. Eventually, no internal code should be using the * bn_fix_top() macro. External applications and libraries should try this with * their own code too, both in terms of building against the openssl headers * with BN_DEBUG defined *and* linking with a version of OpenSSL built with it * defined. This not only improves external code, it provides more test * coverage for openssl's own code. */ # ifdef BN_DEBUG /* We only need assert() when debugging */ # include # ifdef BN_DEBUG_RAND /* To avoid "make update" cvs wars due to BN_DEBUG, use some tricks */ # ifndef RAND_pseudo_bytes int RAND_pseudo_bytes(unsigned char *buf, int num); # define BN_DEBUG_TRIX # endif # define bn_pollute(a) \ do { \ const BIGNUM *_bnum1 = (a); \ if(_bnum1->top < _bnum1->dmax) { \ unsigned char _tmp_char; \ /* We cast away const without the compiler knowing, any \ * *genuinely* constant variables that aren't mutable \ * wouldn't be constructed with top!=dmax. */ \ BN_ULONG *_not_const; \ memcpy(&_not_const, &_bnum1->d, sizeof(BN_ULONG*)); \ /* Debug only - safe to ignore error return */ \ RAND_pseudo_bytes(&_tmp_char, 1); \ memset((unsigned char *)(_not_const + _bnum1->top), _tmp_char, \ (_bnum1->dmax - _bnum1->top) * sizeof(BN_ULONG)); \ } \ } while(0) # ifdef BN_DEBUG_TRIX # undef RAND_pseudo_bytes # endif # else # define bn_pollute(a) # endif # define bn_check_top(a) \ do { \ const BIGNUM *_bnum2 = (a); \ if (_bnum2 != NULL) { \ assert((_bnum2->top == 0) || \ (_bnum2->d[_bnum2->top - 1] != 0)); \ bn_pollute(_bnum2); \ } \ } while(0) # define bn_fix_top(a) bn_check_top(a) # define bn_check_size(bn, bits) bn_wcheck_size(bn, ((bits+BN_BITS2-1))/BN_BITS2) # define bn_wcheck_size(bn, words) \ do { \ const BIGNUM *_bnum2 = (bn); \ assert((words) <= (_bnum2)->dmax && (words) >= (_bnum2)->top); \ /* avoid unused variable warning with NDEBUG */ \ (void)(_bnum2); \ } while(0) # else /* !BN_DEBUG */ # define bn_pollute(a) # define bn_check_top(a) # define bn_fix_top(a) bn_correct_top(a) # define bn_check_size(bn, bits) # define bn_wcheck_size(bn, words) # endif # define bn_correct_top(a) \ { \ BN_ULONG *ftl; \ int tmp_top = (a)->top; \ if (tmp_top > 0) \ { \ for (ftl= &((a)->d[tmp_top-1]); tmp_top > 0; tmp_top--) \ if (*(ftl--)) break; \ (a)->top = tmp_top; \ } \ bn_pollute(a); \ } BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w); BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w); void bn_sqr_words(BN_ULONG *rp, const BN_ULONG *ap, int num); BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d); BN_ULONG bn_add_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, int num); BN_ULONG bn_sub_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, int num); /* Primes from RFC 2409 */ BIGNUM *get_rfc2409_prime_768(BIGNUM *bn); BIGNUM *get_rfc2409_prime_1024(BIGNUM *bn); /* Primes from RFC 3526 */ BIGNUM *get_rfc3526_prime_1536(BIGNUM *bn); BIGNUM *get_rfc3526_prime_2048(BIGNUM *bn); BIGNUM *get_rfc3526_prime_3072(BIGNUM *bn); BIGNUM *get_rfc3526_prime_4096(BIGNUM *bn); BIGNUM *get_rfc3526_prime_6144(BIGNUM *bn); BIGNUM *get_rfc3526_prime_8192(BIGNUM *bn); int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom); /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_BN_strings(void); /* Error codes for the BN functions. */ /* Function codes. */ # define BN_F_BNRAND 127 # define BN_F_BN_BLINDING_CONVERT_EX 100 # define BN_F_BN_BLINDING_CREATE_PARAM 128 # define BN_F_BN_BLINDING_INVERT_EX 101 # define BN_F_BN_BLINDING_NEW 102 # define BN_F_BN_BLINDING_UPDATE 103 # define BN_F_BN_BN2DEC 104 # define BN_F_BN_BN2HEX 105 # define BN_F_BN_CTX_GET 116 # define BN_F_BN_CTX_NEW 106 # define BN_F_BN_CTX_START 129 # define BN_F_BN_DIV 107 # define BN_F_BN_DIV_NO_BRANCH 138 # define BN_F_BN_DIV_RECP 130 # define BN_F_BN_EXP 123 # define BN_F_BN_EXPAND2 108 # define BN_F_BN_EXPAND_INTERNAL 120 # define BN_F_BN_GF2M_MOD 131 # define BN_F_BN_GF2M_MOD_EXP 132 # define BN_F_BN_GF2M_MOD_MUL 133 # define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 # define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 # define BN_F_BN_GF2M_MOD_SQR 136 # define BN_F_BN_GF2M_MOD_SQRT 137 # define BN_F_BN_LSHIFT 145 # define BN_F_BN_MOD_EXP2_MONT 118 # define BN_F_BN_MOD_EXP_MONT 109 # define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 # define BN_F_BN_MOD_EXP_MONT_WORD 117 # define BN_F_BN_MOD_EXP_RECP 125 # define BN_F_BN_MOD_EXP_SIMPLE 126 # define BN_F_BN_MOD_INVERSE 110 # define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 # define BN_F_BN_MOD_LSHIFT_QUICK 119 # define BN_F_BN_MOD_MUL_RECIPROCAL 111 # define BN_F_BN_MOD_SQRT 121 # define BN_F_BN_MPI2BN 112 # define BN_F_BN_NEW 113 # define BN_F_BN_RAND 114 # define BN_F_BN_RAND_RANGE 122 # define BN_F_BN_RSHIFT 146 # define BN_F_BN_USUB 115 /* Reason codes. */ # define BN_R_ARG2_LT_ARG3 100 # define BN_R_BAD_RECIPROCAL 101 # define BN_R_BIGNUM_TOO_LONG 114 # define BN_R_BITS_TOO_SMALL 118 # define BN_R_CALLED_WITH_EVEN_MODULUS 102 # define BN_R_DIV_BY_ZERO 103 # define BN_R_ENCODING_ERROR 104 # define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105 # define BN_R_INPUT_NOT_REDUCED 110 # define BN_R_INVALID_LENGTH 106 # define BN_R_INVALID_RANGE 115 # define BN_R_INVALID_SHIFT 119 # define BN_R_NOT_A_SQUARE 111 # define BN_R_NOT_INITIALIZED 107 # define BN_R_NO_INVERSE 108 # define BN_R_NO_SOLUTION 116 # define BN_R_P_IS_NOT_PRIME 112 # define BN_R_TOO_MANY_ITERATIONS 113 # define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/buffer.h ================================================ /* crypto/buffer/buffer.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_BUFFER_H # define HEADER_BUFFER_H # include #ifdef __cplusplus extern "C" { #endif # include # if !defined(NO_SYS_TYPES_H) # include # endif /* Already declared in ossl_typ.h */ /* typedef struct buf_mem_st BUF_MEM; */ struct buf_mem_st { size_t length; /* current number of bytes */ char *data; size_t max; /* size of buffer */ }; BUF_MEM *BUF_MEM_new(void); void BUF_MEM_free(BUF_MEM *a); int BUF_MEM_grow(BUF_MEM *str, size_t len); int BUF_MEM_grow_clean(BUF_MEM *str, size_t len); size_t BUF_strnlen(const char *str, size_t maxlen); char *BUF_strdup(const char *str); /* * Like strndup, but in addition, explicitly guarantees to never read past the * first |siz| bytes of |str|. */ char *BUF_strndup(const char *str, size_t siz); void *BUF_memdup(const void *data, size_t siz); void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz); /* safe string functions */ size_t BUF_strlcpy(char *dst, const char *src, size_t siz); size_t BUF_strlcat(char *dst, const char *src, size_t siz); /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_BUF_strings(void); /* Error codes for the BUF functions. */ /* Function codes. */ # define BUF_F_BUF_MEMDUP 103 # define BUF_F_BUF_MEM_GROW 100 # define BUF_F_BUF_MEM_GROW_CLEAN 105 # define BUF_F_BUF_MEM_NEW 101 # define BUF_F_BUF_STRDUP 102 # define BUF_F_BUF_STRNDUP 104 /* Reason codes. */ #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/camellia.h ================================================ /* crypto/camellia/camellia.h */ /* ==================================================================== * Copyright (c) 2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * */ #ifndef HEADER_CAMELLIA_H # define HEADER_CAMELLIA_H # include # ifdef OPENSSL_NO_CAMELLIA # error CAMELLIA is disabled. # endif # include # define CAMELLIA_ENCRYPT 1 # define CAMELLIA_DECRYPT 0 /* * Because array size can't be a const in C, the following two are macros. * Both sizes are in bytes. */ #ifdef __cplusplus extern "C" { #endif /* This should be a hidden type, but EVP requires that the size be known */ # define CAMELLIA_BLOCK_SIZE 16 # define CAMELLIA_TABLE_BYTE_LEN 272 # define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; /* to match * with WORD */ struct camellia_key_st { union { double d; /* ensures 64-bit align */ KEY_TABLE_TYPE rd_key; } u; int grand_rounds; }; typedef struct camellia_key_st CAMELLIA_KEY; # ifdef OPENSSL_FIPS int private_Camellia_set_key(const unsigned char *userKey, const int bits, CAMELLIA_KEY *key); # endif int Camellia_set_key(const unsigned char *userKey, const int bits, CAMELLIA_KEY *key); void Camellia_encrypt(const unsigned char *in, unsigned char *out, const CAMELLIA_KEY *key); void Camellia_decrypt(const unsigned char *in, unsigned char *out, const CAMELLIA_KEY *key); void Camellia_ecb_encrypt(const unsigned char *in, unsigned char *out, const CAMELLIA_KEY *key, const int enc); void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t length, const CAMELLIA_KEY *key, unsigned char *ivec, const int enc); void Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const CAMELLIA_KEY *key, unsigned char *ivec, int *num, const int enc); void Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out, size_t length, const CAMELLIA_KEY *key, unsigned char *ivec, int *num, const int enc); void Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out, size_t length, const CAMELLIA_KEY *key, unsigned char *ivec, int *num, const int enc); void Camellia_ofb128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const CAMELLIA_KEY *key, unsigned char *ivec, int *num); void Camellia_ctr128_encrypt(const unsigned char *in, unsigned char *out, size_t length, const CAMELLIA_KEY *key, unsigned char ivec[CAMELLIA_BLOCK_SIZE], unsigned char ecount_buf[CAMELLIA_BLOCK_SIZE], unsigned int *num); #ifdef __cplusplus } #endif #endif /* !HEADER_Camellia_H */ ================================================ FILE: 3rParty/FFmpeg/include/openssl/cast.h ================================================ /* crypto/cast/cast.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_CAST_H # define HEADER_CAST_H #ifdef __cplusplus extern "C" { #endif # include # ifdef OPENSSL_NO_CAST # error CAST is disabled. # endif # define CAST_ENCRYPT 1 # define CAST_DECRYPT 0 # define CAST_LONG unsigned int # define CAST_BLOCK 8 # define CAST_KEY_LENGTH 16 typedef struct cast_key_st { CAST_LONG data[32]; int short_key; /* Use reduced rounds for short key */ } CAST_KEY; # ifdef OPENSSL_FIPS void private_CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); # endif void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out, const CAST_KEY *key, int enc); void CAST_encrypt(CAST_LONG *data, const CAST_KEY *key); void CAST_decrypt(CAST_LONG *data, const CAST_KEY *key); void CAST_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, const CAST_KEY *ks, unsigned char *iv, int enc); void CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, const CAST_KEY *schedule, unsigned char *ivec, int *num, int enc); void CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, const CAST_KEY *schedule, unsigned char *ivec, int *num); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/cmac.h ================================================ /* crypto/cmac/cmac.h */ /* * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project. */ /* ==================================================================== * Copyright (c) 2010 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== */ #ifndef HEADER_CMAC_H # define HEADER_CMAC_H #ifdef __cplusplus extern "C" { #endif # include /* Opaque */ typedef struct CMAC_CTX_st CMAC_CTX; CMAC_CTX *CMAC_CTX_new(void); void CMAC_CTX_cleanup(CMAC_CTX *ctx); void CMAC_CTX_free(CMAC_CTX *ctx); EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen, const EVP_CIPHER *cipher, ENGINE *impl); int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen); int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen); int CMAC_resume(CMAC_CTX *ctx); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/cms.h ================================================ /* crypto/cms/cms.h */ /* * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL * project. */ /* ==================================================================== * Copyright (c) 2008 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== */ #ifndef HEADER_CMS_H # define HEADER_CMS_H # include # ifdef OPENSSL_NO_CMS # error CMS is disabled. # endif #ifdef __cplusplus extern "C" { #endif typedef struct CMS_ContentInfo_st CMS_ContentInfo; typedef struct CMS_SignerInfo_st CMS_SignerInfo; typedef struct CMS_CertificateChoices CMS_CertificateChoices; typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice; typedef struct CMS_RecipientInfo_st CMS_RecipientInfo; typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest; typedef struct CMS_Receipt_st CMS_Receipt; typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; DECLARE_STACK_OF(CMS_SignerInfo) DECLARE_STACK_OF(GENERAL_NAMES) DECLARE_STACK_OF(CMS_RecipientEncryptedKey) DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) # define CMS_SIGNERINFO_ISSUER_SERIAL 0 # define CMS_SIGNERINFO_KEYIDENTIFIER 1 # define CMS_RECIPINFO_NONE -1 # define CMS_RECIPINFO_TRANS 0 # define CMS_RECIPINFO_AGREE 1 # define CMS_RECIPINFO_KEK 2 # define CMS_RECIPINFO_PASS 3 # define CMS_RECIPINFO_OTHER 4 /* S/MIME related flags */ # define CMS_TEXT 0x1 # define CMS_NOCERTS 0x2 # define CMS_NO_CONTENT_VERIFY 0x4 # define CMS_NO_ATTR_VERIFY 0x8 # define CMS_NOSIGS \ (CMS_NO_CONTENT_VERIFY|CMS_NO_ATTR_VERIFY) # define CMS_NOINTERN 0x10 # define CMS_NO_SIGNER_CERT_VERIFY 0x20 # define CMS_NOVERIFY 0x20 # define CMS_DETACHED 0x40 # define CMS_BINARY 0x80 # define CMS_NOATTR 0x100 # define CMS_NOSMIMECAP 0x200 # define CMS_NOOLDMIMETYPE 0x400 # define CMS_CRLFEOL 0x800 # define CMS_STREAM 0x1000 # define CMS_NOCRL 0x2000 # define CMS_PARTIAL 0x4000 # define CMS_REUSE_DIGEST 0x8000 # define CMS_USE_KEYID 0x10000 # define CMS_DEBUG_DECRYPT 0x20000 # define CMS_KEY_PARAM 0x40000 const ASN1_OBJECT *CMS_get0_type(CMS_ContentInfo *cms); BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont); int CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio); ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); int CMS_is_detached(CMS_ContentInfo *cms); int CMS_set_detached(CMS_ContentInfo *cms, int detached); # ifdef HEADER_PEM_H DECLARE_PEM_rw_const(CMS, CMS_ContentInfo) # endif int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms); BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms); int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, unsigned int flags); CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, BIO *data, unsigned int flags); CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, unsigned int flags); int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, unsigned int flags); int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, const unsigned char *key, size_t keylen, BIO *dcont, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, const unsigned char *key, size_t keylen, unsigned int flags); int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, const unsigned char *key, size_t keylen); int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, X509_STORE *store, BIO *dcont, BIO *out, unsigned int flags); int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms, STACK_OF(X509) *certs, X509_STORE *store, unsigned int flags); STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags); int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, BIO *dcont, BIO *out, unsigned int flags); int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); int CMS_decrypt_set1_key(CMS_ContentInfo *cms, unsigned char *key, size_t keylen, unsigned char *id, size_t idlen); int CMS_decrypt_set1_password(CMS_ContentInfo *cms, unsigned char *pass, ossl_ssize_t passlen); STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, X509 *recip, unsigned int flags); int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, EVP_PKEY **pk, X509 **recip, X509_ALGOR **palg); int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri, ASN1_OCTET_STRING **keyid, X509_NAME **issuer, ASN1_INTEGER **sno); CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, unsigned char *key, size_t keylen, unsigned char *id, size_t idlen, ASN1_GENERALIZEDTIME *date, ASN1_OBJECT *otherTypeId, ASN1_TYPE *otherType); int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, X509_ALGOR **palg, ASN1_OCTET_STRING **pid, ASN1_GENERALIZEDTIME **pdate, ASN1_OBJECT **potherid, ASN1_TYPE **pothertype); int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, unsigned char *key, size_t keylen); int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri, const unsigned char *id, size_t idlen); int CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri, unsigned char *pass, ossl_ssize_t passlen); CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, int iter, int wrap_nid, int pbe_nid, unsigned char *pass, ossl_ssize_t passlen, const EVP_CIPHER *kekciph); int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags); int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid); const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms); CMS_CertificateChoices *CMS_add0_CertificateChoices(CMS_ContentInfo *cms); int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert); int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert); STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms); CMS_RevocationInfoChoice *CMS_add0_RevocationInfoChoice(CMS_ContentInfo *cms); int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl); int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl); STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms); int CMS_SignedData_init(CMS_ContentInfo *cms); CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, X509 *signer, EVP_PKEY *pk, const EVP_MD *md, unsigned int flags); EVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si); EVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si); STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms); void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer); int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, ASN1_OCTET_STRING **keyid, X509_NAME **issuer, ASN1_INTEGER **sno); int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert); int CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs, unsigned int flags); void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk, X509 **signer, X509_ALGOR **pdig, X509_ALGOR **psig); ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si); int CMS_SignerInfo_sign(CMS_SignerInfo *si); int CMS_SignerInfo_verify(CMS_SignerInfo *si); int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain); int CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs); int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs, int algnid, int keysize); int CMS_add_standard_smimecap(STACK_OF(X509_ALGOR) **smcap); int CMS_signed_get_attr_count(const CMS_SignerInfo *si); int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid, int lastpos); int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, ASN1_OBJECT *obj, int lastpos); X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc); X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc); int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si, const ASN1_OBJECT *obj, int type, const void *bytes, int len); int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, int nid, int type, const void *bytes, int len); int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, const char *attrname, int type, const void *bytes, int len); void *CMS_signed_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, int lastpos, int type); int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid, int lastpos); int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si, ASN1_OBJECT *obj, int lastpos); X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc); X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc); int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si, const ASN1_OBJECT *obj, int type, const void *bytes, int len); int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si, int nid, int type, const void *bytes, int len); int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si, const char *attrname, int type, const void *bytes, int len); void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, int lastpos, int type); # ifdef HEADER_X509V3_H int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen, int allorfirst, STACK_OF(GENERAL_NAMES) *receiptList, STACK_OF(GENERAL_NAMES) *receiptsTo); int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, ASN1_STRING **pcid, int *pallorfirst, STACK_OF(GENERAL_NAMES) **plist, STACK_OF(GENERAL_NAMES) **prto); # endif int CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri, X509_ALGOR **palg, ASN1_OCTET_STRING **pukm); STACK_OF(CMS_RecipientEncryptedKey) *CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri); int CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri, X509_ALGOR **pubalg, ASN1_BIT_STRING **pubkey, ASN1_OCTET_STRING **keyid, X509_NAME **issuer, ASN1_INTEGER **sno); int CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert); int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, ASN1_OCTET_STRING **keyid, ASN1_GENERALIZEDTIME **tm, CMS_OtherKeyAttribute **other, X509_NAME **issuer, ASN1_INTEGER **sno); int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, X509 *cert); int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri, CMS_RecipientEncryptedKey *rek); int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg, ASN1_OCTET_STRING *ukm, int keylen); /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_CMS_strings(void); /* Error codes for the CMS functions. */ /* Function codes. */ # define CMS_F_CHECK_CONTENT 99 # define CMS_F_CMS_ADD0_CERT 164 # define CMS_F_CMS_ADD0_RECIPIENT_KEY 100 # define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 165 # define CMS_F_CMS_ADD1_RECEIPTREQUEST 158 # define CMS_F_CMS_ADD1_RECIPIENT_CERT 101 # define CMS_F_CMS_ADD1_SIGNER 102 # define CMS_F_CMS_ADD1_SIGNINGTIME 103 # define CMS_F_CMS_COMPRESS 104 # define CMS_F_CMS_COMPRESSEDDATA_CREATE 105 # define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 106 # define CMS_F_CMS_COPY_CONTENT 107 # define CMS_F_CMS_COPY_MESSAGEDIGEST 108 # define CMS_F_CMS_DATA 109 # define CMS_F_CMS_DATAFINAL 110 # define CMS_F_CMS_DATAINIT 111 # define CMS_F_CMS_DECRYPT 112 # define CMS_F_CMS_DECRYPT_SET1_KEY 113 # define CMS_F_CMS_DECRYPT_SET1_PASSWORD 166 # define CMS_F_CMS_DECRYPT_SET1_PKEY 114 # define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 115 # define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 116 # define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 117 # define CMS_F_CMS_DIGEST_VERIFY 118 # define CMS_F_CMS_ENCODE_RECEIPT 161 # define CMS_F_CMS_ENCRYPT 119 # define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 120 # define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 121 # define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 122 # define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 123 # define CMS_F_CMS_ENVELOPEDDATA_CREATE 124 # define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 125 # define CMS_F_CMS_ENVELOPED_DATA_INIT 126 # define CMS_F_CMS_ENV_ASN1_CTRL 171 # define CMS_F_CMS_FINAL 127 # define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 128 # define CMS_F_CMS_GET0_CONTENT 129 # define CMS_F_CMS_GET0_ECONTENT_TYPE 130 # define CMS_F_CMS_GET0_ENVELOPED 131 # define CMS_F_CMS_GET0_REVOCATION_CHOICES 132 # define CMS_F_CMS_GET0_SIGNED 133 # define CMS_F_CMS_MSGSIGDIGEST_ADD1 162 # define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159 # define CMS_F_CMS_RECEIPT_VERIFY 160 # define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134 # define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 169 # define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 178 # define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 175 # define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 173 # define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 172 # define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 174 # define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135 # define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136 # define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 137 # define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 138 # define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 139 # define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 140 # define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 141 # define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 142 # define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 143 # define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 167 # define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 144 # define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 168 # define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 145 # define CMS_F_CMS_SD_ASN1_CTRL 170 # define CMS_F_CMS_SET1_IAS 176 # define CMS_F_CMS_SET1_KEYID 177 # define CMS_F_CMS_SET1_SIGNERIDENTIFIER 146 # define CMS_F_CMS_SET_DETACHED 147 # define CMS_F_CMS_SIGN 148 # define CMS_F_CMS_SIGNED_DATA_INIT 149 # define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 150 # define CMS_F_CMS_SIGNERINFO_SIGN 151 # define CMS_F_CMS_SIGNERINFO_VERIFY 152 # define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 153 # define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 154 # define CMS_F_CMS_SIGN_RECEIPT 163 # define CMS_F_CMS_STREAM 155 # define CMS_F_CMS_UNCOMPRESS 156 # define CMS_F_CMS_VERIFY 157 /* Reason codes. */ # define CMS_R_ADD_SIGNER_ERROR 99 # define CMS_R_CERTIFICATE_ALREADY_PRESENT 175 # define CMS_R_CERTIFICATE_HAS_NO_KEYID 160 # define CMS_R_CERTIFICATE_VERIFY_ERROR 100 # define CMS_R_CIPHER_INITIALISATION_ERROR 101 # define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR 102 # define CMS_R_CMS_DATAFINAL_ERROR 103 # define CMS_R_CMS_LIB 104 # define CMS_R_CONTENTIDENTIFIER_MISMATCH 170 # define CMS_R_CONTENT_NOT_FOUND 105 # define CMS_R_CONTENT_TYPE_MISMATCH 171 # define CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA 106 # define CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA 107 # define CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA 108 # define CMS_R_CONTENT_VERIFY_ERROR 109 # define CMS_R_CTRL_ERROR 110 # define CMS_R_CTRL_FAILURE 111 # define CMS_R_DECRYPT_ERROR 112 # define CMS_R_DIGEST_ERROR 161 # define CMS_R_ERROR_GETTING_PUBLIC_KEY 113 # define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE 114 # define CMS_R_ERROR_SETTING_KEY 115 # define CMS_R_ERROR_SETTING_RECIPIENTINFO 116 # define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH 117 # define CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER 176 # define CMS_R_INVALID_KEY_LENGTH 118 # define CMS_R_MD_BIO_INIT_ERROR 119 # define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH 120 # define CMS_R_MESSAGEDIGEST_WRONG_LENGTH 121 # define CMS_R_MSGSIGDIGEST_ERROR 172 # define CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE 162 # define CMS_R_MSGSIGDIGEST_WRONG_LENGTH 163 # define CMS_R_NEED_ONE_SIGNER 164 # define CMS_R_NOT_A_SIGNED_RECEIPT 165 # define CMS_R_NOT_ENCRYPTED_DATA 122 # define CMS_R_NOT_KEK 123 # define CMS_R_NOT_KEY_AGREEMENT 181 # define CMS_R_NOT_KEY_TRANSPORT 124 # define CMS_R_NOT_PWRI 177 # define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 125 # define CMS_R_NO_CIPHER 126 # define CMS_R_NO_CONTENT 127 # define CMS_R_NO_CONTENT_TYPE 173 # define CMS_R_NO_DEFAULT_DIGEST 128 # define CMS_R_NO_DIGEST_SET 129 # define CMS_R_NO_KEY 130 # define CMS_R_NO_KEY_OR_CERT 174 # define CMS_R_NO_MATCHING_DIGEST 131 # define CMS_R_NO_MATCHING_RECIPIENT 132 # define CMS_R_NO_MATCHING_SIGNATURE 166 # define CMS_R_NO_MSGSIGDIGEST 167 # define CMS_R_NO_PASSWORD 178 # define CMS_R_NO_PRIVATE_KEY 133 # define CMS_R_NO_PUBLIC_KEY 134 # define CMS_R_NO_RECEIPT_REQUEST 168 # define CMS_R_NO_SIGNERS 135 # define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 136 # define CMS_R_RECEIPT_DECODE_ERROR 169 # define CMS_R_RECIPIENT_ERROR 137 # define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND 138 # define CMS_R_SIGNFINAL_ERROR 139 # define CMS_R_SMIME_TEXT_ERROR 140 # define CMS_R_STORE_INIT_ERROR 141 # define CMS_R_TYPE_NOT_COMPRESSED_DATA 142 # define CMS_R_TYPE_NOT_DATA 143 # define CMS_R_TYPE_NOT_DIGESTED_DATA 144 # define CMS_R_TYPE_NOT_ENCRYPTED_DATA 145 # define CMS_R_TYPE_NOT_ENVELOPED_DATA 146 # define CMS_R_UNABLE_TO_FINALIZE_CONTEXT 147 # define CMS_R_UNKNOWN_CIPHER 148 # define CMS_R_UNKNOWN_DIGEST_ALGORIHM 149 # define CMS_R_UNKNOWN_ID 150 # define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM 151 # define CMS_R_UNSUPPORTED_CONTENT_TYPE 152 # define CMS_R_UNSUPPORTED_KEK_ALGORITHM 153 # define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM 179 # define CMS_R_UNSUPPORTED_RECIPIENT_TYPE 154 # define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE 155 # define CMS_R_UNSUPPORTED_TYPE 156 # define CMS_R_UNWRAP_ERROR 157 # define CMS_R_UNWRAP_FAILURE 180 # define CMS_R_VERIFICATION_FAILURE 158 # define CMS_R_WRAP_ERROR 159 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/comp.h ================================================ #ifndef HEADER_COMP_H # define HEADER_COMP_H # include # ifdef OPENSSL_NO_COMP # error COMP is disabled. # endif #ifdef __cplusplus extern "C" { #endif typedef struct comp_ctx_st COMP_CTX; typedef struct comp_method_st { int type; /* NID for compression library */ const char *name; /* A text string to identify the library */ int (*init) (COMP_CTX *ctx); void (*finish) (COMP_CTX *ctx); int (*compress) (COMP_CTX *ctx, unsigned char *out, unsigned int olen, unsigned char *in, unsigned int ilen); int (*expand) (COMP_CTX *ctx, unsigned char *out, unsigned int olen, unsigned char *in, unsigned int ilen); /* * The following two do NOTHING, but are kept for backward compatibility */ long (*ctrl) (void); long (*callback_ctrl) (void); } COMP_METHOD; struct comp_ctx_st { COMP_METHOD *meth; unsigned long compress_in; unsigned long compress_out; unsigned long expand_in; unsigned long expand_out; CRYPTO_EX_DATA ex_data; }; COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); void COMP_CTX_free(COMP_CTX *ctx); int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, unsigned char *in, int ilen); int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, unsigned char *in, int ilen); COMP_METHOD *COMP_rle(void); COMP_METHOD *COMP_zlib(void); void COMP_zlib_cleanup(void); # ifdef HEADER_BIO_H # ifdef ZLIB BIO_METHOD *BIO_f_zlib(void); # endif # endif /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_COMP_strings(void); /* Error codes for the COMP functions. */ /* Function codes. */ # define COMP_F_BIO_ZLIB_FLUSH 99 # define COMP_F_BIO_ZLIB_NEW 100 # define COMP_F_BIO_ZLIB_READ 101 # define COMP_F_BIO_ZLIB_WRITE 102 /* Reason codes. */ # define COMP_R_ZLIB_DEFLATE_ERROR 99 # define COMP_R_ZLIB_INFLATE_ERROR 100 # define COMP_R_ZLIB_NOT_SUPPORTED 101 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/conf.h ================================================ /* crypto/conf/conf.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_CONF_H # define HEADER_CONF_H # include # include # include # include # include # include #ifdef __cplusplus extern "C" { #endif typedef struct { char *section; char *name; char *value; } CONF_VALUE; DECLARE_STACK_OF(CONF_VALUE) DECLARE_LHASH_OF(CONF_VALUE); struct conf_st; struct conf_method_st; typedef struct conf_method_st CONF_METHOD; struct conf_method_st { const char *name; CONF *(*create) (CONF_METHOD *meth); int (*init) (CONF *conf); int (*destroy) (CONF *conf); int (*destroy_data) (CONF *conf); int (*load_bio) (CONF *conf, BIO *bp, long *eline); int (*dump) (const CONF *conf, BIO *bp); int (*is_number) (const CONF *conf, char c); int (*to_int) (const CONF *conf, char c); int (*load) (CONF *conf, const char *name, long *eline); }; /* Module definitions */ typedef struct conf_imodule_st CONF_IMODULE; typedef struct conf_module_st CONF_MODULE; DECLARE_STACK_OF(CONF_MODULE) DECLARE_STACK_OF(CONF_IMODULE) /* DSO module function typedefs */ typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); typedef void conf_finish_func (CONF_IMODULE *md); # define CONF_MFLAGS_IGNORE_ERRORS 0x1 # define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2 # define CONF_MFLAGS_SILENT 0x4 # define CONF_MFLAGS_NO_DSO 0x8 # define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 # define CONF_MFLAGS_DEFAULT_SECTION 0x20 int CONF_set_default_method(CONF_METHOD *meth); void CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash); LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file, long *eline); # ifndef OPENSSL_NO_FP_API LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp, long *eline); # endif LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp, long *eline); STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf, const char *section); char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf, const char *group, const char *name); long CONF_get_number(LHASH_OF(CONF_VALUE) *conf, const char *group, const char *name); void CONF_free(LHASH_OF(CONF_VALUE) *conf); int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); void OPENSSL_config(const char *config_name); void OPENSSL_no_config(void); /* * New conf code. The semantics are different from the functions above. If * that wasn't the case, the above functions would have been replaced */ struct conf_st { CONF_METHOD *meth; void *meth_data; LHASH_OF(CONF_VALUE) *data; }; CONF *NCONF_new(CONF_METHOD *meth); CONF_METHOD *NCONF_default(void); CONF_METHOD *NCONF_WIN32(void); # if 0 /* Just to give you an idea of what I have in * mind */ CONF_METHOD *NCONF_XML(void); # endif void NCONF_free(CONF *conf); void NCONF_free_data(CONF *conf); int NCONF_load(CONF *conf, const char *file, long *eline); # ifndef OPENSSL_NO_FP_API int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); # endif int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, const char *section); char *NCONF_get_string(const CONF *conf, const char *group, const char *name); int NCONF_get_number_e(const CONF *conf, const char *group, const char *name, long *result); int NCONF_dump_fp(const CONF *conf, FILE *out); int NCONF_dump_bio(const CONF *conf, BIO *out); # if 0 /* The following function has no error * checking, and should therefore be avoided */ long NCONF_get_number(CONF *conf, char *group, char *name); # else # define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) # endif /* Module functions */ int CONF_modules_load(const CONF *cnf, const char *appname, unsigned long flags); int CONF_modules_load_file(const char *filename, const char *appname, unsigned long flags); void CONF_modules_unload(int all); void CONF_modules_finish(void); void CONF_modules_free(void); int CONF_module_add(const char *name, conf_init_func *ifunc, conf_finish_func *ffunc); const char *CONF_imodule_get_name(const CONF_IMODULE *md); const char *CONF_imodule_get_value(const CONF_IMODULE *md); void *CONF_imodule_get_usr_data(const CONF_IMODULE *md); void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data); CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md); unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md); void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags); void *CONF_module_get_usr_data(CONF_MODULE *pmod); void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data); char *CONF_get1_default_config_file(void); int CONF_parse_list(const char *list, int sep, int nospc, int (*list_cb) (const char *elem, int len, void *usr), void *arg); void OPENSSL_load_builtin_modules(void); /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_CONF_strings(void); /* Error codes for the CONF functions. */ /* Function codes. */ # define CONF_F_CONF_DUMP_FP 104 # define CONF_F_CONF_LOAD 100 # define CONF_F_CONF_LOAD_BIO 102 # define CONF_F_CONF_LOAD_FP 103 # define CONF_F_CONF_MODULES_LOAD 116 # define CONF_F_CONF_PARSE_LIST 119 # define CONF_F_DEF_LOAD 120 # define CONF_F_DEF_LOAD_BIO 121 # define CONF_F_MODULE_INIT 115 # define CONF_F_MODULE_LOAD_DSO 117 # define CONF_F_MODULE_RUN 118 # define CONF_F_NCONF_DUMP_BIO 105 # define CONF_F_NCONF_DUMP_FP 106 # define CONF_F_NCONF_GET_NUMBER 107 # define CONF_F_NCONF_GET_NUMBER_E 112 # define CONF_F_NCONF_GET_SECTION 108 # define CONF_F_NCONF_GET_STRING 109 # define CONF_F_NCONF_LOAD 113 # define CONF_F_NCONF_LOAD_BIO 110 # define CONF_F_NCONF_LOAD_FP 114 # define CONF_F_NCONF_NEW 111 # define CONF_F_STR_COPY 101 /* Reason codes. */ # define CONF_R_ERROR_LOADING_DSO 110 # define CONF_R_LIST_CANNOT_BE_NULL 115 # define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100 # define CONF_R_MISSING_EQUAL_SIGN 101 # define CONF_R_MISSING_FINISH_FUNCTION 111 # define CONF_R_MISSING_INIT_FUNCTION 112 # define CONF_R_MODULE_INITIALIZATION_ERROR 109 # define CONF_R_NO_CLOSE_BRACE 102 # define CONF_R_NO_CONF 105 # define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106 # define CONF_R_NO_SECTION 107 # define CONF_R_NO_SUCH_FILE 114 # define CONF_R_NO_VALUE 108 # define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103 # define CONF_R_UNKNOWN_MODULE_NAME 113 # define CONF_R_VARIABLE_HAS_NO_VALUE 104 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/conf_api.h ================================================ /* conf_api.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_CONF_API_H # define HEADER_CONF_API_H # include # include #ifdef __cplusplus extern "C" { #endif /* Up until OpenSSL 0.9.5a, this was new_section */ CONF_VALUE *_CONF_new_section(CONF *conf, const char *section); /* Up until OpenSSL 0.9.5a, this was get_section */ CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section); /* Up until OpenSSL 0.9.5a, this was CONF_get_section */ STACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf, const char *section); int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value); char *_CONF_get_string(const CONF *conf, const char *section, const char *name); long _CONF_get_number(const CONF *conf, const char *section, const char *name); int _CONF_new_data(CONF *conf); void _CONF_free_data(CONF *conf); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/crypto.h ================================================ /* crypto/crypto.h */ /* ==================================================================== * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * ECDH support in OpenSSL originally developed by * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. */ #ifndef HEADER_CRYPTO_H # define HEADER_CRYPTO_H # include # include # ifndef OPENSSL_NO_FP_API # include # endif # include # include # include # include # ifdef CHARSET_EBCDIC # include # endif /* * Resolve problems on some operating systems with symbol names that clash * one way or another */ # include #ifdef __cplusplus extern "C" { #endif /* Backward compatibility to SSLeay */ /* * This is more to be used to check the correct DLL is being used in the MS * world. */ # define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER # define SSLEAY_VERSION 0 /* #define SSLEAY_OPTIONS 1 no longer supported */ # define SSLEAY_CFLAGS 2 # define SSLEAY_BUILT_ON 3 # define SSLEAY_PLATFORM 4 # define SSLEAY_DIR 5 /* Already declared in ossl_typ.h */ # if 0 typedef struct crypto_ex_data_st CRYPTO_EX_DATA; /* Called when a new object is created */ typedef int CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl, void *argp); /* Called when an object is free()ed */ typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl, void *argp); /* Called when we need to dup an object */ typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d, int idx, long argl, void *argp); # endif /* A generic structure to pass assorted data in a expandable way */ typedef struct openssl_item_st { int code; void *value; /* Not used for flag attributes */ size_t value_size; /* Max size of value for output, length for * input */ size_t *value_length; /* Returned length of value for output */ } OPENSSL_ITEM; /* * When changing the CRYPTO_LOCK_* list, be sure to maintin the text lock * names in cryptlib.c */ # define CRYPTO_LOCK_ERR 1 # define CRYPTO_LOCK_EX_DATA 2 # define CRYPTO_LOCK_X509 3 # define CRYPTO_LOCK_X509_INFO 4 # define CRYPTO_LOCK_X509_PKEY 5 # define CRYPTO_LOCK_X509_CRL 6 # define CRYPTO_LOCK_X509_REQ 7 # define CRYPTO_LOCK_DSA 8 # define CRYPTO_LOCK_RSA 9 # define CRYPTO_LOCK_EVP_PKEY 10 # define CRYPTO_LOCK_X509_STORE 11 # define CRYPTO_LOCK_SSL_CTX 12 # define CRYPTO_LOCK_SSL_CERT 13 # define CRYPTO_LOCK_SSL_SESSION 14 # define CRYPTO_LOCK_SSL_SESS_CERT 15 # define CRYPTO_LOCK_SSL 16 # define CRYPTO_LOCK_SSL_METHOD 17 # define CRYPTO_LOCK_RAND 18 # define CRYPTO_LOCK_RAND2 19 # define CRYPTO_LOCK_MALLOC 20 # define CRYPTO_LOCK_BIO 21 # define CRYPTO_LOCK_GETHOSTBYNAME 22 # define CRYPTO_LOCK_GETSERVBYNAME 23 # define CRYPTO_LOCK_READDIR 24 # define CRYPTO_LOCK_RSA_BLINDING 25 # define CRYPTO_LOCK_DH 26 # define CRYPTO_LOCK_MALLOC2 27 # define CRYPTO_LOCK_DSO 28 # define CRYPTO_LOCK_DYNLOCK 29 # define CRYPTO_LOCK_ENGINE 30 # define CRYPTO_LOCK_UI 31 # define CRYPTO_LOCK_ECDSA 32 # define CRYPTO_LOCK_EC 33 # define CRYPTO_LOCK_ECDH 34 # define CRYPTO_LOCK_BN 35 # define CRYPTO_LOCK_EC_PRE_COMP 36 # define CRYPTO_LOCK_STORE 37 # define CRYPTO_LOCK_COMP 38 # define CRYPTO_LOCK_FIPS 39 # define CRYPTO_LOCK_FIPS2 40 # define CRYPTO_NUM_LOCKS 41 # define CRYPTO_LOCK 1 # define CRYPTO_UNLOCK 2 # define CRYPTO_READ 4 # define CRYPTO_WRITE 8 # ifndef OPENSSL_NO_LOCKING # ifndef CRYPTO_w_lock # define CRYPTO_w_lock(type) \ CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE,type,__FILE__,__LINE__) # define CRYPTO_w_unlock(type) \ CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE,type,__FILE__,__LINE__) # define CRYPTO_r_lock(type) \ CRYPTO_lock(CRYPTO_LOCK|CRYPTO_READ,type,__FILE__,__LINE__) # define CRYPTO_r_unlock(type) \ CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_READ,type,__FILE__,__LINE__) # define CRYPTO_add(addr,amount,type) \ CRYPTO_add_lock(addr,amount,type,__FILE__,__LINE__) # endif # else # define CRYPTO_w_lock(a) # define CRYPTO_w_unlock(a) # define CRYPTO_r_lock(a) # define CRYPTO_r_unlock(a) # define CRYPTO_add(a,b,c) ((*(a))+=(b)) # endif /* * Some applications as well as some parts of OpenSSL need to allocate and * deallocate locks in a dynamic fashion. The following typedef makes this * possible in a type-safe manner. */ /* struct CRYPTO_dynlock_value has to be defined by the application. */ typedef struct { int references; struct CRYPTO_dynlock_value *data; } CRYPTO_dynlock; /* * The following can be used to detect memory leaks in the SSLeay library. It * used, it turns on malloc checking */ # define CRYPTO_MEM_CHECK_OFF 0x0/* an enume */ # define CRYPTO_MEM_CHECK_ON 0x1/* a bit */ # define CRYPTO_MEM_CHECK_ENABLE 0x2/* a bit */ # define CRYPTO_MEM_CHECK_DISABLE 0x3/* an enume */ /* * The following are bit values to turn on or off options connected to the * malloc checking functionality */ /* Adds time to the memory checking information */ # define V_CRYPTO_MDEBUG_TIME 0x1/* a bit */ /* Adds thread number to the memory checking information */ # define V_CRYPTO_MDEBUG_THREAD 0x2/* a bit */ # define V_CRYPTO_MDEBUG_ALL (V_CRYPTO_MDEBUG_TIME | V_CRYPTO_MDEBUG_THREAD) /* predec of the BIO type */ typedef struct bio_st BIO_dummy; struct crypto_ex_data_st { STACK_OF(void) *sk; /* gcc is screwing up this data structure :-( */ int dummy; }; DECLARE_STACK_OF(void) /* * This stuff is basically class callback functions The current classes are * SSL_CTX, SSL, SSL_SESSION, and a few more */ typedef struct crypto_ex_data_func_st { long argl; /* Arbitary long */ void *argp; /* Arbitary void * */ CRYPTO_EX_new *new_func; CRYPTO_EX_free *free_func; CRYPTO_EX_dup *dup_func; } CRYPTO_EX_DATA_FUNCS; DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS) /* * Per class, we have a STACK of CRYPTO_EX_DATA_FUNCS for each CRYPTO_EX_DATA * entry. */ # define CRYPTO_EX_INDEX_BIO 0 # define CRYPTO_EX_INDEX_SSL 1 # define CRYPTO_EX_INDEX_SSL_CTX 2 # define CRYPTO_EX_INDEX_SSL_SESSION 3 # define CRYPTO_EX_INDEX_X509_STORE 4 # define CRYPTO_EX_INDEX_X509_STORE_CTX 5 # define CRYPTO_EX_INDEX_RSA 6 # define CRYPTO_EX_INDEX_DSA 7 # define CRYPTO_EX_INDEX_DH 8 # define CRYPTO_EX_INDEX_ENGINE 9 # define CRYPTO_EX_INDEX_X509 10 # define CRYPTO_EX_INDEX_UI 11 # define CRYPTO_EX_INDEX_ECDSA 12 # define CRYPTO_EX_INDEX_ECDH 13 # define CRYPTO_EX_INDEX_COMP 14 # define CRYPTO_EX_INDEX_STORE 15 /* * Dynamically assigned indexes start from this value (don't use directly, * use via CRYPTO_ex_data_new_class). */ # define CRYPTO_EX_INDEX_USER 100 /* * This is the default callbacks, but we can have others as well: this is * needed in Win32 where the application malloc and the library malloc may * not be the same. */ # define CRYPTO_malloc_init() CRYPTO_set_mem_functions(\ malloc, realloc, free) # if defined CRYPTO_MDEBUG_ALL || defined CRYPTO_MDEBUG_TIME || defined CRYPTO_MDEBUG_THREAD # ifndef CRYPTO_MDEBUG /* avoid duplicate #define */ # define CRYPTO_MDEBUG # endif # endif /* * Set standard debugging functions (not done by default unless CRYPTO_MDEBUG * is defined) */ # define CRYPTO_malloc_debug_init() do {\ CRYPTO_set_mem_debug_functions(\ CRYPTO_dbg_malloc,\ CRYPTO_dbg_realloc,\ CRYPTO_dbg_free,\ CRYPTO_dbg_set_options,\ CRYPTO_dbg_get_options);\ } while(0) int CRYPTO_mem_ctrl(int mode); int CRYPTO_is_mem_check_on(void); /* for applications */ # define MemCheck_start() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON) # define MemCheck_stop() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF) /* for library-internal use */ # define MemCheck_on() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE) # define MemCheck_off() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE) # define is_MemCheck_on() CRYPTO_is_mem_check_on() # define OPENSSL_malloc(num) CRYPTO_malloc((int)num,__FILE__,__LINE__) # define OPENSSL_strdup(str) CRYPTO_strdup((str),__FILE__,__LINE__) # define OPENSSL_realloc(addr,num) \ CRYPTO_realloc((char *)addr,(int)num,__FILE__,__LINE__) # define OPENSSL_realloc_clean(addr,old_num,num) \ CRYPTO_realloc_clean(addr,old_num,num,__FILE__,__LINE__) # define OPENSSL_remalloc(addr,num) \ CRYPTO_remalloc((char **)addr,(int)num,__FILE__,__LINE__) # define OPENSSL_freeFunc CRYPTO_free # define OPENSSL_free(addr) CRYPTO_free(addr) # define OPENSSL_malloc_locked(num) \ CRYPTO_malloc_locked((int)num,__FILE__,__LINE__) # define OPENSSL_free_locked(addr) CRYPTO_free_locked(addr) const char *SSLeay_version(int type); unsigned long SSLeay(void); int OPENSSL_issetugid(void); /* An opaque type representing an implementation of "ex_data" support */ typedef struct st_CRYPTO_EX_DATA_IMPL CRYPTO_EX_DATA_IMPL; /* Return an opaque pointer to the current "ex_data" implementation */ const CRYPTO_EX_DATA_IMPL *CRYPTO_get_ex_data_implementation(void); /* Sets the "ex_data" implementation to be used (if it's not too late) */ int CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i); /* Get a new "ex_data" class, and return the corresponding "class_index" */ int CRYPTO_ex_data_new_class(void); /* Within a given class, get/register a new index */ int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); /* * Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a * given class (invokes whatever per-class callbacks are applicable) */ int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from); void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); /* * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular * index (relative to the class type involved) */ int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); /* * This function cleans up all "ex_data" state. It mustn't be called under * potential race-conditions. */ void CRYPTO_cleanup_all_ex_data(void); int CRYPTO_get_new_lockid(char *name); int CRYPTO_num_locks(void); /* return CRYPTO_NUM_LOCKS (shared libs!) */ void CRYPTO_lock(int mode, int type, const char *file, int line); void CRYPTO_set_locking_callback(void (*func) (int mode, int type, const char *file, int line)); void (*CRYPTO_get_locking_callback(void)) (int mode, int type, const char *file, int line); void CRYPTO_set_add_lock_callback(int (*func) (int *num, int mount, int type, const char *file, int line)); int (*CRYPTO_get_add_lock_callback(void)) (int *num, int mount, int type, const char *file, int line); /* Don't use this structure directly. */ typedef struct crypto_threadid_st { void *ptr; unsigned long val; } CRYPTO_THREADID; /* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ void CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val); void CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr); int CRYPTO_THREADID_set_callback(void (*threadid_func) (CRYPTO_THREADID *)); void (*CRYPTO_THREADID_get_callback(void)) (CRYPTO_THREADID *); void CRYPTO_THREADID_current(CRYPTO_THREADID *id); int CRYPTO_THREADID_cmp(const CRYPTO_THREADID *a, const CRYPTO_THREADID *b); void CRYPTO_THREADID_cpy(CRYPTO_THREADID *dest, const CRYPTO_THREADID *src); unsigned long CRYPTO_THREADID_hash(const CRYPTO_THREADID *id); # ifndef OPENSSL_NO_DEPRECATED void CRYPTO_set_id_callback(unsigned long (*func) (void)); unsigned long (*CRYPTO_get_id_callback(void)) (void); unsigned long CRYPTO_thread_id(void); # endif const char *CRYPTO_get_lock_name(int type); int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file, int line); int CRYPTO_get_new_dynlockid(void); void CRYPTO_destroy_dynlockid(int i); struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i); void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*dyn_create_function) (const char *file, int line)); void CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function) (int mode, struct CRYPTO_dynlock_value *l, const char *file, int line)); void CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function) (struct CRYPTO_dynlock_value *l, const char *file, int line)); struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void)) (const char *file, int line); void (*CRYPTO_get_dynlock_lock_callback(void)) (int mode, struct CRYPTO_dynlock_value *l, const char *file, int line); void (*CRYPTO_get_dynlock_destroy_callback(void)) (struct CRYPTO_dynlock_value *l, const char *file, int line); /* * CRYPTO_set_mem_functions includes CRYPTO_set_locked_mem_functions -- call * the latter last if you need different functions */ int CRYPTO_set_mem_functions(void *(*m) (size_t), void *(*r) (void *, size_t), void (*f) (void *)); int CRYPTO_set_locked_mem_functions(void *(*m) (size_t), void (*free_func) (void *)); int CRYPTO_set_mem_ex_functions(void *(*m) (size_t, const char *, int), void *(*r) (void *, size_t, const char *, int), void (*f) (void *)); int CRYPTO_set_locked_mem_ex_functions(void *(*m) (size_t, const char *, int), void (*free_func) (void *)); int CRYPTO_set_mem_debug_functions(void (*m) (void *, int, const char *, int, int), void (*r) (void *, void *, int, const char *, int, int), void (*f) (void *, int), void (*so) (long), long (*go) (void)); void CRYPTO_get_mem_functions(void *(**m) (size_t), void *(**r) (void *, size_t), void (**f) (void *)); void CRYPTO_get_locked_mem_functions(void *(**m) (size_t), void (**f) (void *)); void CRYPTO_get_mem_ex_functions(void *(**m) (size_t, const char *, int), void *(**r) (void *, size_t, const char *, int), void (**f) (void *)); void CRYPTO_get_locked_mem_ex_functions(void *(**m) (size_t, const char *, int), void (**f) (void *)); void CRYPTO_get_mem_debug_functions(void (**m) (void *, int, const char *, int, int), void (**r) (void *, void *, int, const char *, int, int), void (**f) (void *, int), void (**so) (long), long (**go) (void)); void *CRYPTO_malloc_locked(int num, const char *file, int line); void CRYPTO_free_locked(void *ptr); void *CRYPTO_malloc(int num, const char *file, int line); char *CRYPTO_strdup(const char *str, const char *file, int line); void CRYPTO_free(void *ptr); void *CRYPTO_realloc(void *addr, int num, const char *file, int line); void *CRYPTO_realloc_clean(void *addr, int old_num, int num, const char *file, int line); void *CRYPTO_remalloc(void *addr, int num, const char *file, int line); void OPENSSL_cleanse(void *ptr, size_t len); void CRYPTO_set_mem_debug_options(long bits); long CRYPTO_get_mem_debug_options(void); # define CRYPTO_push_info(info) \ CRYPTO_push_info_(info, __FILE__, __LINE__); int CRYPTO_push_info_(const char *info, const char *file, int line); int CRYPTO_pop_info(void); int CRYPTO_remove_all_info(void); /* * Default debugging functions (enabled by CRYPTO_malloc_debug_init() macro; * used as default in CRYPTO_MDEBUG compilations): */ /*- * The last argument has the following significance: * * 0: called before the actual memory allocation has taken place * 1: called after the actual memory allocation has taken place */ void CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line, int before_p); void CRYPTO_dbg_realloc(void *addr1, void *addr2, int num, const char *file, int line, int before_p); void CRYPTO_dbg_free(void *addr, int before_p); /*- * Tell the debugging code about options. By default, the following values * apply: * * 0: Clear all options. * V_CRYPTO_MDEBUG_TIME (1): Set the "Show Time" option. * V_CRYPTO_MDEBUG_THREAD (2): Set the "Show Thread Number" option. * V_CRYPTO_MDEBUG_ALL (3): 1 + 2 */ void CRYPTO_dbg_set_options(long bits); long CRYPTO_dbg_get_options(void); # ifndef OPENSSL_NO_FP_API void CRYPTO_mem_leaks_fp(FILE *); # endif void CRYPTO_mem_leaks(struct bio_st *bio); /* unsigned long order, char *file, int line, int num_bytes, char *addr */ typedef void *CRYPTO_MEM_LEAK_CB (unsigned long, const char *, int, int, void *); void CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb); /* die if we have to */ void OpenSSLDie(const char *file, int line, const char *assertion); # define OPENSSL_assert(e) (void)((e) ? 0 : (OpenSSLDie(__FILE__, __LINE__, #e),1)) unsigned long *OPENSSL_ia32cap_loc(void); # define OPENSSL_ia32cap (*(OPENSSL_ia32cap_loc())) int OPENSSL_isservice(void); int FIPS_mode(void); int FIPS_mode_set(int r); void OPENSSL_init(void); # define fips_md_init(alg) fips_md_init_ctx(alg, alg) # ifdef OPENSSL_FIPS # define fips_md_init_ctx(alg, cx) \ int alg##_Init(cx##_CTX *c) \ { \ if (FIPS_mode()) OpenSSLDie(__FILE__, __LINE__, \ "Low level API call to digest " #alg " forbidden in FIPS mode!"); \ return private_##alg##_Init(c); \ } \ int private_##alg##_Init(cx##_CTX *c) # define fips_cipher_abort(alg) \ if (FIPS_mode()) OpenSSLDie(__FILE__, __LINE__, \ "Low level API call to cipher " #alg " forbidden in FIPS mode!") # else # define fips_md_init_ctx(alg, cx) \ int alg##_Init(cx##_CTX *c) # define fips_cipher_abort(alg) while(0) # endif /* * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. * It takes an amount of time dependent on |len|, but independent of the * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements * into a defined order as the return value when a != b is undefined, other * than to be non-zero. */ int CRYPTO_memcmp(const volatile void *a, const volatile void *b, size_t len); /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_CRYPTO_strings(void); /* Error codes for the CRYPTO functions. */ /* Function codes. */ # define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 # define CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID 103 # define CRYPTO_F_CRYPTO_GET_NEW_LOCKID 101 # define CRYPTO_F_CRYPTO_SET_EX_DATA 102 # define CRYPTO_F_DEF_ADD_INDEX 104 # define CRYPTO_F_DEF_GET_CLASS 105 # define CRYPTO_F_FIPS_MODE_SET 109 # define CRYPTO_F_INT_DUP_EX_DATA 106 # define CRYPTO_F_INT_FREE_EX_DATA 107 # define CRYPTO_F_INT_NEW_EX_DATA 108 /* Reason codes. */ # define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 # define CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK 100 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/des.h ================================================ /* crypto/des/des.h */ /* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_NEW_DES_H # define HEADER_NEW_DES_H # include /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG * (via openssl/opensslconf.h */ # ifdef OPENSSL_NO_DES # error DES is disabled. # endif # ifdef OPENSSL_BUILD_SHLIBCRYPTO # undef OPENSSL_EXTERN # define OPENSSL_EXTERN OPENSSL_EXPORT # endif #ifdef __cplusplus extern "C" { #endif typedef unsigned char DES_cblock[8]; typedef /* const */ unsigned char const_DES_cblock[8]; /* * With "const", gcc 2.8.1 on Solaris thinks that DES_cblock * and * const_DES_cblock * are incompatible pointer types. */ typedef struct DES_ks { union { DES_cblock cblock; /* * make sure things are correct size on machines with 8 byte longs */ DES_LONG deslong[2]; } ks[16]; } DES_key_schedule; # ifndef OPENSSL_DISABLE_OLD_DES_SUPPORT # ifndef OPENSSL_ENABLE_OLD_DES_SUPPORT # define OPENSSL_ENABLE_OLD_DES_SUPPORT # endif # endif # ifdef OPENSSL_ENABLE_OLD_DES_SUPPORT # include # endif # define DES_KEY_SZ (sizeof(DES_cblock)) # define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) # define DES_ENCRYPT 1 # define DES_DECRYPT 0 # define DES_CBC_MODE 0 # define DES_PCBC_MODE 1 # define DES_ecb2_encrypt(i,o,k1,k2,e) \ DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) # define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) # define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) # define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) OPENSSL_DECLARE_GLOBAL(int, DES_check_key); /* defaults to false */ # define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key) OPENSSL_DECLARE_GLOBAL(int, DES_rw_mode); /* defaults to DES_PCBC_MODE */ # define DES_rw_mode OPENSSL_GLOBAL_REF(DES_rw_mode) const char *DES_options(void); void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, int enc); DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, long length, DES_key_schedule *schedule, const_DES_cblock *ivec); /* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */ void DES_cbc_encrypt(const unsigned char *input, unsigned char *output, long length, DES_key_schedule *schedule, DES_cblock *ivec, int enc); void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, long length, DES_key_schedule *schedule, DES_cblock *ivec, int enc); void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output, long length, DES_key_schedule *schedule, DES_cblock *ivec, const_DES_cblock *inw, const_DES_cblock *outw, int enc); void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, long length, DES_key_schedule *schedule, DES_cblock *ivec, int enc); void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, DES_key_schedule *ks, int enc); /* * This is the DES encryption function that gets called by just about every * other DES routine in the library. You should not use this function except * to implement 'modes' of DES. I say this because the functions that call * this routine do the conversion from 'char *' to long, and this needs to be * done to make sure 'non-aligned' memory access do not occur. The * characters are loaded 'little endian'. Data is a pointer to 2 unsigned * long's and ks is the DES_key_schedule to use. enc, is non zero specifies * encryption, zero if decryption. */ void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); /* * This functions is the same as DES_encrypt1() except that the DES initial * permutation (IP) and final permutation (FP) have been left out. As for * DES_encrypt1(), you should not use this function. It is used by the * routines in the library that implement triple DES. IP() DES_encrypt2() * DES_encrypt2() DES_encrypt2() FP() is the same as DES_encrypt1() * DES_encrypt1() DES_encrypt1() except faster :-). */ void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc); void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3); void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3); void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, int enc); void DES_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec1, DES_cblock *ivec2, int enc); void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, int *num, int enc); void DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, int enc); void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *ks1, DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, int *num); # if 0 void DES_xwhite_in2out(const_DES_cblock *DES_key, const_DES_cblock *in_white, DES_cblock *out_white); # endif int DES_enc_read(int fd, void *buf, int len, DES_key_schedule *sched, DES_cblock *iv); int DES_enc_write(int fd, const void *buf, int len, DES_key_schedule *sched, DES_cblock *iv); char *DES_fcrypt(const char *buf, const char *salt, char *ret); char *DES_crypt(const char *buf, const char *salt); void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits, long length, DES_key_schedule *schedule, DES_cblock *ivec); void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, long length, DES_key_schedule *schedule, DES_cblock *ivec, int enc); DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], long length, int out_count, DES_cblock *seed); int DES_random_key(DES_cblock *ret); void DES_set_odd_parity(DES_cblock *key); int DES_check_key_parity(const_DES_cblock *key); int DES_is_weak_key(const_DES_cblock *key); /* * DES_set_key (= set_key = DES_key_sched = key_sched) calls * DES_set_key_checked if global variable DES_check_key is set, * DES_set_key_unchecked otherwise. */ int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule); void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); # ifdef OPENSSL_FIPS void private_DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); # endif void DES_string_to_key(const char *str, DES_cblock *key); void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2); void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *schedule, DES_cblock *ivec, int *num, int enc); void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, DES_key_schedule *schedule, DES_cblock *ivec, int *num); int DES_read_password(DES_cblock *key, const char *prompt, int verify); int DES_read_2passwords(DES_cblock *key1, DES_cblock *key2, const char *prompt, int verify); # define DES_fixup_key_parity DES_set_odd_parity #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/des_old.h ================================================ /* crypto/des/des_old.h */ /*- * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING * * The function names in here are deprecated and are only present to * provide an interface compatible with openssl 0.9.6 and older as * well as libdes. OpenSSL now provides functions where "des_" has * been replaced with "DES_" in the names, to make it possible to * make incompatible changes that are needed for C type security and * other stuff. * * This include files has two compatibility modes: * * - If OPENSSL_DES_LIBDES_COMPATIBILITY is defined, you get an API * that is compatible with libdes and SSLeay. * - If OPENSSL_DES_LIBDES_COMPATIBILITY isn't defined, you get an * API that is compatible with OpenSSL 0.9.5x to 0.9.6x. * * Note that these modes break earlier snapshots of OpenSSL, where * libdes compatibility was the only available mode or (later on) the * prefered compatibility mode. However, after much consideration * (and more or less violent discussions with external parties), it * was concluded that OpenSSL should be compatible with earlier versions * of itself before anything else. Also, in all honesty, libdes is * an old beast that shouldn't really be used any more. * * Please consider starting to use the DES_ functions rather than the * des_ ones. The des_ functions will disappear completely before * OpenSSL 1.0! * * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING */ /* * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project * 2001. */ /* ==================================================================== * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_DES_H # define HEADER_DES_H # include /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG */ # ifdef OPENSSL_NO_DES # error DES is disabled. # endif # ifndef HEADER_NEW_DES_H # error You must include des.h, not des_old.h directly. # endif # ifdef _KERBEROS_DES_H # error replaces . # endif # include # ifdef OPENSSL_BUILD_SHLIBCRYPTO # undef OPENSSL_EXTERN # define OPENSSL_EXTERN OPENSSL_EXPORT # endif #ifdef __cplusplus extern "C" { #endif # ifdef _ # undef _ # endif typedef unsigned char _ossl_old_des_cblock[8]; typedef struct _ossl_old_des_ks_struct { union { _ossl_old_des_cblock _; /* * make sure things are correct size on machines with 8 byte longs */ DES_LONG pad[2]; } ks; } _ossl_old_des_key_schedule[16]; # ifndef OPENSSL_DES_LIBDES_COMPATIBILITY # define des_cblock DES_cblock # define const_des_cblock const_DES_cblock # define des_key_schedule DES_key_schedule # define des_ecb3_encrypt(i,o,k1,k2,k3,e)\ DES_ecb3_encrypt((i),(o),&(k1),&(k2),&(k3),(e)) # define des_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e)\ DES_ede3_cbc_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(e)) # define des_ede3_cbcm_encrypt(i,o,l,k1,k2,k3,iv1,iv2,e)\ DES_ede3_cbcm_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv1),(iv2),(e)) # define des_ede3_cfb64_encrypt(i,o,l,k1,k2,k3,iv,n,e)\ DES_ede3_cfb64_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(n),(e)) # define des_ede3_ofb64_encrypt(i,o,l,k1,k2,k3,iv,n)\ DES_ede3_ofb64_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(n)) # define des_options()\ DES_options() # define des_cbc_cksum(i,o,l,k,iv)\ DES_cbc_cksum((i),(o),(l),&(k),(iv)) # define des_cbc_encrypt(i,o,l,k,iv,e)\ DES_cbc_encrypt((i),(o),(l),&(k),(iv),(e)) # define des_ncbc_encrypt(i,o,l,k,iv,e)\ DES_ncbc_encrypt((i),(o),(l),&(k),(iv),(e)) # define des_xcbc_encrypt(i,o,l,k,iv,inw,outw,e)\ DES_xcbc_encrypt((i),(o),(l),&(k),(iv),(inw),(outw),(e)) # define des_cfb_encrypt(i,o,n,l,k,iv,e)\ DES_cfb_encrypt((i),(o),(n),(l),&(k),(iv),(e)) # define des_ecb_encrypt(i,o,k,e)\ DES_ecb_encrypt((i),(o),&(k),(e)) # define des_encrypt1(d,k,e)\ DES_encrypt1((d),&(k),(e)) # define des_encrypt2(d,k,e)\ DES_encrypt2((d),&(k),(e)) # define des_encrypt3(d,k1,k2,k3)\ DES_encrypt3((d),&(k1),&(k2),&(k3)) # define des_decrypt3(d,k1,k2,k3)\ DES_decrypt3((d),&(k1),&(k2),&(k3)) # define des_xwhite_in2out(k,i,o)\ DES_xwhite_in2out((k),(i),(o)) # define des_enc_read(f,b,l,k,iv)\ DES_enc_read((f),(b),(l),&(k),(iv)) # define des_enc_write(f,b,l,k,iv)\ DES_enc_write((f),(b),(l),&(k),(iv)) # define des_fcrypt(b,s,r)\ DES_fcrypt((b),(s),(r)) # if 0 # define des_crypt(b,s)\ DES_crypt((b),(s)) # if !defined(PERL5) && !defined(__FreeBSD__) && !defined(NeXT) && !defined(__OpenBSD__) # define crypt(b,s)\ DES_crypt((b),(s)) # endif # endif # define des_ofb_encrypt(i,o,n,l,k,iv)\ DES_ofb_encrypt((i),(o),(n),(l),&(k),(iv)) # define des_pcbc_encrypt(i,o,l,k,iv,e)\ DES_pcbc_encrypt((i),(o),(l),&(k),(iv),(e)) # define des_quad_cksum(i,o,l,c,s)\ DES_quad_cksum((i),(o),(l),(c),(s)) # define des_random_seed(k)\ _ossl_096_des_random_seed((k)) # define des_random_key(r)\ DES_random_key((r)) # define des_read_password(k,p,v) \ DES_read_password((k),(p),(v)) # define des_read_2passwords(k1,k2,p,v) \ DES_read_2passwords((k1),(k2),(p),(v)) # define des_set_odd_parity(k)\ DES_set_odd_parity((k)) # define des_check_key_parity(k)\ DES_check_key_parity((k)) # define des_is_weak_key(k)\ DES_is_weak_key((k)) # define des_set_key(k,ks)\ DES_set_key((k),&(ks)) # define des_key_sched(k,ks)\ DES_key_sched((k),&(ks)) # define des_set_key_checked(k,ks)\ DES_set_key_checked((k),&(ks)) # define des_set_key_unchecked(k,ks)\ DES_set_key_unchecked((k),&(ks)) # define des_string_to_key(s,k)\ DES_string_to_key((s),(k)) # define des_string_to_2keys(s,k1,k2)\ DES_string_to_2keys((s),(k1),(k2)) # define des_cfb64_encrypt(i,o,l,ks,iv,n,e)\ DES_cfb64_encrypt((i),(o),(l),&(ks),(iv),(n),(e)) # define des_ofb64_encrypt(i,o,l,ks,iv,n)\ DES_ofb64_encrypt((i),(o),(l),&(ks),(iv),(n)) # define des_ecb2_encrypt(i,o,k1,k2,e) \ des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) # define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) # define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) # define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) # define des_check_key DES_check_key # define des_rw_mode DES_rw_mode # else /* libdes compatibility */ /* * Map all symbol names to _ossl_old_des_* form, so we avoid all clashes with * libdes */ # define des_cblock _ossl_old_des_cblock # define des_key_schedule _ossl_old_des_key_schedule # define des_ecb3_encrypt(i,o,k1,k2,k3,e)\ _ossl_old_des_ecb3_encrypt((i),(o),(k1),(k2),(k3),(e)) # define des_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e)\ _ossl_old_des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(e)) # define des_ede3_cfb64_encrypt(i,o,l,k1,k2,k3,iv,n,e)\ _ossl_old_des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n),(e)) # define des_ede3_ofb64_encrypt(i,o,l,k1,k2,k3,iv,n)\ _ossl_old_des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n)) # define des_options()\ _ossl_old_des_options() # define des_cbc_cksum(i,o,l,k,iv)\ _ossl_old_des_cbc_cksum((i),(o),(l),(k),(iv)) # define des_cbc_encrypt(i,o,l,k,iv,e)\ _ossl_old_des_cbc_encrypt((i),(o),(l),(k),(iv),(e)) # define des_ncbc_encrypt(i,o,l,k,iv,e)\ _ossl_old_des_ncbc_encrypt((i),(o),(l),(k),(iv),(e)) # define des_xcbc_encrypt(i,o,l,k,iv,inw,outw,e)\ _ossl_old_des_xcbc_encrypt((i),(o),(l),(k),(iv),(inw),(outw),(e)) # define des_cfb_encrypt(i,o,n,l,k,iv,e)\ _ossl_old_des_cfb_encrypt((i),(o),(n),(l),(k),(iv),(e)) # define des_ecb_encrypt(i,o,k,e)\ _ossl_old_des_ecb_encrypt((i),(o),(k),(e)) # define des_encrypt(d,k,e)\ _ossl_old_des_encrypt((d),(k),(e)) # define des_encrypt2(d,k,e)\ _ossl_old_des_encrypt2((d),(k),(e)) # define des_encrypt3(d,k1,k2,k3)\ _ossl_old_des_encrypt3((d),(k1),(k2),(k3)) # define des_decrypt3(d,k1,k2,k3)\ _ossl_old_des_decrypt3((d),(k1),(k2),(k3)) # define des_xwhite_in2out(k,i,o)\ _ossl_old_des_xwhite_in2out((k),(i),(o)) # define des_enc_read(f,b,l,k,iv)\ _ossl_old_des_enc_read((f),(b),(l),(k),(iv)) # define des_enc_write(f,b,l,k,iv)\ _ossl_old_des_enc_write((f),(b),(l),(k),(iv)) # define des_fcrypt(b,s,r)\ _ossl_old_des_fcrypt((b),(s),(r)) # define des_crypt(b,s)\ _ossl_old_des_crypt((b),(s)) # if 0 # define crypt(b,s)\ _ossl_old_crypt((b),(s)) # endif # define des_ofb_encrypt(i,o,n,l,k,iv)\ _ossl_old_des_ofb_encrypt((i),(o),(n),(l),(k),(iv)) # define des_pcbc_encrypt(i,o,l,k,iv,e)\ _ossl_old_des_pcbc_encrypt((i),(o),(l),(k),(iv),(e)) # define des_quad_cksum(i,o,l,c,s)\ _ossl_old_des_quad_cksum((i),(o),(l),(c),(s)) # define des_random_seed(k)\ _ossl_old_des_random_seed((k)) # define des_random_key(r)\ _ossl_old_des_random_key((r)) # define des_read_password(k,p,v) \ _ossl_old_des_read_password((k),(p),(v)) # define des_read_2passwords(k1,k2,p,v) \ _ossl_old_des_read_2passwords((k1),(k2),(p),(v)) # define des_set_odd_parity(k)\ _ossl_old_des_set_odd_parity((k)) # define des_is_weak_key(k)\ _ossl_old_des_is_weak_key((k)) # define des_set_key(k,ks)\ _ossl_old_des_set_key((k),(ks)) # define des_key_sched(k,ks)\ _ossl_old_des_key_sched((k),(ks)) # define des_string_to_key(s,k)\ _ossl_old_des_string_to_key((s),(k)) # define des_string_to_2keys(s,k1,k2)\ _ossl_old_des_string_to_2keys((s),(k1),(k2)) # define des_cfb64_encrypt(i,o,l,ks,iv,n,e)\ _ossl_old_des_cfb64_encrypt((i),(o),(l),(ks),(iv),(n),(e)) # define des_ofb64_encrypt(i,o,l,ks,iv,n)\ _ossl_old_des_ofb64_encrypt((i),(o),(l),(ks),(iv),(n)) # define des_ecb2_encrypt(i,o,k1,k2,e) \ des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) # define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) # define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) # define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) # define des_check_key DES_check_key # define des_rw_mode DES_rw_mode # endif const char *_ossl_old_des_options(void); void _ossl_old_des_ecb3_encrypt(_ossl_old_des_cblock *input, _ossl_old_des_cblock *output, _ossl_old_des_key_schedule ks1, _ossl_old_des_key_schedule ks2, _ossl_old_des_key_schedule ks3, int enc); DES_LONG _ossl_old_des_cbc_cksum(_ossl_old_des_cblock *input, _ossl_old_des_cblock *output, long length, _ossl_old_des_key_schedule schedule, _ossl_old_des_cblock *ivec); void _ossl_old_des_cbc_encrypt(_ossl_old_des_cblock *input, _ossl_old_des_cblock *output, long length, _ossl_old_des_key_schedule schedule, _ossl_old_des_cblock *ivec, int enc); void _ossl_old_des_ncbc_encrypt(_ossl_old_des_cblock *input, _ossl_old_des_cblock *output, long length, _ossl_old_des_key_schedule schedule, _ossl_old_des_cblock *ivec, int enc); void _ossl_old_des_xcbc_encrypt(_ossl_old_des_cblock *input, _ossl_old_des_cblock *output, long length, _ossl_old_des_key_schedule schedule, _ossl_old_des_cblock *ivec, _ossl_old_des_cblock *inw, _ossl_old_des_cblock *outw, int enc); void _ossl_old_des_cfb_encrypt(unsigned char *in, unsigned char *out, int numbits, long length, _ossl_old_des_key_schedule schedule, _ossl_old_des_cblock *ivec, int enc); void _ossl_old_des_ecb_encrypt(_ossl_old_des_cblock *input, _ossl_old_des_cblock *output, _ossl_old_des_key_schedule ks, int enc); void _ossl_old_des_encrypt(DES_LONG *data, _ossl_old_des_key_schedule ks, int enc); void _ossl_old_des_encrypt2(DES_LONG *data, _ossl_old_des_key_schedule ks, int enc); void _ossl_old_des_encrypt3(DES_LONG *data, _ossl_old_des_key_schedule ks1, _ossl_old_des_key_schedule ks2, _ossl_old_des_key_schedule ks3); void _ossl_old_des_decrypt3(DES_LONG *data, _ossl_old_des_key_schedule ks1, _ossl_old_des_key_schedule ks2, _ossl_old_des_key_schedule ks3); void _ossl_old_des_ede3_cbc_encrypt(_ossl_old_des_cblock *input, _ossl_old_des_cblock *output, long length, _ossl_old_des_key_schedule ks1, _ossl_old_des_key_schedule ks2, _ossl_old_des_key_schedule ks3, _ossl_old_des_cblock *ivec, int enc); void _ossl_old_des_ede3_cfb64_encrypt(unsigned char *in, unsigned char *out, long length, _ossl_old_des_key_schedule ks1, _ossl_old_des_key_schedule ks2, _ossl_old_des_key_schedule ks3, _ossl_old_des_cblock *ivec, int *num, int enc); void _ossl_old_des_ede3_ofb64_encrypt(unsigned char *in, unsigned char *out, long length, _ossl_old_des_key_schedule ks1, _ossl_old_des_key_schedule ks2, _ossl_old_des_key_schedule ks3, _ossl_old_des_cblock *ivec, int *num); # if 0 void _ossl_old_des_xwhite_in2out(_ossl_old_des_cblock (*des_key), _ossl_old_des_cblock (*in_white), _ossl_old_des_cblock (*out_white)); # endif int _ossl_old_des_enc_read(int fd, char *buf, int len, _ossl_old_des_key_schedule sched, _ossl_old_des_cblock *iv); int _ossl_old_des_enc_write(int fd, char *buf, int len, _ossl_old_des_key_schedule sched, _ossl_old_des_cblock *iv); char *_ossl_old_des_fcrypt(const char *buf, const char *salt, char *ret); char *_ossl_old_des_crypt(const char *buf, const char *salt); # if !defined(PERL5) && !defined(NeXT) char *_ossl_old_crypt(const char *buf, const char *salt); # endif void _ossl_old_des_ofb_encrypt(unsigned char *in, unsigned char *out, int numbits, long length, _ossl_old_des_key_schedule schedule, _ossl_old_des_cblock *ivec); void _ossl_old_des_pcbc_encrypt(_ossl_old_des_cblock *input, _ossl_old_des_cblock *output, long length, _ossl_old_des_key_schedule schedule, _ossl_old_des_cblock *ivec, int enc); DES_LONG _ossl_old_des_quad_cksum(_ossl_old_des_cblock *input, _ossl_old_des_cblock *output, long length, int out_count, _ossl_old_des_cblock *seed); void _ossl_old_des_random_seed(_ossl_old_des_cblock key); void _ossl_old_des_random_key(_ossl_old_des_cblock ret); int _ossl_old_des_read_password(_ossl_old_des_cblock *key, const char *prompt, int verify); int _ossl_old_des_read_2passwords(_ossl_old_des_cblock *key1, _ossl_old_des_cblock *key2, const char *prompt, int verify); void _ossl_old_des_set_odd_parity(_ossl_old_des_cblock *key); int _ossl_old_des_is_weak_key(_ossl_old_des_cblock *key); int _ossl_old_des_set_key(_ossl_old_des_cblock *key, _ossl_old_des_key_schedule schedule); int _ossl_old_des_key_sched(_ossl_old_des_cblock *key, _ossl_old_des_key_schedule schedule); void _ossl_old_des_string_to_key(char *str, _ossl_old_des_cblock *key); void _ossl_old_des_string_to_2keys(char *str, _ossl_old_des_cblock *key1, _ossl_old_des_cblock *key2); void _ossl_old_des_cfb64_encrypt(unsigned char *in, unsigned char *out, long length, _ossl_old_des_key_schedule schedule, _ossl_old_des_cblock *ivec, int *num, int enc); void _ossl_old_des_ofb64_encrypt(unsigned char *in, unsigned char *out, long length, _ossl_old_des_key_schedule schedule, _ossl_old_des_cblock *ivec, int *num); void _ossl_096_des_random_seed(des_cblock *key); /* * The following definitions provide compatibility with the MIT Kerberos * library. The _ossl_old_des_key_schedule structure is not binary * compatible. */ # define _KERBEROS_DES_H # define KRBDES_ENCRYPT DES_ENCRYPT # define KRBDES_DECRYPT DES_DECRYPT # ifdef KERBEROS # define ENCRYPT DES_ENCRYPT # define DECRYPT DES_DECRYPT # endif # ifndef NCOMPAT # define C_Block des_cblock # define Key_schedule des_key_schedule # define KEY_SZ DES_KEY_SZ # define string_to_key des_string_to_key # define read_pw_string des_read_pw_string # define random_key des_random_key # define pcbc_encrypt des_pcbc_encrypt # define set_key des_set_key # define key_sched des_key_sched # define ecb_encrypt des_ecb_encrypt # define cbc_encrypt des_cbc_encrypt # define ncbc_encrypt des_ncbc_encrypt # define xcbc_encrypt des_xcbc_encrypt # define cbc_cksum des_cbc_cksum # define quad_cksum des_quad_cksum # define check_parity des_check_key_parity # endif # define des_fixup_key_parity DES_fixup_key_parity #ifdef __cplusplus } #endif /* for DES_read_pw_string et al */ # include #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/dh.h ================================================ /* crypto/dh/dh.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_DH_H # define HEADER_DH_H # include # ifdef OPENSSL_NO_DH # error DH is disabled. # endif # ifndef OPENSSL_NO_BIO # include # endif # include # ifndef OPENSSL_NO_DEPRECATED # include # endif # ifndef OPENSSL_DH_MAX_MODULUS_BITS # define OPENSSL_DH_MAX_MODULUS_BITS 10000 # endif # define DH_FLAG_CACHE_MONT_P 0x01 /* * new with 0.9.7h; the built-in DH * implementation now uses constant time * modular exponentiation for secret exponents * by default. This flag causes the * faster variable sliding window method to * be used for all exponents. */ # define DH_FLAG_NO_EXP_CONSTTIME 0x02 /* * If this flag is set the DH method is FIPS compliant and can be used in * FIPS mode. This is set in the validated module method. If an application * sets this flag in its own methods it is its reposibility to ensure the * result is compliant. */ # define DH_FLAG_FIPS_METHOD 0x0400 /* * If this flag is set the operations normally disabled in FIPS mode are * permitted it is then the applications responsibility to ensure that the * usage is compliant. */ # define DH_FLAG_NON_FIPS_ALLOW 0x0400 #ifdef __cplusplus extern "C" { #endif /* Already defined in ossl_typ.h */ /* typedef struct dh_st DH; */ /* typedef struct dh_method DH_METHOD; */ struct dh_method { const char *name; /* Methods here */ int (*generate_key) (DH *dh); int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh); /* Can be null */ int (*bn_mod_exp) (const DH *dh, BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); int (*init) (DH *dh); int (*finish) (DH *dh); int flags; char *app_data; /* If this is non-NULL, it will be used to generate parameters */ int (*generate_params) (DH *dh, int prime_len, int generator, BN_GENCB *cb); }; struct dh_st { /* * This first argument is used to pick up errors when a DH is passed * instead of a EVP_PKEY */ int pad; int version; BIGNUM *p; BIGNUM *g; long length; /* optional */ BIGNUM *pub_key; /* g^x % p */ BIGNUM *priv_key; /* x */ int flags; BN_MONT_CTX *method_mont_p; /* Place holders if we want to do X9.42 DH */ BIGNUM *q; BIGNUM *j; unsigned char *seed; int seedlen; BIGNUM *counter; int references; CRYPTO_EX_DATA ex_data; const DH_METHOD *meth; ENGINE *engine; }; # define DH_GENERATOR_2 2 /* #define DH_GENERATOR_3 3 */ # define DH_GENERATOR_5 5 /* DH_check error codes */ # define DH_CHECK_P_NOT_PRIME 0x01 # define DH_CHECK_P_NOT_SAFE_PRIME 0x02 # define DH_UNABLE_TO_CHECK_GENERATOR 0x04 # define DH_NOT_SUITABLE_GENERATOR 0x08 # define DH_CHECK_Q_NOT_PRIME 0x10 # define DH_CHECK_INVALID_Q_VALUE 0x20 # define DH_CHECK_INVALID_J_VALUE 0x40 /* DH_check_pub_key error codes */ # define DH_CHECK_PUBKEY_TOO_SMALL 0x01 # define DH_CHECK_PUBKEY_TOO_LARGE 0x02 # define DH_CHECK_PUBKEY_INVALID 0x04 /* * primes p where (p-1)/2 is prime too are called "safe"; we define this for * backward compatibility: */ # define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME # define d2i_DHparams_fp(fp,x) (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ (char *(*)())d2i_DHparams,(fp),(unsigned char **)(x)) # define i2d_DHparams_fp(fp,x) ASN1_i2d_fp(i2d_DHparams,(fp), \ (unsigned char *)(x)) # define d2i_DHparams_bio(bp,x) ASN1_d2i_bio_of(DH,DH_new,d2i_DHparams,bp,x) # define i2d_DHparams_bio(bp,x) ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x) DH *DHparams_dup(DH *); const DH_METHOD *DH_OpenSSL(void); void DH_set_default_method(const DH_METHOD *meth); const DH_METHOD *DH_get_default_method(void); int DH_set_method(DH *dh, const DH_METHOD *meth); DH *DH_new_method(ENGINE *engine); DH *DH_new(void); void DH_free(DH *dh); int DH_up_ref(DH *dh); int DH_size(const DH *dh); int DH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); int DH_set_ex_data(DH *d, int idx, void *arg); void *DH_get_ex_data(DH *d, int idx); /* Deprecated version */ # ifndef OPENSSL_NO_DEPRECATED DH *DH_generate_parameters(int prime_len, int generator, void (*callback) (int, int, void *), void *cb_arg); # endif /* !defined(OPENSSL_NO_DEPRECATED) */ /* New version */ int DH_generate_parameters_ex(DH *dh, int prime_len, int generator, BN_GENCB *cb); int DH_check(const DH *dh, int *codes); int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *codes); int DH_generate_key(DH *dh); int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh); DH *d2i_DHparams(DH **a, const unsigned char **pp, long length); int i2d_DHparams(const DH *a, unsigned char **pp); DH *d2i_DHxparams(DH **a, const unsigned char **pp, long length); int i2d_DHxparams(const DH *a, unsigned char **pp); # ifndef OPENSSL_NO_FP_API int DHparams_print_fp(FILE *fp, const DH *x); # endif # ifndef OPENSSL_NO_BIO int DHparams_print(BIO *bp, const DH *x); # else int DHparams_print(char *bp, const DH *x); # endif /* RFC 5114 parameters */ DH *DH_get_1024_160(void); DH *DH_get_2048_224(void); DH *DH_get_2048_256(void); /* RFC2631 KDF */ int DH_KDF_X9_42(unsigned char *out, size_t outlen, const unsigned char *Z, size_t Zlen, ASN1_OBJECT *key_oid, const unsigned char *ukm, size_t ukmlen, const EVP_MD *md); # define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL) # define EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, len) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN, len, NULL) # define EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ EVP_PKEY_CTRL_DH_PARAMGEN_TYPE, typ, NULL) # define EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, gen) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR, gen, NULL) # define EVP_PKEY_CTX_set_dh_rfc5114(ctx, gen) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) # define EVP_PKEY_CTX_set_dhx_rfc5114(ctx, gen) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) # define EVP_PKEY_CTX_set_dh_kdf_type(ctx, kdf) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_DH_KDF_TYPE, kdf, NULL) # define EVP_PKEY_CTX_get_dh_kdf_type(ctx) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_DH_KDF_TYPE, -2, NULL) # define EVP_PKEY_CTX_set0_dh_kdf_oid(ctx, oid) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_DH_KDF_OID, 0, (void *)oid) # define EVP_PKEY_CTX_get0_dh_kdf_oid(ctx, poid) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_GET_DH_KDF_OID, 0, (void *)poid) # define EVP_PKEY_CTX_set_dh_kdf_md(ctx, md) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_DH_KDF_MD, 0, (void *)md) # define EVP_PKEY_CTX_get_dh_kdf_md(ctx, pmd) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_GET_DH_KDF_MD, 0, (void *)pmd) # define EVP_PKEY_CTX_set_dh_kdf_outlen(ctx, len) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_DH_KDF_OUTLEN, len, NULL) # define EVP_PKEY_CTX_get_dh_kdf_outlen(ctx, plen) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN, 0, (void *)plen) # define EVP_PKEY_CTX_set0_dh_kdf_ukm(ctx, p, plen) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_DH_KDF_UKM, plen, (void *)p) # define EVP_PKEY_CTX_get0_dh_kdf_ukm(ctx, p) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_GET_DH_KDF_UKM, 0, (void *)p) # define EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN (EVP_PKEY_ALG_CTRL + 1) # define EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR (EVP_PKEY_ALG_CTRL + 2) # define EVP_PKEY_CTRL_DH_RFC5114 (EVP_PKEY_ALG_CTRL + 3) # define EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN (EVP_PKEY_ALG_CTRL + 4) # define EVP_PKEY_CTRL_DH_PARAMGEN_TYPE (EVP_PKEY_ALG_CTRL + 5) # define EVP_PKEY_CTRL_DH_KDF_TYPE (EVP_PKEY_ALG_CTRL + 6) # define EVP_PKEY_CTRL_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 7) # define EVP_PKEY_CTRL_GET_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 8) # define EVP_PKEY_CTRL_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 9) # define EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 10) # define EVP_PKEY_CTRL_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 11) # define EVP_PKEY_CTRL_GET_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 12) # define EVP_PKEY_CTRL_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 13) # define EVP_PKEY_CTRL_GET_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 14) /* KDF types */ # define EVP_PKEY_DH_KDF_NONE 1 # define EVP_PKEY_DH_KDF_X9_42 2 /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_DH_strings(void); /* Error codes for the DH functions. */ /* Function codes. */ # define DH_F_COMPUTE_KEY 102 # define DH_F_DHPARAMS_PRINT_FP 101 # define DH_F_DH_BUILTIN_GENPARAMS 106 # define DH_F_DH_CMS_DECRYPT 117 # define DH_F_DH_CMS_SET_PEERKEY 118 # define DH_F_DH_CMS_SET_SHARED_INFO 119 # define DH_F_DH_COMPUTE_KEY 114 # define DH_F_DH_GENERATE_KEY 115 # define DH_F_DH_GENERATE_PARAMETERS_EX 116 # define DH_F_DH_NEW_METHOD 105 # define DH_F_DH_PARAM_DECODE 107 # define DH_F_DH_PRIV_DECODE 110 # define DH_F_DH_PRIV_ENCODE 111 # define DH_F_DH_PUB_DECODE 108 # define DH_F_DH_PUB_ENCODE 109 # define DH_F_DO_DH_PRINT 100 # define DH_F_GENERATE_KEY 103 # define DH_F_GENERATE_PARAMETERS 104 # define DH_F_PKEY_DH_DERIVE 112 # define DH_F_PKEY_DH_KEYGEN 113 /* Reason codes. */ # define DH_R_BAD_GENERATOR 101 # define DH_R_BN_DECODE_ERROR 109 # define DH_R_BN_ERROR 106 # define DH_R_DECODE_ERROR 104 # define DH_R_INVALID_PUBKEY 102 # define DH_R_KDF_PARAMETER_ERROR 112 # define DH_R_KEYS_NOT_SET 108 # define DH_R_KEY_SIZE_TOO_SMALL 110 # define DH_R_MODULUS_TOO_LARGE 103 # define DH_R_NON_FIPS_METHOD 111 # define DH_R_NO_PARAMETERS_SET 107 # define DH_R_NO_PRIVATE_VALUE 100 # define DH_R_PARAMETER_ENCODING_ERROR 105 # define DH_R_PEER_KEY_ERROR 113 # define DH_R_SHARED_INFO_ERROR 114 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/dsa.h ================================================ /* crypto/dsa/dsa.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* * The DSS routines are based on patches supplied by * Steven Schoch . He basically did the * work and I have just tweaked them a little to fit into my * stylistic vision for SSLeay :-) */ #ifndef HEADER_DSA_H # define HEADER_DSA_H # include # ifdef OPENSSL_NO_DSA # error DSA is disabled. # endif # ifndef OPENSSL_NO_BIO # include # endif # include # include # ifndef OPENSSL_NO_DEPRECATED # include # ifndef OPENSSL_NO_DH # include # endif # endif # ifndef OPENSSL_DSA_MAX_MODULUS_BITS # define OPENSSL_DSA_MAX_MODULUS_BITS 10000 # endif # define DSA_FLAG_CACHE_MONT_P 0x01 /* * new with 0.9.7h; the built-in DSA implementation now uses constant time * modular exponentiation for secret exponents by default. This flag causes * the faster variable sliding window method to be used for all exponents. */ # define DSA_FLAG_NO_EXP_CONSTTIME 0x02 /* * If this flag is set the DSA method is FIPS compliant and can be used in * FIPS mode. This is set in the validated module method. If an application * sets this flag in its own methods it is its reposibility to ensure the * result is compliant. */ # define DSA_FLAG_FIPS_METHOD 0x0400 /* * If this flag is set the operations normally disabled in FIPS mode are * permitted it is then the applications responsibility to ensure that the * usage is compliant. */ # define DSA_FLAG_NON_FIPS_ALLOW 0x0400 #ifdef __cplusplus extern "C" { #endif /* Already defined in ossl_typ.h */ /* typedef struct dsa_st DSA; */ /* typedef struct dsa_method DSA_METHOD; */ typedef struct DSA_SIG_st { BIGNUM *r; BIGNUM *s; } DSA_SIG; struct dsa_method { const char *name; DSA_SIG *(*dsa_do_sign) (const unsigned char *dgst, int dlen, DSA *dsa); int (*dsa_sign_setup) (DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp); int (*dsa_do_verify) (const unsigned char *dgst, int dgst_len, DSA_SIG *sig, DSA *dsa); int (*dsa_mod_exp) (DSA *dsa, BIGNUM *rr, BIGNUM *a1, BIGNUM *p1, BIGNUM *a2, BIGNUM *p2, BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *in_mont); /* Can be null */ int (*bn_mod_exp) (DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); int (*init) (DSA *dsa); int (*finish) (DSA *dsa); int flags; char *app_data; /* If this is non-NULL, it is used to generate DSA parameters */ int (*dsa_paramgen) (DSA *dsa, int bits, const unsigned char *seed, int seed_len, int *counter_ret, unsigned long *h_ret, BN_GENCB *cb); /* If this is non-NULL, it is used to generate DSA keys */ int (*dsa_keygen) (DSA *dsa); }; struct dsa_st { /* * This first variable is used to pick up errors where a DSA is passed * instead of of a EVP_PKEY */ int pad; long version; int write_params; BIGNUM *p; BIGNUM *q; /* == 20 */ BIGNUM *g; BIGNUM *pub_key; /* y public key */ BIGNUM *priv_key; /* x private key */ BIGNUM *kinv; /* Signing pre-calc */ BIGNUM *r; /* Signing pre-calc */ int flags; /* Normally used to cache montgomery values */ BN_MONT_CTX *method_mont_p; int references; CRYPTO_EX_DATA ex_data; const DSA_METHOD *meth; /* functional reference if 'meth' is ENGINE-provided */ ENGINE *engine; }; # define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x)) # define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \ (unsigned char *)(x)) # define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x) # define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x) DSA *DSAparams_dup(DSA *x); DSA_SIG *DSA_SIG_new(void); void DSA_SIG_free(DSA_SIG *a); int i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp); DSA_SIG *d2i_DSA_SIG(DSA_SIG **v, const unsigned char **pp, long length); DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); int DSA_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig, DSA *dsa); const DSA_METHOD *DSA_OpenSSL(void); void DSA_set_default_method(const DSA_METHOD *); const DSA_METHOD *DSA_get_default_method(void); int DSA_set_method(DSA *dsa, const DSA_METHOD *); DSA *DSA_new(void); DSA *DSA_new_method(ENGINE *engine); void DSA_free(DSA *r); /* "up" the DSA object's reference count */ int DSA_up_ref(DSA *r); int DSA_size(const DSA *); /* next 4 return -1 on error */ int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp); int DSA_sign(int type, const unsigned char *dgst, int dlen, unsigned char *sig, unsigned int *siglen, DSA *dsa); int DSA_verify(int type, const unsigned char *dgst, int dgst_len, const unsigned char *sigbuf, int siglen, DSA *dsa); int DSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); int DSA_set_ex_data(DSA *d, int idx, void *arg); void *DSA_get_ex_data(DSA *d, int idx); DSA *d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length); DSA *d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length); DSA *d2i_DSAparams(DSA **a, const unsigned char **pp, long length); /* Deprecated version */ # ifndef OPENSSL_NO_DEPRECATED DSA *DSA_generate_parameters(int bits, unsigned char *seed, int seed_len, int *counter_ret, unsigned long *h_ret, void (*callback) (int, int, void *), void *cb_arg); # endif /* !defined(OPENSSL_NO_DEPRECATED) */ /* New version */ int DSA_generate_parameters_ex(DSA *dsa, int bits, const unsigned char *seed, int seed_len, int *counter_ret, unsigned long *h_ret, BN_GENCB *cb); int DSA_generate_key(DSA *a); int i2d_DSAPublicKey(const DSA *a, unsigned char **pp); int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); int i2d_DSAparams(const DSA *a, unsigned char **pp); # ifndef OPENSSL_NO_BIO int DSAparams_print(BIO *bp, const DSA *x); int DSA_print(BIO *bp, const DSA *x, int off); # endif # ifndef OPENSSL_NO_FP_API int DSAparams_print_fp(FILE *fp, const DSA *x); int DSA_print_fp(FILE *bp, const DSA *x, int off); # endif # define DSS_prime_checks 50 /* * Primality test according to FIPS PUB 186[-1], Appendix 2.1: 50 rounds of * Rabin-Miller */ # define DSA_is_prime(n, callback, cb_arg) \ BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) # ifndef OPENSSL_NO_DH /* * Convert DSA structure (key or just parameters) into DH structure (be * careful to avoid small subgroup attacks when using this!) */ DH *DSA_dup_DH(const DSA *r); # endif # define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL) # define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) # define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) # define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_DSA_strings(void); /* Error codes for the DSA functions. */ /* Function codes. */ # define DSA_F_D2I_DSA_SIG 110 # define DSA_F_DO_DSA_PRINT 104 # define DSA_F_DSAPARAMS_PRINT 100 # define DSA_F_DSAPARAMS_PRINT_FP 101 # define DSA_F_DSA_BUILTIN_PARAMGEN2 126 # define DSA_F_DSA_DO_SIGN 112 # define DSA_F_DSA_DO_VERIFY 113 # define DSA_F_DSA_GENERATE_KEY 124 # define DSA_F_DSA_GENERATE_PARAMETERS_EX 123 # define DSA_F_DSA_NEW_METHOD 103 # define DSA_F_DSA_PARAM_DECODE 119 # define DSA_F_DSA_PRINT_FP 105 # define DSA_F_DSA_PRIV_DECODE 115 # define DSA_F_DSA_PRIV_ENCODE 116 # define DSA_F_DSA_PUB_DECODE 117 # define DSA_F_DSA_PUB_ENCODE 118 # define DSA_F_DSA_SIGN 106 # define DSA_F_DSA_SIGN_SETUP 107 # define DSA_F_DSA_SIG_NEW 109 # define DSA_F_DSA_SIG_PRINT 125 # define DSA_F_DSA_VERIFY 108 # define DSA_F_I2D_DSA_SIG 111 # define DSA_F_OLD_DSA_PRIV_DECODE 122 # define DSA_F_PKEY_DSA_CTRL 120 # define DSA_F_PKEY_DSA_KEYGEN 121 # define DSA_F_SIG_CB 114 /* Reason codes. */ # define DSA_R_BAD_Q_VALUE 102 # define DSA_R_BN_DECODE_ERROR 108 # define DSA_R_BN_ERROR 109 # define DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 100 # define DSA_R_DECODE_ERROR 104 # define DSA_R_INVALID_DIGEST_TYPE 106 # define DSA_R_INVALID_PARAMETERS 112 # define DSA_R_MISSING_PARAMETERS 101 # define DSA_R_MODULUS_TOO_LARGE 103 # define DSA_R_NEED_NEW_SETUP_VALUES 110 # define DSA_R_NON_FIPS_DSA_METHOD 111 # define DSA_R_NO_PARAMETERS_SET 107 # define DSA_R_PARAMETER_ENCODING_ERROR 105 # define DSA_R_Q_NOT_PRIME 113 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/dso.h ================================================ /* dso.h */ /* * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project * 2000. */ /* ==================================================================== * Copyright (c) 2000 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_DSO_H # define HEADER_DSO_H # include #ifdef __cplusplus extern "C" { #endif /* These values are used as commands to DSO_ctrl() */ # define DSO_CTRL_GET_FLAGS 1 # define DSO_CTRL_SET_FLAGS 2 # define DSO_CTRL_OR_FLAGS 3 /* * By default, DSO_load() will translate the provided filename into a form * typical for the platform (more specifically the DSO_METHOD) using the * dso_name_converter function of the method. Eg. win32 will transform "blah" * into "blah.dll", and dlfcn will transform it into "libblah.so". The * behaviour can be overriden by setting the name_converter callback in the * DSO object (using DSO_set_name_converter()). This callback could even * utilise the DSO_METHOD's converter too if it only wants to override * behaviour for one or two possible DSO methods. However, the following flag * can be set in a DSO to prevent *any* native name-translation at all - eg. * if the caller has prompted the user for a path to a driver library so the * filename should be interpreted as-is. */ # define DSO_FLAG_NO_NAME_TRANSLATION 0x01 /* * An extra flag to give if only the extension should be added as * translation. This is obviously only of importance on Unix and other * operating systems where the translation also may prefix the name with * something, like 'lib', and ignored everywhere else. This flag is also * ignored if DSO_FLAG_NO_NAME_TRANSLATION is used at the same time. */ # define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY 0x02 /* * The following flag controls the translation of symbol names to upper case. * This is currently only being implemented for OpenVMS. */ # define DSO_FLAG_UPCASE_SYMBOL 0x10 /* * This flag loads the library with public symbols. Meaning: The exported * symbols of this library are public to all libraries loaded after this * library. At the moment only implemented in unix. */ # define DSO_FLAG_GLOBAL_SYMBOLS 0x20 typedef void (*DSO_FUNC_TYPE) (void); typedef struct dso_st DSO; /* * The function prototype used for method functions (or caller-provided * callbacks) that transform filenames. They are passed a DSO structure * pointer (or NULL if they are to be used independantly of a DSO object) and * a filename to transform. They should either return NULL (if there is an * error condition) or a newly allocated string containing the transformed * form that the caller will need to free with OPENSSL_free() when done. */ typedef char *(*DSO_NAME_CONVERTER_FUNC)(DSO *, const char *); /* * The function prototype used for method functions (or caller-provided * callbacks) that merge two file specifications. They are passed a DSO * structure pointer (or NULL if they are to be used independantly of a DSO * object) and two file specifications to merge. They should either return * NULL (if there is an error condition) or a newly allocated string * containing the result of merging that the caller will need to free with * OPENSSL_free() when done. Here, merging means that bits and pieces are * taken from each of the file specifications and added together in whatever * fashion that is sensible for the DSO method in question. The only rule * that really applies is that if the two specification contain pieces of the * same type, the copy from the first string takes priority. One could see * it as the first specification is the one given by the user and the second * being a bunch of defaults to add on if they're missing in the first. */ typedef char *(*DSO_MERGER_FUNC)(DSO *, const char *, const char *); typedef struct dso_meth_st { const char *name; /* * Loads a shared library, NB: new DSO_METHODs must ensure that a * successful load populates the loaded_filename field, and likewise a * successful unload OPENSSL_frees and NULLs it out. */ int (*dso_load) (DSO *dso); /* Unloads a shared library */ int (*dso_unload) (DSO *dso); /* Binds a variable */ void *(*dso_bind_var) (DSO *dso, const char *symname); /* * Binds a function - assumes a return type of DSO_FUNC_TYPE. This should * be cast to the real function prototype by the caller. Platforms that * don't have compatible representations for different prototypes (this * is possible within ANSI C) are highly unlikely to have shared * libraries at all, let alone a DSO_METHOD implemented for them. */ DSO_FUNC_TYPE (*dso_bind_func) (DSO *dso, const char *symname); /* I don't think this would actually be used in any circumstances. */ # if 0 /* Unbinds a variable */ int (*dso_unbind_var) (DSO *dso, char *symname, void *symptr); /* Unbinds a function */ int (*dso_unbind_func) (DSO *dso, char *symname, DSO_FUNC_TYPE symptr); # endif /* * The generic (yuck) "ctrl()" function. NB: Negative return values * (rather than zero) indicate errors. */ long (*dso_ctrl) (DSO *dso, int cmd, long larg, void *parg); /* * The default DSO_METHOD-specific function for converting filenames to a * canonical native form. */ DSO_NAME_CONVERTER_FUNC dso_name_converter; /* * The default DSO_METHOD-specific function for converting filenames to a * canonical native form. */ DSO_MERGER_FUNC dso_merger; /* [De]Initialisation handlers. */ int (*init) (DSO *dso); int (*finish) (DSO *dso); /* Return pathname of the module containing location */ int (*pathbyaddr) (void *addr, char *path, int sz); /* Perform global symbol lookup, i.e. among *all* modules */ void *(*globallookup) (const char *symname); } DSO_METHOD; /**********************************************************************/ /* The low-level handle type used to refer to a loaded shared library */ struct dso_st { DSO_METHOD *meth; /* * Standard dlopen uses a (void *). Win32 uses a HANDLE. VMS doesn't use * anything but will need to cache the filename for use in the dso_bind * handler. All in all, let each method control its own destiny. * "Handles" and such go in a STACK. */ STACK_OF(void) *meth_data; int references; int flags; /* * For use by applications etc ... use this for your bits'n'pieces, don't * touch meth_data! */ CRYPTO_EX_DATA ex_data; /* * If this callback function pointer is set to non-NULL, then it will be * used in DSO_load() in place of meth->dso_name_converter. NB: This * should normally set using DSO_set_name_converter(). */ DSO_NAME_CONVERTER_FUNC name_converter; /* * If this callback function pointer is set to non-NULL, then it will be * used in DSO_load() in place of meth->dso_merger. NB: This should * normally set using DSO_set_merger(). */ DSO_MERGER_FUNC merger; /* * This is populated with (a copy of) the platform-independant filename * used for this DSO. */ char *filename; /* * This is populated with (a copy of) the translated filename by which * the DSO was actually loaded. It is NULL iff the DSO is not currently * loaded. NB: This is here because the filename translation process may * involve a callback being invoked more than once not only to convert to * a platform-specific form, but also to try different filenames in the * process of trying to perform a load. As such, this variable can be * used to indicate (a) whether this DSO structure corresponds to a * loaded library or not, and (b) the filename with which it was actually * loaded. */ char *loaded_filename; }; DSO *DSO_new(void); DSO *DSO_new_method(DSO_METHOD *method); int DSO_free(DSO *dso); int DSO_flags(DSO *dso); int DSO_up_ref(DSO *dso); long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg); /* * This function sets the DSO's name_converter callback. If it is non-NULL, * then it will be used instead of the associated DSO_METHOD's function. If * oldcb is non-NULL then it is set to the function pointer value being * replaced. Return value is non-zero for success. */ int DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb, DSO_NAME_CONVERTER_FUNC *oldcb); /* * These functions can be used to get/set the platform-independant filename * used for a DSO. NB: set will fail if the DSO is already loaded. */ const char *DSO_get_filename(DSO *dso); int DSO_set_filename(DSO *dso, const char *filename); /* * This function will invoke the DSO's name_converter callback to translate a * filename, or if the callback isn't set it will instead use the DSO_METHOD's * converter. If "filename" is NULL, the "filename" in the DSO itself will be * used. If the DSO_FLAG_NO_NAME_TRANSLATION flag is set, then the filename is * simply duplicated. NB: This function is usually called from within a * DSO_METHOD during the processing of a DSO_load() call, and is exposed so * that caller-created DSO_METHODs can do the same thing. A non-NULL return * value will need to be OPENSSL_free()'d. */ char *DSO_convert_filename(DSO *dso, const char *filename); /* * This function will invoke the DSO's merger callback to merge two file * specifications, or if the callback isn't set it will instead use the * DSO_METHOD's merger. A non-NULL return value will need to be * OPENSSL_free()'d. */ char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2); /* * If the DSO is currently loaded, this returns the filename that it was * loaded under, otherwise it returns NULL. So it is also useful as a test as * to whether the DSO is currently loaded. NB: This will not necessarily * return the same value as DSO_convert_filename(dso, dso->filename), because * the DSO_METHOD's load function may have tried a variety of filenames (with * and/or without the aid of the converters) before settling on the one it * actually loaded. */ const char *DSO_get_loaded_filename(DSO *dso); void DSO_set_default_method(DSO_METHOD *meth); DSO_METHOD *DSO_get_default_method(void); DSO_METHOD *DSO_get_method(DSO *dso); DSO_METHOD *DSO_set_method(DSO *dso, DSO_METHOD *meth); /* * The all-singing all-dancing load function, you normally pass NULL for the * first and third parameters. Use DSO_up and DSO_free for subsequent * reference count handling. Any flags passed in will be set in the * constructed DSO after its init() function but before the load operation. * If 'dso' is non-NULL, 'flags' is ignored. */ DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags); /* This function binds to a variable inside a shared library. */ void *DSO_bind_var(DSO *dso, const char *symname); /* This function binds to a function inside a shared library. */ DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname); /* * This method is the default, but will beg, borrow, or steal whatever method * should be the default on any particular platform (including * DSO_METH_null() if necessary). */ DSO_METHOD *DSO_METHOD_openssl(void); /* * This method is defined for all platforms - if a platform has no DSO * support then this will be the only method! */ DSO_METHOD *DSO_METHOD_null(void); /* * If DSO_DLFCN is defined, the standard dlfcn.h-style functions (dlopen, * dlclose, dlsym, etc) will be used and incorporated into this method. If * not, this method will return NULL. */ DSO_METHOD *DSO_METHOD_dlfcn(void); /* * If DSO_DL is defined, the standard dl.h-style functions (shl_load, * shl_unload, shl_findsym, etc) will be used and incorporated into this * method. If not, this method will return NULL. */ DSO_METHOD *DSO_METHOD_dl(void); /* If WIN32 is defined, use DLLs. If not, return NULL. */ DSO_METHOD *DSO_METHOD_win32(void); /* If VMS is defined, use shared images. If not, return NULL. */ DSO_METHOD *DSO_METHOD_vms(void); /* * This function writes null-terminated pathname of DSO module containing * 'addr' into 'sz' large caller-provided 'path' and returns the number of * characters [including trailing zero] written to it. If 'sz' is 0 or * negative, 'path' is ignored and required amount of charachers [including * trailing zero] to accomodate pathname is returned. If 'addr' is NULL, then * pathname of cryptolib itself is returned. Negative or zero return value * denotes error. */ int DSO_pathbyaddr(void *addr, char *path, int sz); /* * This function should be used with caution! It looks up symbols in *all* * loaded modules and if module gets unloaded by somebody else attempt to * dereference the pointer is doomed to have fatal consequences. Primary * usage for this function is to probe *core* system functionality, e.g. * check if getnameinfo(3) is available at run-time without bothering about * OS-specific details such as libc.so.versioning or where does it actually * reside: in libc itself or libsocket. */ void *DSO_global_lookup(const char *name); /* If BeOS is defined, use shared images. If not, return NULL. */ DSO_METHOD *DSO_METHOD_beos(void); /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_DSO_strings(void); /* Error codes for the DSO functions. */ /* Function codes. */ # define DSO_F_BEOS_BIND_FUNC 144 # define DSO_F_BEOS_BIND_VAR 145 # define DSO_F_BEOS_LOAD 146 # define DSO_F_BEOS_NAME_CONVERTER 147 # define DSO_F_BEOS_UNLOAD 148 # define DSO_F_DLFCN_BIND_FUNC 100 # define DSO_F_DLFCN_BIND_VAR 101 # define DSO_F_DLFCN_LOAD 102 # define DSO_F_DLFCN_MERGER 130 # define DSO_F_DLFCN_NAME_CONVERTER 123 # define DSO_F_DLFCN_UNLOAD 103 # define DSO_F_DL_BIND_FUNC 104 # define DSO_F_DL_BIND_VAR 105 # define DSO_F_DL_LOAD 106 # define DSO_F_DL_MERGER 131 # define DSO_F_DL_NAME_CONVERTER 124 # define DSO_F_DL_UNLOAD 107 # define DSO_F_DSO_BIND_FUNC 108 # define DSO_F_DSO_BIND_VAR 109 # define DSO_F_DSO_CONVERT_FILENAME 126 # define DSO_F_DSO_CTRL 110 # define DSO_F_DSO_FREE 111 # define DSO_F_DSO_GET_FILENAME 127 # define DSO_F_DSO_GET_LOADED_FILENAME 128 # define DSO_F_DSO_GLOBAL_LOOKUP 139 # define DSO_F_DSO_LOAD 112 # define DSO_F_DSO_MERGE 132 # define DSO_F_DSO_NEW_METHOD 113 # define DSO_F_DSO_PATHBYADDR 140 # define DSO_F_DSO_SET_FILENAME 129 # define DSO_F_DSO_SET_NAME_CONVERTER 122 # define DSO_F_DSO_UP_REF 114 # define DSO_F_GLOBAL_LOOKUP_FUNC 138 # define DSO_F_PATHBYADDR 137 # define DSO_F_VMS_BIND_SYM 115 # define DSO_F_VMS_LOAD 116 # define DSO_F_VMS_MERGER 133 # define DSO_F_VMS_UNLOAD 117 # define DSO_F_WIN32_BIND_FUNC 118 # define DSO_F_WIN32_BIND_VAR 119 # define DSO_F_WIN32_GLOBALLOOKUP 142 # define DSO_F_WIN32_GLOBALLOOKUP_FUNC 143 # define DSO_F_WIN32_JOINER 135 # define DSO_F_WIN32_LOAD 120 # define DSO_F_WIN32_MERGER 134 # define DSO_F_WIN32_NAME_CONVERTER 125 # define DSO_F_WIN32_PATHBYADDR 141 # define DSO_F_WIN32_SPLITTER 136 # define DSO_F_WIN32_UNLOAD 121 /* Reason codes. */ # define DSO_R_CTRL_FAILED 100 # define DSO_R_DSO_ALREADY_LOADED 110 # define DSO_R_EMPTY_FILE_STRUCTURE 113 # define DSO_R_FAILURE 114 # define DSO_R_FILENAME_TOO_BIG 101 # define DSO_R_FINISH_FAILED 102 # define DSO_R_INCORRECT_FILE_SYNTAX 115 # define DSO_R_LOAD_FAILED 103 # define DSO_R_NAME_TRANSLATION_FAILED 109 # define DSO_R_NO_FILENAME 111 # define DSO_R_NO_FILE_SPECIFICATION 116 # define DSO_R_NULL_HANDLE 104 # define DSO_R_SET_FILENAME_FAILED 112 # define DSO_R_STACK_ERROR 105 # define DSO_R_SYM_FAILURE 106 # define DSO_R_UNLOAD_FAILED 107 # define DSO_R_UNSUPPORTED 108 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/dtls1.h ================================================ /* ssl/dtls1.h */ /* * DTLS implementation written by Nagendra Modadugu * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. */ /* ==================================================================== * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_DTLS1_H # define HEADER_DTLS1_H # include # include # ifdef OPENSSL_SYS_VMS # include # include # endif # ifdef OPENSSL_SYS_WIN32 /* Needed for struct timeval */ # include # elif defined(OPENSSL_SYS_NETWARE) && !defined(_WINSOCK2API_) # include # else # if defined(OPENSSL_SYS_VXWORKS) # include # else # include # endif # endif #ifdef __cplusplus extern "C" { #endif # define DTLS1_VERSION 0xFEFF # define DTLS1_2_VERSION 0xFEFD # define DTLS_MAX_VERSION DTLS1_2_VERSION # define DTLS1_VERSION_MAJOR 0xFE # define DTLS1_BAD_VER 0x0100 /* Special value for method supporting multiple versions */ # define DTLS_ANY_VERSION 0x1FFFF # if 0 /* this alert description is not specified anywhere... */ # define DTLS1_AD_MISSING_HANDSHAKE_MESSAGE 110 # endif /* lengths of messages */ # define DTLS1_COOKIE_LENGTH 256 # define DTLS1_RT_HEADER_LENGTH 13 # define DTLS1_HM_HEADER_LENGTH 12 # define DTLS1_HM_BAD_FRAGMENT -2 # define DTLS1_HM_FRAGMENT_RETRY -3 # define DTLS1_CCS_HEADER_LENGTH 1 # ifdef DTLS1_AD_MISSING_HANDSHAKE_MESSAGE # define DTLS1_AL_HEADER_LENGTH 7 # else # define DTLS1_AL_HEADER_LENGTH 2 # endif # ifndef OPENSSL_NO_SSL_INTERN # ifndef OPENSSL_NO_SCTP # define DTLS1_SCTP_AUTH_LABEL "EXPORTER_DTLS_OVER_SCTP" # endif /* Max MTU overhead we know about so far is 40 for IPv6 + 8 for UDP */ # define DTLS1_MAX_MTU_OVERHEAD 48 typedef struct dtls1_bitmap_st { unsigned long map; /* track 32 packets on 32-bit systems and 64 * - on 64-bit systems */ unsigned char max_seq_num[8]; /* max record number seen so far, 64-bit * value in big-endian encoding */ } DTLS1_BITMAP; struct dtls1_retransmit_state { EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */ EVP_MD_CTX *write_hash; /* used for mac generation */ # ifndef OPENSSL_NO_COMP COMP_CTX *compress; /* compression */ # else char *compress; # endif SSL_SESSION *session; unsigned short epoch; }; struct hm_header_st { unsigned char type; unsigned long msg_len; unsigned short seq; unsigned long frag_off; unsigned long frag_len; unsigned int is_ccs; struct dtls1_retransmit_state saved_retransmit_state; }; struct ccs_header_st { unsigned char type; unsigned short seq; }; struct dtls1_timeout_st { /* Number of read timeouts so far */ unsigned int read_timeouts; /* Number of write timeouts so far */ unsigned int write_timeouts; /* Number of alerts received so far */ unsigned int num_alerts; }; typedef struct record_pqueue_st { unsigned short epoch; pqueue q; } record_pqueue; typedef struct hm_fragment_st { struct hm_header_st msg_header; unsigned char *fragment; unsigned char *reassembly; } hm_fragment; typedef struct dtls1_state_st { unsigned int send_cookie; unsigned char cookie[DTLS1_COOKIE_LENGTH]; unsigned char rcvd_cookie[DTLS1_COOKIE_LENGTH]; unsigned int cookie_len; /* * The current data and handshake epoch. This is initially * undefined, and starts at zero once the initial handshake is * completed */ unsigned short r_epoch; unsigned short w_epoch; /* records being received in the current epoch */ DTLS1_BITMAP bitmap; /* renegotiation starts a new set of sequence numbers */ DTLS1_BITMAP next_bitmap; /* handshake message numbers */ unsigned short handshake_write_seq; unsigned short next_handshake_write_seq; unsigned short handshake_read_seq; /* save last sequence number for retransmissions */ unsigned char last_write_sequence[8]; /* Received handshake records (processed and unprocessed) */ record_pqueue unprocessed_rcds; record_pqueue processed_rcds; /* Buffered handshake messages */ pqueue buffered_messages; /* Buffered (sent) handshake records */ pqueue sent_messages; /* * Buffered application records. Only for records between CCS and * Finished to prevent either protocol violation or unnecessary message * loss. */ record_pqueue buffered_app_data; /* Is set when listening for new connections with dtls1_listen() */ unsigned int listen; unsigned int link_mtu; /* max on-the-wire DTLS packet size */ unsigned int mtu; /* max DTLS packet size */ struct hm_header_st w_msg_hdr; struct hm_header_st r_msg_hdr; struct dtls1_timeout_st timeout; /* * Indicates when the last handshake msg or heartbeat sent will timeout */ struct timeval next_timeout; /* Timeout duration */ unsigned short timeout_duration; /* * storage for Alert/Handshake protocol data received but not yet * processed by ssl3_read_bytes: */ unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH]; unsigned int alert_fragment_len; unsigned char handshake_fragment[DTLS1_HM_HEADER_LENGTH]; unsigned int handshake_fragment_len; unsigned int retransmitting; /* * Set when the handshake is ready to process peer's ChangeCipherSpec message. * Cleared after the message has been processed. */ unsigned int change_cipher_spec_ok; # ifndef OPENSSL_NO_SCTP /* used when SSL_ST_XX_FLUSH is entered */ int next_state; int shutdown_received; # endif } DTLS1_STATE; typedef struct dtls1_record_data_st { unsigned char *packet; unsigned int packet_length; SSL3_BUFFER rbuf; SSL3_RECORD rrec; # ifndef OPENSSL_NO_SCTP struct bio_dgram_sctp_rcvinfo recordinfo; # endif } DTLS1_RECORD_DATA; # endif /* Timeout multipliers (timeout slice is defined in apps/timeouts.h */ # define DTLS1_TMO_READ_COUNT 2 # define DTLS1_TMO_WRITE_COUNT 2 # define DTLS1_TMO_ALERT_COUNT 12 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/e_os2.h ================================================ /* e_os2.h */ /* ==================================================================== * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #include #ifndef HEADER_E_OS2_H # define HEADER_E_OS2_H #ifdef __cplusplus extern "C" { #endif /****************************************************************************** * Detect operating systems. This probably needs completing. * The result is that at least one OPENSSL_SYS_os macro should be defined. * However, if none is defined, Unix is assumed. **/ # define OPENSSL_SYS_UNIX /* ---------------------- Macintosh, before MacOS X ----------------------- */ # if defined(__MWERKS__) && defined(macintosh) || defined(OPENSSL_SYSNAME_MAC) # undef OPENSSL_SYS_UNIX # define OPENSSL_SYS_MACINTOSH_CLASSIC # endif /* ---------------------- NetWare ----------------------------------------- */ # if defined(NETWARE) || defined(OPENSSL_SYSNAME_NETWARE) # undef OPENSSL_SYS_UNIX # define OPENSSL_SYS_NETWARE # endif /* --------------------- Microsoft operating systems ---------------------- */ /* * Note that MSDOS actually denotes 32-bit environments running on top of * MS-DOS, such as DJGPP one. */ # if defined(OPENSSL_SYSNAME_MSDOS) # undef OPENSSL_SYS_UNIX # define OPENSSL_SYS_MSDOS # endif /* * For 32 bit environment, there seems to be the CygWin environment and then * all the others that try to do the same thing Microsoft does... */ # if defined(OPENSSL_SYSNAME_UWIN) # undef OPENSSL_SYS_UNIX # define OPENSSL_SYS_WIN32_UWIN # else # if defined(__CYGWIN__) || defined(OPENSSL_SYSNAME_CYGWIN) # undef OPENSSL_SYS_UNIX # define OPENSSL_SYS_WIN32_CYGWIN # else # if defined(_WIN32) || defined(OPENSSL_SYSNAME_WIN32) # undef OPENSSL_SYS_UNIX # define OPENSSL_SYS_WIN32 # endif # if defined(_WIN64) || defined(OPENSSL_SYSNAME_WIN64) # undef OPENSSL_SYS_UNIX # if !defined(OPENSSL_SYS_WIN64) # define OPENSSL_SYS_WIN64 # endif # endif # if defined(OPENSSL_SYSNAME_WINNT) # undef OPENSSL_SYS_UNIX # define OPENSSL_SYS_WINNT # endif # if defined(OPENSSL_SYSNAME_WINCE) # undef OPENSSL_SYS_UNIX # define OPENSSL_SYS_WINCE # endif # endif # endif /* Anything that tries to look like Microsoft is "Windows" */ # if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN64) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) # undef OPENSSL_SYS_UNIX # define OPENSSL_SYS_WINDOWS # ifndef OPENSSL_SYS_MSDOS # define OPENSSL_SYS_MSDOS # endif # endif /* * DLL settings. This part is a bit tough, because it's up to the * application implementor how he or she will link the application, so it * requires some macro to be used. */ # ifdef OPENSSL_SYS_WINDOWS # ifndef OPENSSL_OPT_WINDLL # if defined(_WINDLL) /* This is used when building OpenSSL to * indicate that DLL linkage should be used */ # define OPENSSL_OPT_WINDLL # endif # endif # endif /* ------------------------------- OpenVMS -------------------------------- */ # if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYSNAME_VMS) # undef OPENSSL_SYS_UNIX # define OPENSSL_SYS_VMS # if defined(__DECC) # define OPENSSL_SYS_VMS_DECC # elif defined(__DECCXX) # define OPENSSL_SYS_VMS_DECC # define OPENSSL_SYS_VMS_DECCXX # else # define OPENSSL_SYS_VMS_NODECC # endif # endif /* -------------------------------- OS/2 ---------------------------------- */ # if defined(__EMX__) || defined(__OS2__) # undef OPENSSL_SYS_UNIX # define OPENSSL_SYS_OS2 # endif /* -------------------------------- Unix ---------------------------------- */ # ifdef OPENSSL_SYS_UNIX # if defined(linux) || defined(__linux__) || defined(OPENSSL_SYSNAME_LINUX) # define OPENSSL_SYS_LINUX # endif # ifdef OPENSSL_SYSNAME_MPE # define OPENSSL_SYS_MPE # endif # ifdef OPENSSL_SYSNAME_SNI # define OPENSSL_SYS_SNI # endif # ifdef OPENSSL_SYSNAME_ULTRASPARC # define OPENSSL_SYS_ULTRASPARC # endif # ifdef OPENSSL_SYSNAME_NEWS4 # define OPENSSL_SYS_NEWS4 # endif # ifdef OPENSSL_SYSNAME_MACOSX # define OPENSSL_SYS_MACOSX # endif # ifdef OPENSSL_SYSNAME_MACOSX_RHAPSODY # define OPENSSL_SYS_MACOSX_RHAPSODY # define OPENSSL_SYS_MACOSX # endif # ifdef OPENSSL_SYSNAME_SUNOS # define OPENSSL_SYS_SUNOS # endif # if defined(_CRAY) || defined(OPENSSL_SYSNAME_CRAY) # define OPENSSL_SYS_CRAY # endif # if defined(_AIX) || defined(OPENSSL_SYSNAME_AIX) # define OPENSSL_SYS_AIX # endif # endif /* -------------------------------- VOS ----------------------------------- */ # if defined(__VOS__) || defined(OPENSSL_SYSNAME_VOS) # define OPENSSL_SYS_VOS # ifdef __HPPA__ # define OPENSSL_SYS_VOS_HPPA # endif # ifdef __IA32__ # define OPENSSL_SYS_VOS_IA32 # endif # endif /* ------------------------------ VxWorks --------------------------------- */ # ifdef OPENSSL_SYSNAME_VXWORKS # define OPENSSL_SYS_VXWORKS # endif /* -------------------------------- BeOS ---------------------------------- */ # if defined(__BEOS__) # define OPENSSL_SYS_BEOS # include # if defined(BONE_VERSION) # define OPENSSL_SYS_BEOS_BONE # else # define OPENSSL_SYS_BEOS_R5 # endif # endif /** * That's it for OS-specific stuff *****************************************************************************/ /* Specials for I/O an exit */ # ifdef OPENSSL_SYS_MSDOS # define OPENSSL_UNISTD_IO # define OPENSSL_DECLARE_EXIT extern void exit(int); # else # define OPENSSL_UNISTD_IO OPENSSL_UNISTD # define OPENSSL_DECLARE_EXIT /* declared in unistd.h */ # endif /*- * Definitions of OPENSSL_GLOBAL and OPENSSL_EXTERN, to define and declare * certain global symbols that, with some compilers under VMS, have to be * defined and declared explicitely with globaldef and globalref. * Definitions of OPENSSL_EXPORT and OPENSSL_IMPORT, to define and declare * DLL exports and imports for compilers under Win32. These are a little * more complicated to use. Basically, for any library that exports some * global variables, the following code must be present in the header file * that declares them, before OPENSSL_EXTERN is used: * * #ifdef SOME_BUILD_FLAG_MACRO * # undef OPENSSL_EXTERN * # define OPENSSL_EXTERN OPENSSL_EXPORT * #endif * * The default is to have OPENSSL_EXPORT, OPENSSL_IMPORT and OPENSSL_GLOBAL * have some generally sensible values, and for OPENSSL_EXTERN to have the * value OPENSSL_IMPORT. */ # if defined(OPENSSL_SYS_VMS_NODECC) # define OPENSSL_EXPORT globalref # define OPENSSL_IMPORT globalref # define OPENSSL_GLOBAL globaldef # elif defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) # define OPENSSL_EXPORT extern __declspec(dllexport) # define OPENSSL_IMPORT extern __declspec(dllimport) # define OPENSSL_GLOBAL # else # define OPENSSL_EXPORT extern # define OPENSSL_IMPORT extern # define OPENSSL_GLOBAL # endif # define OPENSSL_EXTERN OPENSSL_IMPORT /*- * Macros to allow global variables to be reached through function calls when * required (if a shared library version requires it, for example. * The way it's done allows definitions like this: * * // in foobar.c * OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0) * // in foobar.h * OPENSSL_DECLARE_GLOBAL(int,foobar); * #define foobar OPENSSL_GLOBAL_REF(foobar) */ # ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION # define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) \ type *_shadow_##name(void) \ { static type _hide_##name=value; return &_hide_##name; } # define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) # define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) # else # define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) OPENSSL_GLOBAL type _shadow_##name=value; # define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name # define OPENSSL_GLOBAL_REF(name) _shadow_##name # endif # if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && macintosh==1 && !defined(MAC_OS_GUSI_SOURCE) # define ossl_ssize_t long # endif # ifdef OPENSSL_SYS_MSDOS # define ossl_ssize_t long # endif # if defined(NeXT) || defined(OPENSSL_SYS_NEWS4) || defined(OPENSSL_SYS_SUNOS) # define ssize_t int # endif # if defined(__ultrix) && !defined(ssize_t) # define ossl_ssize_t int # endif # ifndef ossl_ssize_t # define ossl_ssize_t ssize_t # endif #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/ebcdic.h ================================================ /* crypto/ebcdic.h */ #ifndef HEADER_EBCDIC_H # define HEADER_EBCDIC_H # include #ifdef __cplusplus extern "C" { #endif /* Avoid name clashes with other applications */ # define os_toascii _openssl_os_toascii # define os_toebcdic _openssl_os_toebcdic # define ebcdic2ascii _openssl_ebcdic2ascii # define ascii2ebcdic _openssl_ascii2ebcdic extern const unsigned char os_toascii[256]; extern const unsigned char os_toebcdic[256]; void *ebcdic2ascii(void *dest, const void *srce, size_t count); void *ascii2ebcdic(void *dest, const void *srce, size_t count); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/ec.h ================================================ /* crypto/ec/ec.h */ /* * Originally written by Bodo Moeller for the OpenSSL project. */ /** * \file crypto/ec/ec.h Include file for the OpenSSL EC functions * \author Originally written by Bodo Moeller for the OpenSSL project */ /* ==================================================================== * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * * Portions of the attached software ("Contribution") are developed by * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. * * The Contribution is licensed pursuant to the OpenSSL open source * license provided above. * * The elliptic curve binary polynomial software is originally written by * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. * */ #ifndef HEADER_EC_H # define HEADER_EC_H # include # ifdef OPENSSL_NO_EC # error EC is disabled. # endif # include # include # ifndef OPENSSL_NO_DEPRECATED # include # endif # ifdef __cplusplus extern "C" { # elif defined(__SUNPRO_C) # if __SUNPRO_C >= 0x520 # pragma error_messages (off,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) # endif # endif # ifndef OPENSSL_ECC_MAX_FIELD_BITS # define OPENSSL_ECC_MAX_FIELD_BITS 661 # endif /** Enum for the point conversion form as defined in X9.62 (ECDSA) * for the encoding of a elliptic curve point (x,y) */ typedef enum { /** the point is encoded as z||x, where the octet z specifies * which solution of the quadratic equation y is */ POINT_CONVERSION_COMPRESSED = 2, /** the point is encoded as z||x||y, where z is the octet 0x04 */ POINT_CONVERSION_UNCOMPRESSED = 4, /** the point is encoded as z||x||y, where the octet z specifies * which solution of the quadratic equation y is */ POINT_CONVERSION_HYBRID = 6 } point_conversion_form_t; typedef struct ec_method_st EC_METHOD; typedef struct ec_group_st /*- EC_METHOD *meth; -- field definition -- curve coefficients -- optional generator with associated information (order, cofactor) -- optional extra data (precomputed table for fast computation of multiples of generator) -- ASN1 stuff */ EC_GROUP; typedef struct ec_point_st EC_POINT; /********************************************************************/ /* EC_METHODs for curves over GF(p) */ /********************************************************************/ /** Returns the basic GFp ec methods which provides the basis for the * optimized methods. * \return EC_METHOD object */ const EC_METHOD *EC_GFp_simple_method(void); /** Returns GFp methods using montgomery multiplication. * \return EC_METHOD object */ const EC_METHOD *EC_GFp_mont_method(void); /** Returns GFp methods using optimized methods for NIST recommended curves * \return EC_METHOD object */ const EC_METHOD *EC_GFp_nist_method(void); # ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 /** Returns 64-bit optimized methods for nistp224 * \return EC_METHOD object */ const EC_METHOD *EC_GFp_nistp224_method(void); /** Returns 64-bit optimized methods for nistp256 * \return EC_METHOD object */ const EC_METHOD *EC_GFp_nistp256_method(void); /** Returns 64-bit optimized methods for nistp521 * \return EC_METHOD object */ const EC_METHOD *EC_GFp_nistp521_method(void); # endif # ifndef OPENSSL_NO_EC2M /********************************************************************/ /* EC_METHOD for curves over GF(2^m) */ /********************************************************************/ /** Returns the basic GF2m ec method * \return EC_METHOD object */ const EC_METHOD *EC_GF2m_simple_method(void); # endif /********************************************************************/ /* EC_GROUP functions */ /********************************************************************/ /** Creates a new EC_GROUP object * \param meth EC_METHOD to use * \return newly created EC_GROUP object or NULL in case of an error. */ EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); /** Frees a EC_GROUP object * \param group EC_GROUP object to be freed. */ void EC_GROUP_free(EC_GROUP *group); /** Clears and frees a EC_GROUP object * \param group EC_GROUP object to be cleared and freed. */ void EC_GROUP_clear_free(EC_GROUP *group); /** Copies EC_GROUP objects. Note: both EC_GROUPs must use the same EC_METHOD. * \param dst destination EC_GROUP object * \param src source EC_GROUP object * \return 1 on success and 0 if an error occurred. */ int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); /** Creates a new EC_GROUP object and copies the copies the content * form src to the newly created EC_KEY object * \param src source EC_GROUP object * \return newly created EC_GROUP object or NULL in case of an error. */ EC_GROUP *EC_GROUP_dup(const EC_GROUP *src); /** Returns the EC_METHOD of the EC_GROUP object. * \param group EC_GROUP object * \return EC_METHOD used in this EC_GROUP object. */ const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); /** Returns the field type of the EC_METHOD. * \param meth EC_METHOD object * \return NID of the underlying field type OID. */ int EC_METHOD_get_field_type(const EC_METHOD *meth); /** Sets the generator and it's order/cofactor of a EC_GROUP object. * \param group EC_GROUP object * \param generator EC_POINT object with the generator. * \param order the order of the group generated by the generator. * \param cofactor the index of the sub-group generated by the generator * in the group of all points on the elliptic curve. * \return 1 on success and 0 if an error occured */ int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, const BIGNUM *order, const BIGNUM *cofactor); /** Returns the generator of a EC_GROUP object. * \param group EC_GROUP object * \return the currently used generator (possibly NULL). */ const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group); /** Returns the montgomery data for order(Generator) * \param group EC_GROUP object * \return the currently used generator (possibly NULL). */ BN_MONT_CTX *EC_GROUP_get_mont_data(const EC_GROUP *group); /** Gets the order of a EC_GROUP * \param group EC_GROUP object * \param order BIGNUM to which the order is copied * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx); /** Gets the cofactor of a EC_GROUP * \param group EC_GROUP object * \param cofactor BIGNUM to which the cofactor is copied * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx); /** Sets the name of a EC_GROUP object * \param group EC_GROUP object * \param nid NID of the curve name OID */ void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); /** Returns the curve name of a EC_GROUP object * \param group EC_GROUP object * \return NID of the curve name OID or 0 if not set. */ int EC_GROUP_get_curve_name(const EC_GROUP *group); void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); int EC_GROUP_get_asn1_flag(const EC_GROUP *group); void EC_GROUP_set_point_conversion_form(EC_GROUP *group, point_conversion_form_t form); point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x); size_t EC_GROUP_get_seed_len(const EC_GROUP *); size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); /** Sets the parameter of a ec over GFp defined by y^2 = x^3 + a*x + b * \param group EC_GROUP object * \param p BIGNUM with the prime number * \param a BIGNUM with parameter a of the equation * \param b BIGNUM with parameter b of the equation * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /** Gets the parameter of the ec over GFp defined by y^2 = x^3 + a*x + b * \param group EC_GROUP object * \param p BIGNUM for the prime number * \param a BIGNUM for parameter a of the equation * \param b BIGNUM for parameter b of the equation * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx); # ifndef OPENSSL_NO_EC2M /** Sets the parameter of a ec over GF2m defined by y^2 + x*y = x^3 + a*x^2 + b * \param group EC_GROUP object * \param p BIGNUM with the polynomial defining the underlying field * \param a BIGNUM with parameter a of the equation * \param b BIGNUM with parameter b of the equation * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /** Gets the parameter of the ec over GF2m defined by y^2 + x*y = x^3 + a*x^2 + b * \param group EC_GROUP object * \param p BIGNUM for the polynomial defining the underlying field * \param a BIGNUM for parameter a of the equation * \param b BIGNUM for parameter b of the equation * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx); # endif /** Returns the number of bits needed to represent a field element * \param group EC_GROUP object * \return number of bits needed to represent a field element */ int EC_GROUP_get_degree(const EC_GROUP *group); /** Checks whether the parameter in the EC_GROUP define a valid ec group * \param group EC_GROUP object * \param ctx BN_CTX object (optional) * \return 1 if group is a valid ec group and 0 otherwise */ int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx); /** Checks whether the discriminant of the elliptic curve is zero or not * \param group EC_GROUP object * \param ctx BN_CTX object (optional) * \return 1 if the discriminant is not zero and 0 otherwise */ int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx); /** Compares two EC_GROUP objects * \param a first EC_GROUP object * \param b second EC_GROUP object * \param ctx BN_CTX object (optional) * \return 0 if both groups are equal and 1 otherwise */ int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); /* * EC_GROUP_new_GF*() calls EC_GROUP_new() and EC_GROUP_set_GF*() after * choosing an appropriate EC_METHOD */ /** Creates a new EC_GROUP object with the specified parameters defined * over GFp (defined by the equation y^2 = x^3 + a*x + b) * \param p BIGNUM with the prime number * \param a BIGNUM with the parameter a of the equation * \param b BIGNUM with the parameter b of the equation * \param ctx BN_CTX object (optional) * \return newly created EC_GROUP object with the specified parameters */ EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); # ifndef OPENSSL_NO_EC2M /** Creates a new EC_GROUP object with the specified parameters defined * over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b) * \param p BIGNUM with the polynomial defining the underlying field * \param a BIGNUM with the parameter a of the equation * \param b BIGNUM with the parameter b of the equation * \param ctx BN_CTX object (optional) * \return newly created EC_GROUP object with the specified parameters */ EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); # endif /** Creates a EC_GROUP object with a curve specified by a NID * \param nid NID of the OID of the curve name * \return newly created EC_GROUP object with specified curve or NULL * if an error occurred */ EC_GROUP *EC_GROUP_new_by_curve_name(int nid); /********************************************************************/ /* handling of internal curves */ /********************************************************************/ typedef struct { int nid; const char *comment; } EC_builtin_curve; /* * EC_builtin_curves(EC_builtin_curve *r, size_t size) returns number of all * available curves or zero if a error occurred. In case r ist not zero * nitems EC_builtin_curve structures are filled with the data of the first * nitems internal groups */ size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); const char *EC_curve_nid2nist(int nid); int EC_curve_nist2nid(const char *name); /********************************************************************/ /* EC_POINT functions */ /********************************************************************/ /** Creates a new EC_POINT object for the specified EC_GROUP * \param group EC_GROUP the underlying EC_GROUP object * \return newly created EC_POINT object or NULL if an error occurred */ EC_POINT *EC_POINT_new(const EC_GROUP *group); /** Frees a EC_POINT object * \param point EC_POINT object to be freed */ void EC_POINT_free(EC_POINT *point); /** Clears and frees a EC_POINT object * \param point EC_POINT object to be cleared and freed */ void EC_POINT_clear_free(EC_POINT *point); /** Copies EC_POINT object * \param dst destination EC_POINT object * \param src source EC_POINT object * \return 1 on success and 0 if an error occured */ int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); /** Creates a new EC_POINT object and copies the content of the supplied * EC_POINT * \param src source EC_POINT object * \param group underlying the EC_GROUP object * \return newly created EC_POINT object or NULL if an error occurred */ EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); /** Returns the EC_METHOD used in EC_POINT object * \param point EC_POINT object * \return the EC_METHOD used */ const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); /** Sets a point to infinity (neutral element) * \param group underlying EC_GROUP object * \param point EC_POINT to set to infinity * \return 1 on success and 0 if an error occured */ int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); /** Sets the jacobian projective coordinates of a EC_POINT over GFp * \param group underlying EC_GROUP object * \param p EC_POINT object * \param x BIGNUM with the x-coordinate * \param y BIGNUM with the y-coordinate * \param z BIGNUM with the z-coordinate * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, EC_POINT *p, const BIGNUM *x, const BIGNUM *y, const BIGNUM *z, BN_CTX *ctx); /** Gets the jacobian projective coordinates of a EC_POINT over GFp * \param group underlying EC_GROUP object * \param p EC_POINT object * \param x BIGNUM for the x-coordinate * \param y BIGNUM for the y-coordinate * \param z BIGNUM for the z-coordinate * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, const EC_POINT *p, BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *ctx); /** Sets the affine coordinates of a EC_POINT over GFp * \param group underlying EC_GROUP object * \param p EC_POINT object * \param x BIGNUM with the x-coordinate * \param y BIGNUM with the y-coordinate * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p, const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx); /** Gets the affine coordinates of a EC_POINT over GFp * \param group underlying EC_GROUP object * \param p EC_POINT object * \param x BIGNUM for the x-coordinate * \param y BIGNUM for the y-coordinate * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx); /** Sets the x9.62 compressed coordinates of a EC_POINT over GFp * \param group underlying EC_GROUP object * \param p EC_POINT object * \param x BIGNUM with x-coordinate * \param y_bit integer with the y-Bit (either 0 or 1) * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, EC_POINT *p, const BIGNUM *x, int y_bit, BN_CTX *ctx); # ifndef OPENSSL_NO_EC2M /** Sets the affine coordinates of a EC_POINT over GF2m * \param group underlying EC_GROUP object * \param p EC_POINT object * \param x BIGNUM with the x-coordinate * \param y BIGNUM with the y-coordinate * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p, const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx); /** Gets the affine coordinates of a EC_POINT over GF2m * \param group underlying EC_GROUP object * \param p EC_POINT object * \param x BIGNUM for the x-coordinate * \param y BIGNUM for the y-coordinate * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx); /** Sets the x9.62 compressed coordinates of a EC_POINT over GF2m * \param group underlying EC_GROUP object * \param p EC_POINT object * \param x BIGNUM with x-coordinate * \param y_bit integer with the y-Bit (either 0 or 1) * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p, const BIGNUM *x, int y_bit, BN_CTX *ctx); # endif /** Encodes a EC_POINT object to a octet string * \param group underlying EC_GROUP object * \param p EC_POINT object * \param form point conversion form * \param buf memory buffer for the result. If NULL the function returns * required buffer size. * \param len length of the memory buffer * \param ctx BN_CTX object (optional) * \return the length of the encoded octet string or 0 if an error occurred */ size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p, point_conversion_form_t form, unsigned char *buf, size_t len, BN_CTX *ctx); /** Decodes a EC_POINT from a octet string * \param group underlying EC_GROUP object * \param p EC_POINT object * \param buf memory buffer with the encoded ec point * \param len length of the encoded ec point * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p, const unsigned char *buf, size_t len, BN_CTX *ctx); /* other interfaces to point2oct/oct2point: */ BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, point_conversion_form_t form, BIGNUM *, BN_CTX *); EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, EC_POINT *, BN_CTX *); char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, point_conversion_form_t form, BN_CTX *); EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, EC_POINT *, BN_CTX *); /********************************************************************/ /* functions for doing EC_POINT arithmetic */ /********************************************************************/ /** Computes the sum of two EC_POINT * \param group underlying EC_GROUP object * \param r EC_POINT object for the result (r = a + b) * \param a EC_POINT object with the first summand * \param b EC_POINT object with the second summand * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx); /** Computes the double of a EC_POINT * \param group underlying EC_GROUP object * \param r EC_POINT object for the result (r = 2 * a) * \param a EC_POINT object * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, BN_CTX *ctx); /** Computes the inverse of a EC_POINT * \param group underlying EC_GROUP object * \param a EC_POINT object to be inverted (it's used for the result as well) * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx); /** Checks whether the point is the neutral element of the group * \param group the underlying EC_GROUP object * \param p EC_POINT object * \return 1 if the point is the neutral element and 0 otherwise */ int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p); /** Checks whether the point is on the curve * \param group underlying EC_GROUP object * \param point EC_POINT object to check * \param ctx BN_CTX object (optional) * \return 1 if point if on the curve and 0 otherwise */ int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *ctx); /** Compares two EC_POINTs * \param group underlying EC_GROUP object * \param a first EC_POINT object * \param b second EC_POINT object * \param ctx BN_CTX object (optional) * \return 0 if both points are equal and a value != 0 otherwise */ int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx); int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx); int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, EC_POINT *points[], BN_CTX *ctx); /** Computes r = generator * n sum_{i=0}^{num-1} p[i] * m[i] * \param group underlying EC_GROUP object * \param r EC_POINT object for the result * \param n BIGNUM with the multiplier for the group generator (optional) * \param num number futher summands * \param p array of size num of EC_POINT objects * \param m array of size num of BIGNUM objects * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, size_t num, const EC_POINT *p[], const BIGNUM *m[], BN_CTX *ctx); /** Computes r = generator * n + q * m * \param group underlying EC_GROUP object * \param r EC_POINT object for the result * \param n BIGNUM with the multiplier for the group generator (optional) * \param q EC_POINT object with the first factor of the second summand * \param m BIGNUM with the second factor of the second summand * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); /** Stores multiples of generator for faster point multiplication * \param group EC_GROUP object * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occured */ int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); /** Reports whether a precomputation has been done * \param group EC_GROUP object * \return 1 if a pre-computation has been done and 0 otherwise */ int EC_GROUP_have_precompute_mult(const EC_GROUP *group); /********************************************************************/ /* ASN1 stuff */ /********************************************************************/ /* * EC_GROUP_get_basis_type() returns the NID of the basis type used to * represent the field elements */ int EC_GROUP_get_basis_type(const EC_GROUP *); # ifndef OPENSSL_NO_EC2M int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, unsigned int *k2, unsigned int *k3); # endif # define OPENSSL_EC_NAMED_CURVE 0x001 typedef struct ecpk_parameters_st ECPKPARAMETERS; EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); # define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParameters,bp,x) # define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKParameters,bp,x) # define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \ (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x)) # define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \ (unsigned char *)(x)) # ifndef OPENSSL_NO_BIO int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); # endif # ifndef OPENSSL_NO_FP_API int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); # endif /********************************************************************/ /* EC_KEY functions */ /********************************************************************/ typedef struct ec_key_st EC_KEY; /* some values for the encoding_flag */ # define EC_PKEY_NO_PARAMETERS 0x001 # define EC_PKEY_NO_PUBKEY 0x002 /* some values for the flags field */ # define EC_FLAG_NON_FIPS_ALLOW 0x1 # define EC_FLAG_FIPS_CHECKED 0x2 /** Creates a new EC_KEY object. * \return EC_KEY object or NULL if an error occurred. */ EC_KEY *EC_KEY_new(void); int EC_KEY_get_flags(const EC_KEY *key); void EC_KEY_set_flags(EC_KEY *key, int flags); void EC_KEY_clear_flags(EC_KEY *key, int flags); /** Creates a new EC_KEY object using a named curve as underlying * EC_GROUP object. * \param nid NID of the named curve. * \return EC_KEY object or NULL if an error occurred. */ EC_KEY *EC_KEY_new_by_curve_name(int nid); /** Frees a EC_KEY object. * \param key EC_KEY object to be freed. */ void EC_KEY_free(EC_KEY *key); /** Copies a EC_KEY object. * \param dst destination EC_KEY object * \param src src EC_KEY object * \return dst or NULL if an error occurred. */ EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); /** Creates a new EC_KEY object and copies the content from src to it. * \param src the source EC_KEY object * \return newly created EC_KEY object or NULL if an error occurred. */ EC_KEY *EC_KEY_dup(const EC_KEY *src); /** Increases the internal reference count of a EC_KEY object. * \param key EC_KEY object * \return 1 on success and 0 if an error occurred. */ int EC_KEY_up_ref(EC_KEY *key); /** Returns the EC_GROUP object of a EC_KEY object * \param key EC_KEY object * \return the EC_GROUP object (possibly NULL). */ const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); /** Sets the EC_GROUP of a EC_KEY object. * \param key EC_KEY object * \param group EC_GROUP to use in the EC_KEY object (note: the EC_KEY * object will use an own copy of the EC_GROUP). * \return 1 on success and 0 if an error occurred. */ int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); /** Returns the private key of a EC_KEY object. * \param key EC_KEY object * \return a BIGNUM with the private key (possibly NULL). */ const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); /** Sets the private key of a EC_KEY object. * \param key EC_KEY object * \param prv BIGNUM with the private key (note: the EC_KEY object * will use an own copy of the BIGNUM). * \return 1 on success and 0 if an error occurred. */ int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); /** Returns the public key of a EC_KEY object. * \param key the EC_KEY object * \return a EC_POINT object with the public key (possibly NULL) */ const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); /** Sets the public key of a EC_KEY object. * \param key EC_KEY object * \param pub EC_POINT object with the public key (note: the EC_KEY object * will use an own copy of the EC_POINT object). * \return 1 on success and 0 if an error occurred. */ int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); unsigned EC_KEY_get_enc_flags(const EC_KEY *key); void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform); /* functions to set/get method specific data */ void *EC_KEY_get_key_method_data(EC_KEY *key, void *(*dup_func) (void *), void (*free_func) (void *), void (*clear_free_func) (void *)); /** Sets the key method data of an EC_KEY object, if none has yet been set. * \param key EC_KEY object * \param data opaque data to install. * \param dup_func a function that duplicates |data|. * \param free_func a function that frees |data|. * \param clear_free_func a function that wipes and frees |data|. * \return the previously set data pointer, or NULL if |data| was inserted. */ void *EC_KEY_insert_key_method_data(EC_KEY *key, void *data, void *(*dup_func) (void *), void (*free_func) (void *), void (*clear_free_func) (void *)); /* wrapper functions for the underlying EC_GROUP object */ void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); /** Creates a table of pre-computed multiples of the generator to * accelerate further EC_KEY operations. * \param key EC_KEY object * \param ctx BN_CTX object (optional) * \return 1 on success and 0 if an error occurred. */ int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); /** Creates a new ec private (and optional a new public) key. * \param key EC_KEY object * \return 1 on success and 0 if an error occurred. */ int EC_KEY_generate_key(EC_KEY *key); /** Verifies that a private and/or public key is valid. * \param key the EC_KEY object * \return 1 on success and 0 otherwise. */ int EC_KEY_check_key(const EC_KEY *key); /** Sets a public key from affine coordindates performing * neccessary NIST PKV tests. * \param key the EC_KEY object * \param x public key x coordinate * \param y public key y coordinate * \return 1 on success and 0 otherwise. */ int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, BIGNUM *y); /********************************************************************/ /* de- and encoding functions for SEC1 ECPrivateKey */ /********************************************************************/ /** Decodes a private key from a memory buffer. * \param key a pointer to a EC_KEY object which should be used (or NULL) * \param in pointer to memory with the DER encoded private key * \param len length of the DER encoded private key * \return the decoded private key or NULL if an error occurred. */ EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); /** Encodes a private key object and stores the result in a buffer. * \param key the EC_KEY object to encode * \param out the buffer for the result (if NULL the function returns number * of bytes needed). * \return 1 on success and 0 if an error occurred. */ int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); /********************************************************************/ /* de- and encoding functions for EC parameters */ /********************************************************************/ /** Decodes ec parameter from a memory buffer. * \param key a pointer to a EC_KEY object which should be used (or NULL) * \param in pointer to memory with the DER encoded ec parameters * \param len length of the DER encoded ec parameters * \return a EC_KEY object with the decoded parameters or NULL if an error * occurred. */ EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); /** Encodes ec parameter and stores the result in a buffer. * \param key the EC_KEY object with ec paramters to encode * \param out the buffer for the result (if NULL the function returns number * of bytes needed). * \return 1 on success and 0 if an error occurred. */ int i2d_ECParameters(EC_KEY *key, unsigned char **out); /********************************************************************/ /* de- and encoding functions for EC public key */ /* (octet string, not DER -- hence 'o2i' and 'i2o') */ /********************************************************************/ /** Decodes a ec public key from a octet string. * \param key a pointer to a EC_KEY object which should be used * \param in memory buffer with the encoded public key * \param len length of the encoded public key * \return EC_KEY object with decoded public key or NULL if an error * occurred. */ EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); /** Encodes a ec public key in an octet string. * \param key the EC_KEY object with the public key * \param out the buffer for the result (if NULL the function returns number * of bytes needed). * \return 1 on success and 0 if an error occurred */ int i2o_ECPublicKey(EC_KEY *key, unsigned char **out); # ifndef OPENSSL_NO_BIO /** Prints out the ec parameters on human readable form. * \param bp BIO object to which the information is printed * \param key EC_KEY object * \return 1 on success and 0 if an error occurred */ int ECParameters_print(BIO *bp, const EC_KEY *key); /** Prints out the contents of a EC_KEY object * \param bp BIO object to which the information is printed * \param key EC_KEY object * \param off line offset * \return 1 on success and 0 if an error occurred */ int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); # endif # ifndef OPENSSL_NO_FP_API /** Prints out the ec parameters on human readable form. * \param fp file descriptor to which the information is printed * \param key EC_KEY object * \return 1 on success and 0 if an error occurred */ int ECParameters_print_fp(FILE *fp, const EC_KEY *key); /** Prints out the contents of a EC_KEY object * \param fp file descriptor to which the information is printed * \param key EC_KEY object * \param off line offset * \return 1 on success and 0 if an error occurred */ int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); # endif # define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x) # ifndef __cplusplus # if defined(__SUNPRO_C) # if __SUNPRO_C >= 0x520 # pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) # endif # endif # endif # define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) # define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL) # define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL) # define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL) # define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL) # define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL) # define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)md) # define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)pmd) # define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL) # define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, (void *)plen) # define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)p) # define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ EVP_PKEY_OP_DERIVE, \ EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)p) # define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) # define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2) # define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3) # define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4) # define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5) # define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6) # define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7) # define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8) # define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9) # define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10) /* KDF types */ # define EVP_PKEY_ECDH_KDF_NONE 1 # define EVP_PKEY_ECDH_KDF_X9_62 2 /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_EC_strings(void); /* Error codes for the EC functions. */ /* Function codes. */ # define EC_F_BN_TO_FELEM 224 # define EC_F_COMPUTE_WNAF 143 # define EC_F_D2I_ECPARAMETERS 144 # define EC_F_D2I_ECPKPARAMETERS 145 # define EC_F_D2I_ECPRIVATEKEY 146 # define EC_F_DO_EC_KEY_PRINT 221 # define EC_F_ECDH_CMS_DECRYPT 238 # define EC_F_ECDH_CMS_SET_SHARED_INFO 239 # define EC_F_ECKEY_PARAM2TYPE 223 # define EC_F_ECKEY_PARAM_DECODE 212 # define EC_F_ECKEY_PRIV_DECODE 213 # define EC_F_ECKEY_PRIV_ENCODE 214 # define EC_F_ECKEY_PUB_DECODE 215 # define EC_F_ECKEY_PUB_ENCODE 216 # define EC_F_ECKEY_TYPE2PARAM 220 # define EC_F_ECPARAMETERS_PRINT 147 # define EC_F_ECPARAMETERS_PRINT_FP 148 # define EC_F_ECPKPARAMETERS_PRINT 149 # define EC_F_ECPKPARAMETERS_PRINT_FP 150 # define EC_F_ECP_NISTZ256_GET_AFFINE 240 # define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 # define EC_F_ECP_NISTZ256_POINTS_MUL 241 # define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 # define EC_F_ECP_NISTZ256_SET_WORDS 245 # define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 # define EC_F_ECP_NIST_MOD_192 203 # define EC_F_ECP_NIST_MOD_224 204 # define EC_F_ECP_NIST_MOD_256 205 # define EC_F_ECP_NIST_MOD_521 206 # define EC_F_EC_ASN1_GROUP2CURVE 153 # define EC_F_EC_ASN1_GROUP2FIELDID 154 # define EC_F_EC_ASN1_GROUP2PARAMETERS 155 # define EC_F_EC_ASN1_GROUP2PKPARAMETERS 156 # define EC_F_EC_ASN1_PARAMETERS2GROUP 157 # define EC_F_EC_ASN1_PKPARAMETERS2GROUP 158 # define EC_F_EC_EX_DATA_SET_DATA 211 # define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 208 # define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 159 # define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 195 # define EC_F_EC_GF2M_SIMPLE_OCT2POINT 160 # define EC_F_EC_GF2M_SIMPLE_POINT2OCT 161 # define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162 # define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163 # define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 164 # define EC_F_EC_GFP_MONT_FIELD_DECODE 133 # define EC_F_EC_GFP_MONT_FIELD_ENCODE 134 # define EC_F_EC_GFP_MONT_FIELD_MUL 131 # define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 209 # define EC_F_EC_GFP_MONT_FIELD_SQR 132 # define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 189 # define EC_F_EC_GFP_MONT_GROUP_SET_CURVE_GFP 135 # define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 225 # define EC_F_EC_GFP_NISTP224_POINTS_MUL 228 # define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 226 # define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 230 # define EC_F_EC_GFP_NISTP256_POINTS_MUL 231 # define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 232 # define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 233 # define EC_F_EC_GFP_NISTP521_POINTS_MUL 234 # define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 235 # define EC_F_EC_GFP_NIST_FIELD_MUL 200 # define EC_F_EC_GFP_NIST_FIELD_SQR 201 # define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 202 # define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 165 # define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166 # define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE_GFP 100 # define EC_F_EC_GFP_SIMPLE_GROUP_SET_GENERATOR 101 # define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 102 # define EC_F_EC_GFP_SIMPLE_OCT2POINT 103 # define EC_F_EC_GFP_SIMPLE_POINT2OCT 104 # define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137 # define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 167 # define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES_GFP 105 # define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168 # define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES_GFP 128 # define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 # define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES_GFP 129 # define EC_F_EC_GROUP_CHECK 170 # define EC_F_EC_GROUP_CHECK_DISCRIMINANT 171 # define EC_F_EC_GROUP_COPY 106 # define EC_F_EC_GROUP_GET0_GENERATOR 139 # define EC_F_EC_GROUP_GET_COFACTOR 140 # define EC_F_EC_GROUP_GET_CURVE_GF2M 172 # define EC_F_EC_GROUP_GET_CURVE_GFP 130 # define EC_F_EC_GROUP_GET_DEGREE 173 # define EC_F_EC_GROUP_GET_ORDER 141 # define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 193 # define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 194 # define EC_F_EC_GROUP_NEW 108 # define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 174 # define EC_F_EC_GROUP_NEW_FROM_DATA 175 # define EC_F_EC_GROUP_PRECOMPUTE_MULT 142 # define EC_F_EC_GROUP_SET_CURVE_GF2M 176 # define EC_F_EC_GROUP_SET_CURVE_GFP 109 # define EC_F_EC_GROUP_SET_EXTRA_DATA 110 # define EC_F_EC_GROUP_SET_GENERATOR 111 # define EC_F_EC_KEY_CHECK_KEY 177 # define EC_F_EC_KEY_COPY 178 # define EC_F_EC_KEY_GENERATE_KEY 179 # define EC_F_EC_KEY_NEW 182 # define EC_F_EC_KEY_PRINT 180 # define EC_F_EC_KEY_PRINT_FP 181 # define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 # define EC_F_EC_POINTS_MAKE_AFFINE 136 # define EC_F_EC_POINT_ADD 112 # define EC_F_EC_POINT_CMP 113 # define EC_F_EC_POINT_COPY 114 # define EC_F_EC_POINT_DBL 115 # define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 # define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 # define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 # define EC_F_EC_POINT_INVERT 210 # define EC_F_EC_POINT_IS_AT_INFINITY 118 # define EC_F_EC_POINT_IS_ON_CURVE 119 # define EC_F_EC_POINT_MAKE_AFFINE 120 # define EC_F_EC_POINT_MUL 184 # define EC_F_EC_POINT_NEW 121 # define EC_F_EC_POINT_OCT2POINT 122 # define EC_F_EC_POINT_POINT2OCT 123 # define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 185 # define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 124 # define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 186 # define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 125 # define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 126 # define EC_F_EC_POINT_SET_TO_INFINITY 127 # define EC_F_EC_PRE_COMP_DUP 207 # define EC_F_EC_PRE_COMP_NEW 196 # define EC_F_EC_WNAF_MUL 187 # define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 # define EC_F_I2D_ECPARAMETERS 190 # define EC_F_I2D_ECPKPARAMETERS 191 # define EC_F_I2D_ECPRIVATEKEY 192 # define EC_F_I2O_ECPUBLICKEY 151 # define EC_F_NISTP224_PRE_COMP_NEW 227 # define EC_F_NISTP256_PRE_COMP_NEW 236 # define EC_F_NISTP521_PRE_COMP_NEW 237 # define EC_F_O2I_ECPUBLICKEY 152 # define EC_F_OLD_EC_PRIV_DECODE 222 # define EC_F_PKEY_EC_CTRL 197 # define EC_F_PKEY_EC_CTRL_STR 198 # define EC_F_PKEY_EC_DERIVE 217 # define EC_F_PKEY_EC_KEYGEN 199 # define EC_F_PKEY_EC_PARAMGEN 219 # define EC_F_PKEY_EC_SIGN 218 /* Reason codes. */ # define EC_R_ASN1_ERROR 115 # define EC_R_ASN1_UNKNOWN_FIELD 116 # define EC_R_BIGNUM_OUT_OF_RANGE 144 # define EC_R_BUFFER_TOO_SMALL 100 # define EC_R_COORDINATES_OUT_OF_RANGE 146 # define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 # define EC_R_DECODE_ERROR 142 # define EC_R_DISCRIMINANT_IS_ZERO 118 # define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 # define EC_R_FIELD_TOO_LARGE 143 # define EC_R_GF2M_NOT_SUPPORTED 147 # define EC_R_GROUP2PKPARAMETERS_FAILURE 120 # define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 # define EC_R_INCOMPATIBLE_OBJECTS 101 # define EC_R_INVALID_ARGUMENT 112 # define EC_R_INVALID_COMPRESSED_POINT 110 # define EC_R_INVALID_COMPRESSION_BIT 109 # define EC_R_INVALID_CURVE 141 # define EC_R_INVALID_DIGEST 151 # define EC_R_INVALID_DIGEST_TYPE 138 # define EC_R_INVALID_ENCODING 102 # define EC_R_INVALID_FIELD 103 # define EC_R_INVALID_FORM 104 # define EC_R_INVALID_GROUP_ORDER 122 # define EC_R_INVALID_PENTANOMIAL_BASIS 132 # define EC_R_INVALID_PRIVATE_KEY 123 # define EC_R_INVALID_TRINOMIAL_BASIS 137 # define EC_R_KDF_PARAMETER_ERROR 148 # define EC_R_KEYS_NOT_SET 140 # define EC_R_MISSING_PARAMETERS 124 # define EC_R_MISSING_PRIVATE_KEY 125 # define EC_R_NOT_A_NIST_PRIME 135 # define EC_R_NOT_A_SUPPORTED_NIST_PRIME 136 # define EC_R_NOT_IMPLEMENTED 126 # define EC_R_NOT_INITIALIZED 111 # define EC_R_NO_FIELD_MOD 133 # define EC_R_NO_PARAMETERS_SET 139 # define EC_R_PASSED_NULL_PARAMETER 134 # define EC_R_PEER_KEY_ERROR 149 # define EC_R_PKPARAMETERS2GROUP_FAILURE 127 # define EC_R_POINT_AT_INFINITY 106 # define EC_R_POINT_IS_NOT_ON_CURVE 107 # define EC_R_SHARED_INFO_ERROR 150 # define EC_R_SLOT_FULL 108 # define EC_R_UNDEFINED_GENERATOR 113 # define EC_R_UNDEFINED_ORDER 128 # define EC_R_UNKNOWN_GROUP 129 # define EC_R_UNKNOWN_ORDER 114 # define EC_R_UNSUPPORTED_FIELD 131 # define EC_R_WRONG_CURVE_PARAMETERS 145 # define EC_R_WRONG_ORDER 130 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/ecdh.h ================================================ /* crypto/ecdh/ecdh.h */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * * The Elliptic Curve Public-Key Crypto Library (ECC Code) included * herein is developed by SUN MICROSYSTEMS, INC., and is contributed * to the OpenSSL project. * * The ECC Code is licensed pursuant to the OpenSSL open source * license provided below. * * The ECDH software is originally written by Douglas Stebila of * Sun Microsystems Laboratories. * */ /* ==================================================================== * Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_ECDH_H # define HEADER_ECDH_H # include # ifdef OPENSSL_NO_ECDH # error ECDH is disabled. # endif # include # include # ifndef OPENSSL_NO_DEPRECATED # include # endif #ifdef __cplusplus extern "C" { #endif # define EC_FLAG_COFACTOR_ECDH 0x1000 const ECDH_METHOD *ECDH_OpenSSL(void); void ECDH_set_default_method(const ECDH_METHOD *); const ECDH_METHOD *ECDH_get_default_method(void); int ECDH_set_method(EC_KEY *, const ECDH_METHOD *); int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, EC_KEY *ecdh, void *(*KDF) (const void *in, size_t inlen, void *out, size_t *outlen)); int ECDH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); int ECDH_set_ex_data(EC_KEY *d, int idx, void *arg); void *ECDH_get_ex_data(EC_KEY *d, int idx); int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, const unsigned char *Z, size_t Zlen, const unsigned char *sinfo, size_t sinfolen, const EVP_MD *md); /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_ECDH_strings(void); /* Error codes for the ECDH functions. */ /* Function codes. */ # define ECDH_F_ECDH_CHECK 102 # define ECDH_F_ECDH_COMPUTE_KEY 100 # define ECDH_F_ECDH_DATA_NEW_METHOD 101 /* Reason codes. */ # define ECDH_R_KDF_FAILED 102 # define ECDH_R_NON_FIPS_METHOD 103 # define ECDH_R_NO_PRIVATE_VALUE 100 # define ECDH_R_POINT_ARITHMETIC_FAILURE 101 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/ecdsa.h ================================================ /* crypto/ecdsa/ecdsa.h */ /** * \file crypto/ecdsa/ecdsa.h Include file for the OpenSSL ECDSA functions * \author Written by Nils Larsch for the OpenSSL project */ /* ==================================================================== * Copyright (c) 2000-2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_ECDSA_H # define HEADER_ECDSA_H # include # ifdef OPENSSL_NO_ECDSA # error ECDSA is disabled. # endif # include # include # ifndef OPENSSL_NO_DEPRECATED # include # endif #ifdef __cplusplus extern "C" { #endif typedef struct ECDSA_SIG_st { BIGNUM *r; BIGNUM *s; } ECDSA_SIG; /** Allocates and initialize a ECDSA_SIG structure * \return pointer to a ECDSA_SIG structure or NULL if an error occurred */ ECDSA_SIG *ECDSA_SIG_new(void); /** frees a ECDSA_SIG structure * \param sig pointer to the ECDSA_SIG structure */ void ECDSA_SIG_free(ECDSA_SIG *sig); /** DER encode content of ECDSA_SIG object (note: this function modifies *pp * (*pp += length of the DER encoded signature)). * \param sig pointer to the ECDSA_SIG object * \param pp pointer to a unsigned char pointer for the output or NULL * \return the length of the DER encoded ECDSA_SIG object or 0 */ int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); /** Decodes a DER encoded ECDSA signature (note: this function changes *pp * (*pp += len)). * \param sig pointer to ECDSA_SIG pointer (may be NULL) * \param pp memory buffer with the DER encoded signature * \param len length of the buffer * \return pointer to the decoded ECDSA_SIG structure (or NULL) */ ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); /** Computes the ECDSA signature of the given hash value using * the supplied private key and returns the created signature. * \param dgst pointer to the hash value * \param dgst_len length of the hash value * \param eckey EC_KEY object containing a private EC key * \return pointer to a ECDSA_SIG structure or NULL if an error occurred */ ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, EC_KEY *eckey); /** Computes ECDSA signature of a given hash value using the supplied * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). * \param dgst pointer to the hash value to sign * \param dgstlen length of the hash value * \param kinv BIGNUM with a pre-computed inverse k (optional) * \param rp BIGNUM with a pre-computed rp value (optioanl), * see ECDSA_sign_setup * \param eckey EC_KEY object containing a private EC key * \return pointer to a ECDSA_SIG structure or NULL if an error occurred */ ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); /** Verifies that the supplied signature is a valid ECDSA * signature of the supplied hash value using the supplied public key. * \param dgst pointer to the hash value * \param dgst_len length of the hash value * \param sig ECDSA_SIG structure * \param eckey EC_KEY object containing a public EC key * \return 1 if the signature is valid, 0 if the signature is invalid * and -1 on error */ int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, const ECDSA_SIG *sig, EC_KEY *eckey); const ECDSA_METHOD *ECDSA_OpenSSL(void); /** Sets the default ECDSA method * \param meth new default ECDSA_METHOD */ void ECDSA_set_default_method(const ECDSA_METHOD *meth); /** Returns the default ECDSA method * \return pointer to ECDSA_METHOD structure containing the default method */ const ECDSA_METHOD *ECDSA_get_default_method(void); /** Sets method to be used for the ECDSA operations * \param eckey EC_KEY object * \param meth new method * \return 1 on success and 0 otherwise */ int ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth); /** Returns the maximum length of the DER encoded signature * \param eckey EC_KEY object * \return numbers of bytes required for the DER encoded signature */ int ECDSA_size(const EC_KEY *eckey); /** Precompute parts of the signing operation * \param eckey EC_KEY object containing a private EC key * \param ctx BN_CTX object (optional) * \param kinv BIGNUM pointer for the inverse of k * \param rp BIGNUM pointer for x coordinate of k * generator * \return 1 on success and 0 otherwise */ int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); /** Computes ECDSA signature of a given hash value using the supplied * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). * \param type this parameter is ignored * \param dgst pointer to the hash value to sign * \param dgstlen length of the hash value * \param sig memory for the DER encoded created signature * \param siglen pointer to the length of the returned signature * \param eckey EC_KEY object containing a private EC key * \return 1 on success and 0 otherwise */ int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); /** Computes ECDSA signature of a given hash value using the supplied * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). * \param type this parameter is ignored * \param dgst pointer to the hash value to sign * \param dgstlen length of the hash value * \param sig buffer to hold the DER encoded signature * \param siglen pointer to the length of the returned signature * \param kinv BIGNUM with a pre-computed inverse k (optional) * \param rp BIGNUM with a pre-computed rp value (optioanl), * see ECDSA_sign_setup * \param eckey EC_KEY object containing a private EC key * \return 1 on success and 0 otherwise */ int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, unsigned char *sig, unsigned int *siglen, const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); /** Verifies that the given signature is valid ECDSA signature * of the supplied hash value using the specified public key. * \param type this parameter is ignored * \param dgst pointer to the hash value * \param dgstlen length of the hash value * \param sig pointer to the DER encoded signature * \param siglen length of the DER encoded signature * \param eckey EC_KEY object containing a public EC key * \return 1 if the signature is valid, 0 if the signature is invalid * and -1 on error */ int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, const unsigned char *sig, int siglen, EC_KEY *eckey); /* the standard ex_data functions */ int ECDSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); int ECDSA_set_ex_data(EC_KEY *d, int idx, void *arg); void *ECDSA_get_ex_data(EC_KEY *d, int idx); /** Allocates and initialize a ECDSA_METHOD structure * \param ecdsa_method pointer to ECDSA_METHOD to copy. (May be NULL) * \return pointer to a ECDSA_METHOD structure or NULL if an error occurred */ ECDSA_METHOD *ECDSA_METHOD_new(const ECDSA_METHOD *ecdsa_method); /** frees a ECDSA_METHOD structure * \param ecdsa_method pointer to the ECDSA_METHOD structure */ void ECDSA_METHOD_free(ECDSA_METHOD *ecdsa_method); /** Sets application specific data in the ECDSA_METHOD * \param ecdsa_method pointer to existing ECDSA_METHOD * \param app application specific data to set */ void ECDSA_METHOD_set_app_data(ECDSA_METHOD *ecdsa_method, void *app); /** Returns application specific data from a ECDSA_METHOD structure * \param ecdsa_method pointer to ECDSA_METHOD structure * \return pointer to application specific data. */ void *ECDSA_METHOD_get_app_data(ECDSA_METHOD *ecdsa_method); /** Set the ECDSA_do_sign function in the ECDSA_METHOD * \param ecdsa_method pointer to existing ECDSA_METHOD * \param ecdsa_do_sign a funtion of type ECDSA_do_sign */ void ECDSA_METHOD_set_sign(ECDSA_METHOD *ecdsa_method, ECDSA_SIG *(*ecdsa_do_sign) (const unsigned char *dgst, int dgst_len, const BIGNUM *inv, const BIGNUM *rp, EC_KEY *eckey)); /** Set the ECDSA_sign_setup function in the ECDSA_METHOD * \param ecdsa_method pointer to existing ECDSA_METHOD * \param ecdsa_sign_setup a funtion of type ECDSA_sign_setup */ void ECDSA_METHOD_set_sign_setup(ECDSA_METHOD *ecdsa_method, int (*ecdsa_sign_setup) (EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **r)); /** Set the ECDSA_do_verify function in the ECDSA_METHOD * \param ecdsa_method pointer to existing ECDSA_METHOD * \param ecdsa_do_verify a funtion of type ECDSA_do_verify */ void ECDSA_METHOD_set_verify(ECDSA_METHOD *ecdsa_method, int (*ecdsa_do_verify) (const unsigned char *dgst, int dgst_len, const ECDSA_SIG *sig, EC_KEY *eckey)); void ECDSA_METHOD_set_flags(ECDSA_METHOD *ecdsa_method, int flags); /** Set the flags field in the ECDSA_METHOD * \param ecdsa_method pointer to existing ECDSA_METHOD * \param flags flags value to set */ void ECDSA_METHOD_set_name(ECDSA_METHOD *ecdsa_method, char *name); /** Set the name field in the ECDSA_METHOD * \param ecdsa_method pointer to existing ECDSA_METHOD * \param name name to set */ /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_ECDSA_strings(void); /* Error codes for the ECDSA functions. */ /* Function codes. */ # define ECDSA_F_ECDSA_CHECK 104 # define ECDSA_F_ECDSA_DATA_NEW_METHOD 100 # define ECDSA_F_ECDSA_DO_SIGN 101 # define ECDSA_F_ECDSA_DO_VERIFY 102 # define ECDSA_F_ECDSA_METHOD_NEW 105 # define ECDSA_F_ECDSA_SIGN_SETUP 103 /* Reason codes. */ # define ECDSA_R_BAD_SIGNATURE 100 # define ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 101 # define ECDSA_R_ERR_EC_LIB 102 # define ECDSA_R_MISSING_PARAMETERS 103 # define ECDSA_R_NEED_NEW_SETUP_VALUES 106 # define ECDSA_R_NON_FIPS_METHOD 107 # define ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED 104 # define ECDSA_R_SIGNATURE_MALLOC_FAILED 105 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/engine.h ================================================ /* openssl/engine.h */ /* * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project * 2000. */ /* ==================================================================== * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * ECDH support in OpenSSL originally developed by * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. */ #ifndef HEADER_ENGINE_H # define HEADER_ENGINE_H # include # ifdef OPENSSL_NO_ENGINE # error ENGINE is disabled. # endif # ifndef OPENSSL_NO_DEPRECATED # include # ifndef OPENSSL_NO_RSA # include # endif # ifndef OPENSSL_NO_DSA # include # endif # ifndef OPENSSL_NO_DH # include # endif # ifndef OPENSSL_NO_ECDH # include # endif # ifndef OPENSSL_NO_ECDSA # include # endif # include # include # include # endif # include # include # include #ifdef __cplusplus extern "C" { #endif /* * These flags are used to control combinations of algorithm (methods) by * bitwise "OR"ing. */ # define ENGINE_METHOD_RSA (unsigned int)0x0001 # define ENGINE_METHOD_DSA (unsigned int)0x0002 # define ENGINE_METHOD_DH (unsigned int)0x0004 # define ENGINE_METHOD_RAND (unsigned int)0x0008 # define ENGINE_METHOD_ECDH (unsigned int)0x0010 # define ENGINE_METHOD_ECDSA (unsigned int)0x0020 # define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 # define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 # define ENGINE_METHOD_STORE (unsigned int)0x0100 # define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 # define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 /* Obvious all-or-nothing cases. */ # define ENGINE_METHOD_ALL (unsigned int)0xFFFF # define ENGINE_METHOD_NONE (unsigned int)0x0000 /* * This(ese) flag(s) controls behaviour of the ENGINE_TABLE mechanism used * internally to control registration of ENGINE implementations, and can be * set by ENGINE_set_table_flags(). The "NOINIT" flag prevents attempts to * initialise registered ENGINEs if they are not already initialised. */ # define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 /* ENGINE flags that can be set by ENGINE_set_flags(). */ /* Not used */ /* #define ENGINE_FLAGS_MALLOCED 0x0001 */ /* * This flag is for ENGINEs that wish to handle the various 'CMD'-related * control commands on their own. Without this flag, ENGINE_ctrl() handles * these control commands on behalf of the ENGINE using their "cmd_defns" * data. */ # define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 /* * This flag is for ENGINEs who return new duplicate structures when found * via "ENGINE_by_id()". When an ENGINE must store state (eg. if * ENGINE_ctrl() commands are called in sequence as part of some stateful * process like key-generation setup and execution), it can set this flag - * then each attempt to obtain the ENGINE will result in it being copied into * a new structure. Normally, ENGINEs don't declare this flag so * ENGINE_by_id() just increments the existing ENGINE's structural reference * count. */ # define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 /* * This flag if for an ENGINE that does not want its methods registered as * part of ENGINE_register_all_complete() for example if the methods are not * usable as default methods. */ # define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 /* * ENGINEs can support their own command types, and these flags are used in * ENGINE_CTRL_GET_CMD_FLAGS to indicate to the caller what kind of input * each command expects. Currently only numeric and string input is * supported. If a control command supports none of the _NUMERIC, _STRING, or * _NO_INPUT options, then it is regarded as an "internal" control command - * and not for use in config setting situations. As such, they're not * available to the ENGINE_ctrl_cmd_string() function, only raw ENGINE_ctrl() * access. Changes to this list of 'command types' should be reflected * carefully in ENGINE_cmd_is_executable() and ENGINE_ctrl_cmd_string(). */ /* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */ # define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 /* * accepts string input (cast from 'void*' to 'const char *', 4th parameter * to ENGINE_ctrl) */ # define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 /* * Indicates that the control command takes *no* input. Ie. the control * command is unparameterised. */ # define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 /* * Indicates that the control command is internal. This control command won't * be shown in any output, and is only usable through the ENGINE_ctrl_cmd() * function. */ # define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 /* * NB: These 3 control commands are deprecated and should not be used. * ENGINEs relying on these commands should compile conditional support for * compatibility (eg. if these symbols are defined) but should also migrate * the same functionality to their own ENGINE-specific control functions that * can be "discovered" by calling applications. The fact these control * commands wouldn't be "executable" (ie. usable by text-based config) * doesn't change the fact that application code can find and use them * without requiring per-ENGINE hacking. */ /* * These flags are used to tell the ctrl function what should be done. All * command numbers are shared between all engines, even if some don't make * sense to some engines. In such a case, they do nothing but return the * error ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED. */ # define ENGINE_CTRL_SET_LOGSTREAM 1 # define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 # define ENGINE_CTRL_HUP 3/* Close and reinitialise * any handles/connections * etc. */ # define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ # define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used * when calling the password * callback and the user * interface */ # define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, * given a string that * represents a file name * or so */ # define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given * section in the already * loaded configuration */ /* * These control commands allow an application to deal with an arbitrary * engine in a dynamic way. Warn: Negative return values indicate errors FOR * THESE COMMANDS because zero is used to indicate 'end-of-list'. Other * commands, including ENGINE-specific command types, return zero for an * error. An ENGINE can choose to implement these ctrl functions, and can * internally manage things however it chooses - it does so by setting the * ENGINE_FLAGS_MANUAL_CMD_CTRL flag (using ENGINE_set_flags()). Otherwise * the ENGINE_ctrl() code handles this on the ENGINE's behalf using the * cmd_defns data (set using ENGINE_set_cmd_defns()). This means an ENGINE's * ctrl() handler need only implement its own commands - the above "meta" * commands will be taken care of. */ /* * Returns non-zero if the supplied ENGINE has a ctrl() handler. If "not", * then all the remaining control commands will return failure, so it is * worth checking this first if the caller is trying to "discover" the * engine's capabilities and doesn't want errors generated unnecessarily. */ # define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 /* * Returns a positive command number for the first command supported by the * engine. Returns zero if no ctrl commands are supported. */ # define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 /* * The 'long' argument specifies a command implemented by the engine, and the * return value is the next command supported, or zero if there are no more. */ # define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 /* * The 'void*' argument is a command name (cast from 'const char *'), and the * return value is the command that corresponds to it. */ # define ENGINE_CTRL_GET_CMD_FROM_NAME 13 /* * The next two allow a command to be converted into its corresponding string * form. In each case, the 'long' argument supplies the command. In the * NAME_LEN case, the return value is the length of the command name (not * counting a trailing EOL). In the NAME case, the 'void*' argument must be a * string buffer large enough, and it will be populated with the name of the * command (WITH a trailing EOL). */ # define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 # define ENGINE_CTRL_GET_NAME_FROM_CMD 15 /* The next two are similar but give a "short description" of a command. */ # define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 # define ENGINE_CTRL_GET_DESC_FROM_CMD 17 /* * With this command, the return value is the OR'd combination of * ENGINE_CMD_FLAG_*** values that indicate what kind of input a given * engine-specific ctrl command expects. */ # define ENGINE_CTRL_GET_CMD_FLAGS 18 /* * ENGINE implementations should start the numbering of their own control * commands from this value. (ie. ENGINE_CMD_BASE, ENGINE_CMD_BASE + 1, etc). */ # define ENGINE_CMD_BASE 200 /* * NB: These 2 nCipher "chil" control commands are deprecated, and their * functionality is now available through ENGINE-specific control commands * (exposed through the above-mentioned 'CMD'-handling). Code using these 2 * commands should be migrated to the more general command handling before * these are removed. */ /* Flags specific to the nCipher "chil" engine */ # define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 /* * Depending on the value of the (long)i argument, this sets or * unsets the SimpleForkCheck flag in the CHIL API to enable or * disable checking and workarounds for applications that fork(). */ # define ENGINE_CTRL_CHIL_NO_LOCKING 101 /* * This prevents the initialisation function from providing mutex * callbacks to the nCipher library. */ /* * If an ENGINE supports its own specific control commands and wishes the * framework to handle the above 'ENGINE_CMD_***'-manipulation commands on * its behalf, it should supply a null-terminated array of ENGINE_CMD_DEFN * entries to ENGINE_set_cmd_defns(). It should also implement a ctrl() * handler that supports the stated commands (ie. the "cmd_num" entries as * described by the array). NB: The array must be ordered in increasing order * of cmd_num. "null-terminated" means that the last ENGINE_CMD_DEFN element * has cmd_num set to zero and/or cmd_name set to NULL. */ typedef struct ENGINE_CMD_DEFN_st { unsigned int cmd_num; /* The command number */ const char *cmd_name; /* The command name itself */ const char *cmd_desc; /* A short description of the command */ unsigned int cmd_flags; /* The input the command expects */ } ENGINE_CMD_DEFN; /* Generic function pointer */ typedef int (*ENGINE_GEN_FUNC_PTR) (void); /* Generic function pointer taking no arguments */ typedef int (*ENGINE_GEN_INT_FUNC_PTR) (ENGINE *); /* Specific control function pointer */ typedef int (*ENGINE_CTRL_FUNC_PTR) (ENGINE *, int, long, void *, void (*f) (void)); /* Generic load_key function pointer */ typedef EVP_PKEY *(*ENGINE_LOAD_KEY_PTR)(ENGINE *, const char *, UI_METHOD *ui_method, void *callback_data); typedef int (*ENGINE_SSL_CLIENT_CERT_PTR) (ENGINE *, SSL *ssl, STACK_OF(X509_NAME) *ca_dn, X509 **pcert, EVP_PKEY **pkey, STACK_OF(X509) **pother, UI_METHOD *ui_method, void *callback_data); /*- * These callback types are for an ENGINE's handler for cipher and digest logic. * These handlers have these prototypes; * int foo(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, int nid); * int foo(ENGINE *e, const EVP_MD **digest, const int **nids, int nid); * Looking at how to implement these handlers in the case of cipher support, if * the framework wants the EVP_CIPHER for 'nid', it will call; * foo(e, &p_evp_cipher, NULL, nid); (return zero for failure) * If the framework wants a list of supported 'nid's, it will call; * foo(e, NULL, &p_nids, 0); (returns number of 'nids' or -1 for error) */ /* * Returns to a pointer to the array of supported cipher 'nid's. If the * second parameter is non-NULL it is set to the size of the returned array. */ typedef int (*ENGINE_CIPHERS_PTR) (ENGINE *, const EVP_CIPHER **, const int **, int); typedef int (*ENGINE_DIGESTS_PTR) (ENGINE *, const EVP_MD **, const int **, int); typedef int (*ENGINE_PKEY_METHS_PTR) (ENGINE *, EVP_PKEY_METHOD **, const int **, int); typedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **, const int **, int); /* * STRUCTURE functions ... all of these functions deal with pointers to * ENGINE structures where the pointers have a "structural reference". This * means that their reference is to allowed access to the structure but it * does not imply that the structure is functional. To simply increment or * decrement the structural reference count, use ENGINE_by_id and * ENGINE_free. NB: This is not required when iterating using ENGINE_get_next * as it will automatically decrement the structural reference count of the * "current" ENGINE and increment the structural reference count of the * ENGINE it returns (unless it is NULL). */ /* Get the first/last "ENGINE" type available. */ ENGINE *ENGINE_get_first(void); ENGINE *ENGINE_get_last(void); /* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */ ENGINE *ENGINE_get_next(ENGINE *e); ENGINE *ENGINE_get_prev(ENGINE *e); /* Add another "ENGINE" type into the array. */ int ENGINE_add(ENGINE *e); /* Remove an existing "ENGINE" type from the array. */ int ENGINE_remove(ENGINE *e); /* Retrieve an engine from the list by its unique "id" value. */ ENGINE *ENGINE_by_id(const char *id); /* Add all the built-in engines. */ void ENGINE_load_openssl(void); void ENGINE_load_dynamic(void); # ifndef OPENSSL_NO_STATIC_ENGINE void ENGINE_load_4758cca(void); void ENGINE_load_aep(void); void ENGINE_load_atalla(void); void ENGINE_load_chil(void); void ENGINE_load_cswift(void); void ENGINE_load_nuron(void); void ENGINE_load_sureware(void); void ENGINE_load_ubsec(void); void ENGINE_load_padlock(void); void ENGINE_load_capi(void); # ifndef OPENSSL_NO_GMP void ENGINE_load_gmp(void); # endif # ifndef OPENSSL_NO_GOST void ENGINE_load_gost(void); # endif # endif void ENGINE_load_cryptodev(void); void ENGINE_load_rdrand(void); void ENGINE_load_builtin_engines(void); /* * Get and set global flags (ENGINE_TABLE_FLAG_***) for the implementation * "registry" handling. */ unsigned int ENGINE_get_table_flags(void); void ENGINE_set_table_flags(unsigned int flags); /*- Manage registration of ENGINEs per "table". For each type, there are 3 * functions; * ENGINE_register_***(e) - registers the implementation from 'e' (if it has one) * ENGINE_unregister_***(e) - unregister the implementation from 'e' * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list * Cleanup is automatically registered from each table when required, so * ENGINE_cleanup() will reverse any "register" operations. */ int ENGINE_register_RSA(ENGINE *e); void ENGINE_unregister_RSA(ENGINE *e); void ENGINE_register_all_RSA(void); int ENGINE_register_DSA(ENGINE *e); void ENGINE_unregister_DSA(ENGINE *e); void ENGINE_register_all_DSA(void); int ENGINE_register_ECDH(ENGINE *e); void ENGINE_unregister_ECDH(ENGINE *e); void ENGINE_register_all_ECDH(void); int ENGINE_register_ECDSA(ENGINE *e); void ENGINE_unregister_ECDSA(ENGINE *e); void ENGINE_register_all_ECDSA(void); int ENGINE_register_DH(ENGINE *e); void ENGINE_unregister_DH(ENGINE *e); void ENGINE_register_all_DH(void); int ENGINE_register_RAND(ENGINE *e); void ENGINE_unregister_RAND(ENGINE *e); void ENGINE_register_all_RAND(void); int ENGINE_register_STORE(ENGINE *e); void ENGINE_unregister_STORE(ENGINE *e); void ENGINE_register_all_STORE(void); int ENGINE_register_ciphers(ENGINE *e); void ENGINE_unregister_ciphers(ENGINE *e); void ENGINE_register_all_ciphers(void); int ENGINE_register_digests(ENGINE *e); void ENGINE_unregister_digests(ENGINE *e); void ENGINE_register_all_digests(void); int ENGINE_register_pkey_meths(ENGINE *e); void ENGINE_unregister_pkey_meths(ENGINE *e); void ENGINE_register_all_pkey_meths(void); int ENGINE_register_pkey_asn1_meths(ENGINE *e); void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); void ENGINE_register_all_pkey_asn1_meths(void); /* * These functions register all support from the above categories. Note, use * of these functions can result in static linkage of code your application * may not need. If you only need a subset of functionality, consider using * more selective initialisation. */ int ENGINE_register_complete(ENGINE *e); int ENGINE_register_all_complete(void); /* * Send parametrised control commands to the engine. The possibilities to * send down an integer, a pointer to data or a function pointer are * provided. Any of the parameters may or may not be NULL, depending on the * command number. In actuality, this function only requires a structural * (rather than functional) reference to an engine, but many control commands * may require the engine be functional. The caller should be aware of trying * commands that require an operational ENGINE, and only use functional * references in such situations. */ int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); /* * This function tests if an ENGINE-specific command is usable as a * "setting". Eg. in an application's config file that gets processed through * ENGINE_ctrl_cmd_string(). If this returns zero, it is not available to * ENGINE_ctrl_cmd_string(), only ENGINE_ctrl(). */ int ENGINE_cmd_is_executable(ENGINE *e, int cmd); /* * This function works like ENGINE_ctrl() with the exception of taking a * command name instead of a command number, and can handle optional * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation * on how to use the cmd_name and cmd_optional. */ int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, long i, void *p, void (*f) (void), int cmd_optional); /* * This function passes a command-name and argument to an ENGINE. The * cmd_name is converted to a command number and the control command is * called using 'arg' as an argument (unless the ENGINE doesn't support such * a command, in which case no control command is called). The command is * checked for input flags, and if necessary the argument will be converted * to a numeric value. If cmd_optional is non-zero, then if the ENGINE * doesn't support the given cmd_name the return value will be success * anyway. This function is intended for applications to use so that users * (or config files) can supply engine-specific config data to the ENGINE at * run-time to control behaviour of specific engines. As such, it shouldn't * be used for calling ENGINE_ctrl() functions that return data, deal with * binary data, or that are otherwise supposed to be used directly through * ENGINE_ctrl() in application code. Any "return" data from an ENGINE_ctrl() * operation in this function will be lost - the return value is interpreted * as failure if the return value is zero, success otherwise, and this * function returns a boolean value as a result. In other words, vendors of * 'ENGINE'-enabled devices should write ENGINE implementations with * parameterisations that work in this scheme, so that compliant ENGINE-based * applications can work consistently with the same configuration for the * same ENGINE-enabled devices, across applications. */ int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, int cmd_optional); /* * These functions are useful for manufacturing new ENGINE structures. They * don't address reference counting at all - one uses them to populate an * ENGINE structure with personalised implementations of things prior to * using it directly or adding it to the builtin ENGINE list in OpenSSL. * These are also here so that the ENGINE structure doesn't have to be * exposed and break binary compatibility! */ ENGINE *ENGINE_new(void); int ENGINE_free(ENGINE *e); int ENGINE_up_ref(ENGINE *e); int ENGINE_set_id(ENGINE *e, const char *id); int ENGINE_set_name(ENGINE *e, const char *name); int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); int ENGINE_set_ECDH(ENGINE *e, const ECDH_METHOD *ecdh_meth); int ENGINE_set_ECDSA(ENGINE *e, const ECDSA_METHOD *ecdsa_meth); int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); int ENGINE_set_STORE(ENGINE *e, const STORE_METHOD *store_meth); int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f); int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f); int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f); int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f); int ENGINE_set_load_privkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpriv_f); int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f); int ENGINE_set_load_ssl_client_cert_function(ENGINE *e, ENGINE_SSL_CLIENT_CERT_PTR loadssl_f); int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f); int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f); int ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f); int ENGINE_set_pkey_asn1_meths(ENGINE *e, ENGINE_PKEY_ASN1_METHS_PTR f); int ENGINE_set_flags(ENGINE *e, int flags); int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns); /* These functions allow control over any per-structure ENGINE data. */ int ENGINE_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); void *ENGINE_get_ex_data(const ENGINE *e, int idx); /* * This function cleans up anything that needs it. Eg. the ENGINE_add() * function automatically ensures the list cleanup function is registered to * be called from ENGINE_cleanup(). Similarly, all ENGINE_register_*** * functions ensure ENGINE_cleanup() will clean up after them. */ void ENGINE_cleanup(void); /* * These return values from within the ENGINE structure. These can be useful * with functional references as well as structural references - it depends * which you obtained. Using the result for functional purposes if you only * obtained a structural reference may be problematic! */ const char *ENGINE_get_id(const ENGINE *e); const char *ENGINE_get_name(const ENGINE *e); const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); const ECDH_METHOD *ENGINE_get_ECDH(const ENGINE *e); const ECDSA_METHOD *ENGINE_get_ECDSA(const ENGINE *e); const DH_METHOD *ENGINE_get_DH(const ENGINE *e); const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); const STORE_METHOD *ENGINE_get_STORE(const ENGINE *e); ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e); ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e); ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e); ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e); ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e); ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e); ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE *e); ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e); ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e); ENGINE_PKEY_METHS_PTR ENGINE_get_pkey_meths(const ENGINE *e); ENGINE_PKEY_ASN1_METHS_PTR ENGINE_get_pkey_asn1_meths(const ENGINE *e); const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid); const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid); const EVP_PKEY_METHOD *ENGINE_get_pkey_meth(ENGINE *e, int nid); const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth(ENGINE *e, int nid); const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth_str(ENGINE *e, const char *str, int len); const EVP_PKEY_ASN1_METHOD *ENGINE_pkey_asn1_find_str(ENGINE **pe, const char *str, int len); const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); int ENGINE_get_flags(const ENGINE *e); /* * FUNCTIONAL functions. These functions deal with ENGINE structures that * have (or will) be initialised for use. Broadly speaking, the structural * functions are useful for iterating the list of available engine types, * creating new engine types, and other "list" operations. These functions * actually deal with ENGINEs that are to be used. As such these functions * can fail (if applicable) when particular engines are unavailable - eg. if * a hardware accelerator is not attached or not functioning correctly. Each * ENGINE has 2 reference counts; structural and functional. Every time a * functional reference is obtained or released, a corresponding structural * reference is automatically obtained or released too. */ /* * Initialise a engine type for use (or up its reference count if it's * already in use). This will fail if the engine is not currently operational * and cannot initialise. */ int ENGINE_init(ENGINE *e); /* * Free a functional reference to a engine type. This does not require a * corresponding call to ENGINE_free as it also releases a structural * reference. */ int ENGINE_finish(ENGINE *e); /* * The following functions handle keys that are stored in some secondary * location, handled by the engine. The storage may be on a card or * whatever. */ EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, UI_METHOD *ui_method, void *callback_data); EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, UI_METHOD *ui_method, void *callback_data); int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, STACK_OF(X509_NAME) *ca_dn, X509 **pcert, EVP_PKEY **ppkey, STACK_OF(X509) **pother, UI_METHOD *ui_method, void *callback_data); /* * This returns a pointer for the current ENGINE structure that is (by * default) performing any RSA operations. The value returned is an * incremented reference, so it should be free'd (ENGINE_finish) before it is * discarded. */ ENGINE *ENGINE_get_default_RSA(void); /* Same for the other "methods" */ ENGINE *ENGINE_get_default_DSA(void); ENGINE *ENGINE_get_default_ECDH(void); ENGINE *ENGINE_get_default_ECDSA(void); ENGINE *ENGINE_get_default_DH(void); ENGINE *ENGINE_get_default_RAND(void); /* * These functions can be used to get a functional reference to perform * ciphering or digesting corresponding to "nid". */ ENGINE *ENGINE_get_cipher_engine(int nid); ENGINE *ENGINE_get_digest_engine(int nid); ENGINE *ENGINE_get_pkey_meth_engine(int nid); ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); /* * This sets a new default ENGINE structure for performing RSA operations. If * the result is non-zero (success) then the ENGINE structure will have had * its reference count up'd so the caller should still free their own * reference 'e'. */ int ENGINE_set_default_RSA(ENGINE *e); int ENGINE_set_default_string(ENGINE *e, const char *def_list); /* Same for the other "methods" */ int ENGINE_set_default_DSA(ENGINE *e); int ENGINE_set_default_ECDH(ENGINE *e); int ENGINE_set_default_ECDSA(ENGINE *e); int ENGINE_set_default_DH(ENGINE *e); int ENGINE_set_default_RAND(ENGINE *e); int ENGINE_set_default_ciphers(ENGINE *e); int ENGINE_set_default_digests(ENGINE *e); int ENGINE_set_default_pkey_meths(ENGINE *e); int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); /* * The combination "set" - the flags are bitwise "OR"d from the * ENGINE_METHOD_*** defines above. As with the "ENGINE_register_complete()" * function, this function can result in unnecessary static linkage. If your * application requires only specific functionality, consider using more * selective functions. */ int ENGINE_set_default(ENGINE *e, unsigned int flags); void ENGINE_add_conf_module(void); /* Deprecated functions ... */ /* int ENGINE_clear_defaults(void); */ /**************************/ /* DYNAMIC ENGINE SUPPORT */ /**************************/ /* Binary/behaviour compatibility levels */ # define OSSL_DYNAMIC_VERSION (unsigned long)0x00020000 /* * Binary versions older than this are too old for us (whether we're a loader * or a loadee) */ # define OSSL_DYNAMIC_OLDEST (unsigned long)0x00020000 /* * When compiling an ENGINE entirely as an external shared library, loadable * by the "dynamic" ENGINE, these types are needed. The 'dynamic_fns' * structure type provides the calling application's (or library's) error * functionality and memory management function pointers to the loaded * library. These should be used/set in the loaded library code so that the * loading application's 'state' will be used/changed in all operations. The * 'static_state' pointer allows the loaded library to know if it shares the * same static data as the calling application (or library), and thus whether * these callbacks need to be set or not. */ typedef void *(*dyn_MEM_malloc_cb) (size_t); typedef void *(*dyn_MEM_realloc_cb) (void *, size_t); typedef void (*dyn_MEM_free_cb) (void *); typedef struct st_dynamic_MEM_fns { dyn_MEM_malloc_cb malloc_cb; dyn_MEM_realloc_cb realloc_cb; dyn_MEM_free_cb free_cb; } dynamic_MEM_fns; /* * FIXME: Perhaps the memory and locking code (crypto.h) should declare and * use these types so we (and any other dependant code) can simplify a bit?? */ typedef void (*dyn_lock_locking_cb) (int, int, const char *, int); typedef int (*dyn_lock_add_lock_cb) (int *, int, int, const char *, int); typedef struct CRYPTO_dynlock_value *(*dyn_dynlock_create_cb) (const char *, int); typedef void (*dyn_dynlock_lock_cb) (int, struct CRYPTO_dynlock_value *, const char *, int); typedef void (*dyn_dynlock_destroy_cb) (struct CRYPTO_dynlock_value *, const char *, int); typedef struct st_dynamic_LOCK_fns { dyn_lock_locking_cb lock_locking_cb; dyn_lock_add_lock_cb lock_add_lock_cb; dyn_dynlock_create_cb dynlock_create_cb; dyn_dynlock_lock_cb dynlock_lock_cb; dyn_dynlock_destroy_cb dynlock_destroy_cb; } dynamic_LOCK_fns; /* The top-level structure */ typedef struct st_dynamic_fns { void *static_state; const ERR_FNS *err_fns; const CRYPTO_EX_DATA_IMPL *ex_data_fns; dynamic_MEM_fns mem_fns; dynamic_LOCK_fns lock_fns; } dynamic_fns; /* * The version checking function should be of this prototype. NB: The * ossl_version value passed in is the OSSL_DYNAMIC_VERSION of the loading * code. If this function returns zero, it indicates a (potential) version * incompatibility and the loaded library doesn't believe it can proceed. * Otherwise, the returned value is the (latest) version supported by the * loading library. The loader may still decide that the loaded code's * version is unsatisfactory and could veto the load. The function is * expected to be implemented with the symbol name "v_check", and a default * implementation can be fully instantiated with * IMPLEMENT_DYNAMIC_CHECK_FN(). */ typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); # define IMPLEMENT_DYNAMIC_CHECK_FN() \ OPENSSL_EXPORT unsigned long v_check(unsigned long v); \ OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \ if(v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \ return 0; } /* * This function is passed the ENGINE structure to initialise with its own * function and command settings. It should not adjust the structural or * functional reference counts. If this function returns zero, (a) the load * will be aborted, (b) the previous ENGINE state will be memcpy'd back onto * the structure, and (c) the shared library will be unloaded. So * implementations should do their own internal cleanup in failure * circumstances otherwise they could leak. The 'id' parameter, if non-NULL, * represents the ENGINE id that the loader is looking for. If this is NULL, * the shared library can choose to return failure or to initialise a * 'default' ENGINE. If non-NULL, the shared library must initialise only an * ENGINE matching the passed 'id'. The function is expected to be * implemented with the symbol name "bind_engine". A standard implementation * can be instantiated with IMPLEMENT_DYNAMIC_BIND_FN(fn) where the parameter * 'fn' is a callback function that populates the ENGINE structure and * returns an int value (zero for failure). 'fn' should have prototype; * [static] int fn(ENGINE *e, const char *id); */ typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, const dynamic_fns *fns); # define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ OPENSSL_EXPORT \ int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ OPENSSL_EXPORT \ int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { \ if(ENGINE_get_static_state() == fns->static_state) goto skip_cbs; \ if(!CRYPTO_set_mem_functions(fns->mem_fns.malloc_cb, \ fns->mem_fns.realloc_cb, fns->mem_fns.free_cb)) \ return 0; \ CRYPTO_set_locking_callback(fns->lock_fns.lock_locking_cb); \ CRYPTO_set_add_lock_callback(fns->lock_fns.lock_add_lock_cb); \ CRYPTO_set_dynlock_create_callback(fns->lock_fns.dynlock_create_cb); \ CRYPTO_set_dynlock_lock_callback(fns->lock_fns.dynlock_lock_cb); \ CRYPTO_set_dynlock_destroy_callback(fns->lock_fns.dynlock_destroy_cb); \ if(!CRYPTO_set_ex_data_implementation(fns->ex_data_fns)) \ return 0; \ if(!ERR_set_implementation(fns->err_fns)) return 0; \ skip_cbs: \ if(!fn(e,id)) return 0; \ return 1; } /* * If the loading application (or library) and the loaded ENGINE library * share the same static data (eg. they're both dynamically linked to the * same libcrypto.so) we need a way to avoid trying to set system callbacks - * this would fail, and for the same reason that it's unnecessary to try. If * the loaded ENGINE has (or gets from through the loader) its own copy of * the libcrypto static data, we will need to set the callbacks. The easiest * way to detect this is to have a function that returns a pointer to some * static data and let the loading application and loaded ENGINE compare * their respective values. */ void *ENGINE_get_static_state(void); # if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV) void ENGINE_setup_bsd_cryptodev(void); # endif /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_ENGINE_strings(void); /* Error codes for the ENGINE functions. */ /* Function codes. */ # define ENGINE_F_DYNAMIC_CTRL 180 # define ENGINE_F_DYNAMIC_GET_DATA_CTX 181 # define ENGINE_F_DYNAMIC_LOAD 182 # define ENGINE_F_DYNAMIC_SET_DATA_CTX 183 # define ENGINE_F_ENGINE_ADD 105 # define ENGINE_F_ENGINE_BY_ID 106 # define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 170 # define ENGINE_F_ENGINE_CTRL 142 # define ENGINE_F_ENGINE_CTRL_CMD 178 # define ENGINE_F_ENGINE_CTRL_CMD_STRING 171 # define ENGINE_F_ENGINE_FINISH 107 # define ENGINE_F_ENGINE_FREE_UTIL 108 # define ENGINE_F_ENGINE_GET_CIPHER 185 # define ENGINE_F_ENGINE_GET_DEFAULT_TYPE 177 # define ENGINE_F_ENGINE_GET_DIGEST 186 # define ENGINE_F_ENGINE_GET_NEXT 115 # define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 193 # define ENGINE_F_ENGINE_GET_PKEY_METH 192 # define ENGINE_F_ENGINE_GET_PREV 116 # define ENGINE_F_ENGINE_INIT 119 # define ENGINE_F_ENGINE_LIST_ADD 120 # define ENGINE_F_ENGINE_LIST_REMOVE 121 # define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150 # define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151 # define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 194 # define ENGINE_F_ENGINE_NEW 122 # define ENGINE_F_ENGINE_REMOVE 123 # define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 # define ENGINE_F_ENGINE_SET_DEFAULT_TYPE 126 # define ENGINE_F_ENGINE_SET_ID 129 # define ENGINE_F_ENGINE_SET_NAME 130 # define ENGINE_F_ENGINE_TABLE_REGISTER 184 # define ENGINE_F_ENGINE_UNLOAD_KEY 152 # define ENGINE_F_ENGINE_UNLOCKED_FINISH 191 # define ENGINE_F_ENGINE_UP_REF 190 # define ENGINE_F_INT_CTRL_HELPER 172 # define ENGINE_F_INT_ENGINE_CONFIGURE 188 # define ENGINE_F_INT_ENGINE_MODULE_INIT 187 # define ENGINE_F_LOG_MESSAGE 141 /* Reason codes. */ # define ENGINE_R_ALREADY_LOADED 100 # define ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER 133 # define ENGINE_R_CMD_NOT_EXECUTABLE 134 # define ENGINE_R_COMMAND_TAKES_INPUT 135 # define ENGINE_R_COMMAND_TAKES_NO_INPUT 136 # define ENGINE_R_CONFLICTING_ENGINE_ID 103 # define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED 119 # define ENGINE_R_DH_NOT_IMPLEMENTED 139 # define ENGINE_R_DSA_NOT_IMPLEMENTED 140 # define ENGINE_R_DSO_FAILURE 104 # define ENGINE_R_DSO_NOT_FOUND 132 # define ENGINE_R_ENGINES_SECTION_ERROR 148 # define ENGINE_R_ENGINE_CONFIGURATION_ERROR 102 # define ENGINE_R_ENGINE_IS_NOT_IN_LIST 105 # define ENGINE_R_ENGINE_SECTION_ERROR 149 # define ENGINE_R_FAILED_LOADING_PRIVATE_KEY 128 # define ENGINE_R_FAILED_LOADING_PUBLIC_KEY 129 # define ENGINE_R_FINISH_FAILED 106 # define ENGINE_R_GET_HANDLE_FAILED 107 # define ENGINE_R_ID_OR_NAME_MISSING 108 # define ENGINE_R_INIT_FAILED 109 # define ENGINE_R_INTERNAL_LIST_ERROR 110 # define ENGINE_R_INVALID_ARGUMENT 143 # define ENGINE_R_INVALID_CMD_NAME 137 # define ENGINE_R_INVALID_CMD_NUMBER 138 # define ENGINE_R_INVALID_INIT_VALUE 151 # define ENGINE_R_INVALID_STRING 150 # define ENGINE_R_NOT_INITIALISED 117 # define ENGINE_R_NOT_LOADED 112 # define ENGINE_R_NO_CONTROL_FUNCTION 120 # define ENGINE_R_NO_INDEX 144 # define ENGINE_R_NO_LOAD_FUNCTION 125 # define ENGINE_R_NO_REFERENCE 130 # define ENGINE_R_NO_SUCH_ENGINE 116 # define ENGINE_R_NO_UNLOAD_FUNCTION 126 # define ENGINE_R_PROVIDE_PARAMETERS 113 # define ENGINE_R_RSA_NOT_IMPLEMENTED 141 # define ENGINE_R_UNIMPLEMENTED_CIPHER 146 # define ENGINE_R_UNIMPLEMENTED_DIGEST 147 # define ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD 101 # define ENGINE_R_VERSION_INCOMPATIBILITY 145 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/err.h ================================================ /* crypto/err/err.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_ERR_H # define HEADER_ERR_H # include # ifndef OPENSSL_NO_FP_API # include # include # endif # include # ifndef OPENSSL_NO_BIO # include # endif # ifndef OPENSSL_NO_LHASH # include # endif #ifdef __cplusplus extern "C" { #endif # ifndef OPENSSL_NO_ERR # define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,d,e) # else # define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,NULL,0) # endif # include # define ERR_TXT_MALLOCED 0x01 # define ERR_TXT_STRING 0x02 # define ERR_FLAG_MARK 0x01 # define ERR_NUM_ERRORS 16 typedef struct err_state_st { CRYPTO_THREADID tid; int err_flags[ERR_NUM_ERRORS]; unsigned long err_buffer[ERR_NUM_ERRORS]; char *err_data[ERR_NUM_ERRORS]; int err_data_flags[ERR_NUM_ERRORS]; const char *err_file[ERR_NUM_ERRORS]; int err_line[ERR_NUM_ERRORS]; int top, bottom; } ERR_STATE; /* library */ # define ERR_LIB_NONE 1 # define ERR_LIB_SYS 2 # define ERR_LIB_BN 3 # define ERR_LIB_RSA 4 # define ERR_LIB_DH 5 # define ERR_LIB_EVP 6 # define ERR_LIB_BUF 7 # define ERR_LIB_OBJ 8 # define ERR_LIB_PEM 9 # define ERR_LIB_DSA 10 # define ERR_LIB_X509 11 /* #define ERR_LIB_METH 12 */ # define ERR_LIB_ASN1 13 # define ERR_LIB_CONF 14 # define ERR_LIB_CRYPTO 15 # define ERR_LIB_EC 16 # define ERR_LIB_SSL 20 /* #define ERR_LIB_SSL23 21 */ /* #define ERR_LIB_SSL2 22 */ /* #define ERR_LIB_SSL3 23 */ /* #define ERR_LIB_RSAREF 30 */ /* #define ERR_LIB_PROXY 31 */ # define ERR_LIB_BIO 32 # define ERR_LIB_PKCS7 33 # define ERR_LIB_X509V3 34 # define ERR_LIB_PKCS12 35 # define ERR_LIB_RAND 36 # define ERR_LIB_DSO 37 # define ERR_LIB_ENGINE 38 # define ERR_LIB_OCSP 39 # define ERR_LIB_UI 40 # define ERR_LIB_COMP 41 # define ERR_LIB_ECDSA 42 # define ERR_LIB_ECDH 43 # define ERR_LIB_STORE 44 # define ERR_LIB_FIPS 45 # define ERR_LIB_CMS 46 # define ERR_LIB_TS 47 # define ERR_LIB_HMAC 48 # define ERR_LIB_JPAKE 49 # define ERR_LIB_USER 128 # define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),__FILE__,__LINE__) # define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),__FILE__,__LINE__) # define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),__FILE__,__LINE__) # define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),__FILE__,__LINE__) # define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),__FILE__,__LINE__) # define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),__FILE__,__LINE__) # define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),__FILE__,__LINE__) # define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),__FILE__,__LINE__) # define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),__FILE__,__LINE__) # define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),__FILE__,__LINE__) # define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),__FILE__,__LINE__) # define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),__FILE__,__LINE__) # define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),__FILE__,__LINE__) # define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),__FILE__,__LINE__) # define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),__FILE__,__LINE__) # define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),__FILE__,__LINE__) # define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),__FILE__,__LINE__) # define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),__FILE__,__LINE__) # define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),__FILE__,__LINE__) # define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),__FILE__,__LINE__) # define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),__FILE__,__LINE__) # define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),__FILE__,__LINE__) # define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),__FILE__,__LINE__) # define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),__FILE__,__LINE__) # define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),__FILE__,__LINE__) # define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),__FILE__,__LINE__) # define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),__FILE__,__LINE__) # define STOREerr(f,r) ERR_PUT_error(ERR_LIB_STORE,(f),(r),__FILE__,__LINE__) # define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),__FILE__,__LINE__) # define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),__FILE__,__LINE__) # define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),__FILE__,__LINE__) # define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),__FILE__,__LINE__) # define JPAKEerr(f,r) ERR_PUT_error(ERR_LIB_JPAKE,(f),(r),__FILE__,__LINE__) /* * Borland C seems too stupid to be able to shift and do longs in the * pre-processor :-( */ # define ERR_PACK(l,f,r) (((((unsigned long)l)&0xffL)*0x1000000)| \ ((((unsigned long)f)&0xfffL)*0x1000)| \ ((((unsigned long)r)&0xfffL))) # define ERR_GET_LIB(l) (int)((((unsigned long)l)>>24L)&0xffL) # define ERR_GET_FUNC(l) (int)((((unsigned long)l)>>12L)&0xfffL) # define ERR_GET_REASON(l) (int)((l)&0xfffL) # define ERR_FATAL_ERROR(l) (int)((l)&ERR_R_FATAL) /* OS functions */ # define SYS_F_FOPEN 1 # define SYS_F_CONNECT 2 # define SYS_F_GETSERVBYNAME 3 # define SYS_F_SOCKET 4 # define SYS_F_IOCTLSOCKET 5 # define SYS_F_BIND 6 # define SYS_F_LISTEN 7 # define SYS_F_ACCEPT 8 # define SYS_F_WSASTARTUP 9/* Winsock stuff */ # define SYS_F_OPENDIR 10 # define SYS_F_FREAD 11 /* reasons */ # define ERR_R_SYS_LIB ERR_LIB_SYS/* 2 */ # define ERR_R_BN_LIB ERR_LIB_BN/* 3 */ # define ERR_R_RSA_LIB ERR_LIB_RSA/* 4 */ # define ERR_R_DH_LIB ERR_LIB_DH/* 5 */ # define ERR_R_EVP_LIB ERR_LIB_EVP/* 6 */ # define ERR_R_BUF_LIB ERR_LIB_BUF/* 7 */ # define ERR_R_OBJ_LIB ERR_LIB_OBJ/* 8 */ # define ERR_R_PEM_LIB ERR_LIB_PEM/* 9 */ # define ERR_R_DSA_LIB ERR_LIB_DSA/* 10 */ # define ERR_R_X509_LIB ERR_LIB_X509/* 11 */ # define ERR_R_ASN1_LIB ERR_LIB_ASN1/* 13 */ # define ERR_R_CONF_LIB ERR_LIB_CONF/* 14 */ # define ERR_R_CRYPTO_LIB ERR_LIB_CRYPTO/* 15 */ # define ERR_R_EC_LIB ERR_LIB_EC/* 16 */ # define ERR_R_SSL_LIB ERR_LIB_SSL/* 20 */ # define ERR_R_BIO_LIB ERR_LIB_BIO/* 32 */ # define ERR_R_PKCS7_LIB ERR_LIB_PKCS7/* 33 */ # define ERR_R_X509V3_LIB ERR_LIB_X509V3/* 34 */ # define ERR_R_PKCS12_LIB ERR_LIB_PKCS12/* 35 */ # define ERR_R_RAND_LIB ERR_LIB_RAND/* 36 */ # define ERR_R_DSO_LIB ERR_LIB_DSO/* 37 */ # define ERR_R_ENGINE_LIB ERR_LIB_ENGINE/* 38 */ # define ERR_R_OCSP_LIB ERR_LIB_OCSP/* 39 */ # define ERR_R_UI_LIB ERR_LIB_UI/* 40 */ # define ERR_R_COMP_LIB ERR_LIB_COMP/* 41 */ # define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */ # define ERR_R_ECDH_LIB ERR_LIB_ECDH/* 43 */ # define ERR_R_STORE_LIB ERR_LIB_STORE/* 44 */ # define ERR_R_TS_LIB ERR_LIB_TS/* 45 */ # define ERR_R_NESTED_ASN1_ERROR 58 # define ERR_R_BAD_ASN1_OBJECT_HEADER 59 # define ERR_R_BAD_GET_ASN1_OBJECT_CALL 60 # define ERR_R_EXPECTING_AN_ASN1_SEQUENCE 61 # define ERR_R_ASN1_LENGTH_MISMATCH 62 # define ERR_R_MISSING_ASN1_EOS 63 /* fatal error */ # define ERR_R_FATAL 64 # define ERR_R_MALLOC_FAILURE (1|ERR_R_FATAL) # define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (2|ERR_R_FATAL) # define ERR_R_PASSED_NULL_PARAMETER (3|ERR_R_FATAL) # define ERR_R_INTERNAL_ERROR (4|ERR_R_FATAL) # define ERR_R_DISABLED (5|ERR_R_FATAL) /* * 99 is the maximum possible ERR_R_... code, higher values are reserved for * the individual libraries */ typedef struct ERR_string_data_st { unsigned long error; const char *string; } ERR_STRING_DATA; void ERR_put_error(int lib, int func, int reason, const char *file, int line); void ERR_set_error_data(char *data, int flags); unsigned long ERR_get_error(void); unsigned long ERR_get_error_line(const char **file, int *line); unsigned long ERR_get_error_line_data(const char **file, int *line, const char **data, int *flags); unsigned long ERR_peek_error(void); unsigned long ERR_peek_error_line(const char **file, int *line); unsigned long ERR_peek_error_line_data(const char **file, int *line, const char **data, int *flags); unsigned long ERR_peek_last_error(void); unsigned long ERR_peek_last_error_line(const char **file, int *line); unsigned long ERR_peek_last_error_line_data(const char **file, int *line, const char **data, int *flags); void ERR_clear_error(void); char *ERR_error_string(unsigned long e, char *buf); void ERR_error_string_n(unsigned long e, char *buf, size_t len); const char *ERR_lib_error_string(unsigned long e); const char *ERR_func_error_string(unsigned long e); const char *ERR_reason_error_string(unsigned long e); void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), void *u); # ifndef OPENSSL_NO_FP_API void ERR_print_errors_fp(FILE *fp); # endif # ifndef OPENSSL_NO_BIO void ERR_print_errors(BIO *bp); # endif void ERR_add_error_data(int num, ...); void ERR_add_error_vdata(int num, va_list args); void ERR_load_strings(int lib, ERR_STRING_DATA str[]); void ERR_unload_strings(int lib, ERR_STRING_DATA str[]); void ERR_load_ERR_strings(void); void ERR_load_crypto_strings(void); void ERR_free_strings(void); void ERR_remove_thread_state(const CRYPTO_THREADID *tid); # ifndef OPENSSL_NO_DEPRECATED void ERR_remove_state(unsigned long pid); /* if zero we look it up */ # endif ERR_STATE *ERR_get_state(void); # ifndef OPENSSL_NO_LHASH LHASH_OF(ERR_STRING_DATA) *ERR_get_string_table(void); LHASH_OF(ERR_STATE) *ERR_get_err_state_table(void); void ERR_release_err_state_table(LHASH_OF(ERR_STATE) **hash); # endif int ERR_get_next_error_library(void); int ERR_set_mark(void); int ERR_pop_to_mark(void); /* Already defined in ossl_typ.h */ /* typedef struct st_ERR_FNS ERR_FNS; */ /* * An application can use this function and provide the return value to * loaded modules that should use the application's ERR state/functionality */ const ERR_FNS *ERR_get_implementation(void); /* * A loaded module should call this function prior to any ERR operations * using the application's "ERR_FNS". */ int ERR_set_implementation(const ERR_FNS *fns); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/evp.h ================================================ /* crypto/evp/evp.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_ENVELOPE_H # define HEADER_ENVELOPE_H # ifdef OPENSSL_ALGORITHM_DEFINES # include # else # define OPENSSL_ALGORITHM_DEFINES # include # undef OPENSSL_ALGORITHM_DEFINES # endif # include # include # ifndef OPENSSL_NO_BIO # include # endif /*- #define EVP_RC2_KEY_SIZE 16 #define EVP_RC4_KEY_SIZE 16 #define EVP_BLOWFISH_KEY_SIZE 16 #define EVP_CAST5_KEY_SIZE 16 #define EVP_RC5_32_12_16_KEY_SIZE 16 */ # define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ # define EVP_MAX_KEY_LENGTH 64 # define EVP_MAX_IV_LENGTH 16 # define EVP_MAX_BLOCK_LENGTH 32 # define PKCS5_SALT_LEN 8 /* Default PKCS#5 iteration count */ # define PKCS5_DEFAULT_ITER 2048 # include # define EVP_PK_RSA 0x0001 # define EVP_PK_DSA 0x0002 # define EVP_PK_DH 0x0004 # define EVP_PK_EC 0x0008 # define EVP_PKT_SIGN 0x0010 # define EVP_PKT_ENC 0x0020 # define EVP_PKT_EXCH 0x0040 # define EVP_PKS_RSA 0x0100 # define EVP_PKS_DSA 0x0200 # define EVP_PKS_EC 0x0400 # define EVP_PKEY_NONE NID_undef # define EVP_PKEY_RSA NID_rsaEncryption # define EVP_PKEY_RSA2 NID_rsa # define EVP_PKEY_DSA NID_dsa # define EVP_PKEY_DSA1 NID_dsa_2 # define EVP_PKEY_DSA2 NID_dsaWithSHA # define EVP_PKEY_DSA3 NID_dsaWithSHA1 # define EVP_PKEY_DSA4 NID_dsaWithSHA1_2 # define EVP_PKEY_DH NID_dhKeyAgreement # define EVP_PKEY_DHX NID_dhpublicnumber # define EVP_PKEY_EC NID_X9_62_id_ecPublicKey # define EVP_PKEY_HMAC NID_hmac # define EVP_PKEY_CMAC NID_cmac #ifdef __cplusplus extern "C" { #endif /* * Type needs to be a bit field Sub-type needs to be for variations on the * method, as in, can it do arbitrary encryption.... */ struct evp_pkey_st { int type; int save_type; int references; const EVP_PKEY_ASN1_METHOD *ameth; ENGINE *engine; union { char *ptr; # ifndef OPENSSL_NO_RSA struct rsa_st *rsa; /* RSA */ # endif # ifndef OPENSSL_NO_DSA struct dsa_st *dsa; /* DSA */ # endif # ifndef OPENSSL_NO_DH struct dh_st *dh; /* DH */ # endif # ifndef OPENSSL_NO_EC struct ec_key_st *ec; /* ECC */ # endif } pkey; int save_parameters; STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ } /* EVP_PKEY */ ; # define EVP_PKEY_MO_SIGN 0x0001 # define EVP_PKEY_MO_VERIFY 0x0002 # define EVP_PKEY_MO_ENCRYPT 0x0004 # define EVP_PKEY_MO_DECRYPT 0x0008 # ifndef EVP_MD struct env_md_st { int type; int pkey_type; int md_size; unsigned long flags; int (*init) (EVP_MD_CTX *ctx); int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count); int (*final) (EVP_MD_CTX *ctx, unsigned char *md); int (*copy) (EVP_MD_CTX *to, const EVP_MD_CTX *from); int (*cleanup) (EVP_MD_CTX *ctx); /* FIXME: prototype these some day */ int (*sign) (int type, const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, void *key); int (*verify) (int type, const unsigned char *m, unsigned int m_length, const unsigned char *sigbuf, unsigned int siglen, void *key); int required_pkey_type[5]; /* EVP_PKEY_xxx */ int block_size; int ctx_size; /* how big does the ctx->md_data need to be */ /* control function */ int (*md_ctrl) (EVP_MD_CTX *ctx, int cmd, int p1, void *p2); } /* EVP_MD */ ; typedef int evp_sign_method(int type, const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, void *key); typedef int evp_verify_method(int type, const unsigned char *m, unsigned int m_length, const unsigned char *sigbuf, unsigned int siglen, void *key); /* digest can only handle a single block */ # define EVP_MD_FLAG_ONESHOT 0x0001 /* * digest is a "clone" digest used * which is a copy of an existing * one for a specific public key type. * EVP_dss1() etc */ # define EVP_MD_FLAG_PKEY_DIGEST 0x0002 /* Digest uses EVP_PKEY_METHOD for signing instead of MD specific signing */ # define EVP_MD_FLAG_PKEY_METHOD_SIGNATURE 0x0004 /* DigestAlgorithmIdentifier flags... */ # define EVP_MD_FLAG_DIGALGID_MASK 0x0018 /* NULL or absent parameter accepted. Use NULL */ # define EVP_MD_FLAG_DIGALGID_NULL 0x0000 /* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */ # define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008 /* Custom handling via ctrl */ # define EVP_MD_FLAG_DIGALGID_CUSTOM 0x0018 /* Note if suitable for use in FIPS mode */ # define EVP_MD_FLAG_FIPS 0x0400 /* Digest ctrls */ # define EVP_MD_CTRL_DIGALGID 0x1 # define EVP_MD_CTRL_MICALG 0x2 /* Minimum Algorithm specific ctrl value */ # define EVP_MD_CTRL_ALG_CTRL 0x1000 # define EVP_PKEY_NULL_method NULL,NULL,{0,0,0,0} # ifndef OPENSSL_NO_DSA # define EVP_PKEY_DSA_method (evp_sign_method *)DSA_sign, \ (evp_verify_method *)DSA_verify, \ {EVP_PKEY_DSA,EVP_PKEY_DSA2,EVP_PKEY_DSA3, \ EVP_PKEY_DSA4,0} # else # define EVP_PKEY_DSA_method EVP_PKEY_NULL_method # endif # ifndef OPENSSL_NO_ECDSA # define EVP_PKEY_ECDSA_method (evp_sign_method *)ECDSA_sign, \ (evp_verify_method *)ECDSA_verify, \ {EVP_PKEY_EC,0,0,0} # else # define EVP_PKEY_ECDSA_method EVP_PKEY_NULL_method # endif # ifndef OPENSSL_NO_RSA # define EVP_PKEY_RSA_method (evp_sign_method *)RSA_sign, \ (evp_verify_method *)RSA_verify, \ {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0} # define EVP_PKEY_RSA_ASN1_OCTET_STRING_method \ (evp_sign_method *)RSA_sign_ASN1_OCTET_STRING, \ (evp_verify_method *)RSA_verify_ASN1_OCTET_STRING, \ {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0} # else # define EVP_PKEY_RSA_method EVP_PKEY_NULL_method # define EVP_PKEY_RSA_ASN1_OCTET_STRING_method EVP_PKEY_NULL_method # endif # endif /* !EVP_MD */ struct env_md_ctx_st { const EVP_MD *digest; ENGINE *engine; /* functional reference if 'digest' is * ENGINE-provided */ unsigned long flags; void *md_data; /* Public key context for sign/verify */ EVP_PKEY_CTX *pctx; /* Update function: usually copied from EVP_MD */ int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count); } /* EVP_MD_CTX */ ; /* values for EVP_MD_CTX flags */ # define EVP_MD_CTX_FLAG_ONESHOT 0x0001/* digest update will be * called once only */ # define EVP_MD_CTX_FLAG_CLEANED 0x0002/* context has already been * cleaned */ # define EVP_MD_CTX_FLAG_REUSE 0x0004/* Don't free up ctx->md_data * in EVP_MD_CTX_cleanup */ /* * FIPS and pad options are ignored in 1.0.0, definitions are here so we * don't accidentally reuse the values for other purposes. */ # define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008/* Allow use of non FIPS * digest in FIPS mode */ /* * The following PAD options are also currently ignored in 1.0.0, digest * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*() * instead. */ # define EVP_MD_CTX_FLAG_PAD_MASK 0xF0/* RSA mode to use */ # define EVP_MD_CTX_FLAG_PAD_PKCS1 0x00/* PKCS#1 v1.5 mode */ # define EVP_MD_CTX_FLAG_PAD_X931 0x10/* X9.31 mode */ # define EVP_MD_CTX_FLAG_PAD_PSS 0x20/* PSS mode */ # define EVP_MD_CTX_FLAG_NO_INIT 0x0100/* Don't initialize md_data */ struct evp_cipher_st { int nid; int block_size; /* Default value for variable length ciphers */ int key_len; int iv_len; /* Various flags */ unsigned long flags; /* init key */ int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc); /* encrypt/decrypt data */ int (*do_cipher) (EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl); /* cleanup ctx */ int (*cleanup) (EVP_CIPHER_CTX *); /* how big ctx->cipher_data needs to be */ int ctx_size; /* Populate a ASN1_TYPE with parameters */ int (*set_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *); /* Get parameters from a ASN1_TYPE */ int (*get_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *); /* Miscellaneous operations */ int (*ctrl) (EVP_CIPHER_CTX *, int type, int arg, void *ptr); /* Application data */ void *app_data; } /* EVP_CIPHER */ ; /* Values for cipher flags */ /* Modes for ciphers */ # define EVP_CIPH_STREAM_CIPHER 0x0 # define EVP_CIPH_ECB_MODE 0x1 # define EVP_CIPH_CBC_MODE 0x2 # define EVP_CIPH_CFB_MODE 0x3 # define EVP_CIPH_OFB_MODE 0x4 # define EVP_CIPH_CTR_MODE 0x5 # define EVP_CIPH_GCM_MODE 0x6 # define EVP_CIPH_CCM_MODE 0x7 # define EVP_CIPH_XTS_MODE 0x10001 # define EVP_CIPH_WRAP_MODE 0x10002 # define EVP_CIPH_MODE 0xF0007 /* Set if variable length cipher */ # define EVP_CIPH_VARIABLE_LENGTH 0x8 /* Set if the iv handling should be done by the cipher itself */ # define EVP_CIPH_CUSTOM_IV 0x10 /* Set if the cipher's init() function should be called if key is NULL */ # define EVP_CIPH_ALWAYS_CALL_INIT 0x20 /* Call ctrl() to init cipher parameters */ # define EVP_CIPH_CTRL_INIT 0x40 /* Don't use standard key length function */ # define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80 /* Don't use standard block padding */ # define EVP_CIPH_NO_PADDING 0x100 /* cipher handles random key generation */ # define EVP_CIPH_RAND_KEY 0x200 /* cipher has its own additional copying logic */ # define EVP_CIPH_CUSTOM_COPY 0x400 /* Allow use default ASN1 get/set iv */ # define EVP_CIPH_FLAG_DEFAULT_ASN1 0x1000 /* Buffer length in bits not bytes: CFB1 mode only */ # define EVP_CIPH_FLAG_LENGTH_BITS 0x2000 /* Note if suitable for use in FIPS mode */ # define EVP_CIPH_FLAG_FIPS 0x4000 /* Allow non FIPS cipher in FIPS mode */ # define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x8000 /* * Cipher handles any and all padding logic as well as finalisation. */ # define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000 # define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000 # define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000 /* * Cipher context flag to indicate we can handle wrap mode: if allowed in * older applications it could overflow buffers. */ # define EVP_CIPHER_CTX_FLAG_WRAP_ALLOW 0x1 /* ctrl() values */ # define EVP_CTRL_INIT 0x0 # define EVP_CTRL_SET_KEY_LENGTH 0x1 # define EVP_CTRL_GET_RC2_KEY_BITS 0x2 # define EVP_CTRL_SET_RC2_KEY_BITS 0x3 # define EVP_CTRL_GET_RC5_ROUNDS 0x4 # define EVP_CTRL_SET_RC5_ROUNDS 0x5 # define EVP_CTRL_RAND_KEY 0x6 # define EVP_CTRL_PBE_PRF_NID 0x7 # define EVP_CTRL_COPY 0x8 # define EVP_CTRL_GCM_SET_IVLEN 0x9 # define EVP_CTRL_GCM_GET_TAG 0x10 # define EVP_CTRL_GCM_SET_TAG 0x11 # define EVP_CTRL_GCM_SET_IV_FIXED 0x12 # define EVP_CTRL_GCM_IV_GEN 0x13 # define EVP_CTRL_CCM_SET_IVLEN EVP_CTRL_GCM_SET_IVLEN # define EVP_CTRL_CCM_GET_TAG EVP_CTRL_GCM_GET_TAG # define EVP_CTRL_CCM_SET_TAG EVP_CTRL_GCM_SET_TAG # define EVP_CTRL_CCM_SET_L 0x14 # define EVP_CTRL_CCM_SET_MSGLEN 0x15 /* * AEAD cipher deduces payload length and returns number of bytes required to * store MAC and eventual padding. Subsequent call to EVP_Cipher even * appends/verifies MAC. */ # define EVP_CTRL_AEAD_TLS1_AAD 0x16 /* Used by composite AEAD ciphers, no-op in GCM, CCM... */ # define EVP_CTRL_AEAD_SET_MAC_KEY 0x17 /* Set the GCM invocation field, decrypt only */ # define EVP_CTRL_GCM_SET_IV_INV 0x18 # define EVP_CTRL_TLS1_1_MULTIBLOCK_AAD 0x19 # define EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT 0x1a # define EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT 0x1b # define EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE 0x1c /* RFC 5246 defines additional data to be 13 bytes in length */ # define EVP_AEAD_TLS1_AAD_LEN 13 typedef struct { unsigned char *out; const unsigned char *inp; size_t len; unsigned int interleave; } EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM; /* GCM TLS constants */ /* Length of fixed part of IV derived from PRF */ # define EVP_GCM_TLS_FIXED_IV_LEN 4 /* Length of explicit part of IV part of TLS records */ # define EVP_GCM_TLS_EXPLICIT_IV_LEN 8 /* Length of tag for TLS */ # define EVP_GCM_TLS_TAG_LEN 16 typedef struct evp_cipher_info_st { const EVP_CIPHER *cipher; unsigned char iv[EVP_MAX_IV_LENGTH]; } EVP_CIPHER_INFO; struct evp_cipher_ctx_st { const EVP_CIPHER *cipher; ENGINE *engine; /* functional reference if 'cipher' is * ENGINE-provided */ int encrypt; /* encrypt or decrypt */ int buf_len; /* number we have left */ unsigned char oiv[EVP_MAX_IV_LENGTH]; /* original iv */ unsigned char iv[EVP_MAX_IV_LENGTH]; /* working iv */ unsigned char buf[EVP_MAX_BLOCK_LENGTH]; /* saved partial block */ int num; /* used by cfb/ofb/ctr mode */ void *app_data; /* application stuff */ int key_len; /* May change for variable length cipher */ unsigned long flags; /* Various flags */ void *cipher_data; /* per EVP data */ int final_used; int block_mask; unsigned char final[EVP_MAX_BLOCK_LENGTH]; /* possible final block */ } /* EVP_CIPHER_CTX */ ; typedef struct evp_Encode_Ctx_st { /* number saved in a partial encode/decode */ int num; /* * The length is either the output line length (in input bytes) or the * shortest input line length that is ok. Once decoding begins, the * length is adjusted up each time a longer line is decoded */ int length; /* data to encode */ unsigned char enc_data[80]; /* number read on current line */ int line_num; int expect_nl; } EVP_ENCODE_CTX; /* Password based encryption function */ typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de); # ifndef OPENSSL_NO_RSA # define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ (char *)(rsa)) # endif # ifndef OPENSSL_NO_DSA # define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ (char *)(dsa)) # endif # ifndef OPENSSL_NO_DH # define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\ (char *)(dh)) # endif # ifndef OPENSSL_NO_EC # define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\ (char *)(eckey)) # endif /* Add some extra combinations */ # define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a)) # define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a)) # define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) # define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) int EVP_MD_type(const EVP_MD *md); # define EVP_MD_nid(e) EVP_MD_type(e) # define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e)) int EVP_MD_pkey_type(const EVP_MD *md); int EVP_MD_size(const EVP_MD *md); int EVP_MD_block_size(const EVP_MD *md); unsigned long EVP_MD_flags(const EVP_MD *md); const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); # define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) # define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e)) # define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e)) int EVP_CIPHER_nid(const EVP_CIPHER *cipher); # define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e)) int EVP_CIPHER_block_size(const EVP_CIPHER *cipher); int EVP_CIPHER_key_length(const EVP_CIPHER *cipher); int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher); unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher); # define EVP_CIPHER_mode(e) (EVP_CIPHER_flags(e) & EVP_CIPH_MODE) const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx); int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx); int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx); int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in); void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx); void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data); # define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) unsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx); # define EVP_CIPHER_CTX_mode(e) (EVP_CIPHER_CTX_flags(e) & EVP_CIPH_MODE) # define EVP_ENCODE_LENGTH(l) (((l+2)/3*4)+(l/48+1)*2+80) # define EVP_DECODE_LENGTH(l) ((l+3)/4*3+80) # define EVP_SignInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) # define EVP_SignInit(a,b) EVP_DigestInit(a,b) # define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) # define EVP_VerifyInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) # define EVP_VerifyInit(a,b) EVP_DigestInit(a,b) # define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) # define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e) # define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e) # define EVP_DigestSignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) # define EVP_DigestVerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) # ifdef CONST_STRICT void BIO_set_md(BIO *, const EVP_MD *md); # else # define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)md) # endif # define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)mdp) # define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(char *)mdcp) # define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0,(char *)mdcp) # define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) # define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(char *)c_pp) int EVP_Cipher(EVP_CIPHER_CTX *c, unsigned char *out, const unsigned char *in, unsigned int inl); # define EVP_add_cipher_alias(n,alias) \ OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n)) # define EVP_add_digest_alias(n,alias) \ OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n)) # define EVP_delete_cipher_alias(alias) \ OBJ_NAME_remove(alias,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS); # define EVP_delete_digest_alias(alias) \ OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS); void EVP_MD_CTX_init(EVP_MD_CTX *ctx); int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx); EVP_MD_CTX *EVP_MD_CTX_create(void); void EVP_MD_CTX_destroy(EVP_MD_CTX *ctx); int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt); int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); int EVP_Digest(const void *data, size_t count, unsigned char *md, unsigned int *size, const EVP_MD *type, ENGINE *impl); int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in); int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); int EVP_read_pw_string(char *buf, int length, const char *prompt, int verify); int EVP_read_pw_string_min(char *buf, int minlen, int maxlen, const char *prompt, int verify); void EVP_set_pw_prompt(const char *prompt); char *EVP_get_pw_prompt(void); int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, const unsigned char *salt, const unsigned char *data, int datal, int count, unsigned char *key, unsigned char *iv); void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags); void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags); int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags); int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const unsigned char *key, const unsigned char *iv); int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const unsigned char *key, const unsigned char *iv); int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, const unsigned char *key, const unsigned char *iv, int enc); int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv, int enc); int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, EVP_PKEY *pkey); int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, unsigned int siglen, EVP_PKEY *pkey); int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen); int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, size_t siglen); int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, const unsigned char *ek, int ekl, const unsigned char *iv, EVP_PKEY *priv); int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char **ek, int *ekl, unsigned char *iv, EVP_PKEY **pubk, int npubk); int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n); void EVP_DecodeInit(EVP_ENCODE_CTX *ctx); int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl); int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a); int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a); EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a); int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad); int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); # ifndef OPENSSL_NO_BIO BIO_METHOD *BIO_f_md(void); BIO_METHOD *BIO_f_base64(void); BIO_METHOD *BIO_f_cipher(void); BIO_METHOD *BIO_f_reliable(void); void BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k, const unsigned char *i, int enc); # endif const EVP_MD *EVP_md_null(void); # ifndef OPENSSL_NO_MD2 const EVP_MD *EVP_md2(void); # endif # ifndef OPENSSL_NO_MD4 const EVP_MD *EVP_md4(void); # endif # ifndef OPENSSL_NO_MD5 const EVP_MD *EVP_md5(void); # endif # ifndef OPENSSL_NO_SHA const EVP_MD *EVP_sha(void); const EVP_MD *EVP_sha1(void); const EVP_MD *EVP_dss(void); const EVP_MD *EVP_dss1(void); const EVP_MD *EVP_ecdsa(void); # endif # ifndef OPENSSL_NO_SHA256 const EVP_MD *EVP_sha224(void); const EVP_MD *EVP_sha256(void); # endif # ifndef OPENSSL_NO_SHA512 const EVP_MD *EVP_sha384(void); const EVP_MD *EVP_sha512(void); # endif # ifndef OPENSSL_NO_MDC2 const EVP_MD *EVP_mdc2(void); # endif # ifndef OPENSSL_NO_RIPEMD const EVP_MD *EVP_ripemd160(void); # endif # ifndef OPENSSL_NO_WHIRLPOOL const EVP_MD *EVP_whirlpool(void); # endif const EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */ # ifndef OPENSSL_NO_DES const EVP_CIPHER *EVP_des_ecb(void); const EVP_CIPHER *EVP_des_ede(void); const EVP_CIPHER *EVP_des_ede3(void); const EVP_CIPHER *EVP_des_ede_ecb(void); const EVP_CIPHER *EVP_des_ede3_ecb(void); const EVP_CIPHER *EVP_des_cfb64(void); # define EVP_des_cfb EVP_des_cfb64 const EVP_CIPHER *EVP_des_cfb1(void); const EVP_CIPHER *EVP_des_cfb8(void); const EVP_CIPHER *EVP_des_ede_cfb64(void); # define EVP_des_ede_cfb EVP_des_ede_cfb64 # if 0 const EVP_CIPHER *EVP_des_ede_cfb1(void); const EVP_CIPHER *EVP_des_ede_cfb8(void); # endif const EVP_CIPHER *EVP_des_ede3_cfb64(void); # define EVP_des_ede3_cfb EVP_des_ede3_cfb64 const EVP_CIPHER *EVP_des_ede3_cfb1(void); const EVP_CIPHER *EVP_des_ede3_cfb8(void); const EVP_CIPHER *EVP_des_ofb(void); const EVP_CIPHER *EVP_des_ede_ofb(void); const EVP_CIPHER *EVP_des_ede3_ofb(void); const EVP_CIPHER *EVP_des_cbc(void); const EVP_CIPHER *EVP_des_ede_cbc(void); const EVP_CIPHER *EVP_des_ede3_cbc(void); const EVP_CIPHER *EVP_desx_cbc(void); const EVP_CIPHER *EVP_des_ede3_wrap(void); /* * This should now be supported through the dev_crypto ENGINE. But also, why * are rc4 and md5 declarations made here inside a "NO_DES" precompiler * branch? */ # if 0 # ifdef OPENSSL_OPENBSD_DEV_CRYPTO const EVP_CIPHER *EVP_dev_crypto_des_ede3_cbc(void); const EVP_CIPHER *EVP_dev_crypto_rc4(void); const EVP_MD *EVP_dev_crypto_md5(void); # endif # endif # endif # ifndef OPENSSL_NO_RC4 const EVP_CIPHER *EVP_rc4(void); const EVP_CIPHER *EVP_rc4_40(void); # ifndef OPENSSL_NO_MD5 const EVP_CIPHER *EVP_rc4_hmac_md5(void); # endif # endif # ifndef OPENSSL_NO_IDEA const EVP_CIPHER *EVP_idea_ecb(void); const EVP_CIPHER *EVP_idea_cfb64(void); # define EVP_idea_cfb EVP_idea_cfb64 const EVP_CIPHER *EVP_idea_ofb(void); const EVP_CIPHER *EVP_idea_cbc(void); # endif # ifndef OPENSSL_NO_RC2 const EVP_CIPHER *EVP_rc2_ecb(void); const EVP_CIPHER *EVP_rc2_cbc(void); const EVP_CIPHER *EVP_rc2_40_cbc(void); const EVP_CIPHER *EVP_rc2_64_cbc(void); const EVP_CIPHER *EVP_rc2_cfb64(void); # define EVP_rc2_cfb EVP_rc2_cfb64 const EVP_CIPHER *EVP_rc2_ofb(void); # endif # ifndef OPENSSL_NO_BF const EVP_CIPHER *EVP_bf_ecb(void); const EVP_CIPHER *EVP_bf_cbc(void); const EVP_CIPHER *EVP_bf_cfb64(void); # define EVP_bf_cfb EVP_bf_cfb64 const EVP_CIPHER *EVP_bf_ofb(void); # endif # ifndef OPENSSL_NO_CAST const EVP_CIPHER *EVP_cast5_ecb(void); const EVP_CIPHER *EVP_cast5_cbc(void); const EVP_CIPHER *EVP_cast5_cfb64(void); # define EVP_cast5_cfb EVP_cast5_cfb64 const EVP_CIPHER *EVP_cast5_ofb(void); # endif # ifndef OPENSSL_NO_RC5 const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void); const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void); const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void); # define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64 const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void); # endif # ifndef OPENSSL_NO_AES const EVP_CIPHER *EVP_aes_128_ecb(void); const EVP_CIPHER *EVP_aes_128_cbc(void); const EVP_CIPHER *EVP_aes_128_cfb1(void); const EVP_CIPHER *EVP_aes_128_cfb8(void); const EVP_CIPHER *EVP_aes_128_cfb128(void); # define EVP_aes_128_cfb EVP_aes_128_cfb128 const EVP_CIPHER *EVP_aes_128_ofb(void); const EVP_CIPHER *EVP_aes_128_ctr(void); const EVP_CIPHER *EVP_aes_128_ccm(void); const EVP_CIPHER *EVP_aes_128_gcm(void); const EVP_CIPHER *EVP_aes_128_xts(void); const EVP_CIPHER *EVP_aes_128_wrap(void); const EVP_CIPHER *EVP_aes_192_ecb(void); const EVP_CIPHER *EVP_aes_192_cbc(void); const EVP_CIPHER *EVP_aes_192_cfb1(void); const EVP_CIPHER *EVP_aes_192_cfb8(void); const EVP_CIPHER *EVP_aes_192_cfb128(void); # define EVP_aes_192_cfb EVP_aes_192_cfb128 const EVP_CIPHER *EVP_aes_192_ofb(void); const EVP_CIPHER *EVP_aes_192_ctr(void); const EVP_CIPHER *EVP_aes_192_ccm(void); const EVP_CIPHER *EVP_aes_192_gcm(void); const EVP_CIPHER *EVP_aes_192_wrap(void); const EVP_CIPHER *EVP_aes_256_ecb(void); const EVP_CIPHER *EVP_aes_256_cbc(void); const EVP_CIPHER *EVP_aes_256_cfb1(void); const EVP_CIPHER *EVP_aes_256_cfb8(void); const EVP_CIPHER *EVP_aes_256_cfb128(void); # define EVP_aes_256_cfb EVP_aes_256_cfb128 const EVP_CIPHER *EVP_aes_256_ofb(void); const EVP_CIPHER *EVP_aes_256_ctr(void); const EVP_CIPHER *EVP_aes_256_ccm(void); const EVP_CIPHER *EVP_aes_256_gcm(void); const EVP_CIPHER *EVP_aes_256_xts(void); const EVP_CIPHER *EVP_aes_256_wrap(void); # if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA1) const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void); const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void); # endif # ifndef OPENSSL_NO_SHA256 const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void); const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void); # endif # endif # ifndef OPENSSL_NO_CAMELLIA const EVP_CIPHER *EVP_camellia_128_ecb(void); const EVP_CIPHER *EVP_camellia_128_cbc(void); const EVP_CIPHER *EVP_camellia_128_cfb1(void); const EVP_CIPHER *EVP_camellia_128_cfb8(void); const EVP_CIPHER *EVP_camellia_128_cfb128(void); # define EVP_camellia_128_cfb EVP_camellia_128_cfb128 const EVP_CIPHER *EVP_camellia_128_ofb(void); const EVP_CIPHER *EVP_camellia_192_ecb(void); const EVP_CIPHER *EVP_camellia_192_cbc(void); const EVP_CIPHER *EVP_camellia_192_cfb1(void); const EVP_CIPHER *EVP_camellia_192_cfb8(void); const EVP_CIPHER *EVP_camellia_192_cfb128(void); # define EVP_camellia_192_cfb EVP_camellia_192_cfb128 const EVP_CIPHER *EVP_camellia_192_ofb(void); const EVP_CIPHER *EVP_camellia_256_ecb(void); const EVP_CIPHER *EVP_camellia_256_cbc(void); const EVP_CIPHER *EVP_camellia_256_cfb1(void); const EVP_CIPHER *EVP_camellia_256_cfb8(void); const EVP_CIPHER *EVP_camellia_256_cfb128(void); # define EVP_camellia_256_cfb EVP_camellia_256_cfb128 const EVP_CIPHER *EVP_camellia_256_ofb(void); # endif # ifndef OPENSSL_NO_SEED const EVP_CIPHER *EVP_seed_ecb(void); const EVP_CIPHER *EVP_seed_cbc(void); const EVP_CIPHER *EVP_seed_cfb128(void); # define EVP_seed_cfb EVP_seed_cfb128 const EVP_CIPHER *EVP_seed_ofb(void); # endif void OPENSSL_add_all_algorithms_noconf(void); void OPENSSL_add_all_algorithms_conf(void); # ifdef OPENSSL_LOAD_CONF # define OpenSSL_add_all_algorithms() \ OPENSSL_add_all_algorithms_conf() # else # define OpenSSL_add_all_algorithms() \ OPENSSL_add_all_algorithms_noconf() # endif void OpenSSL_add_all_ciphers(void); void OpenSSL_add_all_digests(void); # define SSLeay_add_all_algorithms() OpenSSL_add_all_algorithms() # define SSLeay_add_all_ciphers() OpenSSL_add_all_ciphers() # define SSLeay_add_all_digests() OpenSSL_add_all_digests() int EVP_add_cipher(const EVP_CIPHER *cipher); int EVP_add_digest(const EVP_MD *digest); const EVP_CIPHER *EVP_get_cipherbyname(const char *name); const EVP_MD *EVP_get_digestbyname(const char *name); void EVP_cleanup(void); void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph, const char *from, const char *to, void *x), void *arg); void EVP_CIPHER_do_all_sorted(void (*fn) (const EVP_CIPHER *ciph, const char *from, const char *to, void *x), void *arg); void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph, const char *from, const char *to, void *x), void *arg); void EVP_MD_do_all_sorted(void (*fn) (const EVP_MD *ciph, const char *from, const char *to, void *x), void *arg); int EVP_PKEY_decrypt_old(unsigned char *dec_key, const unsigned char *enc_key, int enc_key_len, EVP_PKEY *private_key); int EVP_PKEY_encrypt_old(unsigned char *enc_key, const unsigned char *key, int key_len, EVP_PKEY *pub_key); int EVP_PKEY_type(int type); int EVP_PKEY_id(const EVP_PKEY *pkey); int EVP_PKEY_base_id(const EVP_PKEY *pkey); int EVP_PKEY_bits(EVP_PKEY *pkey); int EVP_PKEY_size(EVP_PKEY *pkey); int EVP_PKEY_set_type(EVP_PKEY *pkey, int type); int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len); int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key); void *EVP_PKEY_get0(EVP_PKEY *pkey); # ifndef OPENSSL_NO_RSA struct rsa_st; int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); # endif # ifndef OPENSSL_NO_DSA struct dsa_st; int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key); struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); # endif # ifndef OPENSSL_NO_DH struct dh_st; int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); # endif # ifndef OPENSSL_NO_EC struct ec_key_st; int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key); struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); # endif EVP_PKEY *EVP_PKEY_new(void); void EVP_PKEY_free(EVP_PKEY *pkey); EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp, long length); int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, long length); EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, long length); int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode); int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx); int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx); int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx); int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid); int EVP_CIPHER_type(const EVP_CIPHER *ctx); /* calls methods */ int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); /* These are used by EVP_CIPHER methods */ int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); /* PKCS5 password based encryption */ int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de); int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, const unsigned char *salt, int saltlen, int iter, int keylen, unsigned char *out); int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, const unsigned char *salt, int saltlen, int iter, const EVP_MD *digest, int keylen, unsigned char *out); int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de); void PKCS5_PBE_add(void); int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de); /* PBE type */ /* Can appear as the outermost AlgorithmIdentifier */ # define EVP_PBE_TYPE_OUTER 0x0 /* Is an PRF type OID */ # define EVP_PBE_TYPE_PRF 0x1 int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, int md_nid, EVP_PBE_KEYGEN *keygen); int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md, EVP_PBE_KEYGEN *keygen); int EVP_PBE_find(int type, int pbe_nid, int *pcnid, int *pmnid, EVP_PBE_KEYGEN **pkeygen); void EVP_PBE_cleanup(void); # define ASN1_PKEY_ALIAS 0x1 # define ASN1_PKEY_DYNAMIC 0x2 # define ASN1_PKEY_SIGPARAM_NULL 0x4 # define ASN1_PKEY_CTRL_PKCS7_SIGN 0x1 # define ASN1_PKEY_CTRL_PKCS7_ENCRYPT 0x2 # define ASN1_PKEY_CTRL_DEFAULT_MD_NID 0x3 # define ASN1_PKEY_CTRL_CMS_SIGN 0x5 # define ASN1_PKEY_CTRL_CMS_ENVELOPE 0x7 # define ASN1_PKEY_CTRL_CMS_RI_TYPE 0x8 int EVP_PKEY_asn1_get_count(void); const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx); const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type); const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe, const char *str, int len); int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth); int EVP_PKEY_asn1_add_alias(int to, int from); int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id, int *ppkey_flags, const char **pinfo, const char **ppem_str, const EVP_PKEY_ASN1_METHOD *ameth); const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(EVP_PKEY *pkey); EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags, const char *pem_str, const char *info); void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, const EVP_PKEY_ASN1_METHOD *src); void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth); void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth, int (*pub_decode) (EVP_PKEY *pk, X509_PUBKEY *pub), int (*pub_encode) (X509_PUBKEY *pub, const EVP_PKEY *pk), int (*pub_cmp) (const EVP_PKEY *a, const EVP_PKEY *b), int (*pub_print) (BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx), int (*pkey_size) (const EVP_PKEY *pk), int (*pkey_bits) (const EVP_PKEY *pk)); void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth, int (*priv_decode) (EVP_PKEY *pk, PKCS8_PRIV_KEY_INFO *p8inf), int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk), int (*priv_print) (BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx)); void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth, int (*param_decode) (EVP_PKEY *pkey, const unsigned char **pder, int derlen), int (*param_encode) (const EVP_PKEY *pkey, unsigned char **pder), int (*param_missing) (const EVP_PKEY *pk), int (*param_copy) (EVP_PKEY *to, const EVP_PKEY *from), int (*param_cmp) (const EVP_PKEY *a, const EVP_PKEY *b), int (*param_print) (BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx)); void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth, void (*pkey_free) (EVP_PKEY *pkey)); void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, int (*pkey_ctrl) (EVP_PKEY *pkey, int op, long arg1, void *arg2)); void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, int (*item_verify) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, X509_ALGOR *a, ASN1_BIT_STRING *sig, EVP_PKEY *pkey), int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, X509_ALGOR *alg1, X509_ALGOR *alg2, ASN1_BIT_STRING *sig)); # define EVP_PKEY_OP_UNDEFINED 0 # define EVP_PKEY_OP_PARAMGEN (1<<1) # define EVP_PKEY_OP_KEYGEN (1<<2) # define EVP_PKEY_OP_SIGN (1<<3) # define EVP_PKEY_OP_VERIFY (1<<4) # define EVP_PKEY_OP_VERIFYRECOVER (1<<5) # define EVP_PKEY_OP_SIGNCTX (1<<6) # define EVP_PKEY_OP_VERIFYCTX (1<<7) # define EVP_PKEY_OP_ENCRYPT (1<<8) # define EVP_PKEY_OP_DECRYPT (1<<9) # define EVP_PKEY_OP_DERIVE (1<<10) # define EVP_PKEY_OP_TYPE_SIG \ (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \ | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX) # define EVP_PKEY_OP_TYPE_CRYPT \ (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT) # define EVP_PKEY_OP_TYPE_NOGEN \ (EVP_PKEY_OP_SIG | EVP_PKEY_OP_CRYPT | EVP_PKEY_OP_DERIVE) # define EVP_PKEY_OP_TYPE_GEN \ (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) # define EVP_PKEY_CTX_set_signature_md(ctx, md) \ EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ EVP_PKEY_CTRL_MD, 0, (void *)md) # define EVP_PKEY_CTX_get_signature_md(ctx, pmd) \ EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ EVP_PKEY_CTRL_GET_MD, 0, (void *)pmd) # define EVP_PKEY_CTRL_MD 1 # define EVP_PKEY_CTRL_PEER_KEY 2 # define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 # define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 # define EVP_PKEY_CTRL_PKCS7_SIGN 5 # define EVP_PKEY_CTRL_SET_MAC_KEY 6 # define EVP_PKEY_CTRL_DIGESTINIT 7 /* Used by GOST key encryption in TLS */ # define EVP_PKEY_CTRL_SET_IV 8 # define EVP_PKEY_CTRL_CMS_ENCRYPT 9 # define EVP_PKEY_CTRL_CMS_DECRYPT 10 # define EVP_PKEY_CTRL_CMS_SIGN 11 # define EVP_PKEY_CTRL_CIPHER 12 # define EVP_PKEY_CTRL_GET_MD 13 # define EVP_PKEY_ALG_CTRL 0x1000 # define EVP_PKEY_FLAG_AUTOARGLEN 2 /* * Method handles all operations: don't assume any digest related defaults. */ # define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4 const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, const EVP_PKEY_METHOD *meth); void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src); void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx); void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, int cmd, int p1, void *p2); int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, const char *value); int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx); void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen); EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, const unsigned char *key, int keylen); void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data); void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx); EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx); EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, const unsigned char *tbs, size_t tbslen); int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, const unsigned char *tbs, size_t tbslen); int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, unsigned char *rout, size_t *routlen, const unsigned char *sig, size_t siglen); int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen); int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen); int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer); int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); typedef int EVP_PKEY_gen_cb (EVP_PKEY_CTX *ctx); int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, int (*init) (EVP_PKEY_CTX *ctx)); void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, int (*copy) (EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src)); void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, void (*cleanup) (EVP_PKEY_CTX *ctx)); void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth, int (*paramgen_init) (EVP_PKEY_CTX *ctx), int (*paramgen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth, int (*keygen_init) (EVP_PKEY_CTX *ctx), int (*keygen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)); void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth, int (*sign_init) (EVP_PKEY_CTX *ctx), int (*sign) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, const unsigned char *tbs, size_t tbslen)); void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth, int (*verify_init) (EVP_PKEY_CTX *ctx), int (*verify) (EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, const unsigned char *tbs, size_t tbslen)); void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth, int (*verify_recover_init) (EVP_PKEY_CTX *ctx), int (*verify_recover) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, const unsigned char *tbs, size_t tbslen)); void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth, int (*signctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx), int (*signctx) (EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, EVP_MD_CTX *mctx)); void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth, int (*verifyctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx), int (*verifyctx) (EVP_PKEY_CTX *ctx, const unsigned char *sig, int siglen, EVP_MD_CTX *mctx)); void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth, int (*encrypt_init) (EVP_PKEY_CTX *ctx), int (*encryptfn) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen)); void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth, int (*decrypt_init) (EVP_PKEY_CTX *ctx), int (*decrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen)); void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth, int (*derive_init) (EVP_PKEY_CTX *ctx), int (*derive) (EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen)); void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, void *p2), int (*ctrl_str) (EVP_PKEY_CTX *ctx, const char *type, const char *value)); void EVP_add_alg_module(void); /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_EVP_strings(void); /* Error codes for the EVP functions. */ /* Function codes. */ # define EVP_F_AESNI_INIT_KEY 165 # define EVP_F_AESNI_XTS_CIPHER 176 # define EVP_F_AES_INIT_KEY 133 # define EVP_F_AES_T4_INIT_KEY 178 # define EVP_F_AES_XTS 172 # define EVP_F_AES_XTS_CIPHER 175 # define EVP_F_ALG_MODULE_INIT 177 # define EVP_F_CAMELLIA_INIT_KEY 159 # define EVP_F_CMAC_INIT 173 # define EVP_F_CMLL_T4_INIT_KEY 179 # define EVP_F_D2I_PKEY 100 # define EVP_F_DO_SIGVER_INIT 161 # define EVP_F_DSAPKEY2PKCS8 134 # define EVP_F_DSA_PKEY2PKCS8 135 # define EVP_F_ECDSA_PKEY2PKCS8 129 # define EVP_F_ECKEY_PKEY2PKCS8 132 # define EVP_F_EVP_CIPHERINIT_EX 123 # define EVP_F_EVP_CIPHER_CTX_COPY 163 # define EVP_F_EVP_CIPHER_CTX_CTRL 124 # define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 # define EVP_F_EVP_DECRYPTFINAL_EX 101 # define EVP_F_EVP_DIGESTINIT_EX 128 # define EVP_F_EVP_ENCRYPTFINAL_EX 127 # define EVP_F_EVP_MD_CTX_COPY_EX 110 # define EVP_F_EVP_MD_SIZE 162 # define EVP_F_EVP_OPENINIT 102 # define EVP_F_EVP_PBE_ALG_ADD 115 # define EVP_F_EVP_PBE_ALG_ADD_TYPE 160 # define EVP_F_EVP_PBE_CIPHERINIT 116 # define EVP_F_EVP_PKCS82PKEY 111 # define EVP_F_EVP_PKCS82PKEY_BROKEN 136 # define EVP_F_EVP_PKEY2PKCS8_BROKEN 113 # define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 # define EVP_F_EVP_PKEY_CTX_CTRL 137 # define EVP_F_EVP_PKEY_CTX_CTRL_STR 150 # define EVP_F_EVP_PKEY_CTX_DUP 156 # define EVP_F_EVP_PKEY_DECRYPT 104 # define EVP_F_EVP_PKEY_DECRYPT_INIT 138 # define EVP_F_EVP_PKEY_DECRYPT_OLD 151 # define EVP_F_EVP_PKEY_DERIVE 153 # define EVP_F_EVP_PKEY_DERIVE_INIT 154 # define EVP_F_EVP_PKEY_DERIVE_SET_PEER 155 # define EVP_F_EVP_PKEY_ENCRYPT 105 # define EVP_F_EVP_PKEY_ENCRYPT_INIT 139 # define EVP_F_EVP_PKEY_ENCRYPT_OLD 152 # define EVP_F_EVP_PKEY_GET1_DH 119 # define EVP_F_EVP_PKEY_GET1_DSA 120 # define EVP_F_EVP_PKEY_GET1_ECDSA 130 # define EVP_F_EVP_PKEY_GET1_EC_KEY 131 # define EVP_F_EVP_PKEY_GET1_RSA 121 # define EVP_F_EVP_PKEY_KEYGEN 146 # define EVP_F_EVP_PKEY_KEYGEN_INIT 147 # define EVP_F_EVP_PKEY_NEW 106 # define EVP_F_EVP_PKEY_PARAMGEN 148 # define EVP_F_EVP_PKEY_PARAMGEN_INIT 149 # define EVP_F_EVP_PKEY_SIGN 140 # define EVP_F_EVP_PKEY_SIGN_INIT 141 # define EVP_F_EVP_PKEY_VERIFY 142 # define EVP_F_EVP_PKEY_VERIFY_INIT 143 # define EVP_F_EVP_PKEY_VERIFY_RECOVER 144 # define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 145 # define EVP_F_EVP_RIJNDAEL 126 # define EVP_F_EVP_SIGNFINAL 107 # define EVP_F_EVP_VERIFYFINAL 108 # define EVP_F_FIPS_CIPHERINIT 166 # define EVP_F_FIPS_CIPHER_CTX_COPY 170 # define EVP_F_FIPS_CIPHER_CTX_CTRL 167 # define EVP_F_FIPS_CIPHER_CTX_SET_KEY_LENGTH 171 # define EVP_F_FIPS_DIGESTINIT 168 # define EVP_F_FIPS_MD_CTX_COPY 169 # define EVP_F_HMAC_INIT_EX 174 # define EVP_F_INT_CTX_NEW 157 # define EVP_F_PKCS5_PBE_KEYIVGEN 117 # define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118 # define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 164 # define EVP_F_PKCS8_SET_BROKEN 112 # define EVP_F_PKEY_SET_TYPE 158 # define EVP_F_RC2_MAGIC_TO_METH 109 # define EVP_F_RC5_CTRL 125 /* Reason codes. */ # define EVP_R_AES_IV_SETUP_FAILED 162 # define EVP_R_AES_KEY_SETUP_FAILED 143 # define EVP_R_ASN1_LIB 140 # define EVP_R_BAD_BLOCK_LENGTH 136 # define EVP_R_BAD_DECRYPT 100 # define EVP_R_BAD_KEY_LENGTH 137 # define EVP_R_BN_DECODE_ERROR 112 # define EVP_R_BN_PUBKEY_ERROR 113 # define EVP_R_BUFFER_TOO_SMALL 155 # define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157 # define EVP_R_CIPHER_PARAMETER_ERROR 122 # define EVP_R_COMMAND_NOT_SUPPORTED 147 # define EVP_R_CTRL_NOT_IMPLEMENTED 132 # define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133 # define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 # define EVP_R_DECODE_ERROR 114 # define EVP_R_DIFFERENT_KEY_TYPES 101 # define EVP_R_DIFFERENT_PARAMETERS 153 # define EVP_R_DISABLED_FOR_FIPS 163 # define EVP_R_ENCODE_ERROR 115 # define EVP_R_ERROR_LOADING_SECTION 165 # define EVP_R_ERROR_SETTING_FIPS_MODE 166 # define EVP_R_EVP_PBE_CIPHERINIT_ERROR 119 # define EVP_R_EXPECTING_AN_RSA_KEY 127 # define EVP_R_EXPECTING_A_DH_KEY 128 # define EVP_R_EXPECTING_A_DSA_KEY 129 # define EVP_R_EXPECTING_A_ECDSA_KEY 141 # define EVP_R_EXPECTING_A_EC_KEY 142 # define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 # define EVP_R_INITIALIZATION_ERROR 134 # define EVP_R_INPUT_NOT_INITIALIZED 111 # define EVP_R_INVALID_DIGEST 152 # define EVP_R_INVALID_FIPS_MODE 168 # define EVP_R_INVALID_KEY_LENGTH 130 # define EVP_R_INVALID_OPERATION 148 # define EVP_R_IV_TOO_LARGE 102 # define EVP_R_KEYGEN_FAILURE 120 # define EVP_R_MESSAGE_DIGEST_IS_NULL 159 # define EVP_R_METHOD_NOT_SUPPORTED 144 # define EVP_R_MISSING_PARAMETERS 103 # define EVP_R_NO_CIPHER_SET 131 # define EVP_R_NO_DEFAULT_DIGEST 158 # define EVP_R_NO_DIGEST_SET 139 # define EVP_R_NO_DSA_PARAMETERS 116 # define EVP_R_NO_KEY_SET 154 # define EVP_R_NO_OPERATION_SET 149 # define EVP_R_NO_SIGN_FUNCTION_CONFIGURED 104 # define EVP_R_NO_VERIFY_FUNCTION_CONFIGURED 105 # define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 # define EVP_R_OPERATON_NOT_INITIALIZED 151 # define EVP_R_PKCS8_UNKNOWN_BROKEN_TYPE 117 # define EVP_R_PRIVATE_KEY_DECODE_ERROR 145 # define EVP_R_PRIVATE_KEY_ENCODE_ERROR 146 # define EVP_R_PUBLIC_KEY_NOT_RSA 106 # define EVP_R_TOO_LARGE 164 # define EVP_R_UNKNOWN_CIPHER 160 # define EVP_R_UNKNOWN_DIGEST 161 # define EVP_R_UNKNOWN_OPTION 169 # define EVP_R_UNKNOWN_PBE_ALGORITHM 121 # define EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS 135 # define EVP_R_UNSUPPORTED_ALGORITHM 156 # define EVP_R_UNSUPPORTED_CIPHER 107 # define EVP_R_UNSUPPORTED_KEYLENGTH 123 # define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 124 # define EVP_R_UNSUPPORTED_KEY_SIZE 108 # define EVP_R_UNSUPPORTED_PRF 125 # define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118 # define EVP_R_UNSUPPORTED_SALT_TYPE 126 # define EVP_R_WRAP_MODE_NOT_ALLOWED 170 # define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 # define EVP_R_WRONG_PUBLIC_KEY_TYPE 110 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/hmac.h ================================================ /* crypto/hmac/hmac.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_HMAC_H # define HEADER_HMAC_H # include # ifdef OPENSSL_NO_HMAC # error HMAC is disabled. # endif # include # define HMAC_MAX_MD_CBLOCK 128/* largest known is SHA512 */ #ifdef __cplusplus extern "C" { #endif typedef struct hmac_ctx_st { const EVP_MD *md; EVP_MD_CTX md_ctx; EVP_MD_CTX i_ctx; EVP_MD_CTX o_ctx; unsigned int key_length; unsigned char key[HMAC_MAX_MD_CBLOCK]; } HMAC_CTX; # define HMAC_size(e) (EVP_MD_size((e)->md)) void HMAC_CTX_init(HMAC_CTX *ctx); void HMAC_CTX_cleanup(HMAC_CTX *ctx); /* deprecated */ # define HMAC_cleanup(ctx) HMAC_CTX_cleanup(ctx) /* deprecated */ int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, const EVP_MD *md); int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, const EVP_MD *md, ENGINE *impl); int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, size_t len); int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len); unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, const unsigned char *d, size_t n, unsigned char *md, unsigned int *md_len); int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/idea.h ================================================ /* crypto/idea/idea.h */ /* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_IDEA_H # define HEADER_IDEA_H # include /* IDEA_INT, OPENSSL_NO_IDEA */ # ifdef OPENSSL_NO_IDEA # error IDEA is disabled. # endif # define IDEA_ENCRYPT 1 # define IDEA_DECRYPT 0 # define IDEA_BLOCK 8 # define IDEA_KEY_LENGTH 16 #ifdef __cplusplus extern "C" { #endif typedef struct idea_key_st { IDEA_INT data[9][6]; } IDEA_KEY_SCHEDULE; const char *idea_options(void); void idea_ecb_encrypt(const unsigned char *in, unsigned char *out, IDEA_KEY_SCHEDULE *ks); # ifdef OPENSSL_FIPS void private_idea_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); # endif void idea_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); void idea_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk); void idea_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, int enc); void idea_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, int *num, int enc); void idea_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, int *num); void idea_encrypt(unsigned long *in, IDEA_KEY_SCHEDULE *ks); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/krb5_asn.h ================================================ /* krb5_asn.h */ /* * Written by Vern Staats for the OpenSSL project, ** * using ocsp/{*.h,*asn*.c} as a starting point */ /* ==================================================================== * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_KRB5_ASN_H # define HEADER_KRB5_ASN_H /* * #include */ # include #ifdef __cplusplus extern "C" { #endif /* * ASN.1 from Kerberos RFC 1510 */ /*- EncryptedData ::= SEQUENCE { * etype[0] INTEGER, -- EncryptionType * kvno[1] INTEGER OPTIONAL, * cipher[2] OCTET STRING -- ciphertext * } */ typedef struct krb5_encdata_st { ASN1_INTEGER *etype; ASN1_INTEGER *kvno; ASN1_OCTET_STRING *cipher; } KRB5_ENCDATA; DECLARE_STACK_OF(KRB5_ENCDATA) /*- PrincipalName ::= SEQUENCE { * name-type[0] INTEGER, * name-string[1] SEQUENCE OF GeneralString * } */ typedef struct krb5_princname_st { ASN1_INTEGER *nametype; STACK_OF(ASN1_GENERALSTRING) *namestring; } KRB5_PRINCNAME; DECLARE_STACK_OF(KRB5_PRINCNAME) /*- Ticket ::= [APPLICATION 1] SEQUENCE { * tkt-vno[0] INTEGER, * realm[1] Realm, * sname[2] PrincipalName, * enc-part[3] EncryptedData * } */ typedef struct krb5_tktbody_st { ASN1_INTEGER *tktvno; ASN1_GENERALSTRING *realm; KRB5_PRINCNAME *sname; KRB5_ENCDATA *encdata; } KRB5_TKTBODY; typedef STACK_OF(KRB5_TKTBODY) KRB5_TICKET; DECLARE_STACK_OF(KRB5_TKTBODY) /*- AP-REQ ::= [APPLICATION 14] SEQUENCE { * pvno[0] INTEGER, * msg-type[1] INTEGER, * ap-options[2] APOptions, * ticket[3] Ticket, * authenticator[4] EncryptedData * } * * APOptions ::= BIT STRING { * reserved(0), use-session-key(1), mutual-required(2) } */ typedef struct krb5_ap_req_st { ASN1_INTEGER *pvno; ASN1_INTEGER *msgtype; ASN1_BIT_STRING *apoptions; KRB5_TICKET *ticket; KRB5_ENCDATA *authenticator; } KRB5_APREQBODY; typedef STACK_OF(KRB5_APREQBODY) KRB5_APREQ; DECLARE_STACK_OF(KRB5_APREQBODY) /* Authenticator Stuff */ /*- Checksum ::= SEQUENCE { * cksumtype[0] INTEGER, * checksum[1] OCTET STRING * } */ typedef struct krb5_checksum_st { ASN1_INTEGER *ctype; ASN1_OCTET_STRING *checksum; } KRB5_CHECKSUM; DECLARE_STACK_OF(KRB5_CHECKSUM) /*- EncryptionKey ::= SEQUENCE { * keytype[0] INTEGER, * keyvalue[1] OCTET STRING * } */ typedef struct krb5_encryptionkey_st { ASN1_INTEGER *ktype; ASN1_OCTET_STRING *keyvalue; } KRB5_ENCKEY; DECLARE_STACK_OF(KRB5_ENCKEY) /*- AuthorizationData ::= SEQUENCE OF SEQUENCE { * ad-type[0] INTEGER, * ad-data[1] OCTET STRING * } */ typedef struct krb5_authorization_st { ASN1_INTEGER *adtype; ASN1_OCTET_STRING *addata; } KRB5_AUTHDATA; DECLARE_STACK_OF(KRB5_AUTHDATA) /*- -- Unencrypted authenticator * Authenticator ::= [APPLICATION 2] SEQUENCE { * authenticator-vno[0] INTEGER, * crealm[1] Realm, * cname[2] PrincipalName, * cksum[3] Checksum OPTIONAL, * cusec[4] INTEGER, * ctime[5] KerberosTime, * subkey[6] EncryptionKey OPTIONAL, * seq-number[7] INTEGER OPTIONAL, * authorization-data[8] AuthorizationData OPTIONAL * } */ typedef struct krb5_authenticator_st { ASN1_INTEGER *avno; ASN1_GENERALSTRING *crealm; KRB5_PRINCNAME *cname; KRB5_CHECKSUM *cksum; ASN1_INTEGER *cusec; ASN1_GENERALIZEDTIME *ctime; KRB5_ENCKEY *subkey; ASN1_INTEGER *seqnum; KRB5_AUTHDATA *authorization; } KRB5_AUTHENTBODY; typedef STACK_OF(KRB5_AUTHENTBODY) KRB5_AUTHENT; DECLARE_STACK_OF(KRB5_AUTHENTBODY) /*- DECLARE_ASN1_FUNCTIONS(type) = DECLARE_ASN1_FUNCTIONS_name(type, type) = * type *name##_new(void); * void name##_free(type *a); * DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) = * DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) = * type *d2i_##name(type **a, const unsigned char **in, long len); * int i2d_##name(type *a, unsigned char **out); * DECLARE_ASN1_ITEM(itname) = OPENSSL_EXTERN const ASN1_ITEM itname##_it */ DECLARE_ASN1_FUNCTIONS(KRB5_ENCDATA) DECLARE_ASN1_FUNCTIONS(KRB5_PRINCNAME) DECLARE_ASN1_FUNCTIONS(KRB5_TKTBODY) DECLARE_ASN1_FUNCTIONS(KRB5_APREQBODY) DECLARE_ASN1_FUNCTIONS(KRB5_TICKET) DECLARE_ASN1_FUNCTIONS(KRB5_APREQ) DECLARE_ASN1_FUNCTIONS(KRB5_CHECKSUM) DECLARE_ASN1_FUNCTIONS(KRB5_ENCKEY) DECLARE_ASN1_FUNCTIONS(KRB5_AUTHDATA) DECLARE_ASN1_FUNCTIONS(KRB5_AUTHENTBODY) DECLARE_ASN1_FUNCTIONS(KRB5_AUTHENT) /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/kssl.h ================================================ /* ssl/kssl.h */ /* * Written by Vern Staats for the OpenSSL project * 2000. project 2000. */ /* ==================================================================== * Copyright (c) 2000 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* ** 19990701 VRS Started. */ #ifndef KSSL_H # define KSSL_H # include # ifndef OPENSSL_NO_KRB5 # include # include # include # ifdef OPENSSL_SYS_WIN32 /* * These can sometimes get redefined indirectly by krb5 header files after * they get undefed in ossl_typ.h */ # undef X509_NAME # undef X509_EXTENSIONS # undef OCSP_REQUEST # undef OCSP_RESPONSE # endif #ifdef __cplusplus extern "C" { #endif /* * Depending on which KRB5 implementation used, some types from * the other may be missing. Resolve that here and now */ # ifdef KRB5_HEIMDAL typedef unsigned char krb5_octet; # define FAR # else # ifndef FAR # define FAR # endif # endif /*- * Uncomment this to debug kssl problems or * to trace usage of the Kerberos session key * * #define KSSL_DEBUG */ # ifndef KRB5SVC # define KRB5SVC "host" # endif # ifndef KRB5KEYTAB # define KRB5KEYTAB "/etc/krb5.keytab" # endif # ifndef KRB5SENDAUTH # define KRB5SENDAUTH 1 # endif # ifndef KRB5CHECKAUTH # define KRB5CHECKAUTH 1 # endif # ifndef KSSL_CLOCKSKEW # define KSSL_CLOCKSKEW 300; # endif # define KSSL_ERR_MAX 255 typedef struct kssl_err_st { int reason; char text[KSSL_ERR_MAX + 1]; } KSSL_ERR; /*- Context for passing * (1) Kerberos session key to SSL, and * (2) Config data between application and SSL lib */ typedef struct kssl_ctx_st { /* used by: disposition: */ char *service_name; /* C,S default ok (kssl) */ char *service_host; /* C input, REQUIRED */ char *client_princ; /* S output from krb5 ticket */ char *keytab_file; /* S NULL (/etc/krb5.keytab) */ char *cred_cache; /* C NULL (default) */ krb5_enctype enctype; int length; krb5_octet FAR *key; } KSSL_CTX; # define KSSL_CLIENT 1 # define KSSL_SERVER 2 # define KSSL_SERVICE 3 # define KSSL_KEYTAB 4 # define KSSL_CTX_OK 0 # define KSSL_CTX_ERR 1 # define KSSL_NOMEM 2 /* Public (for use by applications that use OpenSSL with Kerberos 5 support */ krb5_error_code kssl_ctx_setstring(KSSL_CTX *kssl_ctx, int which, char *text); KSSL_CTX *kssl_ctx_new(void); KSSL_CTX *kssl_ctx_free(KSSL_CTX *kssl_ctx); void kssl_ctx_show(KSSL_CTX *kssl_ctx); krb5_error_code kssl_ctx_setprinc(KSSL_CTX *kssl_ctx, int which, krb5_data *realm, krb5_data *entity, int nentities); krb5_error_code kssl_cget_tkt(KSSL_CTX *kssl_ctx, krb5_data **enc_tktp, krb5_data *authenp, KSSL_ERR *kssl_err); krb5_error_code kssl_sget_tkt(KSSL_CTX *kssl_ctx, krb5_data *indata, krb5_ticket_times *ttimes, KSSL_ERR *kssl_err); krb5_error_code kssl_ctx_setkey(KSSL_CTX *kssl_ctx, krb5_keyblock *session); void kssl_err_set(KSSL_ERR *kssl_err, int reason, char *text); void kssl_krb5_free_data_contents(krb5_context context, krb5_data *data); krb5_error_code kssl_build_principal_2(krb5_context context, krb5_principal *princ, int rlen, const char *realm, int slen, const char *svc, int hlen, const char *host); krb5_error_code kssl_validate_times(krb5_timestamp atime, krb5_ticket_times *ttimes); krb5_error_code kssl_check_authent(KSSL_CTX *kssl_ctx, krb5_data *authentp, krb5_timestamp *atimep, KSSL_ERR *kssl_err); unsigned char *kssl_skip_confound(krb5_enctype enctype, unsigned char *authn); void SSL_set0_kssl_ctx(SSL *s, KSSL_CTX *kctx); KSSL_CTX *SSL_get0_kssl_ctx(SSL *s); char *kssl_ctx_get0_client_princ(KSSL_CTX *kctx); #ifdef __cplusplus } #endif # endif /* OPENSSL_NO_KRB5 */ #endif /* KSSL_H */ ================================================ FILE: 3rParty/FFmpeg/include/openssl/lhash.h ================================================ /* crypto/lhash/lhash.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* * Header for dynamic hash table routines Author - Eric Young */ #ifndef HEADER_LHASH_H # define HEADER_LHASH_H # include # ifndef OPENSSL_NO_FP_API # include # endif # ifndef OPENSSL_NO_BIO # include # endif #ifdef __cplusplus extern "C" { #endif typedef struct lhash_node_st { void *data; struct lhash_node_st *next; # ifndef OPENSSL_NO_HASH_COMP unsigned long hash; # endif } LHASH_NODE; typedef int (*LHASH_COMP_FN_TYPE) (const void *, const void *); typedef unsigned long (*LHASH_HASH_FN_TYPE) (const void *); typedef void (*LHASH_DOALL_FN_TYPE) (void *); typedef void (*LHASH_DOALL_ARG_FN_TYPE) (void *, void *); /* * Macros for declaring and implementing type-safe wrappers for LHASH * callbacks. This way, callbacks can be provided to LHASH structures without * function pointer casting and the macro-defined callbacks provide * per-variable casting before deferring to the underlying type-specific * callbacks. NB: It is possible to place a "static" in front of both the * DECLARE and IMPLEMENT macros if the functions are strictly internal. */ /* First: "hash" functions */ # define DECLARE_LHASH_HASH_FN(name, o_type) \ unsigned long name##_LHASH_HASH(const void *); # define IMPLEMENT_LHASH_HASH_FN(name, o_type) \ unsigned long name##_LHASH_HASH(const void *arg) { \ const o_type *a = arg; \ return name##_hash(a); } # define LHASH_HASH_FN(name) name##_LHASH_HASH /* Second: "compare" functions */ # define DECLARE_LHASH_COMP_FN(name, o_type) \ int name##_LHASH_COMP(const void *, const void *); # define IMPLEMENT_LHASH_COMP_FN(name, o_type) \ int name##_LHASH_COMP(const void *arg1, const void *arg2) { \ const o_type *a = arg1; \ const o_type *b = arg2; \ return name##_cmp(a,b); } # define LHASH_COMP_FN(name) name##_LHASH_COMP /* Third: "doall" functions */ # define DECLARE_LHASH_DOALL_FN(name, o_type) \ void name##_LHASH_DOALL(void *); # define IMPLEMENT_LHASH_DOALL_FN(name, o_type) \ void name##_LHASH_DOALL(void *arg) { \ o_type *a = arg; \ name##_doall(a); } # define LHASH_DOALL_FN(name) name##_LHASH_DOALL /* Fourth: "doall_arg" functions */ # define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ void name##_LHASH_DOALL_ARG(void *, void *); # define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \ o_type *a = arg1; \ a_type *b = arg2; \ name##_doall_arg(a, b); } # define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG typedef struct lhash_st { LHASH_NODE **b; LHASH_COMP_FN_TYPE comp; LHASH_HASH_FN_TYPE hash; unsigned int num_nodes; unsigned int num_alloc_nodes; unsigned int p; unsigned int pmax; unsigned long up_load; /* load times 256 */ unsigned long down_load; /* load times 256 */ unsigned long num_items; unsigned long num_expands; unsigned long num_expand_reallocs; unsigned long num_contracts; unsigned long num_contract_reallocs; unsigned long num_hash_calls; unsigned long num_comp_calls; unsigned long num_insert; unsigned long num_replace; unsigned long num_delete; unsigned long num_no_delete; unsigned long num_retrieve; unsigned long num_retrieve_miss; unsigned long num_hash_comps; int error; } _LHASH; /* Do not use _LHASH directly, use LHASH_OF * and friends */ # define LH_LOAD_MULT 256 /* * Indicates a malloc() error in the last call, this is only bad in * lh_insert(). */ # define lh_error(lh) ((lh)->error) _LHASH *lh_new(LHASH_HASH_FN_TYPE h, LHASH_COMP_FN_TYPE c); void lh_free(_LHASH *lh); void *lh_insert(_LHASH *lh, void *data); void *lh_delete(_LHASH *lh, const void *data); void *lh_retrieve(_LHASH *lh, const void *data); void lh_doall(_LHASH *lh, LHASH_DOALL_FN_TYPE func); void lh_doall_arg(_LHASH *lh, LHASH_DOALL_ARG_FN_TYPE func, void *arg); unsigned long lh_strhash(const char *c); unsigned long lh_num_items(const _LHASH *lh); # ifndef OPENSSL_NO_FP_API void lh_stats(const _LHASH *lh, FILE *out); void lh_node_stats(const _LHASH *lh, FILE *out); void lh_node_usage_stats(const _LHASH *lh, FILE *out); # endif # ifndef OPENSSL_NO_BIO void lh_stats_bio(const _LHASH *lh, BIO *out); void lh_node_stats_bio(const _LHASH *lh, BIO *out); void lh_node_usage_stats_bio(const _LHASH *lh, BIO *out); # endif /* Type checking... */ # define LHASH_OF(type) struct lhash_st_##type # define DECLARE_LHASH_OF(type) LHASH_OF(type) { int dummy; } # define CHECKED_LHASH_OF(type,lh) \ ((_LHASH *)CHECKED_PTR_OF(LHASH_OF(type),lh)) /* Define wrapper functions. */ # define LHM_lh_new(type, name) \ ((LHASH_OF(type) *)lh_new(LHASH_HASH_FN(name), LHASH_COMP_FN(name))) # define LHM_lh_error(type, lh) \ lh_error(CHECKED_LHASH_OF(type,lh)) # define LHM_lh_insert(type, lh, inst) \ ((type *)lh_insert(CHECKED_LHASH_OF(type, lh), \ CHECKED_PTR_OF(type, inst))) # define LHM_lh_retrieve(type, lh, inst) \ ((type *)lh_retrieve(CHECKED_LHASH_OF(type, lh), \ CHECKED_PTR_OF(type, inst))) # define LHM_lh_delete(type, lh, inst) \ ((type *)lh_delete(CHECKED_LHASH_OF(type, lh), \ CHECKED_PTR_OF(type, inst))) # define LHM_lh_doall(type, lh,fn) lh_doall(CHECKED_LHASH_OF(type, lh), fn) # define LHM_lh_doall_arg(type, lh, fn, arg_type, arg) \ lh_doall_arg(CHECKED_LHASH_OF(type, lh), fn, CHECKED_PTR_OF(arg_type, arg)) # define LHM_lh_num_items(type, lh) lh_num_items(CHECKED_LHASH_OF(type, lh)) # define LHM_lh_down_load(type, lh) (CHECKED_LHASH_OF(type, lh)->down_load) # define LHM_lh_node_stats_bio(type, lh, out) \ lh_node_stats_bio(CHECKED_LHASH_OF(type, lh), out) # define LHM_lh_node_usage_stats_bio(type, lh, out) \ lh_node_usage_stats_bio(CHECKED_LHASH_OF(type, lh), out) # define LHM_lh_stats_bio(type, lh, out) \ lh_stats_bio(CHECKED_LHASH_OF(type, lh), out) # define LHM_lh_free(type, lh) lh_free(CHECKED_LHASH_OF(type, lh)) DECLARE_LHASH_OF(OPENSSL_STRING); DECLARE_LHASH_OF(OPENSSL_CSTRING); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/md4.h ================================================ /* crypto/md4/md4.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_MD4_H # define HEADER_MD4_H # include # include #ifdef __cplusplus extern "C" { #endif # ifdef OPENSSL_NO_MD4 # error MD4 is disabled. # endif /*- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! MD4_LONG has to be at least 32 bits wide. If it's wider, then ! * ! MD4_LONG_LOG2 has to be defined along. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ # if defined(__LP32__) # define MD4_LONG unsigned long # elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) # define MD4_LONG unsigned long # define MD4_LONG_LOG2 3 /* * _CRAY note. I could declare short, but I have no idea what impact * does it have on performance on none-T3E machines. I could declare * int, but at least on C90 sizeof(int) can be chosen at compile time. * So I've chosen long... * */ # else # define MD4_LONG unsigned int # endif # define MD4_CBLOCK 64 # define MD4_LBLOCK (MD4_CBLOCK/4) # define MD4_DIGEST_LENGTH 16 typedef struct MD4state_st { MD4_LONG A, B, C, D; MD4_LONG Nl, Nh; MD4_LONG data[MD4_LBLOCK]; unsigned int num; } MD4_CTX; # ifdef OPENSSL_FIPS int private_MD4_Init(MD4_CTX *c); # endif int MD4_Init(MD4_CTX *c); int MD4_Update(MD4_CTX *c, const void *data, size_t len); int MD4_Final(unsigned char *md, MD4_CTX *c); unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md); void MD4_Transform(MD4_CTX *c, const unsigned char *b); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/md5.h ================================================ /* crypto/md5/md5.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_MD5_H # define HEADER_MD5_H # include # include #ifdef __cplusplus extern "C" { #endif # ifdef OPENSSL_NO_MD5 # error MD5 is disabled. # endif /* * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! MD5_LONG has to be at least 32 bits wide. If it's wider, then ! * ! MD5_LONG_LOG2 has to be defined along. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ # if defined(__LP32__) # define MD5_LONG unsigned long # elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) # define MD5_LONG unsigned long # define MD5_LONG_LOG2 3 /* * _CRAY note. I could declare short, but I have no idea what impact * does it have on performance on none-T3E machines. I could declare * int, but at least on C90 sizeof(int) can be chosen at compile time. * So I've chosen long... * */ # else # define MD5_LONG unsigned int # endif # define MD5_CBLOCK 64 # define MD5_LBLOCK (MD5_CBLOCK/4) # define MD5_DIGEST_LENGTH 16 typedef struct MD5state_st { MD5_LONG A, B, C, D; MD5_LONG Nl, Nh; MD5_LONG data[MD5_LBLOCK]; unsigned int num; } MD5_CTX; # ifdef OPENSSL_FIPS int private_MD5_Init(MD5_CTX *c); # endif int MD5_Init(MD5_CTX *c); int MD5_Update(MD5_CTX *c, const void *data, size_t len); int MD5_Final(unsigned char *md, MD5_CTX *c); unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md); void MD5_Transform(MD5_CTX *c, const unsigned char *b); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/mdc2.h ================================================ /* crypto/mdc2/mdc2.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_MDC2_H # define HEADER_MDC2_H # include #ifdef __cplusplus extern "C" { #endif # ifdef OPENSSL_NO_MDC2 # error MDC2 is disabled. # endif # define MDC2_BLOCK 8 # define MDC2_DIGEST_LENGTH 16 typedef struct mdc2_ctx_st { unsigned int num; unsigned char data[MDC2_BLOCK]; DES_cblock h, hh; int pad_type; /* either 1 or 2, default 1 */ } MDC2_CTX; # ifdef OPENSSL_FIPS int private_MDC2_Init(MDC2_CTX *c); # endif int MDC2_Init(MDC2_CTX *c); int MDC2_Update(MDC2_CTX *c, const unsigned char *data, size_t len); int MDC2_Final(unsigned char *md, MDC2_CTX *c); unsigned char *MDC2(const unsigned char *d, size_t n, unsigned char *md); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/modes.h ================================================ /* ==================================================================== * Copyright (c) 2008 The OpenSSL Project. All rights reserved. * * Rights for redistribution and usage in source and binary * forms are granted according to the OpenSSL license. */ #include #ifdef __cplusplus extern "C" { #endif typedef void (*block128_f) (const unsigned char in[16], unsigned char out[16], const void *key); typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], int enc); typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out, size_t blocks, const void *key, const unsigned char ivec[16]); typedef void (*ccm128_f) (const unsigned char *in, unsigned char *out, size_t blocks, const void *key, const unsigned char ivec[16], unsigned char cmac[16]); void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], block128_f block); void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], block128_f block); void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], unsigned char ecount_buf[16], unsigned int *num, block128_f block); void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], unsigned char ecount_buf[16], unsigned int *num, ctr128_f ctr); void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], int *num, block128_f block); void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], int *num, int enc, block128_f block); void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out, size_t length, const void *key, unsigned char ivec[16], int *num, int enc, block128_f block); void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out, size_t bits, const void *key, unsigned char ivec[16], int *num, int enc, block128_f block); size_t CRYPTO_cts128_encrypt_block(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], block128_f block); size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], cbc128_f cbc); size_t CRYPTO_cts128_decrypt_block(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], block128_f block); size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], cbc128_f cbc); size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], block128_f block); size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], cbc128_f cbc); size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], block128_f block); size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], cbc128_f cbc); typedef struct gcm128_context GCM128_CONTEXT; GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block); void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block); void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv, size_t len); int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad, size_t len); int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const unsigned char *in, unsigned char *out, size_t len); int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const unsigned char *in, unsigned char *out, size_t len); int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const unsigned char *in, unsigned char *out, size_t len, ctr128_f stream); int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const unsigned char *in, unsigned char *out, size_t len, ctr128_f stream); int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag, size_t len); void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len); void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx); typedef struct ccm128_context CCM128_CONTEXT; void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, unsigned int M, unsigned int L, void *key, block128_f block); int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, const unsigned char *nonce, size_t nlen, size_t mlen); void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, const unsigned char *aad, size_t alen); int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, unsigned char *out, size_t len); int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, unsigned char *out, size_t len); int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, unsigned char *out, size_t len, ccm128_f stream); int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, unsigned char *out, size_t len, ccm128_f stream); size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len); typedef struct xts128_context XTS128_CONTEXT; int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16], const unsigned char *inp, unsigned char *out, size_t len, int enc); size_t CRYPTO_128_wrap(void *key, const unsigned char *iv, unsigned char *out, const unsigned char *in, size_t inlen, block128_f block); size_t CRYPTO_128_unwrap(void *key, const unsigned char *iv, unsigned char *out, const unsigned char *in, size_t inlen, block128_f block); #ifdef __cplusplus } #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/obj_mac.h ================================================ /* crypto/objects/obj_mac.h */ /* * THIS FILE IS GENERATED FROM objects.txt by objects.pl via the following * command: perl objects.pl objects.txt obj_mac.num obj_mac.h */ /* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #define SN_undef "UNDEF" #define LN_undef "undefined" #define NID_undef 0 #define OBJ_undef 0L #define SN_itu_t "ITU-T" #define LN_itu_t "itu-t" #define NID_itu_t 645 #define OBJ_itu_t 0L #define NID_ccitt 404 #define OBJ_ccitt OBJ_itu_t #define SN_iso "ISO" #define LN_iso "iso" #define NID_iso 181 #define OBJ_iso 1L #define SN_joint_iso_itu_t "JOINT-ISO-ITU-T" #define LN_joint_iso_itu_t "joint-iso-itu-t" #define NID_joint_iso_itu_t 646 #define OBJ_joint_iso_itu_t 2L #define NID_joint_iso_ccitt 393 #define OBJ_joint_iso_ccitt OBJ_joint_iso_itu_t #define SN_member_body "member-body" #define LN_member_body "ISO Member Body" #define NID_member_body 182 #define OBJ_member_body OBJ_iso,2L #define SN_identified_organization "identified-organization" #define NID_identified_organization 676 #define OBJ_identified_organization OBJ_iso,3L #define SN_hmac_md5 "HMAC-MD5" #define LN_hmac_md5 "hmac-md5" #define NID_hmac_md5 780 #define OBJ_hmac_md5 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,1L #define SN_hmac_sha1 "HMAC-SHA1" #define LN_hmac_sha1 "hmac-sha1" #define NID_hmac_sha1 781 #define OBJ_hmac_sha1 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,2L #define SN_certicom_arc "certicom-arc" #define NID_certicom_arc 677 #define OBJ_certicom_arc OBJ_identified_organization,132L #define SN_international_organizations "international-organizations" #define LN_international_organizations "International Organizations" #define NID_international_organizations 647 #define OBJ_international_organizations OBJ_joint_iso_itu_t,23L #define SN_wap "wap" #define NID_wap 678 #define OBJ_wap OBJ_international_organizations,43L #define SN_wap_wsg "wap-wsg" #define NID_wap_wsg 679 #define OBJ_wap_wsg OBJ_wap,1L #define SN_selected_attribute_types "selected-attribute-types" #define LN_selected_attribute_types "Selected Attribute Types" #define NID_selected_attribute_types 394 #define OBJ_selected_attribute_types OBJ_joint_iso_itu_t,5L,1L,5L #define SN_clearance "clearance" #define NID_clearance 395 #define OBJ_clearance OBJ_selected_attribute_types,55L #define SN_ISO_US "ISO-US" #define LN_ISO_US "ISO US Member Body" #define NID_ISO_US 183 #define OBJ_ISO_US OBJ_member_body,840L #define SN_X9_57 "X9-57" #define LN_X9_57 "X9.57" #define NID_X9_57 184 #define OBJ_X9_57 OBJ_ISO_US,10040L #define SN_X9cm "X9cm" #define LN_X9cm "X9.57 CM ?" #define NID_X9cm 185 #define OBJ_X9cm OBJ_X9_57,4L #define SN_dsa "DSA" #define LN_dsa "dsaEncryption" #define NID_dsa 116 #define OBJ_dsa OBJ_X9cm,1L #define SN_dsaWithSHA1 "DSA-SHA1" #define LN_dsaWithSHA1 "dsaWithSHA1" #define NID_dsaWithSHA1 113 #define OBJ_dsaWithSHA1 OBJ_X9cm,3L #define SN_ansi_X9_62 "ansi-X9-62" #define LN_ansi_X9_62 "ANSI X9.62" #define NID_ansi_X9_62 405 #define OBJ_ansi_X9_62 OBJ_ISO_US,10045L #define OBJ_X9_62_id_fieldType OBJ_ansi_X9_62,1L #define SN_X9_62_prime_field "prime-field" #define NID_X9_62_prime_field 406 #define OBJ_X9_62_prime_field OBJ_X9_62_id_fieldType,1L #define SN_X9_62_characteristic_two_field "characteristic-two-field" #define NID_X9_62_characteristic_two_field 407 #define OBJ_X9_62_characteristic_two_field OBJ_X9_62_id_fieldType,2L #define SN_X9_62_id_characteristic_two_basis "id-characteristic-two-basis" #define NID_X9_62_id_characteristic_two_basis 680 #define OBJ_X9_62_id_characteristic_two_basis OBJ_X9_62_characteristic_two_field,3L #define SN_X9_62_onBasis "onBasis" #define NID_X9_62_onBasis 681 #define OBJ_X9_62_onBasis OBJ_X9_62_id_characteristic_two_basis,1L #define SN_X9_62_tpBasis "tpBasis" #define NID_X9_62_tpBasis 682 #define OBJ_X9_62_tpBasis OBJ_X9_62_id_characteristic_two_basis,2L #define SN_X9_62_ppBasis "ppBasis" #define NID_X9_62_ppBasis 683 #define OBJ_X9_62_ppBasis OBJ_X9_62_id_characteristic_two_basis,3L #define OBJ_X9_62_id_publicKeyType OBJ_ansi_X9_62,2L #define SN_X9_62_id_ecPublicKey "id-ecPublicKey" #define NID_X9_62_id_ecPublicKey 408 #define OBJ_X9_62_id_ecPublicKey OBJ_X9_62_id_publicKeyType,1L #define OBJ_X9_62_ellipticCurve OBJ_ansi_X9_62,3L #define OBJ_X9_62_c_TwoCurve OBJ_X9_62_ellipticCurve,0L #define SN_X9_62_c2pnb163v1 "c2pnb163v1" #define NID_X9_62_c2pnb163v1 684 #define OBJ_X9_62_c2pnb163v1 OBJ_X9_62_c_TwoCurve,1L #define SN_X9_62_c2pnb163v2 "c2pnb163v2" #define NID_X9_62_c2pnb163v2 685 #define OBJ_X9_62_c2pnb163v2 OBJ_X9_62_c_TwoCurve,2L #define SN_X9_62_c2pnb163v3 "c2pnb163v3" #define NID_X9_62_c2pnb163v3 686 #define OBJ_X9_62_c2pnb163v3 OBJ_X9_62_c_TwoCurve,3L #define SN_X9_62_c2pnb176v1 "c2pnb176v1" #define NID_X9_62_c2pnb176v1 687 #define OBJ_X9_62_c2pnb176v1 OBJ_X9_62_c_TwoCurve,4L #define SN_X9_62_c2tnb191v1 "c2tnb191v1" #define NID_X9_62_c2tnb191v1 688 #define OBJ_X9_62_c2tnb191v1 OBJ_X9_62_c_TwoCurve,5L #define SN_X9_62_c2tnb191v2 "c2tnb191v2" #define NID_X9_62_c2tnb191v2 689 #define OBJ_X9_62_c2tnb191v2 OBJ_X9_62_c_TwoCurve,6L #define SN_X9_62_c2tnb191v3 "c2tnb191v3" #define NID_X9_62_c2tnb191v3 690 #define OBJ_X9_62_c2tnb191v3 OBJ_X9_62_c_TwoCurve,7L #define SN_X9_62_c2onb191v4 "c2onb191v4" #define NID_X9_62_c2onb191v4 691 #define OBJ_X9_62_c2onb191v4 OBJ_X9_62_c_TwoCurve,8L #define SN_X9_62_c2onb191v5 "c2onb191v5" #define NID_X9_62_c2onb191v5 692 #define OBJ_X9_62_c2onb191v5 OBJ_X9_62_c_TwoCurve,9L #define SN_X9_62_c2pnb208w1 "c2pnb208w1" #define NID_X9_62_c2pnb208w1 693 #define OBJ_X9_62_c2pnb208w1 OBJ_X9_62_c_TwoCurve,10L #define SN_X9_62_c2tnb239v1 "c2tnb239v1" #define NID_X9_62_c2tnb239v1 694 #define OBJ_X9_62_c2tnb239v1 OBJ_X9_62_c_TwoCurve,11L #define SN_X9_62_c2tnb239v2 "c2tnb239v2" #define NID_X9_62_c2tnb239v2 695 #define OBJ_X9_62_c2tnb239v2 OBJ_X9_62_c_TwoCurve,12L #define SN_X9_62_c2tnb239v3 "c2tnb239v3" #define NID_X9_62_c2tnb239v3 696 #define OBJ_X9_62_c2tnb239v3 OBJ_X9_62_c_TwoCurve,13L #define SN_X9_62_c2onb239v4 "c2onb239v4" #define NID_X9_62_c2onb239v4 697 #define OBJ_X9_62_c2onb239v4 OBJ_X9_62_c_TwoCurve,14L #define SN_X9_62_c2onb239v5 "c2onb239v5" #define NID_X9_62_c2onb239v5 698 #define OBJ_X9_62_c2onb239v5 OBJ_X9_62_c_TwoCurve,15L #define SN_X9_62_c2pnb272w1 "c2pnb272w1" #define NID_X9_62_c2pnb272w1 699 #define OBJ_X9_62_c2pnb272w1 OBJ_X9_62_c_TwoCurve,16L #define SN_X9_62_c2pnb304w1 "c2pnb304w1" #define NID_X9_62_c2pnb304w1 700 #define OBJ_X9_62_c2pnb304w1 OBJ_X9_62_c_TwoCurve,17L #define SN_X9_62_c2tnb359v1 "c2tnb359v1" #define NID_X9_62_c2tnb359v1 701 #define OBJ_X9_62_c2tnb359v1 OBJ_X9_62_c_TwoCurve,18L #define SN_X9_62_c2pnb368w1 "c2pnb368w1" #define NID_X9_62_c2pnb368w1 702 #define OBJ_X9_62_c2pnb368w1 OBJ_X9_62_c_TwoCurve,19L #define SN_X9_62_c2tnb431r1 "c2tnb431r1" #define NID_X9_62_c2tnb431r1 703 #define OBJ_X9_62_c2tnb431r1 OBJ_X9_62_c_TwoCurve,20L #define OBJ_X9_62_primeCurve OBJ_X9_62_ellipticCurve,1L #define SN_X9_62_prime192v1 "prime192v1" #define NID_X9_62_prime192v1 409 #define OBJ_X9_62_prime192v1 OBJ_X9_62_primeCurve,1L #define SN_X9_62_prime192v2 "prime192v2" #define NID_X9_62_prime192v2 410 #define OBJ_X9_62_prime192v2 OBJ_X9_62_primeCurve,2L #define SN_X9_62_prime192v3 "prime192v3" #define NID_X9_62_prime192v3 411 #define OBJ_X9_62_prime192v3 OBJ_X9_62_primeCurve,3L #define SN_X9_62_prime239v1 "prime239v1" #define NID_X9_62_prime239v1 412 #define OBJ_X9_62_prime239v1 OBJ_X9_62_primeCurve,4L #define SN_X9_62_prime239v2 "prime239v2" #define NID_X9_62_prime239v2 413 #define OBJ_X9_62_prime239v2 OBJ_X9_62_primeCurve,5L #define SN_X9_62_prime239v3 "prime239v3" #define NID_X9_62_prime239v3 414 #define OBJ_X9_62_prime239v3 OBJ_X9_62_primeCurve,6L #define SN_X9_62_prime256v1 "prime256v1" #define NID_X9_62_prime256v1 415 #define OBJ_X9_62_prime256v1 OBJ_X9_62_primeCurve,7L #define OBJ_X9_62_id_ecSigType OBJ_ansi_X9_62,4L #define SN_ecdsa_with_SHA1 "ecdsa-with-SHA1" #define NID_ecdsa_with_SHA1 416 #define OBJ_ecdsa_with_SHA1 OBJ_X9_62_id_ecSigType,1L #define SN_ecdsa_with_Recommended "ecdsa-with-Recommended" #define NID_ecdsa_with_Recommended 791 #define OBJ_ecdsa_with_Recommended OBJ_X9_62_id_ecSigType,2L #define SN_ecdsa_with_Specified "ecdsa-with-Specified" #define NID_ecdsa_with_Specified 792 #define OBJ_ecdsa_with_Specified OBJ_X9_62_id_ecSigType,3L #define SN_ecdsa_with_SHA224 "ecdsa-with-SHA224" #define NID_ecdsa_with_SHA224 793 #define OBJ_ecdsa_with_SHA224 OBJ_ecdsa_with_Specified,1L #define SN_ecdsa_with_SHA256 "ecdsa-with-SHA256" #define NID_ecdsa_with_SHA256 794 #define OBJ_ecdsa_with_SHA256 OBJ_ecdsa_with_Specified,2L #define SN_ecdsa_with_SHA384 "ecdsa-with-SHA384" #define NID_ecdsa_with_SHA384 795 #define OBJ_ecdsa_with_SHA384 OBJ_ecdsa_with_Specified,3L #define SN_ecdsa_with_SHA512 "ecdsa-with-SHA512" #define NID_ecdsa_with_SHA512 796 #define OBJ_ecdsa_with_SHA512 OBJ_ecdsa_with_Specified,4L #define OBJ_secg_ellipticCurve OBJ_certicom_arc,0L #define SN_secp112r1 "secp112r1" #define NID_secp112r1 704 #define OBJ_secp112r1 OBJ_secg_ellipticCurve,6L #define SN_secp112r2 "secp112r2" #define NID_secp112r2 705 #define OBJ_secp112r2 OBJ_secg_ellipticCurve,7L #define SN_secp128r1 "secp128r1" #define NID_secp128r1 706 #define OBJ_secp128r1 OBJ_secg_ellipticCurve,28L #define SN_secp128r2 "secp128r2" #define NID_secp128r2 707 #define OBJ_secp128r2 OBJ_secg_ellipticCurve,29L #define SN_secp160k1 "secp160k1" #define NID_secp160k1 708 #define OBJ_secp160k1 OBJ_secg_ellipticCurve,9L #define SN_secp160r1 "secp160r1" #define NID_secp160r1 709 #define OBJ_secp160r1 OBJ_secg_ellipticCurve,8L #define SN_secp160r2 "secp160r2" #define NID_secp160r2 710 #define OBJ_secp160r2 OBJ_secg_ellipticCurve,30L #define SN_secp192k1 "secp192k1" #define NID_secp192k1 711 #define OBJ_secp192k1 OBJ_secg_ellipticCurve,31L #define SN_secp224k1 "secp224k1" #define NID_secp224k1 712 #define OBJ_secp224k1 OBJ_secg_ellipticCurve,32L #define SN_secp224r1 "secp224r1" #define NID_secp224r1 713 #define OBJ_secp224r1 OBJ_secg_ellipticCurve,33L #define SN_secp256k1 "secp256k1" #define NID_secp256k1 714 #define OBJ_secp256k1 OBJ_secg_ellipticCurve,10L #define SN_secp384r1 "secp384r1" #define NID_secp384r1 715 #define OBJ_secp384r1 OBJ_secg_ellipticCurve,34L #define SN_secp521r1 "secp521r1" #define NID_secp521r1 716 #define OBJ_secp521r1 OBJ_secg_ellipticCurve,35L #define SN_sect113r1 "sect113r1" #define NID_sect113r1 717 #define OBJ_sect113r1 OBJ_secg_ellipticCurve,4L #define SN_sect113r2 "sect113r2" #define NID_sect113r2 718 #define OBJ_sect113r2 OBJ_secg_ellipticCurve,5L #define SN_sect131r1 "sect131r1" #define NID_sect131r1 719 #define OBJ_sect131r1 OBJ_secg_ellipticCurve,22L #define SN_sect131r2 "sect131r2" #define NID_sect131r2 720 #define OBJ_sect131r2 OBJ_secg_ellipticCurve,23L #define SN_sect163k1 "sect163k1" #define NID_sect163k1 721 #define OBJ_sect163k1 OBJ_secg_ellipticCurve,1L #define SN_sect163r1 "sect163r1" #define NID_sect163r1 722 #define OBJ_sect163r1 OBJ_secg_ellipticCurve,2L #define SN_sect163r2 "sect163r2" #define NID_sect163r2 723 #define OBJ_sect163r2 OBJ_secg_ellipticCurve,15L #define SN_sect193r1 "sect193r1" #define NID_sect193r1 724 #define OBJ_sect193r1 OBJ_secg_ellipticCurve,24L #define SN_sect193r2 "sect193r2" #define NID_sect193r2 725 #define OBJ_sect193r2 OBJ_secg_ellipticCurve,25L #define SN_sect233k1 "sect233k1" #define NID_sect233k1 726 #define OBJ_sect233k1 OBJ_secg_ellipticCurve,26L #define SN_sect233r1 "sect233r1" #define NID_sect233r1 727 #define OBJ_sect233r1 OBJ_secg_ellipticCurve,27L #define SN_sect239k1 "sect239k1" #define NID_sect239k1 728 #define OBJ_sect239k1 OBJ_secg_ellipticCurve,3L #define SN_sect283k1 "sect283k1" #define NID_sect283k1 729 #define OBJ_sect283k1 OBJ_secg_ellipticCurve,16L #define SN_sect283r1 "sect283r1" #define NID_sect283r1 730 #define OBJ_sect283r1 OBJ_secg_ellipticCurve,17L #define SN_sect409k1 "sect409k1" #define NID_sect409k1 731 #define OBJ_sect409k1 OBJ_secg_ellipticCurve,36L #define SN_sect409r1 "sect409r1" #define NID_sect409r1 732 #define OBJ_sect409r1 OBJ_secg_ellipticCurve,37L #define SN_sect571k1 "sect571k1" #define NID_sect571k1 733 #define OBJ_sect571k1 OBJ_secg_ellipticCurve,38L #define SN_sect571r1 "sect571r1" #define NID_sect571r1 734 #define OBJ_sect571r1 OBJ_secg_ellipticCurve,39L #define OBJ_wap_wsg_idm_ecid OBJ_wap_wsg,4L #define SN_wap_wsg_idm_ecid_wtls1 "wap-wsg-idm-ecid-wtls1" #define NID_wap_wsg_idm_ecid_wtls1 735 #define OBJ_wap_wsg_idm_ecid_wtls1 OBJ_wap_wsg_idm_ecid,1L #define SN_wap_wsg_idm_ecid_wtls3 "wap-wsg-idm-ecid-wtls3" #define NID_wap_wsg_idm_ecid_wtls3 736 #define OBJ_wap_wsg_idm_ecid_wtls3 OBJ_wap_wsg_idm_ecid,3L #define SN_wap_wsg_idm_ecid_wtls4 "wap-wsg-idm-ecid-wtls4" #define NID_wap_wsg_idm_ecid_wtls4 737 #define OBJ_wap_wsg_idm_ecid_wtls4 OBJ_wap_wsg_idm_ecid,4L #define SN_wap_wsg_idm_ecid_wtls5 "wap-wsg-idm-ecid-wtls5" #define NID_wap_wsg_idm_ecid_wtls5 738 #define OBJ_wap_wsg_idm_ecid_wtls5 OBJ_wap_wsg_idm_ecid,5L #define SN_wap_wsg_idm_ecid_wtls6 "wap-wsg-idm-ecid-wtls6" #define NID_wap_wsg_idm_ecid_wtls6 739 #define OBJ_wap_wsg_idm_ecid_wtls6 OBJ_wap_wsg_idm_ecid,6L #define SN_wap_wsg_idm_ecid_wtls7 "wap-wsg-idm-ecid-wtls7" #define NID_wap_wsg_idm_ecid_wtls7 740 #define OBJ_wap_wsg_idm_ecid_wtls7 OBJ_wap_wsg_idm_ecid,7L #define SN_wap_wsg_idm_ecid_wtls8 "wap-wsg-idm-ecid-wtls8" #define NID_wap_wsg_idm_ecid_wtls8 741 #define OBJ_wap_wsg_idm_ecid_wtls8 OBJ_wap_wsg_idm_ecid,8L #define SN_wap_wsg_idm_ecid_wtls9 "wap-wsg-idm-ecid-wtls9" #define NID_wap_wsg_idm_ecid_wtls9 742 #define OBJ_wap_wsg_idm_ecid_wtls9 OBJ_wap_wsg_idm_ecid,9L #define SN_wap_wsg_idm_ecid_wtls10 "wap-wsg-idm-ecid-wtls10" #define NID_wap_wsg_idm_ecid_wtls10 743 #define OBJ_wap_wsg_idm_ecid_wtls10 OBJ_wap_wsg_idm_ecid,10L #define SN_wap_wsg_idm_ecid_wtls11 "wap-wsg-idm-ecid-wtls11" #define NID_wap_wsg_idm_ecid_wtls11 744 #define OBJ_wap_wsg_idm_ecid_wtls11 OBJ_wap_wsg_idm_ecid,11L #define SN_wap_wsg_idm_ecid_wtls12 "wap-wsg-idm-ecid-wtls12" #define NID_wap_wsg_idm_ecid_wtls12 745 #define OBJ_wap_wsg_idm_ecid_wtls12 OBJ_wap_wsg_idm_ecid,12L #define SN_cast5_cbc "CAST5-CBC" #define LN_cast5_cbc "cast5-cbc" #define NID_cast5_cbc 108 #define OBJ_cast5_cbc OBJ_ISO_US,113533L,7L,66L,10L #define SN_cast5_ecb "CAST5-ECB" #define LN_cast5_ecb "cast5-ecb" #define NID_cast5_ecb 109 #define SN_cast5_cfb64 "CAST5-CFB" #define LN_cast5_cfb64 "cast5-cfb" #define NID_cast5_cfb64 110 #define SN_cast5_ofb64 "CAST5-OFB" #define LN_cast5_ofb64 "cast5-ofb" #define NID_cast5_ofb64 111 #define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" #define NID_pbeWithMD5AndCast5_CBC 112 #define OBJ_pbeWithMD5AndCast5_CBC OBJ_ISO_US,113533L,7L,66L,12L #define SN_id_PasswordBasedMAC "id-PasswordBasedMAC" #define LN_id_PasswordBasedMAC "password based MAC" #define NID_id_PasswordBasedMAC 782 #define OBJ_id_PasswordBasedMAC OBJ_ISO_US,113533L,7L,66L,13L #define SN_id_DHBasedMac "id-DHBasedMac" #define LN_id_DHBasedMac "Diffie-Hellman based MAC" #define NID_id_DHBasedMac 783 #define OBJ_id_DHBasedMac OBJ_ISO_US,113533L,7L,66L,30L #define SN_rsadsi "rsadsi" #define LN_rsadsi "RSA Data Security, Inc." #define NID_rsadsi 1 #define OBJ_rsadsi OBJ_ISO_US,113549L #define SN_pkcs "pkcs" #define LN_pkcs "RSA Data Security, Inc. PKCS" #define NID_pkcs 2 #define OBJ_pkcs OBJ_rsadsi,1L #define SN_pkcs1 "pkcs1" #define NID_pkcs1 186 #define OBJ_pkcs1 OBJ_pkcs,1L #define LN_rsaEncryption "rsaEncryption" #define NID_rsaEncryption 6 #define OBJ_rsaEncryption OBJ_pkcs1,1L #define SN_md2WithRSAEncryption "RSA-MD2" #define LN_md2WithRSAEncryption "md2WithRSAEncryption" #define NID_md2WithRSAEncryption 7 #define OBJ_md2WithRSAEncryption OBJ_pkcs1,2L #define SN_md4WithRSAEncryption "RSA-MD4" #define LN_md4WithRSAEncryption "md4WithRSAEncryption" #define NID_md4WithRSAEncryption 396 #define OBJ_md4WithRSAEncryption OBJ_pkcs1,3L #define SN_md5WithRSAEncryption "RSA-MD5" #define LN_md5WithRSAEncryption "md5WithRSAEncryption" #define NID_md5WithRSAEncryption 8 #define OBJ_md5WithRSAEncryption OBJ_pkcs1,4L #define SN_sha1WithRSAEncryption "RSA-SHA1" #define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" #define NID_sha1WithRSAEncryption 65 #define OBJ_sha1WithRSAEncryption OBJ_pkcs1,5L #define SN_rsaesOaep "RSAES-OAEP" #define LN_rsaesOaep "rsaesOaep" #define NID_rsaesOaep 919 #define OBJ_rsaesOaep OBJ_pkcs1,7L #define SN_mgf1 "MGF1" #define LN_mgf1 "mgf1" #define NID_mgf1 911 #define OBJ_mgf1 OBJ_pkcs1,8L #define SN_pSpecified "PSPECIFIED" #define LN_pSpecified "pSpecified" #define NID_pSpecified 935 #define OBJ_pSpecified OBJ_pkcs1,9L #define SN_rsassaPss "RSASSA-PSS" #define LN_rsassaPss "rsassaPss" #define NID_rsassaPss 912 #define OBJ_rsassaPss OBJ_pkcs1,10L #define SN_sha256WithRSAEncryption "RSA-SHA256" #define LN_sha256WithRSAEncryption "sha256WithRSAEncryption" #define NID_sha256WithRSAEncryption 668 #define OBJ_sha256WithRSAEncryption OBJ_pkcs1,11L #define SN_sha384WithRSAEncryption "RSA-SHA384" #define LN_sha384WithRSAEncryption "sha384WithRSAEncryption" #define NID_sha384WithRSAEncryption 669 #define OBJ_sha384WithRSAEncryption OBJ_pkcs1,12L #define SN_sha512WithRSAEncryption "RSA-SHA512" #define LN_sha512WithRSAEncryption "sha512WithRSAEncryption" #define NID_sha512WithRSAEncryption 670 #define OBJ_sha512WithRSAEncryption OBJ_pkcs1,13L #define SN_sha224WithRSAEncryption "RSA-SHA224" #define LN_sha224WithRSAEncryption "sha224WithRSAEncryption" #define NID_sha224WithRSAEncryption 671 #define OBJ_sha224WithRSAEncryption OBJ_pkcs1,14L #define SN_pkcs3 "pkcs3" #define NID_pkcs3 27 #define OBJ_pkcs3 OBJ_pkcs,3L #define LN_dhKeyAgreement "dhKeyAgreement" #define NID_dhKeyAgreement 28 #define OBJ_dhKeyAgreement OBJ_pkcs3,1L #define SN_pkcs5 "pkcs5" #define NID_pkcs5 187 #define OBJ_pkcs5 OBJ_pkcs,5L #define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" #define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" #define NID_pbeWithMD2AndDES_CBC 9 #define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs5,1L #define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" #define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" #define NID_pbeWithMD5AndDES_CBC 10 #define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs5,3L #define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" #define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" #define NID_pbeWithMD2AndRC2_CBC 168 #define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs5,4L #define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" #define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" #define NID_pbeWithMD5AndRC2_CBC 169 #define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs5,6L #define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" #define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" #define NID_pbeWithSHA1AndDES_CBC 170 #define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs5,10L #define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" #define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" #define NID_pbeWithSHA1AndRC2_CBC 68 #define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs5,11L #define LN_id_pbkdf2 "PBKDF2" #define NID_id_pbkdf2 69 #define OBJ_id_pbkdf2 OBJ_pkcs5,12L #define LN_pbes2 "PBES2" #define NID_pbes2 161 #define OBJ_pbes2 OBJ_pkcs5,13L #define LN_pbmac1 "PBMAC1" #define NID_pbmac1 162 #define OBJ_pbmac1 OBJ_pkcs5,14L #define SN_pkcs7 "pkcs7" #define NID_pkcs7 20 #define OBJ_pkcs7 OBJ_pkcs,7L #define LN_pkcs7_data "pkcs7-data" #define NID_pkcs7_data 21 #define OBJ_pkcs7_data OBJ_pkcs7,1L #define LN_pkcs7_signed "pkcs7-signedData" #define NID_pkcs7_signed 22 #define OBJ_pkcs7_signed OBJ_pkcs7,2L #define LN_pkcs7_enveloped "pkcs7-envelopedData" #define NID_pkcs7_enveloped 23 #define OBJ_pkcs7_enveloped OBJ_pkcs7,3L #define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" #define NID_pkcs7_signedAndEnveloped 24 #define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L #define LN_pkcs7_digest "pkcs7-digestData" #define NID_pkcs7_digest 25 #define OBJ_pkcs7_digest OBJ_pkcs7,5L #define LN_pkcs7_encrypted "pkcs7-encryptedData" #define NID_pkcs7_encrypted 26 #define OBJ_pkcs7_encrypted OBJ_pkcs7,6L #define SN_pkcs9 "pkcs9" #define NID_pkcs9 47 #define OBJ_pkcs9 OBJ_pkcs,9L #define LN_pkcs9_emailAddress "emailAddress" #define NID_pkcs9_emailAddress 48 #define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L #define LN_pkcs9_unstructuredName "unstructuredName" #define NID_pkcs9_unstructuredName 49 #define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L #define LN_pkcs9_contentType "contentType" #define NID_pkcs9_contentType 50 #define OBJ_pkcs9_contentType OBJ_pkcs9,3L #define LN_pkcs9_messageDigest "messageDigest" #define NID_pkcs9_messageDigest 51 #define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L #define LN_pkcs9_signingTime "signingTime" #define NID_pkcs9_signingTime 52 #define OBJ_pkcs9_signingTime OBJ_pkcs9,5L #define LN_pkcs9_countersignature "countersignature" #define NID_pkcs9_countersignature 53 #define OBJ_pkcs9_countersignature OBJ_pkcs9,6L #define LN_pkcs9_challengePassword "challengePassword" #define NID_pkcs9_challengePassword 54 #define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L #define LN_pkcs9_unstructuredAddress "unstructuredAddress" #define NID_pkcs9_unstructuredAddress 55 #define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L #define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" #define NID_pkcs9_extCertAttributes 56 #define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L #define SN_ext_req "extReq" #define LN_ext_req "Extension Request" #define NID_ext_req 172 #define OBJ_ext_req OBJ_pkcs9,14L #define SN_SMIMECapabilities "SMIME-CAPS" #define LN_SMIMECapabilities "S/MIME Capabilities" #define NID_SMIMECapabilities 167 #define OBJ_SMIMECapabilities OBJ_pkcs9,15L #define SN_SMIME "SMIME" #define LN_SMIME "S/MIME" #define NID_SMIME 188 #define OBJ_SMIME OBJ_pkcs9,16L #define SN_id_smime_mod "id-smime-mod" #define NID_id_smime_mod 189 #define OBJ_id_smime_mod OBJ_SMIME,0L #define SN_id_smime_ct "id-smime-ct" #define NID_id_smime_ct 190 #define OBJ_id_smime_ct OBJ_SMIME,1L #define SN_id_smime_aa "id-smime-aa" #define NID_id_smime_aa 191 #define OBJ_id_smime_aa OBJ_SMIME,2L #define SN_id_smime_alg "id-smime-alg" #define NID_id_smime_alg 192 #define OBJ_id_smime_alg OBJ_SMIME,3L #define SN_id_smime_cd "id-smime-cd" #define NID_id_smime_cd 193 #define OBJ_id_smime_cd OBJ_SMIME,4L #define SN_id_smime_spq "id-smime-spq" #define NID_id_smime_spq 194 #define OBJ_id_smime_spq OBJ_SMIME,5L #define SN_id_smime_cti "id-smime-cti" #define NID_id_smime_cti 195 #define OBJ_id_smime_cti OBJ_SMIME,6L #define SN_id_smime_mod_cms "id-smime-mod-cms" #define NID_id_smime_mod_cms 196 #define OBJ_id_smime_mod_cms OBJ_id_smime_mod,1L #define SN_id_smime_mod_ess "id-smime-mod-ess" #define NID_id_smime_mod_ess 197 #define OBJ_id_smime_mod_ess OBJ_id_smime_mod,2L #define SN_id_smime_mod_oid "id-smime-mod-oid" #define NID_id_smime_mod_oid 198 #define OBJ_id_smime_mod_oid OBJ_id_smime_mod,3L #define SN_id_smime_mod_msg_v3 "id-smime-mod-msg-v3" #define NID_id_smime_mod_msg_v3 199 #define OBJ_id_smime_mod_msg_v3 OBJ_id_smime_mod,4L #define SN_id_smime_mod_ets_eSignature_88 "id-smime-mod-ets-eSignature-88" #define NID_id_smime_mod_ets_eSignature_88 200 #define OBJ_id_smime_mod_ets_eSignature_88 OBJ_id_smime_mod,5L #define SN_id_smime_mod_ets_eSignature_97 "id-smime-mod-ets-eSignature-97" #define NID_id_smime_mod_ets_eSignature_97 201 #define OBJ_id_smime_mod_ets_eSignature_97 OBJ_id_smime_mod,6L #define SN_id_smime_mod_ets_eSigPolicy_88 "id-smime-mod-ets-eSigPolicy-88" #define NID_id_smime_mod_ets_eSigPolicy_88 202 #define OBJ_id_smime_mod_ets_eSigPolicy_88 OBJ_id_smime_mod,7L #define SN_id_smime_mod_ets_eSigPolicy_97 "id-smime-mod-ets-eSigPolicy-97" #define NID_id_smime_mod_ets_eSigPolicy_97 203 #define OBJ_id_smime_mod_ets_eSigPolicy_97 OBJ_id_smime_mod,8L #define SN_id_smime_ct_receipt "id-smime-ct-receipt" #define NID_id_smime_ct_receipt 204 #define OBJ_id_smime_ct_receipt OBJ_id_smime_ct,1L #define SN_id_smime_ct_authData "id-smime-ct-authData" #define NID_id_smime_ct_authData 205 #define OBJ_id_smime_ct_authData OBJ_id_smime_ct,2L #define SN_id_smime_ct_publishCert "id-smime-ct-publishCert" #define NID_id_smime_ct_publishCert 206 #define OBJ_id_smime_ct_publishCert OBJ_id_smime_ct,3L #define SN_id_smime_ct_TSTInfo "id-smime-ct-TSTInfo" #define NID_id_smime_ct_TSTInfo 207 #define OBJ_id_smime_ct_TSTInfo OBJ_id_smime_ct,4L #define SN_id_smime_ct_TDTInfo "id-smime-ct-TDTInfo" #define NID_id_smime_ct_TDTInfo 208 #define OBJ_id_smime_ct_TDTInfo OBJ_id_smime_ct,5L #define SN_id_smime_ct_contentInfo "id-smime-ct-contentInfo" #define NID_id_smime_ct_contentInfo 209 #define OBJ_id_smime_ct_contentInfo OBJ_id_smime_ct,6L #define SN_id_smime_ct_DVCSRequestData "id-smime-ct-DVCSRequestData" #define NID_id_smime_ct_DVCSRequestData 210 #define OBJ_id_smime_ct_DVCSRequestData OBJ_id_smime_ct,7L #define SN_id_smime_ct_DVCSResponseData "id-smime-ct-DVCSResponseData" #define NID_id_smime_ct_DVCSResponseData 211 #define OBJ_id_smime_ct_DVCSResponseData OBJ_id_smime_ct,8L #define SN_id_smime_ct_compressedData "id-smime-ct-compressedData" #define NID_id_smime_ct_compressedData 786 #define OBJ_id_smime_ct_compressedData OBJ_id_smime_ct,9L #define SN_id_ct_asciiTextWithCRLF "id-ct-asciiTextWithCRLF" #define NID_id_ct_asciiTextWithCRLF 787 #define OBJ_id_ct_asciiTextWithCRLF OBJ_id_smime_ct,27L #define SN_id_smime_aa_receiptRequest "id-smime-aa-receiptRequest" #define NID_id_smime_aa_receiptRequest 212 #define OBJ_id_smime_aa_receiptRequest OBJ_id_smime_aa,1L #define SN_id_smime_aa_securityLabel "id-smime-aa-securityLabel" #define NID_id_smime_aa_securityLabel 213 #define OBJ_id_smime_aa_securityLabel OBJ_id_smime_aa,2L #define SN_id_smime_aa_mlExpandHistory "id-smime-aa-mlExpandHistory" #define NID_id_smime_aa_mlExpandHistory 214 #define OBJ_id_smime_aa_mlExpandHistory OBJ_id_smime_aa,3L #define SN_id_smime_aa_contentHint "id-smime-aa-contentHint" #define NID_id_smime_aa_contentHint 215 #define OBJ_id_smime_aa_contentHint OBJ_id_smime_aa,4L #define SN_id_smime_aa_msgSigDigest "id-smime-aa-msgSigDigest" #define NID_id_smime_aa_msgSigDigest 216 #define OBJ_id_smime_aa_msgSigDigest OBJ_id_smime_aa,5L #define SN_id_smime_aa_encapContentType "id-smime-aa-encapContentType" #define NID_id_smime_aa_encapContentType 217 #define OBJ_id_smime_aa_encapContentType OBJ_id_smime_aa,6L #define SN_id_smime_aa_contentIdentifier "id-smime-aa-contentIdentifier" #define NID_id_smime_aa_contentIdentifier 218 #define OBJ_id_smime_aa_contentIdentifier OBJ_id_smime_aa,7L #define SN_id_smime_aa_macValue "id-smime-aa-macValue" #define NID_id_smime_aa_macValue 219 #define OBJ_id_smime_aa_macValue OBJ_id_smime_aa,8L #define SN_id_smime_aa_equivalentLabels "id-smime-aa-equivalentLabels" #define NID_id_smime_aa_equivalentLabels 220 #define OBJ_id_smime_aa_equivalentLabels OBJ_id_smime_aa,9L #define SN_id_smime_aa_contentReference "id-smime-aa-contentReference" #define NID_id_smime_aa_contentReference 221 #define OBJ_id_smime_aa_contentReference OBJ_id_smime_aa,10L #define SN_id_smime_aa_encrypKeyPref "id-smime-aa-encrypKeyPref" #define NID_id_smime_aa_encrypKeyPref 222 #define OBJ_id_smime_aa_encrypKeyPref OBJ_id_smime_aa,11L #define SN_id_smime_aa_signingCertificate "id-smime-aa-signingCertificate" #define NID_id_smime_aa_signingCertificate 223 #define OBJ_id_smime_aa_signingCertificate OBJ_id_smime_aa,12L #define SN_id_smime_aa_smimeEncryptCerts "id-smime-aa-smimeEncryptCerts" #define NID_id_smime_aa_smimeEncryptCerts 224 #define OBJ_id_smime_aa_smimeEncryptCerts OBJ_id_smime_aa,13L #define SN_id_smime_aa_timeStampToken "id-smime-aa-timeStampToken" #define NID_id_smime_aa_timeStampToken 225 #define OBJ_id_smime_aa_timeStampToken OBJ_id_smime_aa,14L #define SN_id_smime_aa_ets_sigPolicyId "id-smime-aa-ets-sigPolicyId" #define NID_id_smime_aa_ets_sigPolicyId 226 #define OBJ_id_smime_aa_ets_sigPolicyId OBJ_id_smime_aa,15L #define SN_id_smime_aa_ets_commitmentType "id-smime-aa-ets-commitmentType" #define NID_id_smime_aa_ets_commitmentType 227 #define OBJ_id_smime_aa_ets_commitmentType OBJ_id_smime_aa,16L #define SN_id_smime_aa_ets_signerLocation "id-smime-aa-ets-signerLocation" #define NID_id_smime_aa_ets_signerLocation 228 #define OBJ_id_smime_aa_ets_signerLocation OBJ_id_smime_aa,17L #define SN_id_smime_aa_ets_signerAttr "id-smime-aa-ets-signerAttr" #define NID_id_smime_aa_ets_signerAttr 229 #define OBJ_id_smime_aa_ets_signerAttr OBJ_id_smime_aa,18L #define SN_id_smime_aa_ets_otherSigCert "id-smime-aa-ets-otherSigCert" #define NID_id_smime_aa_ets_otherSigCert 230 #define OBJ_id_smime_aa_ets_otherSigCert OBJ_id_smime_aa,19L #define SN_id_smime_aa_ets_contentTimestamp "id-smime-aa-ets-contentTimestamp" #define NID_id_smime_aa_ets_contentTimestamp 231 #define OBJ_id_smime_aa_ets_contentTimestamp OBJ_id_smime_aa,20L #define SN_id_smime_aa_ets_CertificateRefs "id-smime-aa-ets-CertificateRefs" #define NID_id_smime_aa_ets_CertificateRefs 232 #define OBJ_id_smime_aa_ets_CertificateRefs OBJ_id_smime_aa,21L #define SN_id_smime_aa_ets_RevocationRefs "id-smime-aa-ets-RevocationRefs" #define NID_id_smime_aa_ets_RevocationRefs 233 #define OBJ_id_smime_aa_ets_RevocationRefs OBJ_id_smime_aa,22L #define SN_id_smime_aa_ets_certValues "id-smime-aa-ets-certValues" #define NID_id_smime_aa_ets_certValues 234 #define OBJ_id_smime_aa_ets_certValues OBJ_id_smime_aa,23L #define SN_id_smime_aa_ets_revocationValues "id-smime-aa-ets-revocationValues" #define NID_id_smime_aa_ets_revocationValues 235 #define OBJ_id_smime_aa_ets_revocationValues OBJ_id_smime_aa,24L #define SN_id_smime_aa_ets_escTimeStamp "id-smime-aa-ets-escTimeStamp" #define NID_id_smime_aa_ets_escTimeStamp 236 #define OBJ_id_smime_aa_ets_escTimeStamp OBJ_id_smime_aa,25L #define SN_id_smime_aa_ets_certCRLTimestamp "id-smime-aa-ets-certCRLTimestamp" #define NID_id_smime_aa_ets_certCRLTimestamp 237 #define OBJ_id_smime_aa_ets_certCRLTimestamp OBJ_id_smime_aa,26L #define SN_id_smime_aa_ets_archiveTimeStamp "id-smime-aa-ets-archiveTimeStamp" #define NID_id_smime_aa_ets_archiveTimeStamp 238 #define OBJ_id_smime_aa_ets_archiveTimeStamp OBJ_id_smime_aa,27L #define SN_id_smime_aa_signatureType "id-smime-aa-signatureType" #define NID_id_smime_aa_signatureType 239 #define OBJ_id_smime_aa_signatureType OBJ_id_smime_aa,28L #define SN_id_smime_aa_dvcs_dvc "id-smime-aa-dvcs-dvc" #define NID_id_smime_aa_dvcs_dvc 240 #define OBJ_id_smime_aa_dvcs_dvc OBJ_id_smime_aa,29L #define SN_id_smime_alg_ESDHwith3DES "id-smime-alg-ESDHwith3DES" #define NID_id_smime_alg_ESDHwith3DES 241 #define OBJ_id_smime_alg_ESDHwith3DES OBJ_id_smime_alg,1L #define SN_id_smime_alg_ESDHwithRC2 "id-smime-alg-ESDHwithRC2" #define NID_id_smime_alg_ESDHwithRC2 242 #define OBJ_id_smime_alg_ESDHwithRC2 OBJ_id_smime_alg,2L #define SN_id_smime_alg_3DESwrap "id-smime-alg-3DESwrap" #define NID_id_smime_alg_3DESwrap 243 #define OBJ_id_smime_alg_3DESwrap OBJ_id_smime_alg,3L #define SN_id_smime_alg_RC2wrap "id-smime-alg-RC2wrap" #define NID_id_smime_alg_RC2wrap 244 #define OBJ_id_smime_alg_RC2wrap OBJ_id_smime_alg,4L #define SN_id_smime_alg_ESDH "id-smime-alg-ESDH" #define NID_id_smime_alg_ESDH 245 #define OBJ_id_smime_alg_ESDH OBJ_id_smime_alg,5L #define SN_id_smime_alg_CMS3DESwrap "id-smime-alg-CMS3DESwrap" #define NID_id_smime_alg_CMS3DESwrap 246 #define OBJ_id_smime_alg_CMS3DESwrap OBJ_id_smime_alg,6L #define SN_id_smime_alg_CMSRC2wrap "id-smime-alg-CMSRC2wrap" #define NID_id_smime_alg_CMSRC2wrap 247 #define OBJ_id_smime_alg_CMSRC2wrap OBJ_id_smime_alg,7L #define SN_id_alg_PWRI_KEK "id-alg-PWRI-KEK" #define NID_id_alg_PWRI_KEK 893 #define OBJ_id_alg_PWRI_KEK OBJ_id_smime_alg,9L #define SN_id_smime_cd_ldap "id-smime-cd-ldap" #define NID_id_smime_cd_ldap 248 #define OBJ_id_smime_cd_ldap OBJ_id_smime_cd,1L #define SN_id_smime_spq_ets_sqt_uri "id-smime-spq-ets-sqt-uri" #define NID_id_smime_spq_ets_sqt_uri 249 #define OBJ_id_smime_spq_ets_sqt_uri OBJ_id_smime_spq,1L #define SN_id_smime_spq_ets_sqt_unotice "id-smime-spq-ets-sqt-unotice" #define NID_id_smime_spq_ets_sqt_unotice 250 #define OBJ_id_smime_spq_ets_sqt_unotice OBJ_id_smime_spq,2L #define SN_id_smime_cti_ets_proofOfOrigin "id-smime-cti-ets-proofOfOrigin" #define NID_id_smime_cti_ets_proofOfOrigin 251 #define OBJ_id_smime_cti_ets_proofOfOrigin OBJ_id_smime_cti,1L #define SN_id_smime_cti_ets_proofOfReceipt "id-smime-cti-ets-proofOfReceipt" #define NID_id_smime_cti_ets_proofOfReceipt 252 #define OBJ_id_smime_cti_ets_proofOfReceipt OBJ_id_smime_cti,2L #define SN_id_smime_cti_ets_proofOfDelivery "id-smime-cti-ets-proofOfDelivery" #define NID_id_smime_cti_ets_proofOfDelivery 253 #define OBJ_id_smime_cti_ets_proofOfDelivery OBJ_id_smime_cti,3L #define SN_id_smime_cti_ets_proofOfSender "id-smime-cti-ets-proofOfSender" #define NID_id_smime_cti_ets_proofOfSender 254 #define OBJ_id_smime_cti_ets_proofOfSender OBJ_id_smime_cti,4L #define SN_id_smime_cti_ets_proofOfApproval "id-smime-cti-ets-proofOfApproval" #define NID_id_smime_cti_ets_proofOfApproval 255 #define OBJ_id_smime_cti_ets_proofOfApproval OBJ_id_smime_cti,5L #define SN_id_smime_cti_ets_proofOfCreation "id-smime-cti-ets-proofOfCreation" #define NID_id_smime_cti_ets_proofOfCreation 256 #define OBJ_id_smime_cti_ets_proofOfCreation OBJ_id_smime_cti,6L #define LN_friendlyName "friendlyName" #define NID_friendlyName 156 #define OBJ_friendlyName OBJ_pkcs9,20L #define LN_localKeyID "localKeyID" #define NID_localKeyID 157 #define OBJ_localKeyID OBJ_pkcs9,21L #define SN_ms_csp_name "CSPName" #define LN_ms_csp_name "Microsoft CSP Name" #define NID_ms_csp_name 417 #define OBJ_ms_csp_name 1L,3L,6L,1L,4L,1L,311L,17L,1L #define SN_LocalKeySet "LocalKeySet" #define LN_LocalKeySet "Microsoft Local Key set" #define NID_LocalKeySet 856 #define OBJ_LocalKeySet 1L,3L,6L,1L,4L,1L,311L,17L,2L #define OBJ_certTypes OBJ_pkcs9,22L #define LN_x509Certificate "x509Certificate" #define NID_x509Certificate 158 #define OBJ_x509Certificate OBJ_certTypes,1L #define LN_sdsiCertificate "sdsiCertificate" #define NID_sdsiCertificate 159 #define OBJ_sdsiCertificate OBJ_certTypes,2L #define OBJ_crlTypes OBJ_pkcs9,23L #define LN_x509Crl "x509Crl" #define NID_x509Crl 160 #define OBJ_x509Crl OBJ_crlTypes,1L #define OBJ_pkcs12 OBJ_pkcs,12L #define OBJ_pkcs12_pbeids OBJ_pkcs12,1L #define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" #define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" #define NID_pbe_WithSHA1And128BitRC4 144 #define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids,1L #define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" #define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" #define NID_pbe_WithSHA1And40BitRC4 145 #define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids,2L #define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" #define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" #define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 #define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids,3L #define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" #define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" #define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 #define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids,4L #define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" #define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" #define NID_pbe_WithSHA1And128BitRC2_CBC 148 #define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids,5L #define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" #define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" #define NID_pbe_WithSHA1And40BitRC2_CBC 149 #define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids,6L #define OBJ_pkcs12_Version1 OBJ_pkcs12,10L #define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1,1L #define LN_keyBag "keyBag" #define NID_keyBag 150 #define OBJ_keyBag OBJ_pkcs12_BagIds,1L #define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" #define NID_pkcs8ShroudedKeyBag 151 #define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds,2L #define LN_certBag "certBag" #define NID_certBag 152 #define OBJ_certBag OBJ_pkcs12_BagIds,3L #define LN_crlBag "crlBag" #define NID_crlBag 153 #define OBJ_crlBag OBJ_pkcs12_BagIds,4L #define LN_secretBag "secretBag" #define NID_secretBag 154 #define OBJ_secretBag OBJ_pkcs12_BagIds,5L #define LN_safeContentsBag "safeContentsBag" #define NID_safeContentsBag 155 #define OBJ_safeContentsBag OBJ_pkcs12_BagIds,6L #define SN_md2 "MD2" #define LN_md2 "md2" #define NID_md2 3 #define OBJ_md2 OBJ_rsadsi,2L,2L #define SN_md4 "MD4" #define LN_md4 "md4" #define NID_md4 257 #define OBJ_md4 OBJ_rsadsi,2L,4L #define SN_md5 "MD5" #define LN_md5 "md5" #define NID_md5 4 #define OBJ_md5 OBJ_rsadsi,2L,5L #define SN_md5_sha1 "MD5-SHA1" #define LN_md5_sha1 "md5-sha1" #define NID_md5_sha1 114 #define LN_hmacWithMD5 "hmacWithMD5" #define NID_hmacWithMD5 797 #define OBJ_hmacWithMD5 OBJ_rsadsi,2L,6L #define LN_hmacWithSHA1 "hmacWithSHA1" #define NID_hmacWithSHA1 163 #define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L #define LN_hmacWithSHA224 "hmacWithSHA224" #define NID_hmacWithSHA224 798 #define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L #define LN_hmacWithSHA256 "hmacWithSHA256" #define NID_hmacWithSHA256 799 #define OBJ_hmacWithSHA256 OBJ_rsadsi,2L,9L #define LN_hmacWithSHA384 "hmacWithSHA384" #define NID_hmacWithSHA384 800 #define OBJ_hmacWithSHA384 OBJ_rsadsi,2L,10L #define LN_hmacWithSHA512 "hmacWithSHA512" #define NID_hmacWithSHA512 801 #define OBJ_hmacWithSHA512 OBJ_rsadsi,2L,11L #define SN_rc2_cbc "RC2-CBC" #define LN_rc2_cbc "rc2-cbc" #define NID_rc2_cbc 37 #define OBJ_rc2_cbc OBJ_rsadsi,3L,2L #define SN_rc2_ecb "RC2-ECB" #define LN_rc2_ecb "rc2-ecb" #define NID_rc2_ecb 38 #define SN_rc2_cfb64 "RC2-CFB" #define LN_rc2_cfb64 "rc2-cfb" #define NID_rc2_cfb64 39 #define SN_rc2_ofb64 "RC2-OFB" #define LN_rc2_ofb64 "rc2-ofb" #define NID_rc2_ofb64 40 #define SN_rc2_40_cbc "RC2-40-CBC" #define LN_rc2_40_cbc "rc2-40-cbc" #define NID_rc2_40_cbc 98 #define SN_rc2_64_cbc "RC2-64-CBC" #define LN_rc2_64_cbc "rc2-64-cbc" #define NID_rc2_64_cbc 166 #define SN_rc4 "RC4" #define LN_rc4 "rc4" #define NID_rc4 5 #define OBJ_rc4 OBJ_rsadsi,3L,4L #define SN_rc4_40 "RC4-40" #define LN_rc4_40 "rc4-40" #define NID_rc4_40 97 #define SN_des_ede3_cbc "DES-EDE3-CBC" #define LN_des_ede3_cbc "des-ede3-cbc" #define NID_des_ede3_cbc 44 #define OBJ_des_ede3_cbc OBJ_rsadsi,3L,7L #define SN_rc5_cbc "RC5-CBC" #define LN_rc5_cbc "rc5-cbc" #define NID_rc5_cbc 120 #define OBJ_rc5_cbc OBJ_rsadsi,3L,8L #define SN_rc5_ecb "RC5-ECB" #define LN_rc5_ecb "rc5-ecb" #define NID_rc5_ecb 121 #define SN_rc5_cfb64 "RC5-CFB" #define LN_rc5_cfb64 "rc5-cfb" #define NID_rc5_cfb64 122 #define SN_rc5_ofb64 "RC5-OFB" #define LN_rc5_ofb64 "rc5-ofb" #define NID_rc5_ofb64 123 #define SN_ms_ext_req "msExtReq" #define LN_ms_ext_req "Microsoft Extension Request" #define NID_ms_ext_req 171 #define OBJ_ms_ext_req 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L #define SN_ms_code_ind "msCodeInd" #define LN_ms_code_ind "Microsoft Individual Code Signing" #define NID_ms_code_ind 134 #define OBJ_ms_code_ind 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L #define SN_ms_code_com "msCodeCom" #define LN_ms_code_com "Microsoft Commercial Code Signing" #define NID_ms_code_com 135 #define OBJ_ms_code_com 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L #define SN_ms_ctl_sign "msCTLSign" #define LN_ms_ctl_sign "Microsoft Trust List Signing" #define NID_ms_ctl_sign 136 #define OBJ_ms_ctl_sign 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L #define SN_ms_sgc "msSGC" #define LN_ms_sgc "Microsoft Server Gated Crypto" #define NID_ms_sgc 137 #define OBJ_ms_sgc 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L #define SN_ms_efs "msEFS" #define LN_ms_efs "Microsoft Encrypted File System" #define NID_ms_efs 138 #define OBJ_ms_efs 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L #define SN_ms_smartcard_login "msSmartcardLogin" #define LN_ms_smartcard_login "Microsoft Smartcardlogin" #define NID_ms_smartcard_login 648 #define OBJ_ms_smartcard_login 1L,3L,6L,1L,4L,1L,311L,20L,2L,2L #define SN_ms_upn "msUPN" #define LN_ms_upn "Microsoft Universal Principal Name" #define NID_ms_upn 649 #define OBJ_ms_upn 1L,3L,6L,1L,4L,1L,311L,20L,2L,3L #define SN_idea_cbc "IDEA-CBC" #define LN_idea_cbc "idea-cbc" #define NID_idea_cbc 34 #define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L #define SN_idea_ecb "IDEA-ECB" #define LN_idea_ecb "idea-ecb" #define NID_idea_ecb 36 #define SN_idea_cfb64 "IDEA-CFB" #define LN_idea_cfb64 "idea-cfb" #define NID_idea_cfb64 35 #define SN_idea_ofb64 "IDEA-OFB" #define LN_idea_ofb64 "idea-ofb" #define NID_idea_ofb64 46 #define SN_bf_cbc "BF-CBC" #define LN_bf_cbc "bf-cbc" #define NID_bf_cbc 91 #define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L #define SN_bf_ecb "BF-ECB" #define LN_bf_ecb "bf-ecb" #define NID_bf_ecb 92 #define SN_bf_cfb64 "BF-CFB" #define LN_bf_cfb64 "bf-cfb" #define NID_bf_cfb64 93 #define SN_bf_ofb64 "BF-OFB" #define LN_bf_ofb64 "bf-ofb" #define NID_bf_ofb64 94 #define SN_id_pkix "PKIX" #define NID_id_pkix 127 #define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L #define SN_id_pkix_mod "id-pkix-mod" #define NID_id_pkix_mod 258 #define OBJ_id_pkix_mod OBJ_id_pkix,0L #define SN_id_pe "id-pe" #define NID_id_pe 175 #define OBJ_id_pe OBJ_id_pkix,1L #define SN_id_qt "id-qt" #define NID_id_qt 259 #define OBJ_id_qt OBJ_id_pkix,2L #define SN_id_kp "id-kp" #define NID_id_kp 128 #define OBJ_id_kp OBJ_id_pkix,3L #define SN_id_it "id-it" #define NID_id_it 260 #define OBJ_id_it OBJ_id_pkix,4L #define SN_id_pkip "id-pkip" #define NID_id_pkip 261 #define OBJ_id_pkip OBJ_id_pkix,5L #define SN_id_alg "id-alg" #define NID_id_alg 262 #define OBJ_id_alg OBJ_id_pkix,6L #define SN_id_cmc "id-cmc" #define NID_id_cmc 263 #define OBJ_id_cmc OBJ_id_pkix,7L #define SN_id_on "id-on" #define NID_id_on 264 #define OBJ_id_on OBJ_id_pkix,8L #define SN_id_pda "id-pda" #define NID_id_pda 265 #define OBJ_id_pda OBJ_id_pkix,9L #define SN_id_aca "id-aca" #define NID_id_aca 266 #define OBJ_id_aca OBJ_id_pkix,10L #define SN_id_qcs "id-qcs" #define NID_id_qcs 267 #define OBJ_id_qcs OBJ_id_pkix,11L #define SN_id_cct "id-cct" #define NID_id_cct 268 #define OBJ_id_cct OBJ_id_pkix,12L #define SN_id_ppl "id-ppl" #define NID_id_ppl 662 #define OBJ_id_ppl OBJ_id_pkix,21L #define SN_id_ad "id-ad" #define NID_id_ad 176 #define OBJ_id_ad OBJ_id_pkix,48L #define SN_id_pkix1_explicit_88 "id-pkix1-explicit-88" #define NID_id_pkix1_explicit_88 269 #define OBJ_id_pkix1_explicit_88 OBJ_id_pkix_mod,1L #define SN_id_pkix1_implicit_88 "id-pkix1-implicit-88" #define NID_id_pkix1_implicit_88 270 #define OBJ_id_pkix1_implicit_88 OBJ_id_pkix_mod,2L #define SN_id_pkix1_explicit_93 "id-pkix1-explicit-93" #define NID_id_pkix1_explicit_93 271 #define OBJ_id_pkix1_explicit_93 OBJ_id_pkix_mod,3L #define SN_id_pkix1_implicit_93 "id-pkix1-implicit-93" #define NID_id_pkix1_implicit_93 272 #define OBJ_id_pkix1_implicit_93 OBJ_id_pkix_mod,4L #define SN_id_mod_crmf "id-mod-crmf" #define NID_id_mod_crmf 273 #define OBJ_id_mod_crmf OBJ_id_pkix_mod,5L #define SN_id_mod_cmc "id-mod-cmc" #define NID_id_mod_cmc 274 #define OBJ_id_mod_cmc OBJ_id_pkix_mod,6L #define SN_id_mod_kea_profile_88 "id-mod-kea-profile-88" #define NID_id_mod_kea_profile_88 275 #define OBJ_id_mod_kea_profile_88 OBJ_id_pkix_mod,7L #define SN_id_mod_kea_profile_93 "id-mod-kea-profile-93" #define NID_id_mod_kea_profile_93 276 #define OBJ_id_mod_kea_profile_93 OBJ_id_pkix_mod,8L #define SN_id_mod_cmp "id-mod-cmp" #define NID_id_mod_cmp 277 #define OBJ_id_mod_cmp OBJ_id_pkix_mod,9L #define SN_id_mod_qualified_cert_88 "id-mod-qualified-cert-88" #define NID_id_mod_qualified_cert_88 278 #define OBJ_id_mod_qualified_cert_88 OBJ_id_pkix_mod,10L #define SN_id_mod_qualified_cert_93 "id-mod-qualified-cert-93" #define NID_id_mod_qualified_cert_93 279 #define OBJ_id_mod_qualified_cert_93 OBJ_id_pkix_mod,11L #define SN_id_mod_attribute_cert "id-mod-attribute-cert" #define NID_id_mod_attribute_cert 280 #define OBJ_id_mod_attribute_cert OBJ_id_pkix_mod,12L #define SN_id_mod_timestamp_protocol "id-mod-timestamp-protocol" #define NID_id_mod_timestamp_protocol 281 #define OBJ_id_mod_timestamp_protocol OBJ_id_pkix_mod,13L #define SN_id_mod_ocsp "id-mod-ocsp" #define NID_id_mod_ocsp 282 #define OBJ_id_mod_ocsp OBJ_id_pkix_mod,14L #define SN_id_mod_dvcs "id-mod-dvcs" #define NID_id_mod_dvcs 283 #define OBJ_id_mod_dvcs OBJ_id_pkix_mod,15L #define SN_id_mod_cmp2000 "id-mod-cmp2000" #define NID_id_mod_cmp2000 284 #define OBJ_id_mod_cmp2000 OBJ_id_pkix_mod,16L #define SN_info_access "authorityInfoAccess" #define LN_info_access "Authority Information Access" #define NID_info_access 177 #define OBJ_info_access OBJ_id_pe,1L #define SN_biometricInfo "biometricInfo" #define LN_biometricInfo "Biometric Info" #define NID_biometricInfo 285 #define OBJ_biometricInfo OBJ_id_pe,2L #define SN_qcStatements "qcStatements" #define NID_qcStatements 286 #define OBJ_qcStatements OBJ_id_pe,3L #define SN_ac_auditEntity "ac-auditEntity" #define NID_ac_auditEntity 287 #define OBJ_ac_auditEntity OBJ_id_pe,4L #define SN_ac_targeting "ac-targeting" #define NID_ac_targeting 288 #define OBJ_ac_targeting OBJ_id_pe,5L #define SN_aaControls "aaControls" #define NID_aaControls 289 #define OBJ_aaControls OBJ_id_pe,6L #define SN_sbgp_ipAddrBlock "sbgp-ipAddrBlock" #define NID_sbgp_ipAddrBlock 290 #define OBJ_sbgp_ipAddrBlock OBJ_id_pe,7L #define SN_sbgp_autonomousSysNum "sbgp-autonomousSysNum" #define NID_sbgp_autonomousSysNum 291 #define OBJ_sbgp_autonomousSysNum OBJ_id_pe,8L #define SN_sbgp_routerIdentifier "sbgp-routerIdentifier" #define NID_sbgp_routerIdentifier 292 #define OBJ_sbgp_routerIdentifier OBJ_id_pe,9L #define SN_ac_proxying "ac-proxying" #define NID_ac_proxying 397 #define OBJ_ac_proxying OBJ_id_pe,10L #define SN_sinfo_access "subjectInfoAccess" #define LN_sinfo_access "Subject Information Access" #define NID_sinfo_access 398 #define OBJ_sinfo_access OBJ_id_pe,11L #define SN_proxyCertInfo "proxyCertInfo" #define LN_proxyCertInfo "Proxy Certificate Information" #define NID_proxyCertInfo 663 #define OBJ_proxyCertInfo OBJ_id_pe,14L #define SN_id_qt_cps "id-qt-cps" #define LN_id_qt_cps "Policy Qualifier CPS" #define NID_id_qt_cps 164 #define OBJ_id_qt_cps OBJ_id_qt,1L #define SN_id_qt_unotice "id-qt-unotice" #define LN_id_qt_unotice "Policy Qualifier User Notice" #define NID_id_qt_unotice 165 #define OBJ_id_qt_unotice OBJ_id_qt,2L #define SN_textNotice "textNotice" #define NID_textNotice 293 #define OBJ_textNotice OBJ_id_qt,3L #define SN_server_auth "serverAuth" #define LN_server_auth "TLS Web Server Authentication" #define NID_server_auth 129 #define OBJ_server_auth OBJ_id_kp,1L #define SN_client_auth "clientAuth" #define LN_client_auth "TLS Web Client Authentication" #define NID_client_auth 130 #define OBJ_client_auth OBJ_id_kp,2L #define SN_code_sign "codeSigning" #define LN_code_sign "Code Signing" #define NID_code_sign 131 #define OBJ_code_sign OBJ_id_kp,3L #define SN_email_protect "emailProtection" #define LN_email_protect "E-mail Protection" #define NID_email_protect 132 #define OBJ_email_protect OBJ_id_kp,4L #define SN_ipsecEndSystem "ipsecEndSystem" #define LN_ipsecEndSystem "IPSec End System" #define NID_ipsecEndSystem 294 #define OBJ_ipsecEndSystem OBJ_id_kp,5L #define SN_ipsecTunnel "ipsecTunnel" #define LN_ipsecTunnel "IPSec Tunnel" #define NID_ipsecTunnel 295 #define OBJ_ipsecTunnel OBJ_id_kp,6L #define SN_ipsecUser "ipsecUser" #define LN_ipsecUser "IPSec User" #define NID_ipsecUser 296 #define OBJ_ipsecUser OBJ_id_kp,7L #define SN_time_stamp "timeStamping" #define LN_time_stamp "Time Stamping" #define NID_time_stamp 133 #define OBJ_time_stamp OBJ_id_kp,8L #define SN_OCSP_sign "OCSPSigning" #define LN_OCSP_sign "OCSP Signing" #define NID_OCSP_sign 180 #define OBJ_OCSP_sign OBJ_id_kp,9L #define SN_dvcs "DVCS" #define LN_dvcs "dvcs" #define NID_dvcs 297 #define OBJ_dvcs OBJ_id_kp,10L #define SN_id_it_caProtEncCert "id-it-caProtEncCert" #define NID_id_it_caProtEncCert 298 #define OBJ_id_it_caProtEncCert OBJ_id_it,1L #define SN_id_it_signKeyPairTypes "id-it-signKeyPairTypes" #define NID_id_it_signKeyPairTypes 299 #define OBJ_id_it_signKeyPairTypes OBJ_id_it,2L #define SN_id_it_encKeyPairTypes "id-it-encKeyPairTypes" #define NID_id_it_encKeyPairTypes 300 #define OBJ_id_it_encKeyPairTypes OBJ_id_it,3L #define SN_id_it_preferredSymmAlg "id-it-preferredSymmAlg" #define NID_id_it_preferredSymmAlg 301 #define OBJ_id_it_preferredSymmAlg OBJ_id_it,4L #define SN_id_it_caKeyUpdateInfo "id-it-caKeyUpdateInfo" #define NID_id_it_caKeyUpdateInfo 302 #define OBJ_id_it_caKeyUpdateInfo OBJ_id_it,5L #define SN_id_it_currentCRL "id-it-currentCRL" #define NID_id_it_currentCRL 303 #define OBJ_id_it_currentCRL OBJ_id_it,6L #define SN_id_it_unsupportedOIDs "id-it-unsupportedOIDs" #define NID_id_it_unsupportedOIDs 304 #define OBJ_id_it_unsupportedOIDs OBJ_id_it,7L #define SN_id_it_subscriptionRequest "id-it-subscriptionRequest" #define NID_id_it_subscriptionRequest 305 #define OBJ_id_it_subscriptionRequest OBJ_id_it,8L #define SN_id_it_subscriptionResponse "id-it-subscriptionResponse" #define NID_id_it_subscriptionResponse 306 #define OBJ_id_it_subscriptionResponse OBJ_id_it,9L #define SN_id_it_keyPairParamReq "id-it-keyPairParamReq" #define NID_id_it_keyPairParamReq 307 #define OBJ_id_it_keyPairParamReq OBJ_id_it,10L #define SN_id_it_keyPairParamRep "id-it-keyPairParamRep" #define NID_id_it_keyPairParamRep 308 #define OBJ_id_it_keyPairParamRep OBJ_id_it,11L #define SN_id_it_revPassphrase "id-it-revPassphrase" #define NID_id_it_revPassphrase 309 #define OBJ_id_it_revPassphrase OBJ_id_it,12L #define SN_id_it_implicitConfirm "id-it-implicitConfirm" #define NID_id_it_implicitConfirm 310 #define OBJ_id_it_implicitConfirm OBJ_id_it,13L #define SN_id_it_confirmWaitTime "id-it-confirmWaitTime" #define NID_id_it_confirmWaitTime 311 #define OBJ_id_it_confirmWaitTime OBJ_id_it,14L #define SN_id_it_origPKIMessage "id-it-origPKIMessage" #define NID_id_it_origPKIMessage 312 #define OBJ_id_it_origPKIMessage OBJ_id_it,15L #define SN_id_it_suppLangTags "id-it-suppLangTags" #define NID_id_it_suppLangTags 784 #define OBJ_id_it_suppLangTags OBJ_id_it,16L #define SN_id_regCtrl "id-regCtrl" #define NID_id_regCtrl 313 #define OBJ_id_regCtrl OBJ_id_pkip,1L #define SN_id_regInfo "id-regInfo" #define NID_id_regInfo 314 #define OBJ_id_regInfo OBJ_id_pkip,2L #define SN_id_regCtrl_regToken "id-regCtrl-regToken" #define NID_id_regCtrl_regToken 315 #define OBJ_id_regCtrl_regToken OBJ_id_regCtrl,1L #define SN_id_regCtrl_authenticator "id-regCtrl-authenticator" #define NID_id_regCtrl_authenticator 316 #define OBJ_id_regCtrl_authenticator OBJ_id_regCtrl,2L #define SN_id_regCtrl_pkiPublicationInfo "id-regCtrl-pkiPublicationInfo" #define NID_id_regCtrl_pkiPublicationInfo 317 #define OBJ_id_regCtrl_pkiPublicationInfo OBJ_id_regCtrl,3L #define SN_id_regCtrl_pkiArchiveOptions "id-regCtrl-pkiArchiveOptions" #define NID_id_regCtrl_pkiArchiveOptions 318 #define OBJ_id_regCtrl_pkiArchiveOptions OBJ_id_regCtrl,4L #define SN_id_regCtrl_oldCertID "id-regCtrl-oldCertID" #define NID_id_regCtrl_oldCertID 319 #define OBJ_id_regCtrl_oldCertID OBJ_id_regCtrl,5L #define SN_id_regCtrl_protocolEncrKey "id-regCtrl-protocolEncrKey" #define NID_id_regCtrl_protocolEncrKey 320 #define OBJ_id_regCtrl_protocolEncrKey OBJ_id_regCtrl,6L #define SN_id_regInfo_utf8Pairs "id-regInfo-utf8Pairs" #define NID_id_regInfo_utf8Pairs 321 #define OBJ_id_regInfo_utf8Pairs OBJ_id_regInfo,1L #define SN_id_regInfo_certReq "id-regInfo-certReq" #define NID_id_regInfo_certReq 322 #define OBJ_id_regInfo_certReq OBJ_id_regInfo,2L #define SN_id_alg_des40 "id-alg-des40" #define NID_id_alg_des40 323 #define OBJ_id_alg_des40 OBJ_id_alg,1L #define SN_id_alg_noSignature "id-alg-noSignature" #define NID_id_alg_noSignature 324 #define OBJ_id_alg_noSignature OBJ_id_alg,2L #define SN_id_alg_dh_sig_hmac_sha1 "id-alg-dh-sig-hmac-sha1" #define NID_id_alg_dh_sig_hmac_sha1 325 #define OBJ_id_alg_dh_sig_hmac_sha1 OBJ_id_alg,3L #define SN_id_alg_dh_pop "id-alg-dh-pop" #define NID_id_alg_dh_pop 326 #define OBJ_id_alg_dh_pop OBJ_id_alg,4L #define SN_id_cmc_statusInfo "id-cmc-statusInfo" #define NID_id_cmc_statusInfo 327 #define OBJ_id_cmc_statusInfo OBJ_id_cmc,1L #define SN_id_cmc_identification "id-cmc-identification" #define NID_id_cmc_identification 328 #define OBJ_id_cmc_identification OBJ_id_cmc,2L #define SN_id_cmc_identityProof "id-cmc-identityProof" #define NID_id_cmc_identityProof 329 #define OBJ_id_cmc_identityProof OBJ_id_cmc,3L #define SN_id_cmc_dataReturn "id-cmc-dataReturn" #define NID_id_cmc_dataReturn 330 #define OBJ_id_cmc_dataReturn OBJ_id_cmc,4L #define SN_id_cmc_transactionId "id-cmc-transactionId" #define NID_id_cmc_transactionId 331 #define OBJ_id_cmc_transactionId OBJ_id_cmc,5L #define SN_id_cmc_senderNonce "id-cmc-senderNonce" #define NID_id_cmc_senderNonce 332 #define OBJ_id_cmc_senderNonce OBJ_id_cmc,6L #define SN_id_cmc_recipientNonce "id-cmc-recipientNonce" #define NID_id_cmc_recipientNonce 333 #define OBJ_id_cmc_recipientNonce OBJ_id_cmc,7L #define SN_id_cmc_addExtensions "id-cmc-addExtensions" #define NID_id_cmc_addExtensions 334 #define OBJ_id_cmc_addExtensions OBJ_id_cmc,8L #define SN_id_cmc_encryptedPOP "id-cmc-encryptedPOP" #define NID_id_cmc_encryptedPOP 335 #define OBJ_id_cmc_encryptedPOP OBJ_id_cmc,9L #define SN_id_cmc_decryptedPOP "id-cmc-decryptedPOP" #define NID_id_cmc_decryptedPOP 336 #define OBJ_id_cmc_decryptedPOP OBJ_id_cmc,10L #define SN_id_cmc_lraPOPWitness "id-cmc-lraPOPWitness" #define NID_id_cmc_lraPOPWitness 337 #define OBJ_id_cmc_lraPOPWitness OBJ_id_cmc,11L #define SN_id_cmc_getCert "id-cmc-getCert" #define NID_id_cmc_getCert 338 #define OBJ_id_cmc_getCert OBJ_id_cmc,15L #define SN_id_cmc_getCRL "id-cmc-getCRL" #define NID_id_cmc_getCRL 339 #define OBJ_id_cmc_getCRL OBJ_id_cmc,16L #define SN_id_cmc_revokeRequest "id-cmc-revokeRequest" #define NID_id_cmc_revokeRequest 340 #define OBJ_id_cmc_revokeRequest OBJ_id_cmc,17L #define SN_id_cmc_regInfo "id-cmc-regInfo" #define NID_id_cmc_regInfo 341 #define OBJ_id_cmc_regInfo OBJ_id_cmc,18L #define SN_id_cmc_responseInfo "id-cmc-responseInfo" #define NID_id_cmc_responseInfo 342 #define OBJ_id_cmc_responseInfo OBJ_id_cmc,19L #define SN_id_cmc_queryPending "id-cmc-queryPending" #define NID_id_cmc_queryPending 343 #define OBJ_id_cmc_queryPending OBJ_id_cmc,21L #define SN_id_cmc_popLinkRandom "id-cmc-popLinkRandom" #define NID_id_cmc_popLinkRandom 344 #define OBJ_id_cmc_popLinkRandom OBJ_id_cmc,22L #define SN_id_cmc_popLinkWitness "id-cmc-popLinkWitness" #define NID_id_cmc_popLinkWitness 345 #define OBJ_id_cmc_popLinkWitness OBJ_id_cmc,23L #define SN_id_cmc_confirmCertAcceptance "id-cmc-confirmCertAcceptance" #define NID_id_cmc_confirmCertAcceptance 346 #define OBJ_id_cmc_confirmCertAcceptance OBJ_id_cmc,24L #define SN_id_on_personalData "id-on-personalData" #define NID_id_on_personalData 347 #define OBJ_id_on_personalData OBJ_id_on,1L #define SN_id_on_permanentIdentifier "id-on-permanentIdentifier" #define LN_id_on_permanentIdentifier "Permanent Identifier" #define NID_id_on_permanentIdentifier 858 #define OBJ_id_on_permanentIdentifier OBJ_id_on,3L #define SN_id_pda_dateOfBirth "id-pda-dateOfBirth" #define NID_id_pda_dateOfBirth 348 #define OBJ_id_pda_dateOfBirth OBJ_id_pda,1L #define SN_id_pda_placeOfBirth "id-pda-placeOfBirth" #define NID_id_pda_placeOfBirth 349 #define OBJ_id_pda_placeOfBirth OBJ_id_pda,2L #define SN_id_pda_gender "id-pda-gender" #define NID_id_pda_gender 351 #define OBJ_id_pda_gender OBJ_id_pda,3L #define SN_id_pda_countryOfCitizenship "id-pda-countryOfCitizenship" #define NID_id_pda_countryOfCitizenship 352 #define OBJ_id_pda_countryOfCitizenship OBJ_id_pda,4L #define SN_id_pda_countryOfResidence "id-pda-countryOfResidence" #define NID_id_pda_countryOfResidence 353 #define OBJ_id_pda_countryOfResidence OBJ_id_pda,5L #define SN_id_aca_authenticationInfo "id-aca-authenticationInfo" #define NID_id_aca_authenticationInfo 354 #define OBJ_id_aca_authenticationInfo OBJ_id_aca,1L #define SN_id_aca_accessIdentity "id-aca-accessIdentity" #define NID_id_aca_accessIdentity 355 #define OBJ_id_aca_accessIdentity OBJ_id_aca,2L #define SN_id_aca_chargingIdentity "id-aca-chargingIdentity" #define NID_id_aca_chargingIdentity 356 #define OBJ_id_aca_chargingIdentity OBJ_id_aca,3L #define SN_id_aca_group "id-aca-group" #define NID_id_aca_group 357 #define OBJ_id_aca_group OBJ_id_aca,4L #define SN_id_aca_role "id-aca-role" #define NID_id_aca_role 358 #define OBJ_id_aca_role OBJ_id_aca,5L #define SN_id_aca_encAttrs "id-aca-encAttrs" #define NID_id_aca_encAttrs 399 #define OBJ_id_aca_encAttrs OBJ_id_aca,6L #define SN_id_qcs_pkixQCSyntax_v1 "id-qcs-pkixQCSyntax-v1" #define NID_id_qcs_pkixQCSyntax_v1 359 #define OBJ_id_qcs_pkixQCSyntax_v1 OBJ_id_qcs,1L #define SN_id_cct_crs "id-cct-crs" #define NID_id_cct_crs 360 #define OBJ_id_cct_crs OBJ_id_cct,1L #define SN_id_cct_PKIData "id-cct-PKIData" #define NID_id_cct_PKIData 361 #define OBJ_id_cct_PKIData OBJ_id_cct,2L #define SN_id_cct_PKIResponse "id-cct-PKIResponse" #define NID_id_cct_PKIResponse 362 #define OBJ_id_cct_PKIResponse OBJ_id_cct,3L #define SN_id_ppl_anyLanguage "id-ppl-anyLanguage" #define LN_id_ppl_anyLanguage "Any language" #define NID_id_ppl_anyLanguage 664 #define OBJ_id_ppl_anyLanguage OBJ_id_ppl,0L #define SN_id_ppl_inheritAll "id-ppl-inheritAll" #define LN_id_ppl_inheritAll "Inherit all" #define NID_id_ppl_inheritAll 665 #define OBJ_id_ppl_inheritAll OBJ_id_ppl,1L #define SN_Independent "id-ppl-independent" #define LN_Independent "Independent" #define NID_Independent 667 #define OBJ_Independent OBJ_id_ppl,2L #define SN_ad_OCSP "OCSP" #define LN_ad_OCSP "OCSP" #define NID_ad_OCSP 178 #define OBJ_ad_OCSP OBJ_id_ad,1L #define SN_ad_ca_issuers "caIssuers" #define LN_ad_ca_issuers "CA Issuers" #define NID_ad_ca_issuers 179 #define OBJ_ad_ca_issuers OBJ_id_ad,2L #define SN_ad_timeStamping "ad_timestamping" #define LN_ad_timeStamping "AD Time Stamping" #define NID_ad_timeStamping 363 #define OBJ_ad_timeStamping OBJ_id_ad,3L #define SN_ad_dvcs "AD_DVCS" #define LN_ad_dvcs "ad dvcs" #define NID_ad_dvcs 364 #define OBJ_ad_dvcs OBJ_id_ad,4L #define SN_caRepository "caRepository" #define LN_caRepository "CA Repository" #define NID_caRepository 785 #define OBJ_caRepository OBJ_id_ad,5L #define OBJ_id_pkix_OCSP OBJ_ad_OCSP #define SN_id_pkix_OCSP_basic "basicOCSPResponse" #define LN_id_pkix_OCSP_basic "Basic OCSP Response" #define NID_id_pkix_OCSP_basic 365 #define OBJ_id_pkix_OCSP_basic OBJ_id_pkix_OCSP,1L #define SN_id_pkix_OCSP_Nonce "Nonce" #define LN_id_pkix_OCSP_Nonce "OCSP Nonce" #define NID_id_pkix_OCSP_Nonce 366 #define OBJ_id_pkix_OCSP_Nonce OBJ_id_pkix_OCSP,2L #define SN_id_pkix_OCSP_CrlID "CrlID" #define LN_id_pkix_OCSP_CrlID "OCSP CRL ID" #define NID_id_pkix_OCSP_CrlID 367 #define OBJ_id_pkix_OCSP_CrlID OBJ_id_pkix_OCSP,3L #define SN_id_pkix_OCSP_acceptableResponses "acceptableResponses" #define LN_id_pkix_OCSP_acceptableResponses "Acceptable OCSP Responses" #define NID_id_pkix_OCSP_acceptableResponses 368 #define OBJ_id_pkix_OCSP_acceptableResponses OBJ_id_pkix_OCSP,4L #define SN_id_pkix_OCSP_noCheck "noCheck" #define LN_id_pkix_OCSP_noCheck "OCSP No Check" #define NID_id_pkix_OCSP_noCheck 369 #define OBJ_id_pkix_OCSP_noCheck OBJ_id_pkix_OCSP,5L #define SN_id_pkix_OCSP_archiveCutoff "archiveCutoff" #define LN_id_pkix_OCSP_archiveCutoff "OCSP Archive Cutoff" #define NID_id_pkix_OCSP_archiveCutoff 370 #define OBJ_id_pkix_OCSP_archiveCutoff OBJ_id_pkix_OCSP,6L #define SN_id_pkix_OCSP_serviceLocator "serviceLocator" #define LN_id_pkix_OCSP_serviceLocator "OCSP Service Locator" #define NID_id_pkix_OCSP_serviceLocator 371 #define OBJ_id_pkix_OCSP_serviceLocator OBJ_id_pkix_OCSP,7L #define SN_id_pkix_OCSP_extendedStatus "extendedStatus" #define LN_id_pkix_OCSP_extendedStatus "Extended OCSP Status" #define NID_id_pkix_OCSP_extendedStatus 372 #define OBJ_id_pkix_OCSP_extendedStatus OBJ_id_pkix_OCSP,8L #define SN_id_pkix_OCSP_valid "valid" #define NID_id_pkix_OCSP_valid 373 #define OBJ_id_pkix_OCSP_valid OBJ_id_pkix_OCSP,9L #define SN_id_pkix_OCSP_path "path" #define NID_id_pkix_OCSP_path 374 #define OBJ_id_pkix_OCSP_path OBJ_id_pkix_OCSP,10L #define SN_id_pkix_OCSP_trustRoot "trustRoot" #define LN_id_pkix_OCSP_trustRoot "Trust Root" #define NID_id_pkix_OCSP_trustRoot 375 #define OBJ_id_pkix_OCSP_trustRoot OBJ_id_pkix_OCSP,11L #define SN_algorithm "algorithm" #define LN_algorithm "algorithm" #define NID_algorithm 376 #define OBJ_algorithm 1L,3L,14L,3L,2L #define SN_md5WithRSA "RSA-NP-MD5" #define LN_md5WithRSA "md5WithRSA" #define NID_md5WithRSA 104 #define OBJ_md5WithRSA OBJ_algorithm,3L #define SN_des_ecb "DES-ECB" #define LN_des_ecb "des-ecb" #define NID_des_ecb 29 #define OBJ_des_ecb OBJ_algorithm,6L #define SN_des_cbc "DES-CBC" #define LN_des_cbc "des-cbc" #define NID_des_cbc 31 #define OBJ_des_cbc OBJ_algorithm,7L #define SN_des_ofb64 "DES-OFB" #define LN_des_ofb64 "des-ofb" #define NID_des_ofb64 45 #define OBJ_des_ofb64 OBJ_algorithm,8L #define SN_des_cfb64 "DES-CFB" #define LN_des_cfb64 "des-cfb" #define NID_des_cfb64 30 #define OBJ_des_cfb64 OBJ_algorithm,9L #define SN_rsaSignature "rsaSignature" #define NID_rsaSignature 377 #define OBJ_rsaSignature OBJ_algorithm,11L #define SN_dsa_2 "DSA-old" #define LN_dsa_2 "dsaEncryption-old" #define NID_dsa_2 67 #define OBJ_dsa_2 OBJ_algorithm,12L #define SN_dsaWithSHA "DSA-SHA" #define LN_dsaWithSHA "dsaWithSHA" #define NID_dsaWithSHA 66 #define OBJ_dsaWithSHA OBJ_algorithm,13L #define SN_shaWithRSAEncryption "RSA-SHA" #define LN_shaWithRSAEncryption "shaWithRSAEncryption" #define NID_shaWithRSAEncryption 42 #define OBJ_shaWithRSAEncryption OBJ_algorithm,15L #define SN_des_ede_ecb "DES-EDE" #define LN_des_ede_ecb "des-ede" #define NID_des_ede_ecb 32 #define OBJ_des_ede_ecb OBJ_algorithm,17L #define SN_des_ede3_ecb "DES-EDE3" #define LN_des_ede3_ecb "des-ede3" #define NID_des_ede3_ecb 33 #define SN_des_ede_cbc "DES-EDE-CBC" #define LN_des_ede_cbc "des-ede-cbc" #define NID_des_ede_cbc 43 #define SN_des_ede_cfb64 "DES-EDE-CFB" #define LN_des_ede_cfb64 "des-ede-cfb" #define NID_des_ede_cfb64 60 #define SN_des_ede3_cfb64 "DES-EDE3-CFB" #define LN_des_ede3_cfb64 "des-ede3-cfb" #define NID_des_ede3_cfb64 61 #define SN_des_ede_ofb64 "DES-EDE-OFB" #define LN_des_ede_ofb64 "des-ede-ofb" #define NID_des_ede_ofb64 62 #define SN_des_ede3_ofb64 "DES-EDE3-OFB" #define LN_des_ede3_ofb64 "des-ede3-ofb" #define NID_des_ede3_ofb64 63 #define SN_desx_cbc "DESX-CBC" #define LN_desx_cbc "desx-cbc" #define NID_desx_cbc 80 #define SN_sha "SHA" #define LN_sha "sha" #define NID_sha 41 #define OBJ_sha OBJ_algorithm,18L #define SN_sha1 "SHA1" #define LN_sha1 "sha1" #define NID_sha1 64 #define OBJ_sha1 OBJ_algorithm,26L #define SN_dsaWithSHA1_2 "DSA-SHA1-old" #define LN_dsaWithSHA1_2 "dsaWithSHA1-old" #define NID_dsaWithSHA1_2 70 #define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L #define SN_sha1WithRSA "RSA-SHA1-2" #define LN_sha1WithRSA "sha1WithRSA" #define NID_sha1WithRSA 115 #define OBJ_sha1WithRSA OBJ_algorithm,29L #define SN_ripemd160 "RIPEMD160" #define LN_ripemd160 "ripemd160" #define NID_ripemd160 117 #define OBJ_ripemd160 1L,3L,36L,3L,2L,1L #define SN_ripemd160WithRSA "RSA-RIPEMD160" #define LN_ripemd160WithRSA "ripemd160WithRSA" #define NID_ripemd160WithRSA 119 #define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L #define SN_sxnet "SXNetID" #define LN_sxnet "Strong Extranet ID" #define NID_sxnet 143 #define OBJ_sxnet 1L,3L,101L,1L,4L,1L #define SN_X500 "X500" #define LN_X500 "directory services (X.500)" #define NID_X500 11 #define OBJ_X500 2L,5L #define SN_X509 "X509" #define NID_X509 12 #define OBJ_X509 OBJ_X500,4L #define SN_commonName "CN" #define LN_commonName "commonName" #define NID_commonName 13 #define OBJ_commonName OBJ_X509,3L #define SN_surname "SN" #define LN_surname "surname" #define NID_surname 100 #define OBJ_surname OBJ_X509,4L #define LN_serialNumber "serialNumber" #define NID_serialNumber 105 #define OBJ_serialNumber OBJ_X509,5L #define SN_countryName "C" #define LN_countryName "countryName" #define NID_countryName 14 #define OBJ_countryName OBJ_X509,6L #define SN_localityName "L" #define LN_localityName "localityName" #define NID_localityName 15 #define OBJ_localityName OBJ_X509,7L #define SN_stateOrProvinceName "ST" #define LN_stateOrProvinceName "stateOrProvinceName" #define NID_stateOrProvinceName 16 #define OBJ_stateOrProvinceName OBJ_X509,8L #define SN_streetAddress "street" #define LN_streetAddress "streetAddress" #define NID_streetAddress 660 #define OBJ_streetAddress OBJ_X509,9L #define SN_organizationName "O" #define LN_organizationName "organizationName" #define NID_organizationName 17 #define OBJ_organizationName OBJ_X509,10L #define SN_organizationalUnitName "OU" #define LN_organizationalUnitName "organizationalUnitName" #define NID_organizationalUnitName 18 #define OBJ_organizationalUnitName OBJ_X509,11L #define SN_title "title" #define LN_title "title" #define NID_title 106 #define OBJ_title OBJ_X509,12L #define LN_description "description" #define NID_description 107 #define OBJ_description OBJ_X509,13L #define LN_searchGuide "searchGuide" #define NID_searchGuide 859 #define OBJ_searchGuide OBJ_X509,14L #define LN_businessCategory "businessCategory" #define NID_businessCategory 860 #define OBJ_businessCategory OBJ_X509,15L #define LN_postalAddress "postalAddress" #define NID_postalAddress 861 #define OBJ_postalAddress OBJ_X509,16L #define LN_postalCode "postalCode" #define NID_postalCode 661 #define OBJ_postalCode OBJ_X509,17L #define LN_postOfficeBox "postOfficeBox" #define NID_postOfficeBox 862 #define OBJ_postOfficeBox OBJ_X509,18L #define LN_physicalDeliveryOfficeName "physicalDeliveryOfficeName" #define NID_physicalDeliveryOfficeName 863 #define OBJ_physicalDeliveryOfficeName OBJ_X509,19L #define LN_telephoneNumber "telephoneNumber" #define NID_telephoneNumber 864 #define OBJ_telephoneNumber OBJ_X509,20L #define LN_telexNumber "telexNumber" #define NID_telexNumber 865 #define OBJ_telexNumber OBJ_X509,21L #define LN_teletexTerminalIdentifier "teletexTerminalIdentifier" #define NID_teletexTerminalIdentifier 866 #define OBJ_teletexTerminalIdentifier OBJ_X509,22L #define LN_facsimileTelephoneNumber "facsimileTelephoneNumber" #define NID_facsimileTelephoneNumber 867 #define OBJ_facsimileTelephoneNumber OBJ_X509,23L #define LN_x121Address "x121Address" #define NID_x121Address 868 #define OBJ_x121Address OBJ_X509,24L #define LN_internationaliSDNNumber "internationaliSDNNumber" #define NID_internationaliSDNNumber 869 #define OBJ_internationaliSDNNumber OBJ_X509,25L #define LN_registeredAddress "registeredAddress" #define NID_registeredAddress 870 #define OBJ_registeredAddress OBJ_X509,26L #define LN_destinationIndicator "destinationIndicator" #define NID_destinationIndicator 871 #define OBJ_destinationIndicator OBJ_X509,27L #define LN_preferredDeliveryMethod "preferredDeliveryMethod" #define NID_preferredDeliveryMethod 872 #define OBJ_preferredDeliveryMethod OBJ_X509,28L #define LN_presentationAddress "presentationAddress" #define NID_presentationAddress 873 #define OBJ_presentationAddress OBJ_X509,29L #define LN_supportedApplicationContext "supportedApplicationContext" #define NID_supportedApplicationContext 874 #define OBJ_supportedApplicationContext OBJ_X509,30L #define SN_member "member" #define NID_member 875 #define OBJ_member OBJ_X509,31L #define SN_owner "owner" #define NID_owner 876 #define OBJ_owner OBJ_X509,32L #define LN_roleOccupant "roleOccupant" #define NID_roleOccupant 877 #define OBJ_roleOccupant OBJ_X509,33L #define SN_seeAlso "seeAlso" #define NID_seeAlso 878 #define OBJ_seeAlso OBJ_X509,34L #define LN_userPassword "userPassword" #define NID_userPassword 879 #define OBJ_userPassword OBJ_X509,35L #define LN_userCertificate "userCertificate" #define NID_userCertificate 880 #define OBJ_userCertificate OBJ_X509,36L #define LN_cACertificate "cACertificate" #define NID_cACertificate 881 #define OBJ_cACertificate OBJ_X509,37L #define LN_authorityRevocationList "authorityRevocationList" #define NID_authorityRevocationList 882 #define OBJ_authorityRevocationList OBJ_X509,38L #define LN_certificateRevocationList "certificateRevocationList" #define NID_certificateRevocationList 883 #define OBJ_certificateRevocationList OBJ_X509,39L #define LN_crossCertificatePair "crossCertificatePair" #define NID_crossCertificatePair 884 #define OBJ_crossCertificatePair OBJ_X509,40L #define SN_name "name" #define LN_name "name" #define NID_name 173 #define OBJ_name OBJ_X509,41L #define SN_givenName "GN" #define LN_givenName "givenName" #define NID_givenName 99 #define OBJ_givenName OBJ_X509,42L #define SN_initials "initials" #define LN_initials "initials" #define NID_initials 101 #define OBJ_initials OBJ_X509,43L #define LN_generationQualifier "generationQualifier" #define NID_generationQualifier 509 #define OBJ_generationQualifier OBJ_X509,44L #define LN_x500UniqueIdentifier "x500UniqueIdentifier" #define NID_x500UniqueIdentifier 503 #define OBJ_x500UniqueIdentifier OBJ_X509,45L #define SN_dnQualifier "dnQualifier" #define LN_dnQualifier "dnQualifier" #define NID_dnQualifier 174 #define OBJ_dnQualifier OBJ_X509,46L #define LN_enhancedSearchGuide "enhancedSearchGuide" #define NID_enhancedSearchGuide 885 #define OBJ_enhancedSearchGuide OBJ_X509,47L #define LN_protocolInformation "protocolInformation" #define NID_protocolInformation 886 #define OBJ_protocolInformation OBJ_X509,48L #define LN_distinguishedName "distinguishedName" #define NID_distinguishedName 887 #define OBJ_distinguishedName OBJ_X509,49L #define LN_uniqueMember "uniqueMember" #define NID_uniqueMember 888 #define OBJ_uniqueMember OBJ_X509,50L #define LN_houseIdentifier "houseIdentifier" #define NID_houseIdentifier 889 #define OBJ_houseIdentifier OBJ_X509,51L #define LN_supportedAlgorithms "supportedAlgorithms" #define NID_supportedAlgorithms 890 #define OBJ_supportedAlgorithms OBJ_X509,52L #define LN_deltaRevocationList "deltaRevocationList" #define NID_deltaRevocationList 891 #define OBJ_deltaRevocationList OBJ_X509,53L #define SN_dmdName "dmdName" #define NID_dmdName 892 #define OBJ_dmdName OBJ_X509,54L #define LN_pseudonym "pseudonym" #define NID_pseudonym 510 #define OBJ_pseudonym OBJ_X509,65L #define SN_role "role" #define LN_role "role" #define NID_role 400 #define OBJ_role OBJ_X509,72L #define SN_X500algorithms "X500algorithms" #define LN_X500algorithms "directory services - algorithms" #define NID_X500algorithms 378 #define OBJ_X500algorithms OBJ_X500,8L #define SN_rsa "RSA" #define LN_rsa "rsa" #define NID_rsa 19 #define OBJ_rsa OBJ_X500algorithms,1L,1L #define SN_mdc2WithRSA "RSA-MDC2" #define LN_mdc2WithRSA "mdc2WithRSA" #define NID_mdc2WithRSA 96 #define OBJ_mdc2WithRSA OBJ_X500algorithms,3L,100L #define SN_mdc2 "MDC2" #define LN_mdc2 "mdc2" #define NID_mdc2 95 #define OBJ_mdc2 OBJ_X500algorithms,3L,101L #define SN_id_ce "id-ce" #define NID_id_ce 81 #define OBJ_id_ce OBJ_X500,29L #define SN_subject_directory_attributes "subjectDirectoryAttributes" #define LN_subject_directory_attributes "X509v3 Subject Directory Attributes" #define NID_subject_directory_attributes 769 #define OBJ_subject_directory_attributes OBJ_id_ce,9L #define SN_subject_key_identifier "subjectKeyIdentifier" #define LN_subject_key_identifier "X509v3 Subject Key Identifier" #define NID_subject_key_identifier 82 #define OBJ_subject_key_identifier OBJ_id_ce,14L #define SN_key_usage "keyUsage" #define LN_key_usage "X509v3 Key Usage" #define NID_key_usage 83 #define OBJ_key_usage OBJ_id_ce,15L #define SN_private_key_usage_period "privateKeyUsagePeriod" #define LN_private_key_usage_period "X509v3 Private Key Usage Period" #define NID_private_key_usage_period 84 #define OBJ_private_key_usage_period OBJ_id_ce,16L #define SN_subject_alt_name "subjectAltName" #define LN_subject_alt_name "X509v3 Subject Alternative Name" #define NID_subject_alt_name 85 #define OBJ_subject_alt_name OBJ_id_ce,17L #define SN_issuer_alt_name "issuerAltName" #define LN_issuer_alt_name "X509v3 Issuer Alternative Name" #define NID_issuer_alt_name 86 #define OBJ_issuer_alt_name OBJ_id_ce,18L #define SN_basic_constraints "basicConstraints" #define LN_basic_constraints "X509v3 Basic Constraints" #define NID_basic_constraints 87 #define OBJ_basic_constraints OBJ_id_ce,19L #define SN_crl_number "crlNumber" #define LN_crl_number "X509v3 CRL Number" #define NID_crl_number 88 #define OBJ_crl_number OBJ_id_ce,20L #define SN_crl_reason "CRLReason" #define LN_crl_reason "X509v3 CRL Reason Code" #define NID_crl_reason 141 #define OBJ_crl_reason OBJ_id_ce,21L #define SN_invalidity_date "invalidityDate" #define LN_invalidity_date "Invalidity Date" #define NID_invalidity_date 142 #define OBJ_invalidity_date OBJ_id_ce,24L #define SN_delta_crl "deltaCRL" #define LN_delta_crl "X509v3 Delta CRL Indicator" #define NID_delta_crl 140 #define OBJ_delta_crl OBJ_id_ce,27L #define SN_issuing_distribution_point "issuingDistributionPoint" #define LN_issuing_distribution_point "X509v3 Issuing Distrubution Point" #define NID_issuing_distribution_point 770 #define OBJ_issuing_distribution_point OBJ_id_ce,28L #define SN_certificate_issuer "certificateIssuer" #define LN_certificate_issuer "X509v3 Certificate Issuer" #define NID_certificate_issuer 771 #define OBJ_certificate_issuer OBJ_id_ce,29L #define SN_name_constraints "nameConstraints" #define LN_name_constraints "X509v3 Name Constraints" #define NID_name_constraints 666 #define OBJ_name_constraints OBJ_id_ce,30L #define SN_crl_distribution_points "crlDistributionPoints" #define LN_crl_distribution_points "X509v3 CRL Distribution Points" #define NID_crl_distribution_points 103 #define OBJ_crl_distribution_points OBJ_id_ce,31L #define SN_certificate_policies "certificatePolicies" #define LN_certificate_policies "X509v3 Certificate Policies" #define NID_certificate_policies 89 #define OBJ_certificate_policies OBJ_id_ce,32L #define SN_any_policy "anyPolicy" #define LN_any_policy "X509v3 Any Policy" #define NID_any_policy 746 #define OBJ_any_policy OBJ_certificate_policies,0L #define SN_policy_mappings "policyMappings" #define LN_policy_mappings "X509v3 Policy Mappings" #define NID_policy_mappings 747 #define OBJ_policy_mappings OBJ_id_ce,33L #define SN_authority_key_identifier "authorityKeyIdentifier" #define LN_authority_key_identifier "X509v3 Authority Key Identifier" #define NID_authority_key_identifier 90 #define OBJ_authority_key_identifier OBJ_id_ce,35L #define SN_policy_constraints "policyConstraints" #define LN_policy_constraints "X509v3 Policy Constraints" #define NID_policy_constraints 401 #define OBJ_policy_constraints OBJ_id_ce,36L #define SN_ext_key_usage "extendedKeyUsage" #define LN_ext_key_usage "X509v3 Extended Key Usage" #define NID_ext_key_usage 126 #define OBJ_ext_key_usage OBJ_id_ce,37L #define SN_freshest_crl "freshestCRL" #define LN_freshest_crl "X509v3 Freshest CRL" #define NID_freshest_crl 857 #define OBJ_freshest_crl OBJ_id_ce,46L #define SN_inhibit_any_policy "inhibitAnyPolicy" #define LN_inhibit_any_policy "X509v3 Inhibit Any Policy" #define NID_inhibit_any_policy 748 #define OBJ_inhibit_any_policy OBJ_id_ce,54L #define SN_target_information "targetInformation" #define LN_target_information "X509v3 AC Targeting" #define NID_target_information 402 #define OBJ_target_information OBJ_id_ce,55L #define SN_no_rev_avail "noRevAvail" #define LN_no_rev_avail "X509v3 No Revocation Available" #define NID_no_rev_avail 403 #define OBJ_no_rev_avail OBJ_id_ce,56L #define SN_anyExtendedKeyUsage "anyExtendedKeyUsage" #define LN_anyExtendedKeyUsage "Any Extended Key Usage" #define NID_anyExtendedKeyUsage 910 #define OBJ_anyExtendedKeyUsage OBJ_ext_key_usage,0L #define SN_netscape "Netscape" #define LN_netscape "Netscape Communications Corp." #define NID_netscape 57 #define OBJ_netscape 2L,16L,840L,1L,113730L #define SN_netscape_cert_extension "nsCertExt" #define LN_netscape_cert_extension "Netscape Certificate Extension" #define NID_netscape_cert_extension 58 #define OBJ_netscape_cert_extension OBJ_netscape,1L #define SN_netscape_data_type "nsDataType" #define LN_netscape_data_type "Netscape Data Type" #define NID_netscape_data_type 59 #define OBJ_netscape_data_type OBJ_netscape,2L #define SN_netscape_cert_type "nsCertType" #define LN_netscape_cert_type "Netscape Cert Type" #define NID_netscape_cert_type 71 #define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L #define SN_netscape_base_url "nsBaseUrl" #define LN_netscape_base_url "Netscape Base Url" #define NID_netscape_base_url 72 #define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L #define SN_netscape_revocation_url "nsRevocationUrl" #define LN_netscape_revocation_url "Netscape Revocation Url" #define NID_netscape_revocation_url 73 #define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L #define SN_netscape_ca_revocation_url "nsCaRevocationUrl" #define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" #define NID_netscape_ca_revocation_url 74 #define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L #define SN_netscape_renewal_url "nsRenewalUrl" #define LN_netscape_renewal_url "Netscape Renewal Url" #define NID_netscape_renewal_url 75 #define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L #define SN_netscape_ca_policy_url "nsCaPolicyUrl" #define LN_netscape_ca_policy_url "Netscape CA Policy Url" #define NID_netscape_ca_policy_url 76 #define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L #define SN_netscape_ssl_server_name "nsSslServerName" #define LN_netscape_ssl_server_name "Netscape SSL Server Name" #define NID_netscape_ssl_server_name 77 #define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L #define SN_netscape_comment "nsComment" #define LN_netscape_comment "Netscape Comment" #define NID_netscape_comment 78 #define OBJ_netscape_comment OBJ_netscape_cert_extension,13L #define SN_netscape_cert_sequence "nsCertSequence" #define LN_netscape_cert_sequence "Netscape Certificate Sequence" #define NID_netscape_cert_sequence 79 #define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L #define SN_ns_sgc "nsSGC" #define LN_ns_sgc "Netscape Server Gated Crypto" #define NID_ns_sgc 139 #define OBJ_ns_sgc OBJ_netscape,4L,1L #define SN_org "ORG" #define LN_org "org" #define NID_org 379 #define OBJ_org OBJ_iso,3L #define SN_dod "DOD" #define LN_dod "dod" #define NID_dod 380 #define OBJ_dod OBJ_org,6L #define SN_iana "IANA" #define LN_iana "iana" #define NID_iana 381 #define OBJ_iana OBJ_dod,1L #define OBJ_internet OBJ_iana #define SN_Directory "directory" #define LN_Directory "Directory" #define NID_Directory 382 #define OBJ_Directory OBJ_internet,1L #define SN_Management "mgmt" #define LN_Management "Management" #define NID_Management 383 #define OBJ_Management OBJ_internet,2L #define SN_Experimental "experimental" #define LN_Experimental "Experimental" #define NID_Experimental 384 #define OBJ_Experimental OBJ_internet,3L #define SN_Private "private" #define LN_Private "Private" #define NID_Private 385 #define OBJ_Private OBJ_internet,4L #define SN_Security "security" #define LN_Security "Security" #define NID_Security 386 #define OBJ_Security OBJ_internet,5L #define SN_SNMPv2 "snmpv2" #define LN_SNMPv2 "SNMPv2" #define NID_SNMPv2 387 #define OBJ_SNMPv2 OBJ_internet,6L #define LN_Mail "Mail" #define NID_Mail 388 #define OBJ_Mail OBJ_internet,7L #define SN_Enterprises "enterprises" #define LN_Enterprises "Enterprises" #define NID_Enterprises 389 #define OBJ_Enterprises OBJ_Private,1L #define SN_dcObject "dcobject" #define LN_dcObject "dcObject" #define NID_dcObject 390 #define OBJ_dcObject OBJ_Enterprises,1466L,344L #define SN_mime_mhs "mime-mhs" #define LN_mime_mhs "MIME MHS" #define NID_mime_mhs 504 #define OBJ_mime_mhs OBJ_Mail,1L #define SN_mime_mhs_headings "mime-mhs-headings" #define LN_mime_mhs_headings "mime-mhs-headings" #define NID_mime_mhs_headings 505 #define OBJ_mime_mhs_headings OBJ_mime_mhs,1L #define SN_mime_mhs_bodies "mime-mhs-bodies" #define LN_mime_mhs_bodies "mime-mhs-bodies" #define NID_mime_mhs_bodies 506 #define OBJ_mime_mhs_bodies OBJ_mime_mhs,2L #define SN_id_hex_partial_message "id-hex-partial-message" #define LN_id_hex_partial_message "id-hex-partial-message" #define NID_id_hex_partial_message 507 #define OBJ_id_hex_partial_message OBJ_mime_mhs_headings,1L #define SN_id_hex_multipart_message "id-hex-multipart-message" #define LN_id_hex_multipart_message "id-hex-multipart-message" #define NID_id_hex_multipart_message 508 #define OBJ_id_hex_multipart_message OBJ_mime_mhs_headings,2L #define SN_rle_compression "RLE" #define LN_rle_compression "run length compression" #define NID_rle_compression 124 #define OBJ_rle_compression 1L,1L,1L,1L,666L,1L #define SN_zlib_compression "ZLIB" #define LN_zlib_compression "zlib compression" #define NID_zlib_compression 125 #define OBJ_zlib_compression OBJ_id_smime_alg,8L #define OBJ_csor 2L,16L,840L,1L,101L,3L #define OBJ_nistAlgorithms OBJ_csor,4L #define OBJ_aes OBJ_nistAlgorithms,1L #define SN_aes_128_ecb "AES-128-ECB" #define LN_aes_128_ecb "aes-128-ecb" #define NID_aes_128_ecb 418 #define OBJ_aes_128_ecb OBJ_aes,1L #define SN_aes_128_cbc "AES-128-CBC" #define LN_aes_128_cbc "aes-128-cbc" #define NID_aes_128_cbc 419 #define OBJ_aes_128_cbc OBJ_aes,2L #define SN_aes_128_ofb128 "AES-128-OFB" #define LN_aes_128_ofb128 "aes-128-ofb" #define NID_aes_128_ofb128 420 #define OBJ_aes_128_ofb128 OBJ_aes,3L #define SN_aes_128_cfb128 "AES-128-CFB" #define LN_aes_128_cfb128 "aes-128-cfb" #define NID_aes_128_cfb128 421 #define OBJ_aes_128_cfb128 OBJ_aes,4L #define SN_id_aes128_wrap "id-aes128-wrap" #define NID_id_aes128_wrap 788 #define OBJ_id_aes128_wrap OBJ_aes,5L #define SN_aes_128_gcm "id-aes128-GCM" #define LN_aes_128_gcm "aes-128-gcm" #define NID_aes_128_gcm 895 #define OBJ_aes_128_gcm OBJ_aes,6L #define SN_aes_128_ccm "id-aes128-CCM" #define LN_aes_128_ccm "aes-128-ccm" #define NID_aes_128_ccm 896 #define OBJ_aes_128_ccm OBJ_aes,7L #define SN_id_aes128_wrap_pad "id-aes128-wrap-pad" #define NID_id_aes128_wrap_pad 897 #define OBJ_id_aes128_wrap_pad OBJ_aes,8L #define SN_aes_192_ecb "AES-192-ECB" #define LN_aes_192_ecb "aes-192-ecb" #define NID_aes_192_ecb 422 #define OBJ_aes_192_ecb OBJ_aes,21L #define SN_aes_192_cbc "AES-192-CBC" #define LN_aes_192_cbc "aes-192-cbc" #define NID_aes_192_cbc 423 #define OBJ_aes_192_cbc OBJ_aes,22L #define SN_aes_192_ofb128 "AES-192-OFB" #define LN_aes_192_ofb128 "aes-192-ofb" #define NID_aes_192_ofb128 424 #define OBJ_aes_192_ofb128 OBJ_aes,23L #define SN_aes_192_cfb128 "AES-192-CFB" #define LN_aes_192_cfb128 "aes-192-cfb" #define NID_aes_192_cfb128 425 #define OBJ_aes_192_cfb128 OBJ_aes,24L #define SN_id_aes192_wrap "id-aes192-wrap" #define NID_id_aes192_wrap 789 #define OBJ_id_aes192_wrap OBJ_aes,25L #define SN_aes_192_gcm "id-aes192-GCM" #define LN_aes_192_gcm "aes-192-gcm" #define NID_aes_192_gcm 898 #define OBJ_aes_192_gcm OBJ_aes,26L #define SN_aes_192_ccm "id-aes192-CCM" #define LN_aes_192_ccm "aes-192-ccm" #define NID_aes_192_ccm 899 #define OBJ_aes_192_ccm OBJ_aes,27L #define SN_id_aes192_wrap_pad "id-aes192-wrap-pad" #define NID_id_aes192_wrap_pad 900 #define OBJ_id_aes192_wrap_pad OBJ_aes,28L #define SN_aes_256_ecb "AES-256-ECB" #define LN_aes_256_ecb "aes-256-ecb" #define NID_aes_256_ecb 426 #define OBJ_aes_256_ecb OBJ_aes,41L #define SN_aes_256_cbc "AES-256-CBC" #define LN_aes_256_cbc "aes-256-cbc" #define NID_aes_256_cbc 427 #define OBJ_aes_256_cbc OBJ_aes,42L #define SN_aes_256_ofb128 "AES-256-OFB" #define LN_aes_256_ofb128 "aes-256-ofb" #define NID_aes_256_ofb128 428 #define OBJ_aes_256_ofb128 OBJ_aes,43L #define SN_aes_256_cfb128 "AES-256-CFB" #define LN_aes_256_cfb128 "aes-256-cfb" #define NID_aes_256_cfb128 429 #define OBJ_aes_256_cfb128 OBJ_aes,44L #define SN_id_aes256_wrap "id-aes256-wrap" #define NID_id_aes256_wrap 790 #define OBJ_id_aes256_wrap OBJ_aes,45L #define SN_aes_256_gcm "id-aes256-GCM" #define LN_aes_256_gcm "aes-256-gcm" #define NID_aes_256_gcm 901 #define OBJ_aes_256_gcm OBJ_aes,46L #define SN_aes_256_ccm "id-aes256-CCM" #define LN_aes_256_ccm "aes-256-ccm" #define NID_aes_256_ccm 902 #define OBJ_aes_256_ccm OBJ_aes,47L #define SN_id_aes256_wrap_pad "id-aes256-wrap-pad" #define NID_id_aes256_wrap_pad 903 #define OBJ_id_aes256_wrap_pad OBJ_aes,48L #define SN_aes_128_cfb1 "AES-128-CFB1" #define LN_aes_128_cfb1 "aes-128-cfb1" #define NID_aes_128_cfb1 650 #define SN_aes_192_cfb1 "AES-192-CFB1" #define LN_aes_192_cfb1 "aes-192-cfb1" #define NID_aes_192_cfb1 651 #define SN_aes_256_cfb1 "AES-256-CFB1" #define LN_aes_256_cfb1 "aes-256-cfb1" #define NID_aes_256_cfb1 652 #define SN_aes_128_cfb8 "AES-128-CFB8" #define LN_aes_128_cfb8 "aes-128-cfb8" #define NID_aes_128_cfb8 653 #define SN_aes_192_cfb8 "AES-192-CFB8" #define LN_aes_192_cfb8 "aes-192-cfb8" #define NID_aes_192_cfb8 654 #define SN_aes_256_cfb8 "AES-256-CFB8" #define LN_aes_256_cfb8 "aes-256-cfb8" #define NID_aes_256_cfb8 655 #define SN_aes_128_ctr "AES-128-CTR" #define LN_aes_128_ctr "aes-128-ctr" #define NID_aes_128_ctr 904 #define SN_aes_192_ctr "AES-192-CTR" #define LN_aes_192_ctr "aes-192-ctr" #define NID_aes_192_ctr 905 #define SN_aes_256_ctr "AES-256-CTR" #define LN_aes_256_ctr "aes-256-ctr" #define NID_aes_256_ctr 906 #define SN_aes_128_xts "AES-128-XTS" #define LN_aes_128_xts "aes-128-xts" #define NID_aes_128_xts 913 #define SN_aes_256_xts "AES-256-XTS" #define LN_aes_256_xts "aes-256-xts" #define NID_aes_256_xts 914 #define SN_des_cfb1 "DES-CFB1" #define LN_des_cfb1 "des-cfb1" #define NID_des_cfb1 656 #define SN_des_cfb8 "DES-CFB8" #define LN_des_cfb8 "des-cfb8" #define NID_des_cfb8 657 #define SN_des_ede3_cfb1 "DES-EDE3-CFB1" #define LN_des_ede3_cfb1 "des-ede3-cfb1" #define NID_des_ede3_cfb1 658 #define SN_des_ede3_cfb8 "DES-EDE3-CFB8" #define LN_des_ede3_cfb8 "des-ede3-cfb8" #define NID_des_ede3_cfb8 659 #define OBJ_nist_hashalgs OBJ_nistAlgorithms,2L #define SN_sha256 "SHA256" #define LN_sha256 "sha256" #define NID_sha256 672 #define OBJ_sha256 OBJ_nist_hashalgs,1L #define SN_sha384 "SHA384" #define LN_sha384 "sha384" #define NID_sha384 673 #define OBJ_sha384 OBJ_nist_hashalgs,2L #define SN_sha512 "SHA512" #define LN_sha512 "sha512" #define NID_sha512 674 #define OBJ_sha512 OBJ_nist_hashalgs,3L #define SN_sha224 "SHA224" #define LN_sha224 "sha224" #define NID_sha224 675 #define OBJ_sha224 OBJ_nist_hashalgs,4L #define OBJ_dsa_with_sha2 OBJ_nistAlgorithms,3L #define SN_dsa_with_SHA224 "dsa_with_SHA224" #define NID_dsa_with_SHA224 802 #define OBJ_dsa_with_SHA224 OBJ_dsa_with_sha2,1L #define SN_dsa_with_SHA256 "dsa_with_SHA256" #define NID_dsa_with_SHA256 803 #define OBJ_dsa_with_SHA256 OBJ_dsa_with_sha2,2L #define SN_hold_instruction_code "holdInstructionCode" #define LN_hold_instruction_code "Hold Instruction Code" #define NID_hold_instruction_code 430 #define OBJ_hold_instruction_code OBJ_id_ce,23L #define OBJ_holdInstruction OBJ_X9_57,2L #define SN_hold_instruction_none "holdInstructionNone" #define LN_hold_instruction_none "Hold Instruction None" #define NID_hold_instruction_none 431 #define OBJ_hold_instruction_none OBJ_holdInstruction,1L #define SN_hold_instruction_call_issuer "holdInstructionCallIssuer" #define LN_hold_instruction_call_issuer "Hold Instruction Call Issuer" #define NID_hold_instruction_call_issuer 432 #define OBJ_hold_instruction_call_issuer OBJ_holdInstruction,2L #define SN_hold_instruction_reject "holdInstructionReject" #define LN_hold_instruction_reject "Hold Instruction Reject" #define NID_hold_instruction_reject 433 #define OBJ_hold_instruction_reject OBJ_holdInstruction,3L #define SN_data "data" #define NID_data 434 #define OBJ_data OBJ_itu_t,9L #define SN_pss "pss" #define NID_pss 435 #define OBJ_pss OBJ_data,2342L #define SN_ucl "ucl" #define NID_ucl 436 #define OBJ_ucl OBJ_pss,19200300L #define SN_pilot "pilot" #define NID_pilot 437 #define OBJ_pilot OBJ_ucl,100L #define LN_pilotAttributeType "pilotAttributeType" #define NID_pilotAttributeType 438 #define OBJ_pilotAttributeType OBJ_pilot,1L #define LN_pilotAttributeSyntax "pilotAttributeSyntax" #define NID_pilotAttributeSyntax 439 #define OBJ_pilotAttributeSyntax OBJ_pilot,3L #define LN_pilotObjectClass "pilotObjectClass" #define NID_pilotObjectClass 440 #define OBJ_pilotObjectClass OBJ_pilot,4L #define LN_pilotGroups "pilotGroups" #define NID_pilotGroups 441 #define OBJ_pilotGroups OBJ_pilot,10L #define LN_iA5StringSyntax "iA5StringSyntax" #define NID_iA5StringSyntax 442 #define OBJ_iA5StringSyntax OBJ_pilotAttributeSyntax,4L #define LN_caseIgnoreIA5StringSyntax "caseIgnoreIA5StringSyntax" #define NID_caseIgnoreIA5StringSyntax 443 #define OBJ_caseIgnoreIA5StringSyntax OBJ_pilotAttributeSyntax,5L #define LN_pilotObject "pilotObject" #define NID_pilotObject 444 #define OBJ_pilotObject OBJ_pilotObjectClass,3L #define LN_pilotPerson "pilotPerson" #define NID_pilotPerson 445 #define OBJ_pilotPerson OBJ_pilotObjectClass,4L #define SN_account "account" #define NID_account 446 #define OBJ_account OBJ_pilotObjectClass,5L #define SN_document "document" #define NID_document 447 #define OBJ_document OBJ_pilotObjectClass,6L #define SN_room "room" #define NID_room 448 #define OBJ_room OBJ_pilotObjectClass,7L #define LN_documentSeries "documentSeries" #define NID_documentSeries 449 #define OBJ_documentSeries OBJ_pilotObjectClass,9L #define SN_Domain "domain" #define LN_Domain "Domain" #define NID_Domain 392 #define OBJ_Domain OBJ_pilotObjectClass,13L #define LN_rFC822localPart "rFC822localPart" #define NID_rFC822localPart 450 #define OBJ_rFC822localPart OBJ_pilotObjectClass,14L #define LN_dNSDomain "dNSDomain" #define NID_dNSDomain 451 #define OBJ_dNSDomain OBJ_pilotObjectClass,15L #define LN_domainRelatedObject "domainRelatedObject" #define NID_domainRelatedObject 452 #define OBJ_domainRelatedObject OBJ_pilotObjectClass,17L #define LN_friendlyCountry "friendlyCountry" #define NID_friendlyCountry 453 #define OBJ_friendlyCountry OBJ_pilotObjectClass,18L #define LN_simpleSecurityObject "simpleSecurityObject" #define NID_simpleSecurityObject 454 #define OBJ_simpleSecurityObject OBJ_pilotObjectClass,19L #define LN_pilotOrganization "pilotOrganization" #define NID_pilotOrganization 455 #define OBJ_pilotOrganization OBJ_pilotObjectClass,20L #define LN_pilotDSA "pilotDSA" #define NID_pilotDSA 456 #define OBJ_pilotDSA OBJ_pilotObjectClass,21L #define LN_qualityLabelledData "qualityLabelledData" #define NID_qualityLabelledData 457 #define OBJ_qualityLabelledData OBJ_pilotObjectClass,22L #define SN_userId "UID" #define LN_userId "userId" #define NID_userId 458 #define OBJ_userId OBJ_pilotAttributeType,1L #define LN_textEncodedORAddress "textEncodedORAddress" #define NID_textEncodedORAddress 459 #define OBJ_textEncodedORAddress OBJ_pilotAttributeType,2L #define SN_rfc822Mailbox "mail" #define LN_rfc822Mailbox "rfc822Mailbox" #define NID_rfc822Mailbox 460 #define OBJ_rfc822Mailbox OBJ_pilotAttributeType,3L #define SN_info "info" #define NID_info 461 #define OBJ_info OBJ_pilotAttributeType,4L #define LN_favouriteDrink "favouriteDrink" #define NID_favouriteDrink 462 #define OBJ_favouriteDrink OBJ_pilotAttributeType,5L #define LN_roomNumber "roomNumber" #define NID_roomNumber 463 #define OBJ_roomNumber OBJ_pilotAttributeType,6L #define SN_photo "photo" #define NID_photo 464 #define OBJ_photo OBJ_pilotAttributeType,7L #define LN_userClass "userClass" #define NID_userClass 465 #define OBJ_userClass OBJ_pilotAttributeType,8L #define SN_host "host" #define NID_host 466 #define OBJ_host OBJ_pilotAttributeType,9L #define SN_manager "manager" #define NID_manager 467 #define OBJ_manager OBJ_pilotAttributeType,10L #define LN_documentIdentifier "documentIdentifier" #define NID_documentIdentifier 468 #define OBJ_documentIdentifier OBJ_pilotAttributeType,11L #define LN_documentTitle "documentTitle" #define NID_documentTitle 469 #define OBJ_documentTitle OBJ_pilotAttributeType,12L #define LN_documentVersion "documentVersion" #define NID_documentVersion 470 #define OBJ_documentVersion OBJ_pilotAttributeType,13L #define LN_documentAuthor "documentAuthor" #define NID_documentAuthor 471 #define OBJ_documentAuthor OBJ_pilotAttributeType,14L #define LN_documentLocation "documentLocation" #define NID_documentLocation 472 #define OBJ_documentLocation OBJ_pilotAttributeType,15L #define LN_homeTelephoneNumber "homeTelephoneNumber" #define NID_homeTelephoneNumber 473 #define OBJ_homeTelephoneNumber OBJ_pilotAttributeType,20L #define SN_secretary "secretary" #define NID_secretary 474 #define OBJ_secretary OBJ_pilotAttributeType,21L #define LN_otherMailbox "otherMailbox" #define NID_otherMailbox 475 #define OBJ_otherMailbox OBJ_pilotAttributeType,22L #define LN_lastModifiedTime "lastModifiedTime" #define NID_lastModifiedTime 476 #define OBJ_lastModifiedTime OBJ_pilotAttributeType,23L #define LN_lastModifiedBy "lastModifiedBy" #define NID_lastModifiedBy 477 #define OBJ_lastModifiedBy OBJ_pilotAttributeType,24L #define SN_domainComponent "DC" #define LN_domainComponent "domainComponent" #define NID_domainComponent 391 #define OBJ_domainComponent OBJ_pilotAttributeType,25L #define LN_aRecord "aRecord" #define NID_aRecord 478 #define OBJ_aRecord OBJ_pilotAttributeType,26L #define LN_pilotAttributeType27 "pilotAttributeType27" #define NID_pilotAttributeType27 479 #define OBJ_pilotAttributeType27 OBJ_pilotAttributeType,27L #define LN_mXRecord "mXRecord" #define NID_mXRecord 480 #define OBJ_mXRecord OBJ_pilotAttributeType,28L #define LN_nSRecord "nSRecord" #define NID_nSRecord 481 #define OBJ_nSRecord OBJ_pilotAttributeType,29L #define LN_sOARecord "sOARecord" #define NID_sOARecord 482 #define OBJ_sOARecord OBJ_pilotAttributeType,30L #define LN_cNAMERecord "cNAMERecord" #define NID_cNAMERecord 483 #define OBJ_cNAMERecord OBJ_pilotAttributeType,31L #define LN_associatedDomain "associatedDomain" #define NID_associatedDomain 484 #define OBJ_associatedDomain OBJ_pilotAttributeType,37L #define LN_associatedName "associatedName" #define NID_associatedName 485 #define OBJ_associatedName OBJ_pilotAttributeType,38L #define LN_homePostalAddress "homePostalAddress" #define NID_homePostalAddress 486 #define OBJ_homePostalAddress OBJ_pilotAttributeType,39L #define LN_personalTitle "personalTitle" #define NID_personalTitle 487 #define OBJ_personalTitle OBJ_pilotAttributeType,40L #define LN_mobileTelephoneNumber "mobileTelephoneNumber" #define NID_mobileTelephoneNumber 488 #define OBJ_mobileTelephoneNumber OBJ_pilotAttributeType,41L #define LN_pagerTelephoneNumber "pagerTelephoneNumber" #define NID_pagerTelephoneNumber 489 #define OBJ_pagerTelephoneNumber OBJ_pilotAttributeType,42L #define LN_friendlyCountryName "friendlyCountryName" #define NID_friendlyCountryName 490 #define OBJ_friendlyCountryName OBJ_pilotAttributeType,43L #define LN_organizationalStatus "organizationalStatus" #define NID_organizationalStatus 491 #define OBJ_organizationalStatus OBJ_pilotAttributeType,45L #define LN_janetMailbox "janetMailbox" #define NID_janetMailbox 492 #define OBJ_janetMailbox OBJ_pilotAttributeType,46L #define LN_mailPreferenceOption "mailPreferenceOption" #define NID_mailPreferenceOption 493 #define OBJ_mailPreferenceOption OBJ_pilotAttributeType,47L #define LN_buildingName "buildingName" #define NID_buildingName 494 #define OBJ_buildingName OBJ_pilotAttributeType,48L #define LN_dSAQuality "dSAQuality" #define NID_dSAQuality 495 #define OBJ_dSAQuality OBJ_pilotAttributeType,49L #define LN_singleLevelQuality "singleLevelQuality" #define NID_singleLevelQuality 496 #define OBJ_singleLevelQuality OBJ_pilotAttributeType,50L #define LN_subtreeMinimumQuality "subtreeMinimumQuality" #define NID_subtreeMinimumQuality 497 #define OBJ_subtreeMinimumQuality OBJ_pilotAttributeType,51L #define LN_subtreeMaximumQuality "subtreeMaximumQuality" #define NID_subtreeMaximumQuality 498 #define OBJ_subtreeMaximumQuality OBJ_pilotAttributeType,52L #define LN_personalSignature "personalSignature" #define NID_personalSignature 499 #define OBJ_personalSignature OBJ_pilotAttributeType,53L #define LN_dITRedirect "dITRedirect" #define NID_dITRedirect 500 #define OBJ_dITRedirect OBJ_pilotAttributeType,54L #define SN_audio "audio" #define NID_audio 501 #define OBJ_audio OBJ_pilotAttributeType,55L #define LN_documentPublisher "documentPublisher" #define NID_documentPublisher 502 #define OBJ_documentPublisher OBJ_pilotAttributeType,56L #define SN_id_set "id-set" #define LN_id_set "Secure Electronic Transactions" #define NID_id_set 512 #define OBJ_id_set OBJ_international_organizations,42L #define SN_set_ctype "set-ctype" #define LN_set_ctype "content types" #define NID_set_ctype 513 #define OBJ_set_ctype OBJ_id_set,0L #define SN_set_msgExt "set-msgExt" #define LN_set_msgExt "message extensions" #define NID_set_msgExt 514 #define OBJ_set_msgExt OBJ_id_set,1L #define SN_set_attr "set-attr" #define NID_set_attr 515 #define OBJ_set_attr OBJ_id_set,3L #define SN_set_policy "set-policy" #define NID_set_policy 516 #define OBJ_set_policy OBJ_id_set,5L #define SN_set_certExt "set-certExt" #define LN_set_certExt "certificate extensions" #define NID_set_certExt 517 #define OBJ_set_certExt OBJ_id_set,7L #define SN_set_brand "set-brand" #define NID_set_brand 518 #define OBJ_set_brand OBJ_id_set,8L #define SN_setct_PANData "setct-PANData" #define NID_setct_PANData 519 #define OBJ_setct_PANData OBJ_set_ctype,0L #define SN_setct_PANToken "setct-PANToken" #define NID_setct_PANToken 520 #define OBJ_setct_PANToken OBJ_set_ctype,1L #define SN_setct_PANOnly "setct-PANOnly" #define NID_setct_PANOnly 521 #define OBJ_setct_PANOnly OBJ_set_ctype,2L #define SN_setct_OIData "setct-OIData" #define NID_setct_OIData 522 #define OBJ_setct_OIData OBJ_set_ctype,3L #define SN_setct_PI "setct-PI" #define NID_setct_PI 523 #define OBJ_setct_PI OBJ_set_ctype,4L #define SN_setct_PIData "setct-PIData" #define NID_setct_PIData 524 #define OBJ_setct_PIData OBJ_set_ctype,5L #define SN_setct_PIDataUnsigned "setct-PIDataUnsigned" #define NID_setct_PIDataUnsigned 525 #define OBJ_setct_PIDataUnsigned OBJ_set_ctype,6L #define SN_setct_HODInput "setct-HODInput" #define NID_setct_HODInput 526 #define OBJ_setct_HODInput OBJ_set_ctype,7L #define SN_setct_AuthResBaggage "setct-AuthResBaggage" #define NID_setct_AuthResBaggage 527 #define OBJ_setct_AuthResBaggage OBJ_set_ctype,8L #define SN_setct_AuthRevReqBaggage "setct-AuthRevReqBaggage" #define NID_setct_AuthRevReqBaggage 528 #define OBJ_setct_AuthRevReqBaggage OBJ_set_ctype,9L #define SN_setct_AuthRevResBaggage "setct-AuthRevResBaggage" #define NID_setct_AuthRevResBaggage 529 #define OBJ_setct_AuthRevResBaggage OBJ_set_ctype,10L #define SN_setct_CapTokenSeq "setct-CapTokenSeq" #define NID_setct_CapTokenSeq 530 #define OBJ_setct_CapTokenSeq OBJ_set_ctype,11L #define SN_setct_PInitResData "setct-PInitResData" #define NID_setct_PInitResData 531 #define OBJ_setct_PInitResData OBJ_set_ctype,12L #define SN_setct_PI_TBS "setct-PI-TBS" #define NID_setct_PI_TBS 532 #define OBJ_setct_PI_TBS OBJ_set_ctype,13L #define SN_setct_PResData "setct-PResData" #define NID_setct_PResData 533 #define OBJ_setct_PResData OBJ_set_ctype,14L #define SN_setct_AuthReqTBS "setct-AuthReqTBS" #define NID_setct_AuthReqTBS 534 #define OBJ_setct_AuthReqTBS OBJ_set_ctype,16L #define SN_setct_AuthResTBS "setct-AuthResTBS" #define NID_setct_AuthResTBS 535 #define OBJ_setct_AuthResTBS OBJ_set_ctype,17L #define SN_setct_AuthResTBSX "setct-AuthResTBSX" #define NID_setct_AuthResTBSX 536 #define OBJ_setct_AuthResTBSX OBJ_set_ctype,18L #define SN_setct_AuthTokenTBS "setct-AuthTokenTBS" #define NID_setct_AuthTokenTBS 537 #define OBJ_setct_AuthTokenTBS OBJ_set_ctype,19L #define SN_setct_CapTokenData "setct-CapTokenData" #define NID_setct_CapTokenData 538 #define OBJ_setct_CapTokenData OBJ_set_ctype,20L #define SN_setct_CapTokenTBS "setct-CapTokenTBS" #define NID_setct_CapTokenTBS 539 #define OBJ_setct_CapTokenTBS OBJ_set_ctype,21L #define SN_setct_AcqCardCodeMsg "setct-AcqCardCodeMsg" #define NID_setct_AcqCardCodeMsg 540 #define OBJ_setct_AcqCardCodeMsg OBJ_set_ctype,22L #define SN_setct_AuthRevReqTBS "setct-AuthRevReqTBS" #define NID_setct_AuthRevReqTBS 541 #define OBJ_setct_AuthRevReqTBS OBJ_set_ctype,23L #define SN_setct_AuthRevResData "setct-AuthRevResData" #define NID_setct_AuthRevResData 542 #define OBJ_setct_AuthRevResData OBJ_set_ctype,24L #define SN_setct_AuthRevResTBS "setct-AuthRevResTBS" #define NID_setct_AuthRevResTBS 543 #define OBJ_setct_AuthRevResTBS OBJ_set_ctype,25L #define SN_setct_CapReqTBS "setct-CapReqTBS" #define NID_setct_CapReqTBS 544 #define OBJ_setct_CapReqTBS OBJ_set_ctype,26L #define SN_setct_CapReqTBSX "setct-CapReqTBSX" #define NID_setct_CapReqTBSX 545 #define OBJ_setct_CapReqTBSX OBJ_set_ctype,27L #define SN_setct_CapResData "setct-CapResData" #define NID_setct_CapResData 546 #define OBJ_setct_CapResData OBJ_set_ctype,28L #define SN_setct_CapRevReqTBS "setct-CapRevReqTBS" #define NID_setct_CapRevReqTBS 547 #define OBJ_setct_CapRevReqTBS OBJ_set_ctype,29L #define SN_setct_CapRevReqTBSX "setct-CapRevReqTBSX" #define NID_setct_CapRevReqTBSX 548 #define OBJ_setct_CapRevReqTBSX OBJ_set_ctype,30L #define SN_setct_CapRevResData "setct-CapRevResData" #define NID_setct_CapRevResData 549 #define OBJ_setct_CapRevResData OBJ_set_ctype,31L #define SN_setct_CredReqTBS "setct-CredReqTBS" #define NID_setct_CredReqTBS 550 #define OBJ_setct_CredReqTBS OBJ_set_ctype,32L #define SN_setct_CredReqTBSX "setct-CredReqTBSX" #define NID_setct_CredReqTBSX 551 #define OBJ_setct_CredReqTBSX OBJ_set_ctype,33L #define SN_setct_CredResData "setct-CredResData" #define NID_setct_CredResData 552 #define OBJ_setct_CredResData OBJ_set_ctype,34L #define SN_setct_CredRevReqTBS "setct-CredRevReqTBS" #define NID_setct_CredRevReqTBS 553 #define OBJ_setct_CredRevReqTBS OBJ_set_ctype,35L #define SN_setct_CredRevReqTBSX "setct-CredRevReqTBSX" #define NID_setct_CredRevReqTBSX 554 #define OBJ_setct_CredRevReqTBSX OBJ_set_ctype,36L #define SN_setct_CredRevResData "setct-CredRevResData" #define NID_setct_CredRevResData 555 #define OBJ_setct_CredRevResData OBJ_set_ctype,37L #define SN_setct_PCertReqData "setct-PCertReqData" #define NID_setct_PCertReqData 556 #define OBJ_setct_PCertReqData OBJ_set_ctype,38L #define SN_setct_PCertResTBS "setct-PCertResTBS" #define NID_setct_PCertResTBS 557 #define OBJ_setct_PCertResTBS OBJ_set_ctype,39L #define SN_setct_BatchAdminReqData "setct-BatchAdminReqData" #define NID_setct_BatchAdminReqData 558 #define OBJ_setct_BatchAdminReqData OBJ_set_ctype,40L #define SN_setct_BatchAdminResData "setct-BatchAdminResData" #define NID_setct_BatchAdminResData 559 #define OBJ_setct_BatchAdminResData OBJ_set_ctype,41L #define SN_setct_CardCInitResTBS "setct-CardCInitResTBS" #define NID_setct_CardCInitResTBS 560 #define OBJ_setct_CardCInitResTBS OBJ_set_ctype,42L #define SN_setct_MeAqCInitResTBS "setct-MeAqCInitResTBS" #define NID_setct_MeAqCInitResTBS 561 #define OBJ_setct_MeAqCInitResTBS OBJ_set_ctype,43L #define SN_setct_RegFormResTBS "setct-RegFormResTBS" #define NID_setct_RegFormResTBS 562 #define OBJ_setct_RegFormResTBS OBJ_set_ctype,44L #define SN_setct_CertReqData "setct-CertReqData" #define NID_setct_CertReqData 563 #define OBJ_setct_CertReqData OBJ_set_ctype,45L #define SN_setct_CertReqTBS "setct-CertReqTBS" #define NID_setct_CertReqTBS 564 #define OBJ_setct_CertReqTBS OBJ_set_ctype,46L #define SN_setct_CertResData "setct-CertResData" #define NID_setct_CertResData 565 #define OBJ_setct_CertResData OBJ_set_ctype,47L #define SN_setct_CertInqReqTBS "setct-CertInqReqTBS" #define NID_setct_CertInqReqTBS 566 #define OBJ_setct_CertInqReqTBS OBJ_set_ctype,48L #define SN_setct_ErrorTBS "setct-ErrorTBS" #define NID_setct_ErrorTBS 567 #define OBJ_setct_ErrorTBS OBJ_set_ctype,49L #define SN_setct_PIDualSignedTBE "setct-PIDualSignedTBE" #define NID_setct_PIDualSignedTBE 568 #define OBJ_setct_PIDualSignedTBE OBJ_set_ctype,50L #define SN_setct_PIUnsignedTBE "setct-PIUnsignedTBE" #define NID_setct_PIUnsignedTBE 569 #define OBJ_setct_PIUnsignedTBE OBJ_set_ctype,51L #define SN_setct_AuthReqTBE "setct-AuthReqTBE" #define NID_setct_AuthReqTBE 570 #define OBJ_setct_AuthReqTBE OBJ_set_ctype,52L #define SN_setct_AuthResTBE "setct-AuthResTBE" #define NID_setct_AuthResTBE 571 #define OBJ_setct_AuthResTBE OBJ_set_ctype,53L #define SN_setct_AuthResTBEX "setct-AuthResTBEX" #define NID_setct_AuthResTBEX 572 #define OBJ_setct_AuthResTBEX OBJ_set_ctype,54L #define SN_setct_AuthTokenTBE "setct-AuthTokenTBE" #define NID_setct_AuthTokenTBE 573 #define OBJ_setct_AuthTokenTBE OBJ_set_ctype,55L #define SN_setct_CapTokenTBE "setct-CapTokenTBE" #define NID_setct_CapTokenTBE 574 #define OBJ_setct_CapTokenTBE OBJ_set_ctype,56L #define SN_setct_CapTokenTBEX "setct-CapTokenTBEX" #define NID_setct_CapTokenTBEX 575 #define OBJ_setct_CapTokenTBEX OBJ_set_ctype,57L #define SN_setct_AcqCardCodeMsgTBE "setct-AcqCardCodeMsgTBE" #define NID_setct_AcqCardCodeMsgTBE 576 #define OBJ_setct_AcqCardCodeMsgTBE OBJ_set_ctype,58L #define SN_setct_AuthRevReqTBE "setct-AuthRevReqTBE" #define NID_setct_AuthRevReqTBE 577 #define OBJ_setct_AuthRevReqTBE OBJ_set_ctype,59L #define SN_setct_AuthRevResTBE "setct-AuthRevResTBE" #define NID_setct_AuthRevResTBE 578 #define OBJ_setct_AuthRevResTBE OBJ_set_ctype,60L #define SN_setct_AuthRevResTBEB "setct-AuthRevResTBEB" #define NID_setct_AuthRevResTBEB 579 #define OBJ_setct_AuthRevResTBEB OBJ_set_ctype,61L #define SN_setct_CapReqTBE "setct-CapReqTBE" #define NID_setct_CapReqTBE 580 #define OBJ_setct_CapReqTBE OBJ_set_ctype,62L #define SN_setct_CapReqTBEX "setct-CapReqTBEX" #define NID_setct_CapReqTBEX 581 #define OBJ_setct_CapReqTBEX OBJ_set_ctype,63L #define SN_setct_CapResTBE "setct-CapResTBE" #define NID_setct_CapResTBE 582 #define OBJ_setct_CapResTBE OBJ_set_ctype,64L #define SN_setct_CapRevReqTBE "setct-CapRevReqTBE" #define NID_setct_CapRevReqTBE 583 #define OBJ_setct_CapRevReqTBE OBJ_set_ctype,65L #define SN_setct_CapRevReqTBEX "setct-CapRevReqTBEX" #define NID_setct_CapRevReqTBEX 584 #define OBJ_setct_CapRevReqTBEX OBJ_set_ctype,66L #define SN_setct_CapRevResTBE "setct-CapRevResTBE" #define NID_setct_CapRevResTBE 585 #define OBJ_setct_CapRevResTBE OBJ_set_ctype,67L #define SN_setct_CredReqTBE "setct-CredReqTBE" #define NID_setct_CredReqTBE 586 #define OBJ_setct_CredReqTBE OBJ_set_ctype,68L #define SN_setct_CredReqTBEX "setct-CredReqTBEX" #define NID_setct_CredReqTBEX 587 #define OBJ_setct_CredReqTBEX OBJ_set_ctype,69L #define SN_setct_CredResTBE "setct-CredResTBE" #define NID_setct_CredResTBE 588 #define OBJ_setct_CredResTBE OBJ_set_ctype,70L #define SN_setct_CredRevReqTBE "setct-CredRevReqTBE" #define NID_setct_CredRevReqTBE 589 #define OBJ_setct_CredRevReqTBE OBJ_set_ctype,71L #define SN_setct_CredRevReqTBEX "setct-CredRevReqTBEX" #define NID_setct_CredRevReqTBEX 590 #define OBJ_setct_CredRevReqTBEX OBJ_set_ctype,72L #define SN_setct_CredRevResTBE "setct-CredRevResTBE" #define NID_setct_CredRevResTBE 591 #define OBJ_setct_CredRevResTBE OBJ_set_ctype,73L #define SN_setct_BatchAdminReqTBE "setct-BatchAdminReqTBE" #define NID_setct_BatchAdminReqTBE 592 #define OBJ_setct_BatchAdminReqTBE OBJ_set_ctype,74L #define SN_setct_BatchAdminResTBE "setct-BatchAdminResTBE" #define NID_setct_BatchAdminResTBE 593 #define OBJ_setct_BatchAdminResTBE OBJ_set_ctype,75L #define SN_setct_RegFormReqTBE "setct-RegFormReqTBE" #define NID_setct_RegFormReqTBE 594 #define OBJ_setct_RegFormReqTBE OBJ_set_ctype,76L #define SN_setct_CertReqTBE "setct-CertReqTBE" #define NID_setct_CertReqTBE 595 #define OBJ_setct_CertReqTBE OBJ_set_ctype,77L #define SN_setct_CertReqTBEX "setct-CertReqTBEX" #define NID_setct_CertReqTBEX 596 #define OBJ_setct_CertReqTBEX OBJ_set_ctype,78L #define SN_setct_CertResTBE "setct-CertResTBE" #define NID_setct_CertResTBE 597 #define OBJ_setct_CertResTBE OBJ_set_ctype,79L #define SN_setct_CRLNotificationTBS "setct-CRLNotificationTBS" #define NID_setct_CRLNotificationTBS 598 #define OBJ_setct_CRLNotificationTBS OBJ_set_ctype,80L #define SN_setct_CRLNotificationResTBS "setct-CRLNotificationResTBS" #define NID_setct_CRLNotificationResTBS 599 #define OBJ_setct_CRLNotificationResTBS OBJ_set_ctype,81L #define SN_setct_BCIDistributionTBS "setct-BCIDistributionTBS" #define NID_setct_BCIDistributionTBS 600 #define OBJ_setct_BCIDistributionTBS OBJ_set_ctype,82L #define SN_setext_genCrypt "setext-genCrypt" #define LN_setext_genCrypt "generic cryptogram" #define NID_setext_genCrypt 601 #define OBJ_setext_genCrypt OBJ_set_msgExt,1L #define SN_setext_miAuth "setext-miAuth" #define LN_setext_miAuth "merchant initiated auth" #define NID_setext_miAuth 602 #define OBJ_setext_miAuth OBJ_set_msgExt,3L #define SN_setext_pinSecure "setext-pinSecure" #define NID_setext_pinSecure 603 #define OBJ_setext_pinSecure OBJ_set_msgExt,4L #define SN_setext_pinAny "setext-pinAny" #define NID_setext_pinAny 604 #define OBJ_setext_pinAny OBJ_set_msgExt,5L #define SN_setext_track2 "setext-track2" #define NID_setext_track2 605 #define OBJ_setext_track2 OBJ_set_msgExt,7L #define SN_setext_cv "setext-cv" #define LN_setext_cv "additional verification" #define NID_setext_cv 606 #define OBJ_setext_cv OBJ_set_msgExt,8L #define SN_set_policy_root "set-policy-root" #define NID_set_policy_root 607 #define OBJ_set_policy_root OBJ_set_policy,0L #define SN_setCext_hashedRoot "setCext-hashedRoot" #define NID_setCext_hashedRoot 608 #define OBJ_setCext_hashedRoot OBJ_set_certExt,0L #define SN_setCext_certType "setCext-certType" #define NID_setCext_certType 609 #define OBJ_setCext_certType OBJ_set_certExt,1L #define SN_setCext_merchData "setCext-merchData" #define NID_setCext_merchData 610 #define OBJ_setCext_merchData OBJ_set_certExt,2L #define SN_setCext_cCertRequired "setCext-cCertRequired" #define NID_setCext_cCertRequired 611 #define OBJ_setCext_cCertRequired OBJ_set_certExt,3L #define SN_setCext_tunneling "setCext-tunneling" #define NID_setCext_tunneling 612 #define OBJ_setCext_tunneling OBJ_set_certExt,4L #define SN_setCext_setExt "setCext-setExt" #define NID_setCext_setExt 613 #define OBJ_setCext_setExt OBJ_set_certExt,5L #define SN_setCext_setQualf "setCext-setQualf" #define NID_setCext_setQualf 614 #define OBJ_setCext_setQualf OBJ_set_certExt,6L #define SN_setCext_PGWYcapabilities "setCext-PGWYcapabilities" #define NID_setCext_PGWYcapabilities 615 #define OBJ_setCext_PGWYcapabilities OBJ_set_certExt,7L #define SN_setCext_TokenIdentifier "setCext-TokenIdentifier" #define NID_setCext_TokenIdentifier 616 #define OBJ_setCext_TokenIdentifier OBJ_set_certExt,8L #define SN_setCext_Track2Data "setCext-Track2Data" #define NID_setCext_Track2Data 617 #define OBJ_setCext_Track2Data OBJ_set_certExt,9L #define SN_setCext_TokenType "setCext-TokenType" #define NID_setCext_TokenType 618 #define OBJ_setCext_TokenType OBJ_set_certExt,10L #define SN_setCext_IssuerCapabilities "setCext-IssuerCapabilities" #define NID_setCext_IssuerCapabilities 619 #define OBJ_setCext_IssuerCapabilities OBJ_set_certExt,11L #define SN_setAttr_Cert "setAttr-Cert" #define NID_setAttr_Cert 620 #define OBJ_setAttr_Cert OBJ_set_attr,0L #define SN_setAttr_PGWYcap "setAttr-PGWYcap" #define LN_setAttr_PGWYcap "payment gateway capabilities" #define NID_setAttr_PGWYcap 621 #define OBJ_setAttr_PGWYcap OBJ_set_attr,1L #define SN_setAttr_TokenType "setAttr-TokenType" #define NID_setAttr_TokenType 622 #define OBJ_setAttr_TokenType OBJ_set_attr,2L #define SN_setAttr_IssCap "setAttr-IssCap" #define LN_setAttr_IssCap "issuer capabilities" #define NID_setAttr_IssCap 623 #define OBJ_setAttr_IssCap OBJ_set_attr,3L #define SN_set_rootKeyThumb "set-rootKeyThumb" #define NID_set_rootKeyThumb 624 #define OBJ_set_rootKeyThumb OBJ_setAttr_Cert,0L #define SN_set_addPolicy "set-addPolicy" #define NID_set_addPolicy 625 #define OBJ_set_addPolicy OBJ_setAttr_Cert,1L #define SN_setAttr_Token_EMV "setAttr-Token-EMV" #define NID_setAttr_Token_EMV 626 #define OBJ_setAttr_Token_EMV OBJ_setAttr_TokenType,1L #define SN_setAttr_Token_B0Prime "setAttr-Token-B0Prime" #define NID_setAttr_Token_B0Prime 627 #define OBJ_setAttr_Token_B0Prime OBJ_setAttr_TokenType,2L #define SN_setAttr_IssCap_CVM "setAttr-IssCap-CVM" #define NID_setAttr_IssCap_CVM 628 #define OBJ_setAttr_IssCap_CVM OBJ_setAttr_IssCap,3L #define SN_setAttr_IssCap_T2 "setAttr-IssCap-T2" #define NID_setAttr_IssCap_T2 629 #define OBJ_setAttr_IssCap_T2 OBJ_setAttr_IssCap,4L #define SN_setAttr_IssCap_Sig "setAttr-IssCap-Sig" #define NID_setAttr_IssCap_Sig 630 #define OBJ_setAttr_IssCap_Sig OBJ_setAttr_IssCap,5L #define SN_setAttr_GenCryptgrm "setAttr-GenCryptgrm" #define LN_setAttr_GenCryptgrm "generate cryptogram" #define NID_setAttr_GenCryptgrm 631 #define OBJ_setAttr_GenCryptgrm OBJ_setAttr_IssCap_CVM,1L #define SN_setAttr_T2Enc "setAttr-T2Enc" #define LN_setAttr_T2Enc "encrypted track 2" #define NID_setAttr_T2Enc 632 #define OBJ_setAttr_T2Enc OBJ_setAttr_IssCap_T2,1L #define SN_setAttr_T2cleartxt "setAttr-T2cleartxt" #define LN_setAttr_T2cleartxt "cleartext track 2" #define NID_setAttr_T2cleartxt 633 #define OBJ_setAttr_T2cleartxt OBJ_setAttr_IssCap_T2,2L #define SN_setAttr_TokICCsig "setAttr-TokICCsig" #define LN_setAttr_TokICCsig "ICC or token signature" #define NID_setAttr_TokICCsig 634 #define OBJ_setAttr_TokICCsig OBJ_setAttr_IssCap_Sig,1L #define SN_setAttr_SecDevSig "setAttr-SecDevSig" #define LN_setAttr_SecDevSig "secure device signature" #define NID_setAttr_SecDevSig 635 #define OBJ_setAttr_SecDevSig OBJ_setAttr_IssCap_Sig,2L #define SN_set_brand_IATA_ATA "set-brand-IATA-ATA" #define NID_set_brand_IATA_ATA 636 #define OBJ_set_brand_IATA_ATA OBJ_set_brand,1L #define SN_set_brand_Diners "set-brand-Diners" #define NID_set_brand_Diners 637 #define OBJ_set_brand_Diners OBJ_set_brand,30L #define SN_set_brand_AmericanExpress "set-brand-AmericanExpress" #define NID_set_brand_AmericanExpress 638 #define OBJ_set_brand_AmericanExpress OBJ_set_brand,34L #define SN_set_brand_JCB "set-brand-JCB" #define NID_set_brand_JCB 639 #define OBJ_set_brand_JCB OBJ_set_brand,35L #define SN_set_brand_Visa "set-brand-Visa" #define NID_set_brand_Visa 640 #define OBJ_set_brand_Visa OBJ_set_brand,4L #define SN_set_brand_MasterCard "set-brand-MasterCard" #define NID_set_brand_MasterCard 641 #define OBJ_set_brand_MasterCard OBJ_set_brand,5L #define SN_set_brand_Novus "set-brand-Novus" #define NID_set_brand_Novus 642 #define OBJ_set_brand_Novus OBJ_set_brand,6011L #define SN_des_cdmf "DES-CDMF" #define LN_des_cdmf "des-cdmf" #define NID_des_cdmf 643 #define OBJ_des_cdmf OBJ_rsadsi,3L,10L #define SN_rsaOAEPEncryptionSET "rsaOAEPEncryptionSET" #define NID_rsaOAEPEncryptionSET 644 #define OBJ_rsaOAEPEncryptionSET OBJ_rsadsi,1L,1L,6L #define SN_ipsec3 "Oakley-EC2N-3" #define LN_ipsec3 "ipsec3" #define NID_ipsec3 749 #define SN_ipsec4 "Oakley-EC2N-4" #define LN_ipsec4 "ipsec4" #define NID_ipsec4 750 #define SN_whirlpool "whirlpool" #define NID_whirlpool 804 #define OBJ_whirlpool OBJ_iso,0L,10118L,3L,0L,55L #define SN_cryptopro "cryptopro" #define NID_cryptopro 805 #define OBJ_cryptopro OBJ_member_body,643L,2L,2L #define SN_cryptocom "cryptocom" #define NID_cryptocom 806 #define OBJ_cryptocom OBJ_member_body,643L,2L,9L #define SN_id_GostR3411_94_with_GostR3410_2001 "id-GostR3411-94-with-GostR3410-2001" #define LN_id_GostR3411_94_with_GostR3410_2001 "GOST R 34.11-94 with GOST R 34.10-2001" #define NID_id_GostR3411_94_with_GostR3410_2001 807 #define OBJ_id_GostR3411_94_with_GostR3410_2001 OBJ_cryptopro,3L #define SN_id_GostR3411_94_with_GostR3410_94 "id-GostR3411-94-with-GostR3410-94" #define LN_id_GostR3411_94_with_GostR3410_94 "GOST R 34.11-94 with GOST R 34.10-94" #define NID_id_GostR3411_94_with_GostR3410_94 808 #define OBJ_id_GostR3411_94_with_GostR3410_94 OBJ_cryptopro,4L #define SN_id_GostR3411_94 "md_gost94" #define LN_id_GostR3411_94 "GOST R 34.11-94" #define NID_id_GostR3411_94 809 #define OBJ_id_GostR3411_94 OBJ_cryptopro,9L #define SN_id_HMACGostR3411_94 "id-HMACGostR3411-94" #define LN_id_HMACGostR3411_94 "HMAC GOST 34.11-94" #define NID_id_HMACGostR3411_94 810 #define OBJ_id_HMACGostR3411_94 OBJ_cryptopro,10L #define SN_id_GostR3410_2001 "gost2001" #define LN_id_GostR3410_2001 "GOST R 34.10-2001" #define NID_id_GostR3410_2001 811 #define OBJ_id_GostR3410_2001 OBJ_cryptopro,19L #define SN_id_GostR3410_94 "gost94" #define LN_id_GostR3410_94 "GOST R 34.10-94" #define NID_id_GostR3410_94 812 #define OBJ_id_GostR3410_94 OBJ_cryptopro,20L #define SN_id_Gost28147_89 "gost89" #define LN_id_Gost28147_89 "GOST 28147-89" #define NID_id_Gost28147_89 813 #define OBJ_id_Gost28147_89 OBJ_cryptopro,21L #define SN_gost89_cnt "gost89-cnt" #define NID_gost89_cnt 814 #define SN_id_Gost28147_89_MAC "gost-mac" #define LN_id_Gost28147_89_MAC "GOST 28147-89 MAC" #define NID_id_Gost28147_89_MAC 815 #define OBJ_id_Gost28147_89_MAC OBJ_cryptopro,22L #define SN_id_GostR3411_94_prf "prf-gostr3411-94" #define LN_id_GostR3411_94_prf "GOST R 34.11-94 PRF" #define NID_id_GostR3411_94_prf 816 #define OBJ_id_GostR3411_94_prf OBJ_cryptopro,23L #define SN_id_GostR3410_2001DH "id-GostR3410-2001DH" #define LN_id_GostR3410_2001DH "GOST R 34.10-2001 DH" #define NID_id_GostR3410_2001DH 817 #define OBJ_id_GostR3410_2001DH OBJ_cryptopro,98L #define SN_id_GostR3410_94DH "id-GostR3410-94DH" #define LN_id_GostR3410_94DH "GOST R 34.10-94 DH" #define NID_id_GostR3410_94DH 818 #define OBJ_id_GostR3410_94DH OBJ_cryptopro,99L #define SN_id_Gost28147_89_CryptoPro_KeyMeshing "id-Gost28147-89-CryptoPro-KeyMeshing" #define NID_id_Gost28147_89_CryptoPro_KeyMeshing 819 #define OBJ_id_Gost28147_89_CryptoPro_KeyMeshing OBJ_cryptopro,14L,1L #define SN_id_Gost28147_89_None_KeyMeshing "id-Gost28147-89-None-KeyMeshing" #define NID_id_Gost28147_89_None_KeyMeshing 820 #define OBJ_id_Gost28147_89_None_KeyMeshing OBJ_cryptopro,14L,0L #define SN_id_GostR3411_94_TestParamSet "id-GostR3411-94-TestParamSet" #define NID_id_GostR3411_94_TestParamSet 821 #define OBJ_id_GostR3411_94_TestParamSet OBJ_cryptopro,30L,0L #define SN_id_GostR3411_94_CryptoProParamSet "id-GostR3411-94-CryptoProParamSet" #define NID_id_GostR3411_94_CryptoProParamSet 822 #define OBJ_id_GostR3411_94_CryptoProParamSet OBJ_cryptopro,30L,1L #define SN_id_Gost28147_89_TestParamSet "id-Gost28147-89-TestParamSet" #define NID_id_Gost28147_89_TestParamSet 823 #define OBJ_id_Gost28147_89_TestParamSet OBJ_cryptopro,31L,0L #define SN_id_Gost28147_89_CryptoPro_A_ParamSet "id-Gost28147-89-CryptoPro-A-ParamSet" #define NID_id_Gost28147_89_CryptoPro_A_ParamSet 824 #define OBJ_id_Gost28147_89_CryptoPro_A_ParamSet OBJ_cryptopro,31L,1L #define SN_id_Gost28147_89_CryptoPro_B_ParamSet "id-Gost28147-89-CryptoPro-B-ParamSet" #define NID_id_Gost28147_89_CryptoPro_B_ParamSet 825 #define OBJ_id_Gost28147_89_CryptoPro_B_ParamSet OBJ_cryptopro,31L,2L #define SN_id_Gost28147_89_CryptoPro_C_ParamSet "id-Gost28147-89-CryptoPro-C-ParamSet" #define NID_id_Gost28147_89_CryptoPro_C_ParamSet 826 #define OBJ_id_Gost28147_89_CryptoPro_C_ParamSet OBJ_cryptopro,31L,3L #define SN_id_Gost28147_89_CryptoPro_D_ParamSet "id-Gost28147-89-CryptoPro-D-ParamSet" #define NID_id_Gost28147_89_CryptoPro_D_ParamSet 827 #define OBJ_id_Gost28147_89_CryptoPro_D_ParamSet OBJ_cryptopro,31L,4L #define SN_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-1-ParamSet" #define NID_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet 828 #define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet OBJ_cryptopro,31L,5L #define SN_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-0-ParamSet" #define NID_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet 829 #define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet OBJ_cryptopro,31L,6L #define SN_id_Gost28147_89_CryptoPro_RIC_1_ParamSet "id-Gost28147-89-CryptoPro-RIC-1-ParamSet" #define NID_id_Gost28147_89_CryptoPro_RIC_1_ParamSet 830 #define OBJ_id_Gost28147_89_CryptoPro_RIC_1_ParamSet OBJ_cryptopro,31L,7L #define SN_id_GostR3410_94_TestParamSet "id-GostR3410-94-TestParamSet" #define NID_id_GostR3410_94_TestParamSet 831 #define OBJ_id_GostR3410_94_TestParamSet OBJ_cryptopro,32L,0L #define SN_id_GostR3410_94_CryptoPro_A_ParamSet "id-GostR3410-94-CryptoPro-A-ParamSet" #define NID_id_GostR3410_94_CryptoPro_A_ParamSet 832 #define OBJ_id_GostR3410_94_CryptoPro_A_ParamSet OBJ_cryptopro,32L,2L #define SN_id_GostR3410_94_CryptoPro_B_ParamSet "id-GostR3410-94-CryptoPro-B-ParamSet" #define NID_id_GostR3410_94_CryptoPro_B_ParamSet 833 #define OBJ_id_GostR3410_94_CryptoPro_B_ParamSet OBJ_cryptopro,32L,3L #define SN_id_GostR3410_94_CryptoPro_C_ParamSet "id-GostR3410-94-CryptoPro-C-ParamSet" #define NID_id_GostR3410_94_CryptoPro_C_ParamSet 834 #define OBJ_id_GostR3410_94_CryptoPro_C_ParamSet OBJ_cryptopro,32L,4L #define SN_id_GostR3410_94_CryptoPro_D_ParamSet "id-GostR3410-94-CryptoPro-D-ParamSet" #define NID_id_GostR3410_94_CryptoPro_D_ParamSet 835 #define OBJ_id_GostR3410_94_CryptoPro_D_ParamSet OBJ_cryptopro,32L,5L #define SN_id_GostR3410_94_CryptoPro_XchA_ParamSet "id-GostR3410-94-CryptoPro-XchA-ParamSet" #define NID_id_GostR3410_94_CryptoPro_XchA_ParamSet 836 #define OBJ_id_GostR3410_94_CryptoPro_XchA_ParamSet OBJ_cryptopro,33L,1L #define SN_id_GostR3410_94_CryptoPro_XchB_ParamSet "id-GostR3410-94-CryptoPro-XchB-ParamSet" #define NID_id_GostR3410_94_CryptoPro_XchB_ParamSet 837 #define OBJ_id_GostR3410_94_CryptoPro_XchB_ParamSet OBJ_cryptopro,33L,2L #define SN_id_GostR3410_94_CryptoPro_XchC_ParamSet "id-GostR3410-94-CryptoPro-XchC-ParamSet" #define NID_id_GostR3410_94_CryptoPro_XchC_ParamSet 838 #define OBJ_id_GostR3410_94_CryptoPro_XchC_ParamSet OBJ_cryptopro,33L,3L #define SN_id_GostR3410_2001_TestParamSet "id-GostR3410-2001-TestParamSet" #define NID_id_GostR3410_2001_TestParamSet 839 #define OBJ_id_GostR3410_2001_TestParamSet OBJ_cryptopro,35L,0L #define SN_id_GostR3410_2001_CryptoPro_A_ParamSet "id-GostR3410-2001-CryptoPro-A-ParamSet" #define NID_id_GostR3410_2001_CryptoPro_A_ParamSet 840 #define OBJ_id_GostR3410_2001_CryptoPro_A_ParamSet OBJ_cryptopro,35L,1L #define SN_id_GostR3410_2001_CryptoPro_B_ParamSet "id-GostR3410-2001-CryptoPro-B-ParamSet" #define NID_id_GostR3410_2001_CryptoPro_B_ParamSet 841 #define OBJ_id_GostR3410_2001_CryptoPro_B_ParamSet OBJ_cryptopro,35L,2L #define SN_id_GostR3410_2001_CryptoPro_C_ParamSet "id-GostR3410-2001-CryptoPro-C-ParamSet" #define NID_id_GostR3410_2001_CryptoPro_C_ParamSet 842 #define OBJ_id_GostR3410_2001_CryptoPro_C_ParamSet OBJ_cryptopro,35L,3L #define SN_id_GostR3410_2001_CryptoPro_XchA_ParamSet "id-GostR3410-2001-CryptoPro-XchA-ParamSet" #define NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet 843 #define OBJ_id_GostR3410_2001_CryptoPro_XchA_ParamSet OBJ_cryptopro,36L,0L #define SN_id_GostR3410_2001_CryptoPro_XchB_ParamSet "id-GostR3410-2001-CryptoPro-XchB-ParamSet" #define NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet 844 #define OBJ_id_GostR3410_2001_CryptoPro_XchB_ParamSet OBJ_cryptopro,36L,1L #define SN_id_GostR3410_94_a "id-GostR3410-94-a" #define NID_id_GostR3410_94_a 845 #define OBJ_id_GostR3410_94_a OBJ_id_GostR3410_94,1L #define SN_id_GostR3410_94_aBis "id-GostR3410-94-aBis" #define NID_id_GostR3410_94_aBis 846 #define OBJ_id_GostR3410_94_aBis OBJ_id_GostR3410_94,2L #define SN_id_GostR3410_94_b "id-GostR3410-94-b" #define NID_id_GostR3410_94_b 847 #define OBJ_id_GostR3410_94_b OBJ_id_GostR3410_94,3L #define SN_id_GostR3410_94_bBis "id-GostR3410-94-bBis" #define NID_id_GostR3410_94_bBis 848 #define OBJ_id_GostR3410_94_bBis OBJ_id_GostR3410_94,4L #define SN_id_Gost28147_89_cc "id-Gost28147-89-cc" #define LN_id_Gost28147_89_cc "GOST 28147-89 Cryptocom ParamSet" #define NID_id_Gost28147_89_cc 849 #define OBJ_id_Gost28147_89_cc OBJ_cryptocom,1L,6L,1L #define SN_id_GostR3410_94_cc "gost94cc" #define LN_id_GostR3410_94_cc "GOST 34.10-94 Cryptocom" #define NID_id_GostR3410_94_cc 850 #define OBJ_id_GostR3410_94_cc OBJ_cryptocom,1L,5L,3L #define SN_id_GostR3410_2001_cc "gost2001cc" #define LN_id_GostR3410_2001_cc "GOST 34.10-2001 Cryptocom" #define NID_id_GostR3410_2001_cc 851 #define OBJ_id_GostR3410_2001_cc OBJ_cryptocom,1L,5L,4L #define SN_id_GostR3411_94_with_GostR3410_94_cc "id-GostR3411-94-with-GostR3410-94-cc" #define LN_id_GostR3411_94_with_GostR3410_94_cc "GOST R 34.11-94 with GOST R 34.10-94 Cryptocom" #define NID_id_GostR3411_94_with_GostR3410_94_cc 852 #define OBJ_id_GostR3411_94_with_GostR3410_94_cc OBJ_cryptocom,1L,3L,3L #define SN_id_GostR3411_94_with_GostR3410_2001_cc "id-GostR3411-94-with-GostR3410-2001-cc" #define LN_id_GostR3411_94_with_GostR3410_2001_cc "GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom" #define NID_id_GostR3411_94_with_GostR3410_2001_cc 853 #define OBJ_id_GostR3411_94_with_GostR3410_2001_cc OBJ_cryptocom,1L,3L,4L #define SN_id_GostR3410_2001_ParamSet_cc "id-GostR3410-2001-ParamSet-cc" #define LN_id_GostR3410_2001_ParamSet_cc "GOST R 3410-2001 Parameter Set Cryptocom" #define NID_id_GostR3410_2001_ParamSet_cc 854 #define OBJ_id_GostR3410_2001_ParamSet_cc OBJ_cryptocom,1L,8L,1L #define SN_camellia_128_cbc "CAMELLIA-128-CBC" #define LN_camellia_128_cbc "camellia-128-cbc" #define NID_camellia_128_cbc 751 #define OBJ_camellia_128_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,2L #define SN_camellia_192_cbc "CAMELLIA-192-CBC" #define LN_camellia_192_cbc "camellia-192-cbc" #define NID_camellia_192_cbc 752 #define OBJ_camellia_192_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,3L #define SN_camellia_256_cbc "CAMELLIA-256-CBC" #define LN_camellia_256_cbc "camellia-256-cbc" #define NID_camellia_256_cbc 753 #define OBJ_camellia_256_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,4L #define SN_id_camellia128_wrap "id-camellia128-wrap" #define NID_id_camellia128_wrap 907 #define OBJ_id_camellia128_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,2L #define SN_id_camellia192_wrap "id-camellia192-wrap" #define NID_id_camellia192_wrap 908 #define OBJ_id_camellia192_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,3L #define SN_id_camellia256_wrap "id-camellia256-wrap" #define NID_id_camellia256_wrap 909 #define OBJ_id_camellia256_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,4L #define OBJ_ntt_ds 0L,3L,4401L,5L #define OBJ_camellia OBJ_ntt_ds,3L,1L,9L #define SN_camellia_128_ecb "CAMELLIA-128-ECB" #define LN_camellia_128_ecb "camellia-128-ecb" #define NID_camellia_128_ecb 754 #define OBJ_camellia_128_ecb OBJ_camellia,1L #define SN_camellia_128_ofb128 "CAMELLIA-128-OFB" #define LN_camellia_128_ofb128 "camellia-128-ofb" #define NID_camellia_128_ofb128 766 #define OBJ_camellia_128_ofb128 OBJ_camellia,3L #define SN_camellia_128_cfb128 "CAMELLIA-128-CFB" #define LN_camellia_128_cfb128 "camellia-128-cfb" #define NID_camellia_128_cfb128 757 #define OBJ_camellia_128_cfb128 OBJ_camellia,4L #define SN_camellia_192_ecb "CAMELLIA-192-ECB" #define LN_camellia_192_ecb "camellia-192-ecb" #define NID_camellia_192_ecb 755 #define OBJ_camellia_192_ecb OBJ_camellia,21L #define SN_camellia_192_ofb128 "CAMELLIA-192-OFB" #define LN_camellia_192_ofb128 "camellia-192-ofb" #define NID_camellia_192_ofb128 767 #define OBJ_camellia_192_ofb128 OBJ_camellia,23L #define SN_camellia_192_cfb128 "CAMELLIA-192-CFB" #define LN_camellia_192_cfb128 "camellia-192-cfb" #define NID_camellia_192_cfb128 758 #define OBJ_camellia_192_cfb128 OBJ_camellia,24L #define SN_camellia_256_ecb "CAMELLIA-256-ECB" #define LN_camellia_256_ecb "camellia-256-ecb" #define NID_camellia_256_ecb 756 #define OBJ_camellia_256_ecb OBJ_camellia,41L #define SN_camellia_256_ofb128 "CAMELLIA-256-OFB" #define LN_camellia_256_ofb128 "camellia-256-ofb" #define NID_camellia_256_ofb128 768 #define OBJ_camellia_256_ofb128 OBJ_camellia,43L #define SN_camellia_256_cfb128 "CAMELLIA-256-CFB" #define LN_camellia_256_cfb128 "camellia-256-cfb" #define NID_camellia_256_cfb128 759 #define OBJ_camellia_256_cfb128 OBJ_camellia,44L #define SN_camellia_128_cfb1 "CAMELLIA-128-CFB1" #define LN_camellia_128_cfb1 "camellia-128-cfb1" #define NID_camellia_128_cfb1 760 #define SN_camellia_192_cfb1 "CAMELLIA-192-CFB1" #define LN_camellia_192_cfb1 "camellia-192-cfb1" #define NID_camellia_192_cfb1 761 #define SN_camellia_256_cfb1 "CAMELLIA-256-CFB1" #define LN_camellia_256_cfb1 "camellia-256-cfb1" #define NID_camellia_256_cfb1 762 #define SN_camellia_128_cfb8 "CAMELLIA-128-CFB8" #define LN_camellia_128_cfb8 "camellia-128-cfb8" #define NID_camellia_128_cfb8 763 #define SN_camellia_192_cfb8 "CAMELLIA-192-CFB8" #define LN_camellia_192_cfb8 "camellia-192-cfb8" #define NID_camellia_192_cfb8 764 #define SN_camellia_256_cfb8 "CAMELLIA-256-CFB8" #define LN_camellia_256_cfb8 "camellia-256-cfb8" #define NID_camellia_256_cfb8 765 #define SN_kisa "KISA" #define LN_kisa "kisa" #define NID_kisa 773 #define OBJ_kisa OBJ_member_body,410L,200004L #define SN_seed_ecb "SEED-ECB" #define LN_seed_ecb "seed-ecb" #define NID_seed_ecb 776 #define OBJ_seed_ecb OBJ_kisa,1L,3L #define SN_seed_cbc "SEED-CBC" #define LN_seed_cbc "seed-cbc" #define NID_seed_cbc 777 #define OBJ_seed_cbc OBJ_kisa,1L,4L #define SN_seed_cfb128 "SEED-CFB" #define LN_seed_cfb128 "seed-cfb" #define NID_seed_cfb128 779 #define OBJ_seed_cfb128 OBJ_kisa,1L,5L #define SN_seed_ofb128 "SEED-OFB" #define LN_seed_ofb128 "seed-ofb" #define NID_seed_ofb128 778 #define OBJ_seed_ofb128 OBJ_kisa,1L,6L #define SN_hmac "HMAC" #define LN_hmac "hmac" #define NID_hmac 855 #define SN_cmac "CMAC" #define LN_cmac "cmac" #define NID_cmac 894 #define SN_rc4_hmac_md5 "RC4-HMAC-MD5" #define LN_rc4_hmac_md5 "rc4-hmac-md5" #define NID_rc4_hmac_md5 915 #define SN_aes_128_cbc_hmac_sha1 "AES-128-CBC-HMAC-SHA1" #define LN_aes_128_cbc_hmac_sha1 "aes-128-cbc-hmac-sha1" #define NID_aes_128_cbc_hmac_sha1 916 #define SN_aes_192_cbc_hmac_sha1 "AES-192-CBC-HMAC-SHA1" #define LN_aes_192_cbc_hmac_sha1 "aes-192-cbc-hmac-sha1" #define NID_aes_192_cbc_hmac_sha1 917 #define SN_aes_256_cbc_hmac_sha1 "AES-256-CBC-HMAC-SHA1" #define LN_aes_256_cbc_hmac_sha1 "aes-256-cbc-hmac-sha1" #define NID_aes_256_cbc_hmac_sha1 918 #define SN_aes_128_cbc_hmac_sha256 "AES-128-CBC-HMAC-SHA256" #define LN_aes_128_cbc_hmac_sha256 "aes-128-cbc-hmac-sha256" #define NID_aes_128_cbc_hmac_sha256 948 #define SN_aes_192_cbc_hmac_sha256 "AES-192-CBC-HMAC-SHA256" #define LN_aes_192_cbc_hmac_sha256 "aes-192-cbc-hmac-sha256" #define NID_aes_192_cbc_hmac_sha256 949 #define SN_aes_256_cbc_hmac_sha256 "AES-256-CBC-HMAC-SHA256" #define LN_aes_256_cbc_hmac_sha256 "aes-256-cbc-hmac-sha256" #define NID_aes_256_cbc_hmac_sha256 950 #define SN_dhpublicnumber "dhpublicnumber" #define LN_dhpublicnumber "X9.42 DH" #define NID_dhpublicnumber 920 #define OBJ_dhpublicnumber OBJ_ISO_US,10046L,2L,1L #define SN_brainpoolP160r1 "brainpoolP160r1" #define NID_brainpoolP160r1 921 #define OBJ_brainpoolP160r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,1L #define SN_brainpoolP160t1 "brainpoolP160t1" #define NID_brainpoolP160t1 922 #define OBJ_brainpoolP160t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,2L #define SN_brainpoolP192r1 "brainpoolP192r1" #define NID_brainpoolP192r1 923 #define OBJ_brainpoolP192r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,3L #define SN_brainpoolP192t1 "brainpoolP192t1" #define NID_brainpoolP192t1 924 #define OBJ_brainpoolP192t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,4L #define SN_brainpoolP224r1 "brainpoolP224r1" #define NID_brainpoolP224r1 925 #define OBJ_brainpoolP224r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,5L #define SN_brainpoolP224t1 "brainpoolP224t1" #define NID_brainpoolP224t1 926 #define OBJ_brainpoolP224t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,6L #define SN_brainpoolP256r1 "brainpoolP256r1" #define NID_brainpoolP256r1 927 #define OBJ_brainpoolP256r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,7L #define SN_brainpoolP256t1 "brainpoolP256t1" #define NID_brainpoolP256t1 928 #define OBJ_brainpoolP256t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,8L #define SN_brainpoolP320r1 "brainpoolP320r1" #define NID_brainpoolP320r1 929 #define OBJ_brainpoolP320r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,9L #define SN_brainpoolP320t1 "brainpoolP320t1" #define NID_brainpoolP320t1 930 #define OBJ_brainpoolP320t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,10L #define SN_brainpoolP384r1 "brainpoolP384r1" #define NID_brainpoolP384r1 931 #define OBJ_brainpoolP384r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,11L #define SN_brainpoolP384t1 "brainpoolP384t1" #define NID_brainpoolP384t1 932 #define OBJ_brainpoolP384t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,12L #define SN_brainpoolP512r1 "brainpoolP512r1" #define NID_brainpoolP512r1 933 #define OBJ_brainpoolP512r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,13L #define SN_brainpoolP512t1 "brainpoolP512t1" #define NID_brainpoolP512t1 934 #define OBJ_brainpoolP512t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,14L #define OBJ_x9_63_scheme 1L,3L,133L,16L,840L,63L,0L #define OBJ_secg_scheme OBJ_certicom_arc,1L #define SN_dhSinglePass_stdDH_sha1kdf_scheme "dhSinglePass-stdDH-sha1kdf-scheme" #define NID_dhSinglePass_stdDH_sha1kdf_scheme 936 #define OBJ_dhSinglePass_stdDH_sha1kdf_scheme OBJ_x9_63_scheme,2L #define SN_dhSinglePass_stdDH_sha224kdf_scheme "dhSinglePass-stdDH-sha224kdf-scheme" #define NID_dhSinglePass_stdDH_sha224kdf_scheme 937 #define OBJ_dhSinglePass_stdDH_sha224kdf_scheme OBJ_secg_scheme,11L,0L #define SN_dhSinglePass_stdDH_sha256kdf_scheme "dhSinglePass-stdDH-sha256kdf-scheme" #define NID_dhSinglePass_stdDH_sha256kdf_scheme 938 #define OBJ_dhSinglePass_stdDH_sha256kdf_scheme OBJ_secg_scheme,11L,1L #define SN_dhSinglePass_stdDH_sha384kdf_scheme "dhSinglePass-stdDH-sha384kdf-scheme" #define NID_dhSinglePass_stdDH_sha384kdf_scheme 939 #define OBJ_dhSinglePass_stdDH_sha384kdf_scheme OBJ_secg_scheme,11L,2L #define SN_dhSinglePass_stdDH_sha512kdf_scheme "dhSinglePass-stdDH-sha512kdf-scheme" #define NID_dhSinglePass_stdDH_sha512kdf_scheme 940 #define OBJ_dhSinglePass_stdDH_sha512kdf_scheme OBJ_secg_scheme,11L,3L #define SN_dhSinglePass_cofactorDH_sha1kdf_scheme "dhSinglePass-cofactorDH-sha1kdf-scheme" #define NID_dhSinglePass_cofactorDH_sha1kdf_scheme 941 #define OBJ_dhSinglePass_cofactorDH_sha1kdf_scheme OBJ_x9_63_scheme,3L #define SN_dhSinglePass_cofactorDH_sha224kdf_scheme "dhSinglePass-cofactorDH-sha224kdf-scheme" #define NID_dhSinglePass_cofactorDH_sha224kdf_scheme 942 #define OBJ_dhSinglePass_cofactorDH_sha224kdf_scheme OBJ_secg_scheme,14L,0L #define SN_dhSinglePass_cofactorDH_sha256kdf_scheme "dhSinglePass-cofactorDH-sha256kdf-scheme" #define NID_dhSinglePass_cofactorDH_sha256kdf_scheme 943 #define OBJ_dhSinglePass_cofactorDH_sha256kdf_scheme OBJ_secg_scheme,14L,1L #define SN_dhSinglePass_cofactorDH_sha384kdf_scheme "dhSinglePass-cofactorDH-sha384kdf-scheme" #define NID_dhSinglePass_cofactorDH_sha384kdf_scheme 944 #define OBJ_dhSinglePass_cofactorDH_sha384kdf_scheme OBJ_secg_scheme,14L,2L #define SN_dhSinglePass_cofactorDH_sha512kdf_scheme "dhSinglePass-cofactorDH-sha512kdf-scheme" #define NID_dhSinglePass_cofactorDH_sha512kdf_scheme 945 #define OBJ_dhSinglePass_cofactorDH_sha512kdf_scheme OBJ_secg_scheme,14L,3L #define SN_dh_std_kdf "dh-std-kdf" #define NID_dh_std_kdf 946 #define SN_dh_cofactor_kdf "dh-cofactor-kdf" #define NID_dh_cofactor_kdf 947 #define SN_ct_precert_scts "ct_precert_scts" #define LN_ct_precert_scts "CT Precertificate SCTs" #define NID_ct_precert_scts 951 #define OBJ_ct_precert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,2L #define SN_ct_precert_poison "ct_precert_poison" #define LN_ct_precert_poison "CT Precertificate Poison" #define NID_ct_precert_poison 952 #define OBJ_ct_precert_poison 1L,3L,6L,1L,4L,1L,11129L,2L,4L,3L #define SN_ct_precert_signer "ct_precert_signer" #define LN_ct_precert_signer "CT Precertificate Signer" #define NID_ct_precert_signer 953 #define OBJ_ct_precert_signer 1L,3L,6L,1L,4L,1L,11129L,2L,4L,4L #define SN_ct_cert_scts "ct_cert_scts" #define LN_ct_cert_scts "CT Certificate SCTs" #define NID_ct_cert_scts 954 #define OBJ_ct_cert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,5L #define SN_jurisdictionLocalityName "jurisdictionL" #define LN_jurisdictionLocalityName "jurisdictionLocalityName" #define NID_jurisdictionLocalityName 955 #define OBJ_jurisdictionLocalityName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,1L #define SN_jurisdictionStateOrProvinceName "jurisdictionST" #define LN_jurisdictionStateOrProvinceName "jurisdictionStateOrProvinceName" #define NID_jurisdictionStateOrProvinceName 956 #define OBJ_jurisdictionStateOrProvinceName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,2L #define SN_jurisdictionCountryName "jurisdictionC" #define LN_jurisdictionCountryName "jurisdictionCountryName" #define NID_jurisdictionCountryName 957 #define OBJ_jurisdictionCountryName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,3L ================================================ FILE: 3rParty/FFmpeg/include/openssl/objects.h ================================================ /* crypto/objects/objects.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_OBJECTS_H # define HEADER_OBJECTS_H # define USE_OBJ_MAC # ifdef USE_OBJ_MAC # include # else # define SN_undef "UNDEF" # define LN_undef "undefined" # define NID_undef 0 # define OBJ_undef 0L # define SN_Algorithm "Algorithm" # define LN_algorithm "algorithm" # define NID_algorithm 38 # define OBJ_algorithm 1L,3L,14L,3L,2L # define LN_rsadsi "rsadsi" # define NID_rsadsi 1 # define OBJ_rsadsi 1L,2L,840L,113549L # define LN_pkcs "pkcs" # define NID_pkcs 2 # define OBJ_pkcs OBJ_rsadsi,1L # define SN_md2 "MD2" # define LN_md2 "md2" # define NID_md2 3 # define OBJ_md2 OBJ_rsadsi,2L,2L # define SN_md5 "MD5" # define LN_md5 "md5" # define NID_md5 4 # define OBJ_md5 OBJ_rsadsi,2L,5L # define SN_rc4 "RC4" # define LN_rc4 "rc4" # define NID_rc4 5 # define OBJ_rc4 OBJ_rsadsi,3L,4L # define LN_rsaEncryption "rsaEncryption" # define NID_rsaEncryption 6 # define OBJ_rsaEncryption OBJ_pkcs,1L,1L # define SN_md2WithRSAEncryption "RSA-MD2" # define LN_md2WithRSAEncryption "md2WithRSAEncryption" # define NID_md2WithRSAEncryption 7 # define OBJ_md2WithRSAEncryption OBJ_pkcs,1L,2L # define SN_md5WithRSAEncryption "RSA-MD5" # define LN_md5WithRSAEncryption "md5WithRSAEncryption" # define NID_md5WithRSAEncryption 8 # define OBJ_md5WithRSAEncryption OBJ_pkcs,1L,4L # define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" # define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" # define NID_pbeWithMD2AndDES_CBC 9 # define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs,5L,1L # define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" # define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" # define NID_pbeWithMD5AndDES_CBC 10 # define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs,5L,3L # define LN_X500 "X500" # define NID_X500 11 # define OBJ_X500 2L,5L # define LN_X509 "X509" # define NID_X509 12 # define OBJ_X509 OBJ_X500,4L # define SN_commonName "CN" # define LN_commonName "commonName" # define NID_commonName 13 # define OBJ_commonName OBJ_X509,3L # define SN_countryName "C" # define LN_countryName "countryName" # define NID_countryName 14 # define OBJ_countryName OBJ_X509,6L # define SN_localityName "L" # define LN_localityName "localityName" # define NID_localityName 15 # define OBJ_localityName OBJ_X509,7L /* Postal Address? PA */ /* should be "ST" (rfc1327) but MS uses 'S' */ # define SN_stateOrProvinceName "ST" # define LN_stateOrProvinceName "stateOrProvinceName" # define NID_stateOrProvinceName 16 # define OBJ_stateOrProvinceName OBJ_X509,8L # define SN_organizationName "O" # define LN_organizationName "organizationName" # define NID_organizationName 17 # define OBJ_organizationName OBJ_X509,10L # define SN_organizationalUnitName "OU" # define LN_organizationalUnitName "organizationalUnitName" # define NID_organizationalUnitName 18 # define OBJ_organizationalUnitName OBJ_X509,11L # define SN_rsa "RSA" # define LN_rsa "rsa" # define NID_rsa 19 # define OBJ_rsa OBJ_X500,8L,1L,1L # define LN_pkcs7 "pkcs7" # define NID_pkcs7 20 # define OBJ_pkcs7 OBJ_pkcs,7L # define LN_pkcs7_data "pkcs7-data" # define NID_pkcs7_data 21 # define OBJ_pkcs7_data OBJ_pkcs7,1L # define LN_pkcs7_signed "pkcs7-signedData" # define NID_pkcs7_signed 22 # define OBJ_pkcs7_signed OBJ_pkcs7,2L # define LN_pkcs7_enveloped "pkcs7-envelopedData" # define NID_pkcs7_enveloped 23 # define OBJ_pkcs7_enveloped OBJ_pkcs7,3L # define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" # define NID_pkcs7_signedAndEnveloped 24 # define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L # define LN_pkcs7_digest "pkcs7-digestData" # define NID_pkcs7_digest 25 # define OBJ_pkcs7_digest OBJ_pkcs7,5L # define LN_pkcs7_encrypted "pkcs7-encryptedData" # define NID_pkcs7_encrypted 26 # define OBJ_pkcs7_encrypted OBJ_pkcs7,6L # define LN_pkcs3 "pkcs3" # define NID_pkcs3 27 # define OBJ_pkcs3 OBJ_pkcs,3L # define LN_dhKeyAgreement "dhKeyAgreement" # define NID_dhKeyAgreement 28 # define OBJ_dhKeyAgreement OBJ_pkcs3,1L # define SN_des_ecb "DES-ECB" # define LN_des_ecb "des-ecb" # define NID_des_ecb 29 # define OBJ_des_ecb OBJ_algorithm,6L # define SN_des_cfb64 "DES-CFB" # define LN_des_cfb64 "des-cfb" # define NID_des_cfb64 30 /* IV + num */ # define OBJ_des_cfb64 OBJ_algorithm,9L # define SN_des_cbc "DES-CBC" # define LN_des_cbc "des-cbc" # define NID_des_cbc 31 /* IV */ # define OBJ_des_cbc OBJ_algorithm,7L # define SN_des_ede "DES-EDE" # define LN_des_ede "des-ede" # define NID_des_ede 32 /* ?? */ # define OBJ_des_ede OBJ_algorithm,17L # define SN_des_ede3 "DES-EDE3" # define LN_des_ede3 "des-ede3" # define NID_des_ede3 33 # define SN_idea_cbc "IDEA-CBC" # define LN_idea_cbc "idea-cbc" # define NID_idea_cbc 34 # define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L # define SN_idea_cfb64 "IDEA-CFB" # define LN_idea_cfb64 "idea-cfb" # define NID_idea_cfb64 35 # define SN_idea_ecb "IDEA-ECB" # define LN_idea_ecb "idea-ecb" # define NID_idea_ecb 36 # define SN_rc2_cbc "RC2-CBC" # define LN_rc2_cbc "rc2-cbc" # define NID_rc2_cbc 37 # define OBJ_rc2_cbc OBJ_rsadsi,3L,2L # define SN_rc2_ecb "RC2-ECB" # define LN_rc2_ecb "rc2-ecb" # define NID_rc2_ecb 38 # define SN_rc2_cfb64 "RC2-CFB" # define LN_rc2_cfb64 "rc2-cfb" # define NID_rc2_cfb64 39 # define SN_rc2_ofb64 "RC2-OFB" # define LN_rc2_ofb64 "rc2-ofb" # define NID_rc2_ofb64 40 # define SN_sha "SHA" # define LN_sha "sha" # define NID_sha 41 # define OBJ_sha OBJ_algorithm,18L # define SN_shaWithRSAEncryption "RSA-SHA" # define LN_shaWithRSAEncryption "shaWithRSAEncryption" # define NID_shaWithRSAEncryption 42 # define OBJ_shaWithRSAEncryption OBJ_algorithm,15L # define SN_des_ede_cbc "DES-EDE-CBC" # define LN_des_ede_cbc "des-ede-cbc" # define NID_des_ede_cbc 43 # define SN_des_ede3_cbc "DES-EDE3-CBC" # define LN_des_ede3_cbc "des-ede3-cbc" # define NID_des_ede3_cbc 44 # define OBJ_des_ede3_cbc OBJ_rsadsi,3L,7L # define SN_des_ofb64 "DES-OFB" # define LN_des_ofb64 "des-ofb" # define NID_des_ofb64 45 # define OBJ_des_ofb64 OBJ_algorithm,8L # define SN_idea_ofb64 "IDEA-OFB" # define LN_idea_ofb64 "idea-ofb" # define NID_idea_ofb64 46 # define LN_pkcs9 "pkcs9" # define NID_pkcs9 47 # define OBJ_pkcs9 OBJ_pkcs,9L # define SN_pkcs9_emailAddress "Email" # define LN_pkcs9_emailAddress "emailAddress" # define NID_pkcs9_emailAddress 48 # define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L # define LN_pkcs9_unstructuredName "unstructuredName" # define NID_pkcs9_unstructuredName 49 # define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L # define LN_pkcs9_contentType "contentType" # define NID_pkcs9_contentType 50 # define OBJ_pkcs9_contentType OBJ_pkcs9,3L # define LN_pkcs9_messageDigest "messageDigest" # define NID_pkcs9_messageDigest 51 # define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L # define LN_pkcs9_signingTime "signingTime" # define NID_pkcs9_signingTime 52 # define OBJ_pkcs9_signingTime OBJ_pkcs9,5L # define LN_pkcs9_countersignature "countersignature" # define NID_pkcs9_countersignature 53 # define OBJ_pkcs9_countersignature OBJ_pkcs9,6L # define LN_pkcs9_challengePassword "challengePassword" # define NID_pkcs9_challengePassword 54 # define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L # define LN_pkcs9_unstructuredAddress "unstructuredAddress" # define NID_pkcs9_unstructuredAddress 55 # define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L # define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" # define NID_pkcs9_extCertAttributes 56 # define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L # define SN_netscape "Netscape" # define LN_netscape "Netscape Communications Corp." # define NID_netscape 57 # define OBJ_netscape 2L,16L,840L,1L,113730L # define SN_netscape_cert_extension "nsCertExt" # define LN_netscape_cert_extension "Netscape Certificate Extension" # define NID_netscape_cert_extension 58 # define OBJ_netscape_cert_extension OBJ_netscape,1L # define SN_netscape_data_type "nsDataType" # define LN_netscape_data_type "Netscape Data Type" # define NID_netscape_data_type 59 # define OBJ_netscape_data_type OBJ_netscape,2L # define SN_des_ede_cfb64 "DES-EDE-CFB" # define LN_des_ede_cfb64 "des-ede-cfb" # define NID_des_ede_cfb64 60 # define SN_des_ede3_cfb64 "DES-EDE3-CFB" # define LN_des_ede3_cfb64 "des-ede3-cfb" # define NID_des_ede3_cfb64 61 # define SN_des_ede_ofb64 "DES-EDE-OFB" # define LN_des_ede_ofb64 "des-ede-ofb" # define NID_des_ede_ofb64 62 # define SN_des_ede3_ofb64 "DES-EDE3-OFB" # define LN_des_ede3_ofb64 "des-ede3-ofb" # define NID_des_ede3_ofb64 63 /* I'm not sure about the object ID */ # define SN_sha1 "SHA1" # define LN_sha1 "sha1" # define NID_sha1 64 # define OBJ_sha1 OBJ_algorithm,26L /* 28 Jun 1996 - eay */ /* #define OBJ_sha1 1L,3L,14L,2L,26L,05L <- wrong */ # define SN_sha1WithRSAEncryption "RSA-SHA1" # define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" # define NID_sha1WithRSAEncryption 65 # define OBJ_sha1WithRSAEncryption OBJ_pkcs,1L,5L # define SN_dsaWithSHA "DSA-SHA" # define LN_dsaWithSHA "dsaWithSHA" # define NID_dsaWithSHA 66 # define OBJ_dsaWithSHA OBJ_algorithm,13L # define SN_dsa_2 "DSA-old" # define LN_dsa_2 "dsaEncryption-old" # define NID_dsa_2 67 # define OBJ_dsa_2 OBJ_algorithm,12L /* proposed by microsoft to RSA */ # define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" # define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" # define NID_pbeWithSHA1AndRC2_CBC 68 # define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs,5L,11L /* * proposed by microsoft to RSA as pbeWithSHA1AndRC4: it is now defined * explicitly in PKCS#5 v2.0 as id-PBKDF2 which is something completely * different. */ # define LN_id_pbkdf2 "PBKDF2" # define NID_id_pbkdf2 69 # define OBJ_id_pbkdf2 OBJ_pkcs,5L,12L # define SN_dsaWithSHA1_2 "DSA-SHA1-old" # define LN_dsaWithSHA1_2 "dsaWithSHA1-old" # define NID_dsaWithSHA1_2 70 /* Got this one from 'sdn706r20.pdf' which is actually an NSA document :-) */ # define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L # define SN_netscape_cert_type "nsCertType" # define LN_netscape_cert_type "Netscape Cert Type" # define NID_netscape_cert_type 71 # define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L # define SN_netscape_base_url "nsBaseUrl" # define LN_netscape_base_url "Netscape Base Url" # define NID_netscape_base_url 72 # define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L # define SN_netscape_revocation_url "nsRevocationUrl" # define LN_netscape_revocation_url "Netscape Revocation Url" # define NID_netscape_revocation_url 73 # define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L # define SN_netscape_ca_revocation_url "nsCaRevocationUrl" # define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" # define NID_netscape_ca_revocation_url 74 # define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L # define SN_netscape_renewal_url "nsRenewalUrl" # define LN_netscape_renewal_url "Netscape Renewal Url" # define NID_netscape_renewal_url 75 # define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L # define SN_netscape_ca_policy_url "nsCaPolicyUrl" # define LN_netscape_ca_policy_url "Netscape CA Policy Url" # define NID_netscape_ca_policy_url 76 # define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L # define SN_netscape_ssl_server_name "nsSslServerName" # define LN_netscape_ssl_server_name "Netscape SSL Server Name" # define NID_netscape_ssl_server_name 77 # define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L # define SN_netscape_comment "nsComment" # define LN_netscape_comment "Netscape Comment" # define NID_netscape_comment 78 # define OBJ_netscape_comment OBJ_netscape_cert_extension,13L # define SN_netscape_cert_sequence "nsCertSequence" # define LN_netscape_cert_sequence "Netscape Certificate Sequence" # define NID_netscape_cert_sequence 79 # define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L # define SN_desx_cbc "DESX-CBC" # define LN_desx_cbc "desx-cbc" # define NID_desx_cbc 80 # define SN_id_ce "id-ce" # define NID_id_ce 81 # define OBJ_id_ce 2L,5L,29L # define SN_subject_key_identifier "subjectKeyIdentifier" # define LN_subject_key_identifier "X509v3 Subject Key Identifier" # define NID_subject_key_identifier 82 # define OBJ_subject_key_identifier OBJ_id_ce,14L # define SN_key_usage "keyUsage" # define LN_key_usage "X509v3 Key Usage" # define NID_key_usage 83 # define OBJ_key_usage OBJ_id_ce,15L # define SN_private_key_usage_period "privateKeyUsagePeriod" # define LN_private_key_usage_period "X509v3 Private Key Usage Period" # define NID_private_key_usage_period 84 # define OBJ_private_key_usage_period OBJ_id_ce,16L # define SN_subject_alt_name "subjectAltName" # define LN_subject_alt_name "X509v3 Subject Alternative Name" # define NID_subject_alt_name 85 # define OBJ_subject_alt_name OBJ_id_ce,17L # define SN_issuer_alt_name "issuerAltName" # define LN_issuer_alt_name "X509v3 Issuer Alternative Name" # define NID_issuer_alt_name 86 # define OBJ_issuer_alt_name OBJ_id_ce,18L # define SN_basic_constraints "basicConstraints" # define LN_basic_constraints "X509v3 Basic Constraints" # define NID_basic_constraints 87 # define OBJ_basic_constraints OBJ_id_ce,19L # define SN_crl_number "crlNumber" # define LN_crl_number "X509v3 CRL Number" # define NID_crl_number 88 # define OBJ_crl_number OBJ_id_ce,20L # define SN_certificate_policies "certificatePolicies" # define LN_certificate_policies "X509v3 Certificate Policies" # define NID_certificate_policies 89 # define OBJ_certificate_policies OBJ_id_ce,32L # define SN_authority_key_identifier "authorityKeyIdentifier" # define LN_authority_key_identifier "X509v3 Authority Key Identifier" # define NID_authority_key_identifier 90 # define OBJ_authority_key_identifier OBJ_id_ce,35L # define SN_bf_cbc "BF-CBC" # define LN_bf_cbc "bf-cbc" # define NID_bf_cbc 91 # define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L # define SN_bf_ecb "BF-ECB" # define LN_bf_ecb "bf-ecb" # define NID_bf_ecb 92 # define SN_bf_cfb64 "BF-CFB" # define LN_bf_cfb64 "bf-cfb" # define NID_bf_cfb64 93 # define SN_bf_ofb64 "BF-OFB" # define LN_bf_ofb64 "bf-ofb" # define NID_bf_ofb64 94 # define SN_mdc2 "MDC2" # define LN_mdc2 "mdc2" # define NID_mdc2 95 # define OBJ_mdc2 2L,5L,8L,3L,101L /* An alternative? 1L,3L,14L,3L,2L,19L */ # define SN_mdc2WithRSA "RSA-MDC2" # define LN_mdc2WithRSA "mdc2withRSA" # define NID_mdc2WithRSA 96 # define OBJ_mdc2WithRSA 2L,5L,8L,3L,100L # define SN_rc4_40 "RC4-40" # define LN_rc4_40 "rc4-40" # define NID_rc4_40 97 # define SN_rc2_40_cbc "RC2-40-CBC" # define LN_rc2_40_cbc "rc2-40-cbc" # define NID_rc2_40_cbc 98 # define SN_givenName "G" # define LN_givenName "givenName" # define NID_givenName 99 # define OBJ_givenName OBJ_X509,42L # define SN_surname "S" # define LN_surname "surname" # define NID_surname 100 # define OBJ_surname OBJ_X509,4L # define SN_initials "I" # define LN_initials "initials" # define NID_initials 101 # define OBJ_initials OBJ_X509,43L # define SN_uniqueIdentifier "UID" # define LN_uniqueIdentifier "uniqueIdentifier" # define NID_uniqueIdentifier 102 # define OBJ_uniqueIdentifier OBJ_X509,45L # define SN_crl_distribution_points "crlDistributionPoints" # define LN_crl_distribution_points "X509v3 CRL Distribution Points" # define NID_crl_distribution_points 103 # define OBJ_crl_distribution_points OBJ_id_ce,31L # define SN_md5WithRSA "RSA-NP-MD5" # define LN_md5WithRSA "md5WithRSA" # define NID_md5WithRSA 104 # define OBJ_md5WithRSA OBJ_algorithm,3L # define SN_serialNumber "SN" # define LN_serialNumber "serialNumber" # define NID_serialNumber 105 # define OBJ_serialNumber OBJ_X509,5L # define SN_title "T" # define LN_title "title" # define NID_title 106 # define OBJ_title OBJ_X509,12L # define SN_description "D" # define LN_description "description" # define NID_description 107 # define OBJ_description OBJ_X509,13L /* CAST5 is CAST-128, I'm just sticking with the documentation */ # define SN_cast5_cbc "CAST5-CBC" # define LN_cast5_cbc "cast5-cbc" # define NID_cast5_cbc 108 # define OBJ_cast5_cbc 1L,2L,840L,113533L,7L,66L,10L # define SN_cast5_ecb "CAST5-ECB" # define LN_cast5_ecb "cast5-ecb" # define NID_cast5_ecb 109 # define SN_cast5_cfb64 "CAST5-CFB" # define LN_cast5_cfb64 "cast5-cfb" # define NID_cast5_cfb64 110 # define SN_cast5_ofb64 "CAST5-OFB" # define LN_cast5_ofb64 "cast5-ofb" # define NID_cast5_ofb64 111 # define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" # define NID_pbeWithMD5AndCast5_CBC 112 # define OBJ_pbeWithMD5AndCast5_CBC 1L,2L,840L,113533L,7L,66L,12L /*- * This is one sun will soon be using :-( * id-dsa-with-sha1 ID ::= { * iso(1) member-body(2) us(840) x9-57 (10040) x9cm(4) 3 } */ # define SN_dsaWithSHA1 "DSA-SHA1" # define LN_dsaWithSHA1 "dsaWithSHA1" # define NID_dsaWithSHA1 113 # define OBJ_dsaWithSHA1 1L,2L,840L,10040L,4L,3L # define NID_md5_sha1 114 # define SN_md5_sha1 "MD5-SHA1" # define LN_md5_sha1 "md5-sha1" # define SN_sha1WithRSA "RSA-SHA1-2" # define LN_sha1WithRSA "sha1WithRSA" # define NID_sha1WithRSA 115 # define OBJ_sha1WithRSA OBJ_algorithm,29L # define SN_dsa "DSA" # define LN_dsa "dsaEncryption" # define NID_dsa 116 # define OBJ_dsa 1L,2L,840L,10040L,4L,1L # define SN_ripemd160 "RIPEMD160" # define LN_ripemd160 "ripemd160" # define NID_ripemd160 117 # define OBJ_ripemd160 1L,3L,36L,3L,2L,1L /* * The name should actually be rsaSignatureWithripemd160, but I'm going to * continue using the convention I'm using with the other ciphers */ # define SN_ripemd160WithRSA "RSA-RIPEMD160" # define LN_ripemd160WithRSA "ripemd160WithRSA" # define NID_ripemd160WithRSA 119 # define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L /*- * Taken from rfc2040 * RC5_CBC_Parameters ::= SEQUENCE { * version INTEGER (v1_0(16)), * rounds INTEGER (8..127), * blockSizeInBits INTEGER (64, 128), * iv OCTET STRING OPTIONAL * } */ # define SN_rc5_cbc "RC5-CBC" # define LN_rc5_cbc "rc5-cbc" # define NID_rc5_cbc 120 # define OBJ_rc5_cbc OBJ_rsadsi,3L,8L # define SN_rc5_ecb "RC5-ECB" # define LN_rc5_ecb "rc5-ecb" # define NID_rc5_ecb 121 # define SN_rc5_cfb64 "RC5-CFB" # define LN_rc5_cfb64 "rc5-cfb" # define NID_rc5_cfb64 122 # define SN_rc5_ofb64 "RC5-OFB" # define LN_rc5_ofb64 "rc5-ofb" # define NID_rc5_ofb64 123 # define SN_rle_compression "RLE" # define LN_rle_compression "run length compression" # define NID_rle_compression 124 # define OBJ_rle_compression 1L,1L,1L,1L,666L,1L # define SN_zlib_compression "ZLIB" # define LN_zlib_compression "zlib compression" # define NID_zlib_compression 125 # define OBJ_zlib_compression 1L,1L,1L,1L,666L,2L # define SN_ext_key_usage "extendedKeyUsage" # define LN_ext_key_usage "X509v3 Extended Key Usage" # define NID_ext_key_usage 126 # define OBJ_ext_key_usage OBJ_id_ce,37 # define SN_id_pkix "PKIX" # define NID_id_pkix 127 # define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L # define SN_id_kp "id-kp" # define NID_id_kp 128 # define OBJ_id_kp OBJ_id_pkix,3L /* PKIX extended key usage OIDs */ # define SN_server_auth "serverAuth" # define LN_server_auth "TLS Web Server Authentication" # define NID_server_auth 129 # define OBJ_server_auth OBJ_id_kp,1L # define SN_client_auth "clientAuth" # define LN_client_auth "TLS Web Client Authentication" # define NID_client_auth 130 # define OBJ_client_auth OBJ_id_kp,2L # define SN_code_sign "codeSigning" # define LN_code_sign "Code Signing" # define NID_code_sign 131 # define OBJ_code_sign OBJ_id_kp,3L # define SN_email_protect "emailProtection" # define LN_email_protect "E-mail Protection" # define NID_email_protect 132 # define OBJ_email_protect OBJ_id_kp,4L # define SN_time_stamp "timeStamping" # define LN_time_stamp "Time Stamping" # define NID_time_stamp 133 # define OBJ_time_stamp OBJ_id_kp,8L /* Additional extended key usage OIDs: Microsoft */ # define SN_ms_code_ind "msCodeInd" # define LN_ms_code_ind "Microsoft Individual Code Signing" # define NID_ms_code_ind 134 # define OBJ_ms_code_ind 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L # define SN_ms_code_com "msCodeCom" # define LN_ms_code_com "Microsoft Commercial Code Signing" # define NID_ms_code_com 135 # define OBJ_ms_code_com 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L # define SN_ms_ctl_sign "msCTLSign" # define LN_ms_ctl_sign "Microsoft Trust List Signing" # define NID_ms_ctl_sign 136 # define OBJ_ms_ctl_sign 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L # define SN_ms_sgc "msSGC" # define LN_ms_sgc "Microsoft Server Gated Crypto" # define NID_ms_sgc 137 # define OBJ_ms_sgc 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L # define SN_ms_efs "msEFS" # define LN_ms_efs "Microsoft Encrypted File System" # define NID_ms_efs 138 # define OBJ_ms_efs 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L /* Additional usage: Netscape */ # define SN_ns_sgc "nsSGC" # define LN_ns_sgc "Netscape Server Gated Crypto" # define NID_ns_sgc 139 # define OBJ_ns_sgc OBJ_netscape,4L,1L # define SN_delta_crl "deltaCRL" # define LN_delta_crl "X509v3 Delta CRL Indicator" # define NID_delta_crl 140 # define OBJ_delta_crl OBJ_id_ce,27L # define SN_crl_reason "CRLReason" # define LN_crl_reason "CRL Reason Code" # define NID_crl_reason 141 # define OBJ_crl_reason OBJ_id_ce,21L # define SN_invalidity_date "invalidityDate" # define LN_invalidity_date "Invalidity Date" # define NID_invalidity_date 142 # define OBJ_invalidity_date OBJ_id_ce,24L # define SN_sxnet "SXNetID" # define LN_sxnet "Strong Extranet ID" # define NID_sxnet 143 # define OBJ_sxnet 1L,3L,101L,1L,4L,1L /* PKCS12 and related OBJECT IDENTIFIERS */ # define OBJ_pkcs12 OBJ_pkcs,12L # define OBJ_pkcs12_pbeids OBJ_pkcs12, 1 # define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" # define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" # define NID_pbe_WithSHA1And128BitRC4 144 # define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids, 1L # define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" # define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" # define NID_pbe_WithSHA1And40BitRC4 145 # define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids, 2L # define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" # define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" # define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 # define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 3L # define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" # define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" # define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 # define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 4L # define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" # define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" # define NID_pbe_WithSHA1And128BitRC2_CBC 148 # define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids, 5L # define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" # define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" # define NID_pbe_WithSHA1And40BitRC2_CBC 149 # define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids, 6L # define OBJ_pkcs12_Version1 OBJ_pkcs12, 10L # define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1, 1L # define LN_keyBag "keyBag" # define NID_keyBag 150 # define OBJ_keyBag OBJ_pkcs12_BagIds, 1L # define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" # define NID_pkcs8ShroudedKeyBag 151 # define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds, 2L # define LN_certBag "certBag" # define NID_certBag 152 # define OBJ_certBag OBJ_pkcs12_BagIds, 3L # define LN_crlBag "crlBag" # define NID_crlBag 153 # define OBJ_crlBag OBJ_pkcs12_BagIds, 4L # define LN_secretBag "secretBag" # define NID_secretBag 154 # define OBJ_secretBag OBJ_pkcs12_BagIds, 5L # define LN_safeContentsBag "safeContentsBag" # define NID_safeContentsBag 155 # define OBJ_safeContentsBag OBJ_pkcs12_BagIds, 6L # define LN_friendlyName "friendlyName" # define NID_friendlyName 156 # define OBJ_friendlyName OBJ_pkcs9, 20L # define LN_localKeyID "localKeyID" # define NID_localKeyID 157 # define OBJ_localKeyID OBJ_pkcs9, 21L # define OBJ_certTypes OBJ_pkcs9, 22L # define LN_x509Certificate "x509Certificate" # define NID_x509Certificate 158 # define OBJ_x509Certificate OBJ_certTypes, 1L # define LN_sdsiCertificate "sdsiCertificate" # define NID_sdsiCertificate 159 # define OBJ_sdsiCertificate OBJ_certTypes, 2L # define OBJ_crlTypes OBJ_pkcs9, 23L # define LN_x509Crl "x509Crl" # define NID_x509Crl 160 # define OBJ_x509Crl OBJ_crlTypes, 1L /* PKCS#5 v2 OIDs */ # define LN_pbes2 "PBES2" # define NID_pbes2 161 # define OBJ_pbes2 OBJ_pkcs,5L,13L # define LN_pbmac1 "PBMAC1" # define NID_pbmac1 162 # define OBJ_pbmac1 OBJ_pkcs,5L,14L # define LN_hmacWithSHA1 "hmacWithSHA1" # define NID_hmacWithSHA1 163 # define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L /* Policy Qualifier Ids */ # define LN_id_qt_cps "Policy Qualifier CPS" # define SN_id_qt_cps "id-qt-cps" # define NID_id_qt_cps 164 # define OBJ_id_qt_cps OBJ_id_pkix,2L,1L # define LN_id_qt_unotice "Policy Qualifier User Notice" # define SN_id_qt_unotice "id-qt-unotice" # define NID_id_qt_unotice 165 # define OBJ_id_qt_unotice OBJ_id_pkix,2L,2L # define SN_rc2_64_cbc "RC2-64-CBC" # define LN_rc2_64_cbc "rc2-64-cbc" # define NID_rc2_64_cbc 166 # define SN_SMIMECapabilities "SMIME-CAPS" # define LN_SMIMECapabilities "S/MIME Capabilities" # define NID_SMIMECapabilities 167 # define OBJ_SMIMECapabilities OBJ_pkcs9,15L # define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" # define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" # define NID_pbeWithMD2AndRC2_CBC 168 # define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs,5L,4L # define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" # define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" # define NID_pbeWithMD5AndRC2_CBC 169 # define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs,5L,6L # define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" # define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" # define NID_pbeWithSHA1AndDES_CBC 170 # define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs,5L,10L /* Extension request OIDs */ # define LN_ms_ext_req "Microsoft Extension Request" # define SN_ms_ext_req "msExtReq" # define NID_ms_ext_req 171 # define OBJ_ms_ext_req 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L # define LN_ext_req "Extension Request" # define SN_ext_req "extReq" # define NID_ext_req 172 # define OBJ_ext_req OBJ_pkcs9,14L # define SN_name "name" # define LN_name "name" # define NID_name 173 # define OBJ_name OBJ_X509,41L # define SN_dnQualifier "dnQualifier" # define LN_dnQualifier "dnQualifier" # define NID_dnQualifier 174 # define OBJ_dnQualifier OBJ_X509,46L # define SN_id_pe "id-pe" # define NID_id_pe 175 # define OBJ_id_pe OBJ_id_pkix,1L # define SN_id_ad "id-ad" # define NID_id_ad 176 # define OBJ_id_ad OBJ_id_pkix,48L # define SN_info_access "authorityInfoAccess" # define LN_info_access "Authority Information Access" # define NID_info_access 177 # define OBJ_info_access OBJ_id_pe,1L # define SN_ad_OCSP "OCSP" # define LN_ad_OCSP "OCSP" # define NID_ad_OCSP 178 # define OBJ_ad_OCSP OBJ_id_ad,1L # define SN_ad_ca_issuers "caIssuers" # define LN_ad_ca_issuers "CA Issuers" # define NID_ad_ca_issuers 179 # define OBJ_ad_ca_issuers OBJ_id_ad,2L # define SN_OCSP_sign "OCSPSigning" # define LN_OCSP_sign "OCSP Signing" # define NID_OCSP_sign 180 # define OBJ_OCSP_sign OBJ_id_kp,9L # endif /* USE_OBJ_MAC */ # include # include # define OBJ_NAME_TYPE_UNDEF 0x00 # define OBJ_NAME_TYPE_MD_METH 0x01 # define OBJ_NAME_TYPE_CIPHER_METH 0x02 # define OBJ_NAME_TYPE_PKEY_METH 0x03 # define OBJ_NAME_TYPE_COMP_METH 0x04 # define OBJ_NAME_TYPE_NUM 0x05 # define OBJ_NAME_ALIAS 0x8000 # define OBJ_BSEARCH_VALUE_ON_NOMATCH 0x01 # define OBJ_BSEARCH_FIRST_VALUE_ON_MATCH 0x02 #ifdef __cplusplus extern "C" { #endif typedef struct obj_name_st { int type; int alias; const char *name; const char *data; } OBJ_NAME; # define OBJ_create_and_add_object(a,b,c) OBJ_create(a,b,c) int OBJ_NAME_init(void); int OBJ_NAME_new_index(unsigned long (*hash_func) (const char *), int (*cmp_func) (const char *, const char *), void (*free_func) (const char *, int, const char *)); const char *OBJ_NAME_get(const char *name, int type); int OBJ_NAME_add(const char *name, int type, const char *data); int OBJ_NAME_remove(const char *name, int type); void OBJ_NAME_cleanup(int type); /* -1 for everything */ void OBJ_NAME_do_all(int type, void (*fn) (const OBJ_NAME *, void *arg), void *arg); void OBJ_NAME_do_all_sorted(int type, void (*fn) (const OBJ_NAME *, void *arg), void *arg); ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o); ASN1_OBJECT *OBJ_nid2obj(int n); const char *OBJ_nid2ln(int n); const char *OBJ_nid2sn(int n); int OBJ_obj2nid(const ASN1_OBJECT *o); ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name); int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name); int OBJ_txt2nid(const char *s); int OBJ_ln2nid(const char *s); int OBJ_sn2nid(const char *s); int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b); const void *OBJ_bsearch_(const void *key, const void *base, int num, int size, int (*cmp) (const void *, const void *)); const void *OBJ_bsearch_ex_(const void *key, const void *base, int num, int size, int (*cmp) (const void *, const void *), int flags); # define _DECLARE_OBJ_BSEARCH_CMP_FN(scope, type1, type2, nm) \ static int nm##_cmp_BSEARCH_CMP_FN(const void *, const void *); \ static int nm##_cmp(type1 const *, type2 const *); \ scope type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) # define DECLARE_OBJ_BSEARCH_CMP_FN(type1, type2, cmp) \ _DECLARE_OBJ_BSEARCH_CMP_FN(static, type1, type2, cmp) # define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) /*- * Unsolved problem: if a type is actually a pointer type, like * nid_triple is, then its impossible to get a const where you need * it. Consider: * * typedef int nid_triple[3]; * const void *a_; * const nid_triple const *a = a_; * * The assignement discards a const because what you really want is: * * const int const * const *a = a_; * * But if you do that, you lose the fact that a is an array of 3 ints, * which breaks comparison functions. * * Thus we end up having to cast, sadly, or unpack the * declarations. Or, as I finally did in this case, delcare nid_triple * to be a struct, which it should have been in the first place. * * Ben, August 2008. * * Also, strictly speaking not all types need be const, but handling * the non-constness means a lot of complication, and in practice * comparison routines do always not touch their arguments. */ # define IMPLEMENT_OBJ_BSEARCH_CMP_FN(type1, type2, nm) \ static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ { \ type1 const *a = a_; \ type2 const *b = b_; \ return nm##_cmp(a,b); \ } \ static type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ { \ return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ nm##_cmp_BSEARCH_CMP_FN); \ } \ extern void dummy_prototype(void) # define IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ { \ type1 const *a = a_; \ type2 const *b = b_; \ return nm##_cmp(a,b); \ } \ type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ { \ return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ nm##_cmp_BSEARCH_CMP_FN); \ } \ extern void dummy_prototype(void) # define OBJ_bsearch(type1,key,type2,base,num,cmp) \ ((type2 *)OBJ_bsearch_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ num,sizeof(type2), \ ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ (void)CHECKED_PTR_OF(type2,cmp##_type_2), \ cmp##_BSEARCH_CMP_FN))) # define OBJ_bsearch_ex(type1,key,type2,base,num,cmp,flags) \ ((type2 *)OBJ_bsearch_ex_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ num,sizeof(type2), \ ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ (void)type_2=CHECKED_PTR_OF(type2,cmp##_type_2), \ cmp##_BSEARCH_CMP_FN)),flags) int OBJ_new_nid(int num); int OBJ_add_object(const ASN1_OBJECT *obj); int OBJ_create(const char *oid, const char *sn, const char *ln); void OBJ_cleanup(void); int OBJ_create_objects(BIO *in); int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid); int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid); int OBJ_add_sigid(int signid, int dig_id, int pkey_id); void OBJ_sigid_free(void); extern int obj_cleanup_defer; void check_defer(int nid); /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_OBJ_strings(void); /* Error codes for the OBJ functions. */ /* Function codes. */ # define OBJ_F_OBJ_ADD_OBJECT 105 # define OBJ_F_OBJ_CREATE 100 # define OBJ_F_OBJ_DUP 101 # define OBJ_F_OBJ_NAME_NEW_INDEX 106 # define OBJ_F_OBJ_NID2LN 102 # define OBJ_F_OBJ_NID2OBJ 103 # define OBJ_F_OBJ_NID2SN 104 /* Reason codes. */ # define OBJ_R_MALLOC_FAILURE 100 # define OBJ_R_UNKNOWN_NID 101 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/ocsp.h ================================================ /* ocsp.h */ /* * Written by Tom Titchener for the OpenSSL * project. */ /* * History: This file was transfered to Richard Levitte from CertCo by Kathy * Weinhold in mid-spring 2000 to be included in OpenSSL or released as a * patch kit. */ /* ==================================================================== * Copyright (c) 1998-2000 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_OCSP_H # define HEADER_OCSP_H # include # include # include # include #ifdef __cplusplus extern "C" { #endif /* Various flags and values */ # define OCSP_DEFAULT_NONCE_LENGTH 16 # define OCSP_NOCERTS 0x1 # define OCSP_NOINTERN 0x2 # define OCSP_NOSIGS 0x4 # define OCSP_NOCHAIN 0x8 # define OCSP_NOVERIFY 0x10 # define OCSP_NOEXPLICIT 0x20 # define OCSP_NOCASIGN 0x40 # define OCSP_NODELEGATED 0x80 # define OCSP_NOCHECKS 0x100 # define OCSP_TRUSTOTHER 0x200 # define OCSP_RESPID_KEY 0x400 # define OCSP_NOTIME 0x800 /*- CertID ::= SEQUENCE { * hashAlgorithm AlgorithmIdentifier, * issuerNameHash OCTET STRING, -- Hash of Issuer's DN * issuerKeyHash OCTET STRING, -- Hash of Issuers public key (excluding the tag & length fields) * serialNumber CertificateSerialNumber } */ typedef struct ocsp_cert_id_st { X509_ALGOR *hashAlgorithm; ASN1_OCTET_STRING *issuerNameHash; ASN1_OCTET_STRING *issuerKeyHash; ASN1_INTEGER *serialNumber; } OCSP_CERTID; DECLARE_STACK_OF(OCSP_CERTID) /*- Request ::= SEQUENCE { * reqCert CertID, * singleRequestExtensions [0] EXPLICIT Extensions OPTIONAL } */ typedef struct ocsp_one_request_st { OCSP_CERTID *reqCert; STACK_OF(X509_EXTENSION) *singleRequestExtensions; } OCSP_ONEREQ; DECLARE_STACK_OF(OCSP_ONEREQ) DECLARE_ASN1_SET_OF(OCSP_ONEREQ) /*- TBSRequest ::= SEQUENCE { * version [0] EXPLICIT Version DEFAULT v1, * requestorName [1] EXPLICIT GeneralName OPTIONAL, * requestList SEQUENCE OF Request, * requestExtensions [2] EXPLICIT Extensions OPTIONAL } */ typedef struct ocsp_req_info_st { ASN1_INTEGER *version; GENERAL_NAME *requestorName; STACK_OF(OCSP_ONEREQ) *requestList; STACK_OF(X509_EXTENSION) *requestExtensions; } OCSP_REQINFO; /*- Signature ::= SEQUENCE { * signatureAlgorithm AlgorithmIdentifier, * signature BIT STRING, * certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL } */ typedef struct ocsp_signature_st { X509_ALGOR *signatureAlgorithm; ASN1_BIT_STRING *signature; STACK_OF(X509) *certs; } OCSP_SIGNATURE; /*- OCSPRequest ::= SEQUENCE { * tbsRequest TBSRequest, * optionalSignature [0] EXPLICIT Signature OPTIONAL } */ typedef struct ocsp_request_st { OCSP_REQINFO *tbsRequest; OCSP_SIGNATURE *optionalSignature; /* OPTIONAL */ } OCSP_REQUEST; /*- OCSPResponseStatus ::= ENUMERATED { * successful (0), --Response has valid confirmations * malformedRequest (1), --Illegal confirmation request * internalError (2), --Internal error in issuer * tryLater (3), --Try again later * --(4) is not used * sigRequired (5), --Must sign the request * unauthorized (6) --Request unauthorized * } */ # define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 # define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 # define OCSP_RESPONSE_STATUS_INTERNALERROR 2 # define OCSP_RESPONSE_STATUS_TRYLATER 3 # define OCSP_RESPONSE_STATUS_SIGREQUIRED 5 # define OCSP_RESPONSE_STATUS_UNAUTHORIZED 6 /*- ResponseBytes ::= SEQUENCE { * responseType OBJECT IDENTIFIER, * response OCTET STRING } */ typedef struct ocsp_resp_bytes_st { ASN1_OBJECT *responseType; ASN1_OCTET_STRING *response; } OCSP_RESPBYTES; /*- OCSPResponse ::= SEQUENCE { * responseStatus OCSPResponseStatus, * responseBytes [0] EXPLICIT ResponseBytes OPTIONAL } */ struct ocsp_response_st { ASN1_ENUMERATED *responseStatus; OCSP_RESPBYTES *responseBytes; }; /*- ResponderID ::= CHOICE { * byName [1] Name, * byKey [2] KeyHash } */ # define V_OCSP_RESPID_NAME 0 # define V_OCSP_RESPID_KEY 1 struct ocsp_responder_id_st { int type; union { X509_NAME *byName; ASN1_OCTET_STRING *byKey; } value; }; DECLARE_STACK_OF(OCSP_RESPID) DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) /*- KeyHash ::= OCTET STRING --SHA-1 hash of responder's public key * --(excluding the tag and length fields) */ /*- RevokedInfo ::= SEQUENCE { * revocationTime GeneralizedTime, * revocationReason [0] EXPLICIT CRLReason OPTIONAL } */ typedef struct ocsp_revoked_info_st { ASN1_GENERALIZEDTIME *revocationTime; ASN1_ENUMERATED *revocationReason; } OCSP_REVOKEDINFO; /*- CertStatus ::= CHOICE { * good [0] IMPLICIT NULL, * revoked [1] IMPLICIT RevokedInfo, * unknown [2] IMPLICIT UnknownInfo } */ # define V_OCSP_CERTSTATUS_GOOD 0 # define V_OCSP_CERTSTATUS_REVOKED 1 # define V_OCSP_CERTSTATUS_UNKNOWN 2 typedef struct ocsp_cert_status_st { int type; union { ASN1_NULL *good; OCSP_REVOKEDINFO *revoked; ASN1_NULL *unknown; } value; } OCSP_CERTSTATUS; /*- SingleResponse ::= SEQUENCE { * certID CertID, * certStatus CertStatus, * thisUpdate GeneralizedTime, * nextUpdate [0] EXPLICIT GeneralizedTime OPTIONAL, * singleExtensions [1] EXPLICIT Extensions OPTIONAL } */ typedef struct ocsp_single_response_st { OCSP_CERTID *certId; OCSP_CERTSTATUS *certStatus; ASN1_GENERALIZEDTIME *thisUpdate; ASN1_GENERALIZEDTIME *nextUpdate; STACK_OF(X509_EXTENSION) *singleExtensions; } OCSP_SINGLERESP; DECLARE_STACK_OF(OCSP_SINGLERESP) DECLARE_ASN1_SET_OF(OCSP_SINGLERESP) /*- ResponseData ::= SEQUENCE { * version [0] EXPLICIT Version DEFAULT v1, * responderID ResponderID, * producedAt GeneralizedTime, * responses SEQUENCE OF SingleResponse, * responseExtensions [1] EXPLICIT Extensions OPTIONAL } */ typedef struct ocsp_response_data_st { ASN1_INTEGER *version; OCSP_RESPID *responderId; ASN1_GENERALIZEDTIME *producedAt; STACK_OF(OCSP_SINGLERESP) *responses; STACK_OF(X509_EXTENSION) *responseExtensions; } OCSP_RESPDATA; /*- BasicOCSPResponse ::= SEQUENCE { * tbsResponseData ResponseData, * signatureAlgorithm AlgorithmIdentifier, * signature BIT STRING, * certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL } */ /* * Note 1: The value for "signature" is specified in the OCSP rfc2560 as * follows: "The value for the signature SHALL be computed on the hash of * the DER encoding ResponseData." This means that you must hash the * DER-encoded tbsResponseData, and then run it through a crypto-signing * function, which will (at least w/RSA) do a hash-'n'-private-encrypt * operation. This seems a bit odd, but that's the spec. Also note that * the data structures do not leave anywhere to independently specify the * algorithm used for the initial hash. So, we look at the * signature-specification algorithm, and try to do something intelligent. * -- Kathy Weinhold, CertCo */ /* * Note 2: It seems that the mentioned passage from RFC 2560 (section * 4.2.1) is open for interpretation. I've done tests against another * responder, and found that it doesn't do the double hashing that the RFC * seems to say one should. Therefore, all relevant functions take a flag * saying which variant should be used. -- Richard Levitte, OpenSSL team * and CeloCom */ typedef struct ocsp_basic_response_st { OCSP_RESPDATA *tbsResponseData; X509_ALGOR *signatureAlgorithm; ASN1_BIT_STRING *signature; STACK_OF(X509) *certs; } OCSP_BASICRESP; /*- * CRLReason ::= ENUMERATED { * unspecified (0), * keyCompromise (1), * cACompromise (2), * affiliationChanged (3), * superseded (4), * cessationOfOperation (5), * certificateHold (6), * removeFromCRL (8) } */ # define OCSP_REVOKED_STATUS_NOSTATUS -1 # define OCSP_REVOKED_STATUS_UNSPECIFIED 0 # define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 # define OCSP_REVOKED_STATUS_CACOMPROMISE 2 # define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 # define OCSP_REVOKED_STATUS_SUPERSEDED 4 # define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 # define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 # define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 /*- * CrlID ::= SEQUENCE { * crlUrl [0] EXPLICIT IA5String OPTIONAL, * crlNum [1] EXPLICIT INTEGER OPTIONAL, * crlTime [2] EXPLICIT GeneralizedTime OPTIONAL } */ typedef struct ocsp_crl_id_st { ASN1_IA5STRING *crlUrl; ASN1_INTEGER *crlNum; ASN1_GENERALIZEDTIME *crlTime; } OCSP_CRLID; /*- * ServiceLocator ::= SEQUENCE { * issuer Name, * locator AuthorityInfoAccessSyntax OPTIONAL } */ typedef struct ocsp_service_locator_st { X509_NAME *issuer; STACK_OF(ACCESS_DESCRIPTION) *locator; } OCSP_SERVICELOC; # define PEM_STRING_OCSP_REQUEST "OCSP REQUEST" # define PEM_STRING_OCSP_RESPONSE "OCSP RESPONSE" # define d2i_OCSP_REQUEST_bio(bp,p) ASN1_d2i_bio_of(OCSP_REQUEST,OCSP_REQUEST_new,d2i_OCSP_REQUEST,bp,p) # define d2i_OCSP_RESPONSE_bio(bp,p) ASN1_d2i_bio_of(OCSP_RESPONSE,OCSP_RESPONSE_new,d2i_OCSP_RESPONSE,bp,p) # define PEM_read_bio_OCSP_REQUEST(bp,x,cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \ (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,bp,(char **)x,cb,NULL) # define PEM_read_bio_OCSP_RESPONSE(bp,x,cb)(OCSP_RESPONSE *)PEM_ASN1_read_bio(\ (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,bp,(char **)x,cb,NULL) # define PEM_write_bio_OCSP_REQUEST(bp,o) \ PEM_ASN1_write_bio((int (*)())i2d_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,\ bp,(char *)o, NULL,NULL,0,NULL,NULL) # define PEM_write_bio_OCSP_RESPONSE(bp,o) \ PEM_ASN1_write_bio((int (*)())i2d_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,\ bp,(char *)o, NULL,NULL,0,NULL,NULL) # define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o) # define i2d_OCSP_REQUEST_bio(bp,o) ASN1_i2d_bio_of(OCSP_REQUEST,i2d_OCSP_REQUEST,bp,o) # define OCSP_REQUEST_sign(o,pkey,md) \ ASN1_item_sign(ASN1_ITEM_rptr(OCSP_REQINFO),\ o->optionalSignature->signatureAlgorithm,NULL,\ o->optionalSignature->signature,o->tbsRequest,pkey,md) # define OCSP_BASICRESP_sign(o,pkey,md,d) \ ASN1_item_sign(ASN1_ITEM_rptr(OCSP_RESPDATA),o->signatureAlgorithm,NULL,\ o->signature,o->tbsResponseData,pkey,md) # define OCSP_REQUEST_verify(a,r) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_REQINFO),\ a->optionalSignature->signatureAlgorithm,\ a->optionalSignature->signature,a->tbsRequest,r) # define OCSP_BASICRESP_verify(a,r,d) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_RESPDATA),\ a->signatureAlgorithm,a->signature,a->tbsResponseData,r) # define ASN1_BIT_STRING_digest(data,type,md,len) \ ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) # define OCSP_CERTSTATUS_dup(cs)\ (OCSP_CERTSTATUS*)ASN1_dup((int(*)())i2d_OCSP_CERTSTATUS,\ (char *(*)())d2i_OCSP_CERTSTATUS,(char *)(cs)) OCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id); OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req, int maxline); int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx); int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx); OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *io, int maxline); void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx); void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len); int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, ASN1_VALUE *val); int OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, ASN1_VALUE **pval, const ASN1_ITEM *it); BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx); int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, ASN1_VALUE *val); int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, const char *op, const char *path); int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req); int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx, const char *name, const char *value); OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, X509 *subject, X509 *issuer); OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst, X509_NAME *issuerName, ASN1_BIT_STRING *issuerKey, ASN1_INTEGER *serialNumber); OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid); int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len); int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); int OCSP_request_set1_name(OCSP_REQUEST *req, X509_NAME *nm); int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); int OCSP_request_sign(OCSP_REQUEST *req, X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, STACK_OF(X509) *certs, unsigned long flags); int OCSP_response_status(OCSP_RESPONSE *resp); OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp); int OCSP_resp_count(OCSP_BASICRESP *bs); OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx); int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last); int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason, ASN1_GENERALIZEDTIME **revtime, ASN1_GENERALIZEDTIME **thisupd, ASN1_GENERALIZEDTIME **nextupd); int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status, int *reason, ASN1_GENERALIZEDTIME **revtime, ASN1_GENERALIZEDTIME **thisupd, ASN1_GENERALIZEDTIME **nextupd); int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, ASN1_GENERALIZEDTIME *nextupd, long sec, long maxsec); int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, X509_STORE *store, unsigned long flags); int OCSP_parse_url(const char *url, char **phost, char **pport, char **ppath, int *pssl); int OCSP_id_issuer_cmp(OCSP_CERTID *a, OCSP_CERTID *b); int OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b); int OCSP_request_onereq_count(OCSP_REQUEST *req); OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i); OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *one); int OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, ASN1_OCTET_STRING **pikeyHash, ASN1_INTEGER **pserial, OCSP_CERTID *cid); int OCSP_request_is_signed(OCSP_REQUEST *req); OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs); OCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp, OCSP_CERTID *cid, int status, int reason, ASN1_TIME *revtime, ASN1_TIME *thisupd, ASN1_TIME *nextupd); int OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert); int OCSP_basic_sign(OCSP_BASICRESP *brsp, X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, STACK_OF(X509) *certs, unsigned long flags); X509_EXTENSION *OCSP_crlID_new(char *url, long *n, char *tim); X509_EXTENSION *OCSP_accept_responses_new(char **oids); X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); X509_EXTENSION *OCSP_url_svcloc_new(X509_NAME *issuer, char **urls); int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); int OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, ASN1_OBJECT *obj, int lastpos); int OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos); X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc); X509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc); void *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit, int *idx); int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit, unsigned long flags); int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc); int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x); int OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos); int OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, ASN1_OBJECT *obj, int lastpos); int OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos); X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc); X509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc); void *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx); int OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit, unsigned long flags); int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc); int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x); int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos); int OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, ASN1_OBJECT *obj, int lastpos); int OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit, int lastpos); X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc); X509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc); void *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit, int *idx); int OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value, int crit, unsigned long flags); int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc); int OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x); int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos); int OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, ASN1_OBJECT *obj, int lastpos); int OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit, int lastpos); X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc); X509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc); void *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit, int *idx); int OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value, int crit, unsigned long flags); int OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc); DECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP) DECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS) DECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO) DECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP) DECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA) DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) DECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE) DECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES) DECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ) DECLARE_ASN1_FUNCTIONS(OCSP_CERTID) DECLARE_ASN1_FUNCTIONS(OCSP_REQUEST) DECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE) DECLARE_ASN1_FUNCTIONS(OCSP_REQINFO) DECLARE_ASN1_FUNCTIONS(OCSP_CRLID) DECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC) const char *OCSP_response_status_str(long s); const char *OCSP_cert_status_str(long s); const char *OCSP_crl_reason_str(long s); int OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST *a, unsigned long flags); int OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags); int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, X509_STORE *st, unsigned long flags); /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_OCSP_strings(void); /* Error codes for the OCSP functions. */ /* Function codes. */ # define OCSP_F_ASN1_STRING_ENCODE 100 # define OCSP_F_D2I_OCSP_NONCE 102 # define OCSP_F_OCSP_BASIC_ADD1_STATUS 103 # define OCSP_F_OCSP_BASIC_SIGN 104 # define OCSP_F_OCSP_BASIC_VERIFY 105 # define OCSP_F_OCSP_CERT_ID_NEW 101 # define OCSP_F_OCSP_CHECK_DELEGATED 106 # define OCSP_F_OCSP_CHECK_IDS 107 # define OCSP_F_OCSP_CHECK_ISSUER 108 # define OCSP_F_OCSP_CHECK_VALIDITY 115 # define OCSP_F_OCSP_MATCH_ISSUERID 109 # define OCSP_F_OCSP_PARSE_URL 114 # define OCSP_F_OCSP_REQUEST_SIGN 110 # define OCSP_F_OCSP_REQUEST_VERIFY 116 # define OCSP_F_OCSP_RESPONSE_GET1_BASIC 111 # define OCSP_F_OCSP_SENDREQ_BIO 112 # define OCSP_F_OCSP_SENDREQ_NBIO 117 # define OCSP_F_PARSE_HTTP_LINE1 118 # define OCSP_F_REQUEST_VERIFY 113 /* Reason codes. */ # define OCSP_R_BAD_DATA 100 # define OCSP_R_CERTIFICATE_VERIFY_ERROR 101 # define OCSP_R_DIGEST_ERR 102 # define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD 122 # define OCSP_R_ERROR_IN_THISUPDATE_FIELD 123 # define OCSP_R_ERROR_PARSING_URL 121 # define OCSP_R_MISSING_OCSPSIGNING_USAGE 103 # define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE 124 # define OCSP_R_NOT_BASIC_RESPONSE 104 # define OCSP_R_NO_CERTIFICATES_IN_CHAIN 105 # define OCSP_R_NO_CONTENT 106 # define OCSP_R_NO_PUBLIC_KEY 107 # define OCSP_R_NO_RESPONSE_DATA 108 # define OCSP_R_NO_REVOKED_TIME 109 # define OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 110 # define OCSP_R_REQUEST_NOT_SIGNED 128 # define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA 111 # define OCSP_R_ROOT_CA_NOT_TRUSTED 112 # define OCSP_R_SERVER_READ_ERROR 113 # define OCSP_R_SERVER_RESPONSE_ERROR 114 # define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 # define OCSP_R_SERVER_WRITE_ERROR 116 # define OCSP_R_SIGNATURE_FAILURE 117 # define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND 118 # define OCSP_R_STATUS_EXPIRED 125 # define OCSP_R_STATUS_NOT_YET_VALID 126 # define OCSP_R_STATUS_TOO_OLD 127 # define OCSP_R_UNKNOWN_MESSAGE_DIGEST 119 # define OCSP_R_UNKNOWN_NID 120 # define OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE 129 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/opensslconf.h ================================================ /* opensslconf.h */ /* WARNING: Generated automatically from opensslconf.h.in by Configure. */ #ifdef __cplusplus extern "C" { #endif /* OpenSSL was configured with the following options: */ #ifndef OPENSSL_SYSNAME_iOS # define OPENSSL_SYSNAME_iOS #endif #ifndef OPENSSL_DOING_MAKEDEPEND #ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 # define OPENSSL_NO_EC_NISTP_64_GCC_128 #endif #ifndef OPENSSL_NO_GMP # define OPENSSL_NO_GMP #endif #ifndef OPENSSL_NO_JPAKE # define OPENSSL_NO_JPAKE #endif #ifndef OPENSSL_NO_KRB5 # define OPENSSL_NO_KRB5 #endif #ifndef OPENSSL_NO_LIBUNBOUND # define OPENSSL_NO_LIBUNBOUND #endif #ifndef OPENSSL_NO_MD2 # define OPENSSL_NO_MD2 #endif #ifndef OPENSSL_NO_RC5 # define OPENSSL_NO_RC5 #endif #ifndef OPENSSL_NO_RFC3779 # define OPENSSL_NO_RFC3779 #endif #ifndef OPENSSL_NO_SCTP # define OPENSSL_NO_SCTP #endif #ifndef OPENSSL_NO_SSL_TRACE # define OPENSSL_NO_SSL_TRACE #endif #ifndef OPENSSL_NO_SSL2 # define OPENSSL_NO_SSL2 #endif #ifndef OPENSSL_NO_STORE # define OPENSSL_NO_STORE #endif #ifndef OPENSSL_NO_UNIT_TEST # define OPENSSL_NO_UNIT_TEST #endif #ifndef OPENSSL_NO_WEAK_SSL_CIPHERS # define OPENSSL_NO_WEAK_SSL_CIPHERS #endif #endif /* OPENSSL_DOING_MAKEDEPEND */ #ifndef OPENSSL_THREADS # define OPENSSL_THREADS #endif #ifndef OPENSSL_NO_DYNAMIC_ENGINE # define OPENSSL_NO_DYNAMIC_ENGINE #endif /* The OPENSSL_NO_* macros are also defined as NO_* if the application asks for it. This is a transient feature that is provided for those who haven't had the time to do the appropriate changes in their applications. */ #ifdef OPENSSL_ALGORITHM_DEFINES # if defined(OPENSSL_NO_EC_NISTP_64_GCC_128) && !defined(NO_EC_NISTP_64_GCC_128) # define NO_EC_NISTP_64_GCC_128 # endif # if defined(OPENSSL_NO_GMP) && !defined(NO_GMP) # define NO_GMP # endif # if defined(OPENSSL_NO_JPAKE) && !defined(NO_JPAKE) # define NO_JPAKE # endif # if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5) # define NO_KRB5 # endif # if defined(OPENSSL_NO_LIBUNBOUND) && !defined(NO_LIBUNBOUND) # define NO_LIBUNBOUND # endif # if defined(OPENSSL_NO_MD2) && !defined(NO_MD2) # define NO_MD2 # endif # if defined(OPENSSL_NO_RC5) && !defined(NO_RC5) # define NO_RC5 # endif # if defined(OPENSSL_NO_RFC3779) && !defined(NO_RFC3779) # define NO_RFC3779 # endif # if defined(OPENSSL_NO_SCTP) && !defined(NO_SCTP) # define NO_SCTP # endif # if defined(OPENSSL_NO_SSL_TRACE) && !defined(NO_SSL_TRACE) # define NO_SSL_TRACE # endif # if defined(OPENSSL_NO_SSL2) && !defined(NO_SSL2) # define NO_SSL2 # endif # if defined(OPENSSL_NO_STORE) && !defined(NO_STORE) # define NO_STORE # endif # if defined(OPENSSL_NO_UNIT_TEST) && !defined(NO_UNIT_TEST) # define NO_UNIT_TEST # endif # if defined(OPENSSL_NO_WEAK_SSL_CIPHERS) && !defined(NO_WEAK_SSL_CIPHERS) # define NO_WEAK_SSL_CIPHERS # endif #endif /* crypto/opensslconf.h.in */ /* Generate 80386 code? */ #undef I386_ONLY #if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */ #if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR) #define ENGINESDIR "/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-armv7/output/lib/engines" #define OPENSSLDIR "/Users/lhl/Downloads/ijkplayer-master/ios/build/openssl-armv7/output" #endif #endif #undef OPENSSL_UNISTD #define OPENSSL_UNISTD #undef OPENSSL_EXPORT_VAR_AS_FUNCTION #if defined(HEADER_IDEA_H) && !defined(IDEA_INT) #define IDEA_INT unsigned int #endif #if defined(HEADER_MD2_H) && !defined(MD2_INT) #define MD2_INT unsigned int #endif #if defined(HEADER_RC2_H) && !defined(RC2_INT) /* I need to put in a mod for the alpha - eay */ #define RC2_INT unsigned int #endif #if defined(HEADER_RC4_H) #if !defined(RC4_INT) /* using int types make the structure larger but make the code faster * on most boxes I have tested - up to %20 faster. */ /* * I don't know what does "most" mean, but declaring "int" is a must on: * - Intel P6 because partial register stalls are very expensive; * - elder Alpha because it lacks byte load/store instructions; */ #define RC4_INT unsigned char #endif #if !defined(RC4_CHUNK) /* * This enables code handling data aligned at natural CPU word * boundary. See crypto/rc4/rc4_enc.c for further details. */ #define RC4_CHUNK unsigned long #endif #endif #if (defined(HEADER_NEW_DES_H) || defined(HEADER_DES_H)) && !defined(DES_LONG) /* If this is set to 'unsigned int' on a DEC Alpha, this gives about a * %20 speed up (longs are 8 bytes, int's are 4). */ #ifndef DES_LONG #define DES_LONG unsigned long #endif #endif #if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H) #define CONFIG_HEADER_BN_H #define BN_LLONG /* Should we define BN_DIV2W here? */ /* Only one for the following should be defined */ #undef SIXTY_FOUR_BIT_LONG #undef SIXTY_FOUR_BIT #define THIRTY_TWO_BIT #endif #if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H) #define CONFIG_HEADER_RC4_LOCL_H /* if this is defined data[i] is used instead of *data, this is a %20 * speedup on x86 */ #undef RC4_INDEX #endif #if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H) #define CONFIG_HEADER_BF_LOCL_H #define BF_PTR #endif /* HEADER_BF_LOCL_H */ #if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H) #define CONFIG_HEADER_DES_LOCL_H #ifndef DES_DEFAULT_OPTIONS /* the following is tweaked from a config script, that is why it is a * protected undef/define */ #ifndef DES_PTR #undef DES_PTR #endif /* This helps C compiler generate the correct code for multiple functional * units. It reduces register dependancies at the expense of 2 more * registers */ #ifndef DES_RISC1 #undef DES_RISC1 #endif #ifndef DES_RISC2 #undef DES_RISC2 #endif #if defined(DES_RISC1) && defined(DES_RISC2) #error YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!! #endif /* Unroll the inner loop, this sometimes helps, sometimes hinders. * Very mucy CPU dependant */ #ifndef DES_UNROLL #define DES_UNROLL #endif /* These default values were supplied by * Peter Gutman * They are only used if nothing else has been defined */ #if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL) /* Special defines which change the way the code is built depending on the CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find even newer MIPS CPU's, but at the moment one size fits all for optimization options. Older Sparc's work better with only UNROLL, but there's no way to tell at compile time what it is you're running on */ #if defined( __sun ) || defined ( sun ) /* Newer Sparc's */ # define DES_PTR # define DES_RISC1 # define DES_UNROLL #elif defined( __ultrix ) /* Older MIPS */ # define DES_PTR # define DES_RISC2 # define DES_UNROLL #elif defined( __osf1__ ) /* Alpha */ # define DES_PTR # define DES_RISC2 #elif defined ( _AIX ) /* RS6000 */ /* Unknown */ #elif defined( __hpux ) /* HP-PA */ /* Unknown */ #elif defined( __aux ) /* 68K */ /* Unknown */ #elif defined( __dgux ) /* 88K (but P6 in latest boxes) */ # define DES_UNROLL #elif defined( __sgi ) /* Newer MIPS */ # define DES_PTR # define DES_RISC2 # define DES_UNROLL #elif defined(i386) || defined(__i386__) /* x86 boxes, should be gcc */ # define DES_PTR # define DES_RISC1 # define DES_UNROLL #endif /* Systems-specific speed defines */ #endif #endif /* DES_DEFAULT_OPTIONS */ #endif /* HEADER_DES_LOCL_H */ #ifdef __cplusplus } #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/opensslv.h ================================================ #ifndef HEADER_OPENSSLV_H # define HEADER_OPENSSLV_H #ifdef __cplusplus extern "C" { #endif /*- * Numeric release version identifier: * MNNFFPPS: major minor fix patch status * The status nibble has one of the values 0 for development, 1 to e for betas * 1 to 14, and f for release. The patch level is exactly that. * For example: * 0.9.3-dev 0x00903000 * 0.9.3-beta1 0x00903001 * 0.9.3-beta2-dev 0x00903002 * 0.9.3-beta2 0x00903002 (same as ...beta2-dev) * 0.9.3 0x0090300f * 0.9.3a 0x0090301f * 0.9.4 0x0090400f * 1.2.3z 0x102031af * * For continuity reasons (because 0.9.5 is already out, and is coded * 0x00905100), between 0.9.5 and 0.9.6 the coding of the patch level * part is slightly different, by setting the highest bit. This means * that 0.9.5a looks like this: 0x0090581f. At 0.9.6, we can start * with 0x0090600S... * * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.) * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for * major minor fix final patch/beta) */ # define OPENSSL_VERSION_NUMBER 0x1000208fL # ifdef OPENSSL_FIPS # define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2h-fips 3 May 2016" # else # define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2h 3 May 2016" # endif # define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT /*- * The macros below are to be used for shared library (.so, .dll, ...) * versioning. That kind of versioning works a bit differently between * operating systems. The most usual scheme is to set a major and a minor * number, and have the runtime loader check that the major number is equal * to what it was at application link time, while the minor number has to * be greater or equal to what it was at application link time. With this * scheme, the version number is usually part of the file name, like this: * * libcrypto.so.0.9 * * Some unixen also make a softlink with the major verson number only: * * libcrypto.so.0 * * On Tru64 and IRIX 6.x it works a little bit differently. There, the * shared library version is stored in the file, and is actually a series * of versions, separated by colons. The rightmost version present in the * library when linking an application is stored in the application to be * matched at run time. When the application is run, a check is done to * see if the library version stored in the application matches any of the * versions in the version string of the library itself. * This version string can be constructed in any way, depending on what * kind of matching is desired. However, to implement the same scheme as * the one used in the other unixen, all compatible versions, from lowest * to highest, should be part of the string. Consecutive builds would * give the following versions strings: * * 3.0 * 3.0:3.1 * 3.0:3.1:3.2 * 4.0 * 4.0:4.1 * * Notice how version 4 is completely incompatible with version, and * therefore give the breach you can see. * * There may be other schemes as well that I haven't yet discovered. * * So, here's the way it works here: first of all, the library version * number doesn't need at all to match the overall OpenSSL version. * However, it's nice and more understandable if it actually does. * The current library version is stored in the macro SHLIB_VERSION_NUMBER, * which is just a piece of text in the format "M.m.e" (Major, minor, edit). * For the sake of Tru64, IRIX, and any other OS that behaves in similar ways, * we need to keep a history of version numbers, which is done in the * macro SHLIB_VERSION_HISTORY. The numbers are separated by colons and * should only keep the versions that are binary compatible with the current. */ # define SHLIB_VERSION_HISTORY "" # define SHLIB_VERSION_NUMBER "1.0.0" #ifdef __cplusplus } #endif #endif /* HEADER_OPENSSLV_H */ ================================================ FILE: 3rParty/FFmpeg/include/openssl/ossl_typ.h ================================================ /* ==================================================================== * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_OPENSSL_TYPES_H # define HEADER_OPENSSL_TYPES_H #ifdef __cplusplus extern "C" { #endif # include # ifdef NO_ASN1_TYPEDEFS # define ASN1_INTEGER ASN1_STRING # define ASN1_ENUMERATED ASN1_STRING # define ASN1_BIT_STRING ASN1_STRING # define ASN1_OCTET_STRING ASN1_STRING # define ASN1_PRINTABLESTRING ASN1_STRING # define ASN1_T61STRING ASN1_STRING # define ASN1_IA5STRING ASN1_STRING # define ASN1_UTCTIME ASN1_STRING # define ASN1_GENERALIZEDTIME ASN1_STRING # define ASN1_TIME ASN1_STRING # define ASN1_GENERALSTRING ASN1_STRING # define ASN1_UNIVERSALSTRING ASN1_STRING # define ASN1_BMPSTRING ASN1_STRING # define ASN1_VISIBLESTRING ASN1_STRING # define ASN1_UTF8STRING ASN1_STRING # define ASN1_BOOLEAN int # define ASN1_NULL int # else typedef struct asn1_string_st ASN1_INTEGER; typedef struct asn1_string_st ASN1_ENUMERATED; typedef struct asn1_string_st ASN1_BIT_STRING; typedef struct asn1_string_st ASN1_OCTET_STRING; typedef struct asn1_string_st ASN1_PRINTABLESTRING; typedef struct asn1_string_st ASN1_T61STRING; typedef struct asn1_string_st ASN1_IA5STRING; typedef struct asn1_string_st ASN1_GENERALSTRING; typedef struct asn1_string_st ASN1_UNIVERSALSTRING; typedef struct asn1_string_st ASN1_BMPSTRING; typedef struct asn1_string_st ASN1_UTCTIME; typedef struct asn1_string_st ASN1_TIME; typedef struct asn1_string_st ASN1_GENERALIZEDTIME; typedef struct asn1_string_st ASN1_VISIBLESTRING; typedef struct asn1_string_st ASN1_UTF8STRING; typedef struct asn1_string_st ASN1_STRING; typedef int ASN1_BOOLEAN; typedef int ASN1_NULL; # endif typedef struct asn1_object_st ASN1_OBJECT; typedef struct ASN1_ITEM_st ASN1_ITEM; typedef struct asn1_pctx_st ASN1_PCTX; # ifdef OPENSSL_SYS_WIN32 # undef X509_NAME # undef X509_EXTENSIONS # undef X509_CERT_PAIR # undef PKCS7_ISSUER_AND_SERIAL # undef OCSP_REQUEST # undef OCSP_RESPONSE # endif # ifdef BIGNUM # undef BIGNUM # endif typedef struct bignum_st BIGNUM; typedef struct bignum_ctx BN_CTX; typedef struct bn_blinding_st BN_BLINDING; typedef struct bn_mont_ctx_st BN_MONT_CTX; typedef struct bn_recp_ctx_st BN_RECP_CTX; typedef struct bn_gencb_st BN_GENCB; typedef struct buf_mem_st BUF_MEM; typedef struct evp_cipher_st EVP_CIPHER; typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; typedef struct env_md_st EVP_MD; typedef struct env_md_ctx_st EVP_MD_CTX; typedef struct evp_pkey_st EVP_PKEY; typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; typedef struct evp_pkey_method_st EVP_PKEY_METHOD; typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; typedef struct dh_st DH; typedef struct dh_method DH_METHOD; typedef struct dsa_st DSA; typedef struct dsa_method DSA_METHOD; typedef struct rsa_st RSA; typedef struct rsa_meth_st RSA_METHOD; typedef struct rand_meth_st RAND_METHOD; typedef struct ecdh_method ECDH_METHOD; typedef struct ecdsa_method ECDSA_METHOD; typedef struct x509_st X509; typedef struct X509_algor_st X509_ALGOR; typedef struct X509_crl_st X509_CRL; typedef struct x509_crl_method_st X509_CRL_METHOD; typedef struct x509_revoked_st X509_REVOKED; typedef struct X509_name_st X509_NAME; typedef struct X509_pubkey_st X509_PUBKEY; typedef struct x509_store_st X509_STORE; typedef struct x509_store_ctx_st X509_STORE_CTX; typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; typedef struct v3_ext_ctx X509V3_CTX; typedef struct conf_st CONF; typedef struct store_st STORE; typedef struct store_method_st STORE_METHOD; typedef struct ui_st UI; typedef struct ui_method_st UI_METHOD; typedef struct st_ERR_FNS ERR_FNS; typedef struct engine_st ENGINE; typedef struct ssl_st SSL; typedef struct ssl_ctx_st SSL_CTX; typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; typedef struct DIST_POINT_st DIST_POINT; typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; /* If placed in pkcs12.h, we end up with a circular depency with pkcs7.h */ # define DECLARE_PKCS12_STACK_OF(type)/* Nothing */ # define IMPLEMENT_PKCS12_STACK_OF(type)/* Nothing */ typedef struct crypto_ex_data_st CRYPTO_EX_DATA; /* Callback types for crypto.h */ typedef int CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl, void *argp); typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl, void *argp); typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, void *from_d, int idx, long argl, void *argp); typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; typedef struct ocsp_response_st OCSP_RESPONSE; typedef struct ocsp_responder_id_st OCSP_RESPID; #ifdef __cplusplus } #endif #endif /* def HEADER_OPENSSL_TYPES_H */ ================================================ FILE: 3rParty/FFmpeg/include/openssl/pem.h ================================================ /* crypto/pem/pem.h */ /* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_PEM_H # define HEADER_PEM_H # include # ifndef OPENSSL_NO_BIO # include # endif # ifndef OPENSSL_NO_STACK # include # endif # include # include # include #ifdef __cplusplus extern "C" { #endif # define PEM_BUFSIZE 1024 # define PEM_OBJ_UNDEF 0 # define PEM_OBJ_X509 1 # define PEM_OBJ_X509_REQ 2 # define PEM_OBJ_CRL 3 # define PEM_OBJ_SSL_SESSION 4 # define PEM_OBJ_PRIV_KEY 10 # define PEM_OBJ_PRIV_RSA 11 # define PEM_OBJ_PRIV_DSA 12 # define PEM_OBJ_PRIV_DH 13 # define PEM_OBJ_PUB_RSA 14 # define PEM_OBJ_PUB_DSA 15 # define PEM_OBJ_PUB_DH 16 # define PEM_OBJ_DHPARAMS 17 # define PEM_OBJ_DSAPARAMS 18 # define PEM_OBJ_PRIV_RSA_PUBLIC 19 # define PEM_OBJ_PRIV_ECDSA 20 # define PEM_OBJ_PUB_ECDSA 21 # define PEM_OBJ_ECPARAMETERS 22 # define PEM_ERROR 30 # define PEM_DEK_DES_CBC 40 # define PEM_DEK_IDEA_CBC 45 # define PEM_DEK_DES_EDE 50 # define PEM_DEK_DES_ECB 60 # define PEM_DEK_RSA 70 # define PEM_DEK_RSA_MD2 80 # define PEM_DEK_RSA_MD5 90 # define PEM_MD_MD2 NID_md2 # define PEM_MD_MD5 NID_md5 # define PEM_MD_SHA NID_sha # define PEM_MD_MD2_RSA NID_md2WithRSAEncryption # define PEM_MD_MD5_RSA NID_md5WithRSAEncryption # define PEM_MD_SHA_RSA NID_sha1WithRSAEncryption # define PEM_STRING_X509_OLD "X509 CERTIFICATE" # define PEM_STRING_X509 "CERTIFICATE" # define PEM_STRING_X509_PAIR "CERTIFICATE PAIR" # define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE" # define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST" # define PEM_STRING_X509_REQ "CERTIFICATE REQUEST" # define PEM_STRING_X509_CRL "X509 CRL" # define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY" # define PEM_STRING_PUBLIC "PUBLIC KEY" # define PEM_STRING_RSA "RSA PRIVATE KEY" # define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY" # define PEM_STRING_DSA "DSA PRIVATE KEY" # define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY" # define PEM_STRING_PKCS7 "PKCS7" # define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA" # define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY" # define PEM_STRING_PKCS8INF "PRIVATE KEY" # define PEM_STRING_DHPARAMS "DH PARAMETERS" # define PEM_STRING_DHXPARAMS "X9.42 DH PARAMETERS" # define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS" # define PEM_STRING_DSAPARAMS "DSA PARAMETERS" # define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY" # define PEM_STRING_ECPARAMETERS "EC PARAMETERS" # define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY" # define PEM_STRING_PARAMETERS "PARAMETERS" # define PEM_STRING_CMS "CMS" /* * Note that this structure is initialised by PEM_SealInit and cleaned up * by PEM_SealFinal (at least for now) */ typedef struct PEM_Encode_Seal_st { EVP_ENCODE_CTX encode; EVP_MD_CTX md; EVP_CIPHER_CTX cipher; } PEM_ENCODE_SEAL_CTX; /* enc_type is one off */ # define PEM_TYPE_ENCRYPTED 10 # define PEM_TYPE_MIC_ONLY 20 # define PEM_TYPE_MIC_CLEAR 30 # define PEM_TYPE_CLEAR 40 typedef struct pem_recip_st { char *name; X509_NAME *dn; int cipher; int key_enc; /* char iv[8]; unused and wrong size */ } PEM_USER; typedef struct pem_ctx_st { int type; /* what type of object */ struct { int version; int mode; } proc_type; char *domain; struct { int cipher; /*- unused, and wrong size unsigned char iv[8]; */ } DEK_info; PEM_USER *originator; int num_recipient; PEM_USER **recipient; /*- XXX(ben): don#t think this is used! STACK *x509_chain; / * certificate chain */ EVP_MD *md; /* signature type */ int md_enc; /* is the md encrypted or not? */ int md_len; /* length of md_data */ char *md_data; /* message digest, could be pkey encrypted */ EVP_CIPHER *dec; /* date encryption cipher */ int key_len; /* key length */ unsigned char *key; /* key */ /*- unused, and wrong size unsigned char iv[8]; */ int data_enc; /* is the data encrypted */ int data_len; unsigned char *data; } PEM_CTX; /* * These macros make the PEM_read/PEM_write functions easier to maintain and * write. Now they are all implemented with either: IMPLEMENT_PEM_rw(...) or * IMPLEMENT_PEM_rw_cb(...) */ # ifdef OPENSSL_NO_FP_API # define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/ # define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/ # define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ # define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/ # define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ # else # define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\ { \ return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \ } # define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ int PEM_write_##name(FILE *fp, type *x) \ { \ return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \ } # define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ int PEM_write_##name(FILE *fp, const type *x) \ { \ return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \ } # define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ unsigned char *kstr, int klen, pem_password_cb *cb, \ void *u) \ { \ return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ } # define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ unsigned char *kstr, int klen, pem_password_cb *cb, \ void *u) \ { \ return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ } # endif # define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\ { \ return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \ } # define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ int PEM_write_bio_##name(BIO *bp, type *x) \ { \ return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \ } # define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ int PEM_write_bio_##name(BIO *bp, const type *x) \ { \ return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \ } # define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ { \ return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \ } # define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ { \ return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \ } # define IMPLEMENT_PEM_write(name, type, str, asn1) \ IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ IMPLEMENT_PEM_write_fp(name, type, str, asn1) # define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) # define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) # define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) # define IMPLEMENT_PEM_read(name, type, str, asn1) \ IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ IMPLEMENT_PEM_read_fp(name, type, str, asn1) # define IMPLEMENT_PEM_rw(name, type, str, asn1) \ IMPLEMENT_PEM_read(name, type, str, asn1) \ IMPLEMENT_PEM_write(name, type, str, asn1) # define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ IMPLEMENT_PEM_read(name, type, str, asn1) \ IMPLEMENT_PEM_write_const(name, type, str, asn1) # define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \ IMPLEMENT_PEM_read(name, type, str, asn1) \ IMPLEMENT_PEM_write_cb(name, type, str, asn1) /* These are the same except they are for the declarations */ # if defined(OPENSSL_NO_FP_API) # define DECLARE_PEM_read_fp(name, type) /**/ # define DECLARE_PEM_write_fp(name, type) /**/ # define DECLARE_PEM_write_cb_fp(name, type) /**/ # else # define DECLARE_PEM_read_fp(name, type) \ type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u); # define DECLARE_PEM_write_fp(name, type) \ int PEM_write_##name(FILE *fp, type *x); # define DECLARE_PEM_write_fp_const(name, type) \ int PEM_write_##name(FILE *fp, const type *x); # define DECLARE_PEM_write_cb_fp(name, type) \ int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ unsigned char *kstr, int klen, pem_password_cb *cb, void *u); # endif # ifndef OPENSSL_NO_BIO # define DECLARE_PEM_read_bio(name, type) \ type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u); # define DECLARE_PEM_write_bio(name, type) \ int PEM_write_bio_##name(BIO *bp, type *x); # define DECLARE_PEM_write_bio_const(name, type) \ int PEM_write_bio_##name(BIO *bp, const type *x); # define DECLARE_PEM_write_cb_bio(name, type) \ int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ unsigned char *kstr, int klen, pem_password_cb *cb, void *u); # else # define DECLARE_PEM_read_bio(name, type) /**/ # define DECLARE_PEM_write_bio(name, type) /**/ # define DECLARE_PEM_write_bio_const(name, type) /**/ # define DECLARE_PEM_write_cb_bio(name, type) /**/ # endif # define DECLARE_PEM_write(name, type) \ DECLARE_PEM_write_bio(name, type) \ DECLARE_PEM_write_fp(name, type) # define DECLARE_PEM_write_const(name, type) \ DECLARE_PEM_write_bio_const(name, type) \ DECLARE_PEM_write_fp_const(name, type) # define DECLARE_PEM_write_cb(name, type) \ DECLARE_PEM_write_cb_bio(name, type) \ DECLARE_PEM_write_cb_fp(name, type) # define DECLARE_PEM_read(name, type) \ DECLARE_PEM_read_bio(name, type) \ DECLARE_PEM_read_fp(name, type) # define DECLARE_PEM_rw(name, type) \ DECLARE_PEM_read(name, type) \ DECLARE_PEM_write(name, type) # define DECLARE_PEM_rw_const(name, type) \ DECLARE_PEM_read(name, type) \ DECLARE_PEM_write_const(name, type) # define DECLARE_PEM_rw_cb(name, type) \ DECLARE_PEM_read(name, type) \ DECLARE_PEM_write_cb(name, type) # if 1 /* "userdata": new with OpenSSL 0.9.4 */ typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); # else /* OpenSSL 0.9.3, 0.9.3a */ typedef int pem_password_cb (char *buf, int size, int rwflag); # endif int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher); int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *len, pem_password_cb *callback, void *u); # ifndef OPENSSL_NO_BIO int PEM_read_bio(BIO *bp, char **name, char **header, unsigned char **data, long *len); int PEM_write_bio(BIO *bp, const char *name, const char *hdr, const unsigned char *data, long len); int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, const char *name, BIO *bp, pem_password_cb *cb, void *u); void *PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp, void **x, pem_password_cb *cb, void *u); int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, void *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *cb, void *u); STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u); int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *cd, void *u); # endif int PEM_read(FILE *fp, char **name, char **header, unsigned char **data, long *len); int PEM_write(FILE *fp, const char *name, const char *hdr, const unsigned char *data, long len); void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x, pem_password_cb *cb, void *u); int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp, void *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, pem_password_cb *callback, void *u); STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, pem_password_cb *cb, void *u); int PEM_SealInit(PEM_ENCODE_SEAL_CTX *ctx, EVP_CIPHER *type, EVP_MD *md_type, unsigned char **ek, int *ekl, unsigned char *iv, EVP_PKEY **pubk, int npubk); void PEM_SealUpdate(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *out, int *outl, unsigned char *in, int inl); int PEM_SealFinal(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *sig, int *sigl, unsigned char *out, int *outl, EVP_PKEY *priv); void PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); void PEM_SignUpdate(EVP_MD_CTX *ctx, unsigned char *d, unsigned int cnt); int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, unsigned int *siglen, EVP_PKEY *pkey); int PEM_def_callback(char *buf, int num, int w, void *key); void PEM_proc_type(char *buf, int type); void PEM_dek_info(char *buf, const char *type, int len, char *str); # include DECLARE_PEM_rw(X509, X509) DECLARE_PEM_rw(X509_AUX, X509) DECLARE_PEM_rw(X509_CERT_PAIR, X509_CERT_PAIR) DECLARE_PEM_rw(X509_REQ, X509_REQ) DECLARE_PEM_write(X509_REQ_NEW, X509_REQ) DECLARE_PEM_rw(X509_CRL, X509_CRL) DECLARE_PEM_rw(PKCS7, PKCS7) DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) DECLARE_PEM_rw(PKCS8, X509_SIG) DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) # ifndef OPENSSL_NO_RSA DECLARE_PEM_rw_cb(RSAPrivateKey, RSA) DECLARE_PEM_rw_const(RSAPublicKey, RSA) DECLARE_PEM_rw(RSA_PUBKEY, RSA) # endif # ifndef OPENSSL_NO_DSA DECLARE_PEM_rw_cb(DSAPrivateKey, DSA) DECLARE_PEM_rw(DSA_PUBKEY, DSA) DECLARE_PEM_rw_const(DSAparams, DSA) # endif # ifndef OPENSSL_NO_EC DECLARE_PEM_rw_const(ECPKParameters, EC_GROUP) DECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY) DECLARE_PEM_rw(EC_PUBKEY, EC_KEY) # endif # ifndef OPENSSL_NO_DH DECLARE_PEM_rw_const(DHparams, DH) DECLARE_PEM_write_const(DHxparams, DH) # endif DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY) DECLARE_PEM_rw(PUBKEY, EVP_PKEY) int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid, char *kstr, int klen, pem_password_cb *cb, void *u); int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *, char *, int, pem_password_cb *, void *); int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, char *kstr, int klen, pem_password_cb *cb, void *u); int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid, char *kstr, int klen, pem_password_cb *cb, void *u); EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u); int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, char *kstr, int klen, pem_password_cb *cb, void *u); int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid, char *kstr, int klen, pem_password_cb *cb, void *u); int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid, char *kstr, int klen, pem_password_cb *cb, void *u); EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, void *u); int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, char *kstr, int klen, pem_password_cb *cd, void *u); EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x); EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length); EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length); EVP_PKEY *b2i_PrivateKey_bio(BIO *in); EVP_PKEY *b2i_PublicKey_bio(BIO *in); int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk); int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk); # ifndef OPENSSL_NO_RC4 EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u); int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel, pem_password_cb *cb, void *u); # endif /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_PEM_strings(void); /* Error codes for the PEM functions. */ /* Function codes. */ # define PEM_F_B2I_DSS 127 # define PEM_F_B2I_PVK_BIO 128 # define PEM_F_B2I_RSA 129 # define PEM_F_CHECK_BITLEN_DSA 130 # define PEM_F_CHECK_BITLEN_RSA 131 # define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120 # define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121 # define PEM_F_DO_B2I 132 # define PEM_F_DO_B2I_BIO 133 # define PEM_F_DO_BLOB_HEADER 134 # define PEM_F_DO_PK8PKEY 126 # define PEM_F_DO_PK8PKEY_FP 125 # define PEM_F_DO_PVK_BODY 135 # define PEM_F_DO_PVK_HEADER 136 # define PEM_F_I2B_PVK 137 # define PEM_F_I2B_PVK_BIO 138 # define PEM_F_LOAD_IV 101 # define PEM_F_PEM_ASN1_READ 102 # define PEM_F_PEM_ASN1_READ_BIO 103 # define PEM_F_PEM_ASN1_WRITE 104 # define PEM_F_PEM_ASN1_WRITE_BIO 105 # define PEM_F_PEM_DEF_CALLBACK 100 # define PEM_F_PEM_DO_HEADER 106 # define PEM_F_PEM_F_PEM_WRITE_PKCS8PRIVATEKEY 118 # define PEM_F_PEM_GET_EVP_CIPHER_INFO 107 # define PEM_F_PEM_PK8PKEY 119 # define PEM_F_PEM_READ 108 # define PEM_F_PEM_READ_BIO 109 # define PEM_F_PEM_READ_BIO_DHPARAMS 141 # define PEM_F_PEM_READ_BIO_PARAMETERS 140 # define PEM_F_PEM_READ_BIO_PRIVATEKEY 123 # define PEM_F_PEM_READ_DHPARAMS 142 # define PEM_F_PEM_READ_PRIVATEKEY 124 # define PEM_F_PEM_SEALFINAL 110 # define PEM_F_PEM_SEALINIT 111 # define PEM_F_PEM_SIGNFINAL 112 # define PEM_F_PEM_WRITE 113 # define PEM_F_PEM_WRITE_BIO 114 # define PEM_F_PEM_WRITE_PRIVATEKEY 139 # define PEM_F_PEM_X509_INFO_READ 115 # define PEM_F_PEM_X509_INFO_READ_BIO 116 # define PEM_F_PEM_X509_INFO_WRITE_BIO 117 /* Reason codes. */ # define PEM_R_BAD_BASE64_DECODE 100 # define PEM_R_BAD_DECRYPT 101 # define PEM_R_BAD_END_LINE 102 # define PEM_R_BAD_IV_CHARS 103 # define PEM_R_BAD_MAGIC_NUMBER 116 # define PEM_R_BAD_PASSWORD_READ 104 # define PEM_R_BAD_VERSION_NUMBER 117 # define PEM_R_BIO_WRITE_FAILURE 118 # define PEM_R_CIPHER_IS_NULL 127 # define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 # define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 # define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 # define PEM_R_INCONSISTENT_HEADER 121 # define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 # define PEM_R_KEYBLOB_TOO_SHORT 123 # define PEM_R_NOT_DEK_INFO 105 # define PEM_R_NOT_ENCRYPTED 106 # define PEM_R_NOT_PROC_TYPE 107 # define PEM_R_NO_START_LINE 108 # define PEM_R_PROBLEMS_GETTING_PASSWORD 109 # define PEM_R_PUBLIC_KEY_NO_RSA 110 # define PEM_R_PVK_DATA_TOO_SHORT 124 # define PEM_R_PVK_TOO_SHORT 125 # define PEM_R_READ_KEY 111 # define PEM_R_SHORT_HEADER 112 # define PEM_R_UNSUPPORTED_CIPHER 113 # define PEM_R_UNSUPPORTED_ENCRYPTION 114 # define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/pem2.h ================================================ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* * This header only exists to break a circular dependency between pem and err * Ben 30 Jan 1999. */ #ifdef __cplusplus extern "C" { #endif #ifndef HEADER_PEM_H void ERR_load_PEM_strings(void); #endif #ifdef __cplusplus } #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/pkcs12.h ================================================ /* pkcs12.h */ /* * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project * 1999. */ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_PKCS12_H # define HEADER_PKCS12_H # include # include #ifdef __cplusplus extern "C" { #endif # define PKCS12_KEY_ID 1 # define PKCS12_IV_ID 2 # define PKCS12_MAC_ID 3 /* Default iteration count */ # ifndef PKCS12_DEFAULT_ITER # define PKCS12_DEFAULT_ITER PKCS5_DEFAULT_ITER # endif # define PKCS12_MAC_KEY_LENGTH 20 # define PKCS12_SALT_LEN 8 /* Uncomment out next line for unicode password and names, otherwise ASCII */ /* * #define PBE_UNICODE */ # ifdef PBE_UNICODE # define PKCS12_key_gen PKCS12_key_gen_uni # define PKCS12_add_friendlyname PKCS12_add_friendlyname_uni # else # define PKCS12_key_gen PKCS12_key_gen_asc # define PKCS12_add_friendlyname PKCS12_add_friendlyname_asc # endif /* MS key usage constants */ # define KEY_EX 0x10 # define KEY_SIG 0x80 typedef struct { X509_SIG *dinfo; ASN1_OCTET_STRING *salt; ASN1_INTEGER *iter; /* defaults to 1 */ } PKCS12_MAC_DATA; typedef struct { ASN1_INTEGER *version; PKCS12_MAC_DATA *mac; PKCS7 *authsafes; } PKCS12; typedef struct { ASN1_OBJECT *type; union { struct pkcs12_bag_st *bag; /* secret, crl and certbag */ struct pkcs8_priv_key_info_st *keybag; /* keybag */ X509_SIG *shkeybag; /* shrouded key bag */ STACK_OF(PKCS12_SAFEBAG) *safes; ASN1_TYPE *other; } value; STACK_OF(X509_ATTRIBUTE) *attrib; } PKCS12_SAFEBAG; DECLARE_STACK_OF(PKCS12_SAFEBAG) DECLARE_ASN1_SET_OF(PKCS12_SAFEBAG) DECLARE_PKCS12_STACK_OF(PKCS12_SAFEBAG) typedef struct pkcs12_bag_st { ASN1_OBJECT *type; union { ASN1_OCTET_STRING *x509cert; ASN1_OCTET_STRING *x509crl; ASN1_OCTET_STRING *octet; ASN1_IA5STRING *sdsicert; ASN1_TYPE *other; /* Secret or other bag */ } value; } PKCS12_BAGS; # define PKCS12_ERROR 0 # define PKCS12_OK 1 /* Compatibility macros */ # define M_PKCS12_x5092certbag PKCS12_x5092certbag # define M_PKCS12_x509crl2certbag PKCS12_x509crl2certbag # define M_PKCS12_certbag2x509 PKCS12_certbag2x509 # define M_PKCS12_certbag2x509crl PKCS12_certbag2x509crl # define M_PKCS12_unpack_p7data PKCS12_unpack_p7data # define M_PKCS12_pack_authsafes PKCS12_pack_authsafes # define M_PKCS12_unpack_authsafes PKCS12_unpack_authsafes # define M_PKCS12_unpack_p7encdata PKCS12_unpack_p7encdata # define M_PKCS12_decrypt_skey PKCS12_decrypt_skey # define M_PKCS8_decrypt PKCS8_decrypt # define M_PKCS12_bag_type(bg) OBJ_obj2nid((bg)->type) # define M_PKCS12_cert_bag_type(bg) OBJ_obj2nid((bg)->value.bag->type) # define M_PKCS12_crl_bag_type M_PKCS12_cert_bag_type # define PKCS12_get_attr(bag, attr_nid) \ PKCS12_get_attr_gen(bag->attrib, attr_nid) # define PKCS8_get_attr(p8, attr_nid) \ PKCS12_get_attr_gen(p8->attributes, attr_nid) # define PKCS12_mac_present(p12) ((p12)->mac ? 1 : 0) PKCS12_SAFEBAG *PKCS12_x5092certbag(X509 *x509); PKCS12_SAFEBAG *PKCS12_x509crl2certbag(X509_CRL *crl); X509 *PKCS12_certbag2x509(PKCS12_SAFEBAG *bag); X509_CRL *PKCS12_certbag2x509crl(PKCS12_SAFEBAG *bag); PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, int nid1, int nid2); PKCS12_SAFEBAG *PKCS12_MAKE_KEYBAG(PKCS8_PRIV_KEY_INFO *p8); PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(X509_SIG *p8, const char *pass, int passlen); PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(PKCS12_SAFEBAG *bag, const char *pass, int passlen); X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, const char *pass, int passlen, unsigned char *salt, int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); PKCS12_SAFEBAG *PKCS12_MAKE_SHKEYBAG(int pbe_nid, const char *pass, int passlen, unsigned char *salt, int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, unsigned char *salt, int saltlen, int iter, STACK_OF(PKCS12_SAFEBAG) *bags); STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, int passlen); int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes); STACK_OF(PKCS7) *PKCS12_unpack_authsafes(PKCS12 *p12); int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, int namelen); int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, int namelen); int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, int namelen); int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, const unsigned char *name, int namelen); int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); ASN1_TYPE *PKCS12_get_attr_gen(STACK_OF(X509_ATTRIBUTE) *attrs, int attr_nid); char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); unsigned char *PKCS12_pbe_crypt(X509_ALGOR *algor, const char *pass, int passlen, unsigned char *in, int inlen, unsigned char **data, int *datalen, int en_de); void *PKCS12_item_decrypt_d2i(X509_ALGOR *algor, const ASN1_ITEM *it, const char *pass, int passlen, ASN1_OCTET_STRING *oct, int zbuf); ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, const ASN1_ITEM *it, const char *pass, int passlen, void *obj, int zbuf); PKCS12 *PKCS12_init(int mode); int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, int saltlen, int id, int iter, int n, unsigned char *out, const EVP_MD *md_type); int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, int saltlen, int id, int iter, int n, unsigned char *out, const EVP_MD *md_type); int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md_type, int en_de); int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, unsigned char *mac, unsigned int *maclen); int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, unsigned char *salt, int saltlen, int iter, const EVP_MD *md_type); int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, int saltlen, const EVP_MD *md_type); unsigned char *OPENSSL_asc2uni(const char *asc, int asclen, unsigned char **uni, int *unilen); char *OPENSSL_uni2asc(unsigned char *uni, int unilen); DECLARE_ASN1_FUNCTIONS(PKCS12) DECLARE_ASN1_FUNCTIONS(PKCS12_MAC_DATA) DECLARE_ASN1_FUNCTIONS(PKCS12_SAFEBAG) DECLARE_ASN1_FUNCTIONS(PKCS12_BAGS) DECLARE_ASN1_ITEM(PKCS12_SAFEBAGS) DECLARE_ASN1_ITEM(PKCS12_AUTHSAFES) void PKCS12_PBE_add(void); int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, STACK_OF(X509) **ca); PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, int iter, int mac_iter, int keytype); PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, EVP_PKEY *key, int key_usage, int iter, int key_nid, char *pass); int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, int safe_nid, int iter, char *pass); PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); int PKCS12_newpass(PKCS12 *p12, char *oldpass, char *newpass); /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_PKCS12_strings(void); /* Error codes for the PKCS12 functions. */ /* Function codes. */ # define PKCS12_F_PARSE_BAG 129 # define PKCS12_F_PARSE_BAGS 103 # define PKCS12_F_PKCS12_ADD_FRIENDLYNAME 100 # define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_ASC 127 # define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI 102 # define PKCS12_F_PKCS12_ADD_LOCALKEYID 104 # define PKCS12_F_PKCS12_CREATE 105 # define PKCS12_F_PKCS12_GEN_MAC 107 # define PKCS12_F_PKCS12_INIT 109 # define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 106 # define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 108 # define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 117 # define PKCS12_F_PKCS12_KEY_GEN_ASC 110 # define PKCS12_F_PKCS12_KEY_GEN_UNI 111 # define PKCS12_F_PKCS12_MAKE_KEYBAG 112 # define PKCS12_F_PKCS12_MAKE_SHKEYBAG 113 # define PKCS12_F_PKCS12_NEWPASS 128 # define PKCS12_F_PKCS12_PACK_P7DATA 114 # define PKCS12_F_PKCS12_PACK_P7ENCDATA 115 # define PKCS12_F_PKCS12_PARSE 118 # define PKCS12_F_PKCS12_PBE_CRYPT 119 # define PKCS12_F_PKCS12_PBE_KEYIVGEN 120 # define PKCS12_F_PKCS12_SETUP_MAC 122 # define PKCS12_F_PKCS12_SET_MAC 123 # define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 130 # define PKCS12_F_PKCS12_UNPACK_P7DATA 131 # define PKCS12_F_PKCS12_VERIFY_MAC 126 # define PKCS12_F_PKCS8_ADD_KEYUSAGE 124 # define PKCS12_F_PKCS8_ENCRYPT 125 /* Reason codes. */ # define PKCS12_R_CANT_PACK_STRUCTURE 100 # define PKCS12_R_CONTENT_TYPE_NOT_DATA 121 # define PKCS12_R_DECODE_ERROR 101 # define PKCS12_R_ENCODE_ERROR 102 # define PKCS12_R_ENCRYPT_ERROR 103 # define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE 120 # define PKCS12_R_INVALID_NULL_ARGUMENT 104 # define PKCS12_R_INVALID_NULL_PKCS12_POINTER 105 # define PKCS12_R_IV_GEN_ERROR 106 # define PKCS12_R_KEY_GEN_ERROR 107 # define PKCS12_R_MAC_ABSENT 108 # define PKCS12_R_MAC_GENERATION_ERROR 109 # define PKCS12_R_MAC_SETUP_ERROR 110 # define PKCS12_R_MAC_STRING_SET_ERROR 111 # define PKCS12_R_MAC_VERIFY_ERROR 112 # define PKCS12_R_MAC_VERIFY_FAILURE 113 # define PKCS12_R_PARSE_ERROR 114 # define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR 115 # define PKCS12_R_PKCS12_CIPHERFINAL_ERROR 116 # define PKCS12_R_PKCS12_PBE_CRYPT_ERROR 117 # define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 # define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/pkcs7.h ================================================ /* crypto/pkcs7/pkcs7.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_PKCS7_H # define HEADER_PKCS7_H # include # include # include # include # include #ifdef __cplusplus extern "C" { #endif # ifdef OPENSSL_SYS_WIN32 /* Under Win32 thes are defined in wincrypt.h */ # undef PKCS7_ISSUER_AND_SERIAL # undef PKCS7_SIGNER_INFO # endif /*- Encryption_ID DES-CBC Digest_ID MD5 Digest_Encryption_ID rsaEncryption Key_Encryption_ID rsaEncryption */ typedef struct pkcs7_issuer_and_serial_st { X509_NAME *issuer; ASN1_INTEGER *serial; } PKCS7_ISSUER_AND_SERIAL; typedef struct pkcs7_signer_info_st { ASN1_INTEGER *version; /* version 1 */ PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; X509_ALGOR *digest_alg; STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */ X509_ALGOR *digest_enc_alg; ASN1_OCTET_STRING *enc_digest; STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ /* The private key to sign with */ EVP_PKEY *pkey; } PKCS7_SIGNER_INFO; DECLARE_STACK_OF(PKCS7_SIGNER_INFO) DECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO) typedef struct pkcs7_recip_info_st { ASN1_INTEGER *version; /* version 0 */ PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; X509_ALGOR *key_enc_algor; ASN1_OCTET_STRING *enc_key; X509 *cert; /* get the pub-key from this */ } PKCS7_RECIP_INFO; DECLARE_STACK_OF(PKCS7_RECIP_INFO) DECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO) typedef struct pkcs7_signed_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ STACK_OF(X509) *cert; /* [ 0 ] */ STACK_OF(X509_CRL) *crl; /* [ 1 ] */ STACK_OF(PKCS7_SIGNER_INFO) *signer_info; struct pkcs7_st *contents; } PKCS7_SIGNED; /* * The above structure is very very similar to PKCS7_SIGN_ENVELOPE. How about * merging the two */ typedef struct pkcs7_enc_content_st { ASN1_OBJECT *content_type; X509_ALGOR *algorithm; ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ const EVP_CIPHER *cipher; } PKCS7_ENC_CONTENT; typedef struct pkcs7_enveloped_st { ASN1_INTEGER *version; /* version 0 */ STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; PKCS7_ENC_CONTENT *enc_data; } PKCS7_ENVELOPE; typedef struct pkcs7_signedandenveloped_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ STACK_OF(X509) *cert; /* [ 0 ] */ STACK_OF(X509_CRL) *crl; /* [ 1 ] */ STACK_OF(PKCS7_SIGNER_INFO) *signer_info; PKCS7_ENC_CONTENT *enc_data; STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; } PKCS7_SIGN_ENVELOPE; typedef struct pkcs7_digest_st { ASN1_INTEGER *version; /* version 0 */ X509_ALGOR *md; /* md used */ struct pkcs7_st *contents; ASN1_OCTET_STRING *digest; } PKCS7_DIGEST; typedef struct pkcs7_encrypted_st { ASN1_INTEGER *version; /* version 0 */ PKCS7_ENC_CONTENT *enc_data; } PKCS7_ENCRYPT; typedef struct pkcs7_st { /* * The following is non NULL if it contains ASN1 encoding of this * structure */ unsigned char *asn1; long length; # define PKCS7_S_HEADER 0 # define PKCS7_S_BODY 1 # define PKCS7_S_TAIL 2 int state; /* used during processing */ int detached; ASN1_OBJECT *type; /* content as defined by the type */ /* * all encryption/message digests are applied to the 'contents', leaving * out the 'type' field. */ union { char *ptr; /* NID_pkcs7_data */ ASN1_OCTET_STRING *data; /* NID_pkcs7_signed */ PKCS7_SIGNED *sign; /* NID_pkcs7_enveloped */ PKCS7_ENVELOPE *enveloped; /* NID_pkcs7_signedAndEnveloped */ PKCS7_SIGN_ENVELOPE *signed_and_enveloped; /* NID_pkcs7_digest */ PKCS7_DIGEST *digest; /* NID_pkcs7_encrypted */ PKCS7_ENCRYPT *encrypted; /* Anything else */ ASN1_TYPE *other; } d; } PKCS7; DECLARE_STACK_OF(PKCS7) DECLARE_ASN1_SET_OF(PKCS7) DECLARE_PKCS12_STACK_OF(PKCS7) # define PKCS7_OP_SET_DETACHED_SIGNATURE 1 # define PKCS7_OP_GET_DETACHED_SIGNATURE 2 # define PKCS7_get_signed_attributes(si) ((si)->auth_attr) # define PKCS7_get_attributes(si) ((si)->unauth_attr) # define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed) # define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted) # define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped) # define PKCS7_type_is_signedAndEnveloped(a) \ (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped) # define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data) # define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest) # define PKCS7_set_detached(p,v) \ PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL) # define PKCS7_get_detached(p) \ PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL) # define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7)) /* S/MIME related flags */ # define PKCS7_TEXT 0x1 # define PKCS7_NOCERTS 0x2 # define PKCS7_NOSIGS 0x4 # define PKCS7_NOCHAIN 0x8 # define PKCS7_NOINTERN 0x10 # define PKCS7_NOVERIFY 0x20 # define PKCS7_DETACHED 0x40 # define PKCS7_BINARY 0x80 # define PKCS7_NOATTR 0x100 # define PKCS7_NOSMIMECAP 0x200 # define PKCS7_NOOLDMIMETYPE 0x400 # define PKCS7_CRLFEOL 0x800 # define PKCS7_STREAM 0x1000 # define PKCS7_NOCRL 0x2000 # define PKCS7_PARTIAL 0x4000 # define PKCS7_REUSE_DIGEST 0x8000 /* Flags: for compatibility with older code */ # define SMIME_TEXT PKCS7_TEXT # define SMIME_NOCERTS PKCS7_NOCERTS # define SMIME_NOSIGS PKCS7_NOSIGS # define SMIME_NOCHAIN PKCS7_NOCHAIN # define SMIME_NOINTERN PKCS7_NOINTERN # define SMIME_NOVERIFY PKCS7_NOVERIFY # define SMIME_DETACHED PKCS7_DETACHED # define SMIME_BINARY PKCS7_BINARY # define SMIME_NOATTR PKCS7_NOATTR DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL) int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, const EVP_MD *type, unsigned char *md, unsigned int *len); # ifndef OPENSSL_NO_FP_API PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7); # endif PKCS7 *PKCS7_dup(PKCS7 *p7); PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7); int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO) DECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED) DECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) DECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE) DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) DECLARE_ASN1_FUNCTIONS(PKCS7) DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) DECLARE_ASN1_NDEF_FUNCTION(PKCS7) DECLARE_ASN1_PRINT_FUNCTION(PKCS7) long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); int PKCS7_set_type(PKCS7 *p7, int type); int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, const EVP_MD *dgst); int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); int PKCS7_content_new(PKCS7 *p7, int nid); int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx, BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si); int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, X509 *x509); BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert); PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, EVP_PKEY *pkey, const EVP_MD *dgst); X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si); int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md); STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7); PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509); void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk, X509_ALGOR **pdig, X509_ALGOR **psig); void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc); int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri); int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509); int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, void *data); int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, void *value); ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid); ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid); int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, STACK_OF(X509_ATTRIBUTE) *sk); int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, STACK_OF(X509_ATTRIBUTE) *sk); PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, BIO *data, int flags); PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, X509 *signcert, EVP_PKEY *pkey, const EVP_MD *md, int flags); int PKCS7_final(PKCS7 *p7, BIO *data, int flags); int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, BIO *indata, BIO *out, int flags); STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, int flags); PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, int flags); int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags); int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, STACK_OF(X509_ALGOR) *cap); STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si); int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg); int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid); int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t); int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, const unsigned char *md, int mdlen); int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_PKCS7_strings(void); /* Error codes for the PKCS7 functions. */ /* Function codes. */ # define PKCS7_F_B64_READ_PKCS7 120 # define PKCS7_F_B64_WRITE_PKCS7 121 # define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 # define PKCS7_F_I2D_PKCS7_BIO_STREAM 140 # define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 135 # define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 118 # define PKCS7_F_PKCS7_ADD_CERTIFICATE 100 # define PKCS7_F_PKCS7_ADD_CRL 101 # define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 102 # define PKCS7_F_PKCS7_ADD_SIGNATURE 131 # define PKCS7_F_PKCS7_ADD_SIGNER 103 # define PKCS7_F_PKCS7_BIO_ADD_DIGEST 125 # define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 138 # define PKCS7_F_PKCS7_CTRL 104 # define PKCS7_F_PKCS7_DATADECODE 112 # define PKCS7_F_PKCS7_DATAFINAL 128 # define PKCS7_F_PKCS7_DATAINIT 105 # define PKCS7_F_PKCS7_DATASIGN 106 # define PKCS7_F_PKCS7_DATAVERIFY 107 # define PKCS7_F_PKCS7_DECRYPT 114 # define PKCS7_F_PKCS7_DECRYPT_RINFO 133 # define PKCS7_F_PKCS7_ENCODE_RINFO 132 # define PKCS7_F_PKCS7_ENCRYPT 115 # define PKCS7_F_PKCS7_FINAL 134 # define PKCS7_F_PKCS7_FIND_DIGEST 127 # define PKCS7_F_PKCS7_GET0_SIGNERS 124 # define PKCS7_F_PKCS7_RECIP_INFO_SET 130 # define PKCS7_F_PKCS7_SET_CIPHER 108 # define PKCS7_F_PKCS7_SET_CONTENT 109 # define PKCS7_F_PKCS7_SET_DIGEST 126 # define PKCS7_F_PKCS7_SET_TYPE 110 # define PKCS7_F_PKCS7_SIGN 116 # define PKCS7_F_PKCS7_SIGNATUREVERIFY 113 # define PKCS7_F_PKCS7_SIGNER_INFO_SET 129 # define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 139 # define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 137 # define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 119 # define PKCS7_F_PKCS7_VERIFY 117 # define PKCS7_F_SMIME_READ_PKCS7 122 # define PKCS7_F_SMIME_TEXT 123 /* Reason codes. */ # define PKCS7_R_CERTIFICATE_VERIFY_ERROR 117 # define PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 144 # define PKCS7_R_CIPHER_NOT_INITIALIZED 116 # define PKCS7_R_CONTENT_AND_DATA_PRESENT 118 # define PKCS7_R_CTRL_ERROR 152 # define PKCS7_R_DECODE_ERROR 130 # define PKCS7_R_DECRYPTED_KEY_IS_WRONG_LENGTH 100 # define PKCS7_R_DECRYPT_ERROR 119 # define PKCS7_R_DIGEST_FAILURE 101 # define PKCS7_R_ENCRYPTION_CTRL_FAILURE 149 # define PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 150 # define PKCS7_R_ERROR_ADDING_RECIPIENT 120 # define PKCS7_R_ERROR_SETTING_CIPHER 121 # define PKCS7_R_INVALID_MIME_TYPE 131 # define PKCS7_R_INVALID_NULL_POINTER 143 # define PKCS7_R_INVALID_SIGNED_DATA_TYPE 155 # define PKCS7_R_MIME_NO_CONTENT_TYPE 132 # define PKCS7_R_MIME_PARSE_ERROR 133 # define PKCS7_R_MIME_SIG_PARSE_ERROR 134 # define PKCS7_R_MISSING_CERIPEND_INFO 103 # define PKCS7_R_NO_CONTENT 122 # define PKCS7_R_NO_CONTENT_TYPE 135 # define PKCS7_R_NO_DEFAULT_DIGEST 151 # define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND 154 # define PKCS7_R_NO_MULTIPART_BODY_FAILURE 136 # define PKCS7_R_NO_MULTIPART_BOUNDARY 137 # define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE 115 # define PKCS7_R_NO_RECIPIENT_MATCHES_KEY 146 # define PKCS7_R_NO_SIGNATURES_ON_DATA 123 # define PKCS7_R_NO_SIGNERS 142 # define PKCS7_R_NO_SIG_CONTENT_TYPE 138 # define PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE 104 # define PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR 124 # define PKCS7_R_PKCS7_ADD_SIGNER_ERROR 153 # define PKCS7_R_PKCS7_DATAFINAL 126 # define PKCS7_R_PKCS7_DATAFINAL_ERROR 125 # define PKCS7_R_PKCS7_DATASIGN 145 # define PKCS7_R_PKCS7_PARSE_ERROR 139 # define PKCS7_R_PKCS7_SIG_PARSE_ERROR 140 # define PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 127 # define PKCS7_R_SIGNATURE_FAILURE 105 # define PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND 128 # define PKCS7_R_SIGNING_CTRL_FAILURE 147 # define PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 148 # define PKCS7_R_SIG_INVALID_MIME_TYPE 141 # define PKCS7_R_SMIME_TEXT_ERROR 129 # define PKCS7_R_UNABLE_TO_FIND_CERTIFICATE 106 # define PKCS7_R_UNABLE_TO_FIND_MEM_BIO 107 # define PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST 108 # define PKCS7_R_UNKNOWN_DIGEST_TYPE 109 # define PKCS7_R_UNKNOWN_OPERATION 110 # define PKCS7_R_UNSUPPORTED_CIPHER_TYPE 111 # define PKCS7_R_UNSUPPORTED_CONTENT_TYPE 112 # define PKCS7_R_WRONG_CONTENT_TYPE 113 # define PKCS7_R_WRONG_PKCS7_TYPE 114 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/pqueue.h ================================================ /* crypto/pqueue/pqueue.h */ /* * DTLS implementation written by Nagendra Modadugu * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. */ /* ==================================================================== * Copyright (c) 1999-2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_PQUEUE_H # define HEADER_PQUEUE_H # include # include # include #ifdef __cplusplus extern "C" { #endif typedef struct _pqueue *pqueue; typedef struct _pitem { unsigned char priority[8]; /* 64-bit value in big-endian encoding */ void *data; struct _pitem *next; } pitem; typedef struct _pitem *piterator; pitem *pitem_new(unsigned char *prio64be, void *data); void pitem_free(pitem *item); pqueue pqueue_new(void); void pqueue_free(pqueue pq); pitem *pqueue_insert(pqueue pq, pitem *item); pitem *pqueue_peek(pqueue pq); pitem *pqueue_pop(pqueue pq); pitem *pqueue_find(pqueue pq, unsigned char *prio64be); pitem *pqueue_iterator(pqueue pq); pitem *pqueue_next(piterator *iter); void pqueue_print(pqueue pq); int pqueue_size(pqueue pq); #ifdef __cplusplus } #endif #endif /* ! HEADER_PQUEUE_H */ ================================================ FILE: 3rParty/FFmpeg/include/openssl/rand.h ================================================ /* crypto/rand/rand.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_RAND_H # define HEADER_RAND_H # include # include # include # if defined(OPENSSL_SYS_WINDOWS) # include # endif #ifdef __cplusplus extern "C" { #endif # if defined(OPENSSL_FIPS) # define FIPS_RAND_SIZE_T size_t # endif /* Already defined in ossl_typ.h */ /* typedef struct rand_meth_st RAND_METHOD; */ struct rand_meth_st { void (*seed) (const void *buf, int num); int (*bytes) (unsigned char *buf, int num); void (*cleanup) (void); void (*add) (const void *buf, int num, double entropy); int (*pseudorand) (unsigned char *buf, int num); int (*status) (void); }; # ifdef BN_DEBUG extern int rand_predictable; # endif int RAND_set_rand_method(const RAND_METHOD *meth); const RAND_METHOD *RAND_get_rand_method(void); # ifndef OPENSSL_NO_ENGINE int RAND_set_rand_engine(ENGINE *engine); # endif RAND_METHOD *RAND_SSLeay(void); void RAND_cleanup(void); int RAND_bytes(unsigned char *buf, int num); int RAND_pseudo_bytes(unsigned char *buf, int num); void RAND_seed(const void *buf, int num); void RAND_add(const void *buf, int num, double entropy); int RAND_load_file(const char *file, long max_bytes); int RAND_write_file(const char *file); const char *RAND_file_name(char *file, size_t num); int RAND_status(void); int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes); int RAND_egd(const char *path); int RAND_egd_bytes(const char *path, int bytes); int RAND_poll(void); # if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32) void RAND_screen(void); int RAND_event(UINT, WPARAM, LPARAM); # endif # ifdef OPENSSL_FIPS void RAND_set_fips_drbg_type(int type, int flags); int RAND_init_fips(void); # endif /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_RAND_strings(void); /* Error codes for the RAND functions. */ /* Function codes. */ # define RAND_F_RAND_GET_RAND_METHOD 101 # define RAND_F_RAND_INIT_FIPS 102 # define RAND_F_SSLEAY_RAND_BYTES 100 /* Reason codes. */ # define RAND_R_DUAL_EC_DRBG_DISABLED 104 # define RAND_R_ERROR_INITIALISING_DRBG 102 # define RAND_R_ERROR_INSTANTIATING_DRBG 103 # define RAND_R_NO_FIPS_RANDOM_METHOD_SET 101 # define RAND_R_PRNG_NOT_SEEDED 100 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/rc2.h ================================================ /* crypto/rc2/rc2.h */ /* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_RC2_H # define HEADER_RC2_H # include /* OPENSSL_NO_RC2, RC2_INT */ # ifdef OPENSSL_NO_RC2 # error RC2 is disabled. # endif # define RC2_ENCRYPT 1 # define RC2_DECRYPT 0 # define RC2_BLOCK 8 # define RC2_KEY_LENGTH 16 #ifdef __cplusplus extern "C" { #endif typedef struct rc2_key_st { RC2_INT data[64]; } RC2_KEY; # ifdef OPENSSL_FIPS void private_RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits); # endif void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits); void RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, RC2_KEY *key, int enc); void RC2_encrypt(unsigned long *data, RC2_KEY *key); void RC2_decrypt(unsigned long *data, RC2_KEY *key); void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, RC2_KEY *ks, unsigned char *iv, int enc); void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length, RC2_KEY *schedule, unsigned char *ivec, int *num, int enc); void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length, RC2_KEY *schedule, unsigned char *ivec, int *num); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/rc4.h ================================================ /* crypto/rc4/rc4.h */ /* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_RC4_H # define HEADER_RC4_H # include /* OPENSSL_NO_RC4, RC4_INT */ # ifdef OPENSSL_NO_RC4 # error RC4 is disabled. # endif # include #ifdef __cplusplus extern "C" { #endif typedef struct rc4_key_st { RC4_INT x, y; RC4_INT data[256]; } RC4_KEY; const char *RC4_options(void); void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); void private_RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, unsigned char *outdata); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/ripemd.h ================================================ /* crypto/ripemd/ripemd.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_RIPEMD_H # define HEADER_RIPEMD_H # include # include #ifdef __cplusplus extern "C" { #endif # ifdef OPENSSL_NO_RIPEMD # error RIPEMD is disabled. # endif # if defined(__LP32__) # define RIPEMD160_LONG unsigned long # elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) # define RIPEMD160_LONG unsigned long # define RIPEMD160_LONG_LOG2 3 # else # define RIPEMD160_LONG unsigned int # endif # define RIPEMD160_CBLOCK 64 # define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) # define RIPEMD160_DIGEST_LENGTH 20 typedef struct RIPEMD160state_st { RIPEMD160_LONG A, B, C, D, E; RIPEMD160_LONG Nl, Nh; RIPEMD160_LONG data[RIPEMD160_LBLOCK]; unsigned int num; } RIPEMD160_CTX; # ifdef OPENSSL_FIPS int private_RIPEMD160_Init(RIPEMD160_CTX *c); # endif int RIPEMD160_Init(RIPEMD160_CTX *c); int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len); int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); unsigned char *RIPEMD160(const unsigned char *d, size_t n, unsigned char *md); void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/rsa.h ================================================ /* crypto/rsa/rsa.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_RSA_H # define HEADER_RSA_H # include # ifndef OPENSSL_NO_BIO # include # endif # include # include # ifndef OPENSSL_NO_DEPRECATED # include # endif # ifdef OPENSSL_NO_RSA # error RSA is disabled. # endif #ifdef __cplusplus extern "C" { #endif /* Declared already in ossl_typ.h */ /* typedef struct rsa_st RSA; */ /* typedef struct rsa_meth_st RSA_METHOD; */ struct rsa_meth_st { const char *name; int (*rsa_pub_enc) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding); int (*rsa_pub_dec) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding); int (*rsa_priv_enc) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding); int (*rsa_priv_dec) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding); /* Can be null */ int (*rsa_mod_exp) (BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx); /* Can be null */ int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); /* called at new */ int (*init) (RSA *rsa); /* called at free */ int (*finish) (RSA *rsa); /* RSA_METHOD_FLAG_* things */ int flags; /* may be needed! */ char *app_data; /* * New sign and verify functions: some libraries don't allow arbitrary * data to be signed/verified: this allows them to be used. Note: for * this to work the RSA_public_decrypt() and RSA_private_encrypt() should * *NOT* be used RSA_sign(), RSA_verify() should be used instead. Note: * for backwards compatibility this functionality is only enabled if the * RSA_FLAG_SIGN_VER option is set in 'flags'. */ int (*rsa_sign) (int type, const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, const RSA *rsa); int (*rsa_verify) (int dtype, const unsigned char *m, unsigned int m_length, const unsigned char *sigbuf, unsigned int siglen, const RSA *rsa); /* * If this callback is NULL, the builtin software RSA key-gen will be * used. This is for behavioural compatibility whilst the code gets * rewired, but one day it would be nice to assume there are no such * things as "builtin software" implementations. */ int (*rsa_keygen) (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); }; struct rsa_st { /* * The first parameter is used to pickup errors where this is passed * instead of aEVP_PKEY, it is set to 0 */ int pad; long version; const RSA_METHOD *meth; /* functional reference if 'meth' is ENGINE-provided */ ENGINE *engine; BIGNUM *n; BIGNUM *e; BIGNUM *d; BIGNUM *p; BIGNUM *q; BIGNUM *dmp1; BIGNUM *dmq1; BIGNUM *iqmp; /* be careful using this if the RSA structure is shared */ CRYPTO_EX_DATA ex_data; int references; int flags; /* Used to cache montgomery values */ BN_MONT_CTX *_method_mod_n; BN_MONT_CTX *_method_mod_p; BN_MONT_CTX *_method_mod_q; /* * all BIGNUM values are actually in the following data, if it is not * NULL */ char *bignum_data; BN_BLINDING *blinding; BN_BLINDING *mt_blinding; }; # ifndef OPENSSL_RSA_MAX_MODULUS_BITS # define OPENSSL_RSA_MAX_MODULUS_BITS 16384 # endif # ifndef OPENSSL_RSA_SMALL_MODULUS_BITS # define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 # endif # ifndef OPENSSL_RSA_MAX_PUBEXP_BITS /* exponent limit enforced for "large" modulus only */ # define OPENSSL_RSA_MAX_PUBEXP_BITS 64 # endif # define RSA_3 0x3L # define RSA_F4 0x10001L # define RSA_METHOD_FLAG_NO_CHECK 0x0001/* don't check pub/private * match */ # define RSA_FLAG_CACHE_PUBLIC 0x0002 # define RSA_FLAG_CACHE_PRIVATE 0x0004 # define RSA_FLAG_BLINDING 0x0008 # define RSA_FLAG_THREAD_SAFE 0x0010 /* * This flag means the private key operations will be handled by rsa_mod_exp * and that they do not depend on the private key components being present: * for example a key stored in external hardware. Without this flag * bn_mod_exp gets called when private key components are absent. */ # define RSA_FLAG_EXT_PKEY 0x0020 /* * This flag in the RSA_METHOD enables the new rsa_sign, rsa_verify * functions. */ # define RSA_FLAG_SIGN_VER 0x0040 /* * new with 0.9.6j and 0.9.7b; the built-in * RSA implementation now uses blinding by * default (ignoring RSA_FLAG_BLINDING), * but other engines might not need it */ # define RSA_FLAG_NO_BLINDING 0x0080 /* * new with 0.9.8f; the built-in RSA * implementation now uses constant time * operations by default in private key operations, * e.g., constant time modular exponentiation, * modular inverse without leaking branches, * division without leaking branches. This * flag disables these constant time * operations and results in faster RSA * private key operations. */ # define RSA_FLAG_NO_CONSTTIME 0x0100 # ifdef OPENSSL_USE_DEPRECATED /* deprecated name for the flag*/ /* * new with 0.9.7h; the built-in RSA * implementation now uses constant time * modular exponentiation for secret exponents * by default. This flag causes the * faster variable sliding window method to * be used for all exponents. */ # define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME # endif # define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, EVP_PKEY_CTRL_RSA_PADDING, \ pad, NULL) # define EVP_PKEY_CTX_get_rsa_padding(ctx, ppad) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, \ EVP_PKEY_CTRL_GET_RSA_PADDING, 0, ppad) # define EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, len) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ EVP_PKEY_CTRL_RSA_PSS_SALTLEN, \ len, NULL) # define EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx, plen) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, \ 0, plen) # define EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, \ EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL) # define EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, \ EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp) # define EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)md) # define EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)md) # define EVP_PKEY_CTX_get_rsa_mgf1_md(ctx, pmd) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \ EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)pmd) # define EVP_PKEY_CTX_get_rsa_oaep_md(ctx, pmd) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)pmd) # define EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, l, llen) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, (void *)l) # define EVP_PKEY_CTX_get0_rsa_oaep_label(ctx, l) \ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, (void *)l) # define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) # define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2) # define EVP_PKEY_CTRL_RSA_KEYGEN_BITS (EVP_PKEY_ALG_CTRL + 3) # define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 4) # define EVP_PKEY_CTRL_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 5) # define EVP_PKEY_CTRL_GET_RSA_PADDING (EVP_PKEY_ALG_CTRL + 6) # define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 7) # define EVP_PKEY_CTRL_GET_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 8) # define EVP_PKEY_CTRL_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 9) # define EVP_PKEY_CTRL_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 10) # define EVP_PKEY_CTRL_GET_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 11) # define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12) # define RSA_PKCS1_PADDING 1 # define RSA_SSLV23_PADDING 2 # define RSA_NO_PADDING 3 # define RSA_PKCS1_OAEP_PADDING 4 # define RSA_X931_PADDING 5 /* EVP_PKEY_ only */ # define RSA_PKCS1_PSS_PADDING 6 # define RSA_PKCS1_PADDING_SIZE 11 # define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,arg) # define RSA_get_app_data(s) RSA_get_ex_data(s,0) RSA *RSA_new(void); RSA *RSA_new_method(ENGINE *engine); int RSA_size(const RSA *rsa); /* Deprecated version */ # ifndef OPENSSL_NO_DEPRECATED RSA *RSA_generate_key(int bits, unsigned long e, void (*callback) (int, int, void *), void *cb_arg); # endif /* !defined(OPENSSL_NO_DEPRECATED) */ /* New version */ int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); int RSA_check_key(const RSA *); /* next 4 return -1 on error */ int RSA_public_encrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding); int RSA_private_encrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding); int RSA_public_decrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding); int RSA_private_decrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding); void RSA_free(RSA *r); /* "up" the RSA object's reference count */ int RSA_up_ref(RSA *r); int RSA_flags(const RSA *r); void RSA_set_default_method(const RSA_METHOD *meth); const RSA_METHOD *RSA_get_default_method(void); const RSA_METHOD *RSA_get_method(const RSA *rsa); int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); /* This function needs the memory locking malloc callbacks to be installed */ int RSA_memory_lock(RSA *r); /* these are the actual SSLeay RSA functions */ const RSA_METHOD *RSA_PKCS1_SSLeay(void); const RSA_METHOD *RSA_null_method(void); DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) typedef struct rsa_pss_params_st { X509_ALGOR *hashAlgorithm; X509_ALGOR *maskGenAlgorithm; ASN1_INTEGER *saltLength; ASN1_INTEGER *trailerField; } RSA_PSS_PARAMS; DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) typedef struct rsa_oaep_params_st { X509_ALGOR *hashFunc; X509_ALGOR *maskGenFunc; X509_ALGOR *pSourceFunc; } RSA_OAEP_PARAMS; DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) # ifndef OPENSSL_NO_FP_API int RSA_print_fp(FILE *fp, const RSA *r, int offset); # endif # ifndef OPENSSL_NO_BIO int RSA_print(BIO *bp, const RSA *r, int offset); # endif # ifndef OPENSSL_NO_RC4 int i2d_RSA_NET(const RSA *a, unsigned char **pp, int (*cb) (char *buf, int len, const char *prompt, int verify), int sgckey); RSA *d2i_RSA_NET(RSA **a, const unsigned char **pp, long length, int (*cb) (char *buf, int len, const char *prompt, int verify), int sgckey); int i2d_Netscape_RSA(const RSA *a, unsigned char **pp, int (*cb) (char *buf, int len, const char *prompt, int verify)); RSA *d2i_Netscape_RSA(RSA **a, const unsigned char **pp, long length, int (*cb) (char *buf, int len, const char *prompt, int verify)); # endif /* * The following 2 functions sign and verify a X509_SIG ASN1 object inside * PKCS#1 padded RSA encryption */ int RSA_sign(int type, const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, RSA *rsa); int RSA_verify(int type, const unsigned char *m, unsigned int m_length, const unsigned char *sigbuf, unsigned int siglen, RSA *rsa); /* * The following 2 function sign and verify a ASN1_OCTET_STRING object inside * PKCS#1 padded RSA encryption */ int RSA_sign_ASN1_OCTET_STRING(int type, const unsigned char *m, unsigned int m_length, unsigned char *sigret, unsigned int *siglen, RSA *rsa); int RSA_verify_ASN1_OCTET_STRING(int type, const unsigned char *m, unsigned int m_length, unsigned char *sigbuf, unsigned int siglen, RSA *rsa); int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); void RSA_blinding_off(RSA *rsa); BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, const unsigned char *f, int fl); int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len); int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, const unsigned char *f, int fl); int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len); int PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed, long seedlen, const EVP_MD *dgst); int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, const unsigned char *f, int fl, const unsigned char *p, int pl); int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len, const unsigned char *p, int pl); int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, const unsigned char *from, int flen, const unsigned char *param, int plen, const EVP_MD *md, const EVP_MD *mgf1md); int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, const unsigned char *from, int flen, int num, const unsigned char *param, int plen, const EVP_MD *md, const EVP_MD *mgf1md); int RSA_padding_add_SSLv23(unsigned char *to, int tlen, const unsigned char *f, int fl); int RSA_padding_check_SSLv23(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len); int RSA_padding_add_none(unsigned char *to, int tlen, const unsigned char *f, int fl); int RSA_padding_check_none(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len); int RSA_padding_add_X931(unsigned char *to, int tlen, const unsigned char *f, int fl); int RSA_padding_check_X931(unsigned char *to, int tlen, const unsigned char *f, int fl, int rsa_len); int RSA_X931_hash_id(int nid); int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, const EVP_MD *Hash, const unsigned char *EM, int sLen); int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, const unsigned char *mHash, const EVP_MD *Hash, int sLen); int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, const EVP_MD *Hash, const EVP_MD *mgf1Hash, const unsigned char *EM, int sLen); int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, const unsigned char *mHash, const EVP_MD *Hash, const EVP_MD *mgf1Hash, int sLen); int RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); int RSA_set_ex_data(RSA *r, int idx, void *arg); void *RSA_get_ex_data(const RSA *r, int idx); RSA *RSAPublicKey_dup(RSA *rsa); RSA *RSAPrivateKey_dup(RSA *rsa); /* * If this flag is set the RSA method is FIPS compliant and can be used in * FIPS mode. This is set in the validated module method. If an application * sets this flag in its own methods it is its responsibility to ensure the * result is compliant. */ # define RSA_FLAG_FIPS_METHOD 0x0400 /* * If this flag is set the operations normally disabled in FIPS mode are * permitted it is then the applications responsibility to ensure that the * usage is compliant. */ # define RSA_FLAG_NON_FIPS_ALLOW 0x0400 /* * Application has decided PRNG is good enough to generate a key: don't * check. */ # define RSA_FLAG_CHECKED 0x0800 /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_RSA_strings(void); /* Error codes for the RSA functions. */ /* Function codes. */ # define RSA_F_CHECK_PADDING_MD 140 # define RSA_F_DO_RSA_PRINT 146 # define RSA_F_INT_RSA_VERIFY 145 # define RSA_F_MEMORY_LOCK 100 # define RSA_F_OLD_RSA_PRIV_DECODE 147 # define RSA_F_PKEY_RSA_CTRL 143 # define RSA_F_PKEY_RSA_CTRL_STR 144 # define RSA_F_PKEY_RSA_SIGN 142 # define RSA_F_PKEY_RSA_VERIFY 154 # define RSA_F_PKEY_RSA_VERIFYRECOVER 141 # define RSA_F_RSA_ALGOR_TO_MD 157 # define RSA_F_RSA_BUILTIN_KEYGEN 129 # define RSA_F_RSA_CHECK_KEY 123 # define RSA_F_RSA_CMS_DECRYPT 158 # define RSA_F_RSA_EAY_PRIVATE_DECRYPT 101 # define RSA_F_RSA_EAY_PRIVATE_ENCRYPT 102 # define RSA_F_RSA_EAY_PUBLIC_DECRYPT 103 # define RSA_F_RSA_EAY_PUBLIC_ENCRYPT 104 # define RSA_F_RSA_GENERATE_KEY 105 # define RSA_F_RSA_GENERATE_KEY_EX 155 # define RSA_F_RSA_ITEM_VERIFY 156 # define RSA_F_RSA_MEMORY_LOCK 130 # define RSA_F_RSA_MGF1_TO_MD 159 # define RSA_F_RSA_NEW_METHOD 106 # define RSA_F_RSA_NULL 124 # define RSA_F_RSA_NULL_MOD_EXP 131 # define RSA_F_RSA_NULL_PRIVATE_DECRYPT 132 # define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 133 # define RSA_F_RSA_NULL_PUBLIC_DECRYPT 134 # define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135 # define RSA_F_RSA_PADDING_ADD_NONE 107 # define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 # define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 160 # define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 # define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 148 # define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108 # define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 109 # define RSA_F_RSA_PADDING_ADD_SSLV23 110 # define RSA_F_RSA_PADDING_ADD_X931 127 # define RSA_F_RSA_PADDING_CHECK_NONE 111 # define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122 # define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 161 # define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112 # define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113 # define RSA_F_RSA_PADDING_CHECK_SSLV23 114 # define RSA_F_RSA_PADDING_CHECK_X931 128 # define RSA_F_RSA_PRINT 115 # define RSA_F_RSA_PRINT_FP 116 # define RSA_F_RSA_PRIVATE_DECRYPT 150 # define RSA_F_RSA_PRIVATE_ENCRYPT 151 # define RSA_F_RSA_PRIV_DECODE 137 # define RSA_F_RSA_PRIV_ENCODE 138 # define RSA_F_RSA_PSS_TO_CTX 162 # define RSA_F_RSA_PUBLIC_DECRYPT 152 # define RSA_F_RSA_PUBLIC_ENCRYPT 153 # define RSA_F_RSA_PUB_DECODE 139 # define RSA_F_RSA_SETUP_BLINDING 136 # define RSA_F_RSA_SIGN 117 # define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 118 # define RSA_F_RSA_VERIFY 119 # define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120 # define RSA_F_RSA_VERIFY_PKCS1_PSS 126 # define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 149 /* Reason codes. */ # define RSA_R_ALGORITHM_MISMATCH 100 # define RSA_R_BAD_E_VALUE 101 # define RSA_R_BAD_FIXED_HEADER_DECRYPT 102 # define RSA_R_BAD_PAD_BYTE_COUNT 103 # define RSA_R_BAD_SIGNATURE 104 # define RSA_R_BLOCK_TYPE_IS_NOT_01 106 # define RSA_R_BLOCK_TYPE_IS_NOT_02 107 # define RSA_R_DATA_GREATER_THAN_MOD_LEN 108 # define RSA_R_DATA_TOO_LARGE 109 # define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 110 # define RSA_R_DATA_TOO_LARGE_FOR_MODULUS 132 # define RSA_R_DATA_TOO_SMALL 111 # define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE 122 # define RSA_R_DIGEST_DOES_NOT_MATCH 166 # define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY 112 # define RSA_R_DMP1_NOT_CONGRUENT_TO_D 124 # define RSA_R_DMQ1_NOT_CONGRUENT_TO_D 125 # define RSA_R_D_E_NOT_CONGRUENT_TO_1 123 # define RSA_R_FIRST_OCTET_INVALID 133 # define RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 144 # define RSA_R_INVALID_DIGEST 160 # define RSA_R_INVALID_DIGEST_LENGTH 143 # define RSA_R_INVALID_HEADER 137 # define RSA_R_INVALID_KEYBITS 145 # define RSA_R_INVALID_LABEL 161 # define RSA_R_INVALID_MESSAGE_LENGTH 131 # define RSA_R_INVALID_MGF1_MD 156 # define RSA_R_INVALID_OAEP_PARAMETERS 162 # define RSA_R_INVALID_PADDING 138 # define RSA_R_INVALID_PADDING_MODE 141 # define RSA_R_INVALID_PSS_PARAMETERS 149 # define RSA_R_INVALID_PSS_SALTLEN 146 # define RSA_R_INVALID_SALT_LENGTH 150 # define RSA_R_INVALID_TRAILER 139 # define RSA_R_INVALID_X931_DIGEST 142 # define RSA_R_IQMP_NOT_INVERSE_OF_Q 126 # define RSA_R_KEY_SIZE_TOO_SMALL 120 # define RSA_R_LAST_OCTET_INVALID 134 # define RSA_R_MODULUS_TOO_LARGE 105 # define RSA_R_NON_FIPS_RSA_METHOD 157 # define RSA_R_NO_PUBLIC_EXPONENT 140 # define RSA_R_NULL_BEFORE_BLOCK_MISSING 113 # define RSA_R_N_DOES_NOT_EQUAL_P_Q 127 # define RSA_R_OAEP_DECODING_ERROR 121 # define RSA_R_OPERATION_NOT_ALLOWED_IN_FIPS_MODE 158 # define RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 148 # define RSA_R_PADDING_CHECK_FAILED 114 # define RSA_R_PKCS_DECODING_ERROR 159 # define RSA_R_P_NOT_PRIME 128 # define RSA_R_Q_NOT_PRIME 129 # define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 130 # define RSA_R_SLEN_CHECK_FAILED 136 # define RSA_R_SLEN_RECOVERY_FAILED 135 # define RSA_R_SSLV3_ROLLBACK_ATTACK 115 # define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116 # define RSA_R_UNKNOWN_ALGORITHM_TYPE 117 # define RSA_R_UNKNOWN_DIGEST 163 # define RSA_R_UNKNOWN_MASK_DIGEST 151 # define RSA_R_UNKNOWN_PADDING_TYPE 118 # define RSA_R_UNKNOWN_PSS_DIGEST 152 # define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 164 # define RSA_R_UNSUPPORTED_LABEL_SOURCE 165 # define RSA_R_UNSUPPORTED_MASK_ALGORITHM 153 # define RSA_R_UNSUPPORTED_MASK_PARAMETER 154 # define RSA_R_UNSUPPORTED_SIGNATURE_TYPE 155 # define RSA_R_VALUE_MISSING 147 # define RSA_R_WRONG_SIGNATURE_LENGTH 119 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/safestack.h ================================================ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_SAFESTACK_H # define HEADER_SAFESTACK_H # include #ifdef __cplusplus extern "C" { #endif # ifndef CHECKED_PTR_OF # define CHECKED_PTR_OF(type, p) \ ((void*) (1 ? p : (type*)0)) # endif /* * In C++ we get problems because an explicit cast is needed from (void *) we * use CHECKED_STACK_OF to ensure the correct type is passed in the macros * below. */ # define CHECKED_STACK_OF(type, p) \ ((_STACK*) (1 ? p : (STACK_OF(type)*)0)) # define CHECKED_SK_COPY_FUNC(type, p) \ ((void *(*)(void *)) ((1 ? p : (type *(*)(const type *))0))) # define CHECKED_SK_FREE_FUNC(type, p) \ ((void (*)(void *)) ((1 ? p : (void (*)(type *))0))) # define CHECKED_SK_CMP_FUNC(type, p) \ ((int (*)(const void *, const void *)) \ ((1 ? p : (int (*)(const type * const *, const type * const *))0))) # define STACK_OF(type) struct stack_st_##type # define PREDECLARE_STACK_OF(type) STACK_OF(type); # define DECLARE_STACK_OF(type) \ STACK_OF(type) \ { \ _STACK stack; \ }; # define DECLARE_SPECIAL_STACK_OF(type, type2) \ STACK_OF(type) \ { \ _STACK stack; \ }; /* nada (obsolete in new safestack approach)*/ # define IMPLEMENT_STACK_OF(type) /*- * Strings are special: normally an lhash entry will point to a single * (somewhat) mutable object. In the case of strings: * * a) Instead of a single char, there is an array of chars, NUL-terminated. * b) The string may have be immutable. * * So, they need their own declarations. Especially important for * type-checking tools, such as Deputy. * * In practice, however, it appears to be hard to have a const * string. For now, I'm settling for dealing with the fact it is a * string at all. */ typedef char *OPENSSL_STRING; typedef const char *OPENSSL_CSTRING; /* * Confusingly, LHASH_OF(STRING) deals with char ** throughout, but * STACK_OF(STRING) is really more like STACK_OF(char), only, as mentioned * above, instead of a single char each entry is a NUL-terminated array of * chars. So, we have to implement STRING specially for STACK_OF. This is * dealt with in the autogenerated macros below. */ DECLARE_SPECIAL_STACK_OF(OPENSSL_STRING, char) /* * Similarly, we sometimes use a block of characters, NOT nul-terminated. * These should also be distinguished from "normal" stacks. */ typedef void *OPENSSL_BLOCK; DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) /* * SKM_sk_... stack macros are internal to safestack.h: never use them * directly, use sk__... instead */ # define SKM_sk_new(type, cmp) \ ((STACK_OF(type) *)sk_new(CHECKED_SK_CMP_FUNC(type, cmp))) # define SKM_sk_new_null(type) \ ((STACK_OF(type) *)sk_new_null()) # define SKM_sk_free(type, st) \ sk_free(CHECKED_STACK_OF(type, st)) # define SKM_sk_num(type, st) \ sk_num(CHECKED_STACK_OF(type, st)) # define SKM_sk_value(type, st,i) \ ((type *)sk_value(CHECKED_STACK_OF(type, st), i)) # define SKM_sk_set(type, st,i,val) \ sk_set(CHECKED_STACK_OF(type, st), i, CHECKED_PTR_OF(type, val)) # define SKM_sk_zero(type, st) \ sk_zero(CHECKED_STACK_OF(type, st)) # define SKM_sk_push(type, st, val) \ sk_push(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) # define SKM_sk_unshift(type, st, val) \ sk_unshift(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) # define SKM_sk_find(type, st, val) \ sk_find(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val)) # define SKM_sk_find_ex(type, st, val) \ sk_find_ex(CHECKED_STACK_OF(type, st), \ CHECKED_PTR_OF(type, val)) # define SKM_sk_delete(type, st, i) \ (type *)sk_delete(CHECKED_STACK_OF(type, st), i) # define SKM_sk_delete_ptr(type, st, ptr) \ (type *)sk_delete_ptr(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, ptr)) # define SKM_sk_insert(type, st,val, i) \ sk_insert(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val), i) # define SKM_sk_set_cmp_func(type, st, cmp) \ ((int (*)(const type * const *,const type * const *)) \ sk_set_cmp_func(CHECKED_STACK_OF(type, st), CHECKED_SK_CMP_FUNC(type, cmp))) # define SKM_sk_dup(type, st) \ (STACK_OF(type) *)sk_dup(CHECKED_STACK_OF(type, st)) # define SKM_sk_pop_free(type, st, free_func) \ sk_pop_free(CHECKED_STACK_OF(type, st), CHECKED_SK_FREE_FUNC(type, free_func)) # define SKM_sk_deep_copy(type, st, copy_func, free_func) \ (STACK_OF(type) *)sk_deep_copy(CHECKED_STACK_OF(type, st), CHECKED_SK_COPY_FUNC(type, copy_func), CHECKED_SK_FREE_FUNC(type, free_func)) # define SKM_sk_shift(type, st) \ (type *)sk_shift(CHECKED_STACK_OF(type, st)) # define SKM_sk_pop(type, st) \ (type *)sk_pop(CHECKED_STACK_OF(type, st)) # define SKM_sk_sort(type, st) \ sk_sort(CHECKED_STACK_OF(type, st)) # define SKM_sk_is_sorted(type, st) \ sk_is_sorted(CHECKED_STACK_OF(type, st)) # define SKM_ASN1_SET_OF_d2i(type, st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ (STACK_OF(type) *)d2i_ASN1_SET( \ (STACK_OF(OPENSSL_BLOCK) **)CHECKED_PTR_OF(STACK_OF(type)*, st), \ pp, length, \ CHECKED_D2I_OF(type, d2i_func), \ CHECKED_SK_FREE_FUNC(type, free_func), \ ex_tag, ex_class) # define SKM_ASN1_SET_OF_i2d(type, st, pp, i2d_func, ex_tag, ex_class, is_set) \ i2d_ASN1_SET((STACK_OF(OPENSSL_BLOCK) *)CHECKED_STACK_OF(type, st), pp, \ CHECKED_I2D_OF(type, i2d_func), \ ex_tag, ex_class, is_set) # define SKM_ASN1_seq_pack(type, st, i2d_func, buf, len) \ ASN1_seq_pack(CHECKED_PTR_OF(STACK_OF(type), st), \ CHECKED_I2D_OF(type, i2d_func), buf, len) # define SKM_ASN1_seq_unpack(type, buf, len, d2i_func, free_func) \ (STACK_OF(type) *)ASN1_seq_unpack(buf, len, CHECKED_D2I_OF(type, d2i_func), CHECKED_SK_FREE_FUNC(type, free_func)) # define SKM_PKCS12_decrypt_d2i(type, algor, d2i_func, free_func, pass, passlen, oct, seq) \ (STACK_OF(type) *)PKCS12_decrypt_d2i(algor, \ CHECKED_D2I_OF(type, d2i_func), \ CHECKED_SK_FREE_FUNC(type, free_func), \ pass, passlen, oct, seq) /* * This block of defines is updated by util/mkstack.pl, please do not touch! */ # define sk_ACCESS_DESCRIPTION_new(cmp) SKM_sk_new(ACCESS_DESCRIPTION, (cmp)) # define sk_ACCESS_DESCRIPTION_new_null() SKM_sk_new_null(ACCESS_DESCRIPTION) # define sk_ACCESS_DESCRIPTION_free(st) SKM_sk_free(ACCESS_DESCRIPTION, (st)) # define sk_ACCESS_DESCRIPTION_num(st) SKM_sk_num(ACCESS_DESCRIPTION, (st)) # define sk_ACCESS_DESCRIPTION_value(st, i) SKM_sk_value(ACCESS_DESCRIPTION, (st), (i)) # define sk_ACCESS_DESCRIPTION_set(st, i, val) SKM_sk_set(ACCESS_DESCRIPTION, (st), (i), (val)) # define sk_ACCESS_DESCRIPTION_zero(st) SKM_sk_zero(ACCESS_DESCRIPTION, (st)) # define sk_ACCESS_DESCRIPTION_push(st, val) SKM_sk_push(ACCESS_DESCRIPTION, (st), (val)) # define sk_ACCESS_DESCRIPTION_unshift(st, val) SKM_sk_unshift(ACCESS_DESCRIPTION, (st), (val)) # define sk_ACCESS_DESCRIPTION_find(st, val) SKM_sk_find(ACCESS_DESCRIPTION, (st), (val)) # define sk_ACCESS_DESCRIPTION_find_ex(st, val) SKM_sk_find_ex(ACCESS_DESCRIPTION, (st), (val)) # define sk_ACCESS_DESCRIPTION_delete(st, i) SKM_sk_delete(ACCESS_DESCRIPTION, (st), (i)) # define sk_ACCESS_DESCRIPTION_delete_ptr(st, ptr) SKM_sk_delete_ptr(ACCESS_DESCRIPTION, (st), (ptr)) # define sk_ACCESS_DESCRIPTION_insert(st, val, i) SKM_sk_insert(ACCESS_DESCRIPTION, (st), (val), (i)) # define sk_ACCESS_DESCRIPTION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ACCESS_DESCRIPTION, (st), (cmp)) # define sk_ACCESS_DESCRIPTION_dup(st) SKM_sk_dup(ACCESS_DESCRIPTION, st) # define sk_ACCESS_DESCRIPTION_pop_free(st, free_func) SKM_sk_pop_free(ACCESS_DESCRIPTION, (st), (free_func)) # define sk_ACCESS_DESCRIPTION_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ACCESS_DESCRIPTION, (st), (copy_func), (free_func)) # define sk_ACCESS_DESCRIPTION_shift(st) SKM_sk_shift(ACCESS_DESCRIPTION, (st)) # define sk_ACCESS_DESCRIPTION_pop(st) SKM_sk_pop(ACCESS_DESCRIPTION, (st)) # define sk_ACCESS_DESCRIPTION_sort(st) SKM_sk_sort(ACCESS_DESCRIPTION, (st)) # define sk_ACCESS_DESCRIPTION_is_sorted(st) SKM_sk_is_sorted(ACCESS_DESCRIPTION, (st)) # define sk_ASIdOrRange_new(cmp) SKM_sk_new(ASIdOrRange, (cmp)) # define sk_ASIdOrRange_new_null() SKM_sk_new_null(ASIdOrRange) # define sk_ASIdOrRange_free(st) SKM_sk_free(ASIdOrRange, (st)) # define sk_ASIdOrRange_num(st) SKM_sk_num(ASIdOrRange, (st)) # define sk_ASIdOrRange_value(st, i) SKM_sk_value(ASIdOrRange, (st), (i)) # define sk_ASIdOrRange_set(st, i, val) SKM_sk_set(ASIdOrRange, (st), (i), (val)) # define sk_ASIdOrRange_zero(st) SKM_sk_zero(ASIdOrRange, (st)) # define sk_ASIdOrRange_push(st, val) SKM_sk_push(ASIdOrRange, (st), (val)) # define sk_ASIdOrRange_unshift(st, val) SKM_sk_unshift(ASIdOrRange, (st), (val)) # define sk_ASIdOrRange_find(st, val) SKM_sk_find(ASIdOrRange, (st), (val)) # define sk_ASIdOrRange_find_ex(st, val) SKM_sk_find_ex(ASIdOrRange, (st), (val)) # define sk_ASIdOrRange_delete(st, i) SKM_sk_delete(ASIdOrRange, (st), (i)) # define sk_ASIdOrRange_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASIdOrRange, (st), (ptr)) # define sk_ASIdOrRange_insert(st, val, i) SKM_sk_insert(ASIdOrRange, (st), (val), (i)) # define sk_ASIdOrRange_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASIdOrRange, (st), (cmp)) # define sk_ASIdOrRange_dup(st) SKM_sk_dup(ASIdOrRange, st) # define sk_ASIdOrRange_pop_free(st, free_func) SKM_sk_pop_free(ASIdOrRange, (st), (free_func)) # define sk_ASIdOrRange_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASIdOrRange, (st), (copy_func), (free_func)) # define sk_ASIdOrRange_shift(st) SKM_sk_shift(ASIdOrRange, (st)) # define sk_ASIdOrRange_pop(st) SKM_sk_pop(ASIdOrRange, (st)) # define sk_ASIdOrRange_sort(st) SKM_sk_sort(ASIdOrRange, (st)) # define sk_ASIdOrRange_is_sorted(st) SKM_sk_is_sorted(ASIdOrRange, (st)) # define sk_ASN1_GENERALSTRING_new(cmp) SKM_sk_new(ASN1_GENERALSTRING, (cmp)) # define sk_ASN1_GENERALSTRING_new_null() SKM_sk_new_null(ASN1_GENERALSTRING) # define sk_ASN1_GENERALSTRING_free(st) SKM_sk_free(ASN1_GENERALSTRING, (st)) # define sk_ASN1_GENERALSTRING_num(st) SKM_sk_num(ASN1_GENERALSTRING, (st)) # define sk_ASN1_GENERALSTRING_value(st, i) SKM_sk_value(ASN1_GENERALSTRING, (st), (i)) # define sk_ASN1_GENERALSTRING_set(st, i, val) SKM_sk_set(ASN1_GENERALSTRING, (st), (i), (val)) # define sk_ASN1_GENERALSTRING_zero(st) SKM_sk_zero(ASN1_GENERALSTRING, (st)) # define sk_ASN1_GENERALSTRING_push(st, val) SKM_sk_push(ASN1_GENERALSTRING, (st), (val)) # define sk_ASN1_GENERALSTRING_unshift(st, val) SKM_sk_unshift(ASN1_GENERALSTRING, (st), (val)) # define sk_ASN1_GENERALSTRING_find(st, val) SKM_sk_find(ASN1_GENERALSTRING, (st), (val)) # define sk_ASN1_GENERALSTRING_find_ex(st, val) SKM_sk_find_ex(ASN1_GENERALSTRING, (st), (val)) # define sk_ASN1_GENERALSTRING_delete(st, i) SKM_sk_delete(ASN1_GENERALSTRING, (st), (i)) # define sk_ASN1_GENERALSTRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_GENERALSTRING, (st), (ptr)) # define sk_ASN1_GENERALSTRING_insert(st, val, i) SKM_sk_insert(ASN1_GENERALSTRING, (st), (val), (i)) # define sk_ASN1_GENERALSTRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_GENERALSTRING, (st), (cmp)) # define sk_ASN1_GENERALSTRING_dup(st) SKM_sk_dup(ASN1_GENERALSTRING, st) # define sk_ASN1_GENERALSTRING_pop_free(st, free_func) SKM_sk_pop_free(ASN1_GENERALSTRING, (st), (free_func)) # define sk_ASN1_GENERALSTRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_GENERALSTRING, (st), (copy_func), (free_func)) # define sk_ASN1_GENERALSTRING_shift(st) SKM_sk_shift(ASN1_GENERALSTRING, (st)) # define sk_ASN1_GENERALSTRING_pop(st) SKM_sk_pop(ASN1_GENERALSTRING, (st)) # define sk_ASN1_GENERALSTRING_sort(st) SKM_sk_sort(ASN1_GENERALSTRING, (st)) # define sk_ASN1_GENERALSTRING_is_sorted(st) SKM_sk_is_sorted(ASN1_GENERALSTRING, (st)) # define sk_ASN1_INTEGER_new(cmp) SKM_sk_new(ASN1_INTEGER, (cmp)) # define sk_ASN1_INTEGER_new_null() SKM_sk_new_null(ASN1_INTEGER) # define sk_ASN1_INTEGER_free(st) SKM_sk_free(ASN1_INTEGER, (st)) # define sk_ASN1_INTEGER_num(st) SKM_sk_num(ASN1_INTEGER, (st)) # define sk_ASN1_INTEGER_value(st, i) SKM_sk_value(ASN1_INTEGER, (st), (i)) # define sk_ASN1_INTEGER_set(st, i, val) SKM_sk_set(ASN1_INTEGER, (st), (i), (val)) # define sk_ASN1_INTEGER_zero(st) SKM_sk_zero(ASN1_INTEGER, (st)) # define sk_ASN1_INTEGER_push(st, val) SKM_sk_push(ASN1_INTEGER, (st), (val)) # define sk_ASN1_INTEGER_unshift(st, val) SKM_sk_unshift(ASN1_INTEGER, (st), (val)) # define sk_ASN1_INTEGER_find(st, val) SKM_sk_find(ASN1_INTEGER, (st), (val)) # define sk_ASN1_INTEGER_find_ex(st, val) SKM_sk_find_ex(ASN1_INTEGER, (st), (val)) # define sk_ASN1_INTEGER_delete(st, i) SKM_sk_delete(ASN1_INTEGER, (st), (i)) # define sk_ASN1_INTEGER_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_INTEGER, (st), (ptr)) # define sk_ASN1_INTEGER_insert(st, val, i) SKM_sk_insert(ASN1_INTEGER, (st), (val), (i)) # define sk_ASN1_INTEGER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_INTEGER, (st), (cmp)) # define sk_ASN1_INTEGER_dup(st) SKM_sk_dup(ASN1_INTEGER, st) # define sk_ASN1_INTEGER_pop_free(st, free_func) SKM_sk_pop_free(ASN1_INTEGER, (st), (free_func)) # define sk_ASN1_INTEGER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_INTEGER, (st), (copy_func), (free_func)) # define sk_ASN1_INTEGER_shift(st) SKM_sk_shift(ASN1_INTEGER, (st)) # define sk_ASN1_INTEGER_pop(st) SKM_sk_pop(ASN1_INTEGER, (st)) # define sk_ASN1_INTEGER_sort(st) SKM_sk_sort(ASN1_INTEGER, (st)) # define sk_ASN1_INTEGER_is_sorted(st) SKM_sk_is_sorted(ASN1_INTEGER, (st)) # define sk_ASN1_OBJECT_new(cmp) SKM_sk_new(ASN1_OBJECT, (cmp)) # define sk_ASN1_OBJECT_new_null() SKM_sk_new_null(ASN1_OBJECT) # define sk_ASN1_OBJECT_free(st) SKM_sk_free(ASN1_OBJECT, (st)) # define sk_ASN1_OBJECT_num(st) SKM_sk_num(ASN1_OBJECT, (st)) # define sk_ASN1_OBJECT_value(st, i) SKM_sk_value(ASN1_OBJECT, (st), (i)) # define sk_ASN1_OBJECT_set(st, i, val) SKM_sk_set(ASN1_OBJECT, (st), (i), (val)) # define sk_ASN1_OBJECT_zero(st) SKM_sk_zero(ASN1_OBJECT, (st)) # define sk_ASN1_OBJECT_push(st, val) SKM_sk_push(ASN1_OBJECT, (st), (val)) # define sk_ASN1_OBJECT_unshift(st, val) SKM_sk_unshift(ASN1_OBJECT, (st), (val)) # define sk_ASN1_OBJECT_find(st, val) SKM_sk_find(ASN1_OBJECT, (st), (val)) # define sk_ASN1_OBJECT_find_ex(st, val) SKM_sk_find_ex(ASN1_OBJECT, (st), (val)) # define sk_ASN1_OBJECT_delete(st, i) SKM_sk_delete(ASN1_OBJECT, (st), (i)) # define sk_ASN1_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_OBJECT, (st), (ptr)) # define sk_ASN1_OBJECT_insert(st, val, i) SKM_sk_insert(ASN1_OBJECT, (st), (val), (i)) # define sk_ASN1_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_OBJECT, (st), (cmp)) # define sk_ASN1_OBJECT_dup(st) SKM_sk_dup(ASN1_OBJECT, st) # define sk_ASN1_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(ASN1_OBJECT, (st), (free_func)) # define sk_ASN1_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_OBJECT, (st), (copy_func), (free_func)) # define sk_ASN1_OBJECT_shift(st) SKM_sk_shift(ASN1_OBJECT, (st)) # define sk_ASN1_OBJECT_pop(st) SKM_sk_pop(ASN1_OBJECT, (st)) # define sk_ASN1_OBJECT_sort(st) SKM_sk_sort(ASN1_OBJECT, (st)) # define sk_ASN1_OBJECT_is_sorted(st) SKM_sk_is_sorted(ASN1_OBJECT, (st)) # define sk_ASN1_STRING_TABLE_new(cmp) SKM_sk_new(ASN1_STRING_TABLE, (cmp)) # define sk_ASN1_STRING_TABLE_new_null() SKM_sk_new_null(ASN1_STRING_TABLE) # define sk_ASN1_STRING_TABLE_free(st) SKM_sk_free(ASN1_STRING_TABLE, (st)) # define sk_ASN1_STRING_TABLE_num(st) SKM_sk_num(ASN1_STRING_TABLE, (st)) # define sk_ASN1_STRING_TABLE_value(st, i) SKM_sk_value(ASN1_STRING_TABLE, (st), (i)) # define sk_ASN1_STRING_TABLE_set(st, i, val) SKM_sk_set(ASN1_STRING_TABLE, (st), (i), (val)) # define sk_ASN1_STRING_TABLE_zero(st) SKM_sk_zero(ASN1_STRING_TABLE, (st)) # define sk_ASN1_STRING_TABLE_push(st, val) SKM_sk_push(ASN1_STRING_TABLE, (st), (val)) # define sk_ASN1_STRING_TABLE_unshift(st, val) SKM_sk_unshift(ASN1_STRING_TABLE, (st), (val)) # define sk_ASN1_STRING_TABLE_find(st, val) SKM_sk_find(ASN1_STRING_TABLE, (st), (val)) # define sk_ASN1_STRING_TABLE_find_ex(st, val) SKM_sk_find_ex(ASN1_STRING_TABLE, (st), (val)) # define sk_ASN1_STRING_TABLE_delete(st, i) SKM_sk_delete(ASN1_STRING_TABLE, (st), (i)) # define sk_ASN1_STRING_TABLE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_STRING_TABLE, (st), (ptr)) # define sk_ASN1_STRING_TABLE_insert(st, val, i) SKM_sk_insert(ASN1_STRING_TABLE, (st), (val), (i)) # define sk_ASN1_STRING_TABLE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_STRING_TABLE, (st), (cmp)) # define sk_ASN1_STRING_TABLE_dup(st) SKM_sk_dup(ASN1_STRING_TABLE, st) # define sk_ASN1_STRING_TABLE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_STRING_TABLE, (st), (free_func)) # define sk_ASN1_STRING_TABLE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_STRING_TABLE, (st), (copy_func), (free_func)) # define sk_ASN1_STRING_TABLE_shift(st) SKM_sk_shift(ASN1_STRING_TABLE, (st)) # define sk_ASN1_STRING_TABLE_pop(st) SKM_sk_pop(ASN1_STRING_TABLE, (st)) # define sk_ASN1_STRING_TABLE_sort(st) SKM_sk_sort(ASN1_STRING_TABLE, (st)) # define sk_ASN1_STRING_TABLE_is_sorted(st) SKM_sk_is_sorted(ASN1_STRING_TABLE, (st)) # define sk_ASN1_TYPE_new(cmp) SKM_sk_new(ASN1_TYPE, (cmp)) # define sk_ASN1_TYPE_new_null() SKM_sk_new_null(ASN1_TYPE) # define sk_ASN1_TYPE_free(st) SKM_sk_free(ASN1_TYPE, (st)) # define sk_ASN1_TYPE_num(st) SKM_sk_num(ASN1_TYPE, (st)) # define sk_ASN1_TYPE_value(st, i) SKM_sk_value(ASN1_TYPE, (st), (i)) # define sk_ASN1_TYPE_set(st, i, val) SKM_sk_set(ASN1_TYPE, (st), (i), (val)) # define sk_ASN1_TYPE_zero(st) SKM_sk_zero(ASN1_TYPE, (st)) # define sk_ASN1_TYPE_push(st, val) SKM_sk_push(ASN1_TYPE, (st), (val)) # define sk_ASN1_TYPE_unshift(st, val) SKM_sk_unshift(ASN1_TYPE, (st), (val)) # define sk_ASN1_TYPE_find(st, val) SKM_sk_find(ASN1_TYPE, (st), (val)) # define sk_ASN1_TYPE_find_ex(st, val) SKM_sk_find_ex(ASN1_TYPE, (st), (val)) # define sk_ASN1_TYPE_delete(st, i) SKM_sk_delete(ASN1_TYPE, (st), (i)) # define sk_ASN1_TYPE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_TYPE, (st), (ptr)) # define sk_ASN1_TYPE_insert(st, val, i) SKM_sk_insert(ASN1_TYPE, (st), (val), (i)) # define sk_ASN1_TYPE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_TYPE, (st), (cmp)) # define sk_ASN1_TYPE_dup(st) SKM_sk_dup(ASN1_TYPE, st) # define sk_ASN1_TYPE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_TYPE, (st), (free_func)) # define sk_ASN1_TYPE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_TYPE, (st), (copy_func), (free_func)) # define sk_ASN1_TYPE_shift(st) SKM_sk_shift(ASN1_TYPE, (st)) # define sk_ASN1_TYPE_pop(st) SKM_sk_pop(ASN1_TYPE, (st)) # define sk_ASN1_TYPE_sort(st) SKM_sk_sort(ASN1_TYPE, (st)) # define sk_ASN1_TYPE_is_sorted(st) SKM_sk_is_sorted(ASN1_TYPE, (st)) # define sk_ASN1_UTF8STRING_new(cmp) SKM_sk_new(ASN1_UTF8STRING, (cmp)) # define sk_ASN1_UTF8STRING_new_null() SKM_sk_new_null(ASN1_UTF8STRING) # define sk_ASN1_UTF8STRING_free(st) SKM_sk_free(ASN1_UTF8STRING, (st)) # define sk_ASN1_UTF8STRING_num(st) SKM_sk_num(ASN1_UTF8STRING, (st)) # define sk_ASN1_UTF8STRING_value(st, i) SKM_sk_value(ASN1_UTF8STRING, (st), (i)) # define sk_ASN1_UTF8STRING_set(st, i, val) SKM_sk_set(ASN1_UTF8STRING, (st), (i), (val)) # define sk_ASN1_UTF8STRING_zero(st) SKM_sk_zero(ASN1_UTF8STRING, (st)) # define sk_ASN1_UTF8STRING_push(st, val) SKM_sk_push(ASN1_UTF8STRING, (st), (val)) # define sk_ASN1_UTF8STRING_unshift(st, val) SKM_sk_unshift(ASN1_UTF8STRING, (st), (val)) # define sk_ASN1_UTF8STRING_find(st, val) SKM_sk_find(ASN1_UTF8STRING, (st), (val)) # define sk_ASN1_UTF8STRING_find_ex(st, val) SKM_sk_find_ex(ASN1_UTF8STRING, (st), (val)) # define sk_ASN1_UTF8STRING_delete(st, i) SKM_sk_delete(ASN1_UTF8STRING, (st), (i)) # define sk_ASN1_UTF8STRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_UTF8STRING, (st), (ptr)) # define sk_ASN1_UTF8STRING_insert(st, val, i) SKM_sk_insert(ASN1_UTF8STRING, (st), (val), (i)) # define sk_ASN1_UTF8STRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_UTF8STRING, (st), (cmp)) # define sk_ASN1_UTF8STRING_dup(st) SKM_sk_dup(ASN1_UTF8STRING, st) # define sk_ASN1_UTF8STRING_pop_free(st, free_func) SKM_sk_pop_free(ASN1_UTF8STRING, (st), (free_func)) # define sk_ASN1_UTF8STRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_UTF8STRING, (st), (copy_func), (free_func)) # define sk_ASN1_UTF8STRING_shift(st) SKM_sk_shift(ASN1_UTF8STRING, (st)) # define sk_ASN1_UTF8STRING_pop(st) SKM_sk_pop(ASN1_UTF8STRING, (st)) # define sk_ASN1_UTF8STRING_sort(st) SKM_sk_sort(ASN1_UTF8STRING, (st)) # define sk_ASN1_UTF8STRING_is_sorted(st) SKM_sk_is_sorted(ASN1_UTF8STRING, (st)) # define sk_ASN1_VALUE_new(cmp) SKM_sk_new(ASN1_VALUE, (cmp)) # define sk_ASN1_VALUE_new_null() SKM_sk_new_null(ASN1_VALUE) # define sk_ASN1_VALUE_free(st) SKM_sk_free(ASN1_VALUE, (st)) # define sk_ASN1_VALUE_num(st) SKM_sk_num(ASN1_VALUE, (st)) # define sk_ASN1_VALUE_value(st, i) SKM_sk_value(ASN1_VALUE, (st), (i)) # define sk_ASN1_VALUE_set(st, i, val) SKM_sk_set(ASN1_VALUE, (st), (i), (val)) # define sk_ASN1_VALUE_zero(st) SKM_sk_zero(ASN1_VALUE, (st)) # define sk_ASN1_VALUE_push(st, val) SKM_sk_push(ASN1_VALUE, (st), (val)) # define sk_ASN1_VALUE_unshift(st, val) SKM_sk_unshift(ASN1_VALUE, (st), (val)) # define sk_ASN1_VALUE_find(st, val) SKM_sk_find(ASN1_VALUE, (st), (val)) # define sk_ASN1_VALUE_find_ex(st, val) SKM_sk_find_ex(ASN1_VALUE, (st), (val)) # define sk_ASN1_VALUE_delete(st, i) SKM_sk_delete(ASN1_VALUE, (st), (i)) # define sk_ASN1_VALUE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_VALUE, (st), (ptr)) # define sk_ASN1_VALUE_insert(st, val, i) SKM_sk_insert(ASN1_VALUE, (st), (val), (i)) # define sk_ASN1_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_VALUE, (st), (cmp)) # define sk_ASN1_VALUE_dup(st) SKM_sk_dup(ASN1_VALUE, st) # define sk_ASN1_VALUE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_VALUE, (st), (free_func)) # define sk_ASN1_VALUE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_VALUE, (st), (copy_func), (free_func)) # define sk_ASN1_VALUE_shift(st) SKM_sk_shift(ASN1_VALUE, (st)) # define sk_ASN1_VALUE_pop(st) SKM_sk_pop(ASN1_VALUE, (st)) # define sk_ASN1_VALUE_sort(st) SKM_sk_sort(ASN1_VALUE, (st)) # define sk_ASN1_VALUE_is_sorted(st) SKM_sk_is_sorted(ASN1_VALUE, (st)) # define sk_BIO_new(cmp) SKM_sk_new(BIO, (cmp)) # define sk_BIO_new_null() SKM_sk_new_null(BIO) # define sk_BIO_free(st) SKM_sk_free(BIO, (st)) # define sk_BIO_num(st) SKM_sk_num(BIO, (st)) # define sk_BIO_value(st, i) SKM_sk_value(BIO, (st), (i)) # define sk_BIO_set(st, i, val) SKM_sk_set(BIO, (st), (i), (val)) # define sk_BIO_zero(st) SKM_sk_zero(BIO, (st)) # define sk_BIO_push(st, val) SKM_sk_push(BIO, (st), (val)) # define sk_BIO_unshift(st, val) SKM_sk_unshift(BIO, (st), (val)) # define sk_BIO_find(st, val) SKM_sk_find(BIO, (st), (val)) # define sk_BIO_find_ex(st, val) SKM_sk_find_ex(BIO, (st), (val)) # define sk_BIO_delete(st, i) SKM_sk_delete(BIO, (st), (i)) # define sk_BIO_delete_ptr(st, ptr) SKM_sk_delete_ptr(BIO, (st), (ptr)) # define sk_BIO_insert(st, val, i) SKM_sk_insert(BIO, (st), (val), (i)) # define sk_BIO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BIO, (st), (cmp)) # define sk_BIO_dup(st) SKM_sk_dup(BIO, st) # define sk_BIO_pop_free(st, free_func) SKM_sk_pop_free(BIO, (st), (free_func)) # define sk_BIO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BIO, (st), (copy_func), (free_func)) # define sk_BIO_shift(st) SKM_sk_shift(BIO, (st)) # define sk_BIO_pop(st) SKM_sk_pop(BIO, (st)) # define sk_BIO_sort(st) SKM_sk_sort(BIO, (st)) # define sk_BIO_is_sorted(st) SKM_sk_is_sorted(BIO, (st)) # define sk_BY_DIR_ENTRY_new(cmp) SKM_sk_new(BY_DIR_ENTRY, (cmp)) # define sk_BY_DIR_ENTRY_new_null() SKM_sk_new_null(BY_DIR_ENTRY) # define sk_BY_DIR_ENTRY_free(st) SKM_sk_free(BY_DIR_ENTRY, (st)) # define sk_BY_DIR_ENTRY_num(st) SKM_sk_num(BY_DIR_ENTRY, (st)) # define sk_BY_DIR_ENTRY_value(st, i) SKM_sk_value(BY_DIR_ENTRY, (st), (i)) # define sk_BY_DIR_ENTRY_set(st, i, val) SKM_sk_set(BY_DIR_ENTRY, (st), (i), (val)) # define sk_BY_DIR_ENTRY_zero(st) SKM_sk_zero(BY_DIR_ENTRY, (st)) # define sk_BY_DIR_ENTRY_push(st, val) SKM_sk_push(BY_DIR_ENTRY, (st), (val)) # define sk_BY_DIR_ENTRY_unshift(st, val) SKM_sk_unshift(BY_DIR_ENTRY, (st), (val)) # define sk_BY_DIR_ENTRY_find(st, val) SKM_sk_find(BY_DIR_ENTRY, (st), (val)) # define sk_BY_DIR_ENTRY_find_ex(st, val) SKM_sk_find_ex(BY_DIR_ENTRY, (st), (val)) # define sk_BY_DIR_ENTRY_delete(st, i) SKM_sk_delete(BY_DIR_ENTRY, (st), (i)) # define sk_BY_DIR_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(BY_DIR_ENTRY, (st), (ptr)) # define sk_BY_DIR_ENTRY_insert(st, val, i) SKM_sk_insert(BY_DIR_ENTRY, (st), (val), (i)) # define sk_BY_DIR_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BY_DIR_ENTRY, (st), (cmp)) # define sk_BY_DIR_ENTRY_dup(st) SKM_sk_dup(BY_DIR_ENTRY, st) # define sk_BY_DIR_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(BY_DIR_ENTRY, (st), (free_func)) # define sk_BY_DIR_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BY_DIR_ENTRY, (st), (copy_func), (free_func)) # define sk_BY_DIR_ENTRY_shift(st) SKM_sk_shift(BY_DIR_ENTRY, (st)) # define sk_BY_DIR_ENTRY_pop(st) SKM_sk_pop(BY_DIR_ENTRY, (st)) # define sk_BY_DIR_ENTRY_sort(st) SKM_sk_sort(BY_DIR_ENTRY, (st)) # define sk_BY_DIR_ENTRY_is_sorted(st) SKM_sk_is_sorted(BY_DIR_ENTRY, (st)) # define sk_BY_DIR_HASH_new(cmp) SKM_sk_new(BY_DIR_HASH, (cmp)) # define sk_BY_DIR_HASH_new_null() SKM_sk_new_null(BY_DIR_HASH) # define sk_BY_DIR_HASH_free(st) SKM_sk_free(BY_DIR_HASH, (st)) # define sk_BY_DIR_HASH_num(st) SKM_sk_num(BY_DIR_HASH, (st)) # define sk_BY_DIR_HASH_value(st, i) SKM_sk_value(BY_DIR_HASH, (st), (i)) # define sk_BY_DIR_HASH_set(st, i, val) SKM_sk_set(BY_DIR_HASH, (st), (i), (val)) # define sk_BY_DIR_HASH_zero(st) SKM_sk_zero(BY_DIR_HASH, (st)) # define sk_BY_DIR_HASH_push(st, val) SKM_sk_push(BY_DIR_HASH, (st), (val)) # define sk_BY_DIR_HASH_unshift(st, val) SKM_sk_unshift(BY_DIR_HASH, (st), (val)) # define sk_BY_DIR_HASH_find(st, val) SKM_sk_find(BY_DIR_HASH, (st), (val)) # define sk_BY_DIR_HASH_find_ex(st, val) SKM_sk_find_ex(BY_DIR_HASH, (st), (val)) # define sk_BY_DIR_HASH_delete(st, i) SKM_sk_delete(BY_DIR_HASH, (st), (i)) # define sk_BY_DIR_HASH_delete_ptr(st, ptr) SKM_sk_delete_ptr(BY_DIR_HASH, (st), (ptr)) # define sk_BY_DIR_HASH_insert(st, val, i) SKM_sk_insert(BY_DIR_HASH, (st), (val), (i)) # define sk_BY_DIR_HASH_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BY_DIR_HASH, (st), (cmp)) # define sk_BY_DIR_HASH_dup(st) SKM_sk_dup(BY_DIR_HASH, st) # define sk_BY_DIR_HASH_pop_free(st, free_func) SKM_sk_pop_free(BY_DIR_HASH, (st), (free_func)) # define sk_BY_DIR_HASH_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BY_DIR_HASH, (st), (copy_func), (free_func)) # define sk_BY_DIR_HASH_shift(st) SKM_sk_shift(BY_DIR_HASH, (st)) # define sk_BY_DIR_HASH_pop(st) SKM_sk_pop(BY_DIR_HASH, (st)) # define sk_BY_DIR_HASH_sort(st) SKM_sk_sort(BY_DIR_HASH, (st)) # define sk_BY_DIR_HASH_is_sorted(st) SKM_sk_is_sorted(BY_DIR_HASH, (st)) # define sk_CMS_CertificateChoices_new(cmp) SKM_sk_new(CMS_CertificateChoices, (cmp)) # define sk_CMS_CertificateChoices_new_null() SKM_sk_new_null(CMS_CertificateChoices) # define sk_CMS_CertificateChoices_free(st) SKM_sk_free(CMS_CertificateChoices, (st)) # define sk_CMS_CertificateChoices_num(st) SKM_sk_num(CMS_CertificateChoices, (st)) # define sk_CMS_CertificateChoices_value(st, i) SKM_sk_value(CMS_CertificateChoices, (st), (i)) # define sk_CMS_CertificateChoices_set(st, i, val) SKM_sk_set(CMS_CertificateChoices, (st), (i), (val)) # define sk_CMS_CertificateChoices_zero(st) SKM_sk_zero(CMS_CertificateChoices, (st)) # define sk_CMS_CertificateChoices_push(st, val) SKM_sk_push(CMS_CertificateChoices, (st), (val)) # define sk_CMS_CertificateChoices_unshift(st, val) SKM_sk_unshift(CMS_CertificateChoices, (st), (val)) # define sk_CMS_CertificateChoices_find(st, val) SKM_sk_find(CMS_CertificateChoices, (st), (val)) # define sk_CMS_CertificateChoices_find_ex(st, val) SKM_sk_find_ex(CMS_CertificateChoices, (st), (val)) # define sk_CMS_CertificateChoices_delete(st, i) SKM_sk_delete(CMS_CertificateChoices, (st), (i)) # define sk_CMS_CertificateChoices_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_CertificateChoices, (st), (ptr)) # define sk_CMS_CertificateChoices_insert(st, val, i) SKM_sk_insert(CMS_CertificateChoices, (st), (val), (i)) # define sk_CMS_CertificateChoices_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_CertificateChoices, (st), (cmp)) # define sk_CMS_CertificateChoices_dup(st) SKM_sk_dup(CMS_CertificateChoices, st) # define sk_CMS_CertificateChoices_pop_free(st, free_func) SKM_sk_pop_free(CMS_CertificateChoices, (st), (free_func)) # define sk_CMS_CertificateChoices_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_CertificateChoices, (st), (copy_func), (free_func)) # define sk_CMS_CertificateChoices_shift(st) SKM_sk_shift(CMS_CertificateChoices, (st)) # define sk_CMS_CertificateChoices_pop(st) SKM_sk_pop(CMS_CertificateChoices, (st)) # define sk_CMS_CertificateChoices_sort(st) SKM_sk_sort(CMS_CertificateChoices, (st)) # define sk_CMS_CertificateChoices_is_sorted(st) SKM_sk_is_sorted(CMS_CertificateChoices, (st)) # define sk_CMS_RecipientEncryptedKey_new(cmp) SKM_sk_new(CMS_RecipientEncryptedKey, (cmp)) # define sk_CMS_RecipientEncryptedKey_new_null() SKM_sk_new_null(CMS_RecipientEncryptedKey) # define sk_CMS_RecipientEncryptedKey_free(st) SKM_sk_free(CMS_RecipientEncryptedKey, (st)) # define sk_CMS_RecipientEncryptedKey_num(st) SKM_sk_num(CMS_RecipientEncryptedKey, (st)) # define sk_CMS_RecipientEncryptedKey_value(st, i) SKM_sk_value(CMS_RecipientEncryptedKey, (st), (i)) # define sk_CMS_RecipientEncryptedKey_set(st, i, val) SKM_sk_set(CMS_RecipientEncryptedKey, (st), (i), (val)) # define sk_CMS_RecipientEncryptedKey_zero(st) SKM_sk_zero(CMS_RecipientEncryptedKey, (st)) # define sk_CMS_RecipientEncryptedKey_push(st, val) SKM_sk_push(CMS_RecipientEncryptedKey, (st), (val)) # define sk_CMS_RecipientEncryptedKey_unshift(st, val) SKM_sk_unshift(CMS_RecipientEncryptedKey, (st), (val)) # define sk_CMS_RecipientEncryptedKey_find(st, val) SKM_sk_find(CMS_RecipientEncryptedKey, (st), (val)) # define sk_CMS_RecipientEncryptedKey_find_ex(st, val) SKM_sk_find_ex(CMS_RecipientEncryptedKey, (st), (val)) # define sk_CMS_RecipientEncryptedKey_delete(st, i) SKM_sk_delete(CMS_RecipientEncryptedKey, (st), (i)) # define sk_CMS_RecipientEncryptedKey_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RecipientEncryptedKey, (st), (ptr)) # define sk_CMS_RecipientEncryptedKey_insert(st, val, i) SKM_sk_insert(CMS_RecipientEncryptedKey, (st), (val), (i)) # define sk_CMS_RecipientEncryptedKey_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RecipientEncryptedKey, (st), (cmp)) # define sk_CMS_RecipientEncryptedKey_dup(st) SKM_sk_dup(CMS_RecipientEncryptedKey, st) # define sk_CMS_RecipientEncryptedKey_pop_free(st, free_func) SKM_sk_pop_free(CMS_RecipientEncryptedKey, (st), (free_func)) # define sk_CMS_RecipientEncryptedKey_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RecipientEncryptedKey, (st), (copy_func), (free_func)) # define sk_CMS_RecipientEncryptedKey_shift(st) SKM_sk_shift(CMS_RecipientEncryptedKey, (st)) # define sk_CMS_RecipientEncryptedKey_pop(st) SKM_sk_pop(CMS_RecipientEncryptedKey, (st)) # define sk_CMS_RecipientEncryptedKey_sort(st) SKM_sk_sort(CMS_RecipientEncryptedKey, (st)) # define sk_CMS_RecipientEncryptedKey_is_sorted(st) SKM_sk_is_sorted(CMS_RecipientEncryptedKey, (st)) # define sk_CMS_RecipientInfo_new(cmp) SKM_sk_new(CMS_RecipientInfo, (cmp)) # define sk_CMS_RecipientInfo_new_null() SKM_sk_new_null(CMS_RecipientInfo) # define sk_CMS_RecipientInfo_free(st) SKM_sk_free(CMS_RecipientInfo, (st)) # define sk_CMS_RecipientInfo_num(st) SKM_sk_num(CMS_RecipientInfo, (st)) # define sk_CMS_RecipientInfo_value(st, i) SKM_sk_value(CMS_RecipientInfo, (st), (i)) # define sk_CMS_RecipientInfo_set(st, i, val) SKM_sk_set(CMS_RecipientInfo, (st), (i), (val)) # define sk_CMS_RecipientInfo_zero(st) SKM_sk_zero(CMS_RecipientInfo, (st)) # define sk_CMS_RecipientInfo_push(st, val) SKM_sk_push(CMS_RecipientInfo, (st), (val)) # define sk_CMS_RecipientInfo_unshift(st, val) SKM_sk_unshift(CMS_RecipientInfo, (st), (val)) # define sk_CMS_RecipientInfo_find(st, val) SKM_sk_find(CMS_RecipientInfo, (st), (val)) # define sk_CMS_RecipientInfo_find_ex(st, val) SKM_sk_find_ex(CMS_RecipientInfo, (st), (val)) # define sk_CMS_RecipientInfo_delete(st, i) SKM_sk_delete(CMS_RecipientInfo, (st), (i)) # define sk_CMS_RecipientInfo_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RecipientInfo, (st), (ptr)) # define sk_CMS_RecipientInfo_insert(st, val, i) SKM_sk_insert(CMS_RecipientInfo, (st), (val), (i)) # define sk_CMS_RecipientInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RecipientInfo, (st), (cmp)) # define sk_CMS_RecipientInfo_dup(st) SKM_sk_dup(CMS_RecipientInfo, st) # define sk_CMS_RecipientInfo_pop_free(st, free_func) SKM_sk_pop_free(CMS_RecipientInfo, (st), (free_func)) # define sk_CMS_RecipientInfo_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RecipientInfo, (st), (copy_func), (free_func)) # define sk_CMS_RecipientInfo_shift(st) SKM_sk_shift(CMS_RecipientInfo, (st)) # define sk_CMS_RecipientInfo_pop(st) SKM_sk_pop(CMS_RecipientInfo, (st)) # define sk_CMS_RecipientInfo_sort(st) SKM_sk_sort(CMS_RecipientInfo, (st)) # define sk_CMS_RecipientInfo_is_sorted(st) SKM_sk_is_sorted(CMS_RecipientInfo, (st)) # define sk_CMS_RevocationInfoChoice_new(cmp) SKM_sk_new(CMS_RevocationInfoChoice, (cmp)) # define sk_CMS_RevocationInfoChoice_new_null() SKM_sk_new_null(CMS_RevocationInfoChoice) # define sk_CMS_RevocationInfoChoice_free(st) SKM_sk_free(CMS_RevocationInfoChoice, (st)) # define sk_CMS_RevocationInfoChoice_num(st) SKM_sk_num(CMS_RevocationInfoChoice, (st)) # define sk_CMS_RevocationInfoChoice_value(st, i) SKM_sk_value(CMS_RevocationInfoChoice, (st), (i)) # define sk_CMS_RevocationInfoChoice_set(st, i, val) SKM_sk_set(CMS_RevocationInfoChoice, (st), (i), (val)) # define sk_CMS_RevocationInfoChoice_zero(st) SKM_sk_zero(CMS_RevocationInfoChoice, (st)) # define sk_CMS_RevocationInfoChoice_push(st, val) SKM_sk_push(CMS_RevocationInfoChoice, (st), (val)) # define sk_CMS_RevocationInfoChoice_unshift(st, val) SKM_sk_unshift(CMS_RevocationInfoChoice, (st), (val)) # define sk_CMS_RevocationInfoChoice_find(st, val) SKM_sk_find(CMS_RevocationInfoChoice, (st), (val)) # define sk_CMS_RevocationInfoChoice_find_ex(st, val) SKM_sk_find_ex(CMS_RevocationInfoChoice, (st), (val)) # define sk_CMS_RevocationInfoChoice_delete(st, i) SKM_sk_delete(CMS_RevocationInfoChoice, (st), (i)) # define sk_CMS_RevocationInfoChoice_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RevocationInfoChoice, (st), (ptr)) # define sk_CMS_RevocationInfoChoice_insert(st, val, i) SKM_sk_insert(CMS_RevocationInfoChoice, (st), (val), (i)) # define sk_CMS_RevocationInfoChoice_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RevocationInfoChoice, (st), (cmp)) # define sk_CMS_RevocationInfoChoice_dup(st) SKM_sk_dup(CMS_RevocationInfoChoice, st) # define sk_CMS_RevocationInfoChoice_pop_free(st, free_func) SKM_sk_pop_free(CMS_RevocationInfoChoice, (st), (free_func)) # define sk_CMS_RevocationInfoChoice_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RevocationInfoChoice, (st), (copy_func), (free_func)) # define sk_CMS_RevocationInfoChoice_shift(st) SKM_sk_shift(CMS_RevocationInfoChoice, (st)) # define sk_CMS_RevocationInfoChoice_pop(st) SKM_sk_pop(CMS_RevocationInfoChoice, (st)) # define sk_CMS_RevocationInfoChoice_sort(st) SKM_sk_sort(CMS_RevocationInfoChoice, (st)) # define sk_CMS_RevocationInfoChoice_is_sorted(st) SKM_sk_is_sorted(CMS_RevocationInfoChoice, (st)) # define sk_CMS_SignerInfo_new(cmp) SKM_sk_new(CMS_SignerInfo, (cmp)) # define sk_CMS_SignerInfo_new_null() SKM_sk_new_null(CMS_SignerInfo) # define sk_CMS_SignerInfo_free(st) SKM_sk_free(CMS_SignerInfo, (st)) # define sk_CMS_SignerInfo_num(st) SKM_sk_num(CMS_SignerInfo, (st)) # define sk_CMS_SignerInfo_value(st, i) SKM_sk_value(CMS_SignerInfo, (st), (i)) # define sk_CMS_SignerInfo_set(st, i, val) SKM_sk_set(CMS_SignerInfo, (st), (i), (val)) # define sk_CMS_SignerInfo_zero(st) SKM_sk_zero(CMS_SignerInfo, (st)) # define sk_CMS_SignerInfo_push(st, val) SKM_sk_push(CMS_SignerInfo, (st), (val)) # define sk_CMS_SignerInfo_unshift(st, val) SKM_sk_unshift(CMS_SignerInfo, (st), (val)) # define sk_CMS_SignerInfo_find(st, val) SKM_sk_find(CMS_SignerInfo, (st), (val)) # define sk_CMS_SignerInfo_find_ex(st, val) SKM_sk_find_ex(CMS_SignerInfo, (st), (val)) # define sk_CMS_SignerInfo_delete(st, i) SKM_sk_delete(CMS_SignerInfo, (st), (i)) # define sk_CMS_SignerInfo_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_SignerInfo, (st), (ptr)) # define sk_CMS_SignerInfo_insert(st, val, i) SKM_sk_insert(CMS_SignerInfo, (st), (val), (i)) # define sk_CMS_SignerInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_SignerInfo, (st), (cmp)) # define sk_CMS_SignerInfo_dup(st) SKM_sk_dup(CMS_SignerInfo, st) # define sk_CMS_SignerInfo_pop_free(st, free_func) SKM_sk_pop_free(CMS_SignerInfo, (st), (free_func)) # define sk_CMS_SignerInfo_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_SignerInfo, (st), (copy_func), (free_func)) # define sk_CMS_SignerInfo_shift(st) SKM_sk_shift(CMS_SignerInfo, (st)) # define sk_CMS_SignerInfo_pop(st) SKM_sk_pop(CMS_SignerInfo, (st)) # define sk_CMS_SignerInfo_sort(st) SKM_sk_sort(CMS_SignerInfo, (st)) # define sk_CMS_SignerInfo_is_sorted(st) SKM_sk_is_sorted(CMS_SignerInfo, (st)) # define sk_CONF_IMODULE_new(cmp) SKM_sk_new(CONF_IMODULE, (cmp)) # define sk_CONF_IMODULE_new_null() SKM_sk_new_null(CONF_IMODULE) # define sk_CONF_IMODULE_free(st) SKM_sk_free(CONF_IMODULE, (st)) # define sk_CONF_IMODULE_num(st) SKM_sk_num(CONF_IMODULE, (st)) # define sk_CONF_IMODULE_value(st, i) SKM_sk_value(CONF_IMODULE, (st), (i)) # define sk_CONF_IMODULE_set(st, i, val) SKM_sk_set(CONF_IMODULE, (st), (i), (val)) # define sk_CONF_IMODULE_zero(st) SKM_sk_zero(CONF_IMODULE, (st)) # define sk_CONF_IMODULE_push(st, val) SKM_sk_push(CONF_IMODULE, (st), (val)) # define sk_CONF_IMODULE_unshift(st, val) SKM_sk_unshift(CONF_IMODULE, (st), (val)) # define sk_CONF_IMODULE_find(st, val) SKM_sk_find(CONF_IMODULE, (st), (val)) # define sk_CONF_IMODULE_find_ex(st, val) SKM_sk_find_ex(CONF_IMODULE, (st), (val)) # define sk_CONF_IMODULE_delete(st, i) SKM_sk_delete(CONF_IMODULE, (st), (i)) # define sk_CONF_IMODULE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_IMODULE, (st), (ptr)) # define sk_CONF_IMODULE_insert(st, val, i) SKM_sk_insert(CONF_IMODULE, (st), (val), (i)) # define sk_CONF_IMODULE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_IMODULE, (st), (cmp)) # define sk_CONF_IMODULE_dup(st) SKM_sk_dup(CONF_IMODULE, st) # define sk_CONF_IMODULE_pop_free(st, free_func) SKM_sk_pop_free(CONF_IMODULE, (st), (free_func)) # define sk_CONF_IMODULE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_IMODULE, (st), (copy_func), (free_func)) # define sk_CONF_IMODULE_shift(st) SKM_sk_shift(CONF_IMODULE, (st)) # define sk_CONF_IMODULE_pop(st) SKM_sk_pop(CONF_IMODULE, (st)) # define sk_CONF_IMODULE_sort(st) SKM_sk_sort(CONF_IMODULE, (st)) # define sk_CONF_IMODULE_is_sorted(st) SKM_sk_is_sorted(CONF_IMODULE, (st)) # define sk_CONF_MODULE_new(cmp) SKM_sk_new(CONF_MODULE, (cmp)) # define sk_CONF_MODULE_new_null() SKM_sk_new_null(CONF_MODULE) # define sk_CONF_MODULE_free(st) SKM_sk_free(CONF_MODULE, (st)) # define sk_CONF_MODULE_num(st) SKM_sk_num(CONF_MODULE, (st)) # define sk_CONF_MODULE_value(st, i) SKM_sk_value(CONF_MODULE, (st), (i)) # define sk_CONF_MODULE_set(st, i, val) SKM_sk_set(CONF_MODULE, (st), (i), (val)) # define sk_CONF_MODULE_zero(st) SKM_sk_zero(CONF_MODULE, (st)) # define sk_CONF_MODULE_push(st, val) SKM_sk_push(CONF_MODULE, (st), (val)) # define sk_CONF_MODULE_unshift(st, val) SKM_sk_unshift(CONF_MODULE, (st), (val)) # define sk_CONF_MODULE_find(st, val) SKM_sk_find(CONF_MODULE, (st), (val)) # define sk_CONF_MODULE_find_ex(st, val) SKM_sk_find_ex(CONF_MODULE, (st), (val)) # define sk_CONF_MODULE_delete(st, i) SKM_sk_delete(CONF_MODULE, (st), (i)) # define sk_CONF_MODULE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_MODULE, (st), (ptr)) # define sk_CONF_MODULE_insert(st, val, i) SKM_sk_insert(CONF_MODULE, (st), (val), (i)) # define sk_CONF_MODULE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_MODULE, (st), (cmp)) # define sk_CONF_MODULE_dup(st) SKM_sk_dup(CONF_MODULE, st) # define sk_CONF_MODULE_pop_free(st, free_func) SKM_sk_pop_free(CONF_MODULE, (st), (free_func)) # define sk_CONF_MODULE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_MODULE, (st), (copy_func), (free_func)) # define sk_CONF_MODULE_shift(st) SKM_sk_shift(CONF_MODULE, (st)) # define sk_CONF_MODULE_pop(st) SKM_sk_pop(CONF_MODULE, (st)) # define sk_CONF_MODULE_sort(st) SKM_sk_sort(CONF_MODULE, (st)) # define sk_CONF_MODULE_is_sorted(st) SKM_sk_is_sorted(CONF_MODULE, (st)) # define sk_CONF_VALUE_new(cmp) SKM_sk_new(CONF_VALUE, (cmp)) # define sk_CONF_VALUE_new_null() SKM_sk_new_null(CONF_VALUE) # define sk_CONF_VALUE_free(st) SKM_sk_free(CONF_VALUE, (st)) # define sk_CONF_VALUE_num(st) SKM_sk_num(CONF_VALUE, (st)) # define sk_CONF_VALUE_value(st, i) SKM_sk_value(CONF_VALUE, (st), (i)) # define sk_CONF_VALUE_set(st, i, val) SKM_sk_set(CONF_VALUE, (st), (i), (val)) # define sk_CONF_VALUE_zero(st) SKM_sk_zero(CONF_VALUE, (st)) # define sk_CONF_VALUE_push(st, val) SKM_sk_push(CONF_VALUE, (st), (val)) # define sk_CONF_VALUE_unshift(st, val) SKM_sk_unshift(CONF_VALUE, (st), (val)) # define sk_CONF_VALUE_find(st, val) SKM_sk_find(CONF_VALUE, (st), (val)) # define sk_CONF_VALUE_find_ex(st, val) SKM_sk_find_ex(CONF_VALUE, (st), (val)) # define sk_CONF_VALUE_delete(st, i) SKM_sk_delete(CONF_VALUE, (st), (i)) # define sk_CONF_VALUE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_VALUE, (st), (ptr)) # define sk_CONF_VALUE_insert(st, val, i) SKM_sk_insert(CONF_VALUE, (st), (val), (i)) # define sk_CONF_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_VALUE, (st), (cmp)) # define sk_CONF_VALUE_dup(st) SKM_sk_dup(CONF_VALUE, st) # define sk_CONF_VALUE_pop_free(st, free_func) SKM_sk_pop_free(CONF_VALUE, (st), (free_func)) # define sk_CONF_VALUE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_VALUE, (st), (copy_func), (free_func)) # define sk_CONF_VALUE_shift(st) SKM_sk_shift(CONF_VALUE, (st)) # define sk_CONF_VALUE_pop(st) SKM_sk_pop(CONF_VALUE, (st)) # define sk_CONF_VALUE_sort(st) SKM_sk_sort(CONF_VALUE, (st)) # define sk_CONF_VALUE_is_sorted(st) SKM_sk_is_sorted(CONF_VALUE, (st)) # define sk_CRYPTO_EX_DATA_FUNCS_new(cmp) SKM_sk_new(CRYPTO_EX_DATA_FUNCS, (cmp)) # define sk_CRYPTO_EX_DATA_FUNCS_new_null() SKM_sk_new_null(CRYPTO_EX_DATA_FUNCS) # define sk_CRYPTO_EX_DATA_FUNCS_free(st) SKM_sk_free(CRYPTO_EX_DATA_FUNCS, (st)) # define sk_CRYPTO_EX_DATA_FUNCS_num(st) SKM_sk_num(CRYPTO_EX_DATA_FUNCS, (st)) # define sk_CRYPTO_EX_DATA_FUNCS_value(st, i) SKM_sk_value(CRYPTO_EX_DATA_FUNCS, (st), (i)) # define sk_CRYPTO_EX_DATA_FUNCS_set(st, i, val) SKM_sk_set(CRYPTO_EX_DATA_FUNCS, (st), (i), (val)) # define sk_CRYPTO_EX_DATA_FUNCS_zero(st) SKM_sk_zero(CRYPTO_EX_DATA_FUNCS, (st)) # define sk_CRYPTO_EX_DATA_FUNCS_push(st, val) SKM_sk_push(CRYPTO_EX_DATA_FUNCS, (st), (val)) # define sk_CRYPTO_EX_DATA_FUNCS_unshift(st, val) SKM_sk_unshift(CRYPTO_EX_DATA_FUNCS, (st), (val)) # define sk_CRYPTO_EX_DATA_FUNCS_find(st, val) SKM_sk_find(CRYPTO_EX_DATA_FUNCS, (st), (val)) # define sk_CRYPTO_EX_DATA_FUNCS_find_ex(st, val) SKM_sk_find_ex(CRYPTO_EX_DATA_FUNCS, (st), (val)) # define sk_CRYPTO_EX_DATA_FUNCS_delete(st, i) SKM_sk_delete(CRYPTO_EX_DATA_FUNCS, (st), (i)) # define sk_CRYPTO_EX_DATA_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_EX_DATA_FUNCS, (st), (ptr)) # define sk_CRYPTO_EX_DATA_FUNCS_insert(st, val, i) SKM_sk_insert(CRYPTO_EX_DATA_FUNCS, (st), (val), (i)) # define sk_CRYPTO_EX_DATA_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_EX_DATA_FUNCS, (st), (cmp)) # define sk_CRYPTO_EX_DATA_FUNCS_dup(st) SKM_sk_dup(CRYPTO_EX_DATA_FUNCS, st) # define sk_CRYPTO_EX_DATA_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_EX_DATA_FUNCS, (st), (free_func)) # define sk_CRYPTO_EX_DATA_FUNCS_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CRYPTO_EX_DATA_FUNCS, (st), (copy_func), (free_func)) # define sk_CRYPTO_EX_DATA_FUNCS_shift(st) SKM_sk_shift(CRYPTO_EX_DATA_FUNCS, (st)) # define sk_CRYPTO_EX_DATA_FUNCS_pop(st) SKM_sk_pop(CRYPTO_EX_DATA_FUNCS, (st)) # define sk_CRYPTO_EX_DATA_FUNCS_sort(st) SKM_sk_sort(CRYPTO_EX_DATA_FUNCS, (st)) # define sk_CRYPTO_EX_DATA_FUNCS_is_sorted(st) SKM_sk_is_sorted(CRYPTO_EX_DATA_FUNCS, (st)) # define sk_CRYPTO_dynlock_new(cmp) SKM_sk_new(CRYPTO_dynlock, (cmp)) # define sk_CRYPTO_dynlock_new_null() SKM_sk_new_null(CRYPTO_dynlock) # define sk_CRYPTO_dynlock_free(st) SKM_sk_free(CRYPTO_dynlock, (st)) # define sk_CRYPTO_dynlock_num(st) SKM_sk_num(CRYPTO_dynlock, (st)) # define sk_CRYPTO_dynlock_value(st, i) SKM_sk_value(CRYPTO_dynlock, (st), (i)) # define sk_CRYPTO_dynlock_set(st, i, val) SKM_sk_set(CRYPTO_dynlock, (st), (i), (val)) # define sk_CRYPTO_dynlock_zero(st) SKM_sk_zero(CRYPTO_dynlock, (st)) # define sk_CRYPTO_dynlock_push(st, val) SKM_sk_push(CRYPTO_dynlock, (st), (val)) # define sk_CRYPTO_dynlock_unshift(st, val) SKM_sk_unshift(CRYPTO_dynlock, (st), (val)) # define sk_CRYPTO_dynlock_find(st, val) SKM_sk_find(CRYPTO_dynlock, (st), (val)) # define sk_CRYPTO_dynlock_find_ex(st, val) SKM_sk_find_ex(CRYPTO_dynlock, (st), (val)) # define sk_CRYPTO_dynlock_delete(st, i) SKM_sk_delete(CRYPTO_dynlock, (st), (i)) # define sk_CRYPTO_dynlock_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_dynlock, (st), (ptr)) # define sk_CRYPTO_dynlock_insert(st, val, i) SKM_sk_insert(CRYPTO_dynlock, (st), (val), (i)) # define sk_CRYPTO_dynlock_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_dynlock, (st), (cmp)) # define sk_CRYPTO_dynlock_dup(st) SKM_sk_dup(CRYPTO_dynlock, st) # define sk_CRYPTO_dynlock_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_dynlock, (st), (free_func)) # define sk_CRYPTO_dynlock_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CRYPTO_dynlock, (st), (copy_func), (free_func)) # define sk_CRYPTO_dynlock_shift(st) SKM_sk_shift(CRYPTO_dynlock, (st)) # define sk_CRYPTO_dynlock_pop(st) SKM_sk_pop(CRYPTO_dynlock, (st)) # define sk_CRYPTO_dynlock_sort(st) SKM_sk_sort(CRYPTO_dynlock, (st)) # define sk_CRYPTO_dynlock_is_sorted(st) SKM_sk_is_sorted(CRYPTO_dynlock, (st)) # define sk_DIST_POINT_new(cmp) SKM_sk_new(DIST_POINT, (cmp)) # define sk_DIST_POINT_new_null() SKM_sk_new_null(DIST_POINT) # define sk_DIST_POINT_free(st) SKM_sk_free(DIST_POINT, (st)) # define sk_DIST_POINT_num(st) SKM_sk_num(DIST_POINT, (st)) # define sk_DIST_POINT_value(st, i) SKM_sk_value(DIST_POINT, (st), (i)) # define sk_DIST_POINT_set(st, i, val) SKM_sk_set(DIST_POINT, (st), (i), (val)) # define sk_DIST_POINT_zero(st) SKM_sk_zero(DIST_POINT, (st)) # define sk_DIST_POINT_push(st, val) SKM_sk_push(DIST_POINT, (st), (val)) # define sk_DIST_POINT_unshift(st, val) SKM_sk_unshift(DIST_POINT, (st), (val)) # define sk_DIST_POINT_find(st, val) SKM_sk_find(DIST_POINT, (st), (val)) # define sk_DIST_POINT_find_ex(st, val) SKM_sk_find_ex(DIST_POINT, (st), (val)) # define sk_DIST_POINT_delete(st, i) SKM_sk_delete(DIST_POINT, (st), (i)) # define sk_DIST_POINT_delete_ptr(st, ptr) SKM_sk_delete_ptr(DIST_POINT, (st), (ptr)) # define sk_DIST_POINT_insert(st, val, i) SKM_sk_insert(DIST_POINT, (st), (val), (i)) # define sk_DIST_POINT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(DIST_POINT, (st), (cmp)) # define sk_DIST_POINT_dup(st) SKM_sk_dup(DIST_POINT, st) # define sk_DIST_POINT_pop_free(st, free_func) SKM_sk_pop_free(DIST_POINT, (st), (free_func)) # define sk_DIST_POINT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(DIST_POINT, (st), (copy_func), (free_func)) # define sk_DIST_POINT_shift(st) SKM_sk_shift(DIST_POINT, (st)) # define sk_DIST_POINT_pop(st) SKM_sk_pop(DIST_POINT, (st)) # define sk_DIST_POINT_sort(st) SKM_sk_sort(DIST_POINT, (st)) # define sk_DIST_POINT_is_sorted(st) SKM_sk_is_sorted(DIST_POINT, (st)) # define sk_ENGINE_new(cmp) SKM_sk_new(ENGINE, (cmp)) # define sk_ENGINE_new_null() SKM_sk_new_null(ENGINE) # define sk_ENGINE_free(st) SKM_sk_free(ENGINE, (st)) # define sk_ENGINE_num(st) SKM_sk_num(ENGINE, (st)) # define sk_ENGINE_value(st, i) SKM_sk_value(ENGINE, (st), (i)) # define sk_ENGINE_set(st, i, val) SKM_sk_set(ENGINE, (st), (i), (val)) # define sk_ENGINE_zero(st) SKM_sk_zero(ENGINE, (st)) # define sk_ENGINE_push(st, val) SKM_sk_push(ENGINE, (st), (val)) # define sk_ENGINE_unshift(st, val) SKM_sk_unshift(ENGINE, (st), (val)) # define sk_ENGINE_find(st, val) SKM_sk_find(ENGINE, (st), (val)) # define sk_ENGINE_find_ex(st, val) SKM_sk_find_ex(ENGINE, (st), (val)) # define sk_ENGINE_delete(st, i) SKM_sk_delete(ENGINE, (st), (i)) # define sk_ENGINE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ENGINE, (st), (ptr)) # define sk_ENGINE_insert(st, val, i) SKM_sk_insert(ENGINE, (st), (val), (i)) # define sk_ENGINE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ENGINE, (st), (cmp)) # define sk_ENGINE_dup(st) SKM_sk_dup(ENGINE, st) # define sk_ENGINE_pop_free(st, free_func) SKM_sk_pop_free(ENGINE, (st), (free_func)) # define sk_ENGINE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ENGINE, (st), (copy_func), (free_func)) # define sk_ENGINE_shift(st) SKM_sk_shift(ENGINE, (st)) # define sk_ENGINE_pop(st) SKM_sk_pop(ENGINE, (st)) # define sk_ENGINE_sort(st) SKM_sk_sort(ENGINE, (st)) # define sk_ENGINE_is_sorted(st) SKM_sk_is_sorted(ENGINE, (st)) # define sk_ENGINE_CLEANUP_ITEM_new(cmp) SKM_sk_new(ENGINE_CLEANUP_ITEM, (cmp)) # define sk_ENGINE_CLEANUP_ITEM_new_null() SKM_sk_new_null(ENGINE_CLEANUP_ITEM) # define sk_ENGINE_CLEANUP_ITEM_free(st) SKM_sk_free(ENGINE_CLEANUP_ITEM, (st)) # define sk_ENGINE_CLEANUP_ITEM_num(st) SKM_sk_num(ENGINE_CLEANUP_ITEM, (st)) # define sk_ENGINE_CLEANUP_ITEM_value(st, i) SKM_sk_value(ENGINE_CLEANUP_ITEM, (st), (i)) # define sk_ENGINE_CLEANUP_ITEM_set(st, i, val) SKM_sk_set(ENGINE_CLEANUP_ITEM, (st), (i), (val)) # define sk_ENGINE_CLEANUP_ITEM_zero(st) SKM_sk_zero(ENGINE_CLEANUP_ITEM, (st)) # define sk_ENGINE_CLEANUP_ITEM_push(st, val) SKM_sk_push(ENGINE_CLEANUP_ITEM, (st), (val)) # define sk_ENGINE_CLEANUP_ITEM_unshift(st, val) SKM_sk_unshift(ENGINE_CLEANUP_ITEM, (st), (val)) # define sk_ENGINE_CLEANUP_ITEM_find(st, val) SKM_sk_find(ENGINE_CLEANUP_ITEM, (st), (val)) # define sk_ENGINE_CLEANUP_ITEM_find_ex(st, val) SKM_sk_find_ex(ENGINE_CLEANUP_ITEM, (st), (val)) # define sk_ENGINE_CLEANUP_ITEM_delete(st, i) SKM_sk_delete(ENGINE_CLEANUP_ITEM, (st), (i)) # define sk_ENGINE_CLEANUP_ITEM_delete_ptr(st, ptr) SKM_sk_delete_ptr(ENGINE_CLEANUP_ITEM, (st), (ptr)) # define sk_ENGINE_CLEANUP_ITEM_insert(st, val, i) SKM_sk_insert(ENGINE_CLEANUP_ITEM, (st), (val), (i)) # define sk_ENGINE_CLEANUP_ITEM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ENGINE_CLEANUP_ITEM, (st), (cmp)) # define sk_ENGINE_CLEANUP_ITEM_dup(st) SKM_sk_dup(ENGINE_CLEANUP_ITEM, st) # define sk_ENGINE_CLEANUP_ITEM_pop_free(st, free_func) SKM_sk_pop_free(ENGINE_CLEANUP_ITEM, (st), (free_func)) # define sk_ENGINE_CLEANUP_ITEM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ENGINE_CLEANUP_ITEM, (st), (copy_func), (free_func)) # define sk_ENGINE_CLEANUP_ITEM_shift(st) SKM_sk_shift(ENGINE_CLEANUP_ITEM, (st)) # define sk_ENGINE_CLEANUP_ITEM_pop(st) SKM_sk_pop(ENGINE_CLEANUP_ITEM, (st)) # define sk_ENGINE_CLEANUP_ITEM_sort(st) SKM_sk_sort(ENGINE_CLEANUP_ITEM, (st)) # define sk_ENGINE_CLEANUP_ITEM_is_sorted(st) SKM_sk_is_sorted(ENGINE_CLEANUP_ITEM, (st)) # define sk_ESS_CERT_ID_new(cmp) SKM_sk_new(ESS_CERT_ID, (cmp)) # define sk_ESS_CERT_ID_new_null() SKM_sk_new_null(ESS_CERT_ID) # define sk_ESS_CERT_ID_free(st) SKM_sk_free(ESS_CERT_ID, (st)) # define sk_ESS_CERT_ID_num(st) SKM_sk_num(ESS_CERT_ID, (st)) # define sk_ESS_CERT_ID_value(st, i) SKM_sk_value(ESS_CERT_ID, (st), (i)) # define sk_ESS_CERT_ID_set(st, i, val) SKM_sk_set(ESS_CERT_ID, (st), (i), (val)) # define sk_ESS_CERT_ID_zero(st) SKM_sk_zero(ESS_CERT_ID, (st)) # define sk_ESS_CERT_ID_push(st, val) SKM_sk_push(ESS_CERT_ID, (st), (val)) # define sk_ESS_CERT_ID_unshift(st, val) SKM_sk_unshift(ESS_CERT_ID, (st), (val)) # define sk_ESS_CERT_ID_find(st, val) SKM_sk_find(ESS_CERT_ID, (st), (val)) # define sk_ESS_CERT_ID_find_ex(st, val) SKM_sk_find_ex(ESS_CERT_ID, (st), (val)) # define sk_ESS_CERT_ID_delete(st, i) SKM_sk_delete(ESS_CERT_ID, (st), (i)) # define sk_ESS_CERT_ID_delete_ptr(st, ptr) SKM_sk_delete_ptr(ESS_CERT_ID, (st), (ptr)) # define sk_ESS_CERT_ID_insert(st, val, i) SKM_sk_insert(ESS_CERT_ID, (st), (val), (i)) # define sk_ESS_CERT_ID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ESS_CERT_ID, (st), (cmp)) # define sk_ESS_CERT_ID_dup(st) SKM_sk_dup(ESS_CERT_ID, st) # define sk_ESS_CERT_ID_pop_free(st, free_func) SKM_sk_pop_free(ESS_CERT_ID, (st), (free_func)) # define sk_ESS_CERT_ID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ESS_CERT_ID, (st), (copy_func), (free_func)) # define sk_ESS_CERT_ID_shift(st) SKM_sk_shift(ESS_CERT_ID, (st)) # define sk_ESS_CERT_ID_pop(st) SKM_sk_pop(ESS_CERT_ID, (st)) # define sk_ESS_CERT_ID_sort(st) SKM_sk_sort(ESS_CERT_ID, (st)) # define sk_ESS_CERT_ID_is_sorted(st) SKM_sk_is_sorted(ESS_CERT_ID, (st)) # define sk_EVP_MD_new(cmp) SKM_sk_new(EVP_MD, (cmp)) # define sk_EVP_MD_new_null() SKM_sk_new_null(EVP_MD) # define sk_EVP_MD_free(st) SKM_sk_free(EVP_MD, (st)) # define sk_EVP_MD_num(st) SKM_sk_num(EVP_MD, (st)) # define sk_EVP_MD_value(st, i) SKM_sk_value(EVP_MD, (st), (i)) # define sk_EVP_MD_set(st, i, val) SKM_sk_set(EVP_MD, (st), (i), (val)) # define sk_EVP_MD_zero(st) SKM_sk_zero(EVP_MD, (st)) # define sk_EVP_MD_push(st, val) SKM_sk_push(EVP_MD, (st), (val)) # define sk_EVP_MD_unshift(st, val) SKM_sk_unshift(EVP_MD, (st), (val)) # define sk_EVP_MD_find(st, val) SKM_sk_find(EVP_MD, (st), (val)) # define sk_EVP_MD_find_ex(st, val) SKM_sk_find_ex(EVP_MD, (st), (val)) # define sk_EVP_MD_delete(st, i) SKM_sk_delete(EVP_MD, (st), (i)) # define sk_EVP_MD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_MD, (st), (ptr)) # define sk_EVP_MD_insert(st, val, i) SKM_sk_insert(EVP_MD, (st), (val), (i)) # define sk_EVP_MD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_MD, (st), (cmp)) # define sk_EVP_MD_dup(st) SKM_sk_dup(EVP_MD, st) # define sk_EVP_MD_pop_free(st, free_func) SKM_sk_pop_free(EVP_MD, (st), (free_func)) # define sk_EVP_MD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_MD, (st), (copy_func), (free_func)) # define sk_EVP_MD_shift(st) SKM_sk_shift(EVP_MD, (st)) # define sk_EVP_MD_pop(st) SKM_sk_pop(EVP_MD, (st)) # define sk_EVP_MD_sort(st) SKM_sk_sort(EVP_MD, (st)) # define sk_EVP_MD_is_sorted(st) SKM_sk_is_sorted(EVP_MD, (st)) # define sk_EVP_PBE_CTL_new(cmp) SKM_sk_new(EVP_PBE_CTL, (cmp)) # define sk_EVP_PBE_CTL_new_null() SKM_sk_new_null(EVP_PBE_CTL) # define sk_EVP_PBE_CTL_free(st) SKM_sk_free(EVP_PBE_CTL, (st)) # define sk_EVP_PBE_CTL_num(st) SKM_sk_num(EVP_PBE_CTL, (st)) # define sk_EVP_PBE_CTL_value(st, i) SKM_sk_value(EVP_PBE_CTL, (st), (i)) # define sk_EVP_PBE_CTL_set(st, i, val) SKM_sk_set(EVP_PBE_CTL, (st), (i), (val)) # define sk_EVP_PBE_CTL_zero(st) SKM_sk_zero(EVP_PBE_CTL, (st)) # define sk_EVP_PBE_CTL_push(st, val) SKM_sk_push(EVP_PBE_CTL, (st), (val)) # define sk_EVP_PBE_CTL_unshift(st, val) SKM_sk_unshift(EVP_PBE_CTL, (st), (val)) # define sk_EVP_PBE_CTL_find(st, val) SKM_sk_find(EVP_PBE_CTL, (st), (val)) # define sk_EVP_PBE_CTL_find_ex(st, val) SKM_sk_find_ex(EVP_PBE_CTL, (st), (val)) # define sk_EVP_PBE_CTL_delete(st, i) SKM_sk_delete(EVP_PBE_CTL, (st), (i)) # define sk_EVP_PBE_CTL_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PBE_CTL, (st), (ptr)) # define sk_EVP_PBE_CTL_insert(st, val, i) SKM_sk_insert(EVP_PBE_CTL, (st), (val), (i)) # define sk_EVP_PBE_CTL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PBE_CTL, (st), (cmp)) # define sk_EVP_PBE_CTL_dup(st) SKM_sk_dup(EVP_PBE_CTL, st) # define sk_EVP_PBE_CTL_pop_free(st, free_func) SKM_sk_pop_free(EVP_PBE_CTL, (st), (free_func)) # define sk_EVP_PBE_CTL_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PBE_CTL, (st), (copy_func), (free_func)) # define sk_EVP_PBE_CTL_shift(st) SKM_sk_shift(EVP_PBE_CTL, (st)) # define sk_EVP_PBE_CTL_pop(st) SKM_sk_pop(EVP_PBE_CTL, (st)) # define sk_EVP_PBE_CTL_sort(st) SKM_sk_sort(EVP_PBE_CTL, (st)) # define sk_EVP_PBE_CTL_is_sorted(st) SKM_sk_is_sorted(EVP_PBE_CTL, (st)) # define sk_EVP_PKEY_ASN1_METHOD_new(cmp) SKM_sk_new(EVP_PKEY_ASN1_METHOD, (cmp)) # define sk_EVP_PKEY_ASN1_METHOD_new_null() SKM_sk_new_null(EVP_PKEY_ASN1_METHOD) # define sk_EVP_PKEY_ASN1_METHOD_free(st) SKM_sk_free(EVP_PKEY_ASN1_METHOD, (st)) # define sk_EVP_PKEY_ASN1_METHOD_num(st) SKM_sk_num(EVP_PKEY_ASN1_METHOD, (st)) # define sk_EVP_PKEY_ASN1_METHOD_value(st, i) SKM_sk_value(EVP_PKEY_ASN1_METHOD, (st), (i)) # define sk_EVP_PKEY_ASN1_METHOD_set(st, i, val) SKM_sk_set(EVP_PKEY_ASN1_METHOD, (st), (i), (val)) # define sk_EVP_PKEY_ASN1_METHOD_zero(st) SKM_sk_zero(EVP_PKEY_ASN1_METHOD, (st)) # define sk_EVP_PKEY_ASN1_METHOD_push(st, val) SKM_sk_push(EVP_PKEY_ASN1_METHOD, (st), (val)) # define sk_EVP_PKEY_ASN1_METHOD_unshift(st, val) SKM_sk_unshift(EVP_PKEY_ASN1_METHOD, (st), (val)) # define sk_EVP_PKEY_ASN1_METHOD_find(st, val) SKM_sk_find(EVP_PKEY_ASN1_METHOD, (st), (val)) # define sk_EVP_PKEY_ASN1_METHOD_find_ex(st, val) SKM_sk_find_ex(EVP_PKEY_ASN1_METHOD, (st), (val)) # define sk_EVP_PKEY_ASN1_METHOD_delete(st, i) SKM_sk_delete(EVP_PKEY_ASN1_METHOD, (st), (i)) # define sk_EVP_PKEY_ASN1_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PKEY_ASN1_METHOD, (st), (ptr)) # define sk_EVP_PKEY_ASN1_METHOD_insert(st, val, i) SKM_sk_insert(EVP_PKEY_ASN1_METHOD, (st), (val), (i)) # define sk_EVP_PKEY_ASN1_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PKEY_ASN1_METHOD, (st), (cmp)) # define sk_EVP_PKEY_ASN1_METHOD_dup(st) SKM_sk_dup(EVP_PKEY_ASN1_METHOD, st) # define sk_EVP_PKEY_ASN1_METHOD_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY_ASN1_METHOD, (st), (free_func)) # define sk_EVP_PKEY_ASN1_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PKEY_ASN1_METHOD, (st), (copy_func), (free_func)) # define sk_EVP_PKEY_ASN1_METHOD_shift(st) SKM_sk_shift(EVP_PKEY_ASN1_METHOD, (st)) # define sk_EVP_PKEY_ASN1_METHOD_pop(st) SKM_sk_pop(EVP_PKEY_ASN1_METHOD, (st)) # define sk_EVP_PKEY_ASN1_METHOD_sort(st) SKM_sk_sort(EVP_PKEY_ASN1_METHOD, (st)) # define sk_EVP_PKEY_ASN1_METHOD_is_sorted(st) SKM_sk_is_sorted(EVP_PKEY_ASN1_METHOD, (st)) # define sk_EVP_PKEY_METHOD_new(cmp) SKM_sk_new(EVP_PKEY_METHOD, (cmp)) # define sk_EVP_PKEY_METHOD_new_null() SKM_sk_new_null(EVP_PKEY_METHOD) # define sk_EVP_PKEY_METHOD_free(st) SKM_sk_free(EVP_PKEY_METHOD, (st)) # define sk_EVP_PKEY_METHOD_num(st) SKM_sk_num(EVP_PKEY_METHOD, (st)) # define sk_EVP_PKEY_METHOD_value(st, i) SKM_sk_value(EVP_PKEY_METHOD, (st), (i)) # define sk_EVP_PKEY_METHOD_set(st, i, val) SKM_sk_set(EVP_PKEY_METHOD, (st), (i), (val)) # define sk_EVP_PKEY_METHOD_zero(st) SKM_sk_zero(EVP_PKEY_METHOD, (st)) # define sk_EVP_PKEY_METHOD_push(st, val) SKM_sk_push(EVP_PKEY_METHOD, (st), (val)) # define sk_EVP_PKEY_METHOD_unshift(st, val) SKM_sk_unshift(EVP_PKEY_METHOD, (st), (val)) # define sk_EVP_PKEY_METHOD_find(st, val) SKM_sk_find(EVP_PKEY_METHOD, (st), (val)) # define sk_EVP_PKEY_METHOD_find_ex(st, val) SKM_sk_find_ex(EVP_PKEY_METHOD, (st), (val)) # define sk_EVP_PKEY_METHOD_delete(st, i) SKM_sk_delete(EVP_PKEY_METHOD, (st), (i)) # define sk_EVP_PKEY_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PKEY_METHOD, (st), (ptr)) # define sk_EVP_PKEY_METHOD_insert(st, val, i) SKM_sk_insert(EVP_PKEY_METHOD, (st), (val), (i)) # define sk_EVP_PKEY_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PKEY_METHOD, (st), (cmp)) # define sk_EVP_PKEY_METHOD_dup(st) SKM_sk_dup(EVP_PKEY_METHOD, st) # define sk_EVP_PKEY_METHOD_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY_METHOD, (st), (free_func)) # define sk_EVP_PKEY_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PKEY_METHOD, (st), (copy_func), (free_func)) # define sk_EVP_PKEY_METHOD_shift(st) SKM_sk_shift(EVP_PKEY_METHOD, (st)) # define sk_EVP_PKEY_METHOD_pop(st) SKM_sk_pop(EVP_PKEY_METHOD, (st)) # define sk_EVP_PKEY_METHOD_sort(st) SKM_sk_sort(EVP_PKEY_METHOD, (st)) # define sk_EVP_PKEY_METHOD_is_sorted(st) SKM_sk_is_sorted(EVP_PKEY_METHOD, (st)) # define sk_GENERAL_NAME_new(cmp) SKM_sk_new(GENERAL_NAME, (cmp)) # define sk_GENERAL_NAME_new_null() SKM_sk_new_null(GENERAL_NAME) # define sk_GENERAL_NAME_free(st) SKM_sk_free(GENERAL_NAME, (st)) # define sk_GENERAL_NAME_num(st) SKM_sk_num(GENERAL_NAME, (st)) # define sk_GENERAL_NAME_value(st, i) SKM_sk_value(GENERAL_NAME, (st), (i)) # define sk_GENERAL_NAME_set(st, i, val) SKM_sk_set(GENERAL_NAME, (st), (i), (val)) # define sk_GENERAL_NAME_zero(st) SKM_sk_zero(GENERAL_NAME, (st)) # define sk_GENERAL_NAME_push(st, val) SKM_sk_push(GENERAL_NAME, (st), (val)) # define sk_GENERAL_NAME_unshift(st, val) SKM_sk_unshift(GENERAL_NAME, (st), (val)) # define sk_GENERAL_NAME_find(st, val) SKM_sk_find(GENERAL_NAME, (st), (val)) # define sk_GENERAL_NAME_find_ex(st, val) SKM_sk_find_ex(GENERAL_NAME, (st), (val)) # define sk_GENERAL_NAME_delete(st, i) SKM_sk_delete(GENERAL_NAME, (st), (i)) # define sk_GENERAL_NAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_NAME, (st), (ptr)) # define sk_GENERAL_NAME_insert(st, val, i) SKM_sk_insert(GENERAL_NAME, (st), (val), (i)) # define sk_GENERAL_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAME, (st), (cmp)) # define sk_GENERAL_NAME_dup(st) SKM_sk_dup(GENERAL_NAME, st) # define sk_GENERAL_NAME_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAME, (st), (free_func)) # define sk_GENERAL_NAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_NAME, (st), (copy_func), (free_func)) # define sk_GENERAL_NAME_shift(st) SKM_sk_shift(GENERAL_NAME, (st)) # define sk_GENERAL_NAME_pop(st) SKM_sk_pop(GENERAL_NAME, (st)) # define sk_GENERAL_NAME_sort(st) SKM_sk_sort(GENERAL_NAME, (st)) # define sk_GENERAL_NAME_is_sorted(st) SKM_sk_is_sorted(GENERAL_NAME, (st)) # define sk_GENERAL_NAMES_new(cmp) SKM_sk_new(GENERAL_NAMES, (cmp)) # define sk_GENERAL_NAMES_new_null() SKM_sk_new_null(GENERAL_NAMES) # define sk_GENERAL_NAMES_free(st) SKM_sk_free(GENERAL_NAMES, (st)) # define sk_GENERAL_NAMES_num(st) SKM_sk_num(GENERAL_NAMES, (st)) # define sk_GENERAL_NAMES_value(st, i) SKM_sk_value(GENERAL_NAMES, (st), (i)) # define sk_GENERAL_NAMES_set(st, i, val) SKM_sk_set(GENERAL_NAMES, (st), (i), (val)) # define sk_GENERAL_NAMES_zero(st) SKM_sk_zero(GENERAL_NAMES, (st)) # define sk_GENERAL_NAMES_push(st, val) SKM_sk_push(GENERAL_NAMES, (st), (val)) # define sk_GENERAL_NAMES_unshift(st, val) SKM_sk_unshift(GENERAL_NAMES, (st), (val)) # define sk_GENERAL_NAMES_find(st, val) SKM_sk_find(GENERAL_NAMES, (st), (val)) # define sk_GENERAL_NAMES_find_ex(st, val) SKM_sk_find_ex(GENERAL_NAMES, (st), (val)) # define sk_GENERAL_NAMES_delete(st, i) SKM_sk_delete(GENERAL_NAMES, (st), (i)) # define sk_GENERAL_NAMES_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_NAMES, (st), (ptr)) # define sk_GENERAL_NAMES_insert(st, val, i) SKM_sk_insert(GENERAL_NAMES, (st), (val), (i)) # define sk_GENERAL_NAMES_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAMES, (st), (cmp)) # define sk_GENERAL_NAMES_dup(st) SKM_sk_dup(GENERAL_NAMES, st) # define sk_GENERAL_NAMES_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAMES, (st), (free_func)) # define sk_GENERAL_NAMES_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_NAMES, (st), (copy_func), (free_func)) # define sk_GENERAL_NAMES_shift(st) SKM_sk_shift(GENERAL_NAMES, (st)) # define sk_GENERAL_NAMES_pop(st) SKM_sk_pop(GENERAL_NAMES, (st)) # define sk_GENERAL_NAMES_sort(st) SKM_sk_sort(GENERAL_NAMES, (st)) # define sk_GENERAL_NAMES_is_sorted(st) SKM_sk_is_sorted(GENERAL_NAMES, (st)) # define sk_GENERAL_SUBTREE_new(cmp) SKM_sk_new(GENERAL_SUBTREE, (cmp)) # define sk_GENERAL_SUBTREE_new_null() SKM_sk_new_null(GENERAL_SUBTREE) # define sk_GENERAL_SUBTREE_free(st) SKM_sk_free(GENERAL_SUBTREE, (st)) # define sk_GENERAL_SUBTREE_num(st) SKM_sk_num(GENERAL_SUBTREE, (st)) # define sk_GENERAL_SUBTREE_value(st, i) SKM_sk_value(GENERAL_SUBTREE, (st), (i)) # define sk_GENERAL_SUBTREE_set(st, i, val) SKM_sk_set(GENERAL_SUBTREE, (st), (i), (val)) # define sk_GENERAL_SUBTREE_zero(st) SKM_sk_zero(GENERAL_SUBTREE, (st)) # define sk_GENERAL_SUBTREE_push(st, val) SKM_sk_push(GENERAL_SUBTREE, (st), (val)) # define sk_GENERAL_SUBTREE_unshift(st, val) SKM_sk_unshift(GENERAL_SUBTREE, (st), (val)) # define sk_GENERAL_SUBTREE_find(st, val) SKM_sk_find(GENERAL_SUBTREE, (st), (val)) # define sk_GENERAL_SUBTREE_find_ex(st, val) SKM_sk_find_ex(GENERAL_SUBTREE, (st), (val)) # define sk_GENERAL_SUBTREE_delete(st, i) SKM_sk_delete(GENERAL_SUBTREE, (st), (i)) # define sk_GENERAL_SUBTREE_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_SUBTREE, (st), (ptr)) # define sk_GENERAL_SUBTREE_insert(st, val, i) SKM_sk_insert(GENERAL_SUBTREE, (st), (val), (i)) # define sk_GENERAL_SUBTREE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_SUBTREE, (st), (cmp)) # define sk_GENERAL_SUBTREE_dup(st) SKM_sk_dup(GENERAL_SUBTREE, st) # define sk_GENERAL_SUBTREE_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_SUBTREE, (st), (free_func)) # define sk_GENERAL_SUBTREE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_SUBTREE, (st), (copy_func), (free_func)) # define sk_GENERAL_SUBTREE_shift(st) SKM_sk_shift(GENERAL_SUBTREE, (st)) # define sk_GENERAL_SUBTREE_pop(st) SKM_sk_pop(GENERAL_SUBTREE, (st)) # define sk_GENERAL_SUBTREE_sort(st) SKM_sk_sort(GENERAL_SUBTREE, (st)) # define sk_GENERAL_SUBTREE_is_sorted(st) SKM_sk_is_sorted(GENERAL_SUBTREE, (st)) # define sk_IPAddressFamily_new(cmp) SKM_sk_new(IPAddressFamily, (cmp)) # define sk_IPAddressFamily_new_null() SKM_sk_new_null(IPAddressFamily) # define sk_IPAddressFamily_free(st) SKM_sk_free(IPAddressFamily, (st)) # define sk_IPAddressFamily_num(st) SKM_sk_num(IPAddressFamily, (st)) # define sk_IPAddressFamily_value(st, i) SKM_sk_value(IPAddressFamily, (st), (i)) # define sk_IPAddressFamily_set(st, i, val) SKM_sk_set(IPAddressFamily, (st), (i), (val)) # define sk_IPAddressFamily_zero(st) SKM_sk_zero(IPAddressFamily, (st)) # define sk_IPAddressFamily_push(st, val) SKM_sk_push(IPAddressFamily, (st), (val)) # define sk_IPAddressFamily_unshift(st, val) SKM_sk_unshift(IPAddressFamily, (st), (val)) # define sk_IPAddressFamily_find(st, val) SKM_sk_find(IPAddressFamily, (st), (val)) # define sk_IPAddressFamily_find_ex(st, val) SKM_sk_find_ex(IPAddressFamily, (st), (val)) # define sk_IPAddressFamily_delete(st, i) SKM_sk_delete(IPAddressFamily, (st), (i)) # define sk_IPAddressFamily_delete_ptr(st, ptr) SKM_sk_delete_ptr(IPAddressFamily, (st), (ptr)) # define sk_IPAddressFamily_insert(st, val, i) SKM_sk_insert(IPAddressFamily, (st), (val), (i)) # define sk_IPAddressFamily_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(IPAddressFamily, (st), (cmp)) # define sk_IPAddressFamily_dup(st) SKM_sk_dup(IPAddressFamily, st) # define sk_IPAddressFamily_pop_free(st, free_func) SKM_sk_pop_free(IPAddressFamily, (st), (free_func)) # define sk_IPAddressFamily_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(IPAddressFamily, (st), (copy_func), (free_func)) # define sk_IPAddressFamily_shift(st) SKM_sk_shift(IPAddressFamily, (st)) # define sk_IPAddressFamily_pop(st) SKM_sk_pop(IPAddressFamily, (st)) # define sk_IPAddressFamily_sort(st) SKM_sk_sort(IPAddressFamily, (st)) # define sk_IPAddressFamily_is_sorted(st) SKM_sk_is_sorted(IPAddressFamily, (st)) # define sk_IPAddressOrRange_new(cmp) SKM_sk_new(IPAddressOrRange, (cmp)) # define sk_IPAddressOrRange_new_null() SKM_sk_new_null(IPAddressOrRange) # define sk_IPAddressOrRange_free(st) SKM_sk_free(IPAddressOrRange, (st)) # define sk_IPAddressOrRange_num(st) SKM_sk_num(IPAddressOrRange, (st)) # define sk_IPAddressOrRange_value(st, i) SKM_sk_value(IPAddressOrRange, (st), (i)) # define sk_IPAddressOrRange_set(st, i, val) SKM_sk_set(IPAddressOrRange, (st), (i), (val)) # define sk_IPAddressOrRange_zero(st) SKM_sk_zero(IPAddressOrRange, (st)) # define sk_IPAddressOrRange_push(st, val) SKM_sk_push(IPAddressOrRange, (st), (val)) # define sk_IPAddressOrRange_unshift(st, val) SKM_sk_unshift(IPAddressOrRange, (st), (val)) # define sk_IPAddressOrRange_find(st, val) SKM_sk_find(IPAddressOrRange, (st), (val)) # define sk_IPAddressOrRange_find_ex(st, val) SKM_sk_find_ex(IPAddressOrRange, (st), (val)) # define sk_IPAddressOrRange_delete(st, i) SKM_sk_delete(IPAddressOrRange, (st), (i)) # define sk_IPAddressOrRange_delete_ptr(st, ptr) SKM_sk_delete_ptr(IPAddressOrRange, (st), (ptr)) # define sk_IPAddressOrRange_insert(st, val, i) SKM_sk_insert(IPAddressOrRange, (st), (val), (i)) # define sk_IPAddressOrRange_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(IPAddressOrRange, (st), (cmp)) # define sk_IPAddressOrRange_dup(st) SKM_sk_dup(IPAddressOrRange, st) # define sk_IPAddressOrRange_pop_free(st, free_func) SKM_sk_pop_free(IPAddressOrRange, (st), (free_func)) # define sk_IPAddressOrRange_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(IPAddressOrRange, (st), (copy_func), (free_func)) # define sk_IPAddressOrRange_shift(st) SKM_sk_shift(IPAddressOrRange, (st)) # define sk_IPAddressOrRange_pop(st) SKM_sk_pop(IPAddressOrRange, (st)) # define sk_IPAddressOrRange_sort(st) SKM_sk_sort(IPAddressOrRange, (st)) # define sk_IPAddressOrRange_is_sorted(st) SKM_sk_is_sorted(IPAddressOrRange, (st)) # define sk_KRB5_APREQBODY_new(cmp) SKM_sk_new(KRB5_APREQBODY, (cmp)) # define sk_KRB5_APREQBODY_new_null() SKM_sk_new_null(KRB5_APREQBODY) # define sk_KRB5_APREQBODY_free(st) SKM_sk_free(KRB5_APREQBODY, (st)) # define sk_KRB5_APREQBODY_num(st) SKM_sk_num(KRB5_APREQBODY, (st)) # define sk_KRB5_APREQBODY_value(st, i) SKM_sk_value(KRB5_APREQBODY, (st), (i)) # define sk_KRB5_APREQBODY_set(st, i, val) SKM_sk_set(KRB5_APREQBODY, (st), (i), (val)) # define sk_KRB5_APREQBODY_zero(st) SKM_sk_zero(KRB5_APREQBODY, (st)) # define sk_KRB5_APREQBODY_push(st, val) SKM_sk_push(KRB5_APREQBODY, (st), (val)) # define sk_KRB5_APREQBODY_unshift(st, val) SKM_sk_unshift(KRB5_APREQBODY, (st), (val)) # define sk_KRB5_APREQBODY_find(st, val) SKM_sk_find(KRB5_APREQBODY, (st), (val)) # define sk_KRB5_APREQBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_APREQBODY, (st), (val)) # define sk_KRB5_APREQBODY_delete(st, i) SKM_sk_delete(KRB5_APREQBODY, (st), (i)) # define sk_KRB5_APREQBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_APREQBODY, (st), (ptr)) # define sk_KRB5_APREQBODY_insert(st, val, i) SKM_sk_insert(KRB5_APREQBODY, (st), (val), (i)) # define sk_KRB5_APREQBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_APREQBODY, (st), (cmp)) # define sk_KRB5_APREQBODY_dup(st) SKM_sk_dup(KRB5_APREQBODY, st) # define sk_KRB5_APREQBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_APREQBODY, (st), (free_func)) # define sk_KRB5_APREQBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_APREQBODY, (st), (copy_func), (free_func)) # define sk_KRB5_APREQBODY_shift(st) SKM_sk_shift(KRB5_APREQBODY, (st)) # define sk_KRB5_APREQBODY_pop(st) SKM_sk_pop(KRB5_APREQBODY, (st)) # define sk_KRB5_APREQBODY_sort(st) SKM_sk_sort(KRB5_APREQBODY, (st)) # define sk_KRB5_APREQBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_APREQBODY, (st)) # define sk_KRB5_AUTHDATA_new(cmp) SKM_sk_new(KRB5_AUTHDATA, (cmp)) # define sk_KRB5_AUTHDATA_new_null() SKM_sk_new_null(KRB5_AUTHDATA) # define sk_KRB5_AUTHDATA_free(st) SKM_sk_free(KRB5_AUTHDATA, (st)) # define sk_KRB5_AUTHDATA_num(st) SKM_sk_num(KRB5_AUTHDATA, (st)) # define sk_KRB5_AUTHDATA_value(st, i) SKM_sk_value(KRB5_AUTHDATA, (st), (i)) # define sk_KRB5_AUTHDATA_set(st, i, val) SKM_sk_set(KRB5_AUTHDATA, (st), (i), (val)) # define sk_KRB5_AUTHDATA_zero(st) SKM_sk_zero(KRB5_AUTHDATA, (st)) # define sk_KRB5_AUTHDATA_push(st, val) SKM_sk_push(KRB5_AUTHDATA, (st), (val)) # define sk_KRB5_AUTHDATA_unshift(st, val) SKM_sk_unshift(KRB5_AUTHDATA, (st), (val)) # define sk_KRB5_AUTHDATA_find(st, val) SKM_sk_find(KRB5_AUTHDATA, (st), (val)) # define sk_KRB5_AUTHDATA_find_ex(st, val) SKM_sk_find_ex(KRB5_AUTHDATA, (st), (val)) # define sk_KRB5_AUTHDATA_delete(st, i) SKM_sk_delete(KRB5_AUTHDATA, (st), (i)) # define sk_KRB5_AUTHDATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_AUTHDATA, (st), (ptr)) # define sk_KRB5_AUTHDATA_insert(st, val, i) SKM_sk_insert(KRB5_AUTHDATA, (st), (val), (i)) # define sk_KRB5_AUTHDATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_AUTHDATA, (st), (cmp)) # define sk_KRB5_AUTHDATA_dup(st) SKM_sk_dup(KRB5_AUTHDATA, st) # define sk_KRB5_AUTHDATA_pop_free(st, free_func) SKM_sk_pop_free(KRB5_AUTHDATA, (st), (free_func)) # define sk_KRB5_AUTHDATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_AUTHDATA, (st), (copy_func), (free_func)) # define sk_KRB5_AUTHDATA_shift(st) SKM_sk_shift(KRB5_AUTHDATA, (st)) # define sk_KRB5_AUTHDATA_pop(st) SKM_sk_pop(KRB5_AUTHDATA, (st)) # define sk_KRB5_AUTHDATA_sort(st) SKM_sk_sort(KRB5_AUTHDATA, (st)) # define sk_KRB5_AUTHDATA_is_sorted(st) SKM_sk_is_sorted(KRB5_AUTHDATA, (st)) # define sk_KRB5_AUTHENTBODY_new(cmp) SKM_sk_new(KRB5_AUTHENTBODY, (cmp)) # define sk_KRB5_AUTHENTBODY_new_null() SKM_sk_new_null(KRB5_AUTHENTBODY) # define sk_KRB5_AUTHENTBODY_free(st) SKM_sk_free(KRB5_AUTHENTBODY, (st)) # define sk_KRB5_AUTHENTBODY_num(st) SKM_sk_num(KRB5_AUTHENTBODY, (st)) # define sk_KRB5_AUTHENTBODY_value(st, i) SKM_sk_value(KRB5_AUTHENTBODY, (st), (i)) # define sk_KRB5_AUTHENTBODY_set(st, i, val) SKM_sk_set(KRB5_AUTHENTBODY, (st), (i), (val)) # define sk_KRB5_AUTHENTBODY_zero(st) SKM_sk_zero(KRB5_AUTHENTBODY, (st)) # define sk_KRB5_AUTHENTBODY_push(st, val) SKM_sk_push(KRB5_AUTHENTBODY, (st), (val)) # define sk_KRB5_AUTHENTBODY_unshift(st, val) SKM_sk_unshift(KRB5_AUTHENTBODY, (st), (val)) # define sk_KRB5_AUTHENTBODY_find(st, val) SKM_sk_find(KRB5_AUTHENTBODY, (st), (val)) # define sk_KRB5_AUTHENTBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_AUTHENTBODY, (st), (val)) # define sk_KRB5_AUTHENTBODY_delete(st, i) SKM_sk_delete(KRB5_AUTHENTBODY, (st), (i)) # define sk_KRB5_AUTHENTBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_AUTHENTBODY, (st), (ptr)) # define sk_KRB5_AUTHENTBODY_insert(st, val, i) SKM_sk_insert(KRB5_AUTHENTBODY, (st), (val), (i)) # define sk_KRB5_AUTHENTBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_AUTHENTBODY, (st), (cmp)) # define sk_KRB5_AUTHENTBODY_dup(st) SKM_sk_dup(KRB5_AUTHENTBODY, st) # define sk_KRB5_AUTHENTBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_AUTHENTBODY, (st), (free_func)) # define sk_KRB5_AUTHENTBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_AUTHENTBODY, (st), (copy_func), (free_func)) # define sk_KRB5_AUTHENTBODY_shift(st) SKM_sk_shift(KRB5_AUTHENTBODY, (st)) # define sk_KRB5_AUTHENTBODY_pop(st) SKM_sk_pop(KRB5_AUTHENTBODY, (st)) # define sk_KRB5_AUTHENTBODY_sort(st) SKM_sk_sort(KRB5_AUTHENTBODY, (st)) # define sk_KRB5_AUTHENTBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_AUTHENTBODY, (st)) # define sk_KRB5_CHECKSUM_new(cmp) SKM_sk_new(KRB5_CHECKSUM, (cmp)) # define sk_KRB5_CHECKSUM_new_null() SKM_sk_new_null(KRB5_CHECKSUM) # define sk_KRB5_CHECKSUM_free(st) SKM_sk_free(KRB5_CHECKSUM, (st)) # define sk_KRB5_CHECKSUM_num(st) SKM_sk_num(KRB5_CHECKSUM, (st)) # define sk_KRB5_CHECKSUM_value(st, i) SKM_sk_value(KRB5_CHECKSUM, (st), (i)) # define sk_KRB5_CHECKSUM_set(st, i, val) SKM_sk_set(KRB5_CHECKSUM, (st), (i), (val)) # define sk_KRB5_CHECKSUM_zero(st) SKM_sk_zero(KRB5_CHECKSUM, (st)) # define sk_KRB5_CHECKSUM_push(st, val) SKM_sk_push(KRB5_CHECKSUM, (st), (val)) # define sk_KRB5_CHECKSUM_unshift(st, val) SKM_sk_unshift(KRB5_CHECKSUM, (st), (val)) # define sk_KRB5_CHECKSUM_find(st, val) SKM_sk_find(KRB5_CHECKSUM, (st), (val)) # define sk_KRB5_CHECKSUM_find_ex(st, val) SKM_sk_find_ex(KRB5_CHECKSUM, (st), (val)) # define sk_KRB5_CHECKSUM_delete(st, i) SKM_sk_delete(KRB5_CHECKSUM, (st), (i)) # define sk_KRB5_CHECKSUM_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_CHECKSUM, (st), (ptr)) # define sk_KRB5_CHECKSUM_insert(st, val, i) SKM_sk_insert(KRB5_CHECKSUM, (st), (val), (i)) # define sk_KRB5_CHECKSUM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_CHECKSUM, (st), (cmp)) # define sk_KRB5_CHECKSUM_dup(st) SKM_sk_dup(KRB5_CHECKSUM, st) # define sk_KRB5_CHECKSUM_pop_free(st, free_func) SKM_sk_pop_free(KRB5_CHECKSUM, (st), (free_func)) # define sk_KRB5_CHECKSUM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_CHECKSUM, (st), (copy_func), (free_func)) # define sk_KRB5_CHECKSUM_shift(st) SKM_sk_shift(KRB5_CHECKSUM, (st)) # define sk_KRB5_CHECKSUM_pop(st) SKM_sk_pop(KRB5_CHECKSUM, (st)) # define sk_KRB5_CHECKSUM_sort(st) SKM_sk_sort(KRB5_CHECKSUM, (st)) # define sk_KRB5_CHECKSUM_is_sorted(st) SKM_sk_is_sorted(KRB5_CHECKSUM, (st)) # define sk_KRB5_ENCDATA_new(cmp) SKM_sk_new(KRB5_ENCDATA, (cmp)) # define sk_KRB5_ENCDATA_new_null() SKM_sk_new_null(KRB5_ENCDATA) # define sk_KRB5_ENCDATA_free(st) SKM_sk_free(KRB5_ENCDATA, (st)) # define sk_KRB5_ENCDATA_num(st) SKM_sk_num(KRB5_ENCDATA, (st)) # define sk_KRB5_ENCDATA_value(st, i) SKM_sk_value(KRB5_ENCDATA, (st), (i)) # define sk_KRB5_ENCDATA_set(st, i, val) SKM_sk_set(KRB5_ENCDATA, (st), (i), (val)) # define sk_KRB5_ENCDATA_zero(st) SKM_sk_zero(KRB5_ENCDATA, (st)) # define sk_KRB5_ENCDATA_push(st, val) SKM_sk_push(KRB5_ENCDATA, (st), (val)) # define sk_KRB5_ENCDATA_unshift(st, val) SKM_sk_unshift(KRB5_ENCDATA, (st), (val)) # define sk_KRB5_ENCDATA_find(st, val) SKM_sk_find(KRB5_ENCDATA, (st), (val)) # define sk_KRB5_ENCDATA_find_ex(st, val) SKM_sk_find_ex(KRB5_ENCDATA, (st), (val)) # define sk_KRB5_ENCDATA_delete(st, i) SKM_sk_delete(KRB5_ENCDATA, (st), (i)) # define sk_KRB5_ENCDATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_ENCDATA, (st), (ptr)) # define sk_KRB5_ENCDATA_insert(st, val, i) SKM_sk_insert(KRB5_ENCDATA, (st), (val), (i)) # define sk_KRB5_ENCDATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_ENCDATA, (st), (cmp)) # define sk_KRB5_ENCDATA_dup(st) SKM_sk_dup(KRB5_ENCDATA, st) # define sk_KRB5_ENCDATA_pop_free(st, free_func) SKM_sk_pop_free(KRB5_ENCDATA, (st), (free_func)) # define sk_KRB5_ENCDATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_ENCDATA, (st), (copy_func), (free_func)) # define sk_KRB5_ENCDATA_shift(st) SKM_sk_shift(KRB5_ENCDATA, (st)) # define sk_KRB5_ENCDATA_pop(st) SKM_sk_pop(KRB5_ENCDATA, (st)) # define sk_KRB5_ENCDATA_sort(st) SKM_sk_sort(KRB5_ENCDATA, (st)) # define sk_KRB5_ENCDATA_is_sorted(st) SKM_sk_is_sorted(KRB5_ENCDATA, (st)) # define sk_KRB5_ENCKEY_new(cmp) SKM_sk_new(KRB5_ENCKEY, (cmp)) # define sk_KRB5_ENCKEY_new_null() SKM_sk_new_null(KRB5_ENCKEY) # define sk_KRB5_ENCKEY_free(st) SKM_sk_free(KRB5_ENCKEY, (st)) # define sk_KRB5_ENCKEY_num(st) SKM_sk_num(KRB5_ENCKEY, (st)) # define sk_KRB5_ENCKEY_value(st, i) SKM_sk_value(KRB5_ENCKEY, (st), (i)) # define sk_KRB5_ENCKEY_set(st, i, val) SKM_sk_set(KRB5_ENCKEY, (st), (i), (val)) # define sk_KRB5_ENCKEY_zero(st) SKM_sk_zero(KRB5_ENCKEY, (st)) # define sk_KRB5_ENCKEY_push(st, val) SKM_sk_push(KRB5_ENCKEY, (st), (val)) # define sk_KRB5_ENCKEY_unshift(st, val) SKM_sk_unshift(KRB5_ENCKEY, (st), (val)) # define sk_KRB5_ENCKEY_find(st, val) SKM_sk_find(KRB5_ENCKEY, (st), (val)) # define sk_KRB5_ENCKEY_find_ex(st, val) SKM_sk_find_ex(KRB5_ENCKEY, (st), (val)) # define sk_KRB5_ENCKEY_delete(st, i) SKM_sk_delete(KRB5_ENCKEY, (st), (i)) # define sk_KRB5_ENCKEY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_ENCKEY, (st), (ptr)) # define sk_KRB5_ENCKEY_insert(st, val, i) SKM_sk_insert(KRB5_ENCKEY, (st), (val), (i)) # define sk_KRB5_ENCKEY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_ENCKEY, (st), (cmp)) # define sk_KRB5_ENCKEY_dup(st) SKM_sk_dup(KRB5_ENCKEY, st) # define sk_KRB5_ENCKEY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_ENCKEY, (st), (free_func)) # define sk_KRB5_ENCKEY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_ENCKEY, (st), (copy_func), (free_func)) # define sk_KRB5_ENCKEY_shift(st) SKM_sk_shift(KRB5_ENCKEY, (st)) # define sk_KRB5_ENCKEY_pop(st) SKM_sk_pop(KRB5_ENCKEY, (st)) # define sk_KRB5_ENCKEY_sort(st) SKM_sk_sort(KRB5_ENCKEY, (st)) # define sk_KRB5_ENCKEY_is_sorted(st) SKM_sk_is_sorted(KRB5_ENCKEY, (st)) # define sk_KRB5_PRINCNAME_new(cmp) SKM_sk_new(KRB5_PRINCNAME, (cmp)) # define sk_KRB5_PRINCNAME_new_null() SKM_sk_new_null(KRB5_PRINCNAME) # define sk_KRB5_PRINCNAME_free(st) SKM_sk_free(KRB5_PRINCNAME, (st)) # define sk_KRB5_PRINCNAME_num(st) SKM_sk_num(KRB5_PRINCNAME, (st)) # define sk_KRB5_PRINCNAME_value(st, i) SKM_sk_value(KRB5_PRINCNAME, (st), (i)) # define sk_KRB5_PRINCNAME_set(st, i, val) SKM_sk_set(KRB5_PRINCNAME, (st), (i), (val)) # define sk_KRB5_PRINCNAME_zero(st) SKM_sk_zero(KRB5_PRINCNAME, (st)) # define sk_KRB5_PRINCNAME_push(st, val) SKM_sk_push(KRB5_PRINCNAME, (st), (val)) # define sk_KRB5_PRINCNAME_unshift(st, val) SKM_sk_unshift(KRB5_PRINCNAME, (st), (val)) # define sk_KRB5_PRINCNAME_find(st, val) SKM_sk_find(KRB5_PRINCNAME, (st), (val)) # define sk_KRB5_PRINCNAME_find_ex(st, val) SKM_sk_find_ex(KRB5_PRINCNAME, (st), (val)) # define sk_KRB5_PRINCNAME_delete(st, i) SKM_sk_delete(KRB5_PRINCNAME, (st), (i)) # define sk_KRB5_PRINCNAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_PRINCNAME, (st), (ptr)) # define sk_KRB5_PRINCNAME_insert(st, val, i) SKM_sk_insert(KRB5_PRINCNAME, (st), (val), (i)) # define sk_KRB5_PRINCNAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_PRINCNAME, (st), (cmp)) # define sk_KRB5_PRINCNAME_dup(st) SKM_sk_dup(KRB5_PRINCNAME, st) # define sk_KRB5_PRINCNAME_pop_free(st, free_func) SKM_sk_pop_free(KRB5_PRINCNAME, (st), (free_func)) # define sk_KRB5_PRINCNAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_PRINCNAME, (st), (copy_func), (free_func)) # define sk_KRB5_PRINCNAME_shift(st) SKM_sk_shift(KRB5_PRINCNAME, (st)) # define sk_KRB5_PRINCNAME_pop(st) SKM_sk_pop(KRB5_PRINCNAME, (st)) # define sk_KRB5_PRINCNAME_sort(st) SKM_sk_sort(KRB5_PRINCNAME, (st)) # define sk_KRB5_PRINCNAME_is_sorted(st) SKM_sk_is_sorted(KRB5_PRINCNAME, (st)) # define sk_KRB5_TKTBODY_new(cmp) SKM_sk_new(KRB5_TKTBODY, (cmp)) # define sk_KRB5_TKTBODY_new_null() SKM_sk_new_null(KRB5_TKTBODY) # define sk_KRB5_TKTBODY_free(st) SKM_sk_free(KRB5_TKTBODY, (st)) # define sk_KRB5_TKTBODY_num(st) SKM_sk_num(KRB5_TKTBODY, (st)) # define sk_KRB5_TKTBODY_value(st, i) SKM_sk_value(KRB5_TKTBODY, (st), (i)) # define sk_KRB5_TKTBODY_set(st, i, val) SKM_sk_set(KRB5_TKTBODY, (st), (i), (val)) # define sk_KRB5_TKTBODY_zero(st) SKM_sk_zero(KRB5_TKTBODY, (st)) # define sk_KRB5_TKTBODY_push(st, val) SKM_sk_push(KRB5_TKTBODY, (st), (val)) # define sk_KRB5_TKTBODY_unshift(st, val) SKM_sk_unshift(KRB5_TKTBODY, (st), (val)) # define sk_KRB5_TKTBODY_find(st, val) SKM_sk_find(KRB5_TKTBODY, (st), (val)) # define sk_KRB5_TKTBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_TKTBODY, (st), (val)) # define sk_KRB5_TKTBODY_delete(st, i) SKM_sk_delete(KRB5_TKTBODY, (st), (i)) # define sk_KRB5_TKTBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_TKTBODY, (st), (ptr)) # define sk_KRB5_TKTBODY_insert(st, val, i) SKM_sk_insert(KRB5_TKTBODY, (st), (val), (i)) # define sk_KRB5_TKTBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_TKTBODY, (st), (cmp)) # define sk_KRB5_TKTBODY_dup(st) SKM_sk_dup(KRB5_TKTBODY, st) # define sk_KRB5_TKTBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_TKTBODY, (st), (free_func)) # define sk_KRB5_TKTBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_TKTBODY, (st), (copy_func), (free_func)) # define sk_KRB5_TKTBODY_shift(st) SKM_sk_shift(KRB5_TKTBODY, (st)) # define sk_KRB5_TKTBODY_pop(st) SKM_sk_pop(KRB5_TKTBODY, (st)) # define sk_KRB5_TKTBODY_sort(st) SKM_sk_sort(KRB5_TKTBODY, (st)) # define sk_KRB5_TKTBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_TKTBODY, (st)) # define sk_MEM_OBJECT_DATA_new(cmp) SKM_sk_new(MEM_OBJECT_DATA, (cmp)) # define sk_MEM_OBJECT_DATA_new_null() SKM_sk_new_null(MEM_OBJECT_DATA) # define sk_MEM_OBJECT_DATA_free(st) SKM_sk_free(MEM_OBJECT_DATA, (st)) # define sk_MEM_OBJECT_DATA_num(st) SKM_sk_num(MEM_OBJECT_DATA, (st)) # define sk_MEM_OBJECT_DATA_value(st, i) SKM_sk_value(MEM_OBJECT_DATA, (st), (i)) # define sk_MEM_OBJECT_DATA_set(st, i, val) SKM_sk_set(MEM_OBJECT_DATA, (st), (i), (val)) # define sk_MEM_OBJECT_DATA_zero(st) SKM_sk_zero(MEM_OBJECT_DATA, (st)) # define sk_MEM_OBJECT_DATA_push(st, val) SKM_sk_push(MEM_OBJECT_DATA, (st), (val)) # define sk_MEM_OBJECT_DATA_unshift(st, val) SKM_sk_unshift(MEM_OBJECT_DATA, (st), (val)) # define sk_MEM_OBJECT_DATA_find(st, val) SKM_sk_find(MEM_OBJECT_DATA, (st), (val)) # define sk_MEM_OBJECT_DATA_find_ex(st, val) SKM_sk_find_ex(MEM_OBJECT_DATA, (st), (val)) # define sk_MEM_OBJECT_DATA_delete(st, i) SKM_sk_delete(MEM_OBJECT_DATA, (st), (i)) # define sk_MEM_OBJECT_DATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(MEM_OBJECT_DATA, (st), (ptr)) # define sk_MEM_OBJECT_DATA_insert(st, val, i) SKM_sk_insert(MEM_OBJECT_DATA, (st), (val), (i)) # define sk_MEM_OBJECT_DATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MEM_OBJECT_DATA, (st), (cmp)) # define sk_MEM_OBJECT_DATA_dup(st) SKM_sk_dup(MEM_OBJECT_DATA, st) # define sk_MEM_OBJECT_DATA_pop_free(st, free_func) SKM_sk_pop_free(MEM_OBJECT_DATA, (st), (free_func)) # define sk_MEM_OBJECT_DATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MEM_OBJECT_DATA, (st), (copy_func), (free_func)) # define sk_MEM_OBJECT_DATA_shift(st) SKM_sk_shift(MEM_OBJECT_DATA, (st)) # define sk_MEM_OBJECT_DATA_pop(st) SKM_sk_pop(MEM_OBJECT_DATA, (st)) # define sk_MEM_OBJECT_DATA_sort(st) SKM_sk_sort(MEM_OBJECT_DATA, (st)) # define sk_MEM_OBJECT_DATA_is_sorted(st) SKM_sk_is_sorted(MEM_OBJECT_DATA, (st)) # define sk_MIME_HEADER_new(cmp) SKM_sk_new(MIME_HEADER, (cmp)) # define sk_MIME_HEADER_new_null() SKM_sk_new_null(MIME_HEADER) # define sk_MIME_HEADER_free(st) SKM_sk_free(MIME_HEADER, (st)) # define sk_MIME_HEADER_num(st) SKM_sk_num(MIME_HEADER, (st)) # define sk_MIME_HEADER_value(st, i) SKM_sk_value(MIME_HEADER, (st), (i)) # define sk_MIME_HEADER_set(st, i, val) SKM_sk_set(MIME_HEADER, (st), (i), (val)) # define sk_MIME_HEADER_zero(st) SKM_sk_zero(MIME_HEADER, (st)) # define sk_MIME_HEADER_push(st, val) SKM_sk_push(MIME_HEADER, (st), (val)) # define sk_MIME_HEADER_unshift(st, val) SKM_sk_unshift(MIME_HEADER, (st), (val)) # define sk_MIME_HEADER_find(st, val) SKM_sk_find(MIME_HEADER, (st), (val)) # define sk_MIME_HEADER_find_ex(st, val) SKM_sk_find_ex(MIME_HEADER, (st), (val)) # define sk_MIME_HEADER_delete(st, i) SKM_sk_delete(MIME_HEADER, (st), (i)) # define sk_MIME_HEADER_delete_ptr(st, ptr) SKM_sk_delete_ptr(MIME_HEADER, (st), (ptr)) # define sk_MIME_HEADER_insert(st, val, i) SKM_sk_insert(MIME_HEADER, (st), (val), (i)) # define sk_MIME_HEADER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_HEADER, (st), (cmp)) # define sk_MIME_HEADER_dup(st) SKM_sk_dup(MIME_HEADER, st) # define sk_MIME_HEADER_pop_free(st, free_func) SKM_sk_pop_free(MIME_HEADER, (st), (free_func)) # define sk_MIME_HEADER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MIME_HEADER, (st), (copy_func), (free_func)) # define sk_MIME_HEADER_shift(st) SKM_sk_shift(MIME_HEADER, (st)) # define sk_MIME_HEADER_pop(st) SKM_sk_pop(MIME_HEADER, (st)) # define sk_MIME_HEADER_sort(st) SKM_sk_sort(MIME_HEADER, (st)) # define sk_MIME_HEADER_is_sorted(st) SKM_sk_is_sorted(MIME_HEADER, (st)) # define sk_MIME_PARAM_new(cmp) SKM_sk_new(MIME_PARAM, (cmp)) # define sk_MIME_PARAM_new_null() SKM_sk_new_null(MIME_PARAM) # define sk_MIME_PARAM_free(st) SKM_sk_free(MIME_PARAM, (st)) # define sk_MIME_PARAM_num(st) SKM_sk_num(MIME_PARAM, (st)) # define sk_MIME_PARAM_value(st, i) SKM_sk_value(MIME_PARAM, (st), (i)) # define sk_MIME_PARAM_set(st, i, val) SKM_sk_set(MIME_PARAM, (st), (i), (val)) # define sk_MIME_PARAM_zero(st) SKM_sk_zero(MIME_PARAM, (st)) # define sk_MIME_PARAM_push(st, val) SKM_sk_push(MIME_PARAM, (st), (val)) # define sk_MIME_PARAM_unshift(st, val) SKM_sk_unshift(MIME_PARAM, (st), (val)) # define sk_MIME_PARAM_find(st, val) SKM_sk_find(MIME_PARAM, (st), (val)) # define sk_MIME_PARAM_find_ex(st, val) SKM_sk_find_ex(MIME_PARAM, (st), (val)) # define sk_MIME_PARAM_delete(st, i) SKM_sk_delete(MIME_PARAM, (st), (i)) # define sk_MIME_PARAM_delete_ptr(st, ptr) SKM_sk_delete_ptr(MIME_PARAM, (st), (ptr)) # define sk_MIME_PARAM_insert(st, val, i) SKM_sk_insert(MIME_PARAM, (st), (val), (i)) # define sk_MIME_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_PARAM, (st), (cmp)) # define sk_MIME_PARAM_dup(st) SKM_sk_dup(MIME_PARAM, st) # define sk_MIME_PARAM_pop_free(st, free_func) SKM_sk_pop_free(MIME_PARAM, (st), (free_func)) # define sk_MIME_PARAM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MIME_PARAM, (st), (copy_func), (free_func)) # define sk_MIME_PARAM_shift(st) SKM_sk_shift(MIME_PARAM, (st)) # define sk_MIME_PARAM_pop(st) SKM_sk_pop(MIME_PARAM, (st)) # define sk_MIME_PARAM_sort(st) SKM_sk_sort(MIME_PARAM, (st)) # define sk_MIME_PARAM_is_sorted(st) SKM_sk_is_sorted(MIME_PARAM, (st)) # define sk_NAME_FUNCS_new(cmp) SKM_sk_new(NAME_FUNCS, (cmp)) # define sk_NAME_FUNCS_new_null() SKM_sk_new_null(NAME_FUNCS) # define sk_NAME_FUNCS_free(st) SKM_sk_free(NAME_FUNCS, (st)) # define sk_NAME_FUNCS_num(st) SKM_sk_num(NAME_FUNCS, (st)) # define sk_NAME_FUNCS_value(st, i) SKM_sk_value(NAME_FUNCS, (st), (i)) # define sk_NAME_FUNCS_set(st, i, val) SKM_sk_set(NAME_FUNCS, (st), (i), (val)) # define sk_NAME_FUNCS_zero(st) SKM_sk_zero(NAME_FUNCS, (st)) # define sk_NAME_FUNCS_push(st, val) SKM_sk_push(NAME_FUNCS, (st), (val)) # define sk_NAME_FUNCS_unshift(st, val) SKM_sk_unshift(NAME_FUNCS, (st), (val)) # define sk_NAME_FUNCS_find(st, val) SKM_sk_find(NAME_FUNCS, (st), (val)) # define sk_NAME_FUNCS_find_ex(st, val) SKM_sk_find_ex(NAME_FUNCS, (st), (val)) # define sk_NAME_FUNCS_delete(st, i) SKM_sk_delete(NAME_FUNCS, (st), (i)) # define sk_NAME_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(NAME_FUNCS, (st), (ptr)) # define sk_NAME_FUNCS_insert(st, val, i) SKM_sk_insert(NAME_FUNCS, (st), (val), (i)) # define sk_NAME_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(NAME_FUNCS, (st), (cmp)) # define sk_NAME_FUNCS_dup(st) SKM_sk_dup(NAME_FUNCS, st) # define sk_NAME_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(NAME_FUNCS, (st), (free_func)) # define sk_NAME_FUNCS_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(NAME_FUNCS, (st), (copy_func), (free_func)) # define sk_NAME_FUNCS_shift(st) SKM_sk_shift(NAME_FUNCS, (st)) # define sk_NAME_FUNCS_pop(st) SKM_sk_pop(NAME_FUNCS, (st)) # define sk_NAME_FUNCS_sort(st) SKM_sk_sort(NAME_FUNCS, (st)) # define sk_NAME_FUNCS_is_sorted(st) SKM_sk_is_sorted(NAME_FUNCS, (st)) # define sk_OCSP_CERTID_new(cmp) SKM_sk_new(OCSP_CERTID, (cmp)) # define sk_OCSP_CERTID_new_null() SKM_sk_new_null(OCSP_CERTID) # define sk_OCSP_CERTID_free(st) SKM_sk_free(OCSP_CERTID, (st)) # define sk_OCSP_CERTID_num(st) SKM_sk_num(OCSP_CERTID, (st)) # define sk_OCSP_CERTID_value(st, i) SKM_sk_value(OCSP_CERTID, (st), (i)) # define sk_OCSP_CERTID_set(st, i, val) SKM_sk_set(OCSP_CERTID, (st), (i), (val)) # define sk_OCSP_CERTID_zero(st) SKM_sk_zero(OCSP_CERTID, (st)) # define sk_OCSP_CERTID_push(st, val) SKM_sk_push(OCSP_CERTID, (st), (val)) # define sk_OCSP_CERTID_unshift(st, val) SKM_sk_unshift(OCSP_CERTID, (st), (val)) # define sk_OCSP_CERTID_find(st, val) SKM_sk_find(OCSP_CERTID, (st), (val)) # define sk_OCSP_CERTID_find_ex(st, val) SKM_sk_find_ex(OCSP_CERTID, (st), (val)) # define sk_OCSP_CERTID_delete(st, i) SKM_sk_delete(OCSP_CERTID, (st), (i)) # define sk_OCSP_CERTID_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_CERTID, (st), (ptr)) # define sk_OCSP_CERTID_insert(st, val, i) SKM_sk_insert(OCSP_CERTID, (st), (val), (i)) # define sk_OCSP_CERTID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_CERTID, (st), (cmp)) # define sk_OCSP_CERTID_dup(st) SKM_sk_dup(OCSP_CERTID, st) # define sk_OCSP_CERTID_pop_free(st, free_func) SKM_sk_pop_free(OCSP_CERTID, (st), (free_func)) # define sk_OCSP_CERTID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_CERTID, (st), (copy_func), (free_func)) # define sk_OCSP_CERTID_shift(st) SKM_sk_shift(OCSP_CERTID, (st)) # define sk_OCSP_CERTID_pop(st) SKM_sk_pop(OCSP_CERTID, (st)) # define sk_OCSP_CERTID_sort(st) SKM_sk_sort(OCSP_CERTID, (st)) # define sk_OCSP_CERTID_is_sorted(st) SKM_sk_is_sorted(OCSP_CERTID, (st)) # define sk_OCSP_ONEREQ_new(cmp) SKM_sk_new(OCSP_ONEREQ, (cmp)) # define sk_OCSP_ONEREQ_new_null() SKM_sk_new_null(OCSP_ONEREQ) # define sk_OCSP_ONEREQ_free(st) SKM_sk_free(OCSP_ONEREQ, (st)) # define sk_OCSP_ONEREQ_num(st) SKM_sk_num(OCSP_ONEREQ, (st)) # define sk_OCSP_ONEREQ_value(st, i) SKM_sk_value(OCSP_ONEREQ, (st), (i)) # define sk_OCSP_ONEREQ_set(st, i, val) SKM_sk_set(OCSP_ONEREQ, (st), (i), (val)) # define sk_OCSP_ONEREQ_zero(st) SKM_sk_zero(OCSP_ONEREQ, (st)) # define sk_OCSP_ONEREQ_push(st, val) SKM_sk_push(OCSP_ONEREQ, (st), (val)) # define sk_OCSP_ONEREQ_unshift(st, val) SKM_sk_unshift(OCSP_ONEREQ, (st), (val)) # define sk_OCSP_ONEREQ_find(st, val) SKM_sk_find(OCSP_ONEREQ, (st), (val)) # define sk_OCSP_ONEREQ_find_ex(st, val) SKM_sk_find_ex(OCSP_ONEREQ, (st), (val)) # define sk_OCSP_ONEREQ_delete(st, i) SKM_sk_delete(OCSP_ONEREQ, (st), (i)) # define sk_OCSP_ONEREQ_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_ONEREQ, (st), (ptr)) # define sk_OCSP_ONEREQ_insert(st, val, i) SKM_sk_insert(OCSP_ONEREQ, (st), (val), (i)) # define sk_OCSP_ONEREQ_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_ONEREQ, (st), (cmp)) # define sk_OCSP_ONEREQ_dup(st) SKM_sk_dup(OCSP_ONEREQ, st) # define sk_OCSP_ONEREQ_pop_free(st, free_func) SKM_sk_pop_free(OCSP_ONEREQ, (st), (free_func)) # define sk_OCSP_ONEREQ_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_ONEREQ, (st), (copy_func), (free_func)) # define sk_OCSP_ONEREQ_shift(st) SKM_sk_shift(OCSP_ONEREQ, (st)) # define sk_OCSP_ONEREQ_pop(st) SKM_sk_pop(OCSP_ONEREQ, (st)) # define sk_OCSP_ONEREQ_sort(st) SKM_sk_sort(OCSP_ONEREQ, (st)) # define sk_OCSP_ONEREQ_is_sorted(st) SKM_sk_is_sorted(OCSP_ONEREQ, (st)) # define sk_OCSP_RESPID_new(cmp) SKM_sk_new(OCSP_RESPID, (cmp)) # define sk_OCSP_RESPID_new_null() SKM_sk_new_null(OCSP_RESPID) # define sk_OCSP_RESPID_free(st) SKM_sk_free(OCSP_RESPID, (st)) # define sk_OCSP_RESPID_num(st) SKM_sk_num(OCSP_RESPID, (st)) # define sk_OCSP_RESPID_value(st, i) SKM_sk_value(OCSP_RESPID, (st), (i)) # define sk_OCSP_RESPID_set(st, i, val) SKM_sk_set(OCSP_RESPID, (st), (i), (val)) # define sk_OCSP_RESPID_zero(st) SKM_sk_zero(OCSP_RESPID, (st)) # define sk_OCSP_RESPID_push(st, val) SKM_sk_push(OCSP_RESPID, (st), (val)) # define sk_OCSP_RESPID_unshift(st, val) SKM_sk_unshift(OCSP_RESPID, (st), (val)) # define sk_OCSP_RESPID_find(st, val) SKM_sk_find(OCSP_RESPID, (st), (val)) # define sk_OCSP_RESPID_find_ex(st, val) SKM_sk_find_ex(OCSP_RESPID, (st), (val)) # define sk_OCSP_RESPID_delete(st, i) SKM_sk_delete(OCSP_RESPID, (st), (i)) # define sk_OCSP_RESPID_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_RESPID, (st), (ptr)) # define sk_OCSP_RESPID_insert(st, val, i) SKM_sk_insert(OCSP_RESPID, (st), (val), (i)) # define sk_OCSP_RESPID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_RESPID, (st), (cmp)) # define sk_OCSP_RESPID_dup(st) SKM_sk_dup(OCSP_RESPID, st) # define sk_OCSP_RESPID_pop_free(st, free_func) SKM_sk_pop_free(OCSP_RESPID, (st), (free_func)) # define sk_OCSP_RESPID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_RESPID, (st), (copy_func), (free_func)) # define sk_OCSP_RESPID_shift(st) SKM_sk_shift(OCSP_RESPID, (st)) # define sk_OCSP_RESPID_pop(st) SKM_sk_pop(OCSP_RESPID, (st)) # define sk_OCSP_RESPID_sort(st) SKM_sk_sort(OCSP_RESPID, (st)) # define sk_OCSP_RESPID_is_sorted(st) SKM_sk_is_sorted(OCSP_RESPID, (st)) # define sk_OCSP_SINGLERESP_new(cmp) SKM_sk_new(OCSP_SINGLERESP, (cmp)) # define sk_OCSP_SINGLERESP_new_null() SKM_sk_new_null(OCSP_SINGLERESP) # define sk_OCSP_SINGLERESP_free(st) SKM_sk_free(OCSP_SINGLERESP, (st)) # define sk_OCSP_SINGLERESP_num(st) SKM_sk_num(OCSP_SINGLERESP, (st)) # define sk_OCSP_SINGLERESP_value(st, i) SKM_sk_value(OCSP_SINGLERESP, (st), (i)) # define sk_OCSP_SINGLERESP_set(st, i, val) SKM_sk_set(OCSP_SINGLERESP, (st), (i), (val)) # define sk_OCSP_SINGLERESP_zero(st) SKM_sk_zero(OCSP_SINGLERESP, (st)) # define sk_OCSP_SINGLERESP_push(st, val) SKM_sk_push(OCSP_SINGLERESP, (st), (val)) # define sk_OCSP_SINGLERESP_unshift(st, val) SKM_sk_unshift(OCSP_SINGLERESP, (st), (val)) # define sk_OCSP_SINGLERESP_find(st, val) SKM_sk_find(OCSP_SINGLERESP, (st), (val)) # define sk_OCSP_SINGLERESP_find_ex(st, val) SKM_sk_find_ex(OCSP_SINGLERESP, (st), (val)) # define sk_OCSP_SINGLERESP_delete(st, i) SKM_sk_delete(OCSP_SINGLERESP, (st), (i)) # define sk_OCSP_SINGLERESP_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_SINGLERESP, (st), (ptr)) # define sk_OCSP_SINGLERESP_insert(st, val, i) SKM_sk_insert(OCSP_SINGLERESP, (st), (val), (i)) # define sk_OCSP_SINGLERESP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_SINGLERESP, (st), (cmp)) # define sk_OCSP_SINGLERESP_dup(st) SKM_sk_dup(OCSP_SINGLERESP, st) # define sk_OCSP_SINGLERESP_pop_free(st, free_func) SKM_sk_pop_free(OCSP_SINGLERESP, (st), (free_func)) # define sk_OCSP_SINGLERESP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_SINGLERESP, (st), (copy_func), (free_func)) # define sk_OCSP_SINGLERESP_shift(st) SKM_sk_shift(OCSP_SINGLERESP, (st)) # define sk_OCSP_SINGLERESP_pop(st) SKM_sk_pop(OCSP_SINGLERESP, (st)) # define sk_OCSP_SINGLERESP_sort(st) SKM_sk_sort(OCSP_SINGLERESP, (st)) # define sk_OCSP_SINGLERESP_is_sorted(st) SKM_sk_is_sorted(OCSP_SINGLERESP, (st)) # define sk_PKCS12_SAFEBAG_new(cmp) SKM_sk_new(PKCS12_SAFEBAG, (cmp)) # define sk_PKCS12_SAFEBAG_new_null() SKM_sk_new_null(PKCS12_SAFEBAG) # define sk_PKCS12_SAFEBAG_free(st) SKM_sk_free(PKCS12_SAFEBAG, (st)) # define sk_PKCS12_SAFEBAG_num(st) SKM_sk_num(PKCS12_SAFEBAG, (st)) # define sk_PKCS12_SAFEBAG_value(st, i) SKM_sk_value(PKCS12_SAFEBAG, (st), (i)) # define sk_PKCS12_SAFEBAG_set(st, i, val) SKM_sk_set(PKCS12_SAFEBAG, (st), (i), (val)) # define sk_PKCS12_SAFEBAG_zero(st) SKM_sk_zero(PKCS12_SAFEBAG, (st)) # define sk_PKCS12_SAFEBAG_push(st, val) SKM_sk_push(PKCS12_SAFEBAG, (st), (val)) # define sk_PKCS12_SAFEBAG_unshift(st, val) SKM_sk_unshift(PKCS12_SAFEBAG, (st), (val)) # define sk_PKCS12_SAFEBAG_find(st, val) SKM_sk_find(PKCS12_SAFEBAG, (st), (val)) # define sk_PKCS12_SAFEBAG_find_ex(st, val) SKM_sk_find_ex(PKCS12_SAFEBAG, (st), (val)) # define sk_PKCS12_SAFEBAG_delete(st, i) SKM_sk_delete(PKCS12_SAFEBAG, (st), (i)) # define sk_PKCS12_SAFEBAG_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS12_SAFEBAG, (st), (ptr)) # define sk_PKCS12_SAFEBAG_insert(st, val, i) SKM_sk_insert(PKCS12_SAFEBAG, (st), (val), (i)) # define sk_PKCS12_SAFEBAG_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS12_SAFEBAG, (st), (cmp)) # define sk_PKCS12_SAFEBAG_dup(st) SKM_sk_dup(PKCS12_SAFEBAG, st) # define sk_PKCS12_SAFEBAG_pop_free(st, free_func) SKM_sk_pop_free(PKCS12_SAFEBAG, (st), (free_func)) # define sk_PKCS12_SAFEBAG_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS12_SAFEBAG, (st), (copy_func), (free_func)) # define sk_PKCS12_SAFEBAG_shift(st) SKM_sk_shift(PKCS12_SAFEBAG, (st)) # define sk_PKCS12_SAFEBAG_pop(st) SKM_sk_pop(PKCS12_SAFEBAG, (st)) # define sk_PKCS12_SAFEBAG_sort(st) SKM_sk_sort(PKCS12_SAFEBAG, (st)) # define sk_PKCS12_SAFEBAG_is_sorted(st) SKM_sk_is_sorted(PKCS12_SAFEBAG, (st)) # define sk_PKCS7_new(cmp) SKM_sk_new(PKCS7, (cmp)) # define sk_PKCS7_new_null() SKM_sk_new_null(PKCS7) # define sk_PKCS7_free(st) SKM_sk_free(PKCS7, (st)) # define sk_PKCS7_num(st) SKM_sk_num(PKCS7, (st)) # define sk_PKCS7_value(st, i) SKM_sk_value(PKCS7, (st), (i)) # define sk_PKCS7_set(st, i, val) SKM_sk_set(PKCS7, (st), (i), (val)) # define sk_PKCS7_zero(st) SKM_sk_zero(PKCS7, (st)) # define sk_PKCS7_push(st, val) SKM_sk_push(PKCS7, (st), (val)) # define sk_PKCS7_unshift(st, val) SKM_sk_unshift(PKCS7, (st), (val)) # define sk_PKCS7_find(st, val) SKM_sk_find(PKCS7, (st), (val)) # define sk_PKCS7_find_ex(st, val) SKM_sk_find_ex(PKCS7, (st), (val)) # define sk_PKCS7_delete(st, i) SKM_sk_delete(PKCS7, (st), (i)) # define sk_PKCS7_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7, (st), (ptr)) # define sk_PKCS7_insert(st, val, i) SKM_sk_insert(PKCS7, (st), (val), (i)) # define sk_PKCS7_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7, (st), (cmp)) # define sk_PKCS7_dup(st) SKM_sk_dup(PKCS7, st) # define sk_PKCS7_pop_free(st, free_func) SKM_sk_pop_free(PKCS7, (st), (free_func)) # define sk_PKCS7_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7, (st), (copy_func), (free_func)) # define sk_PKCS7_shift(st) SKM_sk_shift(PKCS7, (st)) # define sk_PKCS7_pop(st) SKM_sk_pop(PKCS7, (st)) # define sk_PKCS7_sort(st) SKM_sk_sort(PKCS7, (st)) # define sk_PKCS7_is_sorted(st) SKM_sk_is_sorted(PKCS7, (st)) # define sk_PKCS7_RECIP_INFO_new(cmp) SKM_sk_new(PKCS7_RECIP_INFO, (cmp)) # define sk_PKCS7_RECIP_INFO_new_null() SKM_sk_new_null(PKCS7_RECIP_INFO) # define sk_PKCS7_RECIP_INFO_free(st) SKM_sk_free(PKCS7_RECIP_INFO, (st)) # define sk_PKCS7_RECIP_INFO_num(st) SKM_sk_num(PKCS7_RECIP_INFO, (st)) # define sk_PKCS7_RECIP_INFO_value(st, i) SKM_sk_value(PKCS7_RECIP_INFO, (st), (i)) # define sk_PKCS7_RECIP_INFO_set(st, i, val) SKM_sk_set(PKCS7_RECIP_INFO, (st), (i), (val)) # define sk_PKCS7_RECIP_INFO_zero(st) SKM_sk_zero(PKCS7_RECIP_INFO, (st)) # define sk_PKCS7_RECIP_INFO_push(st, val) SKM_sk_push(PKCS7_RECIP_INFO, (st), (val)) # define sk_PKCS7_RECIP_INFO_unshift(st, val) SKM_sk_unshift(PKCS7_RECIP_INFO, (st), (val)) # define sk_PKCS7_RECIP_INFO_find(st, val) SKM_sk_find(PKCS7_RECIP_INFO, (st), (val)) # define sk_PKCS7_RECIP_INFO_find_ex(st, val) SKM_sk_find_ex(PKCS7_RECIP_INFO, (st), (val)) # define sk_PKCS7_RECIP_INFO_delete(st, i) SKM_sk_delete(PKCS7_RECIP_INFO, (st), (i)) # define sk_PKCS7_RECIP_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7_RECIP_INFO, (st), (ptr)) # define sk_PKCS7_RECIP_INFO_insert(st, val, i) SKM_sk_insert(PKCS7_RECIP_INFO, (st), (val), (i)) # define sk_PKCS7_RECIP_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_RECIP_INFO, (st), (cmp)) # define sk_PKCS7_RECIP_INFO_dup(st) SKM_sk_dup(PKCS7_RECIP_INFO, st) # define sk_PKCS7_RECIP_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_RECIP_INFO, (st), (free_func)) # define sk_PKCS7_RECIP_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7_RECIP_INFO, (st), (copy_func), (free_func)) # define sk_PKCS7_RECIP_INFO_shift(st) SKM_sk_shift(PKCS7_RECIP_INFO, (st)) # define sk_PKCS7_RECIP_INFO_pop(st) SKM_sk_pop(PKCS7_RECIP_INFO, (st)) # define sk_PKCS7_RECIP_INFO_sort(st) SKM_sk_sort(PKCS7_RECIP_INFO, (st)) # define sk_PKCS7_RECIP_INFO_is_sorted(st) SKM_sk_is_sorted(PKCS7_RECIP_INFO, (st)) # define sk_PKCS7_SIGNER_INFO_new(cmp) SKM_sk_new(PKCS7_SIGNER_INFO, (cmp)) # define sk_PKCS7_SIGNER_INFO_new_null() SKM_sk_new_null(PKCS7_SIGNER_INFO) # define sk_PKCS7_SIGNER_INFO_free(st) SKM_sk_free(PKCS7_SIGNER_INFO, (st)) # define sk_PKCS7_SIGNER_INFO_num(st) SKM_sk_num(PKCS7_SIGNER_INFO, (st)) # define sk_PKCS7_SIGNER_INFO_value(st, i) SKM_sk_value(PKCS7_SIGNER_INFO, (st), (i)) # define sk_PKCS7_SIGNER_INFO_set(st, i, val) SKM_sk_set(PKCS7_SIGNER_INFO, (st), (i), (val)) # define sk_PKCS7_SIGNER_INFO_zero(st) SKM_sk_zero(PKCS7_SIGNER_INFO, (st)) # define sk_PKCS7_SIGNER_INFO_push(st, val) SKM_sk_push(PKCS7_SIGNER_INFO, (st), (val)) # define sk_PKCS7_SIGNER_INFO_unshift(st, val) SKM_sk_unshift(PKCS7_SIGNER_INFO, (st), (val)) # define sk_PKCS7_SIGNER_INFO_find(st, val) SKM_sk_find(PKCS7_SIGNER_INFO, (st), (val)) # define sk_PKCS7_SIGNER_INFO_find_ex(st, val) SKM_sk_find_ex(PKCS7_SIGNER_INFO, (st), (val)) # define sk_PKCS7_SIGNER_INFO_delete(st, i) SKM_sk_delete(PKCS7_SIGNER_INFO, (st), (i)) # define sk_PKCS7_SIGNER_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7_SIGNER_INFO, (st), (ptr)) # define sk_PKCS7_SIGNER_INFO_insert(st, val, i) SKM_sk_insert(PKCS7_SIGNER_INFO, (st), (val), (i)) # define sk_PKCS7_SIGNER_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_SIGNER_INFO, (st), (cmp)) # define sk_PKCS7_SIGNER_INFO_dup(st) SKM_sk_dup(PKCS7_SIGNER_INFO, st) # define sk_PKCS7_SIGNER_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_SIGNER_INFO, (st), (free_func)) # define sk_PKCS7_SIGNER_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7_SIGNER_INFO, (st), (copy_func), (free_func)) # define sk_PKCS7_SIGNER_INFO_shift(st) SKM_sk_shift(PKCS7_SIGNER_INFO, (st)) # define sk_PKCS7_SIGNER_INFO_pop(st) SKM_sk_pop(PKCS7_SIGNER_INFO, (st)) # define sk_PKCS7_SIGNER_INFO_sort(st) SKM_sk_sort(PKCS7_SIGNER_INFO, (st)) # define sk_PKCS7_SIGNER_INFO_is_sorted(st) SKM_sk_is_sorted(PKCS7_SIGNER_INFO, (st)) # define sk_POLICYINFO_new(cmp) SKM_sk_new(POLICYINFO, (cmp)) # define sk_POLICYINFO_new_null() SKM_sk_new_null(POLICYINFO) # define sk_POLICYINFO_free(st) SKM_sk_free(POLICYINFO, (st)) # define sk_POLICYINFO_num(st) SKM_sk_num(POLICYINFO, (st)) # define sk_POLICYINFO_value(st, i) SKM_sk_value(POLICYINFO, (st), (i)) # define sk_POLICYINFO_set(st, i, val) SKM_sk_set(POLICYINFO, (st), (i), (val)) # define sk_POLICYINFO_zero(st) SKM_sk_zero(POLICYINFO, (st)) # define sk_POLICYINFO_push(st, val) SKM_sk_push(POLICYINFO, (st), (val)) # define sk_POLICYINFO_unshift(st, val) SKM_sk_unshift(POLICYINFO, (st), (val)) # define sk_POLICYINFO_find(st, val) SKM_sk_find(POLICYINFO, (st), (val)) # define sk_POLICYINFO_find_ex(st, val) SKM_sk_find_ex(POLICYINFO, (st), (val)) # define sk_POLICYINFO_delete(st, i) SKM_sk_delete(POLICYINFO, (st), (i)) # define sk_POLICYINFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICYINFO, (st), (ptr)) # define sk_POLICYINFO_insert(st, val, i) SKM_sk_insert(POLICYINFO, (st), (val), (i)) # define sk_POLICYINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYINFO, (st), (cmp)) # define sk_POLICYINFO_dup(st) SKM_sk_dup(POLICYINFO, st) # define sk_POLICYINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYINFO, (st), (free_func)) # define sk_POLICYINFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICYINFO, (st), (copy_func), (free_func)) # define sk_POLICYINFO_shift(st) SKM_sk_shift(POLICYINFO, (st)) # define sk_POLICYINFO_pop(st) SKM_sk_pop(POLICYINFO, (st)) # define sk_POLICYINFO_sort(st) SKM_sk_sort(POLICYINFO, (st)) # define sk_POLICYINFO_is_sorted(st) SKM_sk_is_sorted(POLICYINFO, (st)) # define sk_POLICYQUALINFO_new(cmp) SKM_sk_new(POLICYQUALINFO, (cmp)) # define sk_POLICYQUALINFO_new_null() SKM_sk_new_null(POLICYQUALINFO) # define sk_POLICYQUALINFO_free(st) SKM_sk_free(POLICYQUALINFO, (st)) # define sk_POLICYQUALINFO_num(st) SKM_sk_num(POLICYQUALINFO, (st)) # define sk_POLICYQUALINFO_value(st, i) SKM_sk_value(POLICYQUALINFO, (st), (i)) # define sk_POLICYQUALINFO_set(st, i, val) SKM_sk_set(POLICYQUALINFO, (st), (i), (val)) # define sk_POLICYQUALINFO_zero(st) SKM_sk_zero(POLICYQUALINFO, (st)) # define sk_POLICYQUALINFO_push(st, val) SKM_sk_push(POLICYQUALINFO, (st), (val)) # define sk_POLICYQUALINFO_unshift(st, val) SKM_sk_unshift(POLICYQUALINFO, (st), (val)) # define sk_POLICYQUALINFO_find(st, val) SKM_sk_find(POLICYQUALINFO, (st), (val)) # define sk_POLICYQUALINFO_find_ex(st, val) SKM_sk_find_ex(POLICYQUALINFO, (st), (val)) # define sk_POLICYQUALINFO_delete(st, i) SKM_sk_delete(POLICYQUALINFO, (st), (i)) # define sk_POLICYQUALINFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICYQUALINFO, (st), (ptr)) # define sk_POLICYQUALINFO_insert(st, val, i) SKM_sk_insert(POLICYQUALINFO, (st), (val), (i)) # define sk_POLICYQUALINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYQUALINFO, (st), (cmp)) # define sk_POLICYQUALINFO_dup(st) SKM_sk_dup(POLICYQUALINFO, st) # define sk_POLICYQUALINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYQUALINFO, (st), (free_func)) # define sk_POLICYQUALINFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICYQUALINFO, (st), (copy_func), (free_func)) # define sk_POLICYQUALINFO_shift(st) SKM_sk_shift(POLICYQUALINFO, (st)) # define sk_POLICYQUALINFO_pop(st) SKM_sk_pop(POLICYQUALINFO, (st)) # define sk_POLICYQUALINFO_sort(st) SKM_sk_sort(POLICYQUALINFO, (st)) # define sk_POLICYQUALINFO_is_sorted(st) SKM_sk_is_sorted(POLICYQUALINFO, (st)) # define sk_POLICY_MAPPING_new(cmp) SKM_sk_new(POLICY_MAPPING, (cmp)) # define sk_POLICY_MAPPING_new_null() SKM_sk_new_null(POLICY_MAPPING) # define sk_POLICY_MAPPING_free(st) SKM_sk_free(POLICY_MAPPING, (st)) # define sk_POLICY_MAPPING_num(st) SKM_sk_num(POLICY_MAPPING, (st)) # define sk_POLICY_MAPPING_value(st, i) SKM_sk_value(POLICY_MAPPING, (st), (i)) # define sk_POLICY_MAPPING_set(st, i, val) SKM_sk_set(POLICY_MAPPING, (st), (i), (val)) # define sk_POLICY_MAPPING_zero(st) SKM_sk_zero(POLICY_MAPPING, (st)) # define sk_POLICY_MAPPING_push(st, val) SKM_sk_push(POLICY_MAPPING, (st), (val)) # define sk_POLICY_MAPPING_unshift(st, val) SKM_sk_unshift(POLICY_MAPPING, (st), (val)) # define sk_POLICY_MAPPING_find(st, val) SKM_sk_find(POLICY_MAPPING, (st), (val)) # define sk_POLICY_MAPPING_find_ex(st, val) SKM_sk_find_ex(POLICY_MAPPING, (st), (val)) # define sk_POLICY_MAPPING_delete(st, i) SKM_sk_delete(POLICY_MAPPING, (st), (i)) # define sk_POLICY_MAPPING_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICY_MAPPING, (st), (ptr)) # define sk_POLICY_MAPPING_insert(st, val, i) SKM_sk_insert(POLICY_MAPPING, (st), (val), (i)) # define sk_POLICY_MAPPING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICY_MAPPING, (st), (cmp)) # define sk_POLICY_MAPPING_dup(st) SKM_sk_dup(POLICY_MAPPING, st) # define sk_POLICY_MAPPING_pop_free(st, free_func) SKM_sk_pop_free(POLICY_MAPPING, (st), (free_func)) # define sk_POLICY_MAPPING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICY_MAPPING, (st), (copy_func), (free_func)) # define sk_POLICY_MAPPING_shift(st) SKM_sk_shift(POLICY_MAPPING, (st)) # define sk_POLICY_MAPPING_pop(st) SKM_sk_pop(POLICY_MAPPING, (st)) # define sk_POLICY_MAPPING_sort(st) SKM_sk_sort(POLICY_MAPPING, (st)) # define sk_POLICY_MAPPING_is_sorted(st) SKM_sk_is_sorted(POLICY_MAPPING, (st)) # define sk_SCT_new(cmp) SKM_sk_new(SCT, (cmp)) # define sk_SCT_new_null() SKM_sk_new_null(SCT) # define sk_SCT_free(st) SKM_sk_free(SCT, (st)) # define sk_SCT_num(st) SKM_sk_num(SCT, (st)) # define sk_SCT_value(st, i) SKM_sk_value(SCT, (st), (i)) # define sk_SCT_set(st, i, val) SKM_sk_set(SCT, (st), (i), (val)) # define sk_SCT_zero(st) SKM_sk_zero(SCT, (st)) # define sk_SCT_push(st, val) SKM_sk_push(SCT, (st), (val)) # define sk_SCT_unshift(st, val) SKM_sk_unshift(SCT, (st), (val)) # define sk_SCT_find(st, val) SKM_sk_find(SCT, (st), (val)) # define sk_SCT_find_ex(st, val) SKM_sk_find_ex(SCT, (st), (val)) # define sk_SCT_delete(st, i) SKM_sk_delete(SCT, (st), (i)) # define sk_SCT_delete_ptr(st, ptr) SKM_sk_delete_ptr(SCT, (st), (ptr)) # define sk_SCT_insert(st, val, i) SKM_sk_insert(SCT, (st), (val), (i)) # define sk_SCT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SCT, (st), (cmp)) # define sk_SCT_dup(st) SKM_sk_dup(SCT, st) # define sk_SCT_pop_free(st, free_func) SKM_sk_pop_free(SCT, (st), (free_func)) # define sk_SCT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SCT, (st), (copy_func), (free_func)) # define sk_SCT_shift(st) SKM_sk_shift(SCT, (st)) # define sk_SCT_pop(st) SKM_sk_pop(SCT, (st)) # define sk_SCT_sort(st) SKM_sk_sort(SCT, (st)) # define sk_SCT_is_sorted(st) SKM_sk_is_sorted(SCT, (st)) # define sk_SRP_gN_new(cmp) SKM_sk_new(SRP_gN, (cmp)) # define sk_SRP_gN_new_null() SKM_sk_new_null(SRP_gN) # define sk_SRP_gN_free(st) SKM_sk_free(SRP_gN, (st)) # define sk_SRP_gN_num(st) SKM_sk_num(SRP_gN, (st)) # define sk_SRP_gN_value(st, i) SKM_sk_value(SRP_gN, (st), (i)) # define sk_SRP_gN_set(st, i, val) SKM_sk_set(SRP_gN, (st), (i), (val)) # define sk_SRP_gN_zero(st) SKM_sk_zero(SRP_gN, (st)) # define sk_SRP_gN_push(st, val) SKM_sk_push(SRP_gN, (st), (val)) # define sk_SRP_gN_unshift(st, val) SKM_sk_unshift(SRP_gN, (st), (val)) # define sk_SRP_gN_find(st, val) SKM_sk_find(SRP_gN, (st), (val)) # define sk_SRP_gN_find_ex(st, val) SKM_sk_find_ex(SRP_gN, (st), (val)) # define sk_SRP_gN_delete(st, i) SKM_sk_delete(SRP_gN, (st), (i)) # define sk_SRP_gN_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_gN, (st), (ptr)) # define sk_SRP_gN_insert(st, val, i) SKM_sk_insert(SRP_gN, (st), (val), (i)) # define sk_SRP_gN_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_gN, (st), (cmp)) # define sk_SRP_gN_dup(st) SKM_sk_dup(SRP_gN, st) # define sk_SRP_gN_pop_free(st, free_func) SKM_sk_pop_free(SRP_gN, (st), (free_func)) # define sk_SRP_gN_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_gN, (st), (copy_func), (free_func)) # define sk_SRP_gN_shift(st) SKM_sk_shift(SRP_gN, (st)) # define sk_SRP_gN_pop(st) SKM_sk_pop(SRP_gN, (st)) # define sk_SRP_gN_sort(st) SKM_sk_sort(SRP_gN, (st)) # define sk_SRP_gN_is_sorted(st) SKM_sk_is_sorted(SRP_gN, (st)) # define sk_SRP_gN_cache_new(cmp) SKM_sk_new(SRP_gN_cache, (cmp)) # define sk_SRP_gN_cache_new_null() SKM_sk_new_null(SRP_gN_cache) # define sk_SRP_gN_cache_free(st) SKM_sk_free(SRP_gN_cache, (st)) # define sk_SRP_gN_cache_num(st) SKM_sk_num(SRP_gN_cache, (st)) # define sk_SRP_gN_cache_value(st, i) SKM_sk_value(SRP_gN_cache, (st), (i)) # define sk_SRP_gN_cache_set(st, i, val) SKM_sk_set(SRP_gN_cache, (st), (i), (val)) # define sk_SRP_gN_cache_zero(st) SKM_sk_zero(SRP_gN_cache, (st)) # define sk_SRP_gN_cache_push(st, val) SKM_sk_push(SRP_gN_cache, (st), (val)) # define sk_SRP_gN_cache_unshift(st, val) SKM_sk_unshift(SRP_gN_cache, (st), (val)) # define sk_SRP_gN_cache_find(st, val) SKM_sk_find(SRP_gN_cache, (st), (val)) # define sk_SRP_gN_cache_find_ex(st, val) SKM_sk_find_ex(SRP_gN_cache, (st), (val)) # define sk_SRP_gN_cache_delete(st, i) SKM_sk_delete(SRP_gN_cache, (st), (i)) # define sk_SRP_gN_cache_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_gN_cache, (st), (ptr)) # define sk_SRP_gN_cache_insert(st, val, i) SKM_sk_insert(SRP_gN_cache, (st), (val), (i)) # define sk_SRP_gN_cache_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_gN_cache, (st), (cmp)) # define sk_SRP_gN_cache_dup(st) SKM_sk_dup(SRP_gN_cache, st) # define sk_SRP_gN_cache_pop_free(st, free_func) SKM_sk_pop_free(SRP_gN_cache, (st), (free_func)) # define sk_SRP_gN_cache_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_gN_cache, (st), (copy_func), (free_func)) # define sk_SRP_gN_cache_shift(st) SKM_sk_shift(SRP_gN_cache, (st)) # define sk_SRP_gN_cache_pop(st) SKM_sk_pop(SRP_gN_cache, (st)) # define sk_SRP_gN_cache_sort(st) SKM_sk_sort(SRP_gN_cache, (st)) # define sk_SRP_gN_cache_is_sorted(st) SKM_sk_is_sorted(SRP_gN_cache, (st)) # define sk_SRP_user_pwd_new(cmp) SKM_sk_new(SRP_user_pwd, (cmp)) # define sk_SRP_user_pwd_new_null() SKM_sk_new_null(SRP_user_pwd) # define sk_SRP_user_pwd_free(st) SKM_sk_free(SRP_user_pwd, (st)) # define sk_SRP_user_pwd_num(st) SKM_sk_num(SRP_user_pwd, (st)) # define sk_SRP_user_pwd_value(st, i) SKM_sk_value(SRP_user_pwd, (st), (i)) # define sk_SRP_user_pwd_set(st, i, val) SKM_sk_set(SRP_user_pwd, (st), (i), (val)) # define sk_SRP_user_pwd_zero(st) SKM_sk_zero(SRP_user_pwd, (st)) # define sk_SRP_user_pwd_push(st, val) SKM_sk_push(SRP_user_pwd, (st), (val)) # define sk_SRP_user_pwd_unshift(st, val) SKM_sk_unshift(SRP_user_pwd, (st), (val)) # define sk_SRP_user_pwd_find(st, val) SKM_sk_find(SRP_user_pwd, (st), (val)) # define sk_SRP_user_pwd_find_ex(st, val) SKM_sk_find_ex(SRP_user_pwd, (st), (val)) # define sk_SRP_user_pwd_delete(st, i) SKM_sk_delete(SRP_user_pwd, (st), (i)) # define sk_SRP_user_pwd_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_user_pwd, (st), (ptr)) # define sk_SRP_user_pwd_insert(st, val, i) SKM_sk_insert(SRP_user_pwd, (st), (val), (i)) # define sk_SRP_user_pwd_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_user_pwd, (st), (cmp)) # define sk_SRP_user_pwd_dup(st) SKM_sk_dup(SRP_user_pwd, st) # define sk_SRP_user_pwd_pop_free(st, free_func) SKM_sk_pop_free(SRP_user_pwd, (st), (free_func)) # define sk_SRP_user_pwd_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_user_pwd, (st), (copy_func), (free_func)) # define sk_SRP_user_pwd_shift(st) SKM_sk_shift(SRP_user_pwd, (st)) # define sk_SRP_user_pwd_pop(st) SKM_sk_pop(SRP_user_pwd, (st)) # define sk_SRP_user_pwd_sort(st) SKM_sk_sort(SRP_user_pwd, (st)) # define sk_SRP_user_pwd_is_sorted(st) SKM_sk_is_sorted(SRP_user_pwd, (st)) # define sk_SRTP_PROTECTION_PROFILE_new(cmp) SKM_sk_new(SRTP_PROTECTION_PROFILE, (cmp)) # define sk_SRTP_PROTECTION_PROFILE_new_null() SKM_sk_new_null(SRTP_PROTECTION_PROFILE) # define sk_SRTP_PROTECTION_PROFILE_free(st) SKM_sk_free(SRTP_PROTECTION_PROFILE, (st)) # define sk_SRTP_PROTECTION_PROFILE_num(st) SKM_sk_num(SRTP_PROTECTION_PROFILE, (st)) # define sk_SRTP_PROTECTION_PROFILE_value(st, i) SKM_sk_value(SRTP_PROTECTION_PROFILE, (st), (i)) # define sk_SRTP_PROTECTION_PROFILE_set(st, i, val) SKM_sk_set(SRTP_PROTECTION_PROFILE, (st), (i), (val)) # define sk_SRTP_PROTECTION_PROFILE_zero(st) SKM_sk_zero(SRTP_PROTECTION_PROFILE, (st)) # define sk_SRTP_PROTECTION_PROFILE_push(st, val) SKM_sk_push(SRTP_PROTECTION_PROFILE, (st), (val)) # define sk_SRTP_PROTECTION_PROFILE_unshift(st, val) SKM_sk_unshift(SRTP_PROTECTION_PROFILE, (st), (val)) # define sk_SRTP_PROTECTION_PROFILE_find(st, val) SKM_sk_find(SRTP_PROTECTION_PROFILE, (st), (val)) # define sk_SRTP_PROTECTION_PROFILE_find_ex(st, val) SKM_sk_find_ex(SRTP_PROTECTION_PROFILE, (st), (val)) # define sk_SRTP_PROTECTION_PROFILE_delete(st, i) SKM_sk_delete(SRTP_PROTECTION_PROFILE, (st), (i)) # define sk_SRTP_PROTECTION_PROFILE_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRTP_PROTECTION_PROFILE, (st), (ptr)) # define sk_SRTP_PROTECTION_PROFILE_insert(st, val, i) SKM_sk_insert(SRTP_PROTECTION_PROFILE, (st), (val), (i)) # define sk_SRTP_PROTECTION_PROFILE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRTP_PROTECTION_PROFILE, (st), (cmp)) # define sk_SRTP_PROTECTION_PROFILE_dup(st) SKM_sk_dup(SRTP_PROTECTION_PROFILE, st) # define sk_SRTP_PROTECTION_PROFILE_pop_free(st, free_func) SKM_sk_pop_free(SRTP_PROTECTION_PROFILE, (st), (free_func)) # define sk_SRTP_PROTECTION_PROFILE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRTP_PROTECTION_PROFILE, (st), (copy_func), (free_func)) # define sk_SRTP_PROTECTION_PROFILE_shift(st) SKM_sk_shift(SRTP_PROTECTION_PROFILE, (st)) # define sk_SRTP_PROTECTION_PROFILE_pop(st) SKM_sk_pop(SRTP_PROTECTION_PROFILE, (st)) # define sk_SRTP_PROTECTION_PROFILE_sort(st) SKM_sk_sort(SRTP_PROTECTION_PROFILE, (st)) # define sk_SRTP_PROTECTION_PROFILE_is_sorted(st) SKM_sk_is_sorted(SRTP_PROTECTION_PROFILE, (st)) # define sk_SSL_CIPHER_new(cmp) SKM_sk_new(SSL_CIPHER, (cmp)) # define sk_SSL_CIPHER_new_null() SKM_sk_new_null(SSL_CIPHER) # define sk_SSL_CIPHER_free(st) SKM_sk_free(SSL_CIPHER, (st)) # define sk_SSL_CIPHER_num(st) SKM_sk_num(SSL_CIPHER, (st)) # define sk_SSL_CIPHER_value(st, i) SKM_sk_value(SSL_CIPHER, (st), (i)) # define sk_SSL_CIPHER_set(st, i, val) SKM_sk_set(SSL_CIPHER, (st), (i), (val)) # define sk_SSL_CIPHER_zero(st) SKM_sk_zero(SSL_CIPHER, (st)) # define sk_SSL_CIPHER_push(st, val) SKM_sk_push(SSL_CIPHER, (st), (val)) # define sk_SSL_CIPHER_unshift(st, val) SKM_sk_unshift(SSL_CIPHER, (st), (val)) # define sk_SSL_CIPHER_find(st, val) SKM_sk_find(SSL_CIPHER, (st), (val)) # define sk_SSL_CIPHER_find_ex(st, val) SKM_sk_find_ex(SSL_CIPHER, (st), (val)) # define sk_SSL_CIPHER_delete(st, i) SKM_sk_delete(SSL_CIPHER, (st), (i)) # define sk_SSL_CIPHER_delete_ptr(st, ptr) SKM_sk_delete_ptr(SSL_CIPHER, (st), (ptr)) # define sk_SSL_CIPHER_insert(st, val, i) SKM_sk_insert(SSL_CIPHER, (st), (val), (i)) # define sk_SSL_CIPHER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_CIPHER, (st), (cmp)) # define sk_SSL_CIPHER_dup(st) SKM_sk_dup(SSL_CIPHER, st) # define sk_SSL_CIPHER_pop_free(st, free_func) SKM_sk_pop_free(SSL_CIPHER, (st), (free_func)) # define sk_SSL_CIPHER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SSL_CIPHER, (st), (copy_func), (free_func)) # define sk_SSL_CIPHER_shift(st) SKM_sk_shift(SSL_CIPHER, (st)) # define sk_SSL_CIPHER_pop(st) SKM_sk_pop(SSL_CIPHER, (st)) # define sk_SSL_CIPHER_sort(st) SKM_sk_sort(SSL_CIPHER, (st)) # define sk_SSL_CIPHER_is_sorted(st) SKM_sk_is_sorted(SSL_CIPHER, (st)) # define sk_SSL_COMP_new(cmp) SKM_sk_new(SSL_COMP, (cmp)) # define sk_SSL_COMP_new_null() SKM_sk_new_null(SSL_COMP) # define sk_SSL_COMP_free(st) SKM_sk_free(SSL_COMP, (st)) # define sk_SSL_COMP_num(st) SKM_sk_num(SSL_COMP, (st)) # define sk_SSL_COMP_value(st, i) SKM_sk_value(SSL_COMP, (st), (i)) # define sk_SSL_COMP_set(st, i, val) SKM_sk_set(SSL_COMP, (st), (i), (val)) # define sk_SSL_COMP_zero(st) SKM_sk_zero(SSL_COMP, (st)) # define sk_SSL_COMP_push(st, val) SKM_sk_push(SSL_COMP, (st), (val)) # define sk_SSL_COMP_unshift(st, val) SKM_sk_unshift(SSL_COMP, (st), (val)) # define sk_SSL_COMP_find(st, val) SKM_sk_find(SSL_COMP, (st), (val)) # define sk_SSL_COMP_find_ex(st, val) SKM_sk_find_ex(SSL_COMP, (st), (val)) # define sk_SSL_COMP_delete(st, i) SKM_sk_delete(SSL_COMP, (st), (i)) # define sk_SSL_COMP_delete_ptr(st, ptr) SKM_sk_delete_ptr(SSL_COMP, (st), (ptr)) # define sk_SSL_COMP_insert(st, val, i) SKM_sk_insert(SSL_COMP, (st), (val), (i)) # define sk_SSL_COMP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_COMP, (st), (cmp)) # define sk_SSL_COMP_dup(st) SKM_sk_dup(SSL_COMP, st) # define sk_SSL_COMP_pop_free(st, free_func) SKM_sk_pop_free(SSL_COMP, (st), (free_func)) # define sk_SSL_COMP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SSL_COMP, (st), (copy_func), (free_func)) # define sk_SSL_COMP_shift(st) SKM_sk_shift(SSL_COMP, (st)) # define sk_SSL_COMP_pop(st) SKM_sk_pop(SSL_COMP, (st)) # define sk_SSL_COMP_sort(st) SKM_sk_sort(SSL_COMP, (st)) # define sk_SSL_COMP_is_sorted(st) SKM_sk_is_sorted(SSL_COMP, (st)) # define sk_STACK_OF_X509_NAME_ENTRY_new(cmp) SKM_sk_new(STACK_OF_X509_NAME_ENTRY, (cmp)) # define sk_STACK_OF_X509_NAME_ENTRY_new_null() SKM_sk_new_null(STACK_OF_X509_NAME_ENTRY) # define sk_STACK_OF_X509_NAME_ENTRY_free(st) SKM_sk_free(STACK_OF_X509_NAME_ENTRY, (st)) # define sk_STACK_OF_X509_NAME_ENTRY_num(st) SKM_sk_num(STACK_OF_X509_NAME_ENTRY, (st)) # define sk_STACK_OF_X509_NAME_ENTRY_value(st, i) SKM_sk_value(STACK_OF_X509_NAME_ENTRY, (st), (i)) # define sk_STACK_OF_X509_NAME_ENTRY_set(st, i, val) SKM_sk_set(STACK_OF_X509_NAME_ENTRY, (st), (i), (val)) # define sk_STACK_OF_X509_NAME_ENTRY_zero(st) SKM_sk_zero(STACK_OF_X509_NAME_ENTRY, (st)) # define sk_STACK_OF_X509_NAME_ENTRY_push(st, val) SKM_sk_push(STACK_OF_X509_NAME_ENTRY, (st), (val)) # define sk_STACK_OF_X509_NAME_ENTRY_unshift(st, val) SKM_sk_unshift(STACK_OF_X509_NAME_ENTRY, (st), (val)) # define sk_STACK_OF_X509_NAME_ENTRY_find(st, val) SKM_sk_find(STACK_OF_X509_NAME_ENTRY, (st), (val)) # define sk_STACK_OF_X509_NAME_ENTRY_find_ex(st, val) SKM_sk_find_ex(STACK_OF_X509_NAME_ENTRY, (st), (val)) # define sk_STACK_OF_X509_NAME_ENTRY_delete(st, i) SKM_sk_delete(STACK_OF_X509_NAME_ENTRY, (st), (i)) # define sk_STACK_OF_X509_NAME_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(STACK_OF_X509_NAME_ENTRY, (st), (ptr)) # define sk_STACK_OF_X509_NAME_ENTRY_insert(st, val, i) SKM_sk_insert(STACK_OF_X509_NAME_ENTRY, (st), (val), (i)) # define sk_STACK_OF_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STACK_OF_X509_NAME_ENTRY, (st), (cmp)) # define sk_STACK_OF_X509_NAME_ENTRY_dup(st) SKM_sk_dup(STACK_OF_X509_NAME_ENTRY, st) # define sk_STACK_OF_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(STACK_OF_X509_NAME_ENTRY, (st), (free_func)) # define sk_STACK_OF_X509_NAME_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STACK_OF_X509_NAME_ENTRY, (st), (copy_func), (free_func)) # define sk_STACK_OF_X509_NAME_ENTRY_shift(st) SKM_sk_shift(STACK_OF_X509_NAME_ENTRY, (st)) # define sk_STACK_OF_X509_NAME_ENTRY_pop(st) SKM_sk_pop(STACK_OF_X509_NAME_ENTRY, (st)) # define sk_STACK_OF_X509_NAME_ENTRY_sort(st) SKM_sk_sort(STACK_OF_X509_NAME_ENTRY, (st)) # define sk_STACK_OF_X509_NAME_ENTRY_is_sorted(st) SKM_sk_is_sorted(STACK_OF_X509_NAME_ENTRY, (st)) # define sk_STORE_ATTR_INFO_new(cmp) SKM_sk_new(STORE_ATTR_INFO, (cmp)) # define sk_STORE_ATTR_INFO_new_null() SKM_sk_new_null(STORE_ATTR_INFO) # define sk_STORE_ATTR_INFO_free(st) SKM_sk_free(STORE_ATTR_INFO, (st)) # define sk_STORE_ATTR_INFO_num(st) SKM_sk_num(STORE_ATTR_INFO, (st)) # define sk_STORE_ATTR_INFO_value(st, i) SKM_sk_value(STORE_ATTR_INFO, (st), (i)) # define sk_STORE_ATTR_INFO_set(st, i, val) SKM_sk_set(STORE_ATTR_INFO, (st), (i), (val)) # define sk_STORE_ATTR_INFO_zero(st) SKM_sk_zero(STORE_ATTR_INFO, (st)) # define sk_STORE_ATTR_INFO_push(st, val) SKM_sk_push(STORE_ATTR_INFO, (st), (val)) # define sk_STORE_ATTR_INFO_unshift(st, val) SKM_sk_unshift(STORE_ATTR_INFO, (st), (val)) # define sk_STORE_ATTR_INFO_find(st, val) SKM_sk_find(STORE_ATTR_INFO, (st), (val)) # define sk_STORE_ATTR_INFO_find_ex(st, val) SKM_sk_find_ex(STORE_ATTR_INFO, (st), (val)) # define sk_STORE_ATTR_INFO_delete(st, i) SKM_sk_delete(STORE_ATTR_INFO, (st), (i)) # define sk_STORE_ATTR_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(STORE_ATTR_INFO, (st), (ptr)) # define sk_STORE_ATTR_INFO_insert(st, val, i) SKM_sk_insert(STORE_ATTR_INFO, (st), (val), (i)) # define sk_STORE_ATTR_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STORE_ATTR_INFO, (st), (cmp)) # define sk_STORE_ATTR_INFO_dup(st) SKM_sk_dup(STORE_ATTR_INFO, st) # define sk_STORE_ATTR_INFO_pop_free(st, free_func) SKM_sk_pop_free(STORE_ATTR_INFO, (st), (free_func)) # define sk_STORE_ATTR_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STORE_ATTR_INFO, (st), (copy_func), (free_func)) # define sk_STORE_ATTR_INFO_shift(st) SKM_sk_shift(STORE_ATTR_INFO, (st)) # define sk_STORE_ATTR_INFO_pop(st) SKM_sk_pop(STORE_ATTR_INFO, (st)) # define sk_STORE_ATTR_INFO_sort(st) SKM_sk_sort(STORE_ATTR_INFO, (st)) # define sk_STORE_ATTR_INFO_is_sorted(st) SKM_sk_is_sorted(STORE_ATTR_INFO, (st)) # define sk_STORE_OBJECT_new(cmp) SKM_sk_new(STORE_OBJECT, (cmp)) # define sk_STORE_OBJECT_new_null() SKM_sk_new_null(STORE_OBJECT) # define sk_STORE_OBJECT_free(st) SKM_sk_free(STORE_OBJECT, (st)) # define sk_STORE_OBJECT_num(st) SKM_sk_num(STORE_OBJECT, (st)) # define sk_STORE_OBJECT_value(st, i) SKM_sk_value(STORE_OBJECT, (st), (i)) # define sk_STORE_OBJECT_set(st, i, val) SKM_sk_set(STORE_OBJECT, (st), (i), (val)) # define sk_STORE_OBJECT_zero(st) SKM_sk_zero(STORE_OBJECT, (st)) # define sk_STORE_OBJECT_push(st, val) SKM_sk_push(STORE_OBJECT, (st), (val)) # define sk_STORE_OBJECT_unshift(st, val) SKM_sk_unshift(STORE_OBJECT, (st), (val)) # define sk_STORE_OBJECT_find(st, val) SKM_sk_find(STORE_OBJECT, (st), (val)) # define sk_STORE_OBJECT_find_ex(st, val) SKM_sk_find_ex(STORE_OBJECT, (st), (val)) # define sk_STORE_OBJECT_delete(st, i) SKM_sk_delete(STORE_OBJECT, (st), (i)) # define sk_STORE_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(STORE_OBJECT, (st), (ptr)) # define sk_STORE_OBJECT_insert(st, val, i) SKM_sk_insert(STORE_OBJECT, (st), (val), (i)) # define sk_STORE_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STORE_OBJECT, (st), (cmp)) # define sk_STORE_OBJECT_dup(st) SKM_sk_dup(STORE_OBJECT, st) # define sk_STORE_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(STORE_OBJECT, (st), (free_func)) # define sk_STORE_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STORE_OBJECT, (st), (copy_func), (free_func)) # define sk_STORE_OBJECT_shift(st) SKM_sk_shift(STORE_OBJECT, (st)) # define sk_STORE_OBJECT_pop(st) SKM_sk_pop(STORE_OBJECT, (st)) # define sk_STORE_OBJECT_sort(st) SKM_sk_sort(STORE_OBJECT, (st)) # define sk_STORE_OBJECT_is_sorted(st) SKM_sk_is_sorted(STORE_OBJECT, (st)) # define sk_SXNETID_new(cmp) SKM_sk_new(SXNETID, (cmp)) # define sk_SXNETID_new_null() SKM_sk_new_null(SXNETID) # define sk_SXNETID_free(st) SKM_sk_free(SXNETID, (st)) # define sk_SXNETID_num(st) SKM_sk_num(SXNETID, (st)) # define sk_SXNETID_value(st, i) SKM_sk_value(SXNETID, (st), (i)) # define sk_SXNETID_set(st, i, val) SKM_sk_set(SXNETID, (st), (i), (val)) # define sk_SXNETID_zero(st) SKM_sk_zero(SXNETID, (st)) # define sk_SXNETID_push(st, val) SKM_sk_push(SXNETID, (st), (val)) # define sk_SXNETID_unshift(st, val) SKM_sk_unshift(SXNETID, (st), (val)) # define sk_SXNETID_find(st, val) SKM_sk_find(SXNETID, (st), (val)) # define sk_SXNETID_find_ex(st, val) SKM_sk_find_ex(SXNETID, (st), (val)) # define sk_SXNETID_delete(st, i) SKM_sk_delete(SXNETID, (st), (i)) # define sk_SXNETID_delete_ptr(st, ptr) SKM_sk_delete_ptr(SXNETID, (st), (ptr)) # define sk_SXNETID_insert(st, val, i) SKM_sk_insert(SXNETID, (st), (val), (i)) # define sk_SXNETID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SXNETID, (st), (cmp)) # define sk_SXNETID_dup(st) SKM_sk_dup(SXNETID, st) # define sk_SXNETID_pop_free(st, free_func) SKM_sk_pop_free(SXNETID, (st), (free_func)) # define sk_SXNETID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SXNETID, (st), (copy_func), (free_func)) # define sk_SXNETID_shift(st) SKM_sk_shift(SXNETID, (st)) # define sk_SXNETID_pop(st) SKM_sk_pop(SXNETID, (st)) # define sk_SXNETID_sort(st) SKM_sk_sort(SXNETID, (st)) # define sk_SXNETID_is_sorted(st) SKM_sk_is_sorted(SXNETID, (st)) # define sk_UI_STRING_new(cmp) SKM_sk_new(UI_STRING, (cmp)) # define sk_UI_STRING_new_null() SKM_sk_new_null(UI_STRING) # define sk_UI_STRING_free(st) SKM_sk_free(UI_STRING, (st)) # define sk_UI_STRING_num(st) SKM_sk_num(UI_STRING, (st)) # define sk_UI_STRING_value(st, i) SKM_sk_value(UI_STRING, (st), (i)) # define sk_UI_STRING_set(st, i, val) SKM_sk_set(UI_STRING, (st), (i), (val)) # define sk_UI_STRING_zero(st) SKM_sk_zero(UI_STRING, (st)) # define sk_UI_STRING_push(st, val) SKM_sk_push(UI_STRING, (st), (val)) # define sk_UI_STRING_unshift(st, val) SKM_sk_unshift(UI_STRING, (st), (val)) # define sk_UI_STRING_find(st, val) SKM_sk_find(UI_STRING, (st), (val)) # define sk_UI_STRING_find_ex(st, val) SKM_sk_find_ex(UI_STRING, (st), (val)) # define sk_UI_STRING_delete(st, i) SKM_sk_delete(UI_STRING, (st), (i)) # define sk_UI_STRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(UI_STRING, (st), (ptr)) # define sk_UI_STRING_insert(st, val, i) SKM_sk_insert(UI_STRING, (st), (val), (i)) # define sk_UI_STRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(UI_STRING, (st), (cmp)) # define sk_UI_STRING_dup(st) SKM_sk_dup(UI_STRING, st) # define sk_UI_STRING_pop_free(st, free_func) SKM_sk_pop_free(UI_STRING, (st), (free_func)) # define sk_UI_STRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(UI_STRING, (st), (copy_func), (free_func)) # define sk_UI_STRING_shift(st) SKM_sk_shift(UI_STRING, (st)) # define sk_UI_STRING_pop(st) SKM_sk_pop(UI_STRING, (st)) # define sk_UI_STRING_sort(st) SKM_sk_sort(UI_STRING, (st)) # define sk_UI_STRING_is_sorted(st) SKM_sk_is_sorted(UI_STRING, (st)) # define sk_X509_new(cmp) SKM_sk_new(X509, (cmp)) # define sk_X509_new_null() SKM_sk_new_null(X509) # define sk_X509_free(st) SKM_sk_free(X509, (st)) # define sk_X509_num(st) SKM_sk_num(X509, (st)) # define sk_X509_value(st, i) SKM_sk_value(X509, (st), (i)) # define sk_X509_set(st, i, val) SKM_sk_set(X509, (st), (i), (val)) # define sk_X509_zero(st) SKM_sk_zero(X509, (st)) # define sk_X509_push(st, val) SKM_sk_push(X509, (st), (val)) # define sk_X509_unshift(st, val) SKM_sk_unshift(X509, (st), (val)) # define sk_X509_find(st, val) SKM_sk_find(X509, (st), (val)) # define sk_X509_find_ex(st, val) SKM_sk_find_ex(X509, (st), (val)) # define sk_X509_delete(st, i) SKM_sk_delete(X509, (st), (i)) # define sk_X509_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509, (st), (ptr)) # define sk_X509_insert(st, val, i) SKM_sk_insert(X509, (st), (val), (i)) # define sk_X509_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509, (st), (cmp)) # define sk_X509_dup(st) SKM_sk_dup(X509, st) # define sk_X509_pop_free(st, free_func) SKM_sk_pop_free(X509, (st), (free_func)) # define sk_X509_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509, (st), (copy_func), (free_func)) # define sk_X509_shift(st) SKM_sk_shift(X509, (st)) # define sk_X509_pop(st) SKM_sk_pop(X509, (st)) # define sk_X509_sort(st) SKM_sk_sort(X509, (st)) # define sk_X509_is_sorted(st) SKM_sk_is_sorted(X509, (st)) # define sk_X509V3_EXT_METHOD_new(cmp) SKM_sk_new(X509V3_EXT_METHOD, (cmp)) # define sk_X509V3_EXT_METHOD_new_null() SKM_sk_new_null(X509V3_EXT_METHOD) # define sk_X509V3_EXT_METHOD_free(st) SKM_sk_free(X509V3_EXT_METHOD, (st)) # define sk_X509V3_EXT_METHOD_num(st) SKM_sk_num(X509V3_EXT_METHOD, (st)) # define sk_X509V3_EXT_METHOD_value(st, i) SKM_sk_value(X509V3_EXT_METHOD, (st), (i)) # define sk_X509V3_EXT_METHOD_set(st, i, val) SKM_sk_set(X509V3_EXT_METHOD, (st), (i), (val)) # define sk_X509V3_EXT_METHOD_zero(st) SKM_sk_zero(X509V3_EXT_METHOD, (st)) # define sk_X509V3_EXT_METHOD_push(st, val) SKM_sk_push(X509V3_EXT_METHOD, (st), (val)) # define sk_X509V3_EXT_METHOD_unshift(st, val) SKM_sk_unshift(X509V3_EXT_METHOD, (st), (val)) # define sk_X509V3_EXT_METHOD_find(st, val) SKM_sk_find(X509V3_EXT_METHOD, (st), (val)) # define sk_X509V3_EXT_METHOD_find_ex(st, val) SKM_sk_find_ex(X509V3_EXT_METHOD, (st), (val)) # define sk_X509V3_EXT_METHOD_delete(st, i) SKM_sk_delete(X509V3_EXT_METHOD, (st), (i)) # define sk_X509V3_EXT_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509V3_EXT_METHOD, (st), (ptr)) # define sk_X509V3_EXT_METHOD_insert(st, val, i) SKM_sk_insert(X509V3_EXT_METHOD, (st), (val), (i)) # define sk_X509V3_EXT_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509V3_EXT_METHOD, (st), (cmp)) # define sk_X509V3_EXT_METHOD_dup(st) SKM_sk_dup(X509V3_EXT_METHOD, st) # define sk_X509V3_EXT_METHOD_pop_free(st, free_func) SKM_sk_pop_free(X509V3_EXT_METHOD, (st), (free_func)) # define sk_X509V3_EXT_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509V3_EXT_METHOD, (st), (copy_func), (free_func)) # define sk_X509V3_EXT_METHOD_shift(st) SKM_sk_shift(X509V3_EXT_METHOD, (st)) # define sk_X509V3_EXT_METHOD_pop(st) SKM_sk_pop(X509V3_EXT_METHOD, (st)) # define sk_X509V3_EXT_METHOD_sort(st) SKM_sk_sort(X509V3_EXT_METHOD, (st)) # define sk_X509V3_EXT_METHOD_is_sorted(st) SKM_sk_is_sorted(X509V3_EXT_METHOD, (st)) # define sk_X509_ALGOR_new(cmp) SKM_sk_new(X509_ALGOR, (cmp)) # define sk_X509_ALGOR_new_null() SKM_sk_new_null(X509_ALGOR) # define sk_X509_ALGOR_free(st) SKM_sk_free(X509_ALGOR, (st)) # define sk_X509_ALGOR_num(st) SKM_sk_num(X509_ALGOR, (st)) # define sk_X509_ALGOR_value(st, i) SKM_sk_value(X509_ALGOR, (st), (i)) # define sk_X509_ALGOR_set(st, i, val) SKM_sk_set(X509_ALGOR, (st), (i), (val)) # define sk_X509_ALGOR_zero(st) SKM_sk_zero(X509_ALGOR, (st)) # define sk_X509_ALGOR_push(st, val) SKM_sk_push(X509_ALGOR, (st), (val)) # define sk_X509_ALGOR_unshift(st, val) SKM_sk_unshift(X509_ALGOR, (st), (val)) # define sk_X509_ALGOR_find(st, val) SKM_sk_find(X509_ALGOR, (st), (val)) # define sk_X509_ALGOR_find_ex(st, val) SKM_sk_find_ex(X509_ALGOR, (st), (val)) # define sk_X509_ALGOR_delete(st, i) SKM_sk_delete(X509_ALGOR, (st), (i)) # define sk_X509_ALGOR_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_ALGOR, (st), (ptr)) # define sk_X509_ALGOR_insert(st, val, i) SKM_sk_insert(X509_ALGOR, (st), (val), (i)) # define sk_X509_ALGOR_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ALGOR, (st), (cmp)) # define sk_X509_ALGOR_dup(st) SKM_sk_dup(X509_ALGOR, st) # define sk_X509_ALGOR_pop_free(st, free_func) SKM_sk_pop_free(X509_ALGOR, (st), (free_func)) # define sk_X509_ALGOR_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_ALGOR, (st), (copy_func), (free_func)) # define sk_X509_ALGOR_shift(st) SKM_sk_shift(X509_ALGOR, (st)) # define sk_X509_ALGOR_pop(st) SKM_sk_pop(X509_ALGOR, (st)) # define sk_X509_ALGOR_sort(st) SKM_sk_sort(X509_ALGOR, (st)) # define sk_X509_ALGOR_is_sorted(st) SKM_sk_is_sorted(X509_ALGOR, (st)) # define sk_X509_ATTRIBUTE_new(cmp) SKM_sk_new(X509_ATTRIBUTE, (cmp)) # define sk_X509_ATTRIBUTE_new_null() SKM_sk_new_null(X509_ATTRIBUTE) # define sk_X509_ATTRIBUTE_free(st) SKM_sk_free(X509_ATTRIBUTE, (st)) # define sk_X509_ATTRIBUTE_num(st) SKM_sk_num(X509_ATTRIBUTE, (st)) # define sk_X509_ATTRIBUTE_value(st, i) SKM_sk_value(X509_ATTRIBUTE, (st), (i)) # define sk_X509_ATTRIBUTE_set(st, i, val) SKM_sk_set(X509_ATTRIBUTE, (st), (i), (val)) # define sk_X509_ATTRIBUTE_zero(st) SKM_sk_zero(X509_ATTRIBUTE, (st)) # define sk_X509_ATTRIBUTE_push(st, val) SKM_sk_push(X509_ATTRIBUTE, (st), (val)) # define sk_X509_ATTRIBUTE_unshift(st, val) SKM_sk_unshift(X509_ATTRIBUTE, (st), (val)) # define sk_X509_ATTRIBUTE_find(st, val) SKM_sk_find(X509_ATTRIBUTE, (st), (val)) # define sk_X509_ATTRIBUTE_find_ex(st, val) SKM_sk_find_ex(X509_ATTRIBUTE, (st), (val)) # define sk_X509_ATTRIBUTE_delete(st, i) SKM_sk_delete(X509_ATTRIBUTE, (st), (i)) # define sk_X509_ATTRIBUTE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_ATTRIBUTE, (st), (ptr)) # define sk_X509_ATTRIBUTE_insert(st, val, i) SKM_sk_insert(X509_ATTRIBUTE, (st), (val), (i)) # define sk_X509_ATTRIBUTE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ATTRIBUTE, (st), (cmp)) # define sk_X509_ATTRIBUTE_dup(st) SKM_sk_dup(X509_ATTRIBUTE, st) # define sk_X509_ATTRIBUTE_pop_free(st, free_func) SKM_sk_pop_free(X509_ATTRIBUTE, (st), (free_func)) # define sk_X509_ATTRIBUTE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_ATTRIBUTE, (st), (copy_func), (free_func)) # define sk_X509_ATTRIBUTE_shift(st) SKM_sk_shift(X509_ATTRIBUTE, (st)) # define sk_X509_ATTRIBUTE_pop(st) SKM_sk_pop(X509_ATTRIBUTE, (st)) # define sk_X509_ATTRIBUTE_sort(st) SKM_sk_sort(X509_ATTRIBUTE, (st)) # define sk_X509_ATTRIBUTE_is_sorted(st) SKM_sk_is_sorted(X509_ATTRIBUTE, (st)) # define sk_X509_CRL_new(cmp) SKM_sk_new(X509_CRL, (cmp)) # define sk_X509_CRL_new_null() SKM_sk_new_null(X509_CRL) # define sk_X509_CRL_free(st) SKM_sk_free(X509_CRL, (st)) # define sk_X509_CRL_num(st) SKM_sk_num(X509_CRL, (st)) # define sk_X509_CRL_value(st, i) SKM_sk_value(X509_CRL, (st), (i)) # define sk_X509_CRL_set(st, i, val) SKM_sk_set(X509_CRL, (st), (i), (val)) # define sk_X509_CRL_zero(st) SKM_sk_zero(X509_CRL, (st)) # define sk_X509_CRL_push(st, val) SKM_sk_push(X509_CRL, (st), (val)) # define sk_X509_CRL_unshift(st, val) SKM_sk_unshift(X509_CRL, (st), (val)) # define sk_X509_CRL_find(st, val) SKM_sk_find(X509_CRL, (st), (val)) # define sk_X509_CRL_find_ex(st, val) SKM_sk_find_ex(X509_CRL, (st), (val)) # define sk_X509_CRL_delete(st, i) SKM_sk_delete(X509_CRL, (st), (i)) # define sk_X509_CRL_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_CRL, (st), (ptr)) # define sk_X509_CRL_insert(st, val, i) SKM_sk_insert(X509_CRL, (st), (val), (i)) # define sk_X509_CRL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_CRL, (st), (cmp)) # define sk_X509_CRL_dup(st) SKM_sk_dup(X509_CRL, st) # define sk_X509_CRL_pop_free(st, free_func) SKM_sk_pop_free(X509_CRL, (st), (free_func)) # define sk_X509_CRL_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_CRL, (st), (copy_func), (free_func)) # define sk_X509_CRL_shift(st) SKM_sk_shift(X509_CRL, (st)) # define sk_X509_CRL_pop(st) SKM_sk_pop(X509_CRL, (st)) # define sk_X509_CRL_sort(st) SKM_sk_sort(X509_CRL, (st)) # define sk_X509_CRL_is_sorted(st) SKM_sk_is_sorted(X509_CRL, (st)) # define sk_X509_EXTENSION_new(cmp) SKM_sk_new(X509_EXTENSION, (cmp)) # define sk_X509_EXTENSION_new_null() SKM_sk_new_null(X509_EXTENSION) # define sk_X509_EXTENSION_free(st) SKM_sk_free(X509_EXTENSION, (st)) # define sk_X509_EXTENSION_num(st) SKM_sk_num(X509_EXTENSION, (st)) # define sk_X509_EXTENSION_value(st, i) SKM_sk_value(X509_EXTENSION, (st), (i)) # define sk_X509_EXTENSION_set(st, i, val) SKM_sk_set(X509_EXTENSION, (st), (i), (val)) # define sk_X509_EXTENSION_zero(st) SKM_sk_zero(X509_EXTENSION, (st)) # define sk_X509_EXTENSION_push(st, val) SKM_sk_push(X509_EXTENSION, (st), (val)) # define sk_X509_EXTENSION_unshift(st, val) SKM_sk_unshift(X509_EXTENSION, (st), (val)) # define sk_X509_EXTENSION_find(st, val) SKM_sk_find(X509_EXTENSION, (st), (val)) # define sk_X509_EXTENSION_find_ex(st, val) SKM_sk_find_ex(X509_EXTENSION, (st), (val)) # define sk_X509_EXTENSION_delete(st, i) SKM_sk_delete(X509_EXTENSION, (st), (i)) # define sk_X509_EXTENSION_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_EXTENSION, (st), (ptr)) # define sk_X509_EXTENSION_insert(st, val, i) SKM_sk_insert(X509_EXTENSION, (st), (val), (i)) # define sk_X509_EXTENSION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_EXTENSION, (st), (cmp)) # define sk_X509_EXTENSION_dup(st) SKM_sk_dup(X509_EXTENSION, st) # define sk_X509_EXTENSION_pop_free(st, free_func) SKM_sk_pop_free(X509_EXTENSION, (st), (free_func)) # define sk_X509_EXTENSION_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_EXTENSION, (st), (copy_func), (free_func)) # define sk_X509_EXTENSION_shift(st) SKM_sk_shift(X509_EXTENSION, (st)) # define sk_X509_EXTENSION_pop(st) SKM_sk_pop(X509_EXTENSION, (st)) # define sk_X509_EXTENSION_sort(st) SKM_sk_sort(X509_EXTENSION, (st)) # define sk_X509_EXTENSION_is_sorted(st) SKM_sk_is_sorted(X509_EXTENSION, (st)) # define sk_X509_INFO_new(cmp) SKM_sk_new(X509_INFO, (cmp)) # define sk_X509_INFO_new_null() SKM_sk_new_null(X509_INFO) # define sk_X509_INFO_free(st) SKM_sk_free(X509_INFO, (st)) # define sk_X509_INFO_num(st) SKM_sk_num(X509_INFO, (st)) # define sk_X509_INFO_value(st, i) SKM_sk_value(X509_INFO, (st), (i)) # define sk_X509_INFO_set(st, i, val) SKM_sk_set(X509_INFO, (st), (i), (val)) # define sk_X509_INFO_zero(st) SKM_sk_zero(X509_INFO, (st)) # define sk_X509_INFO_push(st, val) SKM_sk_push(X509_INFO, (st), (val)) # define sk_X509_INFO_unshift(st, val) SKM_sk_unshift(X509_INFO, (st), (val)) # define sk_X509_INFO_find(st, val) SKM_sk_find(X509_INFO, (st), (val)) # define sk_X509_INFO_find_ex(st, val) SKM_sk_find_ex(X509_INFO, (st), (val)) # define sk_X509_INFO_delete(st, i) SKM_sk_delete(X509_INFO, (st), (i)) # define sk_X509_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_INFO, (st), (ptr)) # define sk_X509_INFO_insert(st, val, i) SKM_sk_insert(X509_INFO, (st), (val), (i)) # define sk_X509_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_INFO, (st), (cmp)) # define sk_X509_INFO_dup(st) SKM_sk_dup(X509_INFO, st) # define sk_X509_INFO_pop_free(st, free_func) SKM_sk_pop_free(X509_INFO, (st), (free_func)) # define sk_X509_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_INFO, (st), (copy_func), (free_func)) # define sk_X509_INFO_shift(st) SKM_sk_shift(X509_INFO, (st)) # define sk_X509_INFO_pop(st) SKM_sk_pop(X509_INFO, (st)) # define sk_X509_INFO_sort(st) SKM_sk_sort(X509_INFO, (st)) # define sk_X509_INFO_is_sorted(st) SKM_sk_is_sorted(X509_INFO, (st)) # define sk_X509_LOOKUP_new(cmp) SKM_sk_new(X509_LOOKUP, (cmp)) # define sk_X509_LOOKUP_new_null() SKM_sk_new_null(X509_LOOKUP) # define sk_X509_LOOKUP_free(st) SKM_sk_free(X509_LOOKUP, (st)) # define sk_X509_LOOKUP_num(st) SKM_sk_num(X509_LOOKUP, (st)) # define sk_X509_LOOKUP_value(st, i) SKM_sk_value(X509_LOOKUP, (st), (i)) # define sk_X509_LOOKUP_set(st, i, val) SKM_sk_set(X509_LOOKUP, (st), (i), (val)) # define sk_X509_LOOKUP_zero(st) SKM_sk_zero(X509_LOOKUP, (st)) # define sk_X509_LOOKUP_push(st, val) SKM_sk_push(X509_LOOKUP, (st), (val)) # define sk_X509_LOOKUP_unshift(st, val) SKM_sk_unshift(X509_LOOKUP, (st), (val)) # define sk_X509_LOOKUP_find(st, val) SKM_sk_find(X509_LOOKUP, (st), (val)) # define sk_X509_LOOKUP_find_ex(st, val) SKM_sk_find_ex(X509_LOOKUP, (st), (val)) # define sk_X509_LOOKUP_delete(st, i) SKM_sk_delete(X509_LOOKUP, (st), (i)) # define sk_X509_LOOKUP_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_LOOKUP, (st), (ptr)) # define sk_X509_LOOKUP_insert(st, val, i) SKM_sk_insert(X509_LOOKUP, (st), (val), (i)) # define sk_X509_LOOKUP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_LOOKUP, (st), (cmp)) # define sk_X509_LOOKUP_dup(st) SKM_sk_dup(X509_LOOKUP, st) # define sk_X509_LOOKUP_pop_free(st, free_func) SKM_sk_pop_free(X509_LOOKUP, (st), (free_func)) # define sk_X509_LOOKUP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_LOOKUP, (st), (copy_func), (free_func)) # define sk_X509_LOOKUP_shift(st) SKM_sk_shift(X509_LOOKUP, (st)) # define sk_X509_LOOKUP_pop(st) SKM_sk_pop(X509_LOOKUP, (st)) # define sk_X509_LOOKUP_sort(st) SKM_sk_sort(X509_LOOKUP, (st)) # define sk_X509_LOOKUP_is_sorted(st) SKM_sk_is_sorted(X509_LOOKUP, (st)) # define sk_X509_NAME_new(cmp) SKM_sk_new(X509_NAME, (cmp)) # define sk_X509_NAME_new_null() SKM_sk_new_null(X509_NAME) # define sk_X509_NAME_free(st) SKM_sk_free(X509_NAME, (st)) # define sk_X509_NAME_num(st) SKM_sk_num(X509_NAME, (st)) # define sk_X509_NAME_value(st, i) SKM_sk_value(X509_NAME, (st), (i)) # define sk_X509_NAME_set(st, i, val) SKM_sk_set(X509_NAME, (st), (i), (val)) # define sk_X509_NAME_zero(st) SKM_sk_zero(X509_NAME, (st)) # define sk_X509_NAME_push(st, val) SKM_sk_push(X509_NAME, (st), (val)) # define sk_X509_NAME_unshift(st, val) SKM_sk_unshift(X509_NAME, (st), (val)) # define sk_X509_NAME_find(st, val) SKM_sk_find(X509_NAME, (st), (val)) # define sk_X509_NAME_find_ex(st, val) SKM_sk_find_ex(X509_NAME, (st), (val)) # define sk_X509_NAME_delete(st, i) SKM_sk_delete(X509_NAME, (st), (i)) # define sk_X509_NAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_NAME, (st), (ptr)) # define sk_X509_NAME_insert(st, val, i) SKM_sk_insert(X509_NAME, (st), (val), (i)) # define sk_X509_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME, (st), (cmp)) # define sk_X509_NAME_dup(st) SKM_sk_dup(X509_NAME, st) # define sk_X509_NAME_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME, (st), (free_func)) # define sk_X509_NAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_NAME, (st), (copy_func), (free_func)) # define sk_X509_NAME_shift(st) SKM_sk_shift(X509_NAME, (st)) # define sk_X509_NAME_pop(st) SKM_sk_pop(X509_NAME, (st)) # define sk_X509_NAME_sort(st) SKM_sk_sort(X509_NAME, (st)) # define sk_X509_NAME_is_sorted(st) SKM_sk_is_sorted(X509_NAME, (st)) # define sk_X509_NAME_ENTRY_new(cmp) SKM_sk_new(X509_NAME_ENTRY, (cmp)) # define sk_X509_NAME_ENTRY_new_null() SKM_sk_new_null(X509_NAME_ENTRY) # define sk_X509_NAME_ENTRY_free(st) SKM_sk_free(X509_NAME_ENTRY, (st)) # define sk_X509_NAME_ENTRY_num(st) SKM_sk_num(X509_NAME_ENTRY, (st)) # define sk_X509_NAME_ENTRY_value(st, i) SKM_sk_value(X509_NAME_ENTRY, (st), (i)) # define sk_X509_NAME_ENTRY_set(st, i, val) SKM_sk_set(X509_NAME_ENTRY, (st), (i), (val)) # define sk_X509_NAME_ENTRY_zero(st) SKM_sk_zero(X509_NAME_ENTRY, (st)) # define sk_X509_NAME_ENTRY_push(st, val) SKM_sk_push(X509_NAME_ENTRY, (st), (val)) # define sk_X509_NAME_ENTRY_unshift(st, val) SKM_sk_unshift(X509_NAME_ENTRY, (st), (val)) # define sk_X509_NAME_ENTRY_find(st, val) SKM_sk_find(X509_NAME_ENTRY, (st), (val)) # define sk_X509_NAME_ENTRY_find_ex(st, val) SKM_sk_find_ex(X509_NAME_ENTRY, (st), (val)) # define sk_X509_NAME_ENTRY_delete(st, i) SKM_sk_delete(X509_NAME_ENTRY, (st), (i)) # define sk_X509_NAME_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_NAME_ENTRY, (st), (ptr)) # define sk_X509_NAME_ENTRY_insert(st, val, i) SKM_sk_insert(X509_NAME_ENTRY, (st), (val), (i)) # define sk_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME_ENTRY, (st), (cmp)) # define sk_X509_NAME_ENTRY_dup(st) SKM_sk_dup(X509_NAME_ENTRY, st) # define sk_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME_ENTRY, (st), (free_func)) # define sk_X509_NAME_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_NAME_ENTRY, (st), (copy_func), (free_func)) # define sk_X509_NAME_ENTRY_shift(st) SKM_sk_shift(X509_NAME_ENTRY, (st)) # define sk_X509_NAME_ENTRY_pop(st) SKM_sk_pop(X509_NAME_ENTRY, (st)) # define sk_X509_NAME_ENTRY_sort(st) SKM_sk_sort(X509_NAME_ENTRY, (st)) # define sk_X509_NAME_ENTRY_is_sorted(st) SKM_sk_is_sorted(X509_NAME_ENTRY, (st)) # define sk_X509_OBJECT_new(cmp) SKM_sk_new(X509_OBJECT, (cmp)) # define sk_X509_OBJECT_new_null() SKM_sk_new_null(X509_OBJECT) # define sk_X509_OBJECT_free(st) SKM_sk_free(X509_OBJECT, (st)) # define sk_X509_OBJECT_num(st) SKM_sk_num(X509_OBJECT, (st)) # define sk_X509_OBJECT_value(st, i) SKM_sk_value(X509_OBJECT, (st), (i)) # define sk_X509_OBJECT_set(st, i, val) SKM_sk_set(X509_OBJECT, (st), (i), (val)) # define sk_X509_OBJECT_zero(st) SKM_sk_zero(X509_OBJECT, (st)) # define sk_X509_OBJECT_push(st, val) SKM_sk_push(X509_OBJECT, (st), (val)) # define sk_X509_OBJECT_unshift(st, val) SKM_sk_unshift(X509_OBJECT, (st), (val)) # define sk_X509_OBJECT_find(st, val) SKM_sk_find(X509_OBJECT, (st), (val)) # define sk_X509_OBJECT_find_ex(st, val) SKM_sk_find_ex(X509_OBJECT, (st), (val)) # define sk_X509_OBJECT_delete(st, i) SKM_sk_delete(X509_OBJECT, (st), (i)) # define sk_X509_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_OBJECT, (st), (ptr)) # define sk_X509_OBJECT_insert(st, val, i) SKM_sk_insert(X509_OBJECT, (st), (val), (i)) # define sk_X509_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_OBJECT, (st), (cmp)) # define sk_X509_OBJECT_dup(st) SKM_sk_dup(X509_OBJECT, st) # define sk_X509_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(X509_OBJECT, (st), (free_func)) # define sk_X509_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_OBJECT, (st), (copy_func), (free_func)) # define sk_X509_OBJECT_shift(st) SKM_sk_shift(X509_OBJECT, (st)) # define sk_X509_OBJECT_pop(st) SKM_sk_pop(X509_OBJECT, (st)) # define sk_X509_OBJECT_sort(st) SKM_sk_sort(X509_OBJECT, (st)) # define sk_X509_OBJECT_is_sorted(st) SKM_sk_is_sorted(X509_OBJECT, (st)) # define sk_X509_POLICY_DATA_new(cmp) SKM_sk_new(X509_POLICY_DATA, (cmp)) # define sk_X509_POLICY_DATA_new_null() SKM_sk_new_null(X509_POLICY_DATA) # define sk_X509_POLICY_DATA_free(st) SKM_sk_free(X509_POLICY_DATA, (st)) # define sk_X509_POLICY_DATA_num(st) SKM_sk_num(X509_POLICY_DATA, (st)) # define sk_X509_POLICY_DATA_value(st, i) SKM_sk_value(X509_POLICY_DATA, (st), (i)) # define sk_X509_POLICY_DATA_set(st, i, val) SKM_sk_set(X509_POLICY_DATA, (st), (i), (val)) # define sk_X509_POLICY_DATA_zero(st) SKM_sk_zero(X509_POLICY_DATA, (st)) # define sk_X509_POLICY_DATA_push(st, val) SKM_sk_push(X509_POLICY_DATA, (st), (val)) # define sk_X509_POLICY_DATA_unshift(st, val) SKM_sk_unshift(X509_POLICY_DATA, (st), (val)) # define sk_X509_POLICY_DATA_find(st, val) SKM_sk_find(X509_POLICY_DATA, (st), (val)) # define sk_X509_POLICY_DATA_find_ex(st, val) SKM_sk_find_ex(X509_POLICY_DATA, (st), (val)) # define sk_X509_POLICY_DATA_delete(st, i) SKM_sk_delete(X509_POLICY_DATA, (st), (i)) # define sk_X509_POLICY_DATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_POLICY_DATA, (st), (ptr)) # define sk_X509_POLICY_DATA_insert(st, val, i) SKM_sk_insert(X509_POLICY_DATA, (st), (val), (i)) # define sk_X509_POLICY_DATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_POLICY_DATA, (st), (cmp)) # define sk_X509_POLICY_DATA_dup(st) SKM_sk_dup(X509_POLICY_DATA, st) # define sk_X509_POLICY_DATA_pop_free(st, free_func) SKM_sk_pop_free(X509_POLICY_DATA, (st), (free_func)) # define sk_X509_POLICY_DATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_POLICY_DATA, (st), (copy_func), (free_func)) # define sk_X509_POLICY_DATA_shift(st) SKM_sk_shift(X509_POLICY_DATA, (st)) # define sk_X509_POLICY_DATA_pop(st) SKM_sk_pop(X509_POLICY_DATA, (st)) # define sk_X509_POLICY_DATA_sort(st) SKM_sk_sort(X509_POLICY_DATA, (st)) # define sk_X509_POLICY_DATA_is_sorted(st) SKM_sk_is_sorted(X509_POLICY_DATA, (st)) # define sk_X509_POLICY_NODE_new(cmp) SKM_sk_new(X509_POLICY_NODE, (cmp)) # define sk_X509_POLICY_NODE_new_null() SKM_sk_new_null(X509_POLICY_NODE) # define sk_X509_POLICY_NODE_free(st) SKM_sk_free(X509_POLICY_NODE, (st)) # define sk_X509_POLICY_NODE_num(st) SKM_sk_num(X509_POLICY_NODE, (st)) # define sk_X509_POLICY_NODE_value(st, i) SKM_sk_value(X509_POLICY_NODE, (st), (i)) # define sk_X509_POLICY_NODE_set(st, i, val) SKM_sk_set(X509_POLICY_NODE, (st), (i), (val)) # define sk_X509_POLICY_NODE_zero(st) SKM_sk_zero(X509_POLICY_NODE, (st)) # define sk_X509_POLICY_NODE_push(st, val) SKM_sk_push(X509_POLICY_NODE, (st), (val)) # define sk_X509_POLICY_NODE_unshift(st, val) SKM_sk_unshift(X509_POLICY_NODE, (st), (val)) # define sk_X509_POLICY_NODE_find(st, val) SKM_sk_find(X509_POLICY_NODE, (st), (val)) # define sk_X509_POLICY_NODE_find_ex(st, val) SKM_sk_find_ex(X509_POLICY_NODE, (st), (val)) # define sk_X509_POLICY_NODE_delete(st, i) SKM_sk_delete(X509_POLICY_NODE, (st), (i)) # define sk_X509_POLICY_NODE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_POLICY_NODE, (st), (ptr)) # define sk_X509_POLICY_NODE_insert(st, val, i) SKM_sk_insert(X509_POLICY_NODE, (st), (val), (i)) # define sk_X509_POLICY_NODE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_POLICY_NODE, (st), (cmp)) # define sk_X509_POLICY_NODE_dup(st) SKM_sk_dup(X509_POLICY_NODE, st) # define sk_X509_POLICY_NODE_pop_free(st, free_func) SKM_sk_pop_free(X509_POLICY_NODE, (st), (free_func)) # define sk_X509_POLICY_NODE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_POLICY_NODE, (st), (copy_func), (free_func)) # define sk_X509_POLICY_NODE_shift(st) SKM_sk_shift(X509_POLICY_NODE, (st)) # define sk_X509_POLICY_NODE_pop(st) SKM_sk_pop(X509_POLICY_NODE, (st)) # define sk_X509_POLICY_NODE_sort(st) SKM_sk_sort(X509_POLICY_NODE, (st)) # define sk_X509_POLICY_NODE_is_sorted(st) SKM_sk_is_sorted(X509_POLICY_NODE, (st)) # define sk_X509_PURPOSE_new(cmp) SKM_sk_new(X509_PURPOSE, (cmp)) # define sk_X509_PURPOSE_new_null() SKM_sk_new_null(X509_PURPOSE) # define sk_X509_PURPOSE_free(st) SKM_sk_free(X509_PURPOSE, (st)) # define sk_X509_PURPOSE_num(st) SKM_sk_num(X509_PURPOSE, (st)) # define sk_X509_PURPOSE_value(st, i) SKM_sk_value(X509_PURPOSE, (st), (i)) # define sk_X509_PURPOSE_set(st, i, val) SKM_sk_set(X509_PURPOSE, (st), (i), (val)) # define sk_X509_PURPOSE_zero(st) SKM_sk_zero(X509_PURPOSE, (st)) # define sk_X509_PURPOSE_push(st, val) SKM_sk_push(X509_PURPOSE, (st), (val)) # define sk_X509_PURPOSE_unshift(st, val) SKM_sk_unshift(X509_PURPOSE, (st), (val)) # define sk_X509_PURPOSE_find(st, val) SKM_sk_find(X509_PURPOSE, (st), (val)) # define sk_X509_PURPOSE_find_ex(st, val) SKM_sk_find_ex(X509_PURPOSE, (st), (val)) # define sk_X509_PURPOSE_delete(st, i) SKM_sk_delete(X509_PURPOSE, (st), (i)) # define sk_X509_PURPOSE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_PURPOSE, (st), (ptr)) # define sk_X509_PURPOSE_insert(st, val, i) SKM_sk_insert(X509_PURPOSE, (st), (val), (i)) # define sk_X509_PURPOSE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_PURPOSE, (st), (cmp)) # define sk_X509_PURPOSE_dup(st) SKM_sk_dup(X509_PURPOSE, st) # define sk_X509_PURPOSE_pop_free(st, free_func) SKM_sk_pop_free(X509_PURPOSE, (st), (free_func)) # define sk_X509_PURPOSE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_PURPOSE, (st), (copy_func), (free_func)) # define sk_X509_PURPOSE_shift(st) SKM_sk_shift(X509_PURPOSE, (st)) # define sk_X509_PURPOSE_pop(st) SKM_sk_pop(X509_PURPOSE, (st)) # define sk_X509_PURPOSE_sort(st) SKM_sk_sort(X509_PURPOSE, (st)) # define sk_X509_PURPOSE_is_sorted(st) SKM_sk_is_sorted(X509_PURPOSE, (st)) # define sk_X509_REVOKED_new(cmp) SKM_sk_new(X509_REVOKED, (cmp)) # define sk_X509_REVOKED_new_null() SKM_sk_new_null(X509_REVOKED) # define sk_X509_REVOKED_free(st) SKM_sk_free(X509_REVOKED, (st)) # define sk_X509_REVOKED_num(st) SKM_sk_num(X509_REVOKED, (st)) # define sk_X509_REVOKED_value(st, i) SKM_sk_value(X509_REVOKED, (st), (i)) # define sk_X509_REVOKED_set(st, i, val) SKM_sk_set(X509_REVOKED, (st), (i), (val)) # define sk_X509_REVOKED_zero(st) SKM_sk_zero(X509_REVOKED, (st)) # define sk_X509_REVOKED_push(st, val) SKM_sk_push(X509_REVOKED, (st), (val)) # define sk_X509_REVOKED_unshift(st, val) SKM_sk_unshift(X509_REVOKED, (st), (val)) # define sk_X509_REVOKED_find(st, val) SKM_sk_find(X509_REVOKED, (st), (val)) # define sk_X509_REVOKED_find_ex(st, val) SKM_sk_find_ex(X509_REVOKED, (st), (val)) # define sk_X509_REVOKED_delete(st, i) SKM_sk_delete(X509_REVOKED, (st), (i)) # define sk_X509_REVOKED_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_REVOKED, (st), (ptr)) # define sk_X509_REVOKED_insert(st, val, i) SKM_sk_insert(X509_REVOKED, (st), (val), (i)) # define sk_X509_REVOKED_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_REVOKED, (st), (cmp)) # define sk_X509_REVOKED_dup(st) SKM_sk_dup(X509_REVOKED, st) # define sk_X509_REVOKED_pop_free(st, free_func) SKM_sk_pop_free(X509_REVOKED, (st), (free_func)) # define sk_X509_REVOKED_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_REVOKED, (st), (copy_func), (free_func)) # define sk_X509_REVOKED_shift(st) SKM_sk_shift(X509_REVOKED, (st)) # define sk_X509_REVOKED_pop(st) SKM_sk_pop(X509_REVOKED, (st)) # define sk_X509_REVOKED_sort(st) SKM_sk_sort(X509_REVOKED, (st)) # define sk_X509_REVOKED_is_sorted(st) SKM_sk_is_sorted(X509_REVOKED, (st)) # define sk_X509_TRUST_new(cmp) SKM_sk_new(X509_TRUST, (cmp)) # define sk_X509_TRUST_new_null() SKM_sk_new_null(X509_TRUST) # define sk_X509_TRUST_free(st) SKM_sk_free(X509_TRUST, (st)) # define sk_X509_TRUST_num(st) SKM_sk_num(X509_TRUST, (st)) # define sk_X509_TRUST_value(st, i) SKM_sk_value(X509_TRUST, (st), (i)) # define sk_X509_TRUST_set(st, i, val) SKM_sk_set(X509_TRUST, (st), (i), (val)) # define sk_X509_TRUST_zero(st) SKM_sk_zero(X509_TRUST, (st)) # define sk_X509_TRUST_push(st, val) SKM_sk_push(X509_TRUST, (st), (val)) # define sk_X509_TRUST_unshift(st, val) SKM_sk_unshift(X509_TRUST, (st), (val)) # define sk_X509_TRUST_find(st, val) SKM_sk_find(X509_TRUST, (st), (val)) # define sk_X509_TRUST_find_ex(st, val) SKM_sk_find_ex(X509_TRUST, (st), (val)) # define sk_X509_TRUST_delete(st, i) SKM_sk_delete(X509_TRUST, (st), (i)) # define sk_X509_TRUST_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_TRUST, (st), (ptr)) # define sk_X509_TRUST_insert(st, val, i) SKM_sk_insert(X509_TRUST, (st), (val), (i)) # define sk_X509_TRUST_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_TRUST, (st), (cmp)) # define sk_X509_TRUST_dup(st) SKM_sk_dup(X509_TRUST, st) # define sk_X509_TRUST_pop_free(st, free_func) SKM_sk_pop_free(X509_TRUST, (st), (free_func)) # define sk_X509_TRUST_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_TRUST, (st), (copy_func), (free_func)) # define sk_X509_TRUST_shift(st) SKM_sk_shift(X509_TRUST, (st)) # define sk_X509_TRUST_pop(st) SKM_sk_pop(X509_TRUST, (st)) # define sk_X509_TRUST_sort(st) SKM_sk_sort(X509_TRUST, (st)) # define sk_X509_TRUST_is_sorted(st) SKM_sk_is_sorted(X509_TRUST, (st)) # define sk_X509_VERIFY_PARAM_new(cmp) SKM_sk_new(X509_VERIFY_PARAM, (cmp)) # define sk_X509_VERIFY_PARAM_new_null() SKM_sk_new_null(X509_VERIFY_PARAM) # define sk_X509_VERIFY_PARAM_free(st) SKM_sk_free(X509_VERIFY_PARAM, (st)) # define sk_X509_VERIFY_PARAM_num(st) SKM_sk_num(X509_VERIFY_PARAM, (st)) # define sk_X509_VERIFY_PARAM_value(st, i) SKM_sk_value(X509_VERIFY_PARAM, (st), (i)) # define sk_X509_VERIFY_PARAM_set(st, i, val) SKM_sk_set(X509_VERIFY_PARAM, (st), (i), (val)) # define sk_X509_VERIFY_PARAM_zero(st) SKM_sk_zero(X509_VERIFY_PARAM, (st)) # define sk_X509_VERIFY_PARAM_push(st, val) SKM_sk_push(X509_VERIFY_PARAM, (st), (val)) # define sk_X509_VERIFY_PARAM_unshift(st, val) SKM_sk_unshift(X509_VERIFY_PARAM, (st), (val)) # define sk_X509_VERIFY_PARAM_find(st, val) SKM_sk_find(X509_VERIFY_PARAM, (st), (val)) # define sk_X509_VERIFY_PARAM_find_ex(st, val) SKM_sk_find_ex(X509_VERIFY_PARAM, (st), (val)) # define sk_X509_VERIFY_PARAM_delete(st, i) SKM_sk_delete(X509_VERIFY_PARAM, (st), (i)) # define sk_X509_VERIFY_PARAM_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_VERIFY_PARAM, (st), (ptr)) # define sk_X509_VERIFY_PARAM_insert(st, val, i) SKM_sk_insert(X509_VERIFY_PARAM, (st), (val), (i)) # define sk_X509_VERIFY_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_VERIFY_PARAM, (st), (cmp)) # define sk_X509_VERIFY_PARAM_dup(st) SKM_sk_dup(X509_VERIFY_PARAM, st) # define sk_X509_VERIFY_PARAM_pop_free(st, free_func) SKM_sk_pop_free(X509_VERIFY_PARAM, (st), (free_func)) # define sk_X509_VERIFY_PARAM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_VERIFY_PARAM, (st), (copy_func), (free_func)) # define sk_X509_VERIFY_PARAM_shift(st) SKM_sk_shift(X509_VERIFY_PARAM, (st)) # define sk_X509_VERIFY_PARAM_pop(st) SKM_sk_pop(X509_VERIFY_PARAM, (st)) # define sk_X509_VERIFY_PARAM_sort(st) SKM_sk_sort(X509_VERIFY_PARAM, (st)) # define sk_X509_VERIFY_PARAM_is_sorted(st) SKM_sk_is_sorted(X509_VERIFY_PARAM, (st)) # define sk_nid_triple_new(cmp) SKM_sk_new(nid_triple, (cmp)) # define sk_nid_triple_new_null() SKM_sk_new_null(nid_triple) # define sk_nid_triple_free(st) SKM_sk_free(nid_triple, (st)) # define sk_nid_triple_num(st) SKM_sk_num(nid_triple, (st)) # define sk_nid_triple_value(st, i) SKM_sk_value(nid_triple, (st), (i)) # define sk_nid_triple_set(st, i, val) SKM_sk_set(nid_triple, (st), (i), (val)) # define sk_nid_triple_zero(st) SKM_sk_zero(nid_triple, (st)) # define sk_nid_triple_push(st, val) SKM_sk_push(nid_triple, (st), (val)) # define sk_nid_triple_unshift(st, val) SKM_sk_unshift(nid_triple, (st), (val)) # define sk_nid_triple_find(st, val) SKM_sk_find(nid_triple, (st), (val)) # define sk_nid_triple_find_ex(st, val) SKM_sk_find_ex(nid_triple, (st), (val)) # define sk_nid_triple_delete(st, i) SKM_sk_delete(nid_triple, (st), (i)) # define sk_nid_triple_delete_ptr(st, ptr) SKM_sk_delete_ptr(nid_triple, (st), (ptr)) # define sk_nid_triple_insert(st, val, i) SKM_sk_insert(nid_triple, (st), (val), (i)) # define sk_nid_triple_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(nid_triple, (st), (cmp)) # define sk_nid_triple_dup(st) SKM_sk_dup(nid_triple, st) # define sk_nid_triple_pop_free(st, free_func) SKM_sk_pop_free(nid_triple, (st), (free_func)) # define sk_nid_triple_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(nid_triple, (st), (copy_func), (free_func)) # define sk_nid_triple_shift(st) SKM_sk_shift(nid_triple, (st)) # define sk_nid_triple_pop(st) SKM_sk_pop(nid_triple, (st)) # define sk_nid_triple_sort(st) SKM_sk_sort(nid_triple, (st)) # define sk_nid_triple_is_sorted(st) SKM_sk_is_sorted(nid_triple, (st)) # define sk_void_new(cmp) SKM_sk_new(void, (cmp)) # define sk_void_new_null() SKM_sk_new_null(void) # define sk_void_free(st) SKM_sk_free(void, (st)) # define sk_void_num(st) SKM_sk_num(void, (st)) # define sk_void_value(st, i) SKM_sk_value(void, (st), (i)) # define sk_void_set(st, i, val) SKM_sk_set(void, (st), (i), (val)) # define sk_void_zero(st) SKM_sk_zero(void, (st)) # define sk_void_push(st, val) SKM_sk_push(void, (st), (val)) # define sk_void_unshift(st, val) SKM_sk_unshift(void, (st), (val)) # define sk_void_find(st, val) SKM_sk_find(void, (st), (val)) # define sk_void_find_ex(st, val) SKM_sk_find_ex(void, (st), (val)) # define sk_void_delete(st, i) SKM_sk_delete(void, (st), (i)) # define sk_void_delete_ptr(st, ptr) SKM_sk_delete_ptr(void, (st), (ptr)) # define sk_void_insert(st, val, i) SKM_sk_insert(void, (st), (val), (i)) # define sk_void_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(void, (st), (cmp)) # define sk_void_dup(st) SKM_sk_dup(void, st) # define sk_void_pop_free(st, free_func) SKM_sk_pop_free(void, (st), (free_func)) # define sk_void_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(void, (st), (copy_func), (free_func)) # define sk_void_shift(st) SKM_sk_shift(void, (st)) # define sk_void_pop(st) SKM_sk_pop(void, (st)) # define sk_void_sort(st) SKM_sk_sort(void, (st)) # define sk_void_is_sorted(st) SKM_sk_is_sorted(void, (st)) # define sk_OPENSSL_STRING_new(cmp) ((STACK_OF(OPENSSL_STRING) *)sk_new(CHECKED_SK_CMP_FUNC(char, cmp))) # define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)sk_new_null()) # define sk_OPENSSL_STRING_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) # define sk_OPENSSL_STRING_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) # define sk_OPENSSL_STRING_value(st, i) ((OPENSSL_STRING)sk_value(CHECKED_STACK_OF(OPENSSL_STRING, st), i)) # define sk_OPENSSL_STRING_num(st) SKM_sk_num(OPENSSL_STRING, st) # define sk_OPENSSL_STRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_FREE_FUNC(char, free_func)) # define sk_OPENSSL_STRING_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_STRING) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_COPY_FUNC(char, copy_func), CHECKED_SK_FREE_FUNC(char, free_func))) # define sk_OPENSSL_STRING_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val), i) # define sk_OPENSSL_STRING_free(st) SKM_sk_free(OPENSSL_STRING, st) # define sk_OPENSSL_STRING_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_STRING, st), i, CHECKED_PTR_OF(char, val)) # define sk_OPENSSL_STRING_zero(st) SKM_sk_zero(OPENSSL_STRING, (st)) # define sk_OPENSSL_STRING_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val)) # define sk_OPENSSL_STRING_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_CONST_PTR_OF(char, val)) # define sk_OPENSSL_STRING_delete(st, i) SKM_sk_delete(OPENSSL_STRING, (st), (i)) # define sk_OPENSSL_STRING_delete_ptr(st, ptr) (OPENSSL_STRING *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, ptr)) # define sk_OPENSSL_STRING_set_cmp_func(st, cmp) \ ((int (*)(const char * const *,const char * const *)) \ sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_CMP_FUNC(char, cmp))) # define sk_OPENSSL_STRING_dup(st) SKM_sk_dup(OPENSSL_STRING, st) # define sk_OPENSSL_STRING_shift(st) SKM_sk_shift(OPENSSL_STRING, (st)) # define sk_OPENSSL_STRING_pop(st) (char *)sk_pop(CHECKED_STACK_OF(OPENSSL_STRING, st)) # define sk_OPENSSL_STRING_sort(st) SKM_sk_sort(OPENSSL_STRING, (st)) # define sk_OPENSSL_STRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_STRING, (st)) # define sk_OPENSSL_BLOCK_new(cmp) ((STACK_OF(OPENSSL_BLOCK) *)sk_new(CHECKED_SK_CMP_FUNC(void, cmp))) # define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)sk_new_null()) # define sk_OPENSSL_BLOCK_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) # define sk_OPENSSL_BLOCK_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) # define sk_OPENSSL_BLOCK_value(st, i) ((OPENSSL_BLOCK)sk_value(CHECKED_STACK_OF(OPENSSL_BLOCK, st), i)) # define sk_OPENSSL_BLOCK_num(st) SKM_sk_num(OPENSSL_BLOCK, st) # define sk_OPENSSL_BLOCK_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_FREE_FUNC(void, free_func)) # define sk_OPENSSL_BLOCK_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_BLOCK) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_COPY_FUNC(void, copy_func), CHECKED_SK_FREE_FUNC(void, free_func))) # define sk_OPENSSL_BLOCK_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val), i) # define sk_OPENSSL_BLOCK_free(st) SKM_sk_free(OPENSSL_BLOCK, st) # define sk_OPENSSL_BLOCK_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_BLOCK, st), i, CHECKED_PTR_OF(void, val)) # define sk_OPENSSL_BLOCK_zero(st) SKM_sk_zero(OPENSSL_BLOCK, (st)) # define sk_OPENSSL_BLOCK_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val)) # define sk_OPENSSL_BLOCK_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_BLOCK), st), CHECKED_CONST_PTR_OF(void, val)) # define sk_OPENSSL_BLOCK_delete(st, i) SKM_sk_delete(OPENSSL_BLOCK, (st), (i)) # define sk_OPENSSL_BLOCK_delete_ptr(st, ptr) (OPENSSL_BLOCK *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, ptr)) # define sk_OPENSSL_BLOCK_set_cmp_func(st, cmp) \ ((int (*)(const void * const *,const void * const *)) \ sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_CMP_FUNC(void, cmp))) # define sk_OPENSSL_BLOCK_dup(st) SKM_sk_dup(OPENSSL_BLOCK, st) # define sk_OPENSSL_BLOCK_shift(st) SKM_sk_shift(OPENSSL_BLOCK, (st)) # define sk_OPENSSL_BLOCK_pop(st) (void *)sk_pop(CHECKED_STACK_OF(OPENSSL_BLOCK, st)) # define sk_OPENSSL_BLOCK_sort(st) SKM_sk_sort(OPENSSL_BLOCK, (st)) # define sk_OPENSSL_BLOCK_is_sorted(st) SKM_sk_is_sorted(OPENSSL_BLOCK, (st)) # define sk_OPENSSL_PSTRING_new(cmp) ((STACK_OF(OPENSSL_PSTRING) *)sk_new(CHECKED_SK_CMP_FUNC(OPENSSL_STRING, cmp))) # define sk_OPENSSL_PSTRING_new_null() ((STACK_OF(OPENSSL_PSTRING) *)sk_new_null()) # define sk_OPENSSL_PSTRING_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) # define sk_OPENSSL_PSTRING_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) # define sk_OPENSSL_PSTRING_value(st, i) ((OPENSSL_PSTRING)sk_value(CHECKED_STACK_OF(OPENSSL_PSTRING, st), i)) # define sk_OPENSSL_PSTRING_num(st) SKM_sk_num(OPENSSL_PSTRING, st) # define sk_OPENSSL_PSTRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_FREE_FUNC(OPENSSL_STRING, free_func)) # define sk_OPENSSL_PSTRING_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_PSTRING) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_COPY_FUNC(OPENSSL_STRING, copy_func), CHECKED_SK_FREE_FUNC(OPENSSL_STRING, free_func))) # define sk_OPENSSL_PSTRING_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val), i) # define sk_OPENSSL_PSTRING_free(st) SKM_sk_free(OPENSSL_PSTRING, st) # define sk_OPENSSL_PSTRING_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_PSTRING, st), i, CHECKED_PTR_OF(OPENSSL_STRING, val)) # define sk_OPENSSL_PSTRING_zero(st) SKM_sk_zero(OPENSSL_PSTRING, (st)) # define sk_OPENSSL_PSTRING_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val)) # define sk_OPENSSL_PSTRING_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_PSTRING), st), CHECKED_CONST_PTR_OF(OPENSSL_STRING, val)) # define sk_OPENSSL_PSTRING_delete(st, i) SKM_sk_delete(OPENSSL_PSTRING, (st), (i)) # define sk_OPENSSL_PSTRING_delete_ptr(st, ptr) (OPENSSL_PSTRING *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, ptr)) # define sk_OPENSSL_PSTRING_set_cmp_func(st, cmp) \ ((int (*)(const OPENSSL_STRING * const *,const OPENSSL_STRING * const *)) \ sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_CMP_FUNC(OPENSSL_STRING, cmp))) # define sk_OPENSSL_PSTRING_dup(st) SKM_sk_dup(OPENSSL_PSTRING, st) # define sk_OPENSSL_PSTRING_shift(st) SKM_sk_shift(OPENSSL_PSTRING, (st)) # define sk_OPENSSL_PSTRING_pop(st) (OPENSSL_STRING *)sk_pop(CHECKED_STACK_OF(OPENSSL_PSTRING, st)) # define sk_OPENSSL_PSTRING_sort(st) SKM_sk_sort(OPENSSL_PSTRING, (st)) # define sk_OPENSSL_PSTRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_PSTRING, (st)) # define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(ACCESS_DESCRIPTION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(ACCESS_DESCRIPTION, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_ACCESS_DESCRIPTION(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(ACCESS_DESCRIPTION, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_ACCESS_DESCRIPTION(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(ACCESS_DESCRIPTION, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_ASN1_INTEGER(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(ASN1_INTEGER, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_ASN1_INTEGER(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(ASN1_INTEGER, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_ASN1_INTEGER(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(ASN1_INTEGER, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_ASN1_INTEGER(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(ASN1_INTEGER, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_ASN1_OBJECT(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(ASN1_OBJECT, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_ASN1_OBJECT(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(ASN1_OBJECT, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_ASN1_OBJECT(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(ASN1_OBJECT, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_ASN1_OBJECT(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(ASN1_OBJECT, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_ASN1_TYPE(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(ASN1_TYPE, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_ASN1_TYPE(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(ASN1_TYPE, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_ASN1_TYPE(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(ASN1_TYPE, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_ASN1_TYPE(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(ASN1_TYPE, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_ASN1_UTF8STRING(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(ASN1_UTF8STRING, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_ASN1_UTF8STRING(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(ASN1_UTF8STRING, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_ASN1_UTF8STRING(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(ASN1_UTF8STRING, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_ASN1_UTF8STRING(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(ASN1_UTF8STRING, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_DIST_POINT(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(DIST_POINT, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_DIST_POINT(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(DIST_POINT, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_DIST_POINT(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(DIST_POINT, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_DIST_POINT(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(DIST_POINT, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_ESS_CERT_ID(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(ESS_CERT_ID, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_ESS_CERT_ID(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(ESS_CERT_ID, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_ESS_CERT_ID(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(ESS_CERT_ID, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_ESS_CERT_ID(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(ESS_CERT_ID, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_EVP_MD(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(EVP_MD, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_EVP_MD(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(EVP_MD, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_EVP_MD(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(EVP_MD, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_EVP_MD(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(EVP_MD, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_GENERAL_NAME(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(GENERAL_NAME, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_GENERAL_NAME(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(GENERAL_NAME, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_GENERAL_NAME(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(GENERAL_NAME, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_GENERAL_NAME(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(GENERAL_NAME, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_OCSP_ONEREQ(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(OCSP_ONEREQ, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_OCSP_ONEREQ(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(OCSP_ONEREQ, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_OCSP_ONEREQ(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(OCSP_ONEREQ, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_OCSP_ONEREQ(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(OCSP_ONEREQ, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_OCSP_SINGLERESP(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(OCSP_SINGLERESP, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_OCSP_SINGLERESP(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(OCSP_SINGLERESP, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_OCSP_SINGLERESP(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(OCSP_SINGLERESP, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_OCSP_SINGLERESP(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(OCSP_SINGLERESP, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_PKCS12_SAFEBAG(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(PKCS12_SAFEBAG, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_PKCS12_SAFEBAG(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(PKCS12_SAFEBAG, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_PKCS12_SAFEBAG(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(PKCS12_SAFEBAG, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_PKCS12_SAFEBAG(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(PKCS12_SAFEBAG, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_PKCS7(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(PKCS7, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_PKCS7(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(PKCS7, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_PKCS7(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(PKCS7, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_PKCS7(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(PKCS7, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(PKCS7_RECIP_INFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(PKCS7_RECIP_INFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_PKCS7_RECIP_INFO(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(PKCS7_RECIP_INFO, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_PKCS7_RECIP_INFO(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(PKCS7_RECIP_INFO, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(PKCS7_SIGNER_INFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(PKCS7_SIGNER_INFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_PKCS7_SIGNER_INFO(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(PKCS7_SIGNER_INFO, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_PKCS7_SIGNER_INFO(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(PKCS7_SIGNER_INFO, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_POLICYINFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(POLICYINFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_POLICYINFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(POLICYINFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_POLICYINFO(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(POLICYINFO, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_POLICYINFO(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(POLICYINFO, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_POLICYQUALINFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(POLICYQUALINFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_POLICYQUALINFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(POLICYQUALINFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_POLICYQUALINFO(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(POLICYQUALINFO, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_POLICYQUALINFO(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(POLICYQUALINFO, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_SXNETID(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(SXNETID, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_SXNETID(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(SXNETID, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_SXNETID(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(SXNETID, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_SXNETID(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(SXNETID, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_X509(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(X509, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_X509(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(X509, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_X509(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(X509, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_X509(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(X509, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_X509_ALGOR(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(X509_ALGOR, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_X509_ALGOR(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(X509_ALGOR, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_X509_ALGOR(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(X509_ALGOR, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_X509_ALGOR(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(X509_ALGOR, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_X509_ATTRIBUTE(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(X509_ATTRIBUTE, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_X509_ATTRIBUTE(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(X509_ATTRIBUTE, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_X509_ATTRIBUTE(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(X509_ATTRIBUTE, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_X509_ATTRIBUTE(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(X509_ATTRIBUTE, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_X509_CRL(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(X509_CRL, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_X509_CRL(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(X509_CRL, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_X509_CRL(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(X509_CRL, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_X509_CRL(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(X509_CRL, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_X509_EXTENSION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(X509_EXTENSION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_X509_EXTENSION(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(X509_EXTENSION, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_X509_EXTENSION(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(X509_EXTENSION, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_X509_EXTENSION(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(X509_EXTENSION, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_X509_NAME_ENTRY(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(X509_NAME_ENTRY, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_X509_NAME_ENTRY(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(X509_NAME_ENTRY, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_X509_NAME_ENTRY(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(X509_NAME_ENTRY, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_X509_NAME_ENTRY(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(X509_NAME_ENTRY, (buf), (len), (d2i_func), (free_func)) # define d2i_ASN1_SET_OF_X509_REVOKED(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \ SKM_ASN1_SET_OF_d2i(X509_REVOKED, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) # define i2d_ASN1_SET_OF_X509_REVOKED(st, pp, i2d_func, ex_tag, ex_class, is_set) \ SKM_ASN1_SET_OF_i2d(X509_REVOKED, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set)) # define ASN1_seq_pack_X509_REVOKED(st, i2d_func, buf, len) \ SKM_ASN1_seq_pack(X509_REVOKED, (st), (i2d_func), (buf), (len)) # define ASN1_seq_unpack_X509_REVOKED(buf, len, d2i_func, free_func) \ SKM_ASN1_seq_unpack(X509_REVOKED, (buf), (len), (d2i_func), (free_func)) # define PKCS12_decrypt_d2i_PKCS12_SAFEBAG(algor, d2i_func, free_func, pass, passlen, oct, seq) \ SKM_PKCS12_decrypt_d2i(PKCS12_SAFEBAG, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq)) # define PKCS12_decrypt_d2i_PKCS7(algor, d2i_func, free_func, pass, passlen, oct, seq) \ SKM_PKCS12_decrypt_d2i(PKCS7, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq)) # define lh_ADDED_OBJ_new() LHM_lh_new(ADDED_OBJ,added_obj) # define lh_ADDED_OBJ_insert(lh,inst) LHM_lh_insert(ADDED_OBJ,lh,inst) # define lh_ADDED_OBJ_retrieve(lh,inst) LHM_lh_retrieve(ADDED_OBJ,lh,inst) # define lh_ADDED_OBJ_delete(lh,inst) LHM_lh_delete(ADDED_OBJ,lh,inst) # define lh_ADDED_OBJ_doall(lh,fn) LHM_lh_doall(ADDED_OBJ,lh,fn) # define lh_ADDED_OBJ_doall_arg(lh,fn,arg_type,arg) \ LHM_lh_doall_arg(ADDED_OBJ,lh,fn,arg_type,arg) # define lh_ADDED_OBJ_error(lh) LHM_lh_error(ADDED_OBJ,lh) # define lh_ADDED_OBJ_num_items(lh) LHM_lh_num_items(ADDED_OBJ,lh) # define lh_ADDED_OBJ_down_load(lh) LHM_lh_down_load(ADDED_OBJ,lh) # define lh_ADDED_OBJ_node_stats_bio(lh,out) \ LHM_lh_node_stats_bio(ADDED_OBJ,lh,out) # define lh_ADDED_OBJ_node_usage_stats_bio(lh,out) \ LHM_lh_node_usage_stats_bio(ADDED_OBJ,lh,out) # define lh_ADDED_OBJ_stats_bio(lh,out) \ LHM_lh_stats_bio(ADDED_OBJ,lh,out) # define lh_ADDED_OBJ_free(lh) LHM_lh_free(ADDED_OBJ,lh) # define lh_APP_INFO_new() LHM_lh_new(APP_INFO,app_info) # define lh_APP_INFO_insert(lh,inst) LHM_lh_insert(APP_INFO,lh,inst) # define lh_APP_INFO_retrieve(lh,inst) LHM_lh_retrieve(APP_INFO,lh,inst) # define lh_APP_INFO_delete(lh,inst) LHM_lh_delete(APP_INFO,lh,inst) # define lh_APP_INFO_doall(lh,fn) LHM_lh_doall(APP_INFO,lh,fn) # define lh_APP_INFO_doall_arg(lh,fn,arg_type,arg) \ LHM_lh_doall_arg(APP_INFO,lh,fn,arg_type,arg) # define lh_APP_INFO_error(lh) LHM_lh_error(APP_INFO,lh) # define lh_APP_INFO_num_items(lh) LHM_lh_num_items(APP_INFO,lh) # define lh_APP_INFO_down_load(lh) LHM_lh_down_load(APP_INFO,lh) # define lh_APP_INFO_node_stats_bio(lh,out) \ LHM_lh_node_stats_bio(APP_INFO,lh,out) # define lh_APP_INFO_node_usage_stats_bio(lh,out) \ LHM_lh_node_usage_stats_bio(APP_INFO,lh,out) # define lh_APP_INFO_stats_bio(lh,out) \ LHM_lh_stats_bio(APP_INFO,lh,out) # define lh_APP_INFO_free(lh) LHM_lh_free(APP_INFO,lh) # define lh_CONF_VALUE_new() LHM_lh_new(CONF_VALUE,conf_value) # define lh_CONF_VALUE_insert(lh,inst) LHM_lh_insert(CONF_VALUE,lh,inst) # define lh_CONF_VALUE_retrieve(lh,inst) LHM_lh_retrieve(CONF_VALUE,lh,inst) # define lh_CONF_VALUE_delete(lh,inst) LHM_lh_delete(CONF_VALUE,lh,inst) # define lh_CONF_VALUE_doall(lh,fn) LHM_lh_doall(CONF_VALUE,lh,fn) # define lh_CONF_VALUE_doall_arg(lh,fn,arg_type,arg) \ LHM_lh_doall_arg(CONF_VALUE,lh,fn,arg_type,arg) # define lh_CONF_VALUE_error(lh) LHM_lh_error(CONF_VALUE,lh) # define lh_CONF_VALUE_num_items(lh) LHM_lh_num_items(CONF_VALUE,lh) # define lh_CONF_VALUE_down_load(lh) LHM_lh_down_load(CONF_VALUE,lh) # define lh_CONF_VALUE_node_stats_bio(lh,out) \ LHM_lh_node_stats_bio(CONF_VALUE,lh,out) # define lh_CONF_VALUE_node_usage_stats_bio(lh,out) \ LHM_lh_node_usage_stats_bio(CONF_VALUE,lh,out) # define lh_CONF_VALUE_stats_bio(lh,out) \ LHM_lh_stats_bio(CONF_VALUE,lh,out) # define lh_CONF_VALUE_free(lh) LHM_lh_free(CONF_VALUE,lh) # define lh_ENGINE_PILE_new() LHM_lh_new(ENGINE_PILE,engine_pile) # define lh_ENGINE_PILE_insert(lh,inst) LHM_lh_insert(ENGINE_PILE,lh,inst) # define lh_ENGINE_PILE_retrieve(lh,inst) LHM_lh_retrieve(ENGINE_PILE,lh,inst) # define lh_ENGINE_PILE_delete(lh,inst) LHM_lh_delete(ENGINE_PILE,lh,inst) # define lh_ENGINE_PILE_doall(lh,fn) LHM_lh_doall(ENGINE_PILE,lh,fn) # define lh_ENGINE_PILE_doall_arg(lh,fn,arg_type,arg) \ LHM_lh_doall_arg(ENGINE_PILE,lh,fn,arg_type,arg) # define lh_ENGINE_PILE_error(lh) LHM_lh_error(ENGINE_PILE,lh) # define lh_ENGINE_PILE_num_items(lh) LHM_lh_num_items(ENGINE_PILE,lh) # define lh_ENGINE_PILE_down_load(lh) LHM_lh_down_load(ENGINE_PILE,lh) # define lh_ENGINE_PILE_node_stats_bio(lh,out) \ LHM_lh_node_stats_bio(ENGINE_PILE,lh,out) # define lh_ENGINE_PILE_node_usage_stats_bio(lh,out) \ LHM_lh_node_usage_stats_bio(ENGINE_PILE,lh,out) # define lh_ENGINE_PILE_stats_bio(lh,out) \ LHM_lh_stats_bio(ENGINE_PILE,lh,out) # define lh_ENGINE_PILE_free(lh) LHM_lh_free(ENGINE_PILE,lh) # define lh_ERR_STATE_new() LHM_lh_new(ERR_STATE,err_state) # define lh_ERR_STATE_insert(lh,inst) LHM_lh_insert(ERR_STATE,lh,inst) # define lh_ERR_STATE_retrieve(lh,inst) LHM_lh_retrieve(ERR_STATE,lh,inst) # define lh_ERR_STATE_delete(lh,inst) LHM_lh_delete(ERR_STATE,lh,inst) # define lh_ERR_STATE_doall(lh,fn) LHM_lh_doall(ERR_STATE,lh,fn) # define lh_ERR_STATE_doall_arg(lh,fn,arg_type,arg) \ LHM_lh_doall_arg(ERR_STATE,lh,fn,arg_type,arg) # define lh_ERR_STATE_error(lh) LHM_lh_error(ERR_STATE,lh) # define lh_ERR_STATE_num_items(lh) LHM_lh_num_items(ERR_STATE,lh) # define lh_ERR_STATE_down_load(lh) LHM_lh_down_load(ERR_STATE,lh) # define lh_ERR_STATE_node_stats_bio(lh,out) \ LHM_lh_node_stats_bio(ERR_STATE,lh,out) # define lh_ERR_STATE_node_usage_stats_bio(lh,out) \ LHM_lh_node_usage_stats_bio(ERR_STATE,lh,out) # define lh_ERR_STATE_stats_bio(lh,out) \ LHM_lh_stats_bio(ERR_STATE,lh,out) # define lh_ERR_STATE_free(lh) LHM_lh_free(ERR_STATE,lh) # define lh_ERR_STRING_DATA_new() LHM_lh_new(ERR_STRING_DATA,err_string_data) # define lh_ERR_STRING_DATA_insert(lh,inst) LHM_lh_insert(ERR_STRING_DATA,lh,inst) # define lh_ERR_STRING_DATA_retrieve(lh,inst) LHM_lh_retrieve(ERR_STRING_DATA,lh,inst) # define lh_ERR_STRING_DATA_delete(lh,inst) LHM_lh_delete(ERR_STRING_DATA,lh,inst) # define lh_ERR_STRING_DATA_doall(lh,fn) LHM_lh_doall(ERR_STRING_DATA,lh,fn) # define lh_ERR_STRING_DATA_doall_arg(lh,fn,arg_type,arg) \ LHM_lh_doall_arg(ERR_STRING_DATA,lh,fn,arg_type,arg) # define lh_ERR_STRING_DATA_error(lh) LHM_lh_error(ERR_STRING_DATA,lh) # define lh_ERR_STRING_DATA_num_items(lh) LHM_lh_num_items(ERR_STRING_DATA,lh) # define lh_ERR_STRING_DATA_down_load(lh) LHM_lh_down_load(ERR_STRING_DATA,lh) # define lh_ERR_STRING_DATA_node_stats_bio(lh,out) \ LHM_lh_node_stats_bio(ERR_STRING_DATA,lh,out) # define lh_ERR_STRING_DATA_node_usage_stats_bio(lh,out) \ LHM_lh_node_usage_stats_bio(ERR_STRING_DATA,lh,out) # define lh_ERR_STRING_DATA_stats_bio(lh,out) \ LHM_lh_stats_bio(ERR_STRING_DATA,lh,out) # define lh_ERR_STRING_DATA_free(lh) LHM_lh_free(ERR_STRING_DATA,lh) # define lh_EX_CLASS_ITEM_new() LHM_lh_new(EX_CLASS_ITEM,ex_class_item) # define lh_EX_CLASS_ITEM_insert(lh,inst) LHM_lh_insert(EX_CLASS_ITEM,lh,inst) # define lh_EX_CLASS_ITEM_retrieve(lh,inst) LHM_lh_retrieve(EX_CLASS_ITEM,lh,inst) # define lh_EX_CLASS_ITEM_delete(lh,inst) LHM_lh_delete(EX_CLASS_ITEM,lh,inst) # define lh_EX_CLASS_ITEM_doall(lh,fn) LHM_lh_doall(EX_CLASS_ITEM,lh,fn) # define lh_EX_CLASS_ITEM_doall_arg(lh,fn,arg_type,arg) \ LHM_lh_doall_arg(EX_CLASS_ITEM,lh,fn,arg_type,arg) # define lh_EX_CLASS_ITEM_error(lh) LHM_lh_error(EX_CLASS_ITEM,lh) # define lh_EX_CLASS_ITEM_num_items(lh) LHM_lh_num_items(EX_CLASS_ITEM,lh) # define lh_EX_CLASS_ITEM_down_load(lh) LHM_lh_down_load(EX_CLASS_ITEM,lh) # define lh_EX_CLASS_ITEM_node_stats_bio(lh,out) \ LHM_lh_node_stats_bio(EX_CLASS_ITEM,lh,out) # define lh_EX_CLASS_ITEM_node_usage_stats_bio(lh,out) \ LHM_lh_node_usage_stats_bio(EX_CLASS_ITEM,lh,out) # define lh_EX_CLASS_ITEM_stats_bio(lh,out) \ LHM_lh_stats_bio(EX_CLASS_ITEM,lh,out) # define lh_EX_CLASS_ITEM_free(lh) LHM_lh_free(EX_CLASS_ITEM,lh) # define lh_FUNCTION_new() LHM_lh_new(FUNCTION,function) # define lh_FUNCTION_insert(lh,inst) LHM_lh_insert(FUNCTION,lh,inst) # define lh_FUNCTION_retrieve(lh,inst) LHM_lh_retrieve(FUNCTION,lh,inst) # define lh_FUNCTION_delete(lh,inst) LHM_lh_delete(FUNCTION,lh,inst) # define lh_FUNCTION_doall(lh,fn) LHM_lh_doall(FUNCTION,lh,fn) # define lh_FUNCTION_doall_arg(lh,fn,arg_type,arg) \ LHM_lh_doall_arg(FUNCTION,lh,fn,arg_type,arg) # define lh_FUNCTION_error(lh) LHM_lh_error(FUNCTION,lh) # define lh_FUNCTION_num_items(lh) LHM_lh_num_items(FUNCTION,lh) # define lh_FUNCTION_down_load(lh) LHM_lh_down_load(FUNCTION,lh) # define lh_FUNCTION_node_stats_bio(lh,out) \ LHM_lh_node_stats_bio(FUNCTION,lh,out) # define lh_FUNCTION_node_usage_stats_bio(lh,out) \ LHM_lh_node_usage_stats_bio(FUNCTION,lh,out) # define lh_FUNCTION_stats_bio(lh,out) \ LHM_lh_stats_bio(FUNCTION,lh,out) # define lh_FUNCTION_free(lh) LHM_lh_free(FUNCTION,lh) # define lh_MEM_new() LHM_lh_new(MEM,mem) # define lh_MEM_insert(lh,inst) LHM_lh_insert(MEM,lh,inst) # define lh_MEM_retrieve(lh,inst) LHM_lh_retrieve(MEM,lh,inst) # define lh_MEM_delete(lh,inst) LHM_lh_delete(MEM,lh,inst) # define lh_MEM_doall(lh,fn) LHM_lh_doall(MEM,lh,fn) # define lh_MEM_doall_arg(lh,fn,arg_type,arg) \ LHM_lh_doall_arg(MEM,lh,fn,arg_type,arg) # define lh_MEM_error(lh) LHM_lh_error(MEM,lh) # define lh_MEM_num_items(lh) LHM_lh_num_items(MEM,lh) # define lh_MEM_down_load(lh) LHM_lh_down_load(MEM,lh) # define lh_MEM_node_stats_bio(lh,out) \ LHM_lh_node_stats_bio(MEM,lh,out) # define lh_MEM_node_usage_stats_bio(lh,out) \ LHM_lh_node_usage_stats_bio(MEM,lh,out) # define lh_MEM_stats_bio(lh,out) \ LHM_lh_stats_bio(MEM,lh,out) # define lh_MEM_free(lh) LHM_lh_free(MEM,lh) # define lh_OBJ_NAME_new() LHM_lh_new(OBJ_NAME,obj_name) # define lh_OBJ_NAME_insert(lh,inst) LHM_lh_insert(OBJ_NAME,lh,inst) # define lh_OBJ_NAME_retrieve(lh,inst) LHM_lh_retrieve(OBJ_NAME,lh,inst) # define lh_OBJ_NAME_delete(lh,inst) LHM_lh_delete(OBJ_NAME,lh,inst) # define lh_OBJ_NAME_doall(lh,fn) LHM_lh_doall(OBJ_NAME,lh,fn) # define lh_OBJ_NAME_doall_arg(lh,fn,arg_type,arg) \ LHM_lh_doall_arg(OBJ_NAME,lh,fn,arg_type,arg) # define lh_OBJ_NAME_error(lh) LHM_lh_error(OBJ_NAME,lh) # define lh_OBJ_NAME_num_items(lh) LHM_lh_num_items(OBJ_NAME,lh) # define lh_OBJ_NAME_down_load(lh) LHM_lh_down_load(OBJ_NAME,lh) # define lh_OBJ_NAME_node_stats_bio(lh,out) \ LHM_lh_node_stats_bio(OBJ_NAME,lh,out) # define lh_OBJ_NAME_node_usage_stats_bio(lh,out) \ LHM_lh_node_usage_stats_bio(OBJ_NAME,lh,out) # define lh_OBJ_NAME_stats_bio(lh,out) \ LHM_lh_stats_bio(OBJ_NAME,lh,out) # define lh_OBJ_NAME_free(lh) LHM_lh_free(OBJ_NAME,lh) # define lh_OPENSSL_CSTRING_new() LHM_lh_new(OPENSSL_CSTRING,openssl_cstring) # define lh_OPENSSL_CSTRING_insert(lh,inst) LHM_lh_insert(OPENSSL_CSTRING,lh,inst) # define lh_OPENSSL_CSTRING_retrieve(lh,inst) LHM_lh_retrieve(OPENSSL_CSTRING,lh,inst) # define lh_OPENSSL_CSTRING_delete(lh,inst) LHM_lh_delete(OPENSSL_CSTRING,lh,inst) # define lh_OPENSSL_CSTRING_doall(lh,fn) LHM_lh_doall(OPENSSL_CSTRING,lh,fn) # define lh_OPENSSL_CSTRING_doall_arg(lh,fn,arg_type,arg) \ LHM_lh_doall_arg(OPENSSL_CSTRING,lh,fn,arg_type,arg) # define lh_OPENSSL_CSTRING_error(lh) LHM_lh_error(OPENSSL_CSTRING,lh) # define lh_OPENSSL_CSTRING_num_items(lh) LHM_lh_num_items(OPENSSL_CSTRING,lh) # define lh_OPENSSL_CSTRING_down_load(lh) LHM_lh_down_load(OPENSSL_CSTRING,lh) # define lh_OPENSSL_CSTRING_node_stats_bio(lh,out) \ LHM_lh_node_stats_bio(OPENSSL_CSTRING,lh,out) # define lh_OPENSSL_CSTRING_node_usage_stats_bio(lh,out) \ LHM_lh_node_usage_stats_bio(OPENSSL_CSTRING,lh,out) # define lh_OPENSSL_CSTRING_stats_bio(lh,out) \ LHM_lh_stats_bio(OPENSSL_CSTRING,lh,out) # define lh_OPENSSL_CSTRING_free(lh) LHM_lh_free(OPENSSL_CSTRING,lh) # define lh_OPENSSL_STRING_new() LHM_lh_new(OPENSSL_STRING,openssl_string) # define lh_OPENSSL_STRING_insert(lh,inst) LHM_lh_insert(OPENSSL_STRING,lh,inst) # define lh_OPENSSL_STRING_retrieve(lh,inst) LHM_lh_retrieve(OPENSSL_STRING,lh,inst) # define lh_OPENSSL_STRING_delete(lh,inst) LHM_lh_delete(OPENSSL_STRING,lh,inst) # define lh_OPENSSL_STRING_doall(lh,fn) LHM_lh_doall(OPENSSL_STRING,lh,fn) # define lh_OPENSSL_STRING_doall_arg(lh,fn,arg_type,arg) \ LHM_lh_doall_arg(OPENSSL_STRING,lh,fn,arg_type,arg) # define lh_OPENSSL_STRING_error(lh) LHM_lh_error(OPENSSL_STRING,lh) # define lh_OPENSSL_STRING_num_items(lh) LHM_lh_num_items(OPENSSL_STRING,lh) # define lh_OPENSSL_STRING_down_load(lh) LHM_lh_down_load(OPENSSL_STRING,lh) # define lh_OPENSSL_STRING_node_stats_bio(lh,out) \ LHM_lh_node_stats_bio(OPENSSL_STRING,lh,out) # define lh_OPENSSL_STRING_node_usage_stats_bio(lh,out) \ LHM_lh_node_usage_stats_bio(OPENSSL_STRING,lh,out) # define lh_OPENSSL_STRING_stats_bio(lh,out) \ LHM_lh_stats_bio(OPENSSL_STRING,lh,out) # define lh_OPENSSL_STRING_free(lh) LHM_lh_free(OPENSSL_STRING,lh) # define lh_SSL_SESSION_new() LHM_lh_new(SSL_SESSION,ssl_session) # define lh_SSL_SESSION_insert(lh,inst) LHM_lh_insert(SSL_SESSION,lh,inst) # define lh_SSL_SESSION_retrieve(lh,inst) LHM_lh_retrieve(SSL_SESSION,lh,inst) # define lh_SSL_SESSION_delete(lh,inst) LHM_lh_delete(SSL_SESSION,lh,inst) # define lh_SSL_SESSION_doall(lh,fn) LHM_lh_doall(SSL_SESSION,lh,fn) # define lh_SSL_SESSION_doall_arg(lh,fn,arg_type,arg) \ LHM_lh_doall_arg(SSL_SESSION,lh,fn,arg_type,arg) # define lh_SSL_SESSION_error(lh) LHM_lh_error(SSL_SESSION,lh) # define lh_SSL_SESSION_num_items(lh) LHM_lh_num_items(SSL_SESSION,lh) # define lh_SSL_SESSION_down_load(lh) LHM_lh_down_load(SSL_SESSION,lh) # define lh_SSL_SESSION_node_stats_bio(lh,out) \ LHM_lh_node_stats_bio(SSL_SESSION,lh,out) # define lh_SSL_SESSION_node_usage_stats_bio(lh,out) \ LHM_lh_node_usage_stats_bio(SSL_SESSION,lh,out) # define lh_SSL_SESSION_stats_bio(lh,out) \ LHM_lh_stats_bio(SSL_SESSION,lh,out) # define lh_SSL_SESSION_free(lh) LHM_lh_free(SSL_SESSION,lh) #ifdef __cplusplus } #endif #endif /* !defined HEADER_SAFESTACK_H */ ================================================ FILE: 3rParty/FFmpeg/include/openssl/seed.h ================================================ /* * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Neither the name of author nor the names of its contributors may * be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ /* ==================================================================== * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_SEED_H # define HEADER_SEED_H # include # include # include # ifdef OPENSSL_NO_SEED # error SEED is disabled. # endif /* look whether we need 'long' to get 32 bits */ # ifdef AES_LONG # ifndef SEED_LONG # define SEED_LONG 1 # endif # endif # if !defined(NO_SYS_TYPES_H) # include # endif # define SEED_BLOCK_SIZE 16 # define SEED_KEY_LENGTH 16 #ifdef __cplusplus extern "C" { #endif typedef struct seed_key_st { # ifdef SEED_LONG unsigned long data[32]; # else unsigned int data[32]; # endif } SEED_KEY_SCHEDULE; # ifdef OPENSSL_FIPS void private_SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], SEED_KEY_SCHEDULE *ks); # endif void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], SEED_KEY_SCHEDULE *ks); void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], unsigned char d[SEED_BLOCK_SIZE], const SEED_KEY_SCHEDULE *ks); void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], unsigned char d[SEED_BLOCK_SIZE], const SEED_KEY_SCHEDULE *ks); void SEED_ecb_encrypt(const unsigned char *in, unsigned char *out, const SEED_KEY_SCHEDULE *ks, int enc); void SEED_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, const SEED_KEY_SCHEDULE *ks, unsigned char ivec[SEED_BLOCK_SIZE], int enc); void SEED_cfb128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const SEED_KEY_SCHEDULE *ks, unsigned char ivec[SEED_BLOCK_SIZE], int *num, int enc); void SEED_ofb128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const SEED_KEY_SCHEDULE *ks, unsigned char ivec[SEED_BLOCK_SIZE], int *num); #ifdef __cplusplus } #endif #endif /* HEADER_SEED_H */ ================================================ FILE: 3rParty/FFmpeg/include/openssl/sha.h ================================================ /* crypto/sha/sha.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_SHA_H # define HEADER_SHA_H # include # include #ifdef __cplusplus extern "C" { #endif # if defined(OPENSSL_NO_SHA) || (defined(OPENSSL_NO_SHA0) && defined(OPENSSL_NO_SHA1)) # error SHA is disabled. # endif # if defined(OPENSSL_FIPS) # define FIPS_SHA_SIZE_T size_t # endif /*- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * ! SHA_LONG has to be at least 32 bits wide. If it's wider, then ! * ! SHA_LONG_LOG2 has to be defined along. ! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ # if defined(__LP32__) # define SHA_LONG unsigned long # elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__) # define SHA_LONG unsigned long # define SHA_LONG_LOG2 3 # else # define SHA_LONG unsigned int # endif # define SHA_LBLOCK 16 # define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a * contiguous array of 32 bit wide * big-endian values. */ # define SHA_LAST_BLOCK (SHA_CBLOCK-8) # define SHA_DIGEST_LENGTH 20 typedef struct SHAstate_st { SHA_LONG h0, h1, h2, h3, h4; SHA_LONG Nl, Nh; SHA_LONG data[SHA_LBLOCK]; unsigned int num; } SHA_CTX; # ifndef OPENSSL_NO_SHA0 # ifdef OPENSSL_FIPS int private_SHA_Init(SHA_CTX *c); # endif int SHA_Init(SHA_CTX *c); int SHA_Update(SHA_CTX *c, const void *data, size_t len); int SHA_Final(unsigned char *md, SHA_CTX *c); unsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md); void SHA_Transform(SHA_CTX *c, const unsigned char *data); # endif # ifndef OPENSSL_NO_SHA1 # ifdef OPENSSL_FIPS int private_SHA1_Init(SHA_CTX *c); # endif int SHA1_Init(SHA_CTX *c); int SHA1_Update(SHA_CTX *c, const void *data, size_t len); int SHA1_Final(unsigned char *md, SHA_CTX *c); unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); void SHA1_Transform(SHA_CTX *c, const unsigned char *data); # endif # define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a * contiguous array of 32 bit wide * big-endian values. */ # define SHA224_DIGEST_LENGTH 28 # define SHA256_DIGEST_LENGTH 32 typedef struct SHA256state_st { SHA_LONG h[8]; SHA_LONG Nl, Nh; SHA_LONG data[SHA_LBLOCK]; unsigned int num, md_len; } SHA256_CTX; # ifndef OPENSSL_NO_SHA256 # ifdef OPENSSL_FIPS int private_SHA224_Init(SHA256_CTX *c); int private_SHA256_Init(SHA256_CTX *c); # endif int SHA224_Init(SHA256_CTX *c); int SHA224_Update(SHA256_CTX *c, const void *data, size_t len); int SHA224_Final(unsigned char *md, SHA256_CTX *c); unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md); int SHA256_Init(SHA256_CTX *c); int SHA256_Update(SHA256_CTX *c, const void *data, size_t len); int SHA256_Final(unsigned char *md, SHA256_CTX *c); unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); # endif # define SHA384_DIGEST_LENGTH 48 # define SHA512_DIGEST_LENGTH 64 # ifndef OPENSSL_NO_SHA512 /* * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64 * being exactly 64-bit wide. See Implementation Notes in sha512.c * for further details. */ /* * SHA-512 treats input data as a * contiguous array of 64 bit * wide big-endian values. */ # define SHA512_CBLOCK (SHA_LBLOCK*8) # if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) # define SHA_LONG64 unsigned __int64 # define U64(C) C##UI64 # elif defined(__arch64__) # define SHA_LONG64 unsigned long # define U64(C) C##UL # else # define SHA_LONG64 unsigned long long # define U64(C) C##ULL # endif typedef struct SHA512state_st { SHA_LONG64 h[8]; SHA_LONG64 Nl, Nh; union { SHA_LONG64 d[SHA_LBLOCK]; unsigned char p[SHA512_CBLOCK]; } u; unsigned int num, md_len; } SHA512_CTX; # endif # ifndef OPENSSL_NO_SHA512 # ifdef OPENSSL_FIPS int private_SHA384_Init(SHA512_CTX *c); int private_SHA512_Init(SHA512_CTX *c); # endif int SHA384_Init(SHA512_CTX *c); int SHA384_Update(SHA512_CTX *c, const void *data, size_t len); int SHA384_Final(unsigned char *md, SHA512_CTX *c); unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md); int SHA512_Init(SHA512_CTX *c); int SHA512_Update(SHA512_CTX *c, const void *data, size_t len); int SHA512_Final(unsigned char *md, SHA512_CTX *c); unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md); void SHA512_Transform(SHA512_CTX *c, const unsigned char *data); # endif #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/srp.h ================================================ /* crypto/srp/srp.h */ /* * Written by Christophe Renou (christophe.renou@edelweb.fr) with the * precious help of Peter Sylvester (peter.sylvester@edelweb.fr) for the * EdelKey project and contributed to the OpenSSL project 2004. */ /* ==================================================================== * Copyright (c) 2004 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef __SRP_H__ # define __SRP_H__ # ifndef OPENSSL_NO_SRP # include # include #ifdef __cplusplus extern "C" { #endif # include # include # include typedef struct SRP_gN_cache_st { char *b64_bn; BIGNUM *bn; } SRP_gN_cache; DECLARE_STACK_OF(SRP_gN_cache) typedef struct SRP_user_pwd_st { /* Owned by us. */ char *id; BIGNUM *s; BIGNUM *v; /* Not owned by us. */ const BIGNUM *g; const BIGNUM *N; /* Owned by us. */ char *info; } SRP_user_pwd; DECLARE_STACK_OF(SRP_user_pwd) void SRP_user_pwd_free(SRP_user_pwd *user_pwd); typedef struct SRP_VBASE_st { STACK_OF(SRP_user_pwd) *users_pwd; STACK_OF(SRP_gN_cache) *gN_cache; /* to simulate a user */ char *seed_key; BIGNUM *default_g; BIGNUM *default_N; } SRP_VBASE; /* * Structure interne pour retenir les couples N et g */ typedef struct SRP_gN_st { char *id; BIGNUM *g; BIGNUM *N; } SRP_gN; DECLARE_STACK_OF(SRP_gN) SRP_VBASE *SRP_VBASE_new(char *seed_key); int SRP_VBASE_free(SRP_VBASE *vb); int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); /* This method ignores the configured seed and fails for an unknown user. */ SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username); /* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); char *SRP_create_verifier(const char *user, const char *pass, char **salt, char **verifier, const char *N, const char *g); int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, BIGNUM **verifier, BIGNUM *N, BIGNUM *g); # define SRP_NO_ERROR 0 # define SRP_ERR_VBASE_INCOMPLETE_FILE 1 # define SRP_ERR_VBASE_BN_LIB 2 # define SRP_ERR_OPEN_FILE 3 # define SRP_ERR_MEMORY 4 # define DB_srptype 0 # define DB_srpverifier 1 # define DB_srpsalt 2 # define DB_srpid 3 # define DB_srpgN 4 # define DB_srpinfo 5 # undef DB_NUMBER # define DB_NUMBER 6 # define DB_SRP_INDEX 'I' # define DB_SRP_VALID 'V' # define DB_SRP_REVOKED 'R' # define DB_SRP_MODIF 'v' /* see srp.c */ char *SRP_check_known_gN_param(BIGNUM *g, BIGNUM *N); SRP_gN *SRP_get_default_gN(const char *id); /* server side .... */ BIGNUM *SRP_Calc_server_key(BIGNUM *A, BIGNUM *v, BIGNUM *u, BIGNUM *b, BIGNUM *N); BIGNUM *SRP_Calc_B(BIGNUM *b, BIGNUM *N, BIGNUM *g, BIGNUM *v); int SRP_Verify_A_mod_N(BIGNUM *A, BIGNUM *N); BIGNUM *SRP_Calc_u(BIGNUM *A, BIGNUM *B, BIGNUM *N); /* client side .... */ BIGNUM *SRP_Calc_x(BIGNUM *s, const char *user, const char *pass); BIGNUM *SRP_Calc_A(BIGNUM *a, BIGNUM *N, BIGNUM *g); BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x, BIGNUM *a, BIGNUM *u); int SRP_Verify_B_mod_N(BIGNUM *B, BIGNUM *N); # define SRP_MINIMAL_N 1024 #ifdef __cplusplus } #endif # endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/srtp.h ================================================ /* ssl/srtp.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* * DTLS code by Eric Rescorla * * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc. */ #ifndef HEADER_D1_SRTP_H # define HEADER_D1_SRTP_H # include #ifdef __cplusplus extern "C" { #endif # define SRTP_AES128_CM_SHA1_80 0x0001 # define SRTP_AES128_CM_SHA1_32 0x0002 # define SRTP_AES128_F8_SHA1_80 0x0003 # define SRTP_AES128_F8_SHA1_32 0x0004 # define SRTP_NULL_SHA1_80 0x0005 # define SRTP_NULL_SHA1_32 0x0006 # ifndef OPENSSL_NO_SRTP int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); int SSL_set_tlsext_use_srtp(SSL *ctx, const char *profiles); STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); # endif #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/ssl.h ================================================ /* ssl/ssl.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * ECC cipher suite support in OpenSSL originally developed by * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. */ /* ==================================================================== * Copyright 2005 Nokia. All rights reserved. * * The portions of the attached software ("Contribution") is developed by * Nokia Corporation and is licensed pursuant to the OpenSSL open source * license. * * The Contribution, originally written by Mika Kousa and Pasi Eronen of * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites * support (see RFC 4279) to OpenSSL. * * No patent licenses or other rights except those expressly stated in * the OpenSSL open source license shall be deemed granted or received * expressly, by implication, estoppel, or otherwise. * * No assurances are provided by Nokia that the Contribution does not * infringe the patent or other intellectual property rights of any third * party or that the license provides you with all the necessary rights * to make use of the Contribution. * * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR * OTHERWISE. */ #ifndef HEADER_SSL_H # define HEADER_SSL_H # include # ifndef OPENSSL_NO_COMP # include # endif # ifndef OPENSSL_NO_BIO # include # endif # ifndef OPENSSL_NO_DEPRECATED # ifndef OPENSSL_NO_X509 # include # endif # include # include # include # endif # include # include # include # include # include #ifdef __cplusplus extern "C" { #endif /* SSLeay version number for ASN.1 encoding of the session information */ /*- * Version 0 - initial version * Version 1 - added the optional peer certificate */ # define SSL_SESSION_ASN1_VERSION 0x0001 /* text strings for the ciphers */ # define SSL_TXT_NULL_WITH_MD5 SSL2_TXT_NULL_WITH_MD5 # define SSL_TXT_RC4_128_WITH_MD5 SSL2_TXT_RC4_128_WITH_MD5 # define SSL_TXT_RC4_128_EXPORT40_WITH_MD5 SSL2_TXT_RC4_128_EXPORT40_WITH_MD5 # define SSL_TXT_RC2_128_CBC_WITH_MD5 SSL2_TXT_RC2_128_CBC_WITH_MD5 # define SSL_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 # define SSL_TXT_IDEA_128_CBC_WITH_MD5 SSL2_TXT_IDEA_128_CBC_WITH_MD5 # define SSL_TXT_DES_64_CBC_WITH_MD5 SSL2_TXT_DES_64_CBC_WITH_MD5 # define SSL_TXT_DES_64_CBC_WITH_SHA SSL2_TXT_DES_64_CBC_WITH_SHA # define SSL_TXT_DES_192_EDE3_CBC_WITH_MD5 SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5 # define SSL_TXT_DES_192_EDE3_CBC_WITH_SHA SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA /* * VRS Additional Kerberos5 entries */ # define SSL_TXT_KRB5_DES_64_CBC_SHA SSL3_TXT_KRB5_DES_64_CBC_SHA # define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA # define SSL_TXT_KRB5_RC4_128_SHA SSL3_TXT_KRB5_RC4_128_SHA # define SSL_TXT_KRB5_IDEA_128_CBC_SHA SSL3_TXT_KRB5_IDEA_128_CBC_SHA # define SSL_TXT_KRB5_DES_64_CBC_MD5 SSL3_TXT_KRB5_DES_64_CBC_MD5 # define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5 # define SSL_TXT_KRB5_RC4_128_MD5 SSL3_TXT_KRB5_RC4_128_MD5 # define SSL_TXT_KRB5_IDEA_128_CBC_MD5 SSL3_TXT_KRB5_IDEA_128_CBC_MD5 # define SSL_TXT_KRB5_DES_40_CBC_SHA SSL3_TXT_KRB5_DES_40_CBC_SHA # define SSL_TXT_KRB5_RC2_40_CBC_SHA SSL3_TXT_KRB5_RC2_40_CBC_SHA # define SSL_TXT_KRB5_RC4_40_SHA SSL3_TXT_KRB5_RC4_40_SHA # define SSL_TXT_KRB5_DES_40_CBC_MD5 SSL3_TXT_KRB5_DES_40_CBC_MD5 # define SSL_TXT_KRB5_RC2_40_CBC_MD5 SSL3_TXT_KRB5_RC2_40_CBC_MD5 # define SSL_TXT_KRB5_RC4_40_MD5 SSL3_TXT_KRB5_RC4_40_MD5 # define SSL_TXT_KRB5_DES_40_CBC_SHA SSL3_TXT_KRB5_DES_40_CBC_SHA # define SSL_TXT_KRB5_DES_40_CBC_MD5 SSL3_TXT_KRB5_DES_40_CBC_MD5 # define SSL_TXT_KRB5_DES_64_CBC_SHA SSL3_TXT_KRB5_DES_64_CBC_SHA # define SSL_TXT_KRB5_DES_64_CBC_MD5 SSL3_TXT_KRB5_DES_64_CBC_MD5 # define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA # define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5 # define SSL_MAX_KRB5_PRINCIPAL_LENGTH 256 # define SSL_MAX_SSL_SESSION_ID_LENGTH 32 # define SSL_MAX_SID_CTX_LENGTH 32 # define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) # define SSL_MAX_KEY_ARG_LENGTH 8 # define SSL_MAX_MASTER_KEY_LENGTH 48 /* These are used to specify which ciphers to use and not to use */ # define SSL_TXT_EXP40 "EXPORT40" # define SSL_TXT_EXP56 "EXPORT56" # define SSL_TXT_LOW "LOW" # define SSL_TXT_MEDIUM "MEDIUM" # define SSL_TXT_HIGH "HIGH" # define SSL_TXT_FIPS "FIPS" # define SSL_TXT_kFZA "kFZA"/* unused! */ # define SSL_TXT_aFZA "aFZA"/* unused! */ # define SSL_TXT_eFZA "eFZA"/* unused! */ # define SSL_TXT_FZA "FZA"/* unused! */ # define SSL_TXT_aNULL "aNULL" # define SSL_TXT_eNULL "eNULL" # define SSL_TXT_NULL "NULL" # define SSL_TXT_kRSA "kRSA" # define SSL_TXT_kDHr "kDHr" # define SSL_TXT_kDHd "kDHd" # define SSL_TXT_kDH "kDH" # define SSL_TXT_kEDH "kEDH" # define SSL_TXT_kDHE "kDHE"/* alias for kEDH */ # define SSL_TXT_kKRB5 "kKRB5" # define SSL_TXT_kECDHr "kECDHr" # define SSL_TXT_kECDHe "kECDHe" # define SSL_TXT_kECDH "kECDH" # define SSL_TXT_kEECDH "kEECDH" # define SSL_TXT_kECDHE "kECDHE"/* alias for kEECDH */ # define SSL_TXT_kPSK "kPSK" # define SSL_TXT_kGOST "kGOST" # define SSL_TXT_kSRP "kSRP" # define SSL_TXT_aRSA "aRSA" # define SSL_TXT_aDSS "aDSS" # define SSL_TXT_aDH "aDH" # define SSL_TXT_aECDH "aECDH" # define SSL_TXT_aKRB5 "aKRB5" # define SSL_TXT_aECDSA "aECDSA" # define SSL_TXT_aPSK "aPSK" # define SSL_TXT_aGOST94 "aGOST94" # define SSL_TXT_aGOST01 "aGOST01" # define SSL_TXT_aGOST "aGOST" # define SSL_TXT_aSRP "aSRP" # define SSL_TXT_DSS "DSS" # define SSL_TXT_DH "DH" # define SSL_TXT_EDH "EDH"/* same as "kEDH:-ADH" */ # define SSL_TXT_DHE "DHE"/* alias for EDH */ # define SSL_TXT_ADH "ADH" # define SSL_TXT_RSA "RSA" # define SSL_TXT_ECDH "ECDH" # define SSL_TXT_EECDH "EECDH"/* same as "kEECDH:-AECDH" */ # define SSL_TXT_ECDHE "ECDHE"/* alias for ECDHE" */ # define SSL_TXT_AECDH "AECDH" # define SSL_TXT_ECDSA "ECDSA" # define SSL_TXT_KRB5 "KRB5" # define SSL_TXT_PSK "PSK" # define SSL_TXT_SRP "SRP" # define SSL_TXT_DES "DES" # define SSL_TXT_3DES "3DES" # define SSL_TXT_RC4 "RC4" # define SSL_TXT_RC2 "RC2" # define SSL_TXT_IDEA "IDEA" # define SSL_TXT_SEED "SEED" # define SSL_TXT_AES128 "AES128" # define SSL_TXT_AES256 "AES256" # define SSL_TXT_AES "AES" # define SSL_TXT_AES_GCM "AESGCM" # define SSL_TXT_CAMELLIA128 "CAMELLIA128" # define SSL_TXT_CAMELLIA256 "CAMELLIA256" # define SSL_TXT_CAMELLIA "CAMELLIA" # define SSL_TXT_MD5 "MD5" # define SSL_TXT_SHA1 "SHA1" # define SSL_TXT_SHA "SHA"/* same as "SHA1" */ # define SSL_TXT_GOST94 "GOST94" # define SSL_TXT_GOST89MAC "GOST89MAC" # define SSL_TXT_SHA256 "SHA256" # define SSL_TXT_SHA384 "SHA384" # define SSL_TXT_SSLV2 "SSLv2" # define SSL_TXT_SSLV3 "SSLv3" # define SSL_TXT_TLSV1 "TLSv1" # define SSL_TXT_TLSV1_1 "TLSv1.1" # define SSL_TXT_TLSV1_2 "TLSv1.2" # define SSL_TXT_EXP "EXP" # define SSL_TXT_EXPORT "EXPORT" # define SSL_TXT_ALL "ALL" /*- * COMPLEMENTOF* definitions. These identifiers are used to (de-select) * ciphers normally not being used. * Example: "RC4" will activate all ciphers using RC4 including ciphers * without authentication, which would normally disabled by DEFAULT (due * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT" * will make sure that it is also disabled in the specific selection. * COMPLEMENTOF* identifiers are portable between version, as adjustments * to the default cipher setup will also be included here. * * COMPLEMENTOFDEFAULT does not experience the same special treatment that * DEFAULT gets, as only selection is being done and no sorting as needed * for DEFAULT. */ # define SSL_TXT_CMPALL "COMPLEMENTOFALL" # define SSL_TXT_CMPDEF "COMPLEMENTOFDEFAULT" /* * The following cipher list is used by default. It also is substituted when * an application-defined cipher list string starts with 'DEFAULT'. */ # define SSL_DEFAULT_CIPHER_LIST "ALL:!EXPORT:!LOW:!aNULL:!eNULL:!SSLv2" /* * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always * starts with a reasonable order, and all we have to do for DEFAULT is * throwing out anonymous and unencrypted ciphersuites! (The latter are not * actually enabled by ALL, but "ALL:RSA" would enable some of them.) */ /* Used in SSL_set_shutdown()/SSL_get_shutdown(); */ # define SSL_SENT_SHUTDOWN 1 # define SSL_RECEIVED_SHUTDOWN 2 #ifdef __cplusplus } #endif #ifdef __cplusplus extern "C" { #endif # if (defined(OPENSSL_NO_RSA) || defined(OPENSSL_NO_MD5)) && !defined(OPENSSL_NO_SSL2) # define OPENSSL_NO_SSL2 # endif # define SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1 # define SSL_FILETYPE_PEM X509_FILETYPE_PEM /* * This is needed to stop compilers complaining about the 'struct ssl_st *' * function parameters used to prototype callbacks in SSL_CTX. */ typedef struct ssl_st *ssl_crock_st; typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT; typedef struct ssl_method_st SSL_METHOD; typedef struct ssl_cipher_st SSL_CIPHER; typedef struct ssl_session_st SSL_SESSION; typedef struct tls_sigalgs_st TLS_SIGALGS; typedef struct ssl_conf_ctx_st SSL_CONF_CTX; DECLARE_STACK_OF(SSL_CIPHER) /* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/ typedef struct srtp_protection_profile_st { const char *name; unsigned long id; } SRTP_PROTECTION_PROFILE; DECLARE_STACK_OF(SRTP_PROTECTION_PROFILE) typedef int (*tls_session_ticket_ext_cb_fn) (SSL *s, const unsigned char *data, int len, void *arg); typedef int (*tls_session_secret_cb_fn) (SSL *s, void *secret, int *secret_len, STACK_OF(SSL_CIPHER) *peer_ciphers, SSL_CIPHER **cipher, void *arg); # ifndef OPENSSL_NO_TLSEXT /* Typedefs for handling custom extensions */ typedef int (*custom_ext_add_cb) (SSL *s, unsigned int ext_type, const unsigned char **out, size_t *outlen, int *al, void *add_arg); typedef void (*custom_ext_free_cb) (SSL *s, unsigned int ext_type, const unsigned char *out, void *add_arg); typedef int (*custom_ext_parse_cb) (SSL *s, unsigned int ext_type, const unsigned char *in, size_t inlen, int *al, void *parse_arg); # endif # ifndef OPENSSL_NO_SSL_INTERN /* used to hold info on the particular ciphers used */ struct ssl_cipher_st { int valid; const char *name; /* text name */ unsigned long id; /* id, 4 bytes, first is version */ /* * changed in 0.9.9: these four used to be portions of a single value * 'algorithms' */ unsigned long algorithm_mkey; /* key exchange algorithm */ unsigned long algorithm_auth; /* server authentication */ unsigned long algorithm_enc; /* symmetric encryption */ unsigned long algorithm_mac; /* symmetric authentication */ unsigned long algorithm_ssl; /* (major) protocol version */ unsigned long algo_strength; /* strength and export flags */ unsigned long algorithm2; /* Extra flags */ int strength_bits; /* Number of bits really used */ int alg_bits; /* Number of bits for algorithm */ }; /* Used to hold functions for SSLv2 or SSLv3/TLSv1 functions */ struct ssl_method_st { int version; int (*ssl_new) (SSL *s); void (*ssl_clear) (SSL *s); void (*ssl_free) (SSL *s); int (*ssl_accept) (SSL *s); int (*ssl_connect) (SSL *s); int (*ssl_read) (SSL *s, void *buf, int len); int (*ssl_peek) (SSL *s, void *buf, int len); int (*ssl_write) (SSL *s, const void *buf, int len); int (*ssl_shutdown) (SSL *s); int (*ssl_renegotiate) (SSL *s); int (*ssl_renegotiate_check) (SSL *s); long (*ssl_get_message) (SSL *s, int st1, int stn, int mt, long max, int *ok); int (*ssl_read_bytes) (SSL *s, int type, unsigned char *buf, int len, int peek); int (*ssl_write_bytes) (SSL *s, int type, const void *buf_, int len); int (*ssl_dispatch_alert) (SSL *s); long (*ssl_ctrl) (SSL *s, int cmd, long larg, void *parg); long (*ssl_ctx_ctrl) (SSL_CTX *ctx, int cmd, long larg, void *parg); const SSL_CIPHER *(*get_cipher_by_char) (const unsigned char *ptr); int (*put_cipher_by_char) (const SSL_CIPHER *cipher, unsigned char *ptr); int (*ssl_pending) (const SSL *s); int (*num_ciphers) (void); const SSL_CIPHER *(*get_cipher) (unsigned ncipher); const struct ssl_method_st *(*get_ssl_method) (int version); long (*get_timeout) (void); struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */ int (*ssl_version) (void); long (*ssl_callback_ctrl) (SSL *s, int cb_id, void (*fp) (void)); long (*ssl_ctx_callback_ctrl) (SSL_CTX *s, int cb_id, void (*fp) (void)); }; /*- * Lets make this into an ASN.1 type structure as follows * SSL_SESSION_ID ::= SEQUENCE { * version INTEGER, -- structure version number * SSLversion INTEGER, -- SSL version number * Cipher OCTET STRING, -- the 3 byte cipher ID * Session_ID OCTET STRING, -- the Session ID * Master_key OCTET STRING, -- the master key * KRB5_principal OCTET STRING -- optional Kerberos principal * Key_Arg [ 0 ] IMPLICIT OCTET STRING, -- the optional Key argument * Time [ 1 ] EXPLICIT INTEGER, -- optional Start Time * Timeout [ 2 ] EXPLICIT INTEGER, -- optional Timeout ins seconds * Peer [ 3 ] EXPLICIT X509, -- optional Peer Certificate * Session_ID_context [ 4 ] EXPLICIT OCTET STRING, -- the Session ID context * Verify_result [ 5 ] EXPLICIT INTEGER, -- X509_V_... code for `Peer' * HostName [ 6 ] EXPLICIT OCTET STRING, -- optional HostName from servername TLS extension * PSK_identity_hint [ 7 ] EXPLICIT OCTET STRING, -- optional PSK identity hint * PSK_identity [ 8 ] EXPLICIT OCTET STRING, -- optional PSK identity * Ticket_lifetime_hint [9] EXPLICIT INTEGER, -- server's lifetime hint for session ticket * Ticket [10] EXPLICIT OCTET STRING, -- session ticket (clients only) * Compression_meth [11] EXPLICIT OCTET STRING, -- optional compression method * SRP_username [ 12 ] EXPLICIT OCTET STRING -- optional SRP username * } * Look in ssl/ssl_asn1.c for more details * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-). */ struct ssl_session_st { int ssl_version; /* what ssl version session info is being * kept in here? */ /* only really used in SSLv2 */ unsigned int key_arg_length; unsigned char key_arg[SSL_MAX_KEY_ARG_LENGTH]; int master_key_length; unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH]; /* session_id - valid? */ unsigned int session_id_length; unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH]; /* * this is used to determine whether the session is being reused in the * appropriate context. It is up to the application to set this, via * SSL_new */ unsigned int sid_ctx_length; unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; # ifndef OPENSSL_NO_KRB5 unsigned int krb5_client_princ_len; unsigned char krb5_client_princ[SSL_MAX_KRB5_PRINCIPAL_LENGTH]; # endif /* OPENSSL_NO_KRB5 */ # ifndef OPENSSL_NO_PSK char *psk_identity_hint; char *psk_identity; # endif /* * Used to indicate that session resumption is not allowed. Applications * can also set this bit for a new session via not_resumable_session_cb * to disable session caching and tickets. */ int not_resumable; /* The cert is the certificate used to establish this connection */ struct sess_cert_st /* SESS_CERT */ *sess_cert; /* * This is the cert for the other end. On clients, it will be the same as * sess_cert->peer_key->x509 (the latter is not enough as sess_cert is * not retained in the external representation of sessions, see * ssl_asn1.c). */ X509 *peer; /* * when app_verify_callback accepts a session where the peer's * certificate is not ok, we must remember the error for session reuse: */ long verify_result; /* only for servers */ int references; long timeout; long time; unsigned int compress_meth; /* Need to lookup the method */ const SSL_CIPHER *cipher; unsigned long cipher_id; /* when ASN.1 loaded, this needs to be used * to load the 'cipher' structure */ STACK_OF(SSL_CIPHER) *ciphers; /* shared ciphers? */ CRYPTO_EX_DATA ex_data; /* application specific data */ /* * These are used to make removal of session-ids more efficient and to * implement a maximum cache size. */ struct ssl_session_st *prev, *next; # ifndef OPENSSL_NO_TLSEXT char *tlsext_hostname; # ifndef OPENSSL_NO_EC size_t tlsext_ecpointformatlist_length; unsigned char *tlsext_ecpointformatlist; /* peer's list */ size_t tlsext_ellipticcurvelist_length; unsigned char *tlsext_ellipticcurvelist; /* peer's list */ # endif /* OPENSSL_NO_EC */ /* RFC4507 info */ unsigned char *tlsext_tick; /* Session ticket */ size_t tlsext_ticklen; /* Session ticket length */ long tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */ # endif # ifndef OPENSSL_NO_SRP char *srp_username; # endif }; # endif # define SSL_OP_MICROSOFT_SESS_ID_BUG 0x00000001L # define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x00000002L /* Allow initial connection to servers that don't support RI */ # define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004L # define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x00000008L # define SSL_OP_TLSEXT_PADDING 0x00000010L # define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x00000020L # define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040L # define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x00000080L # define SSL_OP_TLS_D5_BUG 0x00000100L # define SSL_OP_TLS_BLOCK_PADDING_BUG 0x00000200L /* Hasn't done anything since OpenSSL 0.9.7h, retained for compatibility */ # define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 /* Refers to ancient SSLREF and SSLv2, retained for compatibility */ # define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 /* * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in * OpenSSL 0.9.6d. Usually (depending on the application protocol) the * workaround is not needed. Unfortunately some broken SSL/TLS * implementations cannot handle it at all, which is why we include it in * SSL_OP_ALL. */ /* added in 0.9.6e */ # define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00000800L /* * SSL_OP_ALL: various bug workarounds that should be rather harmless. This * used to be 0x000FFFFFL before 0.9.7. */ # define SSL_OP_ALL 0x80000BFFL /* DTLS options */ # define SSL_OP_NO_QUERY_MTU 0x00001000L /* Turn on Cookie Exchange (on relevant for servers) */ # define SSL_OP_COOKIE_EXCHANGE 0x00002000L /* Don't use RFC4507 ticket extension */ # define SSL_OP_NO_TICKET 0x00004000L /* Use Cisco's "speshul" version of DTLS_BAD_VER (as client) */ # define SSL_OP_CISCO_ANYCONNECT 0x00008000L /* As server, disallow session resumption on renegotiation */ # define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000L /* Don't use compression even if supported */ # define SSL_OP_NO_COMPRESSION 0x00020000L /* Permit unsafe legacy renegotiation */ # define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000L /* If set, always create a new key when using tmp_ecdh parameters */ # define SSL_OP_SINGLE_ECDH_USE 0x00080000L /* Does nothing: retained for compatibility */ # define SSL_OP_SINGLE_DH_USE 0x00100000L /* Does nothing: retained for compatibiity */ # define SSL_OP_EPHEMERAL_RSA 0x0 /* * Set on servers to choose the cipher according to the server's preferences */ # define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000L /* * If set, a server will allow a client to issue a SSLv3.0 version number as * latest version supported in the premaster secret, even when TLSv1.0 * (version 3.1) was announced in the client hello. Normally this is * forbidden to prevent version rollback attacks. */ # define SSL_OP_TLS_ROLLBACK_BUG 0x00800000L # define SSL_OP_NO_SSLv2 0x01000000L # define SSL_OP_NO_SSLv3 0x02000000L # define SSL_OP_NO_TLSv1 0x04000000L # define SSL_OP_NO_TLSv1_2 0x08000000L # define SSL_OP_NO_TLSv1_1 0x10000000L # define SSL_OP_NO_DTLSv1 0x04000000L # define SSL_OP_NO_DTLSv1_2 0x08000000L # define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|\ SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2) /* * These next two were never actually used for anything since SSLeay zap so * we have some more flags. */ /* * The next flag deliberately changes the ciphertest, this is a check for the * PKCS#1 attack */ # define SSL_OP_PKCS1_CHECK_1 0x0 # define SSL_OP_PKCS1_CHECK_2 0x0 # define SSL_OP_NETSCAPE_CA_DN_BUG 0x20000000L # define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x40000000L /* * Make server add server-hello extension from early version of cryptopro * draft, when GOST ciphersuite is negotiated. Required for interoperability * with CryptoPro CSP 3.x */ # define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000L /* * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success * when just a single record has been written): */ # define SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000001L /* * Make it possible to retry SSL_write() with changed buffer location (buffer * contents must stay the same!); this is not the default to avoid the * misconception that non-blocking SSL_write() behaves like non-blocking * write(): */ # define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002L /* * Never bother the application with retries if the transport is blocking: */ # define SSL_MODE_AUTO_RETRY 0x00000004L /* Don't attempt to automatically build certificate chain */ # define SSL_MODE_NO_AUTO_CHAIN 0x00000008L /* * Save RAM by releasing read and write buffers when they're empty. (SSL3 and * TLS only.) "Released" buffers are put onto a free-list in the context or * just freed (depending on the context's setting for freelist_max_len). */ # define SSL_MODE_RELEASE_BUFFERS 0x00000010L /* * Send the current time in the Random fields of the ClientHello and * ServerHello records for compatibility with hypothetical implementations * that require it. */ # define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020L # define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040L /* * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications * that reconnect with a downgraded protocol version; see * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your * application attempts a normal handshake. Only use this in explicit * fallback retries, following the guidance in * draft-ietf-tls-downgrade-scsv-00. */ # define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080L /* Cert related flags */ /* * Many implementations ignore some aspects of the TLS standards such as * enforcing certifcate chain algorithms. When this is set we enforce them. */ # define SSL_CERT_FLAG_TLS_STRICT 0x00000001L /* Suite B modes, takes same values as certificate verify flags */ # define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY 0x10000 /* Suite B 192 bit only mode */ # define SSL_CERT_FLAG_SUITEB_192_LOS 0x20000 /* Suite B 128 bit mode allowing 192 bit algorithms */ # define SSL_CERT_FLAG_SUITEB_128_LOS 0x30000 /* Perform all sorts of protocol violations for testing purposes */ # define SSL_CERT_FLAG_BROKEN_PROTOCOL 0x10000000 /* Flags for building certificate chains */ /* Treat any existing certificates as untrusted CAs */ # define SSL_BUILD_CHAIN_FLAG_UNTRUSTED 0x1 /* Don't include root CA in chain */ # define SSL_BUILD_CHAIN_FLAG_NO_ROOT 0x2 /* Just check certificates already there */ # define SSL_BUILD_CHAIN_FLAG_CHECK 0x4 /* Ignore verification errors */ # define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR 0x8 /* Clear verification errors from queue */ # define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR 0x10 /* Flags returned by SSL_check_chain */ /* Certificate can be used with this session */ # define CERT_PKEY_VALID 0x1 /* Certificate can also be used for signing */ # define CERT_PKEY_SIGN 0x2 /* EE certificate signing algorithm OK */ # define CERT_PKEY_EE_SIGNATURE 0x10 /* CA signature algorithms OK */ # define CERT_PKEY_CA_SIGNATURE 0x20 /* EE certificate parameters OK */ # define CERT_PKEY_EE_PARAM 0x40 /* CA certificate parameters OK */ # define CERT_PKEY_CA_PARAM 0x80 /* Signing explicitly allowed as opposed to SHA1 fallback */ # define CERT_PKEY_EXPLICIT_SIGN 0x100 /* Client CA issuer names match (always set for server cert) */ # define CERT_PKEY_ISSUER_NAME 0x200 /* Cert type matches client types (always set for server cert) */ # define CERT_PKEY_CERT_TYPE 0x400 /* Cert chain suitable to Suite B */ # define CERT_PKEY_SUITEB 0x800 # define SSL_CONF_FLAG_CMDLINE 0x1 # define SSL_CONF_FLAG_FILE 0x2 # define SSL_CONF_FLAG_CLIENT 0x4 # define SSL_CONF_FLAG_SERVER 0x8 # define SSL_CONF_FLAG_SHOW_ERRORS 0x10 # define SSL_CONF_FLAG_CERTIFICATE 0x20 /* Configuration value types */ # define SSL_CONF_TYPE_UNKNOWN 0x0 # define SSL_CONF_TYPE_STRING 0x1 # define SSL_CONF_TYPE_FILE 0x2 # define SSL_CONF_TYPE_DIR 0x3 /* * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they * cannot be used to clear bits. */ # define SSL_CTX_set_options(ctx,op) \ SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,(op),NULL) # define SSL_CTX_clear_options(ctx,op) \ SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_OPTIONS,(op),NULL) # define SSL_CTX_get_options(ctx) \ SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,0,NULL) # define SSL_set_options(ssl,op) \ SSL_ctrl((ssl),SSL_CTRL_OPTIONS,(op),NULL) # define SSL_clear_options(ssl,op) \ SSL_ctrl((ssl),SSL_CTRL_CLEAR_OPTIONS,(op),NULL) # define SSL_get_options(ssl) \ SSL_ctrl((ssl),SSL_CTRL_OPTIONS,0,NULL) # define SSL_CTX_set_mode(ctx,op) \ SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) # define SSL_CTX_clear_mode(ctx,op) \ SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL) # define SSL_CTX_get_mode(ctx) \ SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL) # define SSL_clear_mode(ssl,op) \ SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL) # define SSL_set_mode(ssl,op) \ SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL) # define SSL_get_mode(ssl) \ SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL) # define SSL_set_mtu(ssl, mtu) \ SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL) # define DTLS_set_link_mtu(ssl, mtu) \ SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL) # define DTLS_get_link_min_mtu(ssl) \ SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL) # define SSL_get_secure_renegotiation_support(ssl) \ SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) # ifndef OPENSSL_NO_HEARTBEATS # define SSL_heartbeat(ssl) \ SSL_ctrl((ssl),SSL_CTRL_TLS_EXT_SEND_HEARTBEAT,0,NULL) # endif # define SSL_CTX_set_cert_flags(ctx,op) \ SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) # define SSL_set_cert_flags(s,op) \ SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL) # define SSL_CTX_clear_cert_flags(ctx,op) \ SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) # define SSL_clear_cert_flags(s,op) \ SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) void SSL_CTX_set_msg_callback(SSL_CTX *ctx, void (*cb) (int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)); void SSL_set_msg_callback(SSL *ssl, void (*cb) (int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg)); # define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) # define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) # ifndef OPENSSL_NO_SRP # ifndef OPENSSL_NO_SSL_INTERN typedef struct srp_ctx_st { /* param for all the callbacks */ void *SRP_cb_arg; /* set client Hello login callback */ int (*TLS_ext_srp_username_callback) (SSL *, int *, void *); /* set SRP N/g param callback for verification */ int (*SRP_verify_param_callback) (SSL *, void *); /* set SRP client passwd callback */ char *(*SRP_give_srp_client_pwd_callback) (SSL *, void *); char *login; BIGNUM *N, *g, *s, *B, *A; BIGNUM *a, *b, *v; char *info; int strength; unsigned long srp_Mask; } SRP_CTX; # endif /* see tls_srp.c */ int SSL_SRP_CTX_init(SSL *s); int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); int SSL_SRP_CTX_free(SSL *ctx); int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); int SSL_srp_server_param_with_username(SSL *s, int *ad); int SRP_generate_server_master_secret(SSL *s, unsigned char *master_key); int SRP_Calc_A_param(SSL *s); int SRP_generate_client_master_secret(SSL *s, unsigned char *master_key); # endif # if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32) # define SSL_MAX_CERT_LIST_DEFAULT 1024*30 /* 30k max cert list :-) */ # else # define SSL_MAX_CERT_LIST_DEFAULT 1024*100 /* 100k max cert list :-) */ # endif # define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) /* * This callback type is used inside SSL_CTX, SSL, and in the functions that * set them. It is used to override the generation of SSL/TLS session IDs in * a server. Return value should be zero on an error, non-zero to proceed. * Also, callbacks should themselves check if the id they generate is unique * otherwise the SSL handshake will fail with an error - callbacks can do * this using the 'ssl' value they're passed by; * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in * is set at the maximum size the session ID can be. In SSLv2 this is 16 * bytes, whereas SSLv3/TLSv1 it is 32 bytes. The callback can alter this * length to be less if desired, but under SSLv2 session IDs are supposed to * be fixed at 16 bytes so the id will be padded after the callback returns * in this case. It is also an error for the callback to set the size to * zero. */ typedef int (*GEN_SESSION_CB) (const SSL *ssl, unsigned char *id, unsigned int *id_len); typedef struct ssl_comp_st SSL_COMP; # ifndef OPENSSL_NO_SSL_INTERN struct ssl_comp_st { int id; const char *name; # ifndef OPENSSL_NO_COMP COMP_METHOD *method; # else char *method; # endif }; DECLARE_STACK_OF(SSL_COMP) DECLARE_LHASH_OF(SSL_SESSION); struct ssl_ctx_st { const SSL_METHOD *method; STACK_OF(SSL_CIPHER) *cipher_list; /* same as above but sorted for lookup */ STACK_OF(SSL_CIPHER) *cipher_list_by_id; struct x509_store_st /* X509_STORE */ *cert_store; LHASH_OF(SSL_SESSION) *sessions; /* * Most session-ids that will be cached, default is * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited. */ unsigned long session_cache_size; struct ssl_session_st *session_cache_head; struct ssl_session_st *session_cache_tail; /* * This can have one of 2 values, ored together, SSL_SESS_CACHE_CLIENT, * SSL_SESS_CACHE_SERVER, Default is SSL_SESSION_CACHE_SERVER, which * means only SSL_accept which cache SSL_SESSIONS. */ int session_cache_mode; /* * If timeout is not 0, it is the default timeout value set when * SSL_new() is called. This has been put in to make life easier to set * things up */ long session_timeout; /* * If this callback is not null, it will be called each time a session id * is added to the cache. If this function returns 1, it means that the * callback will do a SSL_SESSION_free() when it has finished using it. * Otherwise, on 0, it means the callback has finished with it. If * remove_session_cb is not null, it will be called when a session-id is * removed from the cache. After the call, OpenSSL will * SSL_SESSION_free() it. */ int (*new_session_cb) (struct ssl_st *ssl, SSL_SESSION *sess); void (*remove_session_cb) (struct ssl_ctx_st *ctx, SSL_SESSION *sess); SSL_SESSION *(*get_session_cb) (struct ssl_st *ssl, unsigned char *data, int len, int *copy); struct { int sess_connect; /* SSL new conn - started */ int sess_connect_renegotiate; /* SSL reneg - requested */ int sess_connect_good; /* SSL new conne/reneg - finished */ int sess_accept; /* SSL new accept - started */ int sess_accept_renegotiate; /* SSL reneg - requested */ int sess_accept_good; /* SSL accept/reneg - finished */ int sess_miss; /* session lookup misses */ int sess_timeout; /* reuse attempt on timeouted session */ int sess_cache_full; /* session removed due to full cache */ int sess_hit; /* session reuse actually done */ int sess_cb_hit; /* session-id that was not in the cache was * passed back via the callback. This * indicates that the application is * supplying session-id's from other * processes - spooky :-) */ } stats; int references; /* if defined, these override the X509_verify_cert() calls */ int (*app_verify_callback) (X509_STORE_CTX *, void *); void *app_verify_arg; /* * before OpenSSL 0.9.7, 'app_verify_arg' was ignored * ('app_verify_callback' was called with just one argument) */ /* Default password callback. */ pem_password_cb *default_passwd_callback; /* Default password callback user data. */ void *default_passwd_callback_userdata; /* get client cert callback */ int (*client_cert_cb) (SSL *ssl, X509 **x509, EVP_PKEY **pkey); /* cookie generate callback */ int (*app_gen_cookie_cb) (SSL *ssl, unsigned char *cookie, unsigned int *cookie_len); /* verify cookie callback */ int (*app_verify_cookie_cb) (SSL *ssl, unsigned char *cookie, unsigned int cookie_len); CRYPTO_EX_DATA ex_data; const EVP_MD *rsa_md5; /* For SSLv2 - name is 'ssl2-md5' */ const EVP_MD *md5; /* For SSLv3/TLSv1 'ssl3-md5' */ const EVP_MD *sha1; /* For SSLv3/TLSv1 'ssl3->sha1' */ STACK_OF(X509) *extra_certs; STACK_OF(SSL_COMP) *comp_methods; /* stack of SSL_COMP, SSLv3/TLSv1 */ /* Default values used when no per-SSL value is defined follow */ /* used if SSL's info_callback is NULL */ void (*info_callback) (const SSL *ssl, int type, int val); /* what we put in client cert requests */ STACK_OF(X509_NAME) *client_CA; /* * Default values to use in SSL structures follow (these are copied by * SSL_new) */ unsigned long options; unsigned long mode; long max_cert_list; struct cert_st /* CERT */ *cert; int read_ahead; /* callback that allows applications to peek at protocol messages */ void (*msg_callback) (int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg); void *msg_callback_arg; int verify_mode; unsigned int sid_ctx_length; unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; /* called 'verify_callback' in the SSL */ int (*default_verify_callback) (int ok, X509_STORE_CTX *ctx); /* Default generate session ID callback. */ GEN_SESSION_CB generate_session_id; X509_VERIFY_PARAM *param; # if 0 int purpose; /* Purpose setting */ int trust; /* Trust setting */ # endif int quiet_shutdown; /* * Maximum amount of data to send in one fragment. actual record size can * be more than this due to padding and MAC overheads. */ unsigned int max_send_fragment; # ifndef OPENSSL_NO_ENGINE /* * Engine to pass requests for client certs to */ ENGINE *client_cert_engine; # endif # ifndef OPENSSL_NO_TLSEXT /* TLS extensions servername callback */ int (*tlsext_servername_callback) (SSL *, int *, void *); void *tlsext_servername_arg; /* RFC 4507 session ticket keys */ unsigned char tlsext_tick_key_name[16]; unsigned char tlsext_tick_hmac_key[16]; unsigned char tlsext_tick_aes_key[16]; /* Callback to support customisation of ticket key setting */ int (*tlsext_ticket_key_cb) (SSL *ssl, unsigned char *name, unsigned char *iv, EVP_CIPHER_CTX *ectx, HMAC_CTX *hctx, int enc); /* certificate status request info */ /* Callback for status request */ int (*tlsext_status_cb) (SSL *ssl, void *arg); void *tlsext_status_arg; /* draft-rescorla-tls-opaque-prf-input-00.txt information */ int (*tlsext_opaque_prf_input_callback) (SSL *, void *peerinput, size_t len, void *arg); void *tlsext_opaque_prf_input_callback_arg; # endif # ifndef OPENSSL_NO_PSK char *psk_identity_hint; unsigned int (*psk_client_callback) (SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len); unsigned int (*psk_server_callback) (SSL *ssl, const char *identity, unsigned char *psk, unsigned int max_psk_len); # endif # ifndef OPENSSL_NO_BUF_FREELISTS # define SSL_MAX_BUF_FREELIST_LEN_DEFAULT 32 unsigned int freelist_max_len; struct ssl3_buf_freelist_st *wbuf_freelist; struct ssl3_buf_freelist_st *rbuf_freelist; # endif # ifndef OPENSSL_NO_SRP SRP_CTX srp_ctx; /* ctx for SRP authentication */ # endif # ifndef OPENSSL_NO_TLSEXT # ifndef OPENSSL_NO_NEXTPROTONEG /* Next protocol negotiation information */ /* (for experimental NPN extension). */ /* * For a server, this contains a callback function by which the set of * advertised protocols can be provided. */ int (*next_protos_advertised_cb) (SSL *s, const unsigned char **buf, unsigned int *len, void *arg); void *next_protos_advertised_cb_arg; /* * For a client, this contains a callback function that selects the next * protocol from the list provided by the server. */ int (*next_proto_select_cb) (SSL *s, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg); void *next_proto_select_cb_arg; # endif /* SRTP profiles we are willing to do from RFC 5764 */ STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; /* * ALPN information (we are in the process of transitioning from NPN to * ALPN.) */ /*- * For a server, this contains a callback function that allows the * server to select the protocol for the connection. * out: on successful return, this must point to the raw protocol * name (without the length prefix). * outlen: on successful return, this contains the length of |*out|. * in: points to the client's list of supported protocols in * wire-format. * inlen: the length of |in|. */ int (*alpn_select_cb) (SSL *s, const unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg); void *alpn_select_cb_arg; /* * For a client, this contains the list of supported protocols in wire * format. */ unsigned char *alpn_client_proto_list; unsigned alpn_client_proto_list_len; # ifndef OPENSSL_NO_EC /* EC extension values inherited by SSL structure */ size_t tlsext_ecpointformatlist_length; unsigned char *tlsext_ecpointformatlist; size_t tlsext_ellipticcurvelist_length; unsigned char *tlsext_ellipticcurvelist; # endif /* OPENSSL_NO_EC */ # endif }; # endif # define SSL_SESS_CACHE_OFF 0x0000 # define SSL_SESS_CACHE_CLIENT 0x0001 # define SSL_SESS_CACHE_SERVER 0x0002 # define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER) # define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080 /* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */ # define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100 # define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 # define SSL_SESS_CACHE_NO_INTERNAL \ (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); # define SSL_CTX_sess_number(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL) # define SSL_CTX_sess_connect(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL) # define SSL_CTX_sess_connect_good(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL) # define SSL_CTX_sess_connect_renegotiate(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL) # define SSL_CTX_sess_accept(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL) # define SSL_CTX_sess_accept_renegotiate(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL) # define SSL_CTX_sess_accept_good(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL) # define SSL_CTX_sess_hits(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL) # define SSL_CTX_sess_cb_hits(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL) # define SSL_CTX_sess_misses(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL) # define SSL_CTX_sess_timeouts(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL) # define SSL_CTX_sess_cache_full(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL) void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, int (*new_session_cb) (struct ssl_st *ssl, SSL_SESSION *sess)); int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, SSL_SESSION *sess); void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, void (*remove_session_cb) (struct ssl_ctx_st *ctx, SSL_SESSION *sess)); void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx, SSL_SESSION *sess); void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, SSL_SESSION *(*get_session_cb) (struct ssl_st *ssl, unsigned char *data, int len, int *copy)); SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, unsigned char *Data, int len, int *copy); void SSL_CTX_set_info_callback(SSL_CTX *ctx, void (*cb) (const SSL *ssl, int type, int val)); void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type, int val); void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, int (*client_cert_cb) (SSL *ssl, X509 **x509, EVP_PKEY **pkey)); int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509, EVP_PKEY **pkey); # ifndef OPENSSL_NO_ENGINE int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); # endif void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, int (*app_gen_cookie_cb) (SSL *ssl, unsigned char *cookie, unsigned int *cookie_len)); void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, int (*app_verify_cookie_cb) (SSL *ssl, unsigned char *cookie, unsigned int cookie_len)); # ifndef OPENSSL_NO_NEXTPROTONEG void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s, int (*cb) (SSL *ssl, const unsigned char **out, unsigned int *outlen, void *arg), void *arg); void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s, int (*cb) (SSL *ssl, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg), void *arg); void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, unsigned *len); # endif # ifndef OPENSSL_NO_TLSEXT int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, const unsigned char *client, unsigned int client_len); # endif # define OPENSSL_NPN_UNSUPPORTED 0 # define OPENSSL_NPN_NEGOTIATED 1 # define OPENSSL_NPN_NO_OVERLAP 2 int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, unsigned protos_len); int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, unsigned protos_len); void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, int (*cb) (SSL *ssl, const unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg), void *arg); void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, unsigned *len); # ifndef OPENSSL_NO_PSK /* * the maximum length of the buffer given to callbacks containing the * resulting identity/psk */ # define PSK_MAX_IDENTITY_LEN 128 # define PSK_MAX_PSK_LEN 256 void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, unsigned int (*psk_client_callback) (SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len)); void SSL_set_psk_client_callback(SSL *ssl, unsigned int (*psk_client_callback) (SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len)); void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, unsigned int (*psk_server_callback) (SSL *ssl, const char *identity, unsigned char *psk, unsigned int max_psk_len)); void SSL_set_psk_server_callback(SSL *ssl, unsigned int (*psk_server_callback) (SSL *ssl, const char *identity, unsigned char *psk, unsigned int max_psk_len)); int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint); int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint); const char *SSL_get_psk_identity_hint(const SSL *s); const char *SSL_get_psk_identity(const SSL *s); # endif # ifndef OPENSSL_NO_TLSEXT /* Register callbacks to handle custom TLS Extensions for client or server. */ int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, unsigned int ext_type, custom_ext_add_cb add_cb, custom_ext_free_cb free_cb, void *add_arg, custom_ext_parse_cb parse_cb, void *parse_arg); int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, unsigned int ext_type, custom_ext_add_cb add_cb, custom_ext_free_cb free_cb, void *add_arg, custom_ext_parse_cb parse_cb, void *parse_arg); int SSL_extension_supported(unsigned int ext_type); # endif # define SSL_NOTHING 1 # define SSL_WRITING 2 # define SSL_READING 3 # define SSL_X509_LOOKUP 4 /* These will only be used when doing non-blocking IO */ # define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) # define SSL_want_read(s) (SSL_want(s) == SSL_READING) # define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) # define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) # define SSL_MAC_FLAG_READ_MAC_STREAM 1 # define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 # ifndef OPENSSL_NO_SSL_INTERN struct ssl_st { /* * protocol version (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION, * DTLS1_VERSION) */ int version; /* SSL_ST_CONNECT or SSL_ST_ACCEPT */ int type; /* SSLv3 */ const SSL_METHOD *method; /* * There are 2 BIO's even though they are normally both the same. This * is so data can be read and written to different handlers */ # ifndef OPENSSL_NO_BIO /* used by SSL_read */ BIO *rbio; /* used by SSL_write */ BIO *wbio; /* used during session-id reuse to concatenate messages */ BIO *bbio; # else /* used by SSL_read */ char *rbio; /* used by SSL_write */ char *wbio; char *bbio; # endif /* * This holds a variable that indicates what we were doing when a 0 or -1 * is returned. This is needed for non-blocking IO so we know what * request needs re-doing when in SSL_accept or SSL_connect */ int rwstate; /* true when we are actually in SSL_accept() or SSL_connect() */ int in_handshake; int (*handshake_func) (SSL *); /* * Imagine that here's a boolean member "init" that is switched as soon * as SSL_set_{accept/connect}_state is called for the first time, so * that "state" and "handshake_func" are properly initialized. But as * handshake_func is == 0 until then, we use this test instead of an * "init" member. */ /* are we the server side? - mostly used by SSL_clear */ int server; /* * Generate a new session or reuse an old one. * NB: For servers, the 'new' session may actually be a previously * cached session or even the previous session unless * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set */ int new_session; /* don't send shutdown packets */ int quiet_shutdown; /* we have shut things down, 0x01 sent, 0x02 for received */ int shutdown; /* where we are */ int state; /* where we are when reading */ int rstate; BUF_MEM *init_buf; /* buffer used during init */ void *init_msg; /* pointer to handshake message body, set by * ssl3_get_message() */ int init_num; /* amount read/written */ int init_off; /* amount read/written */ /* used internally to point at a raw packet */ unsigned char *packet; unsigned int packet_length; struct ssl2_state_st *s2; /* SSLv2 variables */ struct ssl3_state_st *s3; /* SSLv3 variables */ struct dtls1_state_st *d1; /* DTLSv1 variables */ int read_ahead; /* Read as many input bytes as possible (for * non-blocking reads) */ /* callback that allows applications to peek at protocol messages */ void (*msg_callback) (int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg); void *msg_callback_arg; int hit; /* reusing a previous session */ X509_VERIFY_PARAM *param; # if 0 int purpose; /* Purpose setting */ int trust; /* Trust setting */ # endif /* crypto */ STACK_OF(SSL_CIPHER) *cipher_list; STACK_OF(SSL_CIPHER) *cipher_list_by_id; /* * These are the ones being used, the ones in SSL_SESSION are the ones to * be 'copied' into these ones */ int mac_flags; EVP_CIPHER_CTX *enc_read_ctx; /* cryptographic state */ EVP_MD_CTX *read_hash; /* used for mac generation */ # ifndef OPENSSL_NO_COMP COMP_CTX *expand; /* uncompress */ # else char *expand; # endif EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */ EVP_MD_CTX *write_hash; /* used for mac generation */ # ifndef OPENSSL_NO_COMP COMP_CTX *compress; /* compression */ # else char *compress; # endif /* session info */ /* client cert? */ /* This is used to hold the server certificate used */ struct cert_st /* CERT */ *cert; /* * the session_id_context is used to ensure sessions are only reused in * the appropriate context */ unsigned int sid_ctx_length; unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH]; /* This can also be in the session once a session is established */ SSL_SESSION *session; /* Default generate session ID callback. */ GEN_SESSION_CB generate_session_id; /* Used in SSL2 and SSL3 */ /* * 0 don't care about verify failure. * 1 fail if verify fails */ int verify_mode; /* fail if callback returns 0 */ int (*verify_callback) (int ok, X509_STORE_CTX *ctx); /* optional informational callback */ void (*info_callback) (const SSL *ssl, int type, int val); /* error bytes to be written */ int error; /* actual code */ int error_code; # ifndef OPENSSL_NO_KRB5 /* Kerberos 5 context */ KSSL_CTX *kssl_ctx; # endif /* OPENSSL_NO_KRB5 */ # ifndef OPENSSL_NO_PSK unsigned int (*psk_client_callback) (SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len); unsigned int (*psk_server_callback) (SSL *ssl, const char *identity, unsigned char *psk, unsigned int max_psk_len); # endif SSL_CTX *ctx; /* * set this flag to 1 and a sleep(1) is put into all SSL_read() and * SSL_write() calls, good for nbio debuging :-) */ int debug; /* extra application data */ long verify_result; CRYPTO_EX_DATA ex_data; /* for server side, keep the list of CA_dn we can use */ STACK_OF(X509_NAME) *client_CA; int references; /* protocol behaviour */ unsigned long options; /* API behaviour */ unsigned long mode; long max_cert_list; int first_packet; /* what was passed, used for SSLv3/TLS rollback check */ int client_version; unsigned int max_send_fragment; # ifndef OPENSSL_NO_TLSEXT /* TLS extension debug callback */ void (*tlsext_debug_cb) (SSL *s, int client_server, int type, unsigned char *data, int len, void *arg); void *tlsext_debug_arg; char *tlsext_hostname; /*- * no further mod of servername * 0 : call the servername extension callback. * 1 : prepare 2, allow last ack just after in server callback. * 2 : don't call servername callback, no ack in server hello */ int servername_done; /* certificate status request info */ /* Status type or -1 if no status type */ int tlsext_status_type; /* Expect OCSP CertificateStatus message */ int tlsext_status_expected; /* OCSP status request only */ STACK_OF(OCSP_RESPID) *tlsext_ocsp_ids; X509_EXTENSIONS *tlsext_ocsp_exts; /* OCSP response received or to be sent */ unsigned char *tlsext_ocsp_resp; int tlsext_ocsp_resplen; /* RFC4507 session ticket expected to be received or sent */ int tlsext_ticket_expected; # ifndef OPENSSL_NO_EC size_t tlsext_ecpointformatlist_length; /* our list */ unsigned char *tlsext_ecpointformatlist; size_t tlsext_ellipticcurvelist_length; /* our list */ unsigned char *tlsext_ellipticcurvelist; # endif /* OPENSSL_NO_EC */ /* * draft-rescorla-tls-opaque-prf-input-00.txt information to be used for * handshakes */ void *tlsext_opaque_prf_input; size_t tlsext_opaque_prf_input_len; /* TLS Session Ticket extension override */ TLS_SESSION_TICKET_EXT *tlsext_session_ticket; /* TLS Session Ticket extension callback */ tls_session_ticket_ext_cb_fn tls_session_ticket_ext_cb; void *tls_session_ticket_ext_cb_arg; /* TLS pre-shared secret session resumption */ tls_session_secret_cb_fn tls_session_secret_cb; void *tls_session_secret_cb_arg; SSL_CTX *initial_ctx; /* initial ctx, used to store sessions */ # ifndef OPENSSL_NO_NEXTPROTONEG /* * Next protocol negotiation. For the client, this is the protocol that * we sent in NextProtocol and is set when handling ServerHello * extensions. For a server, this is the client's selected_protocol from * NextProtocol and is set when handling the NextProtocol message, before * the Finished message. */ unsigned char *next_proto_negotiated; unsigned char next_proto_negotiated_len; # endif # define session_ctx initial_ctx /* What we'll do */ STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles; /* What's been chosen */ SRTP_PROTECTION_PROFILE *srtp_profile; /*- * Is use of the Heartbeat extension negotiated? * 0: disabled * 1: enabled * 2: enabled, but not allowed to send Requests */ unsigned int tlsext_heartbeat; /* Indicates if a HeartbeatRequest is in flight */ unsigned int tlsext_hb_pending; /* HeartbeatRequest sequence number */ unsigned int tlsext_hb_seq; # else # define session_ctx ctx # endif /* OPENSSL_NO_TLSEXT */ /*- * 1 if we are renegotiating. * 2 if we are a server and are inside a handshake * (i.e. not just sending a HelloRequest) */ int renegotiate; # ifndef OPENSSL_NO_SRP /* ctx for SRP authentication */ SRP_CTX srp_ctx; # endif # ifndef OPENSSL_NO_TLSEXT /* * For a client, this contains the list of supported protocols in wire * format. */ unsigned char *alpn_client_proto_list; unsigned alpn_client_proto_list_len; # endif /* OPENSSL_NO_TLSEXT */ }; # endif #ifdef __cplusplus } #endif # include # include # include /* This is mostly sslv3 with a few tweaks */ # include /* Datagram TLS */ # include # include /* Support for the use_srtp extension */ #ifdef __cplusplus extern "C" { #endif /* compatibility */ # define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)arg)) # define SSL_get_app_data(s) (SSL_get_ex_data(s,0)) # define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0,(char *)a)) # define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0)) # define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) # define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0,(char *)arg)) /* * The following are the possible values for ssl->state are are used to * indicate where we are up to in the SSL connection establishment. The * macros that follow are about the only things you should need to use and * even then, only when using non-blocking IO. It can also be useful to work * out where you were when the connection failed */ # define SSL_ST_CONNECT 0x1000 # define SSL_ST_ACCEPT 0x2000 # define SSL_ST_MASK 0x0FFF # define SSL_ST_INIT (SSL_ST_CONNECT|SSL_ST_ACCEPT) # define SSL_ST_BEFORE 0x4000 # define SSL_ST_OK 0x03 # define SSL_ST_RENEGOTIATE (0x04|SSL_ST_INIT) # define SSL_ST_ERR 0x05 # define SSL_CB_LOOP 0x01 # define SSL_CB_EXIT 0x02 # define SSL_CB_READ 0x04 # define SSL_CB_WRITE 0x08 # define SSL_CB_ALERT 0x4000/* used in callback */ # define SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ) # define SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE) # define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP) # define SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT) # define SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP) # define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT) # define SSL_CB_HANDSHAKE_START 0x10 # define SSL_CB_HANDSHAKE_DONE 0x20 /* Is the SSL_connection established? */ # define SSL_get_state(a) SSL_state(a) # define SSL_is_init_finished(a) (SSL_state(a) == SSL_ST_OK) # define SSL_in_init(a) (SSL_state(a)&SSL_ST_INIT) # define SSL_in_before(a) (SSL_state(a)&SSL_ST_BEFORE) # define SSL_in_connect_init(a) (SSL_state(a)&SSL_ST_CONNECT) # define SSL_in_accept_init(a) (SSL_state(a)&SSL_ST_ACCEPT) /* * The following 2 states are kept in ssl->rstate when reads fail, you should * not need these */ # define SSL_ST_READ_HEADER 0xF0 # define SSL_ST_READ_BODY 0xF1 # define SSL_ST_READ_DONE 0xF2 /*- * Obtain latest Finished message * -- that we sent (SSL_get_finished) * -- that we expected from peer (SSL_get_peer_finished). * Returns length (0 == no Finished so far), copies up to 'count' bytes. */ size_t SSL_get_finished(const SSL *s, void *buf, size_t count); size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); /* * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options are * 'ored' with SSL_VERIFY_PEER if they are desired */ # define SSL_VERIFY_NONE 0x00 # define SSL_VERIFY_PEER 0x01 # define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02 # define SSL_VERIFY_CLIENT_ONCE 0x04 # define OpenSSL_add_ssl_algorithms() SSL_library_init() # define SSLeay_add_ssl_algorithms() SSL_library_init() /* this is for backward compatibility */ # if 0 /* NEW_SSLEAY */ # define SSL_CTX_set_default_verify(a,b,c) SSL_CTX_set_verify(a,b,c) # define SSL_set_pref_cipher(c,n) SSL_set_cipher_list(c,n) # define SSL_add_session(a,b) SSL_CTX_add_session((a),(b)) # define SSL_remove_session(a,b) SSL_CTX_remove_session((a),(b)) # define SSL_flush_sessions(a,b) SSL_CTX_flush_sessions((a),(b)) # endif /* More backward compatibility */ # define SSL_get_cipher(s) \ SSL_CIPHER_get_name(SSL_get_current_cipher(s)) # define SSL_get_cipher_bits(s,np) \ SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np) # define SSL_get_cipher_version(s) \ SSL_CIPHER_get_version(SSL_get_current_cipher(s)) # define SSL_get_cipher_name(s) \ SSL_CIPHER_get_name(SSL_get_current_cipher(s)) # define SSL_get_time(a) SSL_SESSION_get_time(a) # define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b)) # define SSL_get_timeout(a) SSL_SESSION_get_timeout(a) # define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b)) # define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id) # define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id) DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_AD_REASON_OFFSET 1000/* offset to get SSL_R_... value * from SSL_AD_... */ /* These alert types are for SSLv3 and TLSv1 */ # define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY /* fatal */ # define SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE /* fatal */ # define SSL_AD_BAD_RECORD_MAC SSL3_AD_BAD_RECORD_MAC # define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED # define SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW /* fatal */ # define SSL_AD_DECOMPRESSION_FAILURE SSL3_AD_DECOMPRESSION_FAILURE /* fatal */ # define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE /* Not for TLS */ # define SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE # define SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE # define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE # define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED # define SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED # define SSL_AD_CERTIFICATE_UNKNOWN SSL3_AD_CERTIFICATE_UNKNOWN /* fatal */ # define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER /* fatal */ # define SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA /* fatal */ # define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED /* fatal */ # define SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR # define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR /* fatal */ # define SSL_AD_EXPORT_RESTRICTION TLS1_AD_EXPORT_RESTRICTION /* fatal */ # define SSL_AD_PROTOCOL_VERSION TLS1_AD_PROTOCOL_VERSION /* fatal */ # define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY /* fatal */ # define SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR # define SSL_AD_USER_CANCELLED TLS1_AD_USER_CANCELLED # define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION # define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION # define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE # define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME # define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE # define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE /* fatal */ # define SSL_AD_UNKNOWN_PSK_IDENTITY TLS1_AD_UNKNOWN_PSK_IDENTITY /* fatal */ # define SSL_AD_INAPPROPRIATE_FALLBACK TLS1_AD_INAPPROPRIATE_FALLBACK # define SSL_ERROR_NONE 0 # define SSL_ERROR_SSL 1 # define SSL_ERROR_WANT_READ 2 # define SSL_ERROR_WANT_WRITE 3 # define SSL_ERROR_WANT_X509_LOOKUP 4 # define SSL_ERROR_SYSCALL 5/* look at error stack/return * value/errno */ # define SSL_ERROR_ZERO_RETURN 6 # define SSL_ERROR_WANT_CONNECT 7 # define SSL_ERROR_WANT_ACCEPT 8 # define SSL_CTRL_NEED_TMP_RSA 1 # define SSL_CTRL_SET_TMP_RSA 2 # define SSL_CTRL_SET_TMP_DH 3 # define SSL_CTRL_SET_TMP_ECDH 4 # define SSL_CTRL_SET_TMP_RSA_CB 5 # define SSL_CTRL_SET_TMP_DH_CB 6 # define SSL_CTRL_SET_TMP_ECDH_CB 7 # define SSL_CTRL_GET_SESSION_REUSED 8 # define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 # define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 # define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 # define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12 # define SSL_CTRL_GET_FLAGS 13 # define SSL_CTRL_EXTRA_CHAIN_CERT 14 # define SSL_CTRL_SET_MSG_CALLBACK 15 # define SSL_CTRL_SET_MSG_CALLBACK_ARG 16 /* only applies to datagram connections */ # define SSL_CTRL_SET_MTU 17 /* Stats */ # define SSL_CTRL_SESS_NUMBER 20 # define SSL_CTRL_SESS_CONNECT 21 # define SSL_CTRL_SESS_CONNECT_GOOD 22 # define SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23 # define SSL_CTRL_SESS_ACCEPT 24 # define SSL_CTRL_SESS_ACCEPT_GOOD 25 # define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 26 # define SSL_CTRL_SESS_HIT 27 # define SSL_CTRL_SESS_CB_HIT 28 # define SSL_CTRL_SESS_MISSES 29 # define SSL_CTRL_SESS_TIMEOUTS 30 # define SSL_CTRL_SESS_CACHE_FULL 31 # define SSL_CTRL_OPTIONS 32 # define SSL_CTRL_MODE 33 # define SSL_CTRL_GET_READ_AHEAD 40 # define SSL_CTRL_SET_READ_AHEAD 41 # define SSL_CTRL_SET_SESS_CACHE_SIZE 42 # define SSL_CTRL_GET_SESS_CACHE_SIZE 43 # define SSL_CTRL_SET_SESS_CACHE_MODE 44 # define SSL_CTRL_GET_SESS_CACHE_MODE 45 # define SSL_CTRL_GET_MAX_CERT_LIST 50 # define SSL_CTRL_SET_MAX_CERT_LIST 51 # define SSL_CTRL_SET_MAX_SEND_FRAGMENT 52 /* see tls1.h for macros based on these */ # ifndef OPENSSL_NO_TLSEXT # define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53 # define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 54 # define SSL_CTRL_SET_TLSEXT_HOSTNAME 55 # define SSL_CTRL_SET_TLSEXT_DEBUG_CB 56 # define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 # define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 # define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 # define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 # define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 # define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 # define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 # define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 # define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 # define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66 # define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67 # define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68 # define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 # define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 # define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 # define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 # define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 # define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 # define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 # define SSL_CTRL_SET_SRP_ARG 78 # define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 # define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 # define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 # ifndef OPENSSL_NO_HEARTBEATS # define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT 85 # define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING 86 # define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS 87 # endif # endif /* OPENSSL_NO_TLSEXT */ # define DTLS_CTRL_GET_TIMEOUT 73 # define DTLS_CTRL_HANDLE_TIMEOUT 74 # define DTLS_CTRL_LISTEN 75 # define SSL_CTRL_GET_RI_SUPPORT 76 # define SSL_CTRL_CLEAR_OPTIONS 77 # define SSL_CTRL_CLEAR_MODE 78 # define SSL_CTRL_GET_EXTRA_CHAIN_CERTS 82 # define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS 83 # define SSL_CTRL_CHAIN 88 # define SSL_CTRL_CHAIN_CERT 89 # define SSL_CTRL_GET_CURVES 90 # define SSL_CTRL_SET_CURVES 91 # define SSL_CTRL_SET_CURVES_LIST 92 # define SSL_CTRL_GET_SHARED_CURVE 93 # define SSL_CTRL_SET_ECDH_AUTO 94 # define SSL_CTRL_SET_SIGALGS 97 # define SSL_CTRL_SET_SIGALGS_LIST 98 # define SSL_CTRL_CERT_FLAGS 99 # define SSL_CTRL_CLEAR_CERT_FLAGS 100 # define SSL_CTRL_SET_CLIENT_SIGALGS 101 # define SSL_CTRL_SET_CLIENT_SIGALGS_LIST 102 # define SSL_CTRL_GET_CLIENT_CERT_TYPES 103 # define SSL_CTRL_SET_CLIENT_CERT_TYPES 104 # define SSL_CTRL_BUILD_CERT_CHAIN 105 # define SSL_CTRL_SET_VERIFY_CERT_STORE 106 # define SSL_CTRL_SET_CHAIN_CERT_STORE 107 # define SSL_CTRL_GET_PEER_SIGNATURE_NID 108 # define SSL_CTRL_GET_SERVER_TMP_KEY 109 # define SSL_CTRL_GET_RAW_CIPHERLIST 110 # define SSL_CTRL_GET_EC_POINT_FORMATS 111 # define SSL_CTRL_GET_CHAIN_CERTS 115 # define SSL_CTRL_SELECT_CURRENT_CERT 116 # define SSL_CTRL_SET_CURRENT_CERT 117 # define SSL_CTRL_CHECK_PROTO_VERSION 119 # define DTLS_CTRL_SET_LINK_MTU 120 # define DTLS_CTRL_GET_LINK_MIN_MTU 121 # define SSL_CERT_SET_FIRST 1 # define SSL_CERT_SET_NEXT 2 # define SSL_CERT_SET_SERVER 3 # define DTLSv1_get_timeout(ssl, arg) \ SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)arg) # define DTLSv1_handle_timeout(ssl) \ SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL) # define DTLSv1_listen(ssl, peer) \ SSL_ctrl(ssl,DTLS_CTRL_LISTEN,0, (void *)peer) # define SSL_session_reused(ssl) \ SSL_ctrl((ssl),SSL_CTRL_GET_SESSION_REUSED,0,NULL) # define SSL_num_renegotiations(ssl) \ SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL) # define SSL_clear_num_renegotiations(ssl) \ SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) # define SSL_total_renegotiations(ssl) \ SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) # define SSL_CTX_need_tmp_RSA(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_NEED_TMP_RSA,0,NULL) # define SSL_CTX_set_tmp_rsa(ctx,rsa) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa) # define SSL_CTX_set_tmp_dh(ctx,dh) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)dh) # define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh) # define SSL_need_tmp_RSA(ssl) \ SSL_ctrl(ssl,SSL_CTRL_NEED_TMP_RSA,0,NULL) # define SSL_set_tmp_rsa(ssl,rsa) \ SSL_ctrl(ssl,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa) # define SSL_set_tmp_dh(ssl,dh) \ SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)dh) # define SSL_set_tmp_ecdh(ssl,ecdh) \ SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh) # define SSL_CTX_add_extra_chain_cert(ctx,x509) \ SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509) # define SSL_CTX_get_extra_chain_certs(ctx,px509) \ SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509) # define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \ SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509) # define SSL_CTX_clear_extra_chain_certs(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL) # define SSL_CTX_set0_chain(ctx,sk) \ SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)sk) # define SSL_CTX_set1_chain(ctx,sk) \ SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)sk) # define SSL_CTX_add0_chain_cert(ctx,x509) \ SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)x509) # define SSL_CTX_add1_chain_cert(ctx,x509) \ SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)x509) # define SSL_CTX_get0_chain_certs(ctx,px509) \ SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) # define SSL_CTX_clear_chain_certs(ctx) \ SSL_CTX_set0_chain(ctx,NULL) # define SSL_CTX_build_cert_chain(ctx, flags) \ SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) # define SSL_CTX_select_current_cert(ctx,x509) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)x509) # define SSL_CTX_set_current_cert(ctx, op) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) # define SSL_CTX_set0_verify_cert_store(ctx,st) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)st) # define SSL_CTX_set1_verify_cert_store(ctx,st) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)st) # define SSL_CTX_set0_chain_cert_store(ctx,st) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)st) # define SSL_CTX_set1_chain_cert_store(ctx,st) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)st) # define SSL_set0_chain(ctx,sk) \ SSL_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)sk) # define SSL_set1_chain(ctx,sk) \ SSL_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)sk) # define SSL_add0_chain_cert(ctx,x509) \ SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)x509) # define SSL_add1_chain_cert(ctx,x509) \ SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)x509) # define SSL_get0_chain_certs(ctx,px509) \ SSL_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) # define SSL_clear_chain_certs(ctx) \ SSL_set0_chain(ctx,NULL) # define SSL_build_cert_chain(s, flags) \ SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) # define SSL_select_current_cert(ctx,x509) \ SSL_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)x509) # define SSL_set_current_cert(ctx,op) \ SSL_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) # define SSL_set0_verify_cert_store(s,st) \ SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)st) # define SSL_set1_verify_cert_store(s,st) \ SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)st) # define SSL_set0_chain_cert_store(s,st) \ SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)st) # define SSL_set1_chain_cert_store(s,st) \ SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)st) # define SSL_get1_curves(ctx, s) \ SSL_ctrl(ctx,SSL_CTRL_GET_CURVES,0,(char *)s) # define SSL_CTX_set1_curves(ctx, clist, clistlen) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURVES,clistlen,(char *)clist) # define SSL_CTX_set1_curves_list(ctx, s) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURVES_LIST,0,(char *)s) # define SSL_set1_curves(ctx, clist, clistlen) \ SSL_ctrl(ctx,SSL_CTRL_SET_CURVES,clistlen,(char *)clist) # define SSL_set1_curves_list(ctx, s) \ SSL_ctrl(ctx,SSL_CTRL_SET_CURVES_LIST,0,(char *)s) # define SSL_get_shared_curve(s, n) \ SSL_ctrl(s,SSL_CTRL_GET_SHARED_CURVE,n,NULL) # define SSL_CTX_set_ecdh_auto(ctx, onoff) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL) # define SSL_set_ecdh_auto(s, onoff) \ SSL_ctrl(s,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL) # define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)slist) # define SSL_CTX_set1_sigalgs_list(ctx, s) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)s) # define SSL_set1_sigalgs(ctx, slist, slistlen) \ SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)slist) # define SSL_set1_sigalgs_list(ctx, s) \ SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)s) # define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)slist) # define SSL_CTX_set1_client_sigalgs_list(ctx, s) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)s) # define SSL_set1_client_sigalgs(ctx, slist, slistlen) \ SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,clistlen,(int *)slist) # define SSL_set1_client_sigalgs_list(ctx, s) \ SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)s) # define SSL_get0_certificate_types(s, clist) \ SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)clist) # define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)clist) # define SSL_set1_client_certificate_types(s, clist, clistlen) \ SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)clist) # define SSL_get_peer_signature_nid(s, pn) \ SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn) # define SSL_get_server_tmp_key(s, pk) \ SSL_ctrl(s,SSL_CTRL_GET_SERVER_TMP_KEY,0,pk) # define SSL_get0_raw_cipherlist(s, plst) \ SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,(char *)plst) # define SSL_get0_ec_point_formats(s, plst) \ SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,(char *)plst) # ifndef OPENSSL_NO_BIO BIO_METHOD *BIO_f_ssl(void); BIO *BIO_new_ssl(SSL_CTX *ctx, int client); BIO *BIO_new_ssl_connect(SSL_CTX *ctx); BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); int BIO_ssl_copy_session_id(BIO *to, BIO *from); void BIO_ssl_shutdown(BIO *ssl_bio); # endif int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); void SSL_CTX_free(SSL_CTX *); long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); long SSL_CTX_get_timeout(const SSL_CTX *ctx); X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *); int SSL_want(const SSL *s); int SSL_clear(SSL *s); void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits); char *SSL_CIPHER_get_version(const SSL_CIPHER *c); const char *SSL_CIPHER_get_name(const SSL_CIPHER *c); unsigned long SSL_CIPHER_get_id(const SSL_CIPHER *c); int SSL_get_fd(const SSL *s); int SSL_get_rfd(const SSL *s); int SSL_get_wfd(const SSL *s); const char *SSL_get_cipher_list(const SSL *s, int n); char *SSL_get_shared_ciphers(const SSL *s, char *buf, int len); int SSL_get_read_ahead(const SSL *s); int SSL_pending(const SSL *s); # ifndef OPENSSL_NO_SOCK int SSL_set_fd(SSL *s, int fd); int SSL_set_rfd(SSL *s, int fd); int SSL_set_wfd(SSL *s, int fd); # endif # ifndef OPENSSL_NO_BIO void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio); BIO *SSL_get_rbio(const SSL *s); BIO *SSL_get_wbio(const SSL *s); # endif int SSL_set_cipher_list(SSL *s, const char *str); void SSL_set_read_ahead(SSL *s, int yes); int SSL_get_verify_mode(const SSL *s); int SSL_get_verify_depth(const SSL *s); int (*SSL_get_verify_callback(const SSL *s)) (int, X509_STORE_CTX *); void SSL_set_verify(SSL *s, int mode, int (*callback) (int ok, X509_STORE_CTX *ctx)); void SSL_set_verify_depth(SSL *s, int depth); void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg); # ifndef OPENSSL_NO_RSA int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); # endif int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len); int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, long len); int SSL_use_certificate(SSL *ssl, X509 *x); int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); # ifndef OPENSSL_NO_TLSEXT /* Set serverinfo data for the current active cert. */ int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, size_t serverinfo_length); # ifndef OPENSSL_NO_STDIO int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); # endif /* NO_STDIO */ # endif # ifndef OPENSSL_NO_STDIO int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); int SSL_use_certificate_file(SSL *ssl, const char *file, int type); int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type); int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type); int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type); /* PEM type */ int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, const char *file); # ifndef OPENSSL_SYS_VMS /* XXXXX: Better scheme needed! [was: #ifndef MAC_OS_pre_X] */ # ifndef OPENSSL_SYS_MACINTOSH_CLASSIC int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, const char *dir); # endif # endif # endif void SSL_load_error_strings(void); const char *SSL_state_string(const SSL *s); const char *SSL_rstate_string(const SSL *s); const char *SSL_state_string_long(const SSL *s); const char *SSL_rstate_string_long(const SSL *s); long SSL_SESSION_get_time(const SSL_SESSION *s); long SSL_SESSION_set_time(SSL_SESSION *s, long t); long SSL_SESSION_get_timeout(const SSL_SESSION *s); long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); void SSL_copy_session_id(SSL *to, const SSL *from); X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); int SSL_SESSION_set1_id_context(SSL_SESSION *s, const unsigned char *sid_ctx, unsigned int sid_ctx_len); SSL_SESSION *SSL_SESSION_new(void); const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len); unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s); # ifndef OPENSSL_NO_FP_API int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses); # endif # ifndef OPENSSL_NO_BIO int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); # endif void SSL_SESSION_free(SSL_SESSION *ses); int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); int SSL_set_session(SSL *to, SSL_SESSION *session); int SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c); int SSL_CTX_remove_session(SSL_CTX *, SSL_SESSION *c); int SSL_CTX_set_generate_session_id(SSL_CTX *, GEN_SESSION_CB); int SSL_set_generate_session_id(SSL *, GEN_SESSION_CB); int SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id, unsigned int id_len); SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length); # ifdef HEADER_X509_H X509 *SSL_get_peer_certificate(const SSL *s); # endif STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); int (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx)) (int, X509_STORE_CTX *); void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*callback) (int, X509_STORE_CTX *)); void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth); void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, int (*cb) (X509_STORE_CTX *, void *), void *arg); void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), void *arg); # ifndef OPENSSL_NO_RSA int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); # endif int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, long len); int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, const unsigned char *d, long len); int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, const unsigned char *d); void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb); void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u); int SSL_CTX_check_private_key(const SSL_CTX *ctx); int SSL_check_private_key(const SSL *ctx); int SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx, unsigned int sid_ctx_len); SSL *SSL_new(SSL_CTX *ctx); int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, unsigned int sid_ctx_len); int SSL_CTX_set_purpose(SSL_CTX *s, int purpose); int SSL_set_purpose(SSL *s, int purpose); int SSL_CTX_set_trust(SSL_CTX *s, int trust); int SSL_set_trust(SSL *s, int trust); int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm); int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); # ifndef OPENSSL_NO_SRP int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, char *(*cb) (SSL *, void *)); int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, int (*cb) (SSL *, void *)); int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, int (*cb) (SSL *, int *, void *)); int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, BIGNUM *sa, BIGNUM *v, char *info); int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, const char *grp); BIGNUM *SSL_get_srp_g(SSL *s); BIGNUM *SSL_get_srp_N(SSL *s); char *SSL_get_srp_username(SSL *s); char *SSL_get_srp_userinfo(SSL *s); # endif void SSL_certs_clear(SSL *s); void SSL_free(SSL *ssl); int SSL_accept(SSL *ssl); int SSL_connect(SSL *ssl); int SSL_read(SSL *ssl, void *buf, int num); int SSL_peek(SSL *ssl, void *buf, int num); int SSL_write(SSL *ssl, const void *buf, int num); long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg); long SSL_callback_ctrl(SSL *, int, void (*)(void)); long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg); long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void)); int SSL_get_error(const SSL *s, int ret_code); const char *SSL_get_version(const SSL *s); /* This sets the 'default' SSL version that SSL_new() will create */ int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); # ifndef OPENSSL_NO_SSL2_METHOD const SSL_METHOD *SSLv2_method(void); /* SSLv2 */ const SSL_METHOD *SSLv2_server_method(void); /* SSLv2 */ const SSL_METHOD *SSLv2_client_method(void); /* SSLv2 */ # endif # ifndef OPENSSL_NO_SSL3_METHOD const SSL_METHOD *SSLv3_method(void); /* SSLv3 */ const SSL_METHOD *SSLv3_server_method(void); /* SSLv3 */ const SSL_METHOD *SSLv3_client_method(void); /* SSLv3 */ # endif const SSL_METHOD *SSLv23_method(void); /* Negotiate highest available SSL/TLS * version */ const SSL_METHOD *SSLv23_server_method(void); /* Negotiate highest available * SSL/TLS version */ const SSL_METHOD *SSLv23_client_method(void); /* Negotiate highest available * SSL/TLS version */ const SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */ const SSL_METHOD *TLSv1_server_method(void); /* TLSv1.0 */ const SSL_METHOD *TLSv1_client_method(void); /* TLSv1.0 */ const SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */ const SSL_METHOD *TLSv1_1_server_method(void); /* TLSv1.1 */ const SSL_METHOD *TLSv1_1_client_method(void); /* TLSv1.1 */ const SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */ const SSL_METHOD *TLSv1_2_server_method(void); /* TLSv1.2 */ const SSL_METHOD *TLSv1_2_client_method(void); /* TLSv1.2 */ const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */ const SSL_METHOD *DTLSv1_server_method(void); /* DTLSv1.0 */ const SSL_METHOD *DTLSv1_client_method(void); /* DTLSv1.0 */ const SSL_METHOD *DTLSv1_2_method(void); /* DTLSv1.2 */ const SSL_METHOD *DTLSv1_2_server_method(void); /* DTLSv1.2 */ const SSL_METHOD *DTLSv1_2_client_method(void); /* DTLSv1.2 */ const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */ const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */ STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s); int SSL_do_handshake(SSL *s); int SSL_renegotiate(SSL *s); int SSL_renegotiate_abbreviated(SSL *s); int SSL_renegotiate_pending(SSL *s); int SSL_shutdown(SSL *s); const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx); const SSL_METHOD *SSL_get_ssl_method(SSL *s); int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); const char *SSL_alert_type_string_long(int value); const char *SSL_alert_type_string(int value); const char *SSL_alert_desc_string_long(int value); const char *SSL_alert_desc_string(int value); void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); int SSL_add_client_CA(SSL *ssl, X509 *x); int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x); void SSL_set_connect_state(SSL *s); void SSL_set_accept_state(SSL *s); long SSL_get_default_timeout(const SSL *s); int SSL_library_init(void); char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size); STACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk); SSL *SSL_dup(SSL *ssl); X509 *SSL_get_certificate(const SSL *ssl); /* * EVP_PKEY */ struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl); X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); void SSL_set_quiet_shutdown(SSL *ssl, int mode); int SSL_get_quiet_shutdown(const SSL *ssl); void SSL_set_shutdown(SSL *ssl, int mode); int SSL_get_shutdown(const SSL *ssl); int SSL_version(const SSL *ssl); int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath); # define SSL_get0_session SSL_get_session/* just peek at pointer */ SSL_SESSION *SSL_get_session(const SSL *ssl); SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl); SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx); void SSL_set_info_callback(SSL *ssl, void (*cb) (const SSL *ssl, int type, int val)); void (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type, int val); int SSL_state(const SSL *ssl); void SSL_set_state(SSL *ssl, int state); void SSL_set_verify_result(SSL *ssl, long v); long SSL_get_verify_result(const SSL *ssl); int SSL_set_ex_data(SSL *ssl, int idx, void *data); void *SSL_get_ex_data(const SSL *ssl, int idx); int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data); void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss, int idx); int SSL_SESSION_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data); void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx); int SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); int SSL_get_ex_data_X509_STORE_CTX_idx(void); # define SSL_CTX_sess_set_cache_size(ctx,t) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL) # define SSL_CTX_sess_get_cache_size(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL) # define SSL_CTX_set_session_cache_mode(ctx,m) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL) # define SSL_CTX_get_session_cache_mode(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL) # define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx) # define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m) # define SSL_CTX_get_read_ahead(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL) # define SSL_CTX_set_read_ahead(ctx,m) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL) # define SSL_CTX_get_max_cert_list(ctx) \ SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) # define SSL_CTX_set_max_cert_list(ctx,m) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) # define SSL_get_max_cert_list(ssl) \ SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) # define SSL_set_max_cert_list(ssl,m) \ SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) # define SSL_CTX_set_max_send_fragment(ctx,m) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) # define SSL_set_max_send_fragment(ssl,m) \ SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) /* NB: the keylength is only applicable when is_export is true */ # ifndef OPENSSL_NO_RSA void SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx, RSA *(*cb) (SSL *ssl, int is_export, int keylength)); void SSL_set_tmp_rsa_callback(SSL *ssl, RSA *(*cb) (SSL *ssl, int is_export, int keylength)); # endif # ifndef OPENSSL_NO_DH void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, DH *(*dh) (SSL *ssl, int is_export, int keylength)); void SSL_set_tmp_dh_callback(SSL *ssl, DH *(*dh) (SSL *ssl, int is_export, int keylength)); # endif # ifndef OPENSSL_NO_ECDH void SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx, EC_KEY *(*ecdh) (SSL *ssl, int is_export, int keylength)); void SSL_set_tmp_ecdh_callback(SSL *ssl, EC_KEY *(*ecdh) (SSL *ssl, int is_export, int keylength)); # endif # ifndef OPENSSL_NO_COMP const COMP_METHOD *SSL_get_current_compression(SSL *s); const COMP_METHOD *SSL_get_current_expansion(SSL *s); const char *SSL_COMP_get_name(const COMP_METHOD *comp); STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) *meths); void SSL_COMP_free_compression_methods(void); int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); # else const void *SSL_get_current_compression(SSL *s); const void *SSL_get_current_expansion(SSL *s); const char *SSL_COMP_get_name(const void *comp); void *SSL_COMP_get_compression_methods(void); int SSL_COMP_add_compression_method(int id, void *cm); # endif const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); /* TLS extensions functions */ int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len); int SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb, void *arg); /* Pre-shared secret session resumption functions */ int SSL_set_session_secret_cb(SSL *s, tls_session_secret_cb_fn tls_session_secret_cb, void *arg); void SSL_set_debug(SSL *s, int debug); int SSL_cache_hit(SSL *s); int SSL_is_server(SSL *s); SSL_CONF_CTX *SSL_CONF_CTX_new(void); int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx); void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx); unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags); unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags); int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre); void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl); void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx); int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value); int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv); int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd); # ifndef OPENSSL_NO_SSL_TRACE void SSL_trace(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg); const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); # endif # ifndef OPENSSL_NO_UNIT_TEST const struct openssl_ssl_test_functions *SSL_test_functions(void); # endif /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_SSL_strings(void); /* Error codes for the SSL functions. */ /* Function codes. */ # define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 # define SSL_F_CLIENT_CERTIFICATE 100 # define SSL_F_CLIENT_FINISHED 167 # define SSL_F_CLIENT_HELLO 101 # define SSL_F_CLIENT_MASTER_KEY 102 # define SSL_F_D2I_SSL_SESSION 103 # define SSL_F_DO_DTLS1_WRITE 245 # define SSL_F_DO_SSL3_WRITE 104 # define SSL_F_DTLS1_ACCEPT 246 # define SSL_F_DTLS1_ADD_CERT_TO_BUF 295 # define SSL_F_DTLS1_BUFFER_RECORD 247 # define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 316 # define SSL_F_DTLS1_CLIENT_HELLO 248 # define SSL_F_DTLS1_CONNECT 249 # define SSL_F_DTLS1_ENC 250 # define SSL_F_DTLS1_GET_HELLO_VERIFY 251 # define SSL_F_DTLS1_GET_MESSAGE 252 # define SSL_F_DTLS1_GET_MESSAGE_FRAGMENT 253 # define SSL_F_DTLS1_GET_RECORD 254 # define SSL_F_DTLS1_HANDLE_TIMEOUT 297 # define SSL_F_DTLS1_HEARTBEAT 305 # define SSL_F_DTLS1_OUTPUT_CERT_CHAIN 255 # define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 # define SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE 256 # define SSL_F_DTLS1_PROCESS_RECORD 257 # define SSL_F_DTLS1_READ_BYTES 258 # define SSL_F_DTLS1_READ_FAILED 259 # define SSL_F_DTLS1_SEND_CERTIFICATE_REQUEST 260 # define SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE 261 # define SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE 262 # define SSL_F_DTLS1_SEND_CLIENT_VERIFY 263 # define SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST 264 # define SSL_F_DTLS1_SEND_SERVER_CERTIFICATE 265 # define SSL_F_DTLS1_SEND_SERVER_HELLO 266 # define SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE 267 # define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 # define SSL_F_GET_CLIENT_FINISHED 105 # define SSL_F_GET_CLIENT_HELLO 106 # define SSL_F_GET_CLIENT_MASTER_KEY 107 # define SSL_F_GET_SERVER_FINISHED 108 # define SSL_F_GET_SERVER_HELLO 109 # define SSL_F_GET_SERVER_STATIC_DH_KEY 340 # define SSL_F_GET_SERVER_VERIFY 110 # define SSL_F_I2D_SSL_SESSION 111 # define SSL_F_READ_N 112 # define SSL_F_REQUEST_CERTIFICATE 113 # define SSL_F_SERVER_FINISH 239 # define SSL_F_SERVER_HELLO 114 # define SSL_F_SERVER_VERIFY 240 # define SSL_F_SSL23_ACCEPT 115 # define SSL_F_SSL23_CLIENT_HELLO 116 # define SSL_F_SSL23_CONNECT 117 # define SSL_F_SSL23_GET_CLIENT_HELLO 118 # define SSL_F_SSL23_GET_SERVER_HELLO 119 # define SSL_F_SSL23_PEEK 237 # define SSL_F_SSL23_READ 120 # define SSL_F_SSL23_WRITE 121 # define SSL_F_SSL2_ACCEPT 122 # define SSL_F_SSL2_CONNECT 123 # define SSL_F_SSL2_ENC_INIT 124 # define SSL_F_SSL2_GENERATE_KEY_MATERIAL 241 # define SSL_F_SSL2_PEEK 234 # define SSL_F_SSL2_READ 125 # define SSL_F_SSL2_READ_INTERNAL 236 # define SSL_F_SSL2_SET_CERTIFICATE 126 # define SSL_F_SSL2_WRITE 127 # define SSL_F_SSL3_ACCEPT 128 # define SSL_F_SSL3_ADD_CERT_TO_BUF 296 # define SSL_F_SSL3_CALLBACK_CTRL 233 # define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 # define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 # define SSL_F_SSL3_CHECK_CLIENT_HELLO 304 # define SSL_F_SSL3_CHECK_FINISHED 339 # define SSL_F_SSL3_CLIENT_HELLO 131 # define SSL_F_SSL3_CONNECT 132 # define SSL_F_SSL3_CTRL 213 # define SSL_F_SSL3_CTX_CTRL 133 # define SSL_F_SSL3_DIGEST_CACHED_RECORDS 293 # define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 # define SSL_F_SSL3_ENC 134 # define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 # define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 # define SSL_F_SSL3_GET_CERTIFICATE_REQUEST 135 # define SSL_F_SSL3_GET_CERT_STATUS 289 # define SSL_F_SSL3_GET_CERT_VERIFY 136 # define SSL_F_SSL3_GET_CLIENT_CERTIFICATE 137 # define SSL_F_SSL3_GET_CLIENT_HELLO 138 # define SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE 139 # define SSL_F_SSL3_GET_FINISHED 140 # define SSL_F_SSL3_GET_KEY_EXCHANGE 141 # define SSL_F_SSL3_GET_MESSAGE 142 # define SSL_F_SSL3_GET_NEW_SESSION_TICKET 283 # define SSL_F_SSL3_GET_NEXT_PROTO 306 # define SSL_F_SSL3_GET_RECORD 143 # define SSL_F_SSL3_GET_SERVER_CERTIFICATE 144 # define SSL_F_SSL3_GET_SERVER_DONE 145 # define SSL_F_SSL3_GET_SERVER_HELLO 146 # define SSL_F_SSL3_HANDSHAKE_MAC 285 # define SSL_F_SSL3_NEW_SESSION_TICKET 287 # define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 # define SSL_F_SSL3_PEEK 235 # define SSL_F_SSL3_READ_BYTES 148 # define SSL_F_SSL3_READ_N 149 # define SSL_F_SSL3_SEND_CERTIFICATE_REQUEST 150 # define SSL_F_SSL3_SEND_CLIENT_CERTIFICATE 151 # define SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE 152 # define SSL_F_SSL3_SEND_CLIENT_VERIFY 153 # define SSL_F_SSL3_SEND_SERVER_CERTIFICATE 154 # define SSL_F_SSL3_SEND_SERVER_HELLO 242 # define SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE 155 # define SSL_F_SSL3_SETUP_KEY_BLOCK 157 # define SSL_F_SSL3_SETUP_READ_BUFFER 156 # define SSL_F_SSL3_SETUP_WRITE_BUFFER 291 # define SSL_F_SSL3_WRITE_BYTES 158 # define SSL_F_SSL3_WRITE_PENDING 159 # define SSL_F_SSL_ADD_CERT_CHAIN 318 # define SSL_F_SSL_ADD_CERT_TO_BUF 319 # define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 298 # define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 277 # define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 307 # define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 215 # define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 216 # define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 299 # define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 278 # define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 308 # define SSL_F_SSL_BAD_METHOD 160 # define SSL_F_SSL_BUILD_CERT_CHAIN 332 # define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161 # define SSL_F_SSL_CERT_DUP 221 # define SSL_F_SSL_CERT_INST 222 # define SSL_F_SSL_CERT_INSTANTIATE 214 # define SSL_F_SSL_CERT_NEW 162 # define SSL_F_SSL_CHECK_PRIVATE_KEY 163 # define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 280 # define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 279 # define SSL_F_SSL_CIPHER_PROCESS_RULESTR 230 # define SSL_F_SSL_CIPHER_STRENGTH_SORT 231 # define SSL_F_SSL_CLEAR 164 # define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 165 # define SSL_F_SSL_CONF_CMD 334 # define SSL_F_SSL_CREATE_CIPHER_LIST 166 # define SSL_F_SSL_CTRL 232 # define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 168 # define SSL_F_SSL_CTX_MAKE_PROFILES 309 # define SSL_F_SSL_CTX_NEW 169 # define SSL_F_SSL_CTX_SET_CIPHER_LIST 269 # define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 290 # define SSL_F_SSL_CTX_SET_PURPOSE 226 # define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 # define SSL_F_SSL_CTX_SET_SSL_VERSION 170 # define SSL_F_SSL_CTX_SET_TRUST 229 # define SSL_F_SSL_CTX_USE_CERTIFICATE 171 # define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 # define SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE 220 # define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 173 # define SSL_F_SSL_CTX_USE_PRIVATEKEY 174 # define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 175 # define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 176 # define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 272 # define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 177 # define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 178 # define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 179 # define SSL_F_SSL_CTX_USE_SERVERINFO 336 # define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 337 # define SSL_F_SSL_DO_HANDSHAKE 180 # define SSL_F_SSL_GET_NEW_SESSION 181 # define SSL_F_SSL_GET_PREV_SESSION 217 # define SSL_F_SSL_GET_SERVER_CERT_INDEX 322 # define SSL_F_SSL_GET_SERVER_SEND_CERT 182 # define SSL_F_SSL_GET_SERVER_SEND_PKEY 317 # define SSL_F_SSL_GET_SIGN_PKEY 183 # define SSL_F_SSL_INIT_WBIO_BUFFER 184 # define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 # define SSL_F_SSL_NEW 186 # define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 300 # define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 302 # define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 310 # define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 301 # define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 303 # define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 311 # define SSL_F_SSL_PEEK 270 # define SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT 281 # define SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT 282 # define SSL_F_SSL_READ 223 # define SSL_F_SSL_RSA_PRIVATE_DECRYPT 187 # define SSL_F_SSL_RSA_PUBLIC_ENCRYPT 188 # define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320 # define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321 # define SSL_F_SSL_SESSION_DUP 348 # define SSL_F_SSL_SESSION_NEW 189 # define SSL_F_SSL_SESSION_PRINT_FP 190 # define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312 # define SSL_F_SSL_SESS_CERT_NEW 225 # define SSL_F_SSL_SET_CERT 191 # define SSL_F_SSL_SET_CIPHER_LIST 271 # define SSL_F_SSL_SET_FD 192 # define SSL_F_SSL_SET_PKEY 193 # define SSL_F_SSL_SET_PURPOSE 227 # define SSL_F_SSL_SET_RFD 194 # define SSL_F_SSL_SET_SESSION 195 # define SSL_F_SSL_SET_SESSION_ID_CONTEXT 218 # define SSL_F_SSL_SET_SESSION_TICKET_EXT 294 # define SSL_F_SSL_SET_TRUST 228 # define SSL_F_SSL_SET_WFD 196 # define SSL_F_SSL_SHUTDOWN 224 # define SSL_F_SSL_SRP_CTX_INIT 313 # define SSL_F_SSL_UNDEFINED_CONST_FUNCTION 243 # define SSL_F_SSL_UNDEFINED_FUNCTION 197 # define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 244 # define SSL_F_SSL_USE_CERTIFICATE 198 # define SSL_F_SSL_USE_CERTIFICATE_ASN1 199 # define SSL_F_SSL_USE_CERTIFICATE_FILE 200 # define SSL_F_SSL_USE_PRIVATEKEY 201 # define SSL_F_SSL_USE_PRIVATEKEY_ASN1 202 # define SSL_F_SSL_USE_PRIVATEKEY_FILE 203 # define SSL_F_SSL_USE_PSK_IDENTITY_HINT 273 # define SSL_F_SSL_USE_RSAPRIVATEKEY 204 # define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 205 # define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 206 # define SSL_F_SSL_VERIFY_CERT_CHAIN 207 # define SSL_F_SSL_WRITE 208 # define SSL_F_TLS12_CHECK_PEER_SIGALG 333 # define SSL_F_TLS1_CERT_VERIFY_MAC 286 # define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 # define SSL_F_TLS1_CHECK_SERVERHELLO_TLSEXT 274 # define SSL_F_TLS1_ENC 210 # define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 # define SSL_F_TLS1_GET_CURVELIST 338 # define SSL_F_TLS1_HEARTBEAT 315 # define SSL_F_TLS1_PREPARE_CLIENTHELLO_TLSEXT 275 # define SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT 276 # define SSL_F_TLS1_PRF 284 # define SSL_F_TLS1_SETUP_KEY_BLOCK 211 # define SSL_F_TLS1_SET_SERVER_SIGALGS 335 # define SSL_F_WRITE_PENDING 212 /* Reason codes. */ # define SSL_R_APP_DATA_IN_HANDSHAKE 100 # define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 # define SSL_R_BAD_ALERT_RECORD 101 # define SSL_R_BAD_AUTHENTICATION_TYPE 102 # define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 # define SSL_R_BAD_CHECKSUM 104 # define SSL_R_BAD_DATA 390 # define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106 # define SSL_R_BAD_DECOMPRESSION 107 # define SSL_R_BAD_DH_G_LENGTH 108 # define SSL_R_BAD_DH_G_VALUE 375 # define SSL_R_BAD_DH_PUB_KEY_LENGTH 109 # define SSL_R_BAD_DH_PUB_KEY_VALUE 393 # define SSL_R_BAD_DH_P_LENGTH 110 # define SSL_R_BAD_DH_P_VALUE 395 # define SSL_R_BAD_DIGEST_LENGTH 111 # define SSL_R_BAD_DSA_SIGNATURE 112 # define SSL_R_BAD_ECC_CERT 304 # define SSL_R_BAD_ECDSA_SIGNATURE 305 # define SSL_R_BAD_ECPOINT 306 # define SSL_R_BAD_HANDSHAKE_LENGTH 332 # define SSL_R_BAD_HELLO_REQUEST 105 # define SSL_R_BAD_LENGTH 271 # define SSL_R_BAD_MAC_DECODE 113 # define SSL_R_BAD_MAC_LENGTH 333 # define SSL_R_BAD_MESSAGE_TYPE 114 # define SSL_R_BAD_PACKET_LENGTH 115 # define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116 # define SSL_R_BAD_PSK_IDENTITY_HINT_LENGTH 316 # define SSL_R_BAD_RESPONSE_ARGUMENT 117 # define SSL_R_BAD_RSA_DECRYPT 118 # define SSL_R_BAD_RSA_ENCRYPT 119 # define SSL_R_BAD_RSA_E_LENGTH 120 # define SSL_R_BAD_RSA_MODULUS_LENGTH 121 # define SSL_R_BAD_RSA_SIGNATURE 122 # define SSL_R_BAD_SIGNATURE 123 # define SSL_R_BAD_SRP_A_LENGTH 347 # define SSL_R_BAD_SRP_B_LENGTH 348 # define SSL_R_BAD_SRP_G_LENGTH 349 # define SSL_R_BAD_SRP_N_LENGTH 350 # define SSL_R_BAD_SRP_PARAMETERS 371 # define SSL_R_BAD_SRP_S_LENGTH 351 # define SSL_R_BAD_SRTP_MKI_VALUE 352 # define SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST 353 # define SSL_R_BAD_SSL_FILETYPE 124 # define SSL_R_BAD_SSL_SESSION_ID_LENGTH 125 # define SSL_R_BAD_STATE 126 # define SSL_R_BAD_VALUE 384 # define SSL_R_BAD_WRITE_RETRY 127 # define SSL_R_BIO_NOT_SET 128 # define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG 129 # define SSL_R_BN_LIB 130 # define SSL_R_CA_DN_LENGTH_MISMATCH 131 # define SSL_R_CA_DN_TOO_LONG 132 # define SSL_R_CCS_RECEIVED_EARLY 133 # define SSL_R_CERTIFICATE_VERIFY_FAILED 134 # define SSL_R_CERT_CB_ERROR 377 # define SSL_R_CERT_LENGTH_MISMATCH 135 # define SSL_R_CHALLENGE_IS_DIFFERENT 136 # define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 # define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 # define SSL_R_CIPHER_TABLE_SRC_ERROR 139 # define SSL_R_CLIENTHELLO_TLSEXT 226 # define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 # define SSL_R_COMPRESSION_DISABLED 343 # define SSL_R_COMPRESSION_FAILURE 141 # define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE 307 # define SSL_R_COMPRESSION_LIBRARY_ERROR 142 # define SSL_R_CONNECTION_ID_IS_DIFFERENT 143 # define SSL_R_CONNECTION_TYPE_NOT_SET 144 # define SSL_R_COOKIE_MISMATCH 308 # define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 145 # define SSL_R_DATA_LENGTH_TOO_LONG 146 # define SSL_R_DECRYPTION_FAILED 147 # define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281 # define SSL_R_DH_KEY_TOO_SMALL 372 # define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 148 # define SSL_R_DIGEST_CHECK_FAILED 149 # define SSL_R_DTLS_MESSAGE_TOO_BIG 334 # define SSL_R_DUPLICATE_COMPRESSION_ID 309 # define SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT 317 # define SSL_R_ECC_CERT_NOT_FOR_SIGNING 318 # define SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE 322 # define SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE 323 # define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE 374 # define SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER 310 # define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354 # define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150 # define SSL_R_ERROR_GENERATING_TMP_RSA_KEY 282 # define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 151 # define SSL_R_EXCESSIVE_MESSAGE_SIZE 152 # define SSL_R_EXTRA_DATA_IN_MESSAGE 153 # define SSL_R_GOT_A_FIN_BEFORE_A_CCS 154 # define SSL_R_GOT_NEXT_PROTO_BEFORE_A_CCS 355 # define SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION 356 # define SSL_R_HTTPS_PROXY_REQUEST 155 # define SSL_R_HTTP_REQUEST 156 # define SSL_R_ILLEGAL_PADDING 283 # define SSL_R_ILLEGAL_SUITEB_DIGEST 380 # define SSL_R_INAPPROPRIATE_FALLBACK 373 # define SSL_R_INCONSISTENT_COMPRESSION 340 # define SSL_R_INVALID_CHALLENGE_LENGTH 158 # define SSL_R_INVALID_COMMAND 280 # define SSL_R_INVALID_COMPRESSION_ALGORITHM 341 # define SSL_R_INVALID_NULL_CMD_NAME 385 # define SSL_R_INVALID_PURPOSE 278 # define SSL_R_INVALID_SERVERINFO_DATA 388 # define SSL_R_INVALID_SRP_USERNAME 357 # define SSL_R_INVALID_STATUS_RESPONSE 328 # define SSL_R_INVALID_TICKET_KEYS_LENGTH 325 # define SSL_R_INVALID_TRUST 279 # define SSL_R_KEY_ARG_TOO_LONG 284 # define SSL_R_KRB5 285 # define SSL_R_KRB5_C_CC_PRINC 286 # define SSL_R_KRB5_C_GET_CRED 287 # define SSL_R_KRB5_C_INIT 288 # define SSL_R_KRB5_C_MK_REQ 289 # define SSL_R_KRB5_S_BAD_TICKET 290 # define SSL_R_KRB5_S_INIT 291 # define SSL_R_KRB5_S_RD_REQ 292 # define SSL_R_KRB5_S_TKT_EXPIRED 293 # define SSL_R_KRB5_S_TKT_NYV 294 # define SSL_R_KRB5_S_TKT_SKEW 295 # define SSL_R_LENGTH_MISMATCH 159 # define SSL_R_LENGTH_TOO_SHORT 160 # define SSL_R_LIBRARY_BUG 274 # define SSL_R_LIBRARY_HAS_NO_CIPHERS 161 # define SSL_R_MESSAGE_TOO_LONG 296 # define SSL_R_MISSING_DH_DSA_CERT 162 # define SSL_R_MISSING_DH_KEY 163 # define SSL_R_MISSING_DH_RSA_CERT 164 # define SSL_R_MISSING_DSA_SIGNING_CERT 165 # define SSL_R_MISSING_ECDH_CERT 382 # define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 # define SSL_R_MISSING_EXPORT_TMP_DH_KEY 166 # define SSL_R_MISSING_EXPORT_TMP_RSA_KEY 167 # define SSL_R_MISSING_RSA_CERTIFICATE 168 # define SSL_R_MISSING_RSA_ENCRYPTING_CERT 169 # define SSL_R_MISSING_RSA_SIGNING_CERT 170 # define SSL_R_MISSING_SRP_PARAM 358 # define SSL_R_MISSING_TMP_DH_KEY 171 # define SSL_R_MISSING_TMP_ECDH_KEY 311 # define SSL_R_MISSING_TMP_RSA_KEY 172 # define SSL_R_MISSING_TMP_RSA_PKEY 173 # define SSL_R_MISSING_VERIFY_MESSAGE 174 # define SSL_R_MULTIPLE_SGC_RESTARTS 346 # define SSL_R_NON_SSLV2_INITIAL_PACKET 175 # define SSL_R_NO_CERTIFICATES_RETURNED 176 # define SSL_R_NO_CERTIFICATE_ASSIGNED 177 # define SSL_R_NO_CERTIFICATE_RETURNED 178 # define SSL_R_NO_CERTIFICATE_SET 179 # define SSL_R_NO_CERTIFICATE_SPECIFIED 180 # define SSL_R_NO_CIPHERS_AVAILABLE 181 # define SSL_R_NO_CIPHERS_PASSED 182 # define SSL_R_NO_CIPHERS_SPECIFIED 183 # define SSL_R_NO_CIPHER_LIST 184 # define SSL_R_NO_CIPHER_MATCH 185 # define SSL_R_NO_CLIENT_CERT_METHOD 331 # define SSL_R_NO_CLIENT_CERT_RECEIVED 186 # define SSL_R_NO_COMPRESSION_SPECIFIED 187 # define SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER 330 # define SSL_R_NO_METHOD_SPECIFIED 188 # define SSL_R_NO_PEM_EXTENSIONS 389 # define SSL_R_NO_PRIVATEKEY 189 # define SSL_R_NO_PRIVATE_KEY_ASSIGNED 190 # define SSL_R_NO_PROTOCOLS_AVAILABLE 191 # define SSL_R_NO_PUBLICKEY 192 # define SSL_R_NO_RENEGOTIATION 339 # define SSL_R_NO_REQUIRED_DIGEST 324 # define SSL_R_NO_SHARED_CIPHER 193 # define SSL_R_NO_SHARED_SIGATURE_ALGORITHMS 376 # define SSL_R_NO_SRTP_PROFILES 359 # define SSL_R_NO_VERIFY_CALLBACK 194 # define SSL_R_NULL_SSL_CTX 195 # define SSL_R_NULL_SSL_METHOD_PASSED 196 # define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 # define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 # define SSL_R_ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE 387 # define SSL_R_ONLY_TLS_1_2_ALLOWED_IN_SUITEB_MODE 379 # define SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE 297 # define SSL_R_OPAQUE_PRF_INPUT_TOO_LONG 327 # define SSL_R_PACKET_LENGTH_TOO_LONG 198 # define SSL_R_PARSE_TLSEXT 227 # define SSL_R_PATH_TOO_LONG 270 # define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE 199 # define SSL_R_PEER_ERROR 200 # define SSL_R_PEER_ERROR_CERTIFICATE 201 # define SSL_R_PEER_ERROR_NO_CERTIFICATE 202 # define SSL_R_PEER_ERROR_NO_CIPHER 203 # define SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE 204 # define SSL_R_PEM_NAME_BAD_PREFIX 391 # define SSL_R_PEM_NAME_TOO_SHORT 392 # define SSL_R_PRE_MAC_LENGTH_TOO_LONG 205 # define SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS 206 # define SSL_R_PROTOCOL_IS_SHUTDOWN 207 # define SSL_R_PSK_IDENTITY_NOT_FOUND 223 # define SSL_R_PSK_NO_CLIENT_CB 224 # define SSL_R_PSK_NO_SERVER_CB 225 # define SSL_R_PUBLIC_KEY_ENCRYPT_ERROR 208 # define SSL_R_PUBLIC_KEY_IS_NOT_RSA 209 # define SSL_R_PUBLIC_KEY_NOT_RSA 210 # define SSL_R_READ_BIO_NOT_SET 211 # define SSL_R_READ_TIMEOUT_EXPIRED 312 # define SSL_R_READ_WRONG_PACKET_TYPE 212 # define SSL_R_RECORD_LENGTH_MISMATCH 213 # define SSL_R_RECORD_TOO_LARGE 214 # define SSL_R_RECORD_TOO_SMALL 298 # define SSL_R_RENEGOTIATE_EXT_TOO_LONG 335 # define SSL_R_RENEGOTIATION_ENCODING_ERR 336 # define SSL_R_RENEGOTIATION_MISMATCH 337 # define SSL_R_REQUIRED_CIPHER_MISSING 215 # define SSL_R_REQUIRED_COMPRESSSION_ALGORITHM_MISSING 342 # define SSL_R_REUSE_CERT_LENGTH_NOT_ZERO 216 # define SSL_R_REUSE_CERT_TYPE_NOT_ZERO 217 # define SSL_R_REUSE_CIPHER_LIST_NOT_ZERO 218 # define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 345 # define SSL_R_SERVERHELLO_TLSEXT 275 # define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 277 # define SSL_R_SHORT_READ 219 # define SSL_R_SHUTDOWN_WHILE_IN_INIT 407 # define SSL_R_SIGNATURE_ALGORITHMS_ERROR 360 # define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 220 # define SSL_R_SRP_A_CALC 361 # define SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES 362 # define SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG 363 # define SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE 364 # define SSL_R_SSL23_DOING_SESSION_ID_REUSE 221 # define SSL_R_SSL2_CONNECTION_ID_TOO_LONG 299 # define SSL_R_SSL3_EXT_INVALID_ECPOINTFORMAT 321 # define SSL_R_SSL3_EXT_INVALID_SERVERNAME 319 # define SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE 320 # define SSL_R_SSL3_SESSION_ID_TOO_LONG 300 # define SSL_R_SSL3_SESSION_ID_TOO_SHORT 222 # define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042 # define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020 # define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045 # define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044 # define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046 # define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030 # define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040 # define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047 # define SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041 # define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010 # define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043 # define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION 228 # define SSL_R_SSL_HANDSHAKE_FAILURE 229 # define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS 230 # define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED 301 # define SSL_R_SSL_SESSION_ID_CONFLICT 302 # define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG 273 # define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH 303 # define SSL_R_SSL_SESSION_ID_IS_DIFFERENT 231 # define SSL_R_TLSV1_ALERT_ACCESS_DENIED 1049 # define SSL_R_TLSV1_ALERT_DECODE_ERROR 1050 # define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED 1021 # define SSL_R_TLSV1_ALERT_DECRYPT_ERROR 1051 # define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION 1060 # define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 # define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 # define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 # define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 # define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 # define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 # define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 # define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 # define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 # define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 # define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 # define SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 # define SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 # define SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER 232 # define SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT 365 # define SSL_R_TLS_HEARTBEAT_PENDING 366 # define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL 367 # define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 # define SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST 233 # define SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG 234 # define SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER 235 # define SSL_R_UNABLE_TO_DECODE_DH_CERTS 236 # define SSL_R_UNABLE_TO_DECODE_ECDH_CERTS 313 # define SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY 237 # define SSL_R_UNABLE_TO_FIND_DH_PARAMETERS 238 # define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS 314 # define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 239 # define SSL_R_UNABLE_TO_FIND_SSL_METHOD 240 # define SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES 241 # define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES 242 # define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES 243 # define SSL_R_UNEXPECTED_MESSAGE 244 # define SSL_R_UNEXPECTED_RECORD 245 # define SSL_R_UNINITIALIZED 276 # define SSL_R_UNKNOWN_ALERT_TYPE 246 # define SSL_R_UNKNOWN_CERTIFICATE_TYPE 247 # define SSL_R_UNKNOWN_CIPHER_RETURNED 248 # define SSL_R_UNKNOWN_CIPHER_TYPE 249 # define SSL_R_UNKNOWN_CMD_NAME 386 # define SSL_R_UNKNOWN_DIGEST 368 # define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE 250 # define SSL_R_UNKNOWN_PKEY_TYPE 251 # define SSL_R_UNKNOWN_PROTOCOL 252 # define SSL_R_UNKNOWN_REMOTE_ERROR_TYPE 253 # define SSL_R_UNKNOWN_SSL_VERSION 254 # define SSL_R_UNKNOWN_STATE 255 # define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED 338 # define SSL_R_UNSUPPORTED_CIPHER 256 # define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 # define SSL_R_UNSUPPORTED_DIGEST_TYPE 326 # define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE 315 # define SSL_R_UNSUPPORTED_PROTOCOL 258 # define SSL_R_UNSUPPORTED_SSL_VERSION 259 # define SSL_R_UNSUPPORTED_STATUS_TYPE 329 # define SSL_R_USE_SRTP_NOT_NEGOTIATED 369 # define SSL_R_WRITE_BIO_NOT_SET 260 # define SSL_R_WRONG_CERTIFICATE_TYPE 383 # define SSL_R_WRONG_CIPHER_RETURNED 261 # define SSL_R_WRONG_CURVE 378 # define SSL_R_WRONG_MESSAGE_TYPE 262 # define SSL_R_WRONG_NUMBER_OF_KEY_BITS 263 # define SSL_R_WRONG_SIGNATURE_LENGTH 264 # define SSL_R_WRONG_SIGNATURE_SIZE 265 # define SSL_R_WRONG_SIGNATURE_TYPE 370 # define SSL_R_WRONG_SSL_VERSION 266 # define SSL_R_WRONG_VERSION_NUMBER 267 # define SSL_R_X509_LIB 268 # define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS 269 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/ssl2.h ================================================ /* ssl/ssl2.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_SSL2_H # define HEADER_SSL2_H #ifdef __cplusplus extern "C" { #endif /* Protocol Version Codes */ # define SSL2_VERSION 0x0002 # define SSL2_VERSION_MAJOR 0x00 # define SSL2_VERSION_MINOR 0x02 /* #define SSL2_CLIENT_VERSION 0x0002 */ /* #define SSL2_SERVER_VERSION 0x0002 */ /* Protocol Message Codes */ # define SSL2_MT_ERROR 0 # define SSL2_MT_CLIENT_HELLO 1 # define SSL2_MT_CLIENT_MASTER_KEY 2 # define SSL2_MT_CLIENT_FINISHED 3 # define SSL2_MT_SERVER_HELLO 4 # define SSL2_MT_SERVER_VERIFY 5 # define SSL2_MT_SERVER_FINISHED 6 # define SSL2_MT_REQUEST_CERTIFICATE 7 # define SSL2_MT_CLIENT_CERTIFICATE 8 /* Error Message Codes */ # define SSL2_PE_UNDEFINED_ERROR 0x0000 # define SSL2_PE_NO_CIPHER 0x0001 # define SSL2_PE_NO_CERTIFICATE 0x0002 # define SSL2_PE_BAD_CERTIFICATE 0x0004 # define SSL2_PE_UNSUPPORTED_CERTIFICATE_TYPE 0x0006 /* Cipher Kind Values */ # define SSL2_CK_NULL_WITH_MD5 0x02000000/* v3 */ # define SSL2_CK_RC4_128_WITH_MD5 0x02010080 # define SSL2_CK_RC4_128_EXPORT40_WITH_MD5 0x02020080 # define SSL2_CK_RC2_128_CBC_WITH_MD5 0x02030080 # define SSL2_CK_RC2_128_CBC_EXPORT40_WITH_MD5 0x02040080 # define SSL2_CK_IDEA_128_CBC_WITH_MD5 0x02050080 # define SSL2_CK_DES_64_CBC_WITH_MD5 0x02060040 # define SSL2_CK_DES_64_CBC_WITH_SHA 0x02060140/* v3 */ # define SSL2_CK_DES_192_EDE3_CBC_WITH_MD5 0x020700c0 # define SSL2_CK_DES_192_EDE3_CBC_WITH_SHA 0x020701c0/* v3 */ # define SSL2_CK_RC4_64_WITH_MD5 0x02080080/* MS hack */ # define SSL2_CK_DES_64_CFB64_WITH_MD5_1 0x02ff0800/* SSLeay */ # define SSL2_CK_NULL 0x02ff0810/* SSLeay */ # define SSL2_TXT_DES_64_CFB64_WITH_MD5_1 "DES-CFB-M1" # define SSL2_TXT_NULL_WITH_MD5 "NULL-MD5" # define SSL2_TXT_RC4_128_WITH_MD5 "RC4-MD5" # define SSL2_TXT_RC4_128_EXPORT40_WITH_MD5 "EXP-RC4-MD5" # define SSL2_TXT_RC2_128_CBC_WITH_MD5 "RC2-CBC-MD5" # define SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 "EXP-RC2-CBC-MD5" # define SSL2_TXT_IDEA_128_CBC_WITH_MD5 "IDEA-CBC-MD5" # define SSL2_TXT_DES_64_CBC_WITH_MD5 "DES-CBC-MD5" # define SSL2_TXT_DES_64_CBC_WITH_SHA "DES-CBC-SHA" # define SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5 "DES-CBC3-MD5" # define SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA "DES-CBC3-SHA" # define SSL2_TXT_RC4_64_WITH_MD5 "RC4-64-MD5" # define SSL2_TXT_NULL "NULL" /* Flags for the SSL_CIPHER.algorithm2 field */ # define SSL2_CF_5_BYTE_ENC 0x01 # define SSL2_CF_8_BYTE_ENC 0x02 /* Certificate Type Codes */ # define SSL2_CT_X509_CERTIFICATE 0x01 /* Authentication Type Code */ # define SSL2_AT_MD5_WITH_RSA_ENCRYPTION 0x01 # define SSL2_MAX_SSL_SESSION_ID_LENGTH 32 /* Upper/Lower Bounds */ # define SSL2_MAX_MASTER_KEY_LENGTH_IN_BITS 256 # ifdef OPENSSL_SYS_MPE # define SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER 29998u # else # define SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER 32767u /* 2^15-1 */ # endif # define SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER 16383/* 2^14-1 */ # define SSL2_CHALLENGE_LENGTH 16 /* * #define SSL2_CHALLENGE_LENGTH 32 */ # define SSL2_MIN_CHALLENGE_LENGTH 16 # define SSL2_MAX_CHALLENGE_LENGTH 32 # define SSL2_CONNECTION_ID_LENGTH 16 # define SSL2_MAX_CONNECTION_ID_LENGTH 16 # define SSL2_SSL_SESSION_ID_LENGTH 16 # define SSL2_MAX_CERT_CHALLENGE_LENGTH 32 # define SSL2_MIN_CERT_CHALLENGE_LENGTH 16 # define SSL2_MAX_KEY_MATERIAL_LENGTH 24 # ifndef HEADER_SSL_LOCL_H # define CERT char # endif # ifndef OPENSSL_NO_SSL_INTERN typedef struct ssl2_state_st { int three_byte_header; int clear_text; /* clear text */ int escape; /* not used in SSLv2 */ int ssl2_rollback; /* used if SSLv23 rolled back to SSLv2 */ /* * non-blocking io info, used to make sure the same args were passwd */ unsigned int wnum; /* number of bytes sent so far */ int wpend_tot; const unsigned char *wpend_buf; int wpend_off; /* offset to data to write */ int wpend_len; /* number of bytes passwd to write */ int wpend_ret; /* number of bytes to return to caller */ /* buffer raw data */ int rbuf_left; int rbuf_offs; unsigned char *rbuf; unsigned char *wbuf; unsigned char *write_ptr; /* used to point to the start due to 2/3 byte * header. */ unsigned int padding; unsigned int rlength; /* passed to ssl2_enc */ int ract_data_length; /* Set when things are encrypted. */ unsigned int wlength; /* passed to ssl2_enc */ int wact_data_length; /* Set when things are decrypted. */ unsigned char *ract_data; unsigned char *wact_data; unsigned char *mac_data; unsigned char *read_key; unsigned char *write_key; /* Stuff specifically to do with this SSL session */ unsigned int challenge_length; unsigned char challenge[SSL2_MAX_CHALLENGE_LENGTH]; unsigned int conn_id_length; unsigned char conn_id[SSL2_MAX_CONNECTION_ID_LENGTH]; unsigned int key_material_length; unsigned char key_material[SSL2_MAX_KEY_MATERIAL_LENGTH * 2]; unsigned long read_sequence; unsigned long write_sequence; struct { unsigned int conn_id_length; unsigned int cert_type; unsigned int cert_length; unsigned int csl; unsigned int clear; unsigned int enc; unsigned char ccl[SSL2_MAX_CERT_CHALLENGE_LENGTH]; unsigned int cipher_spec_length; unsigned int session_id_length; unsigned int clen; unsigned int rlen; } tmp; } SSL2_STATE; # endif /* SSLv2 */ /* client */ # define SSL2_ST_SEND_CLIENT_HELLO_A (0x10|SSL_ST_CONNECT) # define SSL2_ST_SEND_CLIENT_HELLO_B (0x11|SSL_ST_CONNECT) # define SSL2_ST_GET_SERVER_HELLO_A (0x20|SSL_ST_CONNECT) # define SSL2_ST_GET_SERVER_HELLO_B (0x21|SSL_ST_CONNECT) # define SSL2_ST_SEND_CLIENT_MASTER_KEY_A (0x30|SSL_ST_CONNECT) # define SSL2_ST_SEND_CLIENT_MASTER_KEY_B (0x31|SSL_ST_CONNECT) # define SSL2_ST_SEND_CLIENT_FINISHED_A (0x40|SSL_ST_CONNECT) # define SSL2_ST_SEND_CLIENT_FINISHED_B (0x41|SSL_ST_CONNECT) # define SSL2_ST_SEND_CLIENT_CERTIFICATE_A (0x50|SSL_ST_CONNECT) # define SSL2_ST_SEND_CLIENT_CERTIFICATE_B (0x51|SSL_ST_CONNECT) # define SSL2_ST_SEND_CLIENT_CERTIFICATE_C (0x52|SSL_ST_CONNECT) # define SSL2_ST_SEND_CLIENT_CERTIFICATE_D (0x53|SSL_ST_CONNECT) # define SSL2_ST_GET_SERVER_VERIFY_A (0x60|SSL_ST_CONNECT) # define SSL2_ST_GET_SERVER_VERIFY_B (0x61|SSL_ST_CONNECT) # define SSL2_ST_GET_SERVER_FINISHED_A (0x70|SSL_ST_CONNECT) # define SSL2_ST_GET_SERVER_FINISHED_B (0x71|SSL_ST_CONNECT) # define SSL2_ST_CLIENT_START_ENCRYPTION (0x80|SSL_ST_CONNECT) # define SSL2_ST_X509_GET_CLIENT_CERTIFICATE (0x90|SSL_ST_CONNECT) /* server */ # define SSL2_ST_GET_CLIENT_HELLO_A (0x10|SSL_ST_ACCEPT) # define SSL2_ST_GET_CLIENT_HELLO_B (0x11|SSL_ST_ACCEPT) # define SSL2_ST_GET_CLIENT_HELLO_C (0x12|SSL_ST_ACCEPT) # define SSL2_ST_SEND_SERVER_HELLO_A (0x20|SSL_ST_ACCEPT) # define SSL2_ST_SEND_SERVER_HELLO_B (0x21|SSL_ST_ACCEPT) # define SSL2_ST_GET_CLIENT_MASTER_KEY_A (0x30|SSL_ST_ACCEPT) # define SSL2_ST_GET_CLIENT_MASTER_KEY_B (0x31|SSL_ST_ACCEPT) # define SSL2_ST_SEND_SERVER_VERIFY_A (0x40|SSL_ST_ACCEPT) # define SSL2_ST_SEND_SERVER_VERIFY_B (0x41|SSL_ST_ACCEPT) # define SSL2_ST_SEND_SERVER_VERIFY_C (0x42|SSL_ST_ACCEPT) # define SSL2_ST_GET_CLIENT_FINISHED_A (0x50|SSL_ST_ACCEPT) # define SSL2_ST_GET_CLIENT_FINISHED_B (0x51|SSL_ST_ACCEPT) # define SSL2_ST_SEND_SERVER_FINISHED_A (0x60|SSL_ST_ACCEPT) # define SSL2_ST_SEND_SERVER_FINISHED_B (0x61|SSL_ST_ACCEPT) # define SSL2_ST_SEND_REQUEST_CERTIFICATE_A (0x70|SSL_ST_ACCEPT) # define SSL2_ST_SEND_REQUEST_CERTIFICATE_B (0x71|SSL_ST_ACCEPT) # define SSL2_ST_SEND_REQUEST_CERTIFICATE_C (0x72|SSL_ST_ACCEPT) # define SSL2_ST_SEND_REQUEST_CERTIFICATE_D (0x73|SSL_ST_ACCEPT) # define SSL2_ST_SERVER_START_ENCRYPTION (0x80|SSL_ST_ACCEPT) # define SSL2_ST_X509_GET_SERVER_CERTIFICATE (0x90|SSL_ST_ACCEPT) #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/ssl23.h ================================================ /* ssl/ssl23.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_SSL23_H # define HEADER_SSL23_H #ifdef __cplusplus extern "C" { #endif /* * client */ /* write to server */ # define SSL23_ST_CW_CLNT_HELLO_A (0x210|SSL_ST_CONNECT) # define SSL23_ST_CW_CLNT_HELLO_B (0x211|SSL_ST_CONNECT) /* read from server */ # define SSL23_ST_CR_SRVR_HELLO_A (0x220|SSL_ST_CONNECT) # define SSL23_ST_CR_SRVR_HELLO_B (0x221|SSL_ST_CONNECT) /* server */ /* read from client */ # define SSL23_ST_SR_CLNT_HELLO_A (0x210|SSL_ST_ACCEPT) # define SSL23_ST_SR_CLNT_HELLO_B (0x211|SSL_ST_ACCEPT) #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/ssl3.h ================================================ /* ssl/ssl3.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * ECC cipher suite support in OpenSSL originally developed by * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. */ #ifndef HEADER_SSL3_H # define HEADER_SSL3_H # ifndef OPENSSL_NO_COMP # include # endif # include # include # include #ifdef __cplusplus extern "C" { #endif /* * Signalling cipher suite value from RFC 5746 * (TLS_EMPTY_RENEGOTIATION_INFO_SCSV) */ # define SSL3_CK_SCSV 0x030000FF /* * Signalling cipher suite value from draft-ietf-tls-downgrade-scsv-00 * (TLS_FALLBACK_SCSV) */ # define SSL3_CK_FALLBACK_SCSV 0x03005600 # define SSL3_CK_RSA_NULL_MD5 0x03000001 # define SSL3_CK_RSA_NULL_SHA 0x03000002 # define SSL3_CK_RSA_RC4_40_MD5 0x03000003 # define SSL3_CK_RSA_RC4_128_MD5 0x03000004 # define SSL3_CK_RSA_RC4_128_SHA 0x03000005 # define SSL3_CK_RSA_RC2_40_MD5 0x03000006 # define SSL3_CK_RSA_IDEA_128_SHA 0x03000007 # define SSL3_CK_RSA_DES_40_CBC_SHA 0x03000008 # define SSL3_CK_RSA_DES_64_CBC_SHA 0x03000009 # define SSL3_CK_RSA_DES_192_CBC3_SHA 0x0300000A # define SSL3_CK_DH_DSS_DES_40_CBC_SHA 0x0300000B # define SSL3_CK_DH_DSS_DES_64_CBC_SHA 0x0300000C # define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 0x0300000D # define SSL3_CK_DH_RSA_DES_40_CBC_SHA 0x0300000E # define SSL3_CK_DH_RSA_DES_64_CBC_SHA 0x0300000F # define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 0x03000010 # define SSL3_CK_EDH_DSS_DES_40_CBC_SHA 0x03000011 # define SSL3_CK_DHE_DSS_DES_40_CBC_SHA SSL3_CK_EDH_DSS_DES_40_CBC_SHA # define SSL3_CK_EDH_DSS_DES_64_CBC_SHA 0x03000012 # define SSL3_CK_DHE_DSS_DES_64_CBC_SHA SSL3_CK_EDH_DSS_DES_64_CBC_SHA # define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA 0x03000013 # define SSL3_CK_DHE_DSS_DES_192_CBC3_SHA SSL3_CK_EDH_DSS_DES_192_CBC3_SHA # define SSL3_CK_EDH_RSA_DES_40_CBC_SHA 0x03000014 # define SSL3_CK_DHE_RSA_DES_40_CBC_SHA SSL3_CK_EDH_RSA_DES_40_CBC_SHA # define SSL3_CK_EDH_RSA_DES_64_CBC_SHA 0x03000015 # define SSL3_CK_DHE_RSA_DES_64_CBC_SHA SSL3_CK_EDH_RSA_DES_64_CBC_SHA # define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA 0x03000016 # define SSL3_CK_DHE_RSA_DES_192_CBC3_SHA SSL3_CK_EDH_RSA_DES_192_CBC3_SHA # define SSL3_CK_ADH_RC4_40_MD5 0x03000017 # define SSL3_CK_ADH_RC4_128_MD5 0x03000018 # define SSL3_CK_ADH_DES_40_CBC_SHA 0x03000019 # define SSL3_CK_ADH_DES_64_CBC_SHA 0x0300001A # define SSL3_CK_ADH_DES_192_CBC_SHA 0x0300001B # if 0 # define SSL3_CK_FZA_DMS_NULL_SHA 0x0300001C # define SSL3_CK_FZA_DMS_FZA_SHA 0x0300001D # if 0 /* Because it clashes with KRB5, is never * used any more, and is safe to remove * according to David Hopwood * of the * ietf-tls list */ # define SSL3_CK_FZA_DMS_RC4_SHA 0x0300001E # endif # endif /* * VRS Additional Kerberos5 entries */ # define SSL3_CK_KRB5_DES_64_CBC_SHA 0x0300001E # define SSL3_CK_KRB5_DES_192_CBC3_SHA 0x0300001F # define SSL3_CK_KRB5_RC4_128_SHA 0x03000020 # define SSL3_CK_KRB5_IDEA_128_CBC_SHA 0x03000021 # define SSL3_CK_KRB5_DES_64_CBC_MD5 0x03000022 # define SSL3_CK_KRB5_DES_192_CBC3_MD5 0x03000023 # define SSL3_CK_KRB5_RC4_128_MD5 0x03000024 # define SSL3_CK_KRB5_IDEA_128_CBC_MD5 0x03000025 # define SSL3_CK_KRB5_DES_40_CBC_SHA 0x03000026 # define SSL3_CK_KRB5_RC2_40_CBC_SHA 0x03000027 # define SSL3_CK_KRB5_RC4_40_SHA 0x03000028 # define SSL3_CK_KRB5_DES_40_CBC_MD5 0x03000029 # define SSL3_CK_KRB5_RC2_40_CBC_MD5 0x0300002A # define SSL3_CK_KRB5_RC4_40_MD5 0x0300002B # define SSL3_TXT_RSA_NULL_MD5 "NULL-MD5" # define SSL3_TXT_RSA_NULL_SHA "NULL-SHA" # define SSL3_TXT_RSA_RC4_40_MD5 "EXP-RC4-MD5" # define SSL3_TXT_RSA_RC4_128_MD5 "RC4-MD5" # define SSL3_TXT_RSA_RC4_128_SHA "RC4-SHA" # define SSL3_TXT_RSA_RC2_40_MD5 "EXP-RC2-CBC-MD5" # define SSL3_TXT_RSA_IDEA_128_SHA "IDEA-CBC-SHA" # define SSL3_TXT_RSA_DES_40_CBC_SHA "EXP-DES-CBC-SHA" # define SSL3_TXT_RSA_DES_64_CBC_SHA "DES-CBC-SHA" # define SSL3_TXT_RSA_DES_192_CBC3_SHA "DES-CBC3-SHA" # define SSL3_TXT_DH_DSS_DES_40_CBC_SHA "EXP-DH-DSS-DES-CBC-SHA" # define SSL3_TXT_DH_DSS_DES_64_CBC_SHA "DH-DSS-DES-CBC-SHA" # define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA "DH-DSS-DES-CBC3-SHA" # define SSL3_TXT_DH_RSA_DES_40_CBC_SHA "EXP-DH-RSA-DES-CBC-SHA" # define SSL3_TXT_DH_RSA_DES_64_CBC_SHA "DH-RSA-DES-CBC-SHA" # define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA "DH-RSA-DES-CBC3-SHA" # define SSL3_TXT_DHE_DSS_DES_40_CBC_SHA "EXP-DHE-DSS-DES-CBC-SHA" # define SSL3_TXT_DHE_DSS_DES_64_CBC_SHA "DHE-DSS-DES-CBC-SHA" # define SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA "DHE-DSS-DES-CBC3-SHA" # define SSL3_TXT_DHE_RSA_DES_40_CBC_SHA "EXP-DHE-RSA-DES-CBC-SHA" # define SSL3_TXT_DHE_RSA_DES_64_CBC_SHA "DHE-RSA-DES-CBC-SHA" # define SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA "DHE-RSA-DES-CBC3-SHA" /* * This next block of six "EDH" labels is for backward compatibility with * older versions of OpenSSL. New code should use the six "DHE" labels above * instead: */ # define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA "EXP-EDH-DSS-DES-CBC-SHA" # define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA "EDH-DSS-DES-CBC-SHA" # define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA "EDH-DSS-DES-CBC3-SHA" # define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA "EXP-EDH-RSA-DES-CBC-SHA" # define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA "EDH-RSA-DES-CBC-SHA" # define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA "EDH-RSA-DES-CBC3-SHA" # define SSL3_TXT_ADH_RC4_40_MD5 "EXP-ADH-RC4-MD5" # define SSL3_TXT_ADH_RC4_128_MD5 "ADH-RC4-MD5" # define SSL3_TXT_ADH_DES_40_CBC_SHA "EXP-ADH-DES-CBC-SHA" # define SSL3_TXT_ADH_DES_64_CBC_SHA "ADH-DES-CBC-SHA" # define SSL3_TXT_ADH_DES_192_CBC_SHA "ADH-DES-CBC3-SHA" # if 0 # define SSL3_TXT_FZA_DMS_NULL_SHA "FZA-NULL-SHA" # define SSL3_TXT_FZA_DMS_FZA_SHA "FZA-FZA-CBC-SHA" # define SSL3_TXT_FZA_DMS_RC4_SHA "FZA-RC4-SHA" # endif # define SSL3_TXT_KRB5_DES_64_CBC_SHA "KRB5-DES-CBC-SHA" # define SSL3_TXT_KRB5_DES_192_CBC3_SHA "KRB5-DES-CBC3-SHA" # define SSL3_TXT_KRB5_RC4_128_SHA "KRB5-RC4-SHA" # define SSL3_TXT_KRB5_IDEA_128_CBC_SHA "KRB5-IDEA-CBC-SHA" # define SSL3_TXT_KRB5_DES_64_CBC_MD5 "KRB5-DES-CBC-MD5" # define SSL3_TXT_KRB5_DES_192_CBC3_MD5 "KRB5-DES-CBC3-MD5" # define SSL3_TXT_KRB5_RC4_128_MD5 "KRB5-RC4-MD5" # define SSL3_TXT_KRB5_IDEA_128_CBC_MD5 "KRB5-IDEA-CBC-MD5" # define SSL3_TXT_KRB5_DES_40_CBC_SHA "EXP-KRB5-DES-CBC-SHA" # define SSL3_TXT_KRB5_RC2_40_CBC_SHA "EXP-KRB5-RC2-CBC-SHA" # define SSL3_TXT_KRB5_RC4_40_SHA "EXP-KRB5-RC4-SHA" # define SSL3_TXT_KRB5_DES_40_CBC_MD5 "EXP-KRB5-DES-CBC-MD5" # define SSL3_TXT_KRB5_RC2_40_CBC_MD5 "EXP-KRB5-RC2-CBC-MD5" # define SSL3_TXT_KRB5_RC4_40_MD5 "EXP-KRB5-RC4-MD5" # define SSL3_SSL_SESSION_ID_LENGTH 32 # define SSL3_MAX_SSL_SESSION_ID_LENGTH 32 # define SSL3_MASTER_SECRET_SIZE 48 # define SSL3_RANDOM_SIZE 32 # define SSL3_SESSION_ID_SIZE 32 # define SSL3_RT_HEADER_LENGTH 5 # define SSL3_HM_HEADER_LENGTH 4 # ifndef SSL3_ALIGN_PAYLOAD /* * Some will argue that this increases memory footprint, but it's not * actually true. Point is that malloc has to return at least 64-bit aligned * pointers, meaning that allocating 5 bytes wastes 3 bytes in either case. * Suggested pre-gaping simply moves these wasted bytes from the end of * allocated region to its front, but makes data payload aligned, which * improves performance:-) */ # define SSL3_ALIGN_PAYLOAD 8 # else # if (SSL3_ALIGN_PAYLOAD&(SSL3_ALIGN_PAYLOAD-1))!=0 # error "insane SSL3_ALIGN_PAYLOAD" # undef SSL3_ALIGN_PAYLOAD # endif # endif /* * This is the maximum MAC (digest) size used by the SSL library. Currently * maximum of 20 is used by SHA1, but we reserve for future extension for * 512-bit hashes. */ # define SSL3_RT_MAX_MD_SIZE 64 /* * Maximum block size used in all ciphersuites. Currently 16 for AES. */ # define SSL_RT_MAX_CIPHER_BLOCK_SIZE 16 # define SSL3_RT_MAX_EXTRA (16384) /* Maximum plaintext length: defined by SSL/TLS standards */ # define SSL3_RT_MAX_PLAIN_LENGTH 16384 /* Maximum compression overhead: defined by SSL/TLS standards */ # define SSL3_RT_MAX_COMPRESSED_OVERHEAD 1024 /* * The standards give a maximum encryption overhead of 1024 bytes. In * practice the value is lower than this. The overhead is the maximum number * of padding bytes (256) plus the mac size. */ # define SSL3_RT_MAX_ENCRYPTED_OVERHEAD (256 + SSL3_RT_MAX_MD_SIZE) /* * OpenSSL currently only uses a padding length of at most one block so the * send overhead is smaller. */ # define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \ (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE) /* If compression isn't used don't include the compression overhead */ # ifdef OPENSSL_NO_COMP # define SSL3_RT_MAX_COMPRESSED_LENGTH SSL3_RT_MAX_PLAIN_LENGTH # else # define SSL3_RT_MAX_COMPRESSED_LENGTH \ (SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD) # endif # define SSL3_RT_MAX_ENCRYPTED_LENGTH \ (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH) # define SSL3_RT_MAX_PACKET_SIZE \ (SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH) # define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54" # define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52" # define SSL3_VERSION 0x0300 # define SSL3_VERSION_MAJOR 0x03 # define SSL3_VERSION_MINOR 0x00 # define SSL3_RT_CHANGE_CIPHER_SPEC 20 # define SSL3_RT_ALERT 21 # define SSL3_RT_HANDSHAKE 22 # define SSL3_RT_APPLICATION_DATA 23 # define TLS1_RT_HEARTBEAT 24 /* Pseudo content types to indicate additional parameters */ # define TLS1_RT_CRYPTO 0x1000 # define TLS1_RT_CRYPTO_PREMASTER (TLS1_RT_CRYPTO | 0x1) # define TLS1_RT_CRYPTO_CLIENT_RANDOM (TLS1_RT_CRYPTO | 0x2) # define TLS1_RT_CRYPTO_SERVER_RANDOM (TLS1_RT_CRYPTO | 0x3) # define TLS1_RT_CRYPTO_MASTER (TLS1_RT_CRYPTO | 0x4) # define TLS1_RT_CRYPTO_READ 0x0000 # define TLS1_RT_CRYPTO_WRITE 0x0100 # define TLS1_RT_CRYPTO_MAC (TLS1_RT_CRYPTO | 0x5) # define TLS1_RT_CRYPTO_KEY (TLS1_RT_CRYPTO | 0x6) # define TLS1_RT_CRYPTO_IV (TLS1_RT_CRYPTO | 0x7) # define TLS1_RT_CRYPTO_FIXED_IV (TLS1_RT_CRYPTO | 0x8) /* Pseudo content type for SSL/TLS header info */ # define SSL3_RT_HEADER 0x100 # define SSL3_AL_WARNING 1 # define SSL3_AL_FATAL 2 # define SSL3_AD_CLOSE_NOTIFY 0 # define SSL3_AD_UNEXPECTED_MESSAGE 10/* fatal */ # define SSL3_AD_BAD_RECORD_MAC 20/* fatal */ # define SSL3_AD_DECOMPRESSION_FAILURE 30/* fatal */ # define SSL3_AD_HANDSHAKE_FAILURE 40/* fatal */ # define SSL3_AD_NO_CERTIFICATE 41 # define SSL3_AD_BAD_CERTIFICATE 42 # define SSL3_AD_UNSUPPORTED_CERTIFICATE 43 # define SSL3_AD_CERTIFICATE_REVOKED 44 # define SSL3_AD_CERTIFICATE_EXPIRED 45 # define SSL3_AD_CERTIFICATE_UNKNOWN 46 # define SSL3_AD_ILLEGAL_PARAMETER 47/* fatal */ # define TLS1_HB_REQUEST 1 # define TLS1_HB_RESPONSE 2 # ifndef OPENSSL_NO_SSL_INTERN typedef struct ssl3_record_st { /* type of record */ /* * r */ int type; /* How many bytes available */ /* * rw */ unsigned int length; /* read/write offset into 'buf' */ /* * r */ unsigned int off; /* pointer to the record data */ /* * rw */ unsigned char *data; /* where the decode bytes are */ /* * rw */ unsigned char *input; /* only used with decompression - malloc()ed */ /* * r */ unsigned char *comp; /* epoch number, needed by DTLS1 */ /* * r */ unsigned long epoch; /* sequence number, needed by DTLS1 */ /* * r */ unsigned char seq_num[8]; } SSL3_RECORD; typedef struct ssl3_buffer_st { /* at least SSL3_RT_MAX_PACKET_SIZE bytes, see ssl3_setup_buffers() */ unsigned char *buf; /* buffer size */ size_t len; /* where to 'copy from' */ int offset; /* how many bytes left */ int left; } SSL3_BUFFER; # endif # define SSL3_CT_RSA_SIGN 1 # define SSL3_CT_DSS_SIGN 2 # define SSL3_CT_RSA_FIXED_DH 3 # define SSL3_CT_DSS_FIXED_DH 4 # define SSL3_CT_RSA_EPHEMERAL_DH 5 # define SSL3_CT_DSS_EPHEMERAL_DH 6 # define SSL3_CT_FORTEZZA_DMS 20 /* * SSL3_CT_NUMBER is used to size arrays and it must be large enough to * contain all of the cert types defined either for SSLv3 and TLSv1. */ # define SSL3_CT_NUMBER 9 # define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001 # define SSL3_FLAGS_DELAY_CLIENT_FINISHED 0x0002 # define SSL3_FLAGS_POP_BUFFER 0x0004 # define TLS1_FLAGS_TLS_PADDING_BUG 0x0008 # define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010 # define TLS1_FLAGS_KEEP_HANDSHAKE 0x0020 /* * Set when the handshake is ready to process peer's ChangeCipherSpec message. * Cleared after the message has been processed. */ # define SSL3_FLAGS_CCS_OK 0x0080 /* SSL3_FLAGS_SGC_RESTART_DONE is no longer used */ # define SSL3_FLAGS_SGC_RESTART_DONE 0x0040 # ifndef OPENSSL_NO_SSL_INTERN typedef struct ssl3_state_st { long flags; int delay_buf_pop_ret; unsigned char read_sequence[8]; int read_mac_secret_size; unsigned char read_mac_secret[EVP_MAX_MD_SIZE]; unsigned char write_sequence[8]; int write_mac_secret_size; unsigned char write_mac_secret[EVP_MAX_MD_SIZE]; unsigned char server_random[SSL3_RANDOM_SIZE]; unsigned char client_random[SSL3_RANDOM_SIZE]; /* flags for countermeasure against known-IV weakness */ int need_empty_fragments; int empty_fragment_done; /* The value of 'extra' when the buffers were initialized */ int init_extra; SSL3_BUFFER rbuf; /* read IO goes into here */ SSL3_BUFFER wbuf; /* write IO goes into here */ SSL3_RECORD rrec; /* each decoded record goes in here */ SSL3_RECORD wrec; /* goes out from here */ /* * storage for Alert/Handshake protocol data received but not yet * processed by ssl3_read_bytes: */ unsigned char alert_fragment[2]; unsigned int alert_fragment_len; unsigned char handshake_fragment[4]; unsigned int handshake_fragment_len; /* partial write - check the numbers match */ unsigned int wnum; /* number of bytes sent so far */ int wpend_tot; /* number bytes written */ int wpend_type; int wpend_ret; /* number of bytes submitted */ const unsigned char *wpend_buf; /* used during startup, digest all incoming/outgoing packets */ BIO *handshake_buffer; /* * When set of handshake digests is determined, buffer is hashed and * freed and MD_CTX-es for all required digests are stored in this array */ EVP_MD_CTX **handshake_dgst; /* * Set whenever an expected ChangeCipherSpec message is processed. * Unset when the peer's Finished message is received. * Unexpected ChangeCipherSpec messages trigger a fatal alert. */ int change_cipher_spec; int warn_alert; int fatal_alert; /* * we allow one fatal and one warning alert to be outstanding, send close * alert via the warning alert */ int alert_dispatch; unsigned char send_alert[2]; /* * This flag is set when we should renegotiate ASAP, basically when there * is no more data in the read or write buffers */ int renegotiate; int total_renegotiations; int num_renegotiations; int in_read_app_data; /* * Opaque PRF input as used for the current handshake. These fields are * used only if TLSEXT_TYPE_opaque_prf_input is defined (otherwise, they * are merely present to improve binary compatibility) */ void *client_opaque_prf_input; size_t client_opaque_prf_input_len; void *server_opaque_prf_input; size_t server_opaque_prf_input_len; struct { /* actually only needs to be 16+20 */ unsigned char cert_verify_md[EVP_MAX_MD_SIZE * 2]; /* actually only need to be 16+20 for SSLv3 and 12 for TLS */ unsigned char finish_md[EVP_MAX_MD_SIZE * 2]; int finish_md_len; unsigned char peer_finish_md[EVP_MAX_MD_SIZE * 2]; int peer_finish_md_len; unsigned long message_size; int message_type; /* used to hold the new cipher we are going to use */ const SSL_CIPHER *new_cipher; # ifndef OPENSSL_NO_DH DH *dh; # endif # ifndef OPENSSL_NO_ECDH EC_KEY *ecdh; /* holds short lived ECDH key */ # endif /* used when SSL_ST_FLUSH_DATA is entered */ int next_state; int reuse_message; /* used for certificate requests */ int cert_req; int ctype_num; char ctype[SSL3_CT_NUMBER]; STACK_OF(X509_NAME) *ca_names; int use_rsa_tmp; int key_block_length; unsigned char *key_block; const EVP_CIPHER *new_sym_enc; const EVP_MD *new_hash; int new_mac_pkey_type; int new_mac_secret_size; # ifndef OPENSSL_NO_COMP const SSL_COMP *new_compression; # else char *new_compression; # endif int cert_request; } tmp; /* Connection binding to prevent renegotiation attacks */ unsigned char previous_client_finished[EVP_MAX_MD_SIZE]; unsigned char previous_client_finished_len; unsigned char previous_server_finished[EVP_MAX_MD_SIZE]; unsigned char previous_server_finished_len; int send_connection_binding; /* TODOEKR */ # ifndef OPENSSL_NO_NEXTPROTONEG /* * Set if we saw the Next Protocol Negotiation extension from our peer. */ int next_proto_neg_seen; # endif # ifndef OPENSSL_NO_TLSEXT # ifndef OPENSSL_NO_EC /* * This is set to true if we believe that this is a version of Safari * running on OS X 10.6 or newer. We wish to know this because Safari on * 10.8 .. 10.8.3 has broken ECDHE-ECDSA support. */ char is_probably_safari; # endif /* !OPENSSL_NO_EC */ /* * ALPN information (we are in the process of transitioning from NPN to * ALPN.) */ /* * In a server these point to the selected ALPN protocol after the * ClientHello has been processed. In a client these contain the protocol * that the server selected once the ServerHello has been processed. */ unsigned char *alpn_selected; unsigned alpn_selected_len; # endif /* OPENSSL_NO_TLSEXT */ } SSL3_STATE; # endif /* SSLv3 */ /* * client */ /* extra state */ # define SSL3_ST_CW_FLUSH (0x100|SSL_ST_CONNECT) # ifndef OPENSSL_NO_SCTP # define DTLS1_SCTP_ST_CW_WRITE_SOCK (0x310|SSL_ST_CONNECT) # define DTLS1_SCTP_ST_CR_READ_SOCK (0x320|SSL_ST_CONNECT) # endif /* write to server */ # define SSL3_ST_CW_CLNT_HELLO_A (0x110|SSL_ST_CONNECT) # define SSL3_ST_CW_CLNT_HELLO_B (0x111|SSL_ST_CONNECT) /* read from server */ # define SSL3_ST_CR_SRVR_HELLO_A (0x120|SSL_ST_CONNECT) # define SSL3_ST_CR_SRVR_HELLO_B (0x121|SSL_ST_CONNECT) # define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A (0x126|SSL_ST_CONNECT) # define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B (0x127|SSL_ST_CONNECT) # define SSL3_ST_CR_CERT_A (0x130|SSL_ST_CONNECT) # define SSL3_ST_CR_CERT_B (0x131|SSL_ST_CONNECT) # define SSL3_ST_CR_KEY_EXCH_A (0x140|SSL_ST_CONNECT) # define SSL3_ST_CR_KEY_EXCH_B (0x141|SSL_ST_CONNECT) # define SSL3_ST_CR_CERT_REQ_A (0x150|SSL_ST_CONNECT) # define SSL3_ST_CR_CERT_REQ_B (0x151|SSL_ST_CONNECT) # define SSL3_ST_CR_SRVR_DONE_A (0x160|SSL_ST_CONNECT) # define SSL3_ST_CR_SRVR_DONE_B (0x161|SSL_ST_CONNECT) /* write to server */ # define SSL3_ST_CW_CERT_A (0x170|SSL_ST_CONNECT) # define SSL3_ST_CW_CERT_B (0x171|SSL_ST_CONNECT) # define SSL3_ST_CW_CERT_C (0x172|SSL_ST_CONNECT) # define SSL3_ST_CW_CERT_D (0x173|SSL_ST_CONNECT) # define SSL3_ST_CW_KEY_EXCH_A (0x180|SSL_ST_CONNECT) # define SSL3_ST_CW_KEY_EXCH_B (0x181|SSL_ST_CONNECT) # define SSL3_ST_CW_CERT_VRFY_A (0x190|SSL_ST_CONNECT) # define SSL3_ST_CW_CERT_VRFY_B (0x191|SSL_ST_CONNECT) # define SSL3_ST_CW_CHANGE_A (0x1A0|SSL_ST_CONNECT) # define SSL3_ST_CW_CHANGE_B (0x1A1|SSL_ST_CONNECT) # ifndef OPENSSL_NO_NEXTPROTONEG # define SSL3_ST_CW_NEXT_PROTO_A (0x200|SSL_ST_CONNECT) # define SSL3_ST_CW_NEXT_PROTO_B (0x201|SSL_ST_CONNECT) # endif # define SSL3_ST_CW_FINISHED_A (0x1B0|SSL_ST_CONNECT) # define SSL3_ST_CW_FINISHED_B (0x1B1|SSL_ST_CONNECT) /* read from server */ # define SSL3_ST_CR_CHANGE_A (0x1C0|SSL_ST_CONNECT) # define SSL3_ST_CR_CHANGE_B (0x1C1|SSL_ST_CONNECT) # define SSL3_ST_CR_FINISHED_A (0x1D0|SSL_ST_CONNECT) # define SSL3_ST_CR_FINISHED_B (0x1D1|SSL_ST_CONNECT) # define SSL3_ST_CR_SESSION_TICKET_A (0x1E0|SSL_ST_CONNECT) # define SSL3_ST_CR_SESSION_TICKET_B (0x1E1|SSL_ST_CONNECT) # define SSL3_ST_CR_CERT_STATUS_A (0x1F0|SSL_ST_CONNECT) # define SSL3_ST_CR_CERT_STATUS_B (0x1F1|SSL_ST_CONNECT) /* server */ /* extra state */ # define SSL3_ST_SW_FLUSH (0x100|SSL_ST_ACCEPT) # ifndef OPENSSL_NO_SCTP # define DTLS1_SCTP_ST_SW_WRITE_SOCK (0x310|SSL_ST_ACCEPT) # define DTLS1_SCTP_ST_SR_READ_SOCK (0x320|SSL_ST_ACCEPT) # endif /* read from client */ /* Do not change the number values, they do matter */ # define SSL3_ST_SR_CLNT_HELLO_A (0x110|SSL_ST_ACCEPT) # define SSL3_ST_SR_CLNT_HELLO_B (0x111|SSL_ST_ACCEPT) # define SSL3_ST_SR_CLNT_HELLO_C (0x112|SSL_ST_ACCEPT) # define SSL3_ST_SR_CLNT_HELLO_D (0x115|SSL_ST_ACCEPT) /* write to client */ # define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A (0x113|SSL_ST_ACCEPT) # define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B (0x114|SSL_ST_ACCEPT) # define SSL3_ST_SW_HELLO_REQ_A (0x120|SSL_ST_ACCEPT) # define SSL3_ST_SW_HELLO_REQ_B (0x121|SSL_ST_ACCEPT) # define SSL3_ST_SW_HELLO_REQ_C (0x122|SSL_ST_ACCEPT) # define SSL3_ST_SW_SRVR_HELLO_A (0x130|SSL_ST_ACCEPT) # define SSL3_ST_SW_SRVR_HELLO_B (0x131|SSL_ST_ACCEPT) # define SSL3_ST_SW_CERT_A (0x140|SSL_ST_ACCEPT) # define SSL3_ST_SW_CERT_B (0x141|SSL_ST_ACCEPT) # define SSL3_ST_SW_KEY_EXCH_A (0x150|SSL_ST_ACCEPT) # define SSL3_ST_SW_KEY_EXCH_B (0x151|SSL_ST_ACCEPT) # define SSL3_ST_SW_CERT_REQ_A (0x160|SSL_ST_ACCEPT) # define SSL3_ST_SW_CERT_REQ_B (0x161|SSL_ST_ACCEPT) # define SSL3_ST_SW_SRVR_DONE_A (0x170|SSL_ST_ACCEPT) # define SSL3_ST_SW_SRVR_DONE_B (0x171|SSL_ST_ACCEPT) /* read from client */ # define SSL3_ST_SR_CERT_A (0x180|SSL_ST_ACCEPT) # define SSL3_ST_SR_CERT_B (0x181|SSL_ST_ACCEPT) # define SSL3_ST_SR_KEY_EXCH_A (0x190|SSL_ST_ACCEPT) # define SSL3_ST_SR_KEY_EXCH_B (0x191|SSL_ST_ACCEPT) # define SSL3_ST_SR_CERT_VRFY_A (0x1A0|SSL_ST_ACCEPT) # define SSL3_ST_SR_CERT_VRFY_B (0x1A1|SSL_ST_ACCEPT) # define SSL3_ST_SR_CHANGE_A (0x1B0|SSL_ST_ACCEPT) # define SSL3_ST_SR_CHANGE_B (0x1B1|SSL_ST_ACCEPT) # ifndef OPENSSL_NO_NEXTPROTONEG # define SSL3_ST_SR_NEXT_PROTO_A (0x210|SSL_ST_ACCEPT) # define SSL3_ST_SR_NEXT_PROTO_B (0x211|SSL_ST_ACCEPT) # endif # define SSL3_ST_SR_FINISHED_A (0x1C0|SSL_ST_ACCEPT) # define SSL3_ST_SR_FINISHED_B (0x1C1|SSL_ST_ACCEPT) /* write to client */ # define SSL3_ST_SW_CHANGE_A (0x1D0|SSL_ST_ACCEPT) # define SSL3_ST_SW_CHANGE_B (0x1D1|SSL_ST_ACCEPT) # define SSL3_ST_SW_FINISHED_A (0x1E0|SSL_ST_ACCEPT) # define SSL3_ST_SW_FINISHED_B (0x1E1|SSL_ST_ACCEPT) # define SSL3_ST_SW_SESSION_TICKET_A (0x1F0|SSL_ST_ACCEPT) # define SSL3_ST_SW_SESSION_TICKET_B (0x1F1|SSL_ST_ACCEPT) # define SSL3_ST_SW_CERT_STATUS_A (0x200|SSL_ST_ACCEPT) # define SSL3_ST_SW_CERT_STATUS_B (0x201|SSL_ST_ACCEPT) # define SSL3_MT_HELLO_REQUEST 0 # define SSL3_MT_CLIENT_HELLO 1 # define SSL3_MT_SERVER_HELLO 2 # define SSL3_MT_NEWSESSION_TICKET 4 # define SSL3_MT_CERTIFICATE 11 # define SSL3_MT_SERVER_KEY_EXCHANGE 12 # define SSL3_MT_CERTIFICATE_REQUEST 13 # define SSL3_MT_SERVER_DONE 14 # define SSL3_MT_CERTIFICATE_VERIFY 15 # define SSL3_MT_CLIENT_KEY_EXCHANGE 16 # define SSL3_MT_FINISHED 20 # define SSL3_MT_CERTIFICATE_STATUS 22 # ifndef OPENSSL_NO_NEXTPROTONEG # define SSL3_MT_NEXT_PROTO 67 # endif # define DTLS1_MT_HELLO_VERIFY_REQUEST 3 # define SSL3_MT_CCS 1 /* These are used when changing over to a new cipher */ # define SSL3_CC_READ 0x01 # define SSL3_CC_WRITE 0x02 # define SSL3_CC_CLIENT 0x10 # define SSL3_CC_SERVER 0x20 # define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE) # define SSL3_CHANGE_CIPHER_SERVER_READ (SSL3_CC_SERVER|SSL3_CC_READ) # define SSL3_CHANGE_CIPHER_CLIENT_READ (SSL3_CC_CLIENT|SSL3_CC_READ) # define SSL3_CHANGE_CIPHER_SERVER_WRITE (SSL3_CC_SERVER|SSL3_CC_WRITE) #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/stack.h ================================================ /* crypto/stack/stack.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_STACK_H # define HEADER_STACK_H #ifdef __cplusplus extern "C" { #endif typedef struct stack_st { int num; char **data; int sorted; int num_alloc; int (*comp) (const void *, const void *); } _STACK; /* Use STACK_OF(...) instead */ # define M_sk_num(sk) ((sk) ? (sk)->num:-1) # define M_sk_value(sk,n) ((sk) ? (sk)->data[n] : NULL) int sk_num(const _STACK *); void *sk_value(const _STACK *, int); void *sk_set(_STACK *, int, void *); _STACK *sk_new(int (*cmp) (const void *, const void *)); _STACK *sk_new_null(void); void sk_free(_STACK *); void sk_pop_free(_STACK *st, void (*func) (void *)); _STACK *sk_deep_copy(_STACK *, void *(*)(void *), void (*)(void *)); int sk_insert(_STACK *sk, void *data, int where); void *sk_delete(_STACK *st, int loc); void *sk_delete_ptr(_STACK *st, void *p); int sk_find(_STACK *st, void *data); int sk_find_ex(_STACK *st, void *data); int sk_push(_STACK *st, void *data); int sk_unshift(_STACK *st, void *data); void *sk_shift(_STACK *st); void *sk_pop(_STACK *st); void sk_zero(_STACK *st); int (*sk_set_cmp_func(_STACK *sk, int (*c) (const void *, const void *))) (const void *, const void *); _STACK *sk_dup(_STACK *st); void sk_sort(_STACK *st); int sk_is_sorted(const _STACK *st); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/symhacks.h ================================================ /* ==================================================================== * Copyright (c) 1999 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_SYMHACKS_H # define HEADER_SYMHACKS_H # include /* * Hacks to solve the problem with linkers incapable of handling very long * symbol names. In the case of VMS, the limit is 31 characters on VMS for * VAX. */ /* * Note that this affects util/libeay.num and util/ssleay.num... you may * change those manually, but that's not recommended, as those files are * controlled centrally and updated on Unix, and the central definition may * disagree with yours, which in turn may come with shareable library * incompatibilities. */ # ifdef OPENSSL_SYS_VMS /* Hack a long name in crypto/ex_data.c */ # undef CRYPTO_get_ex_data_implementation # define CRYPTO_get_ex_data_implementation CRYPTO_get_ex_data_impl # undef CRYPTO_set_ex_data_implementation # define CRYPTO_set_ex_data_implementation CRYPTO_set_ex_data_impl /* Hack a long name in crypto/asn1/a_mbstr.c */ # undef ASN1_STRING_set_default_mask_asc # define ASN1_STRING_set_default_mask_asc ASN1_STRING_set_def_mask_asc # if 0 /* No longer needed, since safestack macro * magic does the job */ /* Hack the names created with DECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO) */ # undef i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO # define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO i2d_ASN1_SET_OF_PKCS7_SIGINF # undef d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO # define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO d2i_ASN1_SET_OF_PKCS7_SIGINF # endif # if 0 /* No longer needed, since safestack macro * magic does the job */ /* Hack the names created with DECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO) */ # undef i2d_ASN1_SET_OF_PKCS7_RECIP_INFO # define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO i2d_ASN1_SET_OF_PKCS7_RECINF # undef d2i_ASN1_SET_OF_PKCS7_RECIP_INFO # define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO d2i_ASN1_SET_OF_PKCS7_RECINF # endif # if 0 /* No longer needed, since safestack macro * magic does the job */ /* Hack the names created with DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION) */ # undef i2d_ASN1_SET_OF_ACCESS_DESCRIPTION # define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION i2d_ASN1_SET_OF_ACC_DESC # undef d2i_ASN1_SET_OF_ACCESS_DESCRIPTION # define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION d2i_ASN1_SET_OF_ACC_DESC # endif /* Hack the names created with DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE) */ # undef PEM_read_NETSCAPE_CERT_SEQUENCE # define PEM_read_NETSCAPE_CERT_SEQUENCE PEM_read_NS_CERT_SEQ # undef PEM_write_NETSCAPE_CERT_SEQUENCE # define PEM_write_NETSCAPE_CERT_SEQUENCE PEM_write_NS_CERT_SEQ # undef PEM_read_bio_NETSCAPE_CERT_SEQUENCE # define PEM_read_bio_NETSCAPE_CERT_SEQUENCE PEM_read_bio_NS_CERT_SEQ # undef PEM_write_bio_NETSCAPE_CERT_SEQUENCE # define PEM_write_bio_NETSCAPE_CERT_SEQUENCE PEM_write_bio_NS_CERT_SEQ # undef PEM_write_cb_bio_NETSCAPE_CERT_SEQUENCE # define PEM_write_cb_bio_NETSCAPE_CERT_SEQUENCE PEM_write_cb_bio_NS_CERT_SEQ /* Hack the names created with DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO) */ # undef PEM_read_PKCS8_PRIV_KEY_INFO # define PEM_read_PKCS8_PRIV_KEY_INFO PEM_read_P8_PRIV_KEY_INFO # undef PEM_write_PKCS8_PRIV_KEY_INFO # define PEM_write_PKCS8_PRIV_KEY_INFO PEM_write_P8_PRIV_KEY_INFO # undef PEM_read_bio_PKCS8_PRIV_KEY_INFO # define PEM_read_bio_PKCS8_PRIV_KEY_INFO PEM_read_bio_P8_PRIV_KEY_INFO # undef PEM_write_bio_PKCS8_PRIV_KEY_INFO # define PEM_write_bio_PKCS8_PRIV_KEY_INFO PEM_write_bio_P8_PRIV_KEY_INFO # undef PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO # define PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO PEM_wrt_cb_bio_P8_PRIV_KEY_INFO /* Hack other PEM names */ # undef PEM_write_bio_PKCS8PrivateKey_nid # define PEM_write_bio_PKCS8PrivateKey_nid PEM_write_bio_PKCS8PrivKey_nid /* Hack some long X509 names */ # undef X509_REVOKED_get_ext_by_critical # define X509_REVOKED_get_ext_by_critical X509_REVOKED_get_ext_by_critic # undef X509_policy_tree_get0_user_policies # define X509_policy_tree_get0_user_policies X509_pcy_tree_get0_usr_policies # undef X509_policy_node_get0_qualifiers # define X509_policy_node_get0_qualifiers X509_pcy_node_get0_qualifiers # undef X509_STORE_CTX_get_explicit_policy # define X509_STORE_CTX_get_explicit_policy X509_STORE_CTX_get_expl_policy # undef X509_STORE_CTX_get0_current_issuer # define X509_STORE_CTX_get0_current_issuer X509_STORE_CTX_get0_cur_issuer /* Hack some long CRYPTO names */ # undef CRYPTO_set_dynlock_destroy_callback # define CRYPTO_set_dynlock_destroy_callback CRYPTO_set_dynlock_destroy_cb # undef CRYPTO_set_dynlock_create_callback # define CRYPTO_set_dynlock_create_callback CRYPTO_set_dynlock_create_cb # undef CRYPTO_set_dynlock_lock_callback # define CRYPTO_set_dynlock_lock_callback CRYPTO_set_dynlock_lock_cb # undef CRYPTO_get_dynlock_lock_callback # define CRYPTO_get_dynlock_lock_callback CRYPTO_get_dynlock_lock_cb # undef CRYPTO_get_dynlock_destroy_callback # define CRYPTO_get_dynlock_destroy_callback CRYPTO_get_dynlock_destroy_cb # undef CRYPTO_get_dynlock_create_callback # define CRYPTO_get_dynlock_create_callback CRYPTO_get_dynlock_create_cb # undef CRYPTO_set_locked_mem_ex_functions # define CRYPTO_set_locked_mem_ex_functions CRYPTO_set_locked_mem_ex_funcs # undef CRYPTO_get_locked_mem_ex_functions # define CRYPTO_get_locked_mem_ex_functions CRYPTO_get_locked_mem_ex_funcs /* Hack some long SSL/TLS names */ # undef SSL_CTX_set_default_verify_paths # define SSL_CTX_set_default_verify_paths SSL_CTX_set_def_verify_paths # undef SSL_get_ex_data_X509_STORE_CTX_idx # define SSL_get_ex_data_X509_STORE_CTX_idx SSL_get_ex_d_X509_STORE_CTX_idx # undef SSL_add_file_cert_subjects_to_stack # define SSL_add_file_cert_subjects_to_stack SSL_add_file_cert_subjs_to_stk # undef SSL_add_dir_cert_subjects_to_stack # define SSL_add_dir_cert_subjects_to_stack SSL_add_dir_cert_subjs_to_stk # undef SSL_CTX_use_certificate_chain_file # define SSL_CTX_use_certificate_chain_file SSL_CTX_use_cert_chain_file # undef SSL_CTX_set_cert_verify_callback # define SSL_CTX_set_cert_verify_callback SSL_CTX_set_cert_verify_cb # undef SSL_CTX_set_default_passwd_cb_userdata # define SSL_CTX_set_default_passwd_cb_userdata SSL_CTX_set_def_passwd_cb_ud # undef SSL_COMP_get_compression_methods # define SSL_COMP_get_compression_methods SSL_COMP_get_compress_methods # undef SSL_COMP_set0_compression_methods # define SSL_COMP_set0_compression_methods SSL_COMP_set0_compress_methods # undef SSL_COMP_free_compression_methods # define SSL_COMP_free_compression_methods SSL_COMP_free_compress_methods # undef ssl_add_clienthello_renegotiate_ext # define ssl_add_clienthello_renegotiate_ext ssl_add_clienthello_reneg_ext # undef ssl_add_serverhello_renegotiate_ext # define ssl_add_serverhello_renegotiate_ext ssl_add_serverhello_reneg_ext # undef ssl_parse_clienthello_renegotiate_ext # define ssl_parse_clienthello_renegotiate_ext ssl_parse_clienthello_reneg_ext # undef ssl_parse_serverhello_renegotiate_ext # define ssl_parse_serverhello_renegotiate_ext ssl_parse_serverhello_reneg_ext # undef SSL_srp_server_param_with_username # define SSL_srp_server_param_with_username SSL_srp_server_param_with_un # undef SSL_CTX_set_srp_client_pwd_callback # define SSL_CTX_set_srp_client_pwd_callback SSL_CTX_set_srp_client_pwd_cb # undef SSL_CTX_set_srp_verify_param_callback # define SSL_CTX_set_srp_verify_param_callback SSL_CTX_set_srp_vfy_param_cb # undef SSL_CTX_set_srp_username_callback # define SSL_CTX_set_srp_username_callback SSL_CTX_set_srp_un_cb # undef ssl_add_clienthello_use_srtp_ext # define ssl_add_clienthello_use_srtp_ext ssl_add_clihello_use_srtp_ext # undef ssl_add_serverhello_use_srtp_ext # define ssl_add_serverhello_use_srtp_ext ssl_add_serhello_use_srtp_ext # undef ssl_parse_clienthello_use_srtp_ext # define ssl_parse_clienthello_use_srtp_ext ssl_parse_clihello_use_srtp_ext # undef ssl_parse_serverhello_use_srtp_ext # define ssl_parse_serverhello_use_srtp_ext ssl_parse_serhello_use_srtp_ext # undef SSL_CTX_set_next_protos_advertised_cb # define SSL_CTX_set_next_protos_advertised_cb SSL_CTX_set_next_protos_adv_cb # undef SSL_CTX_set_next_proto_select_cb # define SSL_CTX_set_next_proto_select_cb SSL_CTX_set_next_proto_sel_cb # undef tls1_send_server_supplemental_data # define tls1_send_server_supplemental_data tls1_send_server_suppl_data # undef tls1_send_client_supplemental_data # define tls1_send_client_supplemental_data tls1_send_client_suppl_data # undef tls1_get_server_supplemental_data # define tls1_get_server_supplemental_data tls1_get_server_suppl_data # undef tls1_get_client_supplemental_data # define tls1_get_client_supplemental_data tls1_get_client_suppl_data # undef ssl3_cbc_record_digest_supported # define ssl3_cbc_record_digest_supported ssl3_cbc_record_digest_support # undef ssl_check_clienthello_tlsext_late # define ssl_check_clienthello_tlsext_late ssl_check_clihello_tlsext_late # undef ssl_check_clienthello_tlsext_early # define ssl_check_clienthello_tlsext_early ssl_check_clihello_tlsext_early /* Hack some RSA long names */ # undef RSA_padding_check_PKCS1_OAEP_mgf1 # define RSA_padding_check_PKCS1_OAEP_mgf1 RSA_pad_check_PKCS1_OAEP_mgf1 /* Hack some ENGINE long names */ # undef ENGINE_get_default_BN_mod_exp_crt # define ENGINE_get_default_BN_mod_exp_crt ENGINE_get_def_BN_mod_exp_crt # undef ENGINE_set_default_BN_mod_exp_crt # define ENGINE_set_default_BN_mod_exp_crt ENGINE_set_def_BN_mod_exp_crt # undef ENGINE_set_load_privkey_function # define ENGINE_set_load_privkey_function ENGINE_set_load_privkey_fn # undef ENGINE_get_load_privkey_function # define ENGINE_get_load_privkey_function ENGINE_get_load_privkey_fn # undef ENGINE_unregister_pkey_asn1_meths # define ENGINE_unregister_pkey_asn1_meths ENGINE_unreg_pkey_asn1_meths # undef ENGINE_register_all_pkey_asn1_meths # define ENGINE_register_all_pkey_asn1_meths ENGINE_reg_all_pkey_asn1_meths # undef ENGINE_set_default_pkey_asn1_meths # define ENGINE_set_default_pkey_asn1_meths ENGINE_set_def_pkey_asn1_meths # undef ENGINE_get_pkey_asn1_meth_engine # define ENGINE_get_pkey_asn1_meth_engine ENGINE_get_pkey_asn1_meth_eng # undef ENGINE_set_load_ssl_client_cert_function # define ENGINE_set_load_ssl_client_cert_function \ ENGINE_set_ld_ssl_clnt_cert_fn # undef ENGINE_get_ssl_client_cert_function # define ENGINE_get_ssl_client_cert_function ENGINE_get_ssl_client_cert_fn /* Hack some long OCSP names */ # undef OCSP_REQUEST_get_ext_by_critical # define OCSP_REQUEST_get_ext_by_critical OCSP_REQUEST_get_ext_by_crit # undef OCSP_BASICRESP_get_ext_by_critical # define OCSP_BASICRESP_get_ext_by_critical OCSP_BASICRESP_get_ext_by_crit # undef OCSP_SINGLERESP_get_ext_by_critical # define OCSP_SINGLERESP_get_ext_by_critical OCSP_SINGLERESP_get_ext_by_crit /* Hack some long DES names */ # undef _ossl_old_des_ede3_cfb64_encrypt # define _ossl_old_des_ede3_cfb64_encrypt _ossl_odes_ede3_cfb64_encrypt # undef _ossl_old_des_ede3_ofb64_encrypt # define _ossl_old_des_ede3_ofb64_encrypt _ossl_odes_ede3_ofb64_encrypt /* Hack some long EVP names */ # undef OPENSSL_add_all_algorithms_noconf # define OPENSSL_add_all_algorithms_noconf OPENSSL_add_all_algo_noconf # undef OPENSSL_add_all_algorithms_conf # define OPENSSL_add_all_algorithms_conf OPENSSL_add_all_algo_conf # undef EVP_PKEY_meth_set_verify_recover # define EVP_PKEY_meth_set_verify_recover EVP_PKEY_meth_set_vrfy_recover /* Hack some long EC names */ # undef EC_GROUP_set_point_conversion_form # define EC_GROUP_set_point_conversion_form EC_GROUP_set_point_conv_form # undef EC_GROUP_get_point_conversion_form # define EC_GROUP_get_point_conversion_form EC_GROUP_get_point_conv_form # undef EC_GROUP_clear_free_all_extra_data # define EC_GROUP_clear_free_all_extra_data EC_GROUP_clr_free_all_xtra_data # undef EC_KEY_set_public_key_affine_coordinates # define EC_KEY_set_public_key_affine_coordinates \ EC_KEY_set_pub_key_aff_coords # undef EC_POINT_set_Jprojective_coordinates_GFp # define EC_POINT_set_Jprojective_coordinates_GFp \ EC_POINT_set_Jproj_coords_GFp # undef EC_POINT_get_Jprojective_coordinates_GFp # define EC_POINT_get_Jprojective_coordinates_GFp \ EC_POINT_get_Jproj_coords_GFp # undef EC_POINT_set_affine_coordinates_GFp # define EC_POINT_set_affine_coordinates_GFp EC_POINT_set_affine_coords_GFp # undef EC_POINT_get_affine_coordinates_GFp # define EC_POINT_get_affine_coordinates_GFp EC_POINT_get_affine_coords_GFp # undef EC_POINT_set_compressed_coordinates_GFp # define EC_POINT_set_compressed_coordinates_GFp EC_POINT_set_compr_coords_GFp # undef EC_POINT_set_affine_coordinates_GF2m # define EC_POINT_set_affine_coordinates_GF2m EC_POINT_set_affine_coords_GF2m # undef EC_POINT_get_affine_coordinates_GF2m # define EC_POINT_get_affine_coordinates_GF2m EC_POINT_get_affine_coords_GF2m # undef EC_POINT_set_compressed_coordinates_GF2m # define EC_POINT_set_compressed_coordinates_GF2m \ EC_POINT_set_compr_coords_GF2m # undef ec_GF2m_simple_group_clear_finish # define ec_GF2m_simple_group_clear_finish ec_GF2m_simple_grp_clr_finish # undef ec_GF2m_simple_group_check_discriminant # define ec_GF2m_simple_group_check_discriminant ec_GF2m_simple_grp_chk_discrim # undef ec_GF2m_simple_point_clear_finish # define ec_GF2m_simple_point_clear_finish ec_GF2m_simple_pt_clr_finish # undef ec_GF2m_simple_point_set_to_infinity # define ec_GF2m_simple_point_set_to_infinity ec_GF2m_simple_pt_set_to_inf # undef ec_GF2m_simple_points_make_affine # define ec_GF2m_simple_points_make_affine ec_GF2m_simple_pts_make_affine # undef ec_GF2m_simple_point_set_affine_coordinates # define ec_GF2m_simple_point_set_affine_coordinates \ ec_GF2m_smp_pt_set_af_coords # undef ec_GF2m_simple_point_get_affine_coordinates # define ec_GF2m_simple_point_get_affine_coordinates \ ec_GF2m_smp_pt_get_af_coords # undef ec_GF2m_simple_set_compressed_coordinates # define ec_GF2m_simple_set_compressed_coordinates \ ec_GF2m_smp_set_compr_coords # undef ec_GFp_simple_group_set_curve_GFp # define ec_GFp_simple_group_set_curve_GFp ec_GFp_simple_grp_set_curve_GFp # undef ec_GFp_simple_group_get_curve_GFp # define ec_GFp_simple_group_get_curve_GFp ec_GFp_simple_grp_get_curve_GFp # undef ec_GFp_simple_group_clear_finish # define ec_GFp_simple_group_clear_finish ec_GFp_simple_grp_clear_finish # undef ec_GFp_simple_group_set_generator # define ec_GFp_simple_group_set_generator ec_GFp_simple_grp_set_generator # undef ec_GFp_simple_group_get0_generator # define ec_GFp_simple_group_get0_generator ec_GFp_simple_grp_gt0_generator # undef ec_GFp_simple_group_get_cofactor # define ec_GFp_simple_group_get_cofactor ec_GFp_simple_grp_get_cofactor # undef ec_GFp_simple_point_clear_finish # define ec_GFp_simple_point_clear_finish ec_GFp_simple_pt_clear_finish # undef ec_GFp_simple_point_set_to_infinity # define ec_GFp_simple_point_set_to_infinity ec_GFp_simple_pt_set_to_inf # undef ec_GFp_simple_points_make_affine # define ec_GFp_simple_points_make_affine ec_GFp_simple_pts_make_affine # undef ec_GFp_simple_set_Jprojective_coordinates_GFp # define ec_GFp_simple_set_Jprojective_coordinates_GFp \ ec_GFp_smp_set_Jproj_coords_GFp # undef ec_GFp_simple_get_Jprojective_coordinates_GFp # define ec_GFp_simple_get_Jprojective_coordinates_GFp \ ec_GFp_smp_get_Jproj_coords_GFp # undef ec_GFp_simple_point_set_affine_coordinates_GFp # define ec_GFp_simple_point_set_affine_coordinates_GFp \ ec_GFp_smp_pt_set_af_coords_GFp # undef ec_GFp_simple_point_get_affine_coordinates_GFp # define ec_GFp_simple_point_get_affine_coordinates_GFp \ ec_GFp_smp_pt_get_af_coords_GFp # undef ec_GFp_simple_set_compressed_coordinates_GFp # define ec_GFp_simple_set_compressed_coordinates_GFp \ ec_GFp_smp_set_compr_coords_GFp # undef ec_GFp_simple_point_set_affine_coordinates # define ec_GFp_simple_point_set_affine_coordinates \ ec_GFp_smp_pt_set_af_coords # undef ec_GFp_simple_point_get_affine_coordinates # define ec_GFp_simple_point_get_affine_coordinates \ ec_GFp_smp_pt_get_af_coords # undef ec_GFp_simple_set_compressed_coordinates # define ec_GFp_simple_set_compressed_coordinates \ ec_GFp_smp_set_compr_coords # undef ec_GFp_simple_group_check_discriminant # define ec_GFp_simple_group_check_discriminant ec_GFp_simple_grp_chk_discrim /* Hack som long STORE names */ # undef STORE_method_set_initialise_function # define STORE_method_set_initialise_function STORE_meth_set_initialise_fn # undef STORE_method_set_cleanup_function # define STORE_method_set_cleanup_function STORE_meth_set_cleanup_fn # undef STORE_method_set_generate_function # define STORE_method_set_generate_function STORE_meth_set_generate_fn # undef STORE_method_set_modify_function # define STORE_method_set_modify_function STORE_meth_set_modify_fn # undef STORE_method_set_revoke_function # define STORE_method_set_revoke_function STORE_meth_set_revoke_fn # undef STORE_method_set_delete_function # define STORE_method_set_delete_function STORE_meth_set_delete_fn # undef STORE_method_set_list_start_function # define STORE_method_set_list_start_function STORE_meth_set_list_start_fn # undef STORE_method_set_list_next_function # define STORE_method_set_list_next_function STORE_meth_set_list_next_fn # undef STORE_method_set_list_end_function # define STORE_method_set_list_end_function STORE_meth_set_list_end_fn # undef STORE_method_set_update_store_function # define STORE_method_set_update_store_function STORE_meth_set_update_store_fn # undef STORE_method_set_lock_store_function # define STORE_method_set_lock_store_function STORE_meth_set_lock_store_fn # undef STORE_method_set_unlock_store_function # define STORE_method_set_unlock_store_function STORE_meth_set_unlock_store_fn # undef STORE_method_get_initialise_function # define STORE_method_get_initialise_function STORE_meth_get_initialise_fn # undef STORE_method_get_cleanup_function # define STORE_method_get_cleanup_function STORE_meth_get_cleanup_fn # undef STORE_method_get_generate_function # define STORE_method_get_generate_function STORE_meth_get_generate_fn # undef STORE_method_get_modify_function # define STORE_method_get_modify_function STORE_meth_get_modify_fn # undef STORE_method_get_revoke_function # define STORE_method_get_revoke_function STORE_meth_get_revoke_fn # undef STORE_method_get_delete_function # define STORE_method_get_delete_function STORE_meth_get_delete_fn # undef STORE_method_get_list_start_function # define STORE_method_get_list_start_function STORE_meth_get_list_start_fn # undef STORE_method_get_list_next_function # define STORE_method_get_list_next_function STORE_meth_get_list_next_fn # undef STORE_method_get_list_end_function # define STORE_method_get_list_end_function STORE_meth_get_list_end_fn # undef STORE_method_get_update_store_function # define STORE_method_get_update_store_function STORE_meth_get_update_store_fn # undef STORE_method_get_lock_store_function # define STORE_method_get_lock_store_function STORE_meth_get_lock_store_fn # undef STORE_method_get_unlock_store_function # define STORE_method_get_unlock_store_function STORE_meth_get_unlock_store_fn /* Hack some long TS names */ # undef TS_RESP_CTX_set_status_info_cond # define TS_RESP_CTX_set_status_info_cond TS_RESP_CTX_set_stat_info_cond # undef TS_RESP_CTX_set_clock_precision_digits # define TS_RESP_CTX_set_clock_precision_digits TS_RESP_CTX_set_clk_prec_digits # undef TS_CONF_set_clock_precision_digits # define TS_CONF_set_clock_precision_digits TS_CONF_set_clk_prec_digits /* Hack some long CMS names */ # undef CMS_RecipientInfo_ktri_get0_algs # define CMS_RecipientInfo_ktri_get0_algs CMS_RecipInfo_ktri_get0_algs # undef CMS_RecipientInfo_ktri_get0_signer_id # define CMS_RecipientInfo_ktri_get0_signer_id CMS_RecipInfo_ktri_get0_sigr_id # undef CMS_OtherRevocationInfoFormat_it # define CMS_OtherRevocationInfoFormat_it CMS_OtherRevocInfoFormat_it # undef CMS_KeyAgreeRecipientIdentifier_it # define CMS_KeyAgreeRecipientIdentifier_it CMS_KeyAgreeRecipIdentifier_it # undef CMS_OriginatorIdentifierOrKey_it # define CMS_OriginatorIdentifierOrKey_it CMS_OriginatorIdOrKey_it # undef cms_SignerIdentifier_get0_signer_id # define cms_SignerIdentifier_get0_signer_id cms_SignerId_get0_signer_id # undef CMS_RecipientInfo_kari_get0_orig_id # define CMS_RecipientInfo_kari_get0_orig_id CMS_RecipInfo_kari_get0_orig_id # undef CMS_RecipientInfo_kari_get0_reks # define CMS_RecipientInfo_kari_get0_reks CMS_RecipInfo_kari_get0_reks # undef CMS_RecipientEncryptedKey_cert_cmp # define CMS_RecipientEncryptedKey_cert_cmp CMS_RecipEncryptedKey_cert_cmp # undef CMS_RecipientInfo_kari_set0_pkey # define CMS_RecipientInfo_kari_set0_pkey CMS_RecipInfo_kari_set0_pkey # undef CMS_RecipientEncryptedKey_get0_id # define CMS_RecipientEncryptedKey_get0_id CMS_RecipEncryptedKey_get0_id # undef CMS_RecipientInfo_kari_orig_id_cmp # define CMS_RecipientInfo_kari_orig_id_cmp CMS_RecipInfo_kari_orig_id_cmp /* Hack some long DTLS1 names */ # undef dtls1_retransmit_buffered_messages # define dtls1_retransmit_buffered_messages dtls1_retransmit_buffered_msgs /* Hack some long SRP names */ # undef SRP_generate_server_master_secret # define SRP_generate_server_master_secret SRP_gen_server_master_secret # undef SRP_generate_client_master_secret # define SRP_generate_client_master_secret SRP_gen_client_master_secret /* Hack some long UI names */ # undef UI_method_get_prompt_constructor # define UI_method_get_prompt_constructor UI_method_get_prompt_constructr # undef UI_method_set_prompt_constructor # define UI_method_set_prompt_constructor UI_method_set_prompt_constructr # endif /* defined OPENSSL_SYS_VMS */ /* Case insensitive linking causes problems.... */ # if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_OS2) # undef ERR_load_CRYPTO_strings # define ERR_load_CRYPTO_strings ERR_load_CRYPTOlib_strings # undef OCSP_crlID_new # define OCSP_crlID_new OCSP_crlID2_new # undef d2i_ECPARAMETERS # define d2i_ECPARAMETERS d2i_UC_ECPARAMETERS # undef i2d_ECPARAMETERS # define i2d_ECPARAMETERS i2d_UC_ECPARAMETERS # undef d2i_ECPKPARAMETERS # define d2i_ECPKPARAMETERS d2i_UC_ECPKPARAMETERS # undef i2d_ECPKPARAMETERS # define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS /* * These functions do not seem to exist! However, I'm paranoid... Original * command in x509v3.h: These functions are being redefined in another * directory, and clash when the linker is case-insensitive, so let's hide * them a little, by giving them an extra 'o' at the beginning of the name... */ # undef X509v3_cleanup_extensions # define X509v3_cleanup_extensions oX509v3_cleanup_extensions # undef X509v3_add_extension # define X509v3_add_extension oX509v3_add_extension # undef X509v3_add_netscape_extensions # define X509v3_add_netscape_extensions oX509v3_add_netscape_extensions # undef X509v3_add_standard_extensions # define X509v3_add_standard_extensions oX509v3_add_standard_extensions /* This one clashes with CMS_data_create */ # undef cms_Data_create # define cms_Data_create priv_cms_Data_create # endif #endif /* ! defined HEADER_VMS_IDHACKS_H */ ================================================ FILE: 3rParty/FFmpeg/include/openssl/tls1.h ================================================ /* ssl/tls1.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * * Portions of the attached software ("Contribution") are developed by * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. * * The Contribution is licensed pursuant to the OpenSSL open source * license provided above. * * ECC cipher suite support in OpenSSL originally written by * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories. * */ /* ==================================================================== * Copyright 2005 Nokia. All rights reserved. * * The portions of the attached software ("Contribution") is developed by * Nokia Corporation and is licensed pursuant to the OpenSSL open source * license. * * The Contribution, originally written by Mika Kousa and Pasi Eronen of * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites * support (see RFC 4279) to OpenSSL. * * No patent licenses or other rights except those expressly stated in * the OpenSSL open source license shall be deemed granted or received * expressly, by implication, estoppel, or otherwise. * * No assurances are provided by Nokia that the Contribution does not * infringe the patent or other intellectual property rights of any third * party or that the license provides you with all the necessary rights * to make use of the Contribution. * * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR * OTHERWISE. */ #ifndef HEADER_TLS1_H # define HEADER_TLS1_H # include #ifdef __cplusplus extern "C" { #endif # define TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES 0 # define TLS1_VERSION 0x0301 # define TLS1_1_VERSION 0x0302 # define TLS1_2_VERSION 0x0303 # define TLS_MAX_VERSION TLS1_2_VERSION # define TLS1_VERSION_MAJOR 0x03 # define TLS1_VERSION_MINOR 0x01 # define TLS1_1_VERSION_MAJOR 0x03 # define TLS1_1_VERSION_MINOR 0x02 # define TLS1_2_VERSION_MAJOR 0x03 # define TLS1_2_VERSION_MINOR 0x03 # define TLS1_get_version(s) \ ((s->version >> 8) == TLS1_VERSION_MAJOR ? s->version : 0) # define TLS1_get_client_version(s) \ ((s->client_version >> 8) == TLS1_VERSION_MAJOR ? s->client_version : 0) # define TLS1_AD_DECRYPTION_FAILED 21 # define TLS1_AD_RECORD_OVERFLOW 22 # define TLS1_AD_UNKNOWN_CA 48/* fatal */ # define TLS1_AD_ACCESS_DENIED 49/* fatal */ # define TLS1_AD_DECODE_ERROR 50/* fatal */ # define TLS1_AD_DECRYPT_ERROR 51 # define TLS1_AD_EXPORT_RESTRICTION 60/* fatal */ # define TLS1_AD_PROTOCOL_VERSION 70/* fatal */ # define TLS1_AD_INSUFFICIENT_SECURITY 71/* fatal */ # define TLS1_AD_INTERNAL_ERROR 80/* fatal */ # define TLS1_AD_INAPPROPRIATE_FALLBACK 86/* fatal */ # define TLS1_AD_USER_CANCELLED 90 # define TLS1_AD_NO_RENEGOTIATION 100 /* codes 110-114 are from RFC3546 */ # define TLS1_AD_UNSUPPORTED_EXTENSION 110 # define TLS1_AD_CERTIFICATE_UNOBTAINABLE 111 # define TLS1_AD_UNRECOGNIZED_NAME 112 # define TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE 113 # define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114 # define TLS1_AD_UNKNOWN_PSK_IDENTITY 115/* fatal */ /* ExtensionType values from RFC3546 / RFC4366 / RFC6066 */ # define TLSEXT_TYPE_server_name 0 # define TLSEXT_TYPE_max_fragment_length 1 # define TLSEXT_TYPE_client_certificate_url 2 # define TLSEXT_TYPE_trusted_ca_keys 3 # define TLSEXT_TYPE_truncated_hmac 4 # define TLSEXT_TYPE_status_request 5 /* ExtensionType values from RFC4681 */ # define TLSEXT_TYPE_user_mapping 6 /* ExtensionType values from RFC5878 */ # define TLSEXT_TYPE_client_authz 7 # define TLSEXT_TYPE_server_authz 8 /* ExtensionType values from RFC6091 */ # define TLSEXT_TYPE_cert_type 9 /* ExtensionType values from RFC4492 */ # define TLSEXT_TYPE_elliptic_curves 10 # define TLSEXT_TYPE_ec_point_formats 11 /* ExtensionType value from RFC5054 */ # define TLSEXT_TYPE_srp 12 /* ExtensionType values from RFC5246 */ # define TLSEXT_TYPE_signature_algorithms 13 /* ExtensionType value from RFC5764 */ # define TLSEXT_TYPE_use_srtp 14 /* ExtensionType value from RFC5620 */ # define TLSEXT_TYPE_heartbeat 15 /* ExtensionType value from RFC7301 */ # define TLSEXT_TYPE_application_layer_protocol_negotiation 16 /* * ExtensionType value for TLS padding extension. * http://tools.ietf.org/html/draft-agl-tls-padding */ # define TLSEXT_TYPE_padding 21 /* ExtensionType value from RFC4507 */ # define TLSEXT_TYPE_session_ticket 35 /* ExtensionType value from draft-rescorla-tls-opaque-prf-input-00.txt */ # if 0 /* * will have to be provided externally for now , * i.e. build with -DTLSEXT_TYPE_opaque_prf_input=38183 * using whatever extension number you'd like to try */ # define TLSEXT_TYPE_opaque_prf_input ?? # endif /* Temporary extension type */ # define TLSEXT_TYPE_renegotiate 0xff01 # ifndef OPENSSL_NO_NEXTPROTONEG /* This is not an IANA defined extension number */ # define TLSEXT_TYPE_next_proto_neg 13172 # endif /* NameType value from RFC3546 */ # define TLSEXT_NAMETYPE_host_name 0 /* status request value from RFC3546 */ # define TLSEXT_STATUSTYPE_ocsp 1 /* ECPointFormat values from RFC4492 */ # define TLSEXT_ECPOINTFORMAT_first 0 # define TLSEXT_ECPOINTFORMAT_uncompressed 0 # define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1 # define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2 # define TLSEXT_ECPOINTFORMAT_last 2 /* Signature and hash algorithms from RFC5246 */ # define TLSEXT_signature_anonymous 0 # define TLSEXT_signature_rsa 1 # define TLSEXT_signature_dsa 2 # define TLSEXT_signature_ecdsa 3 /* Total number of different signature algorithms */ # define TLSEXT_signature_num 4 # define TLSEXT_hash_none 0 # define TLSEXT_hash_md5 1 # define TLSEXT_hash_sha1 2 # define TLSEXT_hash_sha224 3 # define TLSEXT_hash_sha256 4 # define TLSEXT_hash_sha384 5 # define TLSEXT_hash_sha512 6 /* Total number of different digest algorithms */ # define TLSEXT_hash_num 7 /* Flag set for unrecognised algorithms */ # define TLSEXT_nid_unknown 0x1000000 /* ECC curves */ # define TLSEXT_curve_P_256 23 # define TLSEXT_curve_P_384 24 # ifndef OPENSSL_NO_TLSEXT # define TLSEXT_MAXLEN_host_name 255 const char *SSL_get_servername(const SSL *s, const int type); int SSL_get_servername_type(const SSL *s); /* * SSL_export_keying_material exports a value derived from the master secret, * as specified in RFC 5705. It writes |olen| bytes to |out| given a label and * optional context. (Since a zero length context is allowed, the |use_context| * flag controls whether a context is included.) It returns 1 on success and * zero otherwise. */ int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, const char *label, size_t llen, const unsigned char *p, size_t plen, int use_context); int SSL_get_sigalgs(SSL *s, int idx, int *psign, int *phash, int *psignandhash, unsigned char *rsig, unsigned char *rhash); int SSL_get_shared_sigalgs(SSL *s, int idx, int *psign, int *phash, int *psignandhash, unsigned char *rsig, unsigned char *rhash); int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain); # define SSL_set_tlsext_host_name(s,name) \ SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,(char *)name) # define SSL_set_tlsext_debug_callback(ssl, cb) \ SSL_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_CB,(void (*)(void))cb) # define SSL_set_tlsext_debug_arg(ssl, arg) \ SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_ARG,0, (void *)arg) # define SSL_set_tlsext_status_type(ssl, type) \ SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type, NULL) # define SSL_get_tlsext_status_exts(ssl, arg) \ SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg) # define SSL_set_tlsext_status_exts(ssl, arg) \ SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg) # define SSL_get_tlsext_status_ids(ssl, arg) \ SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg) # define SSL_set_tlsext_status_ids(ssl, arg) \ SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg) # define SSL_get_tlsext_status_ocsp_resp(ssl, arg) \ SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0, (void *)arg) # define SSL_set_tlsext_status_ocsp_resp(ssl, arg, arglen) \ SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP,arglen, (void *)arg) # define SSL_CTX_set_tlsext_servername_callback(ctx, cb) \ SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_CB,(void (*)(void))cb) # define SSL_TLSEXT_ERR_OK 0 # define SSL_TLSEXT_ERR_ALERT_WARNING 1 # define SSL_TLSEXT_ERR_ALERT_FATAL 2 # define SSL_TLSEXT_ERR_NOACK 3 # define SSL_CTX_set_tlsext_servername_arg(ctx, arg) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG,0, (void *)arg) # define SSL_CTX_get_tlsext_ticket_keys(ctx, keys, keylen) \ SSL_CTX_ctrl((ctx),SSL_CTRL_GET_TLSEXT_TICKET_KEYS,(keylen),(keys)) # define SSL_CTX_set_tlsext_ticket_keys(ctx, keys, keylen) \ SSL_CTX_ctrl((ctx),SSL_CTRL_SET_TLSEXT_TICKET_KEYS,(keylen),(keys)) # define SSL_CTX_set_tlsext_status_cb(ssl, cb) \ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,(void (*)(void))cb) # define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0, (void *)arg) # define SSL_set_tlsext_opaque_prf_input(s, src, len) \ SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT, len, src) # define SSL_CTX_set_tlsext_opaque_prf_input_callback(ctx, cb) \ SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB, (void (*)(void))cb) # define SSL_CTX_set_tlsext_opaque_prf_input_callback_arg(ctx, arg) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG, 0, arg) # define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) # ifndef OPENSSL_NO_HEARTBEATS # define SSL_TLSEXT_HB_ENABLED 0x01 # define SSL_TLSEXT_HB_DONT_SEND_REQUESTS 0x02 # define SSL_TLSEXT_HB_DONT_RECV_REQUESTS 0x04 # define SSL_get_tlsext_heartbeat_pending(ssl) \ SSL_ctrl((ssl),SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING,0,NULL) # define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ SSL_ctrl((ssl),SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) # endif # endif /* PSK ciphersuites from 4279 */ # define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A # define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008B # define TLS1_CK_PSK_WITH_AES_128_CBC_SHA 0x0300008C # define TLS1_CK_PSK_WITH_AES_256_CBC_SHA 0x0300008D /* * Additional TLS ciphersuites from expired Internet Draft * draft-ietf-tls-56-bit-ciphersuites-01.txt (available if * TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES is defined, see s3_lib.c). We * actually treat them like SSL 3.0 ciphers, which we probably shouldn't. * Note that the first two are actually not in the IDs. */ # define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5 0x03000060/* not in * ID */ # define TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 0x03000061/* not in * ID */ # define TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA 0x03000062 # define TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA 0x03000063 # define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA 0x03000064 # define TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA 0x03000065 # define TLS1_CK_DHE_DSS_WITH_RC4_128_SHA 0x03000066 /* AES ciphersuites from RFC3268 */ # define TLS1_CK_RSA_WITH_AES_128_SHA 0x0300002F # define TLS1_CK_DH_DSS_WITH_AES_128_SHA 0x03000030 # define TLS1_CK_DH_RSA_WITH_AES_128_SHA 0x03000031 # define TLS1_CK_DHE_DSS_WITH_AES_128_SHA 0x03000032 # define TLS1_CK_DHE_RSA_WITH_AES_128_SHA 0x03000033 # define TLS1_CK_ADH_WITH_AES_128_SHA 0x03000034 # define TLS1_CK_RSA_WITH_AES_256_SHA 0x03000035 # define TLS1_CK_DH_DSS_WITH_AES_256_SHA 0x03000036 # define TLS1_CK_DH_RSA_WITH_AES_256_SHA 0x03000037 # define TLS1_CK_DHE_DSS_WITH_AES_256_SHA 0x03000038 # define TLS1_CK_DHE_RSA_WITH_AES_256_SHA 0x03000039 # define TLS1_CK_ADH_WITH_AES_256_SHA 0x0300003A /* TLS v1.2 ciphersuites */ # define TLS1_CK_RSA_WITH_NULL_SHA256 0x0300003B # define TLS1_CK_RSA_WITH_AES_128_SHA256 0x0300003C # define TLS1_CK_RSA_WITH_AES_256_SHA256 0x0300003D # define TLS1_CK_DH_DSS_WITH_AES_128_SHA256 0x0300003E # define TLS1_CK_DH_RSA_WITH_AES_128_SHA256 0x0300003F # define TLS1_CK_DHE_DSS_WITH_AES_128_SHA256 0x03000040 /* Camellia ciphersuites from RFC4132 */ # define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000041 # define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000042 # define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000043 # define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000044 # define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000045 # define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA 0x03000046 /* TLS v1.2 ciphersuites */ # define TLS1_CK_DHE_RSA_WITH_AES_128_SHA256 0x03000067 # define TLS1_CK_DH_DSS_WITH_AES_256_SHA256 0x03000068 # define TLS1_CK_DH_RSA_WITH_AES_256_SHA256 0x03000069 # define TLS1_CK_DHE_DSS_WITH_AES_256_SHA256 0x0300006A # define TLS1_CK_DHE_RSA_WITH_AES_256_SHA256 0x0300006B # define TLS1_CK_ADH_WITH_AES_128_SHA256 0x0300006C # define TLS1_CK_ADH_WITH_AES_256_SHA256 0x0300006D /* Camellia ciphersuites from RFC4132 */ # define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000084 # define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000085 # define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000086 # define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000087 # define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000088 # define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA 0x03000089 /* SEED ciphersuites from RFC4162 */ # define TLS1_CK_RSA_WITH_SEED_SHA 0x03000096 # define TLS1_CK_DH_DSS_WITH_SEED_SHA 0x03000097 # define TLS1_CK_DH_RSA_WITH_SEED_SHA 0x03000098 # define TLS1_CK_DHE_DSS_WITH_SEED_SHA 0x03000099 # define TLS1_CK_DHE_RSA_WITH_SEED_SHA 0x0300009A # define TLS1_CK_ADH_WITH_SEED_SHA 0x0300009B /* TLS v1.2 GCM ciphersuites from RFC5288 */ # define TLS1_CK_RSA_WITH_AES_128_GCM_SHA256 0x0300009C # define TLS1_CK_RSA_WITH_AES_256_GCM_SHA384 0x0300009D # define TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256 0x0300009E # define TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384 0x0300009F # define TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256 0x030000A0 # define TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384 0x030000A1 # define TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256 0x030000A2 # define TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384 0x030000A3 # define TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256 0x030000A4 # define TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384 0x030000A5 # define TLS1_CK_ADH_WITH_AES_128_GCM_SHA256 0x030000A6 # define TLS1_CK_ADH_WITH_AES_256_GCM_SHA384 0x030000A7 /* * ECC ciphersuites from draft-ietf-tls-ecc-12.txt with changes soon to be in * draft 13 */ # define TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA 0x0300C001 # define TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA 0x0300C002 # define TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C003 # define TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0x0300C004 # define TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0x0300C005 # define TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA 0x0300C006 # define TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA 0x0300C007 # define TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C008 # define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0x0300C009 # define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0x0300C00A # define TLS1_CK_ECDH_RSA_WITH_NULL_SHA 0x0300C00B # define TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA 0x0300C00C # define TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA 0x0300C00D # define TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA 0x0300C00E # define TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA 0x0300C00F # define TLS1_CK_ECDHE_RSA_WITH_NULL_SHA 0x0300C010 # define TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA 0x0300C011 # define TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA 0x0300C012 # define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA 0x0300C013 # define TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA 0x0300C014 # define TLS1_CK_ECDH_anon_WITH_NULL_SHA 0x0300C015 # define TLS1_CK_ECDH_anon_WITH_RC4_128_SHA 0x0300C016 # define TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA 0x0300C017 # define TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA 0x0300C018 # define TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA 0x0300C019 /* SRP ciphersuites from RFC 5054 */ # define TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA 0x0300C01A # define TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA 0x0300C01B # define TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA 0x0300C01C # define TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA 0x0300C01D # define TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA 0x0300C01E # define TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA 0x0300C01F # define TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA 0x0300C020 # define TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA 0x0300C021 # define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA 0x0300C022 /* ECDH HMAC based ciphersuites from RFC5289 */ # define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256 0x0300C023 # define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384 0x0300C024 # define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256 0x0300C025 # define TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384 0x0300C026 # define TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256 0x0300C027 # define TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384 0x0300C028 # define TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256 0x0300C029 # define TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384 0x0300C02A /* ECDH GCM based ciphersuites from RFC5289 */ # define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02B # define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02C # define TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02D # define TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02E # define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0x0300C02F # define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0x0300C030 # define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 # define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 /* * XXX * Backward compatibility alert: + * Older versions of OpenSSL gave * some DHE ciphers names with "EDH" + * instead of "DHE". Going forward, we * should be using DHE + * everywhere, though we may indefinitely maintain * aliases for users + * or configurations that used "EDH" + */ # define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5 "EXP1024-RC4-MD5" # define TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 "EXP1024-RC2-CBC-MD5" # define TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA "EXP1024-DES-CBC-SHA" # define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA "EXP1024-DHE-DSS-DES-CBC-SHA" # define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA "EXP1024-RC4-SHA" # define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA "EXP1024-DHE-DSS-RC4-SHA" # define TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA "DHE-DSS-RC4-SHA" /* AES ciphersuites from RFC3268 */ # define TLS1_TXT_RSA_WITH_AES_128_SHA "AES128-SHA" # define TLS1_TXT_DH_DSS_WITH_AES_128_SHA "DH-DSS-AES128-SHA" # define TLS1_TXT_DH_RSA_WITH_AES_128_SHA "DH-RSA-AES128-SHA" # define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA "DHE-DSS-AES128-SHA" # define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA "DHE-RSA-AES128-SHA" # define TLS1_TXT_ADH_WITH_AES_128_SHA "ADH-AES128-SHA" # define TLS1_TXT_RSA_WITH_AES_256_SHA "AES256-SHA" # define TLS1_TXT_DH_DSS_WITH_AES_256_SHA "DH-DSS-AES256-SHA" # define TLS1_TXT_DH_RSA_WITH_AES_256_SHA "DH-RSA-AES256-SHA" # define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA "DHE-DSS-AES256-SHA" # define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA "DHE-RSA-AES256-SHA" # define TLS1_TXT_ADH_WITH_AES_256_SHA "ADH-AES256-SHA" /* ECC ciphersuites from RFC4492 */ # define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA "ECDH-ECDSA-NULL-SHA" # define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA "ECDH-ECDSA-RC4-SHA" # define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA "ECDH-ECDSA-DES-CBC3-SHA" # define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA "ECDH-ECDSA-AES128-SHA" # define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA "ECDH-ECDSA-AES256-SHA" # define TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA "ECDHE-ECDSA-NULL-SHA" # define TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA "ECDHE-ECDSA-RC4-SHA" # define TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "ECDHE-ECDSA-DES-CBC3-SHA" # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "ECDHE-ECDSA-AES128-SHA" # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "ECDHE-ECDSA-AES256-SHA" # define TLS1_TXT_ECDH_RSA_WITH_NULL_SHA "ECDH-RSA-NULL-SHA" # define TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA "ECDH-RSA-RC4-SHA" # define TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA "ECDH-RSA-DES-CBC3-SHA" # define TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA "ECDH-RSA-AES128-SHA" # define TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA "ECDH-RSA-AES256-SHA" # define TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA "ECDHE-RSA-NULL-SHA" # define TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA "ECDHE-RSA-RC4-SHA" # define TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA "ECDHE-RSA-DES-CBC3-SHA" # define TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA "ECDHE-RSA-AES128-SHA" # define TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA "ECDHE-RSA-AES256-SHA" # define TLS1_TXT_ECDH_anon_WITH_NULL_SHA "AECDH-NULL-SHA" # define TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA "AECDH-RC4-SHA" # define TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA "AECDH-DES-CBC3-SHA" # define TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA "AECDH-AES128-SHA" # define TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA "AECDH-AES256-SHA" /* PSK ciphersuites from RFC 4279 */ # define TLS1_TXT_PSK_WITH_RC4_128_SHA "PSK-RC4-SHA" # define TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA "PSK-3DES-EDE-CBC-SHA" # define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA "PSK-AES128-CBC-SHA" # define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA "PSK-AES256-CBC-SHA" /* SRP ciphersuite from RFC 5054 */ # define TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA "SRP-3DES-EDE-CBC-SHA" # define TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "SRP-RSA-3DES-EDE-CBC-SHA" # define TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "SRP-DSS-3DES-EDE-CBC-SHA" # define TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA "SRP-AES-128-CBC-SHA" # define TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "SRP-RSA-AES-128-CBC-SHA" # define TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "SRP-DSS-AES-128-CBC-SHA" # define TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA "SRP-AES-256-CBC-SHA" # define TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "SRP-RSA-AES-256-CBC-SHA" # define TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "SRP-DSS-AES-256-CBC-SHA" /* Camellia ciphersuites from RFC4132 */ # define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA "CAMELLIA128-SHA" # define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA "DH-DSS-CAMELLIA128-SHA" # define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA "DH-RSA-CAMELLIA128-SHA" # define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "DHE-DSS-CAMELLIA128-SHA" # define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "DHE-RSA-CAMELLIA128-SHA" # define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA "ADH-CAMELLIA128-SHA" # define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA "CAMELLIA256-SHA" # define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA "DH-DSS-CAMELLIA256-SHA" # define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA "DH-RSA-CAMELLIA256-SHA" # define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "DHE-DSS-CAMELLIA256-SHA" # define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "DHE-RSA-CAMELLIA256-SHA" # define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA "ADH-CAMELLIA256-SHA" /* SEED ciphersuites from RFC4162 */ # define TLS1_TXT_RSA_WITH_SEED_SHA "SEED-SHA" # define TLS1_TXT_DH_DSS_WITH_SEED_SHA "DH-DSS-SEED-SHA" # define TLS1_TXT_DH_RSA_WITH_SEED_SHA "DH-RSA-SEED-SHA" # define TLS1_TXT_DHE_DSS_WITH_SEED_SHA "DHE-DSS-SEED-SHA" # define TLS1_TXT_DHE_RSA_WITH_SEED_SHA "DHE-RSA-SEED-SHA" # define TLS1_TXT_ADH_WITH_SEED_SHA "ADH-SEED-SHA" /* TLS v1.2 ciphersuites */ # define TLS1_TXT_RSA_WITH_NULL_SHA256 "NULL-SHA256" # define TLS1_TXT_RSA_WITH_AES_128_SHA256 "AES128-SHA256" # define TLS1_TXT_RSA_WITH_AES_256_SHA256 "AES256-SHA256" # define TLS1_TXT_DH_DSS_WITH_AES_128_SHA256 "DH-DSS-AES128-SHA256" # define TLS1_TXT_DH_RSA_WITH_AES_128_SHA256 "DH-RSA-AES128-SHA256" # define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256 "DHE-DSS-AES128-SHA256" # define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256 "DHE-RSA-AES128-SHA256" # define TLS1_TXT_DH_DSS_WITH_AES_256_SHA256 "DH-DSS-AES256-SHA256" # define TLS1_TXT_DH_RSA_WITH_AES_256_SHA256 "DH-RSA-AES256-SHA256" # define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256 "DHE-DSS-AES256-SHA256" # define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256 "DHE-RSA-AES256-SHA256" # define TLS1_TXT_ADH_WITH_AES_128_SHA256 "ADH-AES128-SHA256" # define TLS1_TXT_ADH_WITH_AES_256_SHA256 "ADH-AES256-SHA256" /* TLS v1.2 GCM ciphersuites from RFC5288 */ # define TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256 "AES128-GCM-SHA256" # define TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384 "AES256-GCM-SHA384" # define TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256 "DHE-RSA-AES128-GCM-SHA256" # define TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384 "DHE-RSA-AES256-GCM-SHA384" # define TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256 "DH-RSA-AES128-GCM-SHA256" # define TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384 "DH-RSA-AES256-GCM-SHA384" # define TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256 "DHE-DSS-AES128-GCM-SHA256" # define TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384 "DHE-DSS-AES256-GCM-SHA384" # define TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256 "DH-DSS-AES128-GCM-SHA256" # define TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384 "DH-DSS-AES256-GCM-SHA384" # define TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256 "ADH-AES128-GCM-SHA256" # define TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384 "ADH-AES256-GCM-SHA384" /* ECDH HMAC based ciphersuites from RFC5289 */ # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256 "ECDHE-ECDSA-AES128-SHA256" # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384 "ECDHE-ECDSA-AES256-SHA384" # define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256 "ECDH-ECDSA-AES128-SHA256" # define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384 "ECDH-ECDSA-AES256-SHA384" # define TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256 "ECDHE-RSA-AES128-SHA256" # define TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384 "ECDHE-RSA-AES256-SHA384" # define TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256 "ECDH-RSA-AES128-SHA256" # define TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384 "ECDH-RSA-AES256-SHA384" /* ECDH GCM based ciphersuites from RFC5289 */ # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "ECDHE-ECDSA-AES128-GCM-SHA256" # define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "ECDHE-ECDSA-AES256-GCM-SHA384" # define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 "ECDH-ECDSA-AES128-GCM-SHA256" # define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 "ECDH-ECDSA-AES256-GCM-SHA384" # define TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "ECDHE-RSA-AES128-GCM-SHA256" # define TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "ECDHE-RSA-AES256-GCM-SHA384" # define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256 "ECDH-RSA-AES128-GCM-SHA256" # define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384 "ECDH-RSA-AES256-GCM-SHA384" # define TLS_CT_RSA_SIGN 1 # define TLS_CT_DSS_SIGN 2 # define TLS_CT_RSA_FIXED_DH 3 # define TLS_CT_DSS_FIXED_DH 4 # define TLS_CT_ECDSA_SIGN 64 # define TLS_CT_RSA_FIXED_ECDH 65 # define TLS_CT_ECDSA_FIXED_ECDH 66 # define TLS_CT_GOST94_SIGN 21 # define TLS_CT_GOST01_SIGN 22 /* * when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see * comment there) */ # define TLS_CT_NUMBER 9 # define TLS1_FINISH_MAC_LENGTH 12 # define TLS_MD_MAX_CONST_SIZE 20 # define TLS_MD_CLIENT_FINISH_CONST "client finished" # define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 # define TLS_MD_SERVER_FINISH_CONST "server finished" # define TLS_MD_SERVER_FINISH_CONST_SIZE 15 # define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" # define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 # define TLS_MD_KEY_EXPANSION_CONST "key expansion" # define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 # define TLS_MD_CLIENT_WRITE_KEY_CONST "client write key" # define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 # define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" # define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 # define TLS_MD_IV_BLOCK_CONST "IV block" # define TLS_MD_IV_BLOCK_CONST_SIZE 8 # define TLS_MD_MASTER_SECRET_CONST "master secret" # define TLS_MD_MASTER_SECRET_CONST_SIZE 13 # ifdef CHARSET_EBCDIC # undef TLS_MD_CLIENT_FINISH_CONST /* * client finished */ # define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" # undef TLS_MD_SERVER_FINISH_CONST /* * server finished */ # define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" # undef TLS_MD_SERVER_WRITE_KEY_CONST /* * server write key */ # define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" # undef TLS_MD_KEY_EXPANSION_CONST /* * key expansion */ # define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" # undef TLS_MD_CLIENT_WRITE_KEY_CONST /* * client write key */ # define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" # undef TLS_MD_SERVER_WRITE_KEY_CONST /* * server write key */ # define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" # undef TLS_MD_IV_BLOCK_CONST /* * IV block */ # define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" # undef TLS_MD_MASTER_SECRET_CONST /* * master secret */ # define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" # endif /* TLS Session Ticket extension struct */ struct tls_session_ticket_ext_st { unsigned short length; void *data; }; #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/ts.h ================================================ /* crypto/ts/ts.h */ /* * Written by Zoltan Glozik (zglozik@opentsa.org) for the OpenSSL project * 2002, 2003, 2004. */ /* ==================================================================== * Copyright (c) 2006 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_TS_H # define HEADER_TS_H # include # include # ifndef OPENSSL_NO_BUFFER # include # endif # ifndef OPENSSL_NO_EVP # include # endif # ifndef OPENSSL_NO_BIO # include # endif # include # include # include # ifndef OPENSSL_NO_RSA # include # endif # ifndef OPENSSL_NO_DSA # include # endif # ifndef OPENSSL_NO_DH # include # endif #ifdef __cplusplus extern "C" { #endif # ifdef WIN32 /* Under Win32 this is defined in wincrypt.h */ # undef X509_NAME # endif # include # include /*- MessageImprint ::= SEQUENCE { hashAlgorithm AlgorithmIdentifier, hashedMessage OCTET STRING } */ typedef struct TS_msg_imprint_st { X509_ALGOR *hash_algo; ASN1_OCTET_STRING *hashed_msg; } TS_MSG_IMPRINT; /*- TimeStampReq ::= SEQUENCE { version INTEGER { v1(1) }, messageImprint MessageImprint, --a hash algorithm OID and the hash value of the data to be --time-stamped reqPolicy TSAPolicyId OPTIONAL, nonce INTEGER OPTIONAL, certReq BOOLEAN DEFAULT FALSE, extensions [0] IMPLICIT Extensions OPTIONAL } */ typedef struct TS_req_st { ASN1_INTEGER *version; TS_MSG_IMPRINT *msg_imprint; ASN1_OBJECT *policy_id; /* OPTIONAL */ ASN1_INTEGER *nonce; /* OPTIONAL */ ASN1_BOOLEAN cert_req; /* DEFAULT FALSE */ STACK_OF(X509_EXTENSION) *extensions; /* [0] OPTIONAL */ } TS_REQ; /*- Accuracy ::= SEQUENCE { seconds INTEGER OPTIONAL, millis [0] INTEGER (1..999) OPTIONAL, micros [1] INTEGER (1..999) OPTIONAL } */ typedef struct TS_accuracy_st { ASN1_INTEGER *seconds; ASN1_INTEGER *millis; ASN1_INTEGER *micros; } TS_ACCURACY; /*- TSTInfo ::= SEQUENCE { version INTEGER { v1(1) }, policy TSAPolicyId, messageImprint MessageImprint, -- MUST have the same value as the similar field in -- TimeStampReq serialNumber INTEGER, -- Time-Stamping users MUST be ready to accommodate integers -- up to 160 bits. genTime GeneralizedTime, accuracy Accuracy OPTIONAL, ordering BOOLEAN DEFAULT FALSE, nonce INTEGER OPTIONAL, -- MUST be present if the similar field was present -- in TimeStampReq. In that case it MUST have the same value. tsa [0] GeneralName OPTIONAL, extensions [1] IMPLICIT Extensions OPTIONAL } */ typedef struct TS_tst_info_st { ASN1_INTEGER *version; ASN1_OBJECT *policy_id; TS_MSG_IMPRINT *msg_imprint; ASN1_INTEGER *serial; ASN1_GENERALIZEDTIME *time; TS_ACCURACY *accuracy; ASN1_BOOLEAN ordering; ASN1_INTEGER *nonce; GENERAL_NAME *tsa; STACK_OF(X509_EXTENSION) *extensions; } TS_TST_INFO; /*- PKIStatusInfo ::= SEQUENCE { status PKIStatus, statusString PKIFreeText OPTIONAL, failInfo PKIFailureInfo OPTIONAL } From RFC 1510 - section 3.1.1: PKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String -- text encoded as UTF-8 String (note: each UTF8String SHOULD -- include an RFC 1766 language tag to indicate the language -- of the contained text) */ /* Possible values for status. See ts_resp_print.c && ts_resp_verify.c. */ # define TS_STATUS_GRANTED 0 # define TS_STATUS_GRANTED_WITH_MODS 1 # define TS_STATUS_REJECTION 2 # define TS_STATUS_WAITING 3 # define TS_STATUS_REVOCATION_WARNING 4 # define TS_STATUS_REVOCATION_NOTIFICATION 5 /* * Possible values for failure_info. See ts_resp_print.c && ts_resp_verify.c */ # define TS_INFO_BAD_ALG 0 # define TS_INFO_BAD_REQUEST 2 # define TS_INFO_BAD_DATA_FORMAT 5 # define TS_INFO_TIME_NOT_AVAILABLE 14 # define TS_INFO_UNACCEPTED_POLICY 15 # define TS_INFO_UNACCEPTED_EXTENSION 16 # define TS_INFO_ADD_INFO_NOT_AVAILABLE 17 # define TS_INFO_SYSTEM_FAILURE 25 typedef struct TS_status_info_st { ASN1_INTEGER *status; STACK_OF(ASN1_UTF8STRING) *text; ASN1_BIT_STRING *failure_info; } TS_STATUS_INFO; DECLARE_STACK_OF(ASN1_UTF8STRING) DECLARE_ASN1_SET_OF(ASN1_UTF8STRING) /*- TimeStampResp ::= SEQUENCE { status PKIStatusInfo, timeStampToken TimeStampToken OPTIONAL } */ typedef struct TS_resp_st { TS_STATUS_INFO *status_info; PKCS7 *token; TS_TST_INFO *tst_info; } TS_RESP; /* The structure below would belong to the ESS component. */ /*- IssuerSerial ::= SEQUENCE { issuer GeneralNames, serialNumber CertificateSerialNumber } */ typedef struct ESS_issuer_serial { STACK_OF(GENERAL_NAME) *issuer; ASN1_INTEGER *serial; } ESS_ISSUER_SERIAL; /*- ESSCertID ::= SEQUENCE { certHash Hash, issuerSerial IssuerSerial OPTIONAL } */ typedef struct ESS_cert_id { ASN1_OCTET_STRING *hash; /* Always SHA-1 digest. */ ESS_ISSUER_SERIAL *issuer_serial; } ESS_CERT_ID; DECLARE_STACK_OF(ESS_CERT_ID) DECLARE_ASN1_SET_OF(ESS_CERT_ID) /*- SigningCertificate ::= SEQUENCE { certs SEQUENCE OF ESSCertID, policies SEQUENCE OF PolicyInformation OPTIONAL } */ typedef struct ESS_signing_cert { STACK_OF(ESS_CERT_ID) *cert_ids; STACK_OF(POLICYINFO) *policy_info; } ESS_SIGNING_CERT; TS_REQ *TS_REQ_new(void); void TS_REQ_free(TS_REQ *a); int i2d_TS_REQ(const TS_REQ *a, unsigned char **pp); TS_REQ *d2i_TS_REQ(TS_REQ **a, const unsigned char **pp, long length); TS_REQ *TS_REQ_dup(TS_REQ *a); TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); int i2d_TS_REQ_fp(FILE *fp, TS_REQ *a); TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); int i2d_TS_REQ_bio(BIO *fp, TS_REQ *a); TS_MSG_IMPRINT *TS_MSG_IMPRINT_new(void); void TS_MSG_IMPRINT_free(TS_MSG_IMPRINT *a); int i2d_TS_MSG_IMPRINT(const TS_MSG_IMPRINT *a, unsigned char **pp); TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT(TS_MSG_IMPRINT **a, const unsigned char **pp, long length); TS_MSG_IMPRINT *TS_MSG_IMPRINT_dup(TS_MSG_IMPRINT *a); TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT **a); int i2d_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT *a); TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *fp, TS_MSG_IMPRINT **a); int i2d_TS_MSG_IMPRINT_bio(BIO *fp, TS_MSG_IMPRINT *a); TS_RESP *TS_RESP_new(void); void TS_RESP_free(TS_RESP *a); int i2d_TS_RESP(const TS_RESP *a, unsigned char **pp); TS_RESP *d2i_TS_RESP(TS_RESP **a, const unsigned char **pp, long length); TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); TS_RESP *TS_RESP_dup(TS_RESP *a); TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); int i2d_TS_RESP_fp(FILE *fp, TS_RESP *a); TS_RESP *d2i_TS_RESP_bio(BIO *fp, TS_RESP **a); int i2d_TS_RESP_bio(BIO *fp, TS_RESP *a); TS_STATUS_INFO *TS_STATUS_INFO_new(void); void TS_STATUS_INFO_free(TS_STATUS_INFO *a); int i2d_TS_STATUS_INFO(const TS_STATUS_INFO *a, unsigned char **pp); TS_STATUS_INFO *d2i_TS_STATUS_INFO(TS_STATUS_INFO **a, const unsigned char **pp, long length); TS_STATUS_INFO *TS_STATUS_INFO_dup(TS_STATUS_INFO *a); TS_TST_INFO *TS_TST_INFO_new(void); void TS_TST_INFO_free(TS_TST_INFO *a); int i2d_TS_TST_INFO(const TS_TST_INFO *a, unsigned char **pp); TS_TST_INFO *d2i_TS_TST_INFO(TS_TST_INFO **a, const unsigned char **pp, long length); TS_TST_INFO *TS_TST_INFO_dup(TS_TST_INFO *a); TS_TST_INFO *d2i_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO **a); int i2d_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO *a); TS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *fp, TS_TST_INFO **a); int i2d_TS_TST_INFO_bio(BIO *fp, TS_TST_INFO *a); TS_ACCURACY *TS_ACCURACY_new(void); void TS_ACCURACY_free(TS_ACCURACY *a); int i2d_TS_ACCURACY(const TS_ACCURACY *a, unsigned char **pp); TS_ACCURACY *d2i_TS_ACCURACY(TS_ACCURACY **a, const unsigned char **pp, long length); TS_ACCURACY *TS_ACCURACY_dup(TS_ACCURACY *a); ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_new(void); void ESS_ISSUER_SERIAL_free(ESS_ISSUER_SERIAL *a); int i2d_ESS_ISSUER_SERIAL(const ESS_ISSUER_SERIAL *a, unsigned char **pp); ESS_ISSUER_SERIAL *d2i_ESS_ISSUER_SERIAL(ESS_ISSUER_SERIAL **a, const unsigned char **pp, long length); ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_dup(ESS_ISSUER_SERIAL *a); ESS_CERT_ID *ESS_CERT_ID_new(void); void ESS_CERT_ID_free(ESS_CERT_ID *a); int i2d_ESS_CERT_ID(const ESS_CERT_ID *a, unsigned char **pp); ESS_CERT_ID *d2i_ESS_CERT_ID(ESS_CERT_ID **a, const unsigned char **pp, long length); ESS_CERT_ID *ESS_CERT_ID_dup(ESS_CERT_ID *a); ESS_SIGNING_CERT *ESS_SIGNING_CERT_new(void); void ESS_SIGNING_CERT_free(ESS_SIGNING_CERT *a); int i2d_ESS_SIGNING_CERT(const ESS_SIGNING_CERT *a, unsigned char **pp); ESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a, const unsigned char **pp, long length); ESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a); void ERR_load_TS_strings(void); int TS_REQ_set_version(TS_REQ *a, long version); long TS_REQ_get_version(const TS_REQ *a); int TS_REQ_set_msg_imprint(TS_REQ *a, TS_MSG_IMPRINT *msg_imprint); TS_MSG_IMPRINT *TS_REQ_get_msg_imprint(TS_REQ *a); int TS_MSG_IMPRINT_set_algo(TS_MSG_IMPRINT *a, X509_ALGOR *alg); X509_ALGOR *TS_MSG_IMPRINT_get_algo(TS_MSG_IMPRINT *a); int TS_MSG_IMPRINT_set_msg(TS_MSG_IMPRINT *a, unsigned char *d, int len); ASN1_OCTET_STRING *TS_MSG_IMPRINT_get_msg(TS_MSG_IMPRINT *a); int TS_REQ_set_policy_id(TS_REQ *a, ASN1_OBJECT *policy); ASN1_OBJECT *TS_REQ_get_policy_id(TS_REQ *a); int TS_REQ_set_nonce(TS_REQ *a, const ASN1_INTEGER *nonce); const ASN1_INTEGER *TS_REQ_get_nonce(const TS_REQ *a); int TS_REQ_set_cert_req(TS_REQ *a, int cert_req); int TS_REQ_get_cert_req(const TS_REQ *a); STACK_OF(X509_EXTENSION) *TS_REQ_get_exts(TS_REQ *a); void TS_REQ_ext_free(TS_REQ *a); int TS_REQ_get_ext_count(TS_REQ *a); int TS_REQ_get_ext_by_NID(TS_REQ *a, int nid, int lastpos); int TS_REQ_get_ext_by_OBJ(TS_REQ *a, ASN1_OBJECT *obj, int lastpos); int TS_REQ_get_ext_by_critical(TS_REQ *a, int crit, int lastpos); X509_EXTENSION *TS_REQ_get_ext(TS_REQ *a, int loc); X509_EXTENSION *TS_REQ_delete_ext(TS_REQ *a, int loc); int TS_REQ_add_ext(TS_REQ *a, X509_EXTENSION *ex, int loc); void *TS_REQ_get_ext_d2i(TS_REQ *a, int nid, int *crit, int *idx); /* Function declarations for TS_REQ defined in ts/ts_req_print.c */ int TS_REQ_print_bio(BIO *bio, TS_REQ *a); /* Function declarations for TS_RESP defined in ts/ts_resp_utils.c */ int TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *info); TS_STATUS_INFO *TS_RESP_get_status_info(TS_RESP *a); /* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */ void TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info); PKCS7 *TS_RESP_get_token(TS_RESP *a); TS_TST_INFO *TS_RESP_get_tst_info(TS_RESP *a); int TS_TST_INFO_set_version(TS_TST_INFO *a, long version); long TS_TST_INFO_get_version(const TS_TST_INFO *a); int TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy_id); ASN1_OBJECT *TS_TST_INFO_get_policy_id(TS_TST_INFO *a); int TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint); TS_MSG_IMPRINT *TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a); int TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial); const ASN1_INTEGER *TS_TST_INFO_get_serial(const TS_TST_INFO *a); int TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime); const ASN1_GENERALIZEDTIME *TS_TST_INFO_get_time(const TS_TST_INFO *a); int TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy); TS_ACCURACY *TS_TST_INFO_get_accuracy(TS_TST_INFO *a); int TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds); const ASN1_INTEGER *TS_ACCURACY_get_seconds(const TS_ACCURACY *a); int TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis); const ASN1_INTEGER *TS_ACCURACY_get_millis(const TS_ACCURACY *a); int TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros); const ASN1_INTEGER *TS_ACCURACY_get_micros(const TS_ACCURACY *a); int TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering); int TS_TST_INFO_get_ordering(const TS_TST_INFO *a); int TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce); const ASN1_INTEGER *TS_TST_INFO_get_nonce(const TS_TST_INFO *a); int TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa); GENERAL_NAME *TS_TST_INFO_get_tsa(TS_TST_INFO *a); STACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a); void TS_TST_INFO_ext_free(TS_TST_INFO *a); int TS_TST_INFO_get_ext_count(TS_TST_INFO *a); int TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos); int TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, ASN1_OBJECT *obj, int lastpos); int TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos); X509_EXTENSION *TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc); X509_EXTENSION *TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc); int TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc); void *TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx); /* * Declarations related to response generation, defined in ts/ts_resp_sign.c. */ /* Optional flags for response generation. */ /* Don't include the TSA name in response. */ # define TS_TSA_NAME 0x01 /* Set ordering to true in response. */ # define TS_ORDERING 0x02 /* * Include the signer certificate and the other specified certificates in * the ESS signing certificate attribute beside the PKCS7 signed data. * Only the signer certificates is included by default. */ # define TS_ESS_CERT_ID_CHAIN 0x04 /* Forward declaration. */ struct TS_resp_ctx; /* This must return a unique number less than 160 bits long. */ typedef ASN1_INTEGER *(*TS_serial_cb) (struct TS_resp_ctx *, void *); /* * This must return the seconds and microseconds since Jan 1, 1970 in the sec * and usec variables allocated by the caller. Return non-zero for success * and zero for failure. */ typedef int (*TS_time_cb) (struct TS_resp_ctx *, void *, long *sec, long *usec); /* * This must process the given extension. It can modify the TS_TST_INFO * object of the context. Return values: !0 (processed), 0 (error, it must * set the status info/failure info of the response). */ typedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *, void *); typedef struct TS_resp_ctx { X509 *signer_cert; EVP_PKEY *signer_key; STACK_OF(X509) *certs; /* Certs to include in signed data. */ STACK_OF(ASN1_OBJECT) *policies; /* Acceptable policies. */ ASN1_OBJECT *default_policy; /* It may appear in policies, too. */ STACK_OF(EVP_MD) *mds; /* Acceptable message digests. */ ASN1_INTEGER *seconds; /* accuracy, 0 means not specified. */ ASN1_INTEGER *millis; /* accuracy, 0 means not specified. */ ASN1_INTEGER *micros; /* accuracy, 0 means not specified. */ unsigned clock_precision_digits; /* fraction of seconds in time stamp * token. */ unsigned flags; /* Optional info, see values above. */ /* Callback functions. */ TS_serial_cb serial_cb; void *serial_cb_data; /* User data for serial_cb. */ TS_time_cb time_cb; void *time_cb_data; /* User data for time_cb. */ TS_extension_cb extension_cb; void *extension_cb_data; /* User data for extension_cb. */ /* These members are used only while creating the response. */ TS_REQ *request; TS_RESP *response; TS_TST_INFO *tst_info; } TS_RESP_CTX; DECLARE_STACK_OF(EVP_MD) DECLARE_ASN1_SET_OF(EVP_MD) /* Creates a response context that can be used for generating responses. */ TS_RESP_CTX *TS_RESP_CTX_new(void); void TS_RESP_CTX_free(TS_RESP_CTX *ctx); /* This parameter must be set. */ int TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer); /* This parameter must be set. */ int TS_RESP_CTX_set_signer_key(TS_RESP_CTX *ctx, EVP_PKEY *key); /* This parameter must be set. */ int TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *def_policy); /* No additional certs are included in the response by default. */ int TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs); /* * Adds a new acceptable policy, only the default policy is accepted by * default. */ int TS_RESP_CTX_add_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *policy); /* * Adds a new acceptable message digest. Note that no message digests are * accepted by default. The md argument is shared with the caller. */ int TS_RESP_CTX_add_md(TS_RESP_CTX *ctx, const EVP_MD *md); /* Accuracy is not included by default. */ int TS_RESP_CTX_set_accuracy(TS_RESP_CTX *ctx, int secs, int millis, int micros); /* * Clock precision digits, i.e. the number of decimal digits: '0' means sec, * '3' msec, '6' usec, and so on. Default is 0. */ int TS_RESP_CTX_set_clock_precision_digits(TS_RESP_CTX *ctx, unsigned clock_precision_digits); /* At most we accept usec precision. */ # define TS_MAX_CLOCK_PRECISION_DIGITS 6 /* No flags are set by default. */ void TS_RESP_CTX_add_flags(TS_RESP_CTX *ctx, int flags); /* Default callback always returns a constant. */ void TS_RESP_CTX_set_serial_cb(TS_RESP_CTX *ctx, TS_serial_cb cb, void *data); /* Default callback uses the gettimeofday() and gmtime() system calls. */ void TS_RESP_CTX_set_time_cb(TS_RESP_CTX *ctx, TS_time_cb cb, void *data); /* * Default callback rejects all extensions. The extension callback is called * when the TS_TST_INFO object is already set up and not signed yet. */ /* FIXME: extension handling is not tested yet. */ void TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx, TS_extension_cb cb, void *data); /* The following methods can be used in the callbacks. */ int TS_RESP_CTX_set_status_info(TS_RESP_CTX *ctx, int status, const char *text); /* Sets the status info only if it is still TS_STATUS_GRANTED. */ int TS_RESP_CTX_set_status_info_cond(TS_RESP_CTX *ctx, int status, const char *text); int TS_RESP_CTX_add_failure_info(TS_RESP_CTX *ctx, int failure); /* The get methods below can be used in the extension callback. */ TS_REQ *TS_RESP_CTX_get_request(TS_RESP_CTX *ctx); TS_TST_INFO *TS_RESP_CTX_get_tst_info(TS_RESP_CTX *ctx); /* * Creates the signed TS_TST_INFO and puts it in TS_RESP. * In case of errors it sets the status info properly. * Returns NULL only in case of memory allocation/fatal error. */ TS_RESP *TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio); /* * Declarations related to response verification, * they are defined in ts/ts_resp_verify.c. */ int TS_RESP_verify_signature(PKCS7 *token, STACK_OF(X509) *certs, X509_STORE *store, X509 **signer_out); /* Context structure for the generic verify method. */ /* Verify the signer's certificate and the signature of the response. */ # define TS_VFY_SIGNATURE (1u << 0) /* Verify the version number of the response. */ # define TS_VFY_VERSION (1u << 1) /* Verify if the policy supplied by the user matches the policy of the TSA. */ # define TS_VFY_POLICY (1u << 2) /* * Verify the message imprint provided by the user. This flag should not be * specified with TS_VFY_DATA. */ # define TS_VFY_IMPRINT (1u << 3) /* * Verify the message imprint computed by the verify method from the user * provided data and the MD algorithm of the response. This flag should not * be specified with TS_VFY_IMPRINT. */ # define TS_VFY_DATA (1u << 4) /* Verify the nonce value. */ # define TS_VFY_NONCE (1u << 5) /* Verify if the TSA name field matches the signer certificate. */ # define TS_VFY_SIGNER (1u << 6) /* Verify if the TSA name field equals to the user provided name. */ # define TS_VFY_TSA_NAME (1u << 7) /* You can use the following convenience constants. */ # define TS_VFY_ALL_IMPRINT (TS_VFY_SIGNATURE \ | TS_VFY_VERSION \ | TS_VFY_POLICY \ | TS_VFY_IMPRINT \ | TS_VFY_NONCE \ | TS_VFY_SIGNER \ | TS_VFY_TSA_NAME) # define TS_VFY_ALL_DATA (TS_VFY_SIGNATURE \ | TS_VFY_VERSION \ | TS_VFY_POLICY \ | TS_VFY_DATA \ | TS_VFY_NONCE \ | TS_VFY_SIGNER \ | TS_VFY_TSA_NAME) typedef struct TS_verify_ctx { /* Set this to the union of TS_VFY_... flags you want to carry out. */ unsigned flags; /* Must be set only with TS_VFY_SIGNATURE. certs is optional. */ X509_STORE *store; STACK_OF(X509) *certs; /* Must be set only with TS_VFY_POLICY. */ ASN1_OBJECT *policy; /* * Must be set only with TS_VFY_IMPRINT. If md_alg is NULL, the * algorithm from the response is used. */ X509_ALGOR *md_alg; unsigned char *imprint; unsigned imprint_len; /* Must be set only with TS_VFY_DATA. */ BIO *data; /* Must be set only with TS_VFY_TSA_NAME. */ ASN1_INTEGER *nonce; /* Must be set only with TS_VFY_TSA_NAME. */ GENERAL_NAME *tsa_name; } TS_VERIFY_CTX; int TS_RESP_verify_response(TS_VERIFY_CTX *ctx, TS_RESP *response); int TS_RESP_verify_token(TS_VERIFY_CTX *ctx, PKCS7 *token); /* * Declarations related to response verification context, * they are defined in ts/ts_verify_ctx.c. */ /* Set all fields to zero. */ TS_VERIFY_CTX *TS_VERIFY_CTX_new(void); void TS_VERIFY_CTX_init(TS_VERIFY_CTX *ctx); void TS_VERIFY_CTX_free(TS_VERIFY_CTX *ctx); void TS_VERIFY_CTX_cleanup(TS_VERIFY_CTX *ctx); /*- * If ctx is NULL, it allocates and returns a new object, otherwise * it returns ctx. It initialises all the members as follows: * flags = TS_VFY_ALL_IMPRINT & ~(TS_VFY_TSA_NAME | TS_VFY_SIGNATURE) * certs = NULL * store = NULL * policy = policy from the request or NULL if absent (in this case * TS_VFY_POLICY is cleared from flags as well) * md_alg = MD algorithm from request * imprint, imprint_len = imprint from request * data = NULL * nonce, nonce_len = nonce from the request or NULL if absent (in this case * TS_VFY_NONCE is cleared from flags as well) * tsa_name = NULL * Important: after calling this method TS_VFY_SIGNATURE should be added! */ TS_VERIFY_CTX *TS_REQ_to_TS_VERIFY_CTX(TS_REQ *req, TS_VERIFY_CTX *ctx); /* Function declarations for TS_RESP defined in ts/ts_resp_print.c */ int TS_RESP_print_bio(BIO *bio, TS_RESP *a); int TS_STATUS_INFO_print_bio(BIO *bio, TS_STATUS_INFO *a); int TS_TST_INFO_print_bio(BIO *bio, TS_TST_INFO *a); /* Common utility functions defined in ts/ts_lib.c */ int TS_ASN1_INTEGER_print_bio(BIO *bio, const ASN1_INTEGER *num); int TS_OBJ_print_bio(BIO *bio, const ASN1_OBJECT *obj); int TS_ext_print_bio(BIO *bio, const STACK_OF(X509_EXTENSION) *extensions); int TS_X509_ALGOR_print_bio(BIO *bio, const X509_ALGOR *alg); int TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *msg); /* * Function declarations for handling configuration options, defined in * ts/ts_conf.c */ X509 *TS_CONF_load_cert(const char *file); STACK_OF(X509) *TS_CONF_load_certs(const char *file); EVP_PKEY *TS_CONF_load_key(const char *file, const char *pass); const char *TS_CONF_get_tsa_section(CONF *conf, const char *section); int TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb, TS_RESP_CTX *ctx); int TS_CONF_set_crypto_device(CONF *conf, const char *section, const char *device); int TS_CONF_set_default_engine(const char *name); int TS_CONF_set_signer_cert(CONF *conf, const char *section, const char *cert, TS_RESP_CTX *ctx); int TS_CONF_set_certs(CONF *conf, const char *section, const char *certs, TS_RESP_CTX *ctx); int TS_CONF_set_signer_key(CONF *conf, const char *section, const char *key, const char *pass, TS_RESP_CTX *ctx); int TS_CONF_set_def_policy(CONF *conf, const char *section, const char *policy, TS_RESP_CTX *ctx); int TS_CONF_set_policies(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_digests(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_accuracy(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_clock_precision_digits(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_ordering(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_tsa_name(CONF *conf, const char *section, TS_RESP_CTX *ctx); int TS_CONF_set_ess_cert_id_chain(CONF *conf, const char *section, TS_RESP_CTX *ctx); /* -------------------------------------------------- */ /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_TS_strings(void); /* Error codes for the TS functions. */ /* Function codes. */ # define TS_F_D2I_TS_RESP 147 # define TS_F_DEF_SERIAL_CB 110 # define TS_F_DEF_TIME_CB 111 # define TS_F_ESS_ADD_SIGNING_CERT 112 # define TS_F_ESS_CERT_ID_NEW_INIT 113 # define TS_F_ESS_SIGNING_CERT_NEW_INIT 114 # define TS_F_INT_TS_RESP_VERIFY_TOKEN 149 # define TS_F_PKCS7_TO_TS_TST_INFO 148 # define TS_F_TS_ACCURACY_SET_MICROS 115 # define TS_F_TS_ACCURACY_SET_MILLIS 116 # define TS_F_TS_ACCURACY_SET_SECONDS 117 # define TS_F_TS_CHECK_IMPRINTS 100 # define TS_F_TS_CHECK_NONCES 101 # define TS_F_TS_CHECK_POLICY 102 # define TS_F_TS_CHECK_SIGNING_CERTS 103 # define TS_F_TS_CHECK_STATUS_INFO 104 # define TS_F_TS_COMPUTE_IMPRINT 145 # define TS_F_TS_CONF_SET_DEFAULT_ENGINE 146 # define TS_F_TS_GET_STATUS_TEXT 105 # define TS_F_TS_MSG_IMPRINT_SET_ALGO 118 # define TS_F_TS_REQ_SET_MSG_IMPRINT 119 # define TS_F_TS_REQ_SET_NONCE 120 # define TS_F_TS_REQ_SET_POLICY_ID 121 # define TS_F_TS_RESP_CREATE_RESPONSE 122 # define TS_F_TS_RESP_CREATE_TST_INFO 123 # define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 124 # define TS_F_TS_RESP_CTX_ADD_MD 125 # define TS_F_TS_RESP_CTX_ADD_POLICY 126 # define TS_F_TS_RESP_CTX_NEW 127 # define TS_F_TS_RESP_CTX_SET_ACCURACY 128 # define TS_F_TS_RESP_CTX_SET_CERTS 129 # define TS_F_TS_RESP_CTX_SET_DEF_POLICY 130 # define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 131 # define TS_F_TS_RESP_CTX_SET_STATUS_INFO 132 # define TS_F_TS_RESP_GET_POLICY 133 # define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 134 # define TS_F_TS_RESP_SET_STATUS_INFO 135 # define TS_F_TS_RESP_SET_TST_INFO 150 # define TS_F_TS_RESP_SIGN 136 # define TS_F_TS_RESP_VERIFY_SIGNATURE 106 # define TS_F_TS_RESP_VERIFY_TOKEN 107 # define TS_F_TS_TST_INFO_SET_ACCURACY 137 # define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 138 # define TS_F_TS_TST_INFO_SET_NONCE 139 # define TS_F_TS_TST_INFO_SET_POLICY_ID 140 # define TS_F_TS_TST_INFO_SET_SERIAL 141 # define TS_F_TS_TST_INFO_SET_TIME 142 # define TS_F_TS_TST_INFO_SET_TSA 143 # define TS_F_TS_VERIFY 108 # define TS_F_TS_VERIFY_CERT 109 # define TS_F_TS_VERIFY_CTX_NEW 144 /* Reason codes. */ # define TS_R_BAD_PKCS7_TYPE 132 # define TS_R_BAD_TYPE 133 # define TS_R_CERTIFICATE_VERIFY_ERROR 100 # define TS_R_COULD_NOT_SET_ENGINE 127 # define TS_R_COULD_NOT_SET_TIME 115 # define TS_R_D2I_TS_RESP_INT_FAILED 128 # define TS_R_DETACHED_CONTENT 134 # define TS_R_ESS_ADD_SIGNING_CERT_ERROR 116 # define TS_R_ESS_SIGNING_CERTIFICATE_ERROR 101 # define TS_R_INVALID_NULL_POINTER 102 # define TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE 117 # define TS_R_MESSAGE_IMPRINT_MISMATCH 103 # define TS_R_NONCE_MISMATCH 104 # define TS_R_NONCE_NOT_RETURNED 105 # define TS_R_NO_CONTENT 106 # define TS_R_NO_TIME_STAMP_TOKEN 107 # define TS_R_PKCS7_ADD_SIGNATURE_ERROR 118 # define TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR 119 # define TS_R_PKCS7_TO_TS_TST_INFO_FAILED 129 # define TS_R_POLICY_MISMATCH 108 # define TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 120 # define TS_R_RESPONSE_SETUP_ERROR 121 # define TS_R_SIGNATURE_FAILURE 109 # define TS_R_THERE_MUST_BE_ONE_SIGNER 110 # define TS_R_TIME_SYSCALL_ERROR 122 # define TS_R_TOKEN_NOT_PRESENT 130 # define TS_R_TOKEN_PRESENT 131 # define TS_R_TSA_NAME_MISMATCH 111 # define TS_R_TSA_UNTRUSTED 112 # define TS_R_TST_INFO_SETUP_ERROR 123 # define TS_R_TS_DATASIGN 124 # define TS_R_UNACCEPTABLE_POLICY 125 # define TS_R_UNSUPPORTED_MD_ALGORITHM 126 # define TS_R_UNSUPPORTED_VERSION 113 # define TS_R_WRONG_CONTENT_TYPE 114 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/txt_db.h ================================================ /* crypto/txt_db/txt_db.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_TXT_DB_H # define HEADER_TXT_DB_H # include # ifndef OPENSSL_NO_BIO # include # endif # include # include # define DB_ERROR_OK 0 # define DB_ERROR_MALLOC 1 # define DB_ERROR_INDEX_CLASH 2 # define DB_ERROR_INDEX_OUT_OF_RANGE 3 # define DB_ERROR_NO_INDEX 4 # define DB_ERROR_INSERT_INDEX_CLASH 5 #ifdef __cplusplus extern "C" { #endif typedef OPENSSL_STRING *OPENSSL_PSTRING; DECLARE_SPECIAL_STACK_OF(OPENSSL_PSTRING, OPENSSL_STRING) typedef struct txt_db_st { int num_fields; STACK_OF(OPENSSL_PSTRING) *data; LHASH_OF(OPENSSL_STRING) **index; int (**qual) (OPENSSL_STRING *); long error; long arg1; long arg2; OPENSSL_STRING *arg_row; } TXT_DB; # ifndef OPENSSL_NO_BIO TXT_DB *TXT_DB_read(BIO *in, int num); long TXT_DB_write(BIO *out, TXT_DB *db); # else TXT_DB *TXT_DB_read(char *in, int num); long TXT_DB_write(char *out, TXT_DB *db); # endif int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), LHASH_HASH_FN_TYPE hash, LHASH_COMP_FN_TYPE cmp); void TXT_DB_free(TXT_DB *db); OPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx, OPENSSL_STRING *value); int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *value); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/ui.h ================================================ /* crypto/ui/ui.h */ /* * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project * 2001. */ /* ==================================================================== * Copyright (c) 2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_UI_H # define HEADER_UI_H # ifndef OPENSSL_NO_DEPRECATED # include # endif # include # include #ifdef __cplusplus extern "C" { #endif /* Declared already in ossl_typ.h */ /* typedef struct ui_st UI; */ /* typedef struct ui_method_st UI_METHOD; */ /* * All the following functions return -1 or NULL on error and in some cases * (UI_process()) -2 if interrupted or in some other way cancelled. When * everything is fine, they return 0, a positive value or a non-NULL pointer, * all depending on their purpose. */ /* Creators and destructor. */ UI *UI_new(void); UI *UI_new_method(const UI_METHOD *method); void UI_free(UI *ui); /*- The following functions are used to add strings to be printed and prompt strings to prompt for data. The names are UI_{add,dup}__string and UI_{add,dup}_input_boolean. UI_{add,dup}__string have the following meanings: add add a text or prompt string. The pointers given to these functions are used verbatim, no copying is done. dup make a copy of the text or prompt string, then add the copy to the collection of strings in the user interface. The function is a name for the functionality that the given string shall be used for. It can be one of: input use the string as data prompt. verify use the string as verification prompt. This is used to verify a previous input. info use the string for informational output. error use the string for error output. Honestly, there's currently no difference between info and error for the moment. UI_{add,dup}_input_boolean have the same semantics for "add" and "dup", and are typically used when one wants to prompt for a yes/no response. All of the functions in this group take a UI and a prompt string. The string input and verify addition functions also take a flag argument, a buffer for the result to end up with, a minimum input size and a maximum input size (the result buffer MUST be large enough to be able to contain the maximum number of characters). Additionally, the verify addition functions takes another buffer to compare the result against. The boolean input functions take an action description string (which should be safe to ignore if the expected user action is obvious, for example with a dialog box with an OK button and a Cancel button), a string of acceptable characters to mean OK and to mean Cancel. The two last strings are checked to make sure they don't have common characters. Additionally, the same flag argument as for the string input is taken, as well as a result buffer. The result buffer is required to be at least one byte long. Depending on the answer, the first character from the OK or the Cancel character strings will be stored in the first byte of the result buffer. No NUL will be added, so the result is *not* a string. On success, the all return an index of the added information. That index is usefull when retrieving results with UI_get0_result(). */ int UI_add_input_string(UI *ui, const char *prompt, int flags, char *result_buf, int minsize, int maxsize); int UI_dup_input_string(UI *ui, const char *prompt, int flags, char *result_buf, int minsize, int maxsize); int UI_add_verify_string(UI *ui, const char *prompt, int flags, char *result_buf, int minsize, int maxsize, const char *test_buf); int UI_dup_verify_string(UI *ui, const char *prompt, int flags, char *result_buf, int minsize, int maxsize, const char *test_buf); int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc, const char *ok_chars, const char *cancel_chars, int flags, char *result_buf); int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc, const char *ok_chars, const char *cancel_chars, int flags, char *result_buf); int UI_add_info_string(UI *ui, const char *text); int UI_dup_info_string(UI *ui, const char *text); int UI_add_error_string(UI *ui, const char *text); int UI_dup_error_string(UI *ui, const char *text); /* These are the possible flags. They can be or'ed together. */ /* Use to have echoing of input */ # define UI_INPUT_FLAG_ECHO 0x01 /* * Use a default password. Where that password is found is completely up to * the application, it might for example be in the user data set with * UI_add_user_data(). It is not recommended to have more than one input in * each UI being marked with this flag, or the application might get * confused. */ # define UI_INPUT_FLAG_DEFAULT_PWD 0x02 /*- * The user of these routines may want to define flags of their own. The core * UI won't look at those, but will pass them on to the method routines. They * must use higher bits so they don't get confused with the UI bits above. * UI_INPUT_FLAG_USER_BASE tells which is the lowest bit to use. A good * example of use is this: * * #define MY_UI_FLAG1 (0x01 << UI_INPUT_FLAG_USER_BASE) * */ # define UI_INPUT_FLAG_USER_BASE 16 /*- * The following function helps construct a prompt. object_desc is a * textual short description of the object, for example "pass phrase", * and object_name is the name of the object (might be a card name or * a file name. * The returned string shall always be allocated on the heap with * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). * * If the ui_method doesn't contain a pointer to a user-defined prompt * constructor, a default string is built, looking like this: * * "Enter {object_desc} for {object_name}:" * * So, if object_desc has the value "pass phrase" and object_name has * the value "foo.key", the resulting string is: * * "Enter pass phrase for foo.key:" */ char *UI_construct_prompt(UI *ui_method, const char *object_desc, const char *object_name); /* * The following function is used to store a pointer to user-specific data. * Any previous such pointer will be returned and replaced. * * For callback purposes, this function makes a lot more sense than using * ex_data, since the latter requires that different parts of OpenSSL or * applications share the same ex_data index. * * Note that the UI_OpenSSL() method completely ignores the user data. Other * methods may not, however. */ void *UI_add_user_data(UI *ui, void *user_data); /* We need a user data retrieving function as well. */ void *UI_get0_user_data(UI *ui); /* Return the result associated with a prompt given with the index i. */ const char *UI_get0_result(UI *ui, int i); /* When all strings have been added, process the whole thing. */ int UI_process(UI *ui); /* * Give a user interface parametrised control commands. This can be used to * send down an integer, a data pointer or a function pointer, as well as be * used to get information from a UI. */ int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); /* The commands */ /* * Use UI_CONTROL_PRINT_ERRORS with the value 1 to have UI_process print the * OpenSSL error stack before printing any info or added error messages and * before any prompting. */ # define UI_CTRL_PRINT_ERRORS 1 /* * Check if a UI_process() is possible to do again with the same instance of * a user interface. This makes UI_ctrl() return 1 if it is redoable, and 0 * if not. */ # define UI_CTRL_IS_REDOABLE 2 /* Some methods may use extra data */ # define UI_set_app_data(s,arg) UI_set_ex_data(s,0,arg) # define UI_get_app_data(s) UI_get_ex_data(s,0) int UI_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); int UI_set_ex_data(UI *r, int idx, void *arg); void *UI_get_ex_data(UI *r, int idx); /* Use specific methods instead of the built-in one */ void UI_set_default_method(const UI_METHOD *meth); const UI_METHOD *UI_get_default_method(void); const UI_METHOD *UI_get_method(UI *ui); const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth); /* The method with all the built-in thingies */ UI_METHOD *UI_OpenSSL(void); /* ---------- For method writers ---------- */ /*- A method contains a number of functions that implement the low level of the User Interface. The functions are: an opener This function starts a session, maybe by opening a channel to a tty, or by opening a window. a writer This function is called to write a given string, maybe to the tty, maybe as a field label in a window. a flusher This function is called to flush everything that has been output so far. It can be used to actually display a dialog box after it has been built. a reader This function is called to read a given prompt, maybe from the tty, maybe from a field in a window. Note that it's called wth all string structures, not only the prompt ones, so it must check such things itself. a closer This function closes the session, maybe by closing the channel to the tty, or closing the window. All these functions are expected to return: 0 on error. 1 on success. -1 on out-of-band events, for example if some prompting has been canceled (by pressing Ctrl-C, for example). This is only checked when returned by the flusher or the reader. The way this is used, the opener is first called, then the writer for all strings, then the flusher, then the reader for all strings and finally the closer. Note that if you want to prompt from a terminal or other command line interface, the best is to have the reader also write the prompts instead of having the writer do it. If you want to prompt from a dialog box, the writer can be used to build up the contents of the box, and the flusher to actually display the box and run the event loop until all data has been given, after which the reader only grabs the given data and puts them back into the UI strings. All method functions take a UI as argument. Additionally, the writer and the reader take a UI_STRING. */ /* * The UI_STRING type is the data structure that contains all the needed info * about a string or a prompt, including test data for a verification prompt. */ typedef struct ui_string_st UI_STRING; DECLARE_STACK_OF(UI_STRING) /* * The different types of strings that are currently supported. This is only * needed by method authors. */ enum UI_string_types { UIT_NONE = 0, UIT_PROMPT, /* Prompt for a string */ UIT_VERIFY, /* Prompt for a string and verify */ UIT_BOOLEAN, /* Prompt for a yes/no response */ UIT_INFO, /* Send info to the user */ UIT_ERROR /* Send an error message to the user */ }; /* Create and manipulate methods */ UI_METHOD *UI_create_method(char *name); void UI_destroy_method(UI_METHOD *ui_method); int UI_method_set_opener(UI_METHOD *method, int (*opener) (UI *ui)); int UI_method_set_writer(UI_METHOD *method, int (*writer) (UI *ui, UI_STRING *uis)); int UI_method_set_flusher(UI_METHOD *method, int (*flusher) (UI *ui)); int UI_method_set_reader(UI_METHOD *method, int (*reader) (UI *ui, UI_STRING *uis)); int UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui)); int UI_method_set_prompt_constructor(UI_METHOD *method, char *(*prompt_constructor) (UI *ui, const char *object_desc, const char *object_name)); int (*UI_method_get_opener(UI_METHOD *method)) (UI *); int (*UI_method_get_writer(UI_METHOD *method)) (UI *, UI_STRING *); int (*UI_method_get_flusher(UI_METHOD *method)) (UI *); int (*UI_method_get_reader(UI_METHOD *method)) (UI *, UI_STRING *); int (*UI_method_get_closer(UI_METHOD *method)) (UI *); char *(*UI_method_get_prompt_constructor(UI_METHOD *method)) (UI *, const char *, const char *); /* * The following functions are helpers for method writers to access relevant * data from a UI_STRING. */ /* Return type of the UI_STRING */ enum UI_string_types UI_get_string_type(UI_STRING *uis); /* Return input flags of the UI_STRING */ int UI_get_input_flags(UI_STRING *uis); /* Return the actual string to output (the prompt, info or error) */ const char *UI_get0_output_string(UI_STRING *uis); /* * Return the optional action string to output (the boolean promtp * instruction) */ const char *UI_get0_action_string(UI_STRING *uis); /* Return the result of a prompt */ const char *UI_get0_result_string(UI_STRING *uis); /* * Return the string to test the result against. Only useful with verifies. */ const char *UI_get0_test_string(UI_STRING *uis); /* Return the required minimum size of the result */ int UI_get_result_minsize(UI_STRING *uis); /* Return the required maximum size of the result */ int UI_get_result_maxsize(UI_STRING *uis); /* Set the result of a UI_STRING. */ int UI_set_result(UI *ui, UI_STRING *uis, const char *result); /* A couple of popular utility functions */ int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, int verify); int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, int verify); /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_UI_strings(void); /* Error codes for the UI functions. */ /* Function codes. */ # define UI_F_GENERAL_ALLOCATE_BOOLEAN 108 # define UI_F_GENERAL_ALLOCATE_PROMPT 109 # define UI_F_GENERAL_ALLOCATE_STRING 100 # define UI_F_UI_CTRL 111 # define UI_F_UI_DUP_ERROR_STRING 101 # define UI_F_UI_DUP_INFO_STRING 102 # define UI_F_UI_DUP_INPUT_BOOLEAN 110 # define UI_F_UI_DUP_INPUT_STRING 103 # define UI_F_UI_DUP_VERIFY_STRING 106 # define UI_F_UI_GET0_RESULT 107 # define UI_F_UI_NEW_METHOD 104 # define UI_F_UI_SET_RESULT 105 /* Reason codes. */ # define UI_R_COMMON_OK_AND_CANCEL_CHARACTERS 104 # define UI_R_INDEX_TOO_LARGE 102 # define UI_R_INDEX_TOO_SMALL 103 # define UI_R_NO_RESULT_BUFFER 105 # define UI_R_RESULT_TOO_LARGE 100 # define UI_R_RESULT_TOO_SMALL 101 # define UI_R_UNKNOWN_CONTROL_COMMAND 106 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/ui_compat.h ================================================ /* crypto/ui/ui.h */ /* * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project * 2001. */ /* ==================================================================== * Copyright (c) 2001 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_UI_COMPAT_H # define HEADER_UI_COMPAT_H # include # include #ifdef __cplusplus extern "C" { #endif /* * The following functions were previously part of the DES section, and are * provided here for backward compatibility reasons. */ # define des_read_pw_string(b,l,p,v) \ _ossl_old_des_read_pw_string((b),(l),(p),(v)) # define des_read_pw(b,bf,s,p,v) \ _ossl_old_des_read_pw((b),(bf),(s),(p),(v)) int _ossl_old_des_read_pw_string(char *buf, int length, const char *prompt, int verify); int _ossl_old_des_read_pw(char *buf, char *buff, int size, const char *prompt, int verify); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/whrlpool.h ================================================ #ifndef HEADER_WHRLPOOL_H # define HEADER_WHRLPOOL_H # include # include #ifdef __cplusplus extern "C" { #endif # define WHIRLPOOL_DIGEST_LENGTH (512/8) # define WHIRLPOOL_BBLOCK 512 # define WHIRLPOOL_COUNTER (256/8) typedef struct { union { unsigned char c[WHIRLPOOL_DIGEST_LENGTH]; /* double q is here to ensure 64-bit alignment */ double q[WHIRLPOOL_DIGEST_LENGTH / sizeof(double)]; } H; unsigned char data[WHIRLPOOL_BBLOCK / 8]; unsigned int bitoff; size_t bitlen[WHIRLPOOL_COUNTER / sizeof(size_t)]; } WHIRLPOOL_CTX; # ifndef OPENSSL_NO_WHIRLPOOL # ifdef OPENSSL_FIPS int private_WHIRLPOOL_Init(WHIRLPOOL_CTX *c); # endif int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *inp, size_t bytes); void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *inp, size_t bits); int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md); # endif #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/x509.h ================================================ /* crypto/x509/x509.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ /* ==================================================================== * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. * ECDH support in OpenSSL originally developed by * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. */ #ifndef HEADER_X509_H # define HEADER_X509_H # include # include # ifndef OPENSSL_NO_BUFFER # include # endif # ifndef OPENSSL_NO_EVP # include # endif # ifndef OPENSSL_NO_BIO # include # endif # include # include # include # ifndef OPENSSL_NO_EC # include # endif # ifndef OPENSSL_NO_ECDSA # include # endif # ifndef OPENSSL_NO_ECDH # include # endif # ifndef OPENSSL_NO_DEPRECATED # ifndef OPENSSL_NO_RSA # include # endif # ifndef OPENSSL_NO_DSA # include # endif # ifndef OPENSSL_NO_DH # include # endif # endif # ifndef OPENSSL_NO_SHA # include # endif # include #ifdef __cplusplus extern "C" { #endif # ifdef OPENSSL_SYS_WIN32 /* Under Win32 these are defined in wincrypt.h */ # undef X509_NAME # undef X509_CERT_PAIR # undef X509_EXTENSIONS # endif # define X509_FILETYPE_PEM 1 # define X509_FILETYPE_ASN1 2 # define X509_FILETYPE_DEFAULT 3 # define X509v3_KU_DIGITAL_SIGNATURE 0x0080 # define X509v3_KU_NON_REPUDIATION 0x0040 # define X509v3_KU_KEY_ENCIPHERMENT 0x0020 # define X509v3_KU_DATA_ENCIPHERMENT 0x0010 # define X509v3_KU_KEY_AGREEMENT 0x0008 # define X509v3_KU_KEY_CERT_SIGN 0x0004 # define X509v3_KU_CRL_SIGN 0x0002 # define X509v3_KU_ENCIPHER_ONLY 0x0001 # define X509v3_KU_DECIPHER_ONLY 0x8000 # define X509v3_KU_UNDEF 0xffff typedef struct X509_objects_st { int nid; int (*a2i) (void); int (*i2a) (void); } X509_OBJECTS; struct X509_algor_st { ASN1_OBJECT *algorithm; ASN1_TYPE *parameter; } /* X509_ALGOR */ ; DECLARE_ASN1_SET_OF(X509_ALGOR) typedef STACK_OF(X509_ALGOR) X509_ALGORS; typedef struct X509_val_st { ASN1_TIME *notBefore; ASN1_TIME *notAfter; } X509_VAL; struct X509_pubkey_st { X509_ALGOR *algor; ASN1_BIT_STRING *public_key; EVP_PKEY *pkey; }; typedef struct X509_sig_st { X509_ALGOR *algor; ASN1_OCTET_STRING *digest; } X509_SIG; typedef struct X509_name_entry_st { ASN1_OBJECT *object; ASN1_STRING *value; int set; int size; /* temp variable */ } X509_NAME_ENTRY; DECLARE_STACK_OF(X509_NAME_ENTRY) DECLARE_ASN1_SET_OF(X509_NAME_ENTRY) /* we always keep X509_NAMEs in 2 forms. */ struct X509_name_st { STACK_OF(X509_NAME_ENTRY) *entries; int modified; /* true if 'bytes' needs to be built */ # ifndef OPENSSL_NO_BUFFER BUF_MEM *bytes; # else char *bytes; # endif /* unsigned long hash; Keep the hash around for lookups */ unsigned char *canon_enc; int canon_enclen; } /* X509_NAME */ ; DECLARE_STACK_OF(X509_NAME) # define X509_EX_V_NETSCAPE_HACK 0x8000 # define X509_EX_V_INIT 0x0001 typedef struct X509_extension_st { ASN1_OBJECT *object; ASN1_BOOLEAN critical; ASN1_OCTET_STRING *value; } X509_EXTENSION; typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; DECLARE_STACK_OF(X509_EXTENSION) DECLARE_ASN1_SET_OF(X509_EXTENSION) /* a sequence of these are used */ typedef struct x509_attributes_st { ASN1_OBJECT *object; int single; /* 0 for a set, 1 for a single item (which is * wrong) */ union { char *ptr; /* * 0 */ STACK_OF(ASN1_TYPE) *set; /* * 1 */ ASN1_TYPE *single; } value; } X509_ATTRIBUTE; DECLARE_STACK_OF(X509_ATTRIBUTE) DECLARE_ASN1_SET_OF(X509_ATTRIBUTE) typedef struct X509_req_info_st { ASN1_ENCODING enc; ASN1_INTEGER *version; X509_NAME *subject; X509_PUBKEY *pubkey; /* d=2 hl=2 l= 0 cons: cont: 00 */ STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */ } X509_REQ_INFO; typedef struct X509_req_st { X509_REQ_INFO *req_info; X509_ALGOR *sig_alg; ASN1_BIT_STRING *signature; int references; } X509_REQ; typedef struct x509_cinf_st { ASN1_INTEGER *version; /* [ 0 ] default of v1 */ ASN1_INTEGER *serialNumber; X509_ALGOR *signature; X509_NAME *issuer; X509_VAL *validity; X509_NAME *subject; X509_PUBKEY *key; ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */ ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */ STACK_OF(X509_EXTENSION) *extensions; /* [ 3 ] optional in v3 */ ASN1_ENCODING enc; } X509_CINF; /* * This stuff is certificate "auxiliary info" it contains details which are * useful in certificate stores and databases. When used this is tagged onto * the end of the certificate itself */ typedef struct x509_cert_aux_st { STACK_OF(ASN1_OBJECT) *trust; /* trusted uses */ STACK_OF(ASN1_OBJECT) *reject; /* rejected uses */ ASN1_UTF8STRING *alias; /* "friendly name" */ ASN1_OCTET_STRING *keyid; /* key id of private key */ STACK_OF(X509_ALGOR) *other; /* other unspecified info */ } X509_CERT_AUX; struct x509_st { X509_CINF *cert_info; X509_ALGOR *sig_alg; ASN1_BIT_STRING *signature; int valid; int references; char *name; CRYPTO_EX_DATA ex_data; /* These contain copies of various extension values */ long ex_pathlen; long ex_pcpathlen; unsigned long ex_flags; unsigned long ex_kusage; unsigned long ex_xkusage; unsigned long ex_nscert; ASN1_OCTET_STRING *skid; AUTHORITY_KEYID *akid; X509_POLICY_CACHE *policy_cache; STACK_OF(DIST_POINT) *crldp; STACK_OF(GENERAL_NAME) *altname; NAME_CONSTRAINTS *nc; # ifndef OPENSSL_NO_RFC3779 STACK_OF(IPAddressFamily) *rfc3779_addr; struct ASIdentifiers_st *rfc3779_asid; # endif # ifndef OPENSSL_NO_SHA unsigned char sha1_hash[SHA_DIGEST_LENGTH]; # endif X509_CERT_AUX *aux; } /* X509 */ ; DECLARE_STACK_OF(X509) DECLARE_ASN1_SET_OF(X509) /* This is used for a table of trust checking functions */ typedef struct x509_trust_st { int trust; int flags; int (*check_trust) (struct x509_trust_st *, X509 *, int); char *name; int arg1; void *arg2; } X509_TRUST; DECLARE_STACK_OF(X509_TRUST) typedef struct x509_cert_pair_st { X509 *forward; X509 *reverse; } X509_CERT_PAIR; /* standard trust ids */ # define X509_TRUST_DEFAULT -1/* Only valid in purpose settings */ # define X509_TRUST_COMPAT 1 # define X509_TRUST_SSL_CLIENT 2 # define X509_TRUST_SSL_SERVER 3 # define X509_TRUST_EMAIL 4 # define X509_TRUST_OBJECT_SIGN 5 # define X509_TRUST_OCSP_SIGN 6 # define X509_TRUST_OCSP_REQUEST 7 # define X509_TRUST_TSA 8 /* Keep these up to date! */ # define X509_TRUST_MIN 1 # define X509_TRUST_MAX 8 /* trust_flags values */ # define X509_TRUST_DYNAMIC 1 # define X509_TRUST_DYNAMIC_NAME 2 /* check_trust return codes */ # define X509_TRUST_TRUSTED 1 # define X509_TRUST_REJECTED 2 # define X509_TRUST_UNTRUSTED 3 /* Flags for X509_print_ex() */ # define X509_FLAG_COMPAT 0 # define X509_FLAG_NO_HEADER 1L # define X509_FLAG_NO_VERSION (1L << 1) # define X509_FLAG_NO_SERIAL (1L << 2) # define X509_FLAG_NO_SIGNAME (1L << 3) # define X509_FLAG_NO_ISSUER (1L << 4) # define X509_FLAG_NO_VALIDITY (1L << 5) # define X509_FLAG_NO_SUBJECT (1L << 6) # define X509_FLAG_NO_PUBKEY (1L << 7) # define X509_FLAG_NO_EXTENSIONS (1L << 8) # define X509_FLAG_NO_SIGDUMP (1L << 9) # define X509_FLAG_NO_AUX (1L << 10) # define X509_FLAG_NO_ATTRIBUTES (1L << 11) # define X509_FLAG_NO_IDS (1L << 12) /* Flags specific to X509_NAME_print_ex() */ /* The field separator information */ # define XN_FLAG_SEP_MASK (0xf << 16) # define XN_FLAG_COMPAT 0/* Traditional SSLeay: use old * X509_NAME_print */ # define XN_FLAG_SEP_COMMA_PLUS (1 << 16)/* RFC2253 ,+ */ # define XN_FLAG_SEP_CPLUS_SPC (2 << 16)/* ,+ spaced: more readable */ # define XN_FLAG_SEP_SPLUS_SPC (3 << 16)/* ;+ spaced */ # define XN_FLAG_SEP_MULTILINE (4 << 16)/* One line per field */ # define XN_FLAG_DN_REV (1 << 20)/* Reverse DN order */ /* How the field name is shown */ # define XN_FLAG_FN_MASK (0x3 << 21) # define XN_FLAG_FN_SN 0/* Object short name */ # define XN_FLAG_FN_LN (1 << 21)/* Object long name */ # define XN_FLAG_FN_OID (2 << 21)/* Always use OIDs */ # define XN_FLAG_FN_NONE (3 << 21)/* No field names */ # define XN_FLAG_SPC_EQ (1 << 23)/* Put spaces round '=' */ /* * This determines if we dump fields we don't recognise: RFC2253 requires * this. */ # define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24) # define XN_FLAG_FN_ALIGN (1 << 25)/* Align field names to 20 * characters */ /* Complete set of RFC2253 flags */ # define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \ XN_FLAG_SEP_COMMA_PLUS | \ XN_FLAG_DN_REV | \ XN_FLAG_FN_SN | \ XN_FLAG_DUMP_UNKNOWN_FIELDS) /* readable oneline form */ # define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \ ASN1_STRFLGS_ESC_QUOTE | \ XN_FLAG_SEP_CPLUS_SPC | \ XN_FLAG_SPC_EQ | \ XN_FLAG_FN_SN) /* readable multiline form */ # define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \ ASN1_STRFLGS_ESC_MSB | \ XN_FLAG_SEP_MULTILINE | \ XN_FLAG_SPC_EQ | \ XN_FLAG_FN_LN | \ XN_FLAG_FN_ALIGN) struct x509_revoked_st { ASN1_INTEGER *serialNumber; ASN1_TIME *revocationDate; STACK_OF(X509_EXTENSION) /* optional */ *extensions; /* Set up if indirect CRL */ STACK_OF(GENERAL_NAME) *issuer; /* Revocation reason */ int reason; int sequence; /* load sequence */ }; DECLARE_STACK_OF(X509_REVOKED) DECLARE_ASN1_SET_OF(X509_REVOKED) typedef struct X509_crl_info_st { ASN1_INTEGER *version; X509_ALGOR *sig_alg; X509_NAME *issuer; ASN1_TIME *lastUpdate; ASN1_TIME *nextUpdate; STACK_OF(X509_REVOKED) *revoked; STACK_OF(X509_EXTENSION) /* [0] */ *extensions; ASN1_ENCODING enc; } X509_CRL_INFO; struct X509_crl_st { /* actual signature */ X509_CRL_INFO *crl; X509_ALGOR *sig_alg; ASN1_BIT_STRING *signature; int references; int flags; /* Copies of various extensions */ AUTHORITY_KEYID *akid; ISSUING_DIST_POINT *idp; /* Convenient breakdown of IDP */ int idp_flags; int idp_reasons; /* CRL and base CRL numbers for delta processing */ ASN1_INTEGER *crl_number; ASN1_INTEGER *base_crl_number; # ifndef OPENSSL_NO_SHA unsigned char sha1_hash[SHA_DIGEST_LENGTH]; # endif STACK_OF(GENERAL_NAMES) *issuers; const X509_CRL_METHOD *meth; void *meth_data; } /* X509_CRL */ ; DECLARE_STACK_OF(X509_CRL) DECLARE_ASN1_SET_OF(X509_CRL) typedef struct private_key_st { int version; /* The PKCS#8 data types */ X509_ALGOR *enc_algor; ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */ /* When decrypted, the following will not be NULL */ EVP_PKEY *dec_pkey; /* used to encrypt and decrypt */ int key_length; char *key_data; int key_free; /* true if we should auto free key_data */ /* expanded version of 'enc_algor' */ EVP_CIPHER_INFO cipher; int references; } X509_PKEY; # ifndef OPENSSL_NO_EVP typedef struct X509_info_st { X509 *x509; X509_CRL *crl; X509_PKEY *x_pkey; EVP_CIPHER_INFO enc_cipher; int enc_len; char *enc_data; int references; } X509_INFO; DECLARE_STACK_OF(X509_INFO) # endif /* * The next 2 structures and their 8 routines were sent to me by Pat Richard * and are used to manipulate Netscapes spki structures - * useful if you are writing a CA web page */ typedef struct Netscape_spkac_st { X509_PUBKEY *pubkey; ASN1_IA5STRING *challenge; /* challenge sent in atlas >= PR2 */ } NETSCAPE_SPKAC; typedef struct Netscape_spki_st { NETSCAPE_SPKAC *spkac; /* signed public key and challenge */ X509_ALGOR *sig_algor; ASN1_BIT_STRING *signature; } NETSCAPE_SPKI; /* Netscape certificate sequence structure */ typedef struct Netscape_certificate_sequence { ASN1_OBJECT *type; STACK_OF(X509) *certs; } NETSCAPE_CERT_SEQUENCE; /*- Unused (and iv length is wrong) typedef struct CBCParameter_st { unsigned char iv[8]; } CBC_PARAM; */ /* Password based encryption structure */ typedef struct PBEPARAM_st { ASN1_OCTET_STRING *salt; ASN1_INTEGER *iter; } PBEPARAM; /* Password based encryption V2 structures */ typedef struct PBE2PARAM_st { X509_ALGOR *keyfunc; X509_ALGOR *encryption; } PBE2PARAM; typedef struct PBKDF2PARAM_st { /* Usually OCTET STRING but could be anything */ ASN1_TYPE *salt; ASN1_INTEGER *iter; ASN1_INTEGER *keylength; X509_ALGOR *prf; } PBKDF2PARAM; /* PKCS#8 private key info structure */ struct pkcs8_priv_key_info_st { /* Flag for various broken formats */ int broken; # define PKCS8_OK 0 # define PKCS8_NO_OCTET 1 # define PKCS8_EMBEDDED_PARAM 2 # define PKCS8_NS_DB 3 # define PKCS8_NEG_PRIVKEY 4 ASN1_INTEGER *version; X509_ALGOR *pkeyalg; /* Should be OCTET STRING but some are broken */ ASN1_TYPE *pkey; STACK_OF(X509_ATTRIBUTE) *attributes; }; #ifdef __cplusplus } #endif # include # include #ifdef __cplusplus extern "C" { #endif # define X509_EXT_PACK_UNKNOWN 1 # define X509_EXT_PACK_STRING 2 # define X509_get_version(x) ASN1_INTEGER_get((x)->cert_info->version) /* #define X509_get_serialNumber(x) ((x)->cert_info->serialNumber) */ # define X509_get_notBefore(x) ((x)->cert_info->validity->notBefore) # define X509_get_notAfter(x) ((x)->cert_info->validity->notAfter) # define X509_extract_key(x) X509_get_pubkey(x)/*****/ # define X509_REQ_get_version(x) ASN1_INTEGER_get((x)->req_info->version) # define X509_REQ_get_subject_name(x) ((x)->req_info->subject) # define X509_REQ_extract_key(a) X509_REQ_get_pubkey(a) # define X509_name_cmp(a,b) X509_NAME_cmp((a),(b)) # define X509_get_signature_type(x) EVP_PKEY_type(OBJ_obj2nid((x)->sig_alg->algorithm)) # define X509_CRL_get_version(x) ASN1_INTEGER_get((x)->crl->version) # define X509_CRL_get_lastUpdate(x) ((x)->crl->lastUpdate) # define X509_CRL_get_nextUpdate(x) ((x)->crl->nextUpdate) # define X509_CRL_get_issuer(x) ((x)->crl->issuer) # define X509_CRL_get_REVOKED(x) ((x)->crl->revoked) void X509_CRL_set_default_method(const X509_CRL_METHOD *meth); X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl), int (*crl_free) (X509_CRL *crl), int (*crl_lookup) (X509_CRL *crl, X509_REVOKED **ret, ASN1_INTEGER *ser, X509_NAME *issuer), int (*crl_verify) (X509_CRL *crl, EVP_PKEY *pk)); void X509_CRL_METHOD_free(X509_CRL_METHOD *m); void X509_CRL_set_meth_data(X509_CRL *crl, void *dat); void *X509_CRL_get_meth_data(X509_CRL *crl); /* * This one is only used so that a binary form can output, as in * i2d_X509_NAME(X509_get_X509_PUBKEY(x),&buf) */ # define X509_get_X509_PUBKEY(x) ((x)->cert_info->key) const char *X509_verify_cert_error_string(long n); # ifndef OPENSSL_NO_EVP int X509_verify(X509 *a, EVP_PKEY *r); int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len); char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x); EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x); int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey); int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki); int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent); int X509_signature_print(BIO *bp, X509_ALGOR *alg, ASN1_STRING *sig); int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert); int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl); int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); int X509_pubkey_digest(const X509 *data, const EVP_MD *type, unsigned char *md, unsigned int *len); int X509_digest(const X509 *data, const EVP_MD *type, unsigned char *md, unsigned int *len); int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, unsigned char *md, unsigned int *len); int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, unsigned char *md, unsigned int *len); int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, unsigned char *md, unsigned int *len); # endif # ifndef OPENSSL_NO_FP_API X509 *d2i_X509_fp(FILE *fp, X509 **x509); int i2d_X509_fp(FILE *fp, X509 *x509); X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl); X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req); # ifndef OPENSSL_NO_RSA RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa); RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa); RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa); # endif # ifndef OPENSSL_NO_DSA DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa); DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa); # endif # ifndef OPENSSL_NO_EC EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey); EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey); # endif X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8); PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO **p8inf); int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf); int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key); int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey); EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey); EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); # endif # ifndef OPENSSL_NO_BIO X509 *d2i_X509_bio(BIO *bp, X509 **x509); int i2d_X509_bio(BIO *bp, X509 *x509); X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl); X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req); # ifndef OPENSSL_NO_RSA RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa); RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa); RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa); # endif # ifndef OPENSSL_NO_DSA DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa); DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa); # endif # ifndef OPENSSL_NO_EC EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey); EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey); # endif X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8); PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO **p8inf); int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf); int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key); int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey); EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey); EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); # endif X509 *X509_dup(X509 *x509); X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa); X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex); X509_CRL *X509_CRL_dup(X509_CRL *crl); X509_REVOKED *X509_REVOKED_dup(X509_REVOKED *rev); X509_REQ *X509_REQ_dup(X509_REQ *req); X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn); int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval); void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval, X509_ALGOR *algor); void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); X509_NAME *X509_NAME_dup(X509_NAME *xn); X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne); int X509_cmp_time(const ASN1_TIME *s, time_t *t); int X509_cmp_current_time(const ASN1_TIME *s); ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, int offset_day, long offset_sec, time_t *t); ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj); const char *X509_get_default_cert_area(void); const char *X509_get_default_cert_dir(void); const char *X509_get_default_cert_file(void); const char *X509_get_default_cert_dir_env(void); const char *X509_get_default_cert_file_env(void); const char *X509_get_default_private_dir(void); X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey); DECLARE_ASN1_FUNCTIONS(X509_ALGOR) DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS) DECLARE_ASN1_FUNCTIONS(X509_VAL) DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key); int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp); EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length); # ifndef OPENSSL_NO_RSA int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp); RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length); # endif # ifndef OPENSSL_NO_DSA int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp); DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); # endif # ifndef OPENSSL_NO_EC int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp); EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length); # endif DECLARE_ASN1_FUNCTIONS(X509_SIG) DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) DECLARE_ASN1_FUNCTIONS(X509_REQ) DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); DECLARE_ASN1_FUNCTIONS(X509_EXTENSION) DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS) DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) DECLARE_ASN1_FUNCTIONS(X509_NAME) int X509_NAME_set(X509_NAME **xn, X509_NAME *name); DECLARE_ASN1_FUNCTIONS(X509_CINF) DECLARE_ASN1_FUNCTIONS(X509) DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) DECLARE_ASN1_FUNCTIONS(X509_CERT_PAIR) int X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); int X509_set_ex_data(X509 *r, int idx, void *arg); void *X509_get_ex_data(X509 *r, int idx); int i2d_X509_AUX(X509 *a, unsigned char **pp); X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length); int i2d_re_X509_tbs(X509 *x, unsigned char **pp); void X509_get0_signature(ASN1_BIT_STRING **psig, X509_ALGOR **palg, const X509 *x); int X509_get_signature_nid(const X509 *x); int X509_alias_set1(X509 *x, unsigned char *name, int len); int X509_keyid_set1(X509 *x, unsigned char *id, int len); unsigned char *X509_alias_get0(X509 *x, int *len); unsigned char *X509_keyid_get0(X509 *x, int *len); int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, int); int X509_TRUST_set(int *t, int trust); int X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj); int X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj); void X509_trust_clear(X509 *x); void X509_reject_clear(X509 *x); DECLARE_ASN1_FUNCTIONS(X509_REVOKED) DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) DECLARE_ASN1_FUNCTIONS(X509_CRL) int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); int X509_CRL_get0_by_serial(X509_CRL *crl, X509_REVOKED **ret, ASN1_INTEGER *serial); int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); X509_PKEY *X509_PKEY_new(void); void X509_PKEY_free(X509_PKEY *a); int i2d_X509_PKEY(X509_PKEY *a, unsigned char **pp); X509_PKEY *d2i_X509_PKEY(X509_PKEY **a, const unsigned char **pp, long length); DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC) DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE) # ifndef OPENSSL_NO_EVP X509_INFO *X509_INFO_new(void); void X509_INFO_free(X509_INFO *a); char *X509_NAME_oneline(X509_NAME *a, char *buf, int size); int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, unsigned char *md, unsigned int *len); int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2, ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey, const EVP_MD *type); int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, unsigned char *md, unsigned int *len); int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1, ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey); int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey, const EVP_MD *type); int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *asn, EVP_MD_CTX *ctx); # endif int X509_set_version(X509 *x, long version); int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); ASN1_INTEGER *X509_get_serialNumber(X509 *x); int X509_set_issuer_name(X509 *x, X509_NAME *name); X509_NAME *X509_get_issuer_name(X509 *a); int X509_set_subject_name(X509 *x, X509_NAME *name); X509_NAME *X509_get_subject_name(X509 *a); int X509_set_notBefore(X509 *x, const ASN1_TIME *tm); int X509_set_notAfter(X509 *x, const ASN1_TIME *tm); int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); EVP_PKEY *X509_get_pubkey(X509 *x); ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); int X509_certificate_type(X509 *x, EVP_PKEY *pubkey /* optional */ ); int X509_REQ_set_version(X509_REQ *x, long version); int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); int X509_REQ_extension_nid(int nid); int *X509_REQ_get_extension_nids(void); void X509_REQ_set_extension_nids(int *nids); STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts, int nid); int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts); int X509_REQ_get_attr_count(const X509_REQ *req); int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, ASN1_OBJECT *obj, int lastpos); X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc); X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc); int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr); int X509_REQ_add1_attr_by_OBJ(X509_REQ *req, const ASN1_OBJECT *obj, int type, const unsigned char *bytes, int len); int X509_REQ_add1_attr_by_NID(X509_REQ *req, int nid, int type, const unsigned char *bytes, int len); int X509_REQ_add1_attr_by_txt(X509_REQ *req, const char *attrname, int type, const unsigned char *bytes, int len); int X509_CRL_set_version(X509_CRL *x, long version); int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name); int X509_CRL_set_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); int X509_CRL_set_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); int X509_CRL_sort(X509_CRL *crl); int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); int X509_check_private_key(X509 *x509, EVP_PKEY *pkey); int X509_chain_check_suiteb(int *perror_depth, X509 *x, STACK_OF(X509) *chain, unsigned long flags); int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags); STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain); int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b); unsigned long X509_issuer_and_serial_hash(X509 *a); int X509_issuer_name_cmp(const X509 *a, const X509 *b); unsigned long X509_issuer_name_hash(X509 *a); int X509_subject_name_cmp(const X509 *a, const X509 *b); unsigned long X509_subject_name_hash(X509 *x); # ifndef OPENSSL_NO_MD5 unsigned long X509_issuer_name_hash_old(X509 *a); unsigned long X509_subject_name_hash_old(X509 *x); # endif int X509_cmp(const X509 *a, const X509 *b); int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); unsigned long X509_NAME_hash(X509_NAME *x); unsigned long X509_NAME_hash_old(X509_NAME *x); int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); # ifndef OPENSSL_NO_FP_API int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag, unsigned long cflag); int X509_print_fp(FILE *bp, X509 *x); int X509_CRL_print_fp(FILE *bp, X509_CRL *x); int X509_REQ_print_fp(FILE *bp, X509_REQ *req); int X509_NAME_print_ex_fp(FILE *fp, X509_NAME *nm, int indent, unsigned long flags); # endif # ifndef OPENSSL_NO_BIO int X509_NAME_print(BIO *bp, X509_NAME *name, int obase); int X509_NAME_print_ex(BIO *out, X509_NAME *nm, int indent, unsigned long flags); int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag, unsigned long cflag); int X509_print(BIO *bp, X509 *x); int X509_ocspid_print(BIO *bp, X509 *x); int X509_CERT_AUX_print(BIO *bp, X509_CERT_AUX *x, int indent); int X509_CRL_print(BIO *bp, X509_CRL *x); int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, unsigned long cflag); int X509_REQ_print(BIO *bp, X509_REQ *req); # endif int X509_NAME_entry_count(X509_NAME *name); int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len); int X509_NAME_get_text_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, char *buf, int len); /* * NOTE: you should be passsing -1, not 0 as lastpos. The functions that use * lastpos, search after that position on. */ int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos); int X509_NAME_get_index_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int lastpos); X509_NAME_ENTRY *X509_NAME_get_entry(X509_NAME *name, int loc); X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); int X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne, int loc, int set); int X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type, unsigned char *bytes, int len, int loc, int set); int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, unsigned char *bytes, int len, int loc, int set); X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, const char *field, int type, const unsigned char *bytes, int len); X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, int type, unsigned char *bytes, int len); int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, const unsigned char *bytes, int len, int loc, int set); X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, ASN1_OBJECT *obj, int type, const unsigned char *bytes, int len); int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, ASN1_OBJECT *obj); int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, const unsigned char *bytes, int len); ASN1_OBJECT *X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne); ASN1_STRING *X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne); int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, int nid, int lastpos); int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x, ASN1_OBJECT *obj, int lastpos); int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x, int crit, int lastpos); X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc); STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, X509_EXTENSION *ex, int loc); int X509_get_ext_count(X509 *x); int X509_get_ext_by_NID(X509 *x, int nid, int lastpos); int X509_get_ext_by_OBJ(X509 *x, ASN1_OBJECT *obj, int lastpos); int X509_get_ext_by_critical(X509 *x, int crit, int lastpos); X509_EXTENSION *X509_get_ext(X509 *x, int loc); X509_EXTENSION *X509_delete_ext(X509 *x, int loc); int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); void *X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx); int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, unsigned long flags); int X509_CRL_get_ext_count(X509_CRL *x); int X509_CRL_get_ext_by_NID(X509_CRL *x, int nid, int lastpos); int X509_CRL_get_ext_by_OBJ(X509_CRL *x, ASN1_OBJECT *obj, int lastpos); int X509_CRL_get_ext_by_critical(X509_CRL *x, int crit, int lastpos); X509_EXTENSION *X509_CRL_get_ext(X509_CRL *x, int loc); X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); void *X509_CRL_get_ext_d2i(X509_CRL *x, int nid, int *crit, int *idx); int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit, unsigned long flags); int X509_REVOKED_get_ext_count(X509_REVOKED *x); int X509_REVOKED_get_ext_by_NID(X509_REVOKED *x, int nid, int lastpos); int X509_REVOKED_get_ext_by_OBJ(X509_REVOKED *x, ASN1_OBJECT *obj, int lastpos); int X509_REVOKED_get_ext_by_critical(X509_REVOKED *x, int crit, int lastpos); X509_EXTENSION *X509_REVOKED_get_ext(X509_REVOKED *x, int loc); X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); void *X509_REVOKED_get_ext_d2i(X509_REVOKED *x, int nid, int *crit, int *idx); int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit, unsigned long flags); X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, int nid, int crit, ASN1_OCTET_STRING *data); X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, ASN1_OBJECT *obj, int crit, ASN1_OCTET_STRING *data); int X509_EXTENSION_set_object(X509_EXTENSION *ex, ASN1_OBJECT *obj); int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit); int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data); ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex); ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); int X509_EXTENSION_get_critical(X509_EXTENSION *ex); int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x); int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid, int lastpos); int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, ASN1_OBJECT *obj, int lastpos); X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc); X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc); STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, X509_ATTRIBUTE *attr); STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) **x, const ASN1_OBJECT *obj, int type, const unsigned char *bytes, int len); STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) **x, int nid, int type, const unsigned char *bytes, int len); STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) **x, const char *attrname, int type, const unsigned char *bytes, int len); void *X509at_get0_data_by_OBJ(STACK_OF(X509_ATTRIBUTE) *x, ASN1_OBJECT *obj, int lastpos, int type); X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, int atrtype, const void *data, int len); X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, const ASN1_OBJECT *obj, int atrtype, const void *data, int len); X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, const char *atrname, int type, const unsigned char *bytes, int len); int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj); int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, const void *data, int len); void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype, void *data); int X509_ATTRIBUTE_count(X509_ATTRIBUTE *attr); ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr); ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx); int EVP_PKEY_get_attr_count(const EVP_PKEY *key); int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos); int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, ASN1_OBJECT *obj, int lastpos); X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc); X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc); int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr); int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, const ASN1_OBJECT *obj, int type, const unsigned char *bytes, int len); int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, int nid, int type, const unsigned char *bytes, int len); int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, const char *attrname, int type, const unsigned char *bytes, int len); int X509_verify_cert(X509_STORE_CTX *ctx); /* lookup a cert from a X509 STACK */ X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name, ASN1_INTEGER *serial); X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name); DECLARE_ASN1_FUNCTIONS(PBEPARAM) DECLARE_ASN1_FUNCTIONS(PBE2PARAM) DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM) int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, const unsigned char *salt, int saltlen); X509_ALGOR *PKCS5_pbe_set(int alg, int iter, const unsigned char *salt, int saltlen); X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, unsigned char *salt, int saltlen); X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, unsigned char *salt, int saltlen, unsigned char *aiv, int prf_nid); X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, int prf_nid, int keylen); /* PKCS#8 utilities */ DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) EVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8); PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey); PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken); PKCS8_PRIV_KEY_INFO *PKCS8_set_broken(PKCS8_PRIV_KEY_INFO *p8, int broken); int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, int version, int ptype, void *pval, unsigned char *penc, int penclen); int PKCS8_pkey_get0(ASN1_OBJECT **ppkalg, const unsigned char **pk, int *ppklen, X509_ALGOR **pa, PKCS8_PRIV_KEY_INFO *p8); int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, int ptype, void *pval, unsigned char *penc, int penclen); int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, const unsigned char **pk, int *ppklen, X509_ALGOR **pa, X509_PUBKEY *pub); int X509_check_trust(X509 *x, int id, int flags); int X509_TRUST_get_count(void); X509_TRUST *X509_TRUST_get0(int idx); int X509_TRUST_get_by_id(int id); int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), char *name, int arg1, void *arg2); void X509_TRUST_cleanup(void); int X509_TRUST_get_flags(X509_TRUST *xp); char *X509_TRUST_get0_name(X509_TRUST *xp); int X509_TRUST_get_trust(X509_TRUST *xp); /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_X509_strings(void); /* Error codes for the X509 functions. */ /* Function codes. */ # define X509_F_ADD_CERT_DIR 100 # define X509_F_BY_FILE_CTRL 101 # define X509_F_CHECK_POLICY 145 # define X509_F_DIR_CTRL 102 # define X509_F_GET_CERT_BY_SUBJECT 103 # define X509_F_NETSCAPE_SPKI_B64_DECODE 129 # define X509_F_NETSCAPE_SPKI_B64_ENCODE 130 # define X509_F_X509AT_ADD1_ATTR 135 # define X509_F_X509V3_ADD_EXT 104 # define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 136 # define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 137 # define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 140 # define X509_F_X509_ATTRIBUTE_GET0_DATA 139 # define X509_F_X509_ATTRIBUTE_SET1_DATA 138 # define X509_F_X509_CHECK_PRIVATE_KEY 128 # define X509_F_X509_CRL_DIFF 105 # define X509_F_X509_CRL_PRINT_FP 147 # define X509_F_X509_EXTENSION_CREATE_BY_NID 108 # define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109 # define X509_F_X509_GET_PUBKEY_PARAMETERS 110 # define X509_F_X509_LOAD_CERT_CRL_FILE 132 # define X509_F_X509_LOAD_CERT_FILE 111 # define X509_F_X509_LOAD_CRL_FILE 112 # define X509_F_X509_NAME_ADD_ENTRY 113 # define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114 # define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 131 # define X509_F_X509_NAME_ENTRY_SET_OBJECT 115 # define X509_F_X509_NAME_ONELINE 116 # define X509_F_X509_NAME_PRINT 117 # define X509_F_X509_PRINT_EX_FP 118 # define X509_F_X509_PUBKEY_GET 119 # define X509_F_X509_PUBKEY_SET 120 # define X509_F_X509_REQ_CHECK_PRIVATE_KEY 144 # define X509_F_X509_REQ_PRINT_EX 121 # define X509_F_X509_REQ_PRINT_FP 122 # define X509_F_X509_REQ_TO_X509 123 # define X509_F_X509_STORE_ADD_CERT 124 # define X509_F_X509_STORE_ADD_CRL 125 # define X509_F_X509_STORE_CTX_GET1_ISSUER 146 # define X509_F_X509_STORE_CTX_INIT 143 # define X509_F_X509_STORE_CTX_NEW 142 # define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 134 # define X509_F_X509_TO_X509_REQ 126 # define X509_F_X509_TRUST_ADD 133 # define X509_F_X509_TRUST_SET 141 # define X509_F_X509_VERIFY_CERT 127 /* Reason codes. */ # define X509_R_AKID_MISMATCH 110 # define X509_R_BAD_X509_FILETYPE 100 # define X509_R_BASE64_DECODE_ERROR 118 # define X509_R_CANT_CHECK_DH_KEY 114 # define X509_R_CERT_ALREADY_IN_HASH_TABLE 101 # define X509_R_CRL_ALREADY_DELTA 127 # define X509_R_CRL_VERIFY_FAILURE 131 # define X509_R_ERR_ASN1_LIB 102 # define X509_R_IDP_MISMATCH 128 # define X509_R_INVALID_DIRECTORY 113 # define X509_R_INVALID_FIELD_NAME 119 # define X509_R_INVALID_TRUST 123 # define X509_R_ISSUER_MISMATCH 129 # define X509_R_KEY_TYPE_MISMATCH 115 # define X509_R_KEY_VALUES_MISMATCH 116 # define X509_R_LOADING_CERT_DIR 103 # define X509_R_LOADING_DEFAULTS 104 # define X509_R_METHOD_NOT_SUPPORTED 124 # define X509_R_NAME_TOO_LONG 134 # define X509_R_NEWER_CRL_NOT_NEWER 132 # define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105 # define X509_R_NO_CRL_NUMBER 130 # define X509_R_PUBLIC_KEY_DECODE_ERROR 125 # define X509_R_PUBLIC_KEY_ENCODE_ERROR 126 # define X509_R_SHOULD_RETRY 106 # define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 107 # define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 108 # define X509_R_UNKNOWN_KEY_TYPE 117 # define X509_R_UNKNOWN_NID 109 # define X509_R_UNKNOWN_PURPOSE_ID 121 # define X509_R_UNKNOWN_TRUST_ID 120 # define X509_R_UNSUPPORTED_ALGORITHM 111 # define X509_R_WRONG_LOOKUP_TYPE 112 # define X509_R_WRONG_TYPE 122 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/x509_vfy.h ================================================ /* crypto/x509/x509_vfy.h */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef HEADER_X509_H # include /* * openssl/x509.h ends up #include-ing this file at about the only * appropriate moment. */ #endif #ifndef HEADER_X509_VFY_H # define HEADER_X509_VFY_H # include # ifndef OPENSSL_NO_LHASH # include # endif # include # include # include #ifdef __cplusplus extern "C" { #endif # if 0 /* Outer object */ typedef struct x509_hash_dir_st { int num_dirs; char **dirs; int *dirs_type; int num_dirs_alloced; } X509_HASH_DIR_CTX; # endif typedef struct x509_file_st { int num_paths; /* number of paths to files or directories */ int num_alloced; char **paths; /* the list of paths or directories */ int *path_type; } X509_CERT_FILE_CTX; /*******************************/ /*- SSL_CTX -> X509_STORE -> X509_LOOKUP ->X509_LOOKUP_METHOD -> X509_LOOKUP ->X509_LOOKUP_METHOD SSL -> X509_STORE_CTX ->X509_STORE The X509_STORE holds the tables etc for verification stuff. A X509_STORE_CTX is used while validating a single certificate. The X509_STORE has X509_LOOKUPs for looking up certs. The X509_STORE then calls a function to actually verify the certificate chain. */ # define X509_LU_RETRY -1 # define X509_LU_FAIL 0 # define X509_LU_X509 1 # define X509_LU_CRL 2 # define X509_LU_PKEY 3 typedef struct x509_object_st { /* one of the above types */ int type; union { char *ptr; X509 *x509; X509_CRL *crl; EVP_PKEY *pkey; } data; } X509_OBJECT; typedef struct x509_lookup_st X509_LOOKUP; DECLARE_STACK_OF(X509_LOOKUP) DECLARE_STACK_OF(X509_OBJECT) /* This is a static that defines the function interface */ typedef struct x509_lookup_method_st { const char *name; int (*new_item) (X509_LOOKUP *ctx); void (*free) (X509_LOOKUP *ctx); int (*init) (X509_LOOKUP *ctx); int (*shutdown) (X509_LOOKUP *ctx); int (*ctrl) (X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret); int (*get_by_subject) (X509_LOOKUP *ctx, int type, X509_NAME *name, X509_OBJECT *ret); int (*get_by_issuer_serial) (X509_LOOKUP *ctx, int type, X509_NAME *name, ASN1_INTEGER *serial, X509_OBJECT *ret); int (*get_by_fingerprint) (X509_LOOKUP *ctx, int type, unsigned char *bytes, int len, X509_OBJECT *ret); int (*get_by_alias) (X509_LOOKUP *ctx, int type, char *str, int len, X509_OBJECT *ret); } X509_LOOKUP_METHOD; typedef struct X509_VERIFY_PARAM_ID_st X509_VERIFY_PARAM_ID; /* * This structure hold all parameters associated with a verify operation by * including an X509_VERIFY_PARAM structure in related structures the * parameters used can be customized */ typedef struct X509_VERIFY_PARAM_st { char *name; time_t check_time; /* Time to use */ unsigned long inh_flags; /* Inheritance flags */ unsigned long flags; /* Various verify flags */ int purpose; /* purpose to check untrusted certificates */ int trust; /* trust setting to check */ int depth; /* Verify depth */ STACK_OF(ASN1_OBJECT) *policies; /* Permissible policies */ X509_VERIFY_PARAM_ID *id; /* opaque ID data */ } X509_VERIFY_PARAM; DECLARE_STACK_OF(X509_VERIFY_PARAM) /* * This is used to hold everything. It is used for all certificate * validation. Once we have a certificate chain, the 'verify' function is * then called to actually check the cert chain. */ struct x509_store_st { /* The following is a cache of trusted certs */ int cache; /* if true, stash any hits */ STACK_OF(X509_OBJECT) *objs; /* Cache of all objects */ /* These are external lookup methods */ STACK_OF(X509_LOOKUP) *get_cert_methods; X509_VERIFY_PARAM *param; /* Callbacks for various operations */ /* called to verify a certificate */ int (*verify) (X509_STORE_CTX *ctx); /* error callback */ int (*verify_cb) (int ok, X509_STORE_CTX *ctx); /* get issuers cert from ctx */ int (*get_issuer) (X509 **issuer, X509_STORE_CTX *ctx, X509 *x); /* check issued */ int (*check_issued) (X509_STORE_CTX *ctx, X509 *x, X509 *issuer); /* Check revocation status of chain */ int (*check_revocation) (X509_STORE_CTX *ctx); /* retrieve CRL */ int (*get_crl) (X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); /* Check CRL validity */ int (*check_crl) (X509_STORE_CTX *ctx, X509_CRL *crl); /* Check certificate against CRL */ int (*cert_crl) (X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, X509_NAME *nm); STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm); int (*cleanup) (X509_STORE_CTX *ctx); CRYPTO_EX_DATA ex_data; int references; } /* X509_STORE */ ; int X509_STORE_set_depth(X509_STORE *store, int depth); # define X509_STORE_set_verify_cb_func(ctx,func) ((ctx)->verify_cb=(func)) # define X509_STORE_set_verify_func(ctx,func) ((ctx)->verify=(func)) /* This is the functions plus an instance of the local variables. */ struct x509_lookup_st { int init; /* have we been started */ int skip; /* don't use us. */ X509_LOOKUP_METHOD *method; /* the functions */ char *method_data; /* method data */ X509_STORE *store_ctx; /* who owns us */ } /* X509_LOOKUP */ ; /* * This is a used when verifying cert chains. Since the gathering of the * cert chain can take some time (and have to be 'retried', this needs to be * kept and passed around. */ struct x509_store_ctx_st { /* X509_STORE_CTX */ X509_STORE *ctx; /* used when looking up certs */ int current_method; /* The following are set by the caller */ /* The cert to check */ X509 *cert; /* chain of X509s - untrusted - passed in */ STACK_OF(X509) *untrusted; /* set of CRLs passed in */ STACK_OF(X509_CRL) *crls; X509_VERIFY_PARAM *param; /* Other info for use with get_issuer() */ void *other_ctx; /* Callbacks for various operations */ /* called to verify a certificate */ int (*verify) (X509_STORE_CTX *ctx); /* error callback */ int (*verify_cb) (int ok, X509_STORE_CTX *ctx); /* get issuers cert from ctx */ int (*get_issuer) (X509 **issuer, X509_STORE_CTX *ctx, X509 *x); /* check issued */ int (*check_issued) (X509_STORE_CTX *ctx, X509 *x, X509 *issuer); /* Check revocation status of chain */ int (*check_revocation) (X509_STORE_CTX *ctx); /* retrieve CRL */ int (*get_crl) (X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); /* Check CRL validity */ int (*check_crl) (X509_STORE_CTX *ctx, X509_CRL *crl); /* Check certificate against CRL */ int (*cert_crl) (X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x); int (*check_policy) (X509_STORE_CTX *ctx); STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, X509_NAME *nm); STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm); int (*cleanup) (X509_STORE_CTX *ctx); /* The following is built up */ /* if 0, rebuild chain */ int valid; /* index of last untrusted cert */ int last_untrusted; /* chain of X509s - built up and trusted */ STACK_OF(X509) *chain; /* Valid policy tree */ X509_POLICY_TREE *tree; /* Require explicit policy value */ int explicit_policy; /* When something goes wrong, this is why */ int error_depth; int error; X509 *current_cert; /* cert currently being tested as valid issuer */ X509 *current_issuer; /* current CRL */ X509_CRL *current_crl; /* score of current CRL */ int current_crl_score; /* Reason mask */ unsigned int current_reasons; /* For CRL path validation: parent context */ X509_STORE_CTX *parent; CRYPTO_EX_DATA ex_data; } /* X509_STORE_CTX */ ; void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); # define X509_STORE_CTX_set_app_data(ctx,data) \ X509_STORE_CTX_set_ex_data(ctx,0,data) # define X509_STORE_CTX_get_app_data(ctx) \ X509_STORE_CTX_get_ex_data(ctx,0) # define X509_L_FILE_LOAD 1 # define X509_L_ADD_DIR 2 # define X509_LOOKUP_load_file(x,name,type) \ X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) # define X509_LOOKUP_add_dir(x,name,type) \ X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) # define X509_V_OK 0 # define X509_V_ERR_UNSPECIFIED 1 # define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 # define X509_V_ERR_UNABLE_TO_GET_CRL 3 # define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 # define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 # define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 # define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 # define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 # define X509_V_ERR_CERT_NOT_YET_VALID 9 # define X509_V_ERR_CERT_HAS_EXPIRED 10 # define X509_V_ERR_CRL_NOT_YET_VALID 11 # define X509_V_ERR_CRL_HAS_EXPIRED 12 # define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 # define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 # define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 # define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 # define X509_V_ERR_OUT_OF_MEM 17 # define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 # define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 # define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 # define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 # define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 # define X509_V_ERR_CERT_REVOKED 23 # define X509_V_ERR_INVALID_CA 24 # define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 # define X509_V_ERR_INVALID_PURPOSE 26 # define X509_V_ERR_CERT_UNTRUSTED 27 # define X509_V_ERR_CERT_REJECTED 28 /* These are 'informational' when looking for issuer cert */ # define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 # define X509_V_ERR_AKID_SKID_MISMATCH 30 # define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 # define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 # define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 # define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 # define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 # define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 # define X509_V_ERR_INVALID_NON_CA 37 # define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 # define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 # define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 # define X509_V_ERR_INVALID_EXTENSION 41 # define X509_V_ERR_INVALID_POLICY_EXTENSION 42 # define X509_V_ERR_NO_EXPLICIT_POLICY 43 # define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 # define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 # define X509_V_ERR_UNNESTED_RESOURCE 46 # define X509_V_ERR_PERMITTED_VIOLATION 47 # define X509_V_ERR_EXCLUDED_VIOLATION 48 # define X509_V_ERR_SUBTREE_MINMAX 49 # define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 # define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 # define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 # define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 /* Suite B mode algorithm violation */ # define X509_V_ERR_SUITE_B_INVALID_VERSION 56 # define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 # define X509_V_ERR_SUITE_B_INVALID_CURVE 58 # define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 # define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 # define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 /* Host, email and IP check errors */ # define X509_V_ERR_HOSTNAME_MISMATCH 62 # define X509_V_ERR_EMAIL_MISMATCH 63 # define X509_V_ERR_IP_ADDRESS_MISMATCH 64 /* The application is not happy */ # define X509_V_ERR_APPLICATION_VERIFICATION 50 /* Certificate verify flags */ /* Send issuer+subject checks to verify_cb */ # define X509_V_FLAG_CB_ISSUER_CHECK 0x1 /* Use check time instead of current time */ # define X509_V_FLAG_USE_CHECK_TIME 0x2 /* Lookup CRLs */ # define X509_V_FLAG_CRL_CHECK 0x4 /* Lookup CRLs for whole chain */ # define X509_V_FLAG_CRL_CHECK_ALL 0x8 /* Ignore unhandled critical extensions */ # define X509_V_FLAG_IGNORE_CRITICAL 0x10 /* Disable workarounds for broken certificates */ # define X509_V_FLAG_X509_STRICT 0x20 /* Enable proxy certificate validation */ # define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40 /* Enable policy checking */ # define X509_V_FLAG_POLICY_CHECK 0x80 /* Policy variable require-explicit-policy */ # define X509_V_FLAG_EXPLICIT_POLICY 0x100 /* Policy variable inhibit-any-policy */ # define X509_V_FLAG_INHIBIT_ANY 0x200 /* Policy variable inhibit-policy-mapping */ # define X509_V_FLAG_INHIBIT_MAP 0x400 /* Notify callback that policy is OK */ # define X509_V_FLAG_NOTIFY_POLICY 0x800 /* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ # define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 /* Delta CRL support */ # define X509_V_FLAG_USE_DELTAS 0x2000 /* Check selfsigned CA signature */ # define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 /* Use trusted store first */ # define X509_V_FLAG_TRUSTED_FIRST 0x8000 /* Suite B 128 bit only mode: not normally used */ # define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000 /* Suite B 192 bit only mode */ # define X509_V_FLAG_SUITEB_192_LOS 0x20000 /* Suite B 128 bit mode allowing 192 bit algorithms */ # define X509_V_FLAG_SUITEB_128_LOS 0x30000 /* Allow partial chains if at least one certificate is in trusted store */ # define X509_V_FLAG_PARTIAL_CHAIN 0x80000 /* * If the initial chain is not trusted, do not attempt to build an alternative * chain. Alternate chain checking was introduced in 1.0.2b. Setting this flag * will force the behaviour to match that of previous versions. */ # define X509_V_FLAG_NO_ALT_CHAINS 0x100000 # define X509_VP_FLAG_DEFAULT 0x1 # define X509_VP_FLAG_OVERWRITE 0x2 # define X509_VP_FLAG_RESET_FLAGS 0x4 # define X509_VP_FLAG_LOCKED 0x8 # define X509_VP_FLAG_ONCE 0x10 /* Internal use: mask of policy related options */ # define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \ | X509_V_FLAG_EXPLICIT_POLICY \ | X509_V_FLAG_INHIBIT_ANY \ | X509_V_FLAG_INHIBIT_MAP) int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, int type, X509_NAME *name); X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, int type, X509_NAME *name); X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, X509_OBJECT *x); void X509_OBJECT_up_ref_count(X509_OBJECT *a); void X509_OBJECT_free_contents(X509_OBJECT *a); X509_STORE *X509_STORE_new(void); void X509_STORE_free(X509_STORE *v); STACK_OF(X509) *X509_STORE_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); STACK_OF(X509_CRL) *X509_STORE_get1_crls(X509_STORE_CTX *st, X509_NAME *nm); int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); int X509_STORE_set_trust(X509_STORE *ctx, int trust); int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm); void X509_STORE_set_verify_cb(X509_STORE *ctx, int (*verify_cb) (int, X509_STORE_CTX *)); void X509_STORE_set_lookup_crls_cb(X509_STORE *ctx, STACK_OF(X509_CRL) *(*cb) (X509_STORE_CTX *ctx, X509_NAME *nm)); X509_STORE_CTX *X509_STORE_CTX_new(void); int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); void X509_STORE_CTX_free(X509_STORE_CTX *ctx); int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, X509 *x509, STACK_OF(X509) *chain); void X509_STORE_CTX_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx); X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); X509_LOOKUP_METHOD *X509_LOOKUP_file(void); int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); int X509_STORE_get_by_subject(X509_STORE_CTX *vs, int type, X509_NAME *name, X509_OBJECT *ret); int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret); # ifndef OPENSSL_NO_STDIO int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); # endif X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); void X509_LOOKUP_free(X509_LOOKUP *ctx); int X509_LOOKUP_init(X509_LOOKUP *ctx); int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, int type, X509_NAME *name, X509_OBJECT *ret); int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, int type, X509_NAME *name, ASN1_INTEGER *serial, X509_OBJECT *ret); int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, int type, unsigned char *bytes, int len, X509_OBJECT *ret); int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, int type, char *str, int len, X509_OBJECT *ret); int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); # ifndef OPENSSL_NO_STDIO int X509_STORE_load_locations(X509_STORE *ctx, const char *file, const char *dir); int X509_STORE_set_default_paths(X509_STORE *ctx); # endif int X509_STORE_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); void *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx); int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx); X509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx); X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx); STACK_OF(X509) *X509_STORE_CTX_get_chain(X509_STORE_CTX *ctx); STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx); void X509_STORE_CTX_set_cert(X509_STORE_CTX *c, X509 *x); void X509_STORE_CTX_set_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c, STACK_OF(X509_CRL) *sk); int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, int purpose, int trust); void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, time_t t); void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, int (*verify_cb) (int, X509_STORE_CTX *)); X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx); int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx); X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx); void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); /* X509_VERIFY_PARAM functions */ X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void); void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to, const X509_VERIFY_PARAM *from); int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to, const X509_VERIFY_PARAM *from); int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name); int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, unsigned long flags); int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, unsigned long flags); unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t); int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, ASN1_OBJECT *policy); int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, STACK_OF(ASN1_OBJECT) *policies); int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen); int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, const char *name, size_t namelen); void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, unsigned int flags); char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *); int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, const char *email, size_t emaillen); int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, const unsigned char *ip, size_t iplen); int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, const char *ipasc); int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_get_count(void); const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id); const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name); void X509_VERIFY_PARAM_table_cleanup(void); int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy, STACK_OF(X509) *certs, STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags); void X509_policy_tree_free(X509_POLICY_TREE *tree); int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, int i); STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_policies(const X509_POLICY_TREE *tree); STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_user_policies(const X509_POLICY_TREE *tree); int X509_policy_level_node_count(X509_POLICY_LEVEL *level); X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, int i); const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); STACK_OF(POLICYQUALINFO) *X509_policy_node_get0_qualifiers(const X509_POLICY_NODE *node); const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE *node); #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/include/openssl/x509v3.h ================================================ /* x509v3.h */ /* * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project * 1999. */ /* ==================================================================== * Copyright (c) 1999-2004 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_X509V3_H # define HEADER_X509V3_H # include # include # include #ifdef __cplusplus extern "C" { #endif # ifdef OPENSSL_SYS_WIN32 /* Under Win32 these are defined in wincrypt.h */ # undef X509_NAME # undef X509_CERT_PAIR # undef X509_EXTENSIONS # endif /* Forward reference */ struct v3_ext_method; struct v3_ext_ctx; /* Useful typedefs */ typedef void *(*X509V3_EXT_NEW)(void); typedef void (*X509V3_EXT_FREE) (void *); typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); typedef int (*X509V3_EXT_I2D) (void *, unsigned char **); typedef STACK_OF(CONF_VALUE) * (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, STACK_OF(CONF_VALUE) *extlist); typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method, struct v3_ext_ctx *ctx, STACK_OF(CONF_VALUE) *values); typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method, void *ext); typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method, struct v3_ext_ctx *ctx, const char *str); typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext, BIO *out, int indent); typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method, struct v3_ext_ctx *ctx, const char *str); /* V3 extension structure */ struct v3_ext_method { int ext_nid; int ext_flags; /* If this is set the following four fields are ignored */ ASN1_ITEM_EXP *it; /* Old style ASN1 calls */ X509V3_EXT_NEW ext_new; X509V3_EXT_FREE ext_free; X509V3_EXT_D2I d2i; X509V3_EXT_I2D i2d; /* The following pair is used for string extensions */ X509V3_EXT_I2S i2s; X509V3_EXT_S2I s2i; /* The following pair is used for multi-valued extensions */ X509V3_EXT_I2V i2v; X509V3_EXT_V2I v2i; /* The following are used for raw extensions */ X509V3_EXT_I2R i2r; X509V3_EXT_R2I r2i; void *usr_data; /* Any extension specific data */ }; typedef struct X509V3_CONF_METHOD_st { char *(*get_string) (void *db, char *section, char *value); STACK_OF(CONF_VALUE) *(*get_section) (void *db, char *section); void (*free_string) (void *db, char *string); void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); } X509V3_CONF_METHOD; /* Context specific info */ struct v3_ext_ctx { # define CTX_TEST 0x1 int flags; X509 *issuer_cert; X509 *subject_cert; X509_REQ *subject_req; X509_CRL *crl; X509V3_CONF_METHOD *db_meth; void *db; /* Maybe more here */ }; typedef struct v3_ext_method X509V3_EXT_METHOD; DECLARE_STACK_OF(X509V3_EXT_METHOD) /* ext_flags values */ # define X509V3_EXT_DYNAMIC 0x1 # define X509V3_EXT_CTX_DEP 0x2 # define X509V3_EXT_MULTILINE 0x4 typedef BIT_STRING_BITNAME ENUMERATED_NAMES; typedef struct BASIC_CONSTRAINTS_st { int ca; ASN1_INTEGER *pathlen; } BASIC_CONSTRAINTS; typedef struct PKEY_USAGE_PERIOD_st { ASN1_GENERALIZEDTIME *notBefore; ASN1_GENERALIZEDTIME *notAfter; } PKEY_USAGE_PERIOD; typedef struct otherName_st { ASN1_OBJECT *type_id; ASN1_TYPE *value; } OTHERNAME; typedef struct EDIPartyName_st { ASN1_STRING *nameAssigner; ASN1_STRING *partyName; } EDIPARTYNAME; typedef struct GENERAL_NAME_st { # define GEN_OTHERNAME 0 # define GEN_EMAIL 1 # define GEN_DNS 2 # define GEN_X400 3 # define GEN_DIRNAME 4 # define GEN_EDIPARTY 5 # define GEN_URI 6 # define GEN_IPADD 7 # define GEN_RID 8 int type; union { char *ptr; OTHERNAME *otherName; /* otherName */ ASN1_IA5STRING *rfc822Name; ASN1_IA5STRING *dNSName; ASN1_TYPE *x400Address; X509_NAME *directoryName; EDIPARTYNAME *ediPartyName; ASN1_IA5STRING *uniformResourceIdentifier; ASN1_OCTET_STRING *iPAddress; ASN1_OBJECT *registeredID; /* Old names */ ASN1_OCTET_STRING *ip; /* iPAddress */ X509_NAME *dirn; /* dirn */ ASN1_IA5STRING *ia5; /* rfc822Name, dNSName, * uniformResourceIdentifier */ ASN1_OBJECT *rid; /* registeredID */ ASN1_TYPE *other; /* x400Address */ } d; } GENERAL_NAME; typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; typedef struct ACCESS_DESCRIPTION_st { ASN1_OBJECT *method; GENERAL_NAME *location; } ACCESS_DESCRIPTION; typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; DECLARE_STACK_OF(GENERAL_NAME) DECLARE_ASN1_SET_OF(GENERAL_NAME) DECLARE_STACK_OF(ACCESS_DESCRIPTION) DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION) typedef struct DIST_POINT_NAME_st { int type; union { GENERAL_NAMES *fullname; STACK_OF(X509_NAME_ENTRY) *relativename; } name; /* If relativename then this contains the full distribution point name */ X509_NAME *dpname; } DIST_POINT_NAME; /* All existing reasons */ # define CRLDP_ALL_REASONS 0x807f # define CRL_REASON_NONE -1 # define CRL_REASON_UNSPECIFIED 0 # define CRL_REASON_KEY_COMPROMISE 1 # define CRL_REASON_CA_COMPROMISE 2 # define CRL_REASON_AFFILIATION_CHANGED 3 # define CRL_REASON_SUPERSEDED 4 # define CRL_REASON_CESSATION_OF_OPERATION 5 # define CRL_REASON_CERTIFICATE_HOLD 6 # define CRL_REASON_REMOVE_FROM_CRL 8 # define CRL_REASON_PRIVILEGE_WITHDRAWN 9 # define CRL_REASON_AA_COMPROMISE 10 struct DIST_POINT_st { DIST_POINT_NAME *distpoint; ASN1_BIT_STRING *reasons; GENERAL_NAMES *CRLissuer; int dp_reasons; }; typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; DECLARE_STACK_OF(DIST_POINT) DECLARE_ASN1_SET_OF(DIST_POINT) struct AUTHORITY_KEYID_st { ASN1_OCTET_STRING *keyid; GENERAL_NAMES *issuer; ASN1_INTEGER *serial; }; /* Strong extranet structures */ typedef struct SXNET_ID_st { ASN1_INTEGER *zone; ASN1_OCTET_STRING *user; } SXNETID; DECLARE_STACK_OF(SXNETID) DECLARE_ASN1_SET_OF(SXNETID) typedef struct SXNET_st { ASN1_INTEGER *version; STACK_OF(SXNETID) *ids; } SXNET; typedef struct NOTICEREF_st { ASN1_STRING *organization; STACK_OF(ASN1_INTEGER) *noticenos; } NOTICEREF; typedef struct USERNOTICE_st { NOTICEREF *noticeref; ASN1_STRING *exptext; } USERNOTICE; typedef struct POLICYQUALINFO_st { ASN1_OBJECT *pqualid; union { ASN1_IA5STRING *cpsuri; USERNOTICE *usernotice; ASN1_TYPE *other; } d; } POLICYQUALINFO; DECLARE_STACK_OF(POLICYQUALINFO) DECLARE_ASN1_SET_OF(POLICYQUALINFO) typedef struct POLICYINFO_st { ASN1_OBJECT *policyid; STACK_OF(POLICYQUALINFO) *qualifiers; } POLICYINFO; typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; DECLARE_STACK_OF(POLICYINFO) DECLARE_ASN1_SET_OF(POLICYINFO) typedef struct POLICY_MAPPING_st { ASN1_OBJECT *issuerDomainPolicy; ASN1_OBJECT *subjectDomainPolicy; } POLICY_MAPPING; DECLARE_STACK_OF(POLICY_MAPPING) typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; typedef struct GENERAL_SUBTREE_st { GENERAL_NAME *base; ASN1_INTEGER *minimum; ASN1_INTEGER *maximum; } GENERAL_SUBTREE; DECLARE_STACK_OF(GENERAL_SUBTREE) struct NAME_CONSTRAINTS_st { STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; STACK_OF(GENERAL_SUBTREE) *excludedSubtrees; }; typedef struct POLICY_CONSTRAINTS_st { ASN1_INTEGER *requireExplicitPolicy; ASN1_INTEGER *inhibitPolicyMapping; } POLICY_CONSTRAINTS; /* Proxy certificate structures, see RFC 3820 */ typedef struct PROXY_POLICY_st { ASN1_OBJECT *policyLanguage; ASN1_OCTET_STRING *policy; } PROXY_POLICY; typedef struct PROXY_CERT_INFO_EXTENSION_st { ASN1_INTEGER *pcPathLengthConstraint; PROXY_POLICY *proxyPolicy; } PROXY_CERT_INFO_EXTENSION; DECLARE_ASN1_FUNCTIONS(PROXY_POLICY) DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION) struct ISSUING_DIST_POINT_st { DIST_POINT_NAME *distpoint; int onlyuser; int onlyCA; ASN1_BIT_STRING *onlysomereasons; int indirectCRL; int onlyattr; }; /* Values in idp_flags field */ /* IDP present */ # define IDP_PRESENT 0x1 /* IDP values inconsistent */ # define IDP_INVALID 0x2 /* onlyuser true */ # define IDP_ONLYUSER 0x4 /* onlyCA true */ # define IDP_ONLYCA 0x8 /* onlyattr true */ # define IDP_ONLYATTR 0x10 /* indirectCRL true */ # define IDP_INDIRECT 0x20 /* onlysomereasons present */ # define IDP_REASONS 0x40 # define X509V3_conf_err(val) ERR_add_error_data(6, "section:", val->section, \ ",name:", val->name, ",value:", val->value); # define X509V3_set_ctx_test(ctx) \ X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST) # define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; # define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ 0,0,0,0, \ 0,0, \ (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \ (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \ NULL, NULL, \ table} # define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \ 0,0,0,0, \ (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \ (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \ 0,0,0,0, \ NULL} # define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} /* X509_PURPOSE stuff */ # define EXFLAG_BCONS 0x1 # define EXFLAG_KUSAGE 0x2 # define EXFLAG_XKUSAGE 0x4 # define EXFLAG_NSCERT 0x8 # define EXFLAG_CA 0x10 /* Really self issued not necessarily self signed */ # define EXFLAG_SI 0x20 # define EXFLAG_V1 0x40 # define EXFLAG_INVALID 0x80 # define EXFLAG_SET 0x100 # define EXFLAG_CRITICAL 0x200 # define EXFLAG_PROXY 0x400 # define EXFLAG_INVALID_POLICY 0x800 # define EXFLAG_FRESHEST 0x1000 /* Self signed */ # define EXFLAG_SS 0x2000 # define KU_DIGITAL_SIGNATURE 0x0080 # define KU_NON_REPUDIATION 0x0040 # define KU_KEY_ENCIPHERMENT 0x0020 # define KU_DATA_ENCIPHERMENT 0x0010 # define KU_KEY_AGREEMENT 0x0008 # define KU_KEY_CERT_SIGN 0x0004 # define KU_CRL_SIGN 0x0002 # define KU_ENCIPHER_ONLY 0x0001 # define KU_DECIPHER_ONLY 0x8000 # define NS_SSL_CLIENT 0x80 # define NS_SSL_SERVER 0x40 # define NS_SMIME 0x20 # define NS_OBJSIGN 0x10 # define NS_SSL_CA 0x04 # define NS_SMIME_CA 0x02 # define NS_OBJSIGN_CA 0x01 # define NS_ANY_CA (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA) # define XKU_SSL_SERVER 0x1 # define XKU_SSL_CLIENT 0x2 # define XKU_SMIME 0x4 # define XKU_CODE_SIGN 0x8 # define XKU_SGC 0x10 # define XKU_OCSP_SIGN 0x20 # define XKU_TIMESTAMP 0x40 # define XKU_DVCS 0x80 # define XKU_ANYEKU 0x100 # define X509_PURPOSE_DYNAMIC 0x1 # define X509_PURPOSE_DYNAMIC_NAME 0x2 typedef struct x509_purpose_st { int purpose; int trust; /* Default trust ID */ int flags; int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int); char *name; char *sname; void *usr_data; } X509_PURPOSE; # define X509_PURPOSE_SSL_CLIENT 1 # define X509_PURPOSE_SSL_SERVER 2 # define X509_PURPOSE_NS_SSL_SERVER 3 # define X509_PURPOSE_SMIME_SIGN 4 # define X509_PURPOSE_SMIME_ENCRYPT 5 # define X509_PURPOSE_CRL_SIGN 6 # define X509_PURPOSE_ANY 7 # define X509_PURPOSE_OCSP_HELPER 8 # define X509_PURPOSE_TIMESTAMP_SIGN 9 # define X509_PURPOSE_MIN 1 # define X509_PURPOSE_MAX 9 /* Flags for X509V3_EXT_print() */ # define X509V3_EXT_UNKNOWN_MASK (0xfL << 16) /* Return error for unknown extensions */ # define X509V3_EXT_DEFAULT 0 /* Print error for unknown extensions */ # define X509V3_EXT_ERROR_UNKNOWN (1L << 16) /* ASN1 parse unknown extensions */ # define X509V3_EXT_PARSE_UNKNOWN (2L << 16) /* BIO_dump unknown extensions */ # define X509V3_EXT_DUMP_UNKNOWN (3L << 16) /* Flags for X509V3_add1_i2d */ # define X509V3_ADD_OP_MASK 0xfL # define X509V3_ADD_DEFAULT 0L # define X509V3_ADD_APPEND 1L # define X509V3_ADD_REPLACE 2L # define X509V3_ADD_REPLACE_EXISTING 3L # define X509V3_ADD_KEEP_EXISTING 4L # define X509V3_ADD_DELETE 5L # define X509V3_ADD_SILENT 0x10 DECLARE_STACK_OF(X509_PURPOSE) DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) DECLARE_ASN1_FUNCTIONS(SXNET) DECLARE_ASN1_FUNCTIONS(SXNETID) int SXNET_add_id_asc(SXNET **psx, char *zone, char *user, int userlen); int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, char *user, int userlen); int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, char *user, int userlen); ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, char *zone); ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone); ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone); DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a); int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, ASN1_BIT_STRING *bits, STACK_OF(CONF_VALUE) *extlist); STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, GENERAL_NAME *gen, STACK_OF(CONF_VALUE) *ret); int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen); DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES) STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, GENERAL_NAMES *gen, STACK_OF(CONF_VALUE) *extlist); GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); DECLARE_ASN1_FUNCTIONS(OTHERNAME) DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME) int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b); void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value); void *GENERAL_NAME_get0_value(GENERAL_NAME *a, int *ptype); int GENERAL_NAME_set0_othername(GENERAL_NAME *gen, ASN1_OBJECT *oid, ASN1_TYPE *value); int GENERAL_NAME_get0_otherName(GENERAL_NAME *gen, ASN1_OBJECT **poid, ASN1_TYPE **pvalue); char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, ASN1_OCTET_STRING *ia5); ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, char *str); DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE) int i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION *a); DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES) DECLARE_ASN1_FUNCTIONS(POLICYINFO) DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO) DECLARE_ASN1_FUNCTIONS(USERNOTICE) DECLARE_ASN1_FUNCTIONS(NOTICEREF) DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS) DECLARE_ASN1_FUNCTIONS(DIST_POINT) DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME) DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname); int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) DECLARE_ASN1_ITEM(POLICY_MAPPING) DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING) DECLARE_ASN1_ITEM(POLICY_MAPPINGS) DECLARE_ASN1_ITEM(GENERAL_SUBTREE) DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE) DECLARE_ASN1_ITEM(NAME_CONSTRAINTS) DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS) DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS) DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS) GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, int gen_type, char *value, int is_nc); # ifdef HEADER_CONF_H GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, CONF_VALUE *cnf); GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, CONF_VALUE *cnf, int is_nc); void X509V3_conf_free(CONF_VALUE *val); X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, char *value); X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, char *name, char *value); int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, char *section, STACK_OF(X509_EXTENSION) **sk); int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, X509 *cert); int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, X509_REQ *req); int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, X509_CRL *crl); X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, int ext_nid, char *value); X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, char *name, char *value); int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, char *section, X509 *cert); int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, char *section, X509_REQ *req); int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, char *section, X509_CRL *crl); int X509V3_add_value_bool_nf(char *name, int asn1_bool, STACK_OF(CONF_VALUE) **extlist); int X509V3_get_value_bool(CONF_VALUE *value, int *asn1_bool); int X509V3_get_value_int(CONF_VALUE *value, ASN1_INTEGER **aint); void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf); void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash); # endif char *X509V3_get_string(X509V3_CTX *ctx, char *name, char *section); STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, char *section); void X509V3_string_free(X509V3_CTX *ctx, char *str); void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, X509_REQ *req, X509_CRL *crl, int flags); int X509V3_add_value(const char *name, const char *value, STACK_OF(CONF_VALUE) **extlist); int X509V3_add_value_uchar(const char *name, const unsigned char *value, STACK_OF(CONF_VALUE) **extlist); int X509V3_add_value_bool(const char *name, int asn1_bool, STACK_OF(CONF_VALUE) **extlist); int X509V3_add_value_int(const char *name, ASN1_INTEGER *aint, STACK_OF(CONF_VALUE) **extlist); char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint); ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, char *value); char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint); char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint); int X509V3_EXT_add(X509V3_EXT_METHOD *ext); int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist); int X509V3_EXT_add_alias(int nid_to, int nid_from); void X509V3_EXT_cleanup(void); const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext); const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid); int X509V3_add_standard_extensions(void); STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line); void *X509V3_EXT_d2i(X509_EXTENSION *ext); void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx); int X509V3_EXT_free(int nid, void *ext_data); X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, int crit, unsigned long flags); char *hex_to_string(const unsigned char *buffer, long len); unsigned char *string_to_hex(const char *str, long *len); int name_cmp(const char *name, const char *cmp); void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, int ml); int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, int indent); int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); int X509V3_extensions_print(BIO *out, char *title, STACK_OF(X509_EXTENSION) *exts, unsigned long flag, int indent); int X509_check_ca(X509 *x); int X509_check_purpose(X509 *x, int id, int ca); int X509_supported_extension(X509_EXTENSION *ex); int X509_PURPOSE_set(int *p, int purpose); int X509_check_issued(X509 *issuer, X509 *subject); int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid); int X509_PURPOSE_get_count(void); X509_PURPOSE *X509_PURPOSE_get0(int idx); int X509_PURPOSE_get_by_sname(char *sname); int X509_PURPOSE_get_by_id(int id); int X509_PURPOSE_add(int id, int trust, int flags, int (*ck) (const X509_PURPOSE *, const X509 *, int), char *name, char *sname, void *arg); char *X509_PURPOSE_get0_name(X509_PURPOSE *xp); char *X509_PURPOSE_get0_sname(X509_PURPOSE *xp); int X509_PURPOSE_get_trust(X509_PURPOSE *xp); void X509_PURPOSE_cleanup(void); int X509_PURPOSE_get_id(X509_PURPOSE *); STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x); STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x); void X509_email_free(STACK_OF(OPENSSL_STRING) *sk); STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x); /* Flags for X509_check_* functions */ /* * Always check subject name for host match even if subject alt names present */ # define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT 0x1 /* Disable wildcard matching for dnsName fields and common name. */ # define X509_CHECK_FLAG_NO_WILDCARDS 0x2 /* Wildcards must not match a partial label. */ # define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4 /* Allow (non-partial) wildcards to match multiple labels. */ # define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8 /* Constraint verifier subdomain patterns to match a single labels. */ # define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10 /* * Match reference identifiers starting with "." to any sub-domain. * This is a non-public flag, turned on implicitly when the subject * reference identity is a DNS name. */ # define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000 int X509_check_host(X509 *x, const char *chk, size_t chklen, unsigned int flags, char **peername); int X509_check_email(X509 *x, const char *chk, size_t chklen, unsigned int flags); int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen, unsigned int flags); int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags); ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc); ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc); int a2i_ipadd(unsigned char *ipout, const char *ipasc); int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, unsigned long chtype); void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); DECLARE_STACK_OF(X509_POLICY_NODE) # ifndef OPENSSL_NO_RFC3779 typedef struct ASRange_st { ASN1_INTEGER *min, *max; } ASRange; # define ASIdOrRange_id 0 # define ASIdOrRange_range 1 typedef struct ASIdOrRange_st { int type; union { ASN1_INTEGER *id; ASRange *range; } u; } ASIdOrRange; typedef STACK_OF(ASIdOrRange) ASIdOrRanges; DECLARE_STACK_OF(ASIdOrRange) # define ASIdentifierChoice_inherit 0 # define ASIdentifierChoice_asIdsOrRanges 1 typedef struct ASIdentifierChoice_st { int type; union { ASN1_NULL *inherit; ASIdOrRanges *asIdsOrRanges; } u; } ASIdentifierChoice; typedef struct ASIdentifiers_st { ASIdentifierChoice *asnum, *rdi; } ASIdentifiers; DECLARE_ASN1_FUNCTIONS(ASRange) DECLARE_ASN1_FUNCTIONS(ASIdOrRange) DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice) DECLARE_ASN1_FUNCTIONS(ASIdentifiers) typedef struct IPAddressRange_st { ASN1_BIT_STRING *min, *max; } IPAddressRange; # define IPAddressOrRange_addressPrefix 0 # define IPAddressOrRange_addressRange 1 typedef struct IPAddressOrRange_st { int type; union { ASN1_BIT_STRING *addressPrefix; IPAddressRange *addressRange; } u; } IPAddressOrRange; typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; DECLARE_STACK_OF(IPAddressOrRange) # define IPAddressChoice_inherit 0 # define IPAddressChoice_addressesOrRanges 1 typedef struct IPAddressChoice_st { int type; union { ASN1_NULL *inherit; IPAddressOrRanges *addressesOrRanges; } u; } IPAddressChoice; typedef struct IPAddressFamily_st { ASN1_OCTET_STRING *addressFamily; IPAddressChoice *ipAddressChoice; } IPAddressFamily; typedef STACK_OF(IPAddressFamily) IPAddrBlocks; DECLARE_STACK_OF(IPAddressFamily) DECLARE_ASN1_FUNCTIONS(IPAddressRange) DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) DECLARE_ASN1_FUNCTIONS(IPAddressChoice) DECLARE_ASN1_FUNCTIONS(IPAddressFamily) /* * API tag for elements of the ASIdentifer SEQUENCE. */ # define V3_ASID_ASNUM 0 # define V3_ASID_RDI 1 /* * AFI values, assigned by IANA. It'd be nice to make the AFI * handling code totally generic, but there are too many little things * that would need to be defined for other address families for it to * be worth the trouble. */ # define IANA_AFI_IPV4 1 # define IANA_AFI_IPV6 2 /* * Utilities to construct and extract values from RFC3779 extensions, * since some of the encodings (particularly for IP address prefixes * and ranges) are a bit tedious to work with directly. */ int v3_asid_add_inherit(ASIdentifiers *asid, int which); int v3_asid_add_id_or_range(ASIdentifiers *asid, int which, ASN1_INTEGER *min, ASN1_INTEGER *max); int v3_addr_add_inherit(IPAddrBlocks *addr, const unsigned afi, const unsigned *safi); int v3_addr_add_prefix(IPAddrBlocks *addr, const unsigned afi, const unsigned *safi, unsigned char *a, const int prefixlen); int v3_addr_add_range(IPAddrBlocks *addr, const unsigned afi, const unsigned *safi, unsigned char *min, unsigned char *max); unsigned v3_addr_get_afi(const IPAddressFamily *f); int v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, unsigned char *min, unsigned char *max, const int length); /* * Canonical forms. */ int v3_asid_is_canonical(ASIdentifiers *asid); int v3_addr_is_canonical(IPAddrBlocks *addr); int v3_asid_canonize(ASIdentifiers *asid); int v3_addr_canonize(IPAddrBlocks *addr); /* * Tests for inheritance and containment. */ int v3_asid_inherits(ASIdentifiers *asid); int v3_addr_inherits(IPAddrBlocks *addr); int v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b); int v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); /* * Check whether RFC 3779 extensions nest properly in chains. */ int v3_asid_validate_path(X509_STORE_CTX *); int v3_addr_validate_path(X509_STORE_CTX *); int v3_asid_validate_resource_set(STACK_OF(X509) *chain, ASIdentifiers *ext, int allow_inheritance); int v3_addr_validate_resource_set(STACK_OF(X509) *chain, IPAddrBlocks *ext, int allow_inheritance); # endif /* OPENSSL_NO_RFC3779 */ /* BEGIN ERROR CODES */ /* * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ void ERR_load_X509V3_strings(void); /* Error codes for the X509V3 functions. */ /* Function codes. */ # define X509V3_F_A2I_GENERAL_NAME 164 # define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161 # define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162 # define X509V3_F_COPY_EMAIL 122 # define X509V3_F_COPY_ISSUER 123 # define X509V3_F_DO_DIRNAME 144 # define X509V3_F_DO_EXT_CONF 124 # define X509V3_F_DO_EXT_I2D 135 # define X509V3_F_DO_EXT_NCONF 151 # define X509V3_F_DO_I2V_NAME_CONSTRAINTS 148 # define X509V3_F_GNAMES_FROM_SECTNAME 156 # define X509V3_F_HEX_TO_STRING 111 # define X509V3_F_I2S_ASN1_ENUMERATED 121 # define X509V3_F_I2S_ASN1_IA5STRING 149 # define X509V3_F_I2S_ASN1_INTEGER 120 # define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 # define X509V3_F_NOTICE_SECTION 132 # define X509V3_F_NREF_NOS 133 # define X509V3_F_POLICY_SECTION 131 # define X509V3_F_PROCESS_PCI_VALUE 150 # define X509V3_F_R2I_CERTPOL 130 # define X509V3_F_R2I_PCI 155 # define X509V3_F_S2I_ASN1_IA5STRING 100 # define X509V3_F_S2I_ASN1_INTEGER 108 # define X509V3_F_S2I_ASN1_OCTET_STRING 112 # define X509V3_F_S2I_ASN1_SKEY_ID 114 # define X509V3_F_S2I_SKEY_ID 115 # define X509V3_F_SET_DIST_POINT_NAME 158 # define X509V3_F_STRING_TO_HEX 113 # define X509V3_F_SXNET_ADD_ID_ASC 125 # define X509V3_F_SXNET_ADD_ID_INTEGER 126 # define X509V3_F_SXNET_ADD_ID_ULONG 127 # define X509V3_F_SXNET_GET_ID_ASC 128 # define X509V3_F_SXNET_GET_ID_ULONG 129 # define X509V3_F_V2I_ASIDENTIFIERS 163 # define X509V3_F_V2I_ASN1_BIT_STRING 101 # define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 139 # define X509V3_F_V2I_AUTHORITY_KEYID 119 # define X509V3_F_V2I_BASIC_CONSTRAINTS 102 # define X509V3_F_V2I_CRLD 134 # define X509V3_F_V2I_EXTENDED_KEY_USAGE 103 # define X509V3_F_V2I_GENERAL_NAMES 118 # define X509V3_F_V2I_GENERAL_NAME_EX 117 # define X509V3_F_V2I_IDP 157 # define X509V3_F_V2I_IPADDRBLOCKS 159 # define X509V3_F_V2I_ISSUER_ALT 153 # define X509V3_F_V2I_NAME_CONSTRAINTS 147 # define X509V3_F_V2I_POLICY_CONSTRAINTS 146 # define X509V3_F_V2I_POLICY_MAPPINGS 145 # define X509V3_F_V2I_SUBJECT_ALT 154 # define X509V3_F_V3_ADDR_VALIDATE_PATH_INTERNAL 160 # define X509V3_F_V3_GENERIC_EXTENSION 116 # define X509V3_F_X509V3_ADD1_I2D 140 # define X509V3_F_X509V3_ADD_VALUE 105 # define X509V3_F_X509V3_EXT_ADD 104 # define X509V3_F_X509V3_EXT_ADD_ALIAS 106 # define X509V3_F_X509V3_EXT_CONF 107 # define X509V3_F_X509V3_EXT_FREE 165 # define X509V3_F_X509V3_EXT_I2D 136 # define X509V3_F_X509V3_EXT_NCONF 152 # define X509V3_F_X509V3_GET_SECTION 142 # define X509V3_F_X509V3_GET_STRING 143 # define X509V3_F_X509V3_GET_VALUE_BOOL 110 # define X509V3_F_X509V3_PARSE_LIST 109 # define X509V3_F_X509_PURPOSE_ADD 137 # define X509V3_F_X509_PURPOSE_SET 141 /* Reason codes. */ # define X509V3_R_BAD_IP_ADDRESS 118 # define X509V3_R_BAD_OBJECT 119 # define X509V3_R_BN_DEC2BN_ERROR 100 # define X509V3_R_BN_TO_ASN1_INTEGER_ERROR 101 # define X509V3_R_CANNOT_FIND_FREE_FUNCTION 168 # define X509V3_R_DIRNAME_ERROR 149 # define X509V3_R_DISTPOINT_ALREADY_SET 160 # define X509V3_R_DUPLICATE_ZONE_ID 133 # define X509V3_R_ERROR_CONVERTING_ZONE 131 # define X509V3_R_ERROR_CREATING_EXTENSION 144 # define X509V3_R_ERROR_IN_EXTENSION 128 # define X509V3_R_EXPECTED_A_SECTION_NAME 137 # define X509V3_R_EXTENSION_EXISTS 145 # define X509V3_R_EXTENSION_NAME_ERROR 115 # define X509V3_R_EXTENSION_NOT_FOUND 102 # define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED 103 # define X509V3_R_EXTENSION_VALUE_ERROR 116 # define X509V3_R_ILLEGAL_EMPTY_EXTENSION 151 # define X509V3_R_ILLEGAL_HEX_DIGIT 113 # define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG 152 # define X509V3_R_INVALID_ASNUMBER 162 # define X509V3_R_INVALID_ASRANGE 163 # define X509V3_R_INVALID_BOOLEAN_STRING 104 # define X509V3_R_INVALID_EXTENSION_STRING 105 # define X509V3_R_INVALID_INHERITANCE 165 # define X509V3_R_INVALID_IPADDRESS 166 # define X509V3_R_INVALID_MULTIPLE_RDNS 161 # define X509V3_R_INVALID_NAME 106 # define X509V3_R_INVALID_NULL_ARGUMENT 107 # define X509V3_R_INVALID_NULL_NAME 108 # define X509V3_R_INVALID_NULL_VALUE 109 # define X509V3_R_INVALID_NUMBER 140 # define X509V3_R_INVALID_NUMBERS 141 # define X509V3_R_INVALID_OBJECT_IDENTIFIER 110 # define X509V3_R_INVALID_OPTION 138 # define X509V3_R_INVALID_POLICY_IDENTIFIER 134 # define X509V3_R_INVALID_PROXY_POLICY_SETTING 153 # define X509V3_R_INVALID_PURPOSE 146 # define X509V3_R_INVALID_SAFI 164 # define X509V3_R_INVALID_SECTION 135 # define X509V3_R_INVALID_SYNTAX 143 # define X509V3_R_ISSUER_DECODE_ERROR 126 # define X509V3_R_MISSING_VALUE 124 # define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS 142 # define X509V3_R_NO_CONFIG_DATABASE 136 # define X509V3_R_NO_ISSUER_CERTIFICATE 121 # define X509V3_R_NO_ISSUER_DETAILS 127 # define X509V3_R_NO_POLICY_IDENTIFIER 139 # define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED 154 # define X509V3_R_NO_PUBLIC_KEY 114 # define X509V3_R_NO_SUBJECT_DETAILS 125 # define X509V3_R_ODD_NUMBER_OF_DIGITS 112 # define X509V3_R_OPERATION_NOT_DEFINED 148 # define X509V3_R_OTHERNAME_ERROR 147 # define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED 155 # define X509V3_R_POLICY_PATH_LENGTH 156 # define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED 157 # define X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED 158 # define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159 # define X509V3_R_SECTION_NOT_FOUND 150 # define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS 122 # define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID 123 # define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT 111 # define X509V3_R_UNKNOWN_EXTENSION 129 # define X509V3_R_UNKNOWN_EXTENSION_NAME 130 # define X509V3_R_UNKNOWN_OPTION 120 # define X509V3_R_UNSUPPORTED_OPTION 117 # define X509V3_R_UNSUPPORTED_TYPE 167 # define X509V3_R_USER_TOO_LONG 132 #ifdef __cplusplus } #endif #endif ================================================ FILE: 3rParty/FFmpeg/lib/libavcodec.a ================================================ [File too large to display: 55.6 MB] ================================================ FILE: 3rParty/FFmpeg/lib/libavformat.a ================================================ [File too large to display: 23.9 MB] ================================================ FILE: 3rParty/FFmpeg/lib/libcrypto.a ================================================ [File too large to display: 20.0 MB] ================================================ FILE: 3rParty/FFmpeg/lib/libswscale.a ================================================ [File too large to display: 10.3 MB] ================================================ FILE: 3rParty/kxmovie/KxAudioManager.h ================================================ // // KxAudioManager.h // kxmovie // // Created by Kolyvan on 23.10.12. // Copyright (c) 2012 Konstantin Boukreev . All rights reserved. // // https://github.com/kolyvan/kxmovie // this file is part of KxMovie // KxMovie is licenced under the LGPL v3, see lgpl-3.0.txt #import typedef void (^KxAudioManagerOutputBlock)(float *data, UInt32 numFrames, UInt32 numChannels); @protocol KxAudioManager // 输出频道数 @property (readonly) UInt32 numOutputChannels; // 采样率 @property (readonly) Float64 samplingRate; // 每个样本字节数 @property (readonly) UInt32 numBytesPerSample; // 音量 @property (readonly) Float32 outputVolume; // 是否正在播放 @property (readonly) BOOL playing; // 音轨线 @property (readonly, strong) NSString *audioRoute; // 音频输出管理回调, 回调 (数据, 帧数,音轨数) @property (readwrite, copy) KxAudioManagerOutputBlock outputBlock; // 激活声音会话 - (BOOL) activateAudioSession; // 取消激活声音会话 - (void) deactivateAudioSession; // 播放 - (BOOL) play; // 暂停 - (void) pause; @end @interface KxAudioManager : NSObject + (id) audioManager; @end ================================================ FILE: 3rParty/kxmovie/KxAudioManager.m ================================================ // // KxAudioManager.m // kxmovie // // Created by Kolyvan on 23.10.12. // Copyright (c) 2012 Konstantin Boukreev . All rights reserved. // // https://github.com/kolyvan/kxmovie // this file is part of KxMovie // KxMovie is licenced under the LGPL v3, see lgpl-3.0.txt // ios-only and output-only version of Novocaine https://github.com/alexbw/novocaine // Copyright (c) 2012 Alex Wiltschko #import "KxAudioManager.h" #import "TargetConditionals.h" #import #import #import "KxLogger.h" // 最大帧数 #define MAX_FRAME_SIZE 4096 // 最大音轨数 #define MAX_CHAN 2 // 最大采样率 #define MAX_SAMPLE_DUMPED 5 // 检查错误 static BOOL checkError(OSStatus error, const char *operation); // 会话属性监听 static void sessionPropertyListener(void *inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void *inData); // 会话中断监听 static void sessionInterruptionListener(void *inClientData, UInt32 inInterruption); // 给予回应 static OSStatus renderCallback (void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp * inTimeStamp, UInt32 inOutputBusNumber, UInt32 inNumberFrames, AudioBufferList* ioData); @interface KxAudioManagerImpl : KxAudioManager { BOOL _initialized; // 是否已初始化 BOOL _activated; // 是否已激活 float *_outData; // 输出数据 AudioUnit _audioUnit; // 音频单元 AudioStreamBasicDescription _outputFormat; // 输出格式 } @property (readonly) UInt32 numOutputChannels; @property (readonly) Float64 samplingRate; @property (readonly) UInt32 numBytesPerSample; @property (readwrite) Float32 outputVolume; @property (readonly) BOOL playing; @property (readonly, strong) NSString *audioRoute; @property (readwrite, copy) KxAudioManagerOutputBlock outputBlock; @property (readwrite) BOOL playAfterSessionEndInterruption; // 会话结束中断后是否播放 - (BOOL) activateAudioSession; - (void) deactivateAudioSession; - (BOOL) play; - (void) pause; // 检查音频线 - (BOOL) checkAudioRoute; // 建立音频 - (BOOL) setupAudio; // 检查会话属性 - (BOOL) checkSessionProperties; // 给予帧及数据 - (BOOL) renderFrames: (UInt32) numFrames ioData: (AudioBufferList *) ioData; @end @implementation KxAudioManager + (id) audioManager { static KxAudioManagerImpl *audioManager = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ audioManager = [[KxAudioManagerImpl alloc] init]; }); return audioManager; } @end @implementation KxAudioManagerImpl - (id)init { self = [super init]; if (self) { _outData = (float *)calloc(MAX_FRAME_SIZE*MAX_CHAN, sizeof(float)); _outputVolume = 0.5; } return self; } - (void)dealloc { if (_outData) { free(_outData); _outData = NULL; } } #pragma mark - private // Debug: dump the current frame data. Limited to 20 samples. // 倾倒音频样本 (字首,数据buffer,样本打印格式,样本数,频道数) #define dumpAudioSamples(prefix, dataBuffer, samplePrintFormat, sampleCount, channelCount) \ { \ NSMutableString *dump = [NSMutableString stringWithFormat:prefix]; \ for (int i = 0; i < MIN(MAX_SAMPLE_DUMPED, sampleCount); i++) \ { \ for (int j = 0; j < channelCount; j++) \ { \ [dump appendFormat:samplePrintFormat, dataBuffer[j + i * channelCount]]; \ } \ [dump appendFormat:@"\n"]; \ } \ LoggerAudio(3, @"%@", dump); \ } // 倾倒音频帧非交叉存取 (字首,数据buffer,样本打印格式,样本数,频道数) #define dumpAudioSamplesNonInterleaved(prefix, dataBuffer, samplePrintFormat, sampleCount, channelCount) \ { \ NSMutableString *dump = [NSMutableString stringWithFormat:prefix]; \ for (int i = 0; i < MIN(MAX_SAMPLE_DUMPED, sampleCount); i++) \ { \ for (int j = 0; j < channelCount; j++) \ { \ [dump appendFormat:samplePrintFormat, dataBuffer[j][i]]; \ } \ [dump appendFormat:@"\n"]; \ } \ LoggerAudio(3, @"%@", dump); \ } - (BOOL) checkAudioRoute { // Check what the audio route is. UInt32 propertySize = sizeof(CFStringRef); CFStringRef route; if (checkError(AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &route), "Couldn't check the audio route")) return NO; _audioRoute = CFBridgingRelease(route); LoggerAudio(1, @"AudioRoute: %@", _audioRoute); return YES; } - (BOOL) setupAudio { // --- Audio Session Setup --- UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; //UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord; if (checkError(AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory), "Couldn't set audio category")) return NO; if (checkError(AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, sessionPropertyListener, (__bridge void *)(self)), "Couldn't add audio session property listener")) { // just warning } if (checkError(AudioSessionAddPropertyListener(kAudioSessionProperty_CurrentHardwareOutputVolume, sessionPropertyListener, (__bridge void *)(self)), "Couldn't add audio session property listener")) { // just warning } // Set the buffer size, this will affect the number of samples that get rendered every time the audio callback is fired // A small number will get you lower latency audio, but will make your processor work harder #if !TARGET_IPHONE_SIMULATOR Float32 preferredBufferSize = 0.0232; if (checkError(AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(preferredBufferSize), &preferredBufferSize), "Couldn't set the preferred buffer duration")) { // just warning } #endif if (checkError(AudioSessionSetActive(YES), "Couldn't activate the audio session")) return NO; [self checkSessionProperties]; // ----- Audio Unit Setup ----- // Describe the output unit. AudioComponentDescription description = {0}; description.componentType = kAudioUnitType_Output; description.componentSubType = kAudioUnitSubType_RemoteIO; description.componentManufacturer = kAudioUnitManufacturer_Apple; // Get component AudioComponent component = AudioComponentFindNext(NULL, &description); if (checkError(AudioComponentInstanceNew(component, &_audioUnit), "Couldn't create the output audio unit")) return NO; UInt32 size; // Check the output stream format size = sizeof(AudioStreamBasicDescription); if (checkError(AudioUnitGetProperty(_audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &_outputFormat, &size), "Couldn't get the hardware output stream format")) return NO; _outputFormat.mSampleRate = _samplingRate; if (checkError(AudioUnitSetProperty(_audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &_outputFormat, size), "Couldn't set the hardware output stream format")) { // just warning } _numBytesPerSample = _outputFormat.mBitsPerChannel / 8; _numOutputChannels = _outputFormat.mChannelsPerFrame; LoggerAudio(2, @"Current output bytes per sample: %u", (unsigned int)_numBytesPerSample); LoggerAudio(2, @"Current output num channels: %u", (unsigned int)_numOutputChannels); // Slap a render callback on the unit AURenderCallbackStruct callbackStruct; callbackStruct.inputProc = renderCallback; callbackStruct.inputProcRefCon = (__bridge void *)(self); if (checkError(AudioUnitSetProperty(_audioUnit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, 0, &callbackStruct, sizeof(callbackStruct)), "Couldn't set the render callback on the audio unit")) return NO; if (checkError(AudioUnitInitialize(_audioUnit), "Couldn't initialize the audio unit")) return NO; return YES; } - (BOOL) checkSessionProperties { [self checkAudioRoute]; // Check the number of output channels. UInt32 newNumChannels; UInt32 size = sizeof(newNumChannels); if (checkError(AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareOutputNumberChannels, &size, &newNumChannels), "Checking number of output channels")) return NO; LoggerAudio(2, @"We've got %u output channels", (unsigned int)newNumChannels); // Get the hardware sampling rate. This is settable, but here we're only reading. size = sizeof(_samplingRate); if (checkError(AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareSampleRate, &size, &_samplingRate), "Checking hardware sampling rate")) return NO; LoggerAudio(2, @"Current sampling rate: %f", _samplingRate); size = sizeof(_outputVolume); if (checkError(AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareOutputVolume, &size, &_outputVolume), "Checking current hardware output volume")) return NO; LoggerAudio(1, @"Current output volume: %f", _outputVolume); return YES; } - (BOOL) renderFrames: (UInt32) numFrames ioData: (AudioBufferList *) ioData { for (int iBuffer=0; iBuffer < ioData->mNumberBuffers; ++iBuffer) { memset(ioData->mBuffers[iBuffer].mData, 0, ioData->mBuffers[iBuffer].mDataByteSize); } if (_playing && _outputBlock ) { // Collect data to render from the callbacks _outputBlock(_outData, numFrames, _numOutputChannels); // Put the rendered data into the output buffer if (_numBytesPerSample == 4) // then we've already got floats { float zero = 0.0; for (int iBuffer=0; iBuffer < ioData->mNumberBuffers; ++iBuffer) { int thisNumChannels = ioData->mBuffers[iBuffer].mNumberChannels; for (int iChannel = 0; iChannel < thisNumChannels; ++iChannel) { vDSP_vsadd(_outData+iChannel, _numOutputChannels, &zero, (float *)ioData->mBuffers[iBuffer].mData, thisNumChannels, numFrames); } } } else if (_numBytesPerSample == 2) // then we need to convert SInt16 -> Float (and also scale) { // dumpAudioSamples(@"Audio frames decoded by FFmpeg:\n", // _outData, @"% 12.4f ", numFrames, _numOutputChannels); float scale = (float)INT16_MAX; vDSP_vsmul(_outData, 1, &scale, _outData, 1, numFrames*_numOutputChannels); #ifdef DUMP_AUDIO_DATA LoggerAudio(2, @"Buffer %u - Output Channels %u - Samples %u", (uint)ioData->mNumberBuffers, (uint)ioData->mBuffers[0].mNumberChannels, (uint)numFrames); #endif for (int iBuffer=0; iBuffer < ioData->mNumberBuffers; ++iBuffer) { int thisNumChannels = ioData->mBuffers[iBuffer].mNumberChannels; for (int iChannel = 0; iChannel < thisNumChannels; ++iChannel) { vDSP_vfix16(_outData+iChannel, _numOutputChannels, (SInt16 *)ioData->mBuffers[iBuffer].mData+iChannel, thisNumChannels, numFrames); } #ifdef DUMP_AUDIO_DATA dumpAudioSamples(@"Audio frames decoded by FFmpeg and reformatted:\n", ((SInt16 *)ioData->mBuffers[iBuffer].mData), @"% 8d ", numFrames, thisNumChannels); #endif } } } return noErr; } #pragma mark - public - (BOOL) activateAudioSession { if (!_activated) { if (!_initialized) { if (checkError(AudioSessionInitialize(NULL, kCFRunLoopDefaultMode, sessionInterruptionListener, (__bridge void *)(self)), "Couldn't initialize audio session")) return NO; _initialized = YES; } if ([self checkAudioRoute] && [self setupAudio]) { _activated = YES; } } return _activated; } - (void) deactivateAudioSession { if (_activated) { [self pause]; checkError(AudioUnitUninitialize(_audioUnit), "Couldn't uninitialize the audio unit"); /* fails with error (-10851) ? checkError(AudioUnitSetProperty(_audioUnit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, 0, NULL, 0), "Couldn't clear the render callback on the audio unit"); */ checkError(AudioComponentInstanceDispose(_audioUnit), "Couldn't dispose the output audio unit"); checkError(AudioSessionSetActive(NO), "Couldn't deactivate the audio session"); checkError(AudioSessionRemovePropertyListenerWithUserData(kAudioSessionProperty_AudioRouteChange, sessionPropertyListener, (__bridge void *)(self)), "Couldn't remove audio session property listener"); checkError(AudioSessionRemovePropertyListenerWithUserData(kAudioSessionProperty_CurrentHardwareOutputVolume, sessionPropertyListener, (__bridge void *)(self)), "Couldn't remove audio session property listener"); _activated = NO; } } - (void) pause { if (_playing) { _playing = checkError(AudioOutputUnitStop(_audioUnit), "Couldn't stop the output unit"); } } - (BOOL) play { if (!_playing) { if ([self activateAudioSession]) { _playing = !checkError(AudioOutputUnitStart(_audioUnit), "Couldn't start the output unit"); } } return _playing; } @end #pragma mark - callbacks static void sessionPropertyListener(void * inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void * inData) { KxAudioManagerImpl *sm = (__bridge KxAudioManagerImpl *)inClientData; if (inID == kAudioSessionProperty_AudioRouteChange) { if ([sm checkAudioRoute]) { [sm checkSessionProperties]; } } else if (inID == kAudioSessionProperty_CurrentHardwareOutputVolume) { if (inData && inDataSize == 4) { sm.outputVolume = *(float *)inData; } } } static void sessionInterruptionListener(void *inClientData, UInt32 inInterruption) { KxAudioManagerImpl *sm = (__bridge KxAudioManagerImpl *)inClientData; if (inInterruption == kAudioSessionBeginInterruption) { LoggerAudio(2, @"Begin interuption"); sm.playAfterSessionEndInterruption = sm.playing; [sm pause]; } else if (inInterruption == kAudioSessionEndInterruption) { LoggerAudio(2, @"End interuption"); if (sm.playAfterSessionEndInterruption) { sm.playAfterSessionEndInterruption = NO; [sm play]; } } } static OSStatus renderCallback (void *inRefCon, AudioUnitRenderActionFlags * ioActionFlags, const AudioTimeStamp * inTimeStamp, UInt32 inOutputBusNumber, UInt32 inNumberFrames, AudioBufferList * ioData) { KxAudioManagerImpl *sm = (__bridge KxAudioManagerImpl *)inRefCon; return [sm renderFrames:inNumberFrames ioData:ioData]; } static BOOL checkError(OSStatus error, const char *operation) { if (error == noErr) return NO; char str[20] = {0}; // see if it appears to be a 4-char-code *(UInt32 *)(str + 1) = CFSwapInt32HostToBig(error); if (isprint(str[1]) && isprint(str[2]) && isprint(str[3]) && isprint(str[4])) { str[0] = str[5] = '\''; str[6] = '\0'; } else // no, format it as an integer sprintf(str, "%d", (int)error); LoggerStream(0, @"Error: %s (%s)\n", operation, str); //exit(1); return YES; } ================================================ FILE: 3rParty/kxmovie/KxLogger.h ================================================ // // KxLogger.h // kxmovie // // Created by Mathieu Godart on 01/05/2014. // // #ifndef kxmovie_KxLogger_h #define kxmovie_KxLogger_h //#define DUMP_AUDIO_DATA #ifdef DEBUG #ifdef USE_NSLOGGER # import "NSLogger.h" # define LoggerStream(level, ...) LogMessageF(__FILE__, __LINE__, __FUNCTION__, @"Stream", level, __VA_ARGS__) # define LoggerVideo(level, ...) LogMessageF(__FILE__, __LINE__, __FUNCTION__, @"Video", level, __VA_ARGS__) # define LoggerAudio(level, ...) LogMessageF(__FILE__, __LINE__, __FUNCTION__, @"Audio", level, __VA_ARGS__) #else # define LoggerStream(level, ...) NSLog(__VA_ARGS__) # define LoggerVideo(level, ...) NSLog(__VA_ARGS__) # define LoggerAudio(level, ...) NSLog(__VA_ARGS__) #endif #else # define LoggerStream(...) while(0) {} # define LoggerVideo(...) while(0) {} # define LoggerAudio(...) while(0) {} #endif #endif ================================================ FILE: 3rParty/kxmovie/KxMovieDecoder.h ================================================ // // KxMovieDecoder.h // kxmovie // // Created by Kolyvan on 15.10.12. // Copyright (c) 2012 Konstantin Boukreev . All rights reserved. // // https://github.com/kolyvan/kxmovie // this file is part of KxMovie // KxMovie is licenced under the LGPL v3, see lgpl-3.0.txt #import #import extern NSString * kxmovieErrorDomain; typedef enum { kxMovieErrorNone, kxMovieErrorOpenFile, kxMovieErrorStreamInfoNotFound, kxMovieErrorStreamNotFound, kxMovieErrorCodecNotFound, kxMovieErrorOpenCodec, kxMovieErrorAllocateFrame, kxMovieErroSetupScaler, kxMovieErroReSampler, kxMovieErroUnsupported, } kxMovieError; typedef enum { KxMovieFrameTypeAudio, KxMovieFrameTypeVideo, KxMovieFrameTypeArtwork, KxMovieFrameTypeSubtitle, } KxMovieFrameType; typedef enum { KxVideoFrameFormatRGB, KxVideoFrameFormatYUV, } KxVideoFrameFormat; @interface KxMovieFrame : NSObject @property (readonly, nonatomic) KxMovieFrameType type; @property (readonly, nonatomic) CGFloat position; @property (readonly, nonatomic) CGFloat duration; @end @interface KxAudioFrame : KxMovieFrame @property (readonly, nonatomic, strong) NSData *samples; @end @interface KxVideoFrame : KxMovieFrame @property (readonly, nonatomic) KxVideoFrameFormat format; @property (readonly, nonatomic) NSUInteger width; @property (readonly, nonatomic) NSUInteger height; @end @interface KxVideoFrameRGB : KxVideoFrame @property (readonly, nonatomic) NSUInteger linesize; @property (readonly, nonatomic, strong) NSData *rgb; - (UIImage *) asImage; @end @interface KxVideoFrameYUV : KxVideoFrame @property (readonly, nonatomic, strong) NSData *luma; @property (readonly, nonatomic, strong) NSData *chromaB; @property (readonly, nonatomic, strong) NSData *chromaR; @end @interface KxArtworkFrame : KxMovieFrame @property (readonly, nonatomic, strong) NSData *picture; - (UIImage *) asImage; @end @interface KxSubtitleFrame : KxMovieFrame @property (readonly, nonatomic, strong) NSString *text; @end typedef BOOL(^KxMovieDecoderInterruptCallback)(); @interface KxMovieDecoder : NSObject @property (readonly, nonatomic, strong) NSString *path; @property (readonly, nonatomic) BOOL isEOF; @property (readwrite,nonatomic) CGFloat position; @property (readonly, nonatomic) CGFloat duration; @property (readonly, nonatomic) CGFloat fps; @property (readonly, nonatomic) CGFloat sampleRate; @property (readonly, nonatomic) NSUInteger frameWidth; @property (readonly, nonatomic) NSUInteger frameHeight; @property (readonly, nonatomic) NSUInteger audioStreamsCount; @property (readwrite,nonatomic) NSInteger selectedAudioStream; @property (readonly, nonatomic) NSUInteger subtitleStreamsCount; @property (readwrite,nonatomic) NSInteger selectedSubtitleStream; @property (readonly, nonatomic) BOOL validVideo; @property (readonly, nonatomic) BOOL validAudio; @property (readonly, nonatomic) BOOL validSubtitles; @property (readonly, nonatomic, strong) NSDictionary *info; @property (readonly, nonatomic, strong) NSString *videoStreamFormatName; @property (readonly, nonatomic) BOOL isNetwork; @property (readonly, nonatomic) CGFloat startTime; @property (readwrite, nonatomic) BOOL disableDeinterlacing; @property (readwrite, nonatomic, strong) KxMovieDecoderInterruptCallback interruptCallback; + (id) movieDecoderWithContentPath: (NSString *) path error: (NSError **) perror; - (BOOL) openFile: (NSString *) path error: (NSError **) perror; -(void) closeFile; - (BOOL) setupVideoFrameFormat: (KxVideoFrameFormat) format; - (NSArray *) decodeFrames: (CGFloat) minDuration; @end @interface KxMovieSubtitleASSParser : NSObject + (NSArray *) parseEvents: (NSString *) events; + (NSArray *) parseDialogue: (NSString *) dialogue numFields: (NSUInteger) numFields; + (NSString *) removeCommandsFromEventText: (NSString *) text; @end ================================================ FILE: 3rParty/kxmovie/KxMovieDecoder.m ================================================ // // KxMovieDecoder.m // kxmovie // // Created by Kolyvan on 15.10.12. // Copyright (c) 2012 Konstantin Boukreev . All rights reserved. // // https://github.com/kolyvan/kxmovie // this file is part of KxMovie // KxMovie is licenced under the LGPL v3, see lgpl-3.0.txt #import "KxMovieDecoder.h" #import #include "libavformat/avformat.h" #include "libswscale/swscale.h" #include "libswresample/swresample.h" #include "libavutil/pixdesc.h" #import "KxAudioManager.h" #import "KxLogger.h" //////////////////////////////////////////////////////////////////////////////// NSString * kxmovieErrorDomain = @"ru.kolyvan.kxmovie"; static void FFLog(void* context, int level, const char* format, va_list args); static NSError * kxmovieError (NSInteger code, id info) { NSDictionary *userInfo = nil; if ([info isKindOfClass: [NSDictionary class]]) { userInfo = info; } else if ([info isKindOfClass: [NSString class]]) { userInfo = @{ NSLocalizedDescriptionKey : info }; } return [NSError errorWithDomain:kxmovieErrorDomain code:code userInfo:userInfo]; } static NSString * errorMessage (kxMovieError errorCode) { switch (errorCode) { case kxMovieErrorNone: return @""; case kxMovieErrorOpenFile: return NSLocalizedString(@"Unable to open file", nil); case kxMovieErrorStreamInfoNotFound: return NSLocalizedString(@"Unable to find stream information", nil); case kxMovieErrorStreamNotFound: return NSLocalizedString(@"Unable to find stream", nil); case kxMovieErrorCodecNotFound: return NSLocalizedString(@"Unable to find codec", nil); case kxMovieErrorOpenCodec: return NSLocalizedString(@"Unable to open codec", nil); case kxMovieErrorAllocateFrame: return NSLocalizedString(@"Unable to allocate frame", nil); case kxMovieErroSetupScaler: return NSLocalizedString(@"Unable to setup scaler", nil); case kxMovieErroReSampler: return NSLocalizedString(@"Unable to setup resampler", nil); case kxMovieErroUnsupported: return NSLocalizedString(@"The ability is not supported", nil); } } //////////////////////////////////////////////////////////////////////////////// static BOOL audioCodecIsSupported(AVCodecContext *audio) { if (audio->sample_fmt == AV_SAMPLE_FMT_S16) { id audioManager = [KxAudioManager audioManager]; return (int)audioManager.samplingRate == audio->sample_rate && audioManager.numOutputChannels == audio->channels; } return NO; } #ifdef DEBUG static void fillSignal(SInt16 *outData, UInt32 numFrames, UInt32 numChannels) { static float phase = 0.0; for (int i=0; i < numFrames; ++i) { for (int iChannel = 0; iChannel < numChannels; ++iChannel) { float theta = phase * M_PI * 2; outData[i*numChannels + iChannel] = sin(theta) * (float)INT16_MAX; } phase += 1.0 / (44100 / 440.0); if (phase > 1.0) phase = -1; } } static void fillSignalF(float *outData, UInt32 numFrames, UInt32 numChannels) { static float phase = 0.0; for (int i=0; i < numFrames; ++i) { for (int iChannel = 0; iChannel < numChannels; ++iChannel) { float theta = phase * M_PI * 2; outData[i*numChannels + iChannel] = sin(theta); } phase += 1.0 / (44100 / 440.0); if (phase > 1.0) phase = -1; } } static void testConvertYUV420pToRGB(AVFrame * frame, uint8_t *outbuf, int linesize, int height) { const int linesizeY = frame->linesize[0]; const int linesizeU = frame->linesize[1]; const int linesizeV = frame->linesize[2]; assert(height == frame->height); assert(linesize <= linesizeY * 3); assert(linesizeY == linesizeU * 2); assert(linesizeY == linesizeV * 2); uint8_t *pY = frame->data[0]; uint8_t *pU = frame->data[1]; uint8_t *pV = frame->data[2]; const int width = linesize / 3; for (int y = 0; y < height; y += 2) { uint8_t *dst1 = outbuf + y * linesize; uint8_t *dst2 = outbuf + (y + 1) * linesize; uint8_t *py1 = pY + y * linesizeY; uint8_t *py2 = py1 + linesizeY; uint8_t *pu = pU + (y >> 1) * linesizeU; uint8_t *pv = pV + (y >> 1) * linesizeV; for (int i = 0; i < width; i += 2) { int Y1 = py1[i]; int Y2 = py2[i]; int Y3 = py1[i+1]; int Y4 = py2[i+1]; int U = pu[(i >> 1)] - 128; int V = pv[(i >> 1)] - 128; int dr = (int)( 1.402f * V); int dg = (int)(0.344f * U + 0.714f * V); int db = (int)(1.772f * U); int r1 = Y1 + dr; int g1 = Y1 - dg; int b1 = Y1 + db; int r2 = Y2 + dr; int g2 = Y2 - dg; int b2 = Y2 + db; int r3 = Y3 + dr; int g3 = Y3 - dg; int b3 = Y3 + db; int r4 = Y4 + dr; int g4 = Y4 - dg; int b4 = Y4 + db; r1 = r1 > 255 ? 255 : r1 < 0 ? 0 : r1; g1 = g1 > 255 ? 255 : g1 < 0 ? 0 : g1; b1 = b1 > 255 ? 255 : b1 < 0 ? 0 : b1; r2 = r2 > 255 ? 255 : r2 < 0 ? 0 : r2; g2 = g2 > 255 ? 255 : g2 < 0 ? 0 : g2; b2 = b2 > 255 ? 255 : b2 < 0 ? 0 : b2; r3 = r3 > 255 ? 255 : r3 < 0 ? 0 : r3; g3 = g3 > 255 ? 255 : g3 < 0 ? 0 : g3; b3 = b3 > 255 ? 255 : b3 < 0 ? 0 : b3; r4 = r4 > 255 ? 255 : r4 < 0 ? 0 : r4; g4 = g4 > 255 ? 255 : g4 < 0 ? 0 : g4; b4 = b4 > 255 ? 255 : b4 < 0 ? 0 : b4; dst1[3*i + 0] = r1; dst1[3*i + 1] = g1; dst1[3*i + 2] = b1; dst2[3*i + 0] = r2; dst2[3*i + 1] = g2; dst2[3*i + 2] = b2; dst1[3*i + 3] = r3; dst1[3*i + 4] = g3; dst1[3*i + 5] = b3; dst2[3*i + 3] = r4; dst2[3*i + 4] = g4; dst2[3*i + 5] = b4; } } } #endif static void avStreamFPSTimeBase(AVStream *st, CGFloat defaultTimeBase, CGFloat *pFPS, CGFloat *pTimeBase) { CGFloat fps, timebase; if (st->time_base.den && st->time_base.num) timebase = av_q2d(st->time_base); else if(st->codec->time_base.den && st->codec->time_base.num) timebase = av_q2d(st->codec->time_base); else timebase = defaultTimeBase; if (st->codec->ticks_per_frame != 1) { LoggerStream(0, @"WARNING: st.codec.ticks_per_frame=%d", st->codec->ticks_per_frame); //timebase *= st->codec->ticks_per_frame; } if (st->avg_frame_rate.den && st->avg_frame_rate.num) fps = av_q2d(st->avg_frame_rate); else if (st->r_frame_rate.den && st->r_frame_rate.num) fps = av_q2d(st->r_frame_rate); else fps = 1.0 / timebase; if (pFPS) *pFPS = fps; if (pTimeBase) *pTimeBase = timebase; } static NSArray *collectStreams(AVFormatContext *formatCtx, enum AVMediaType codecType) { NSMutableArray *ma = [NSMutableArray array]; for (NSInteger i = 0; i < formatCtx->nb_streams; ++i) //判断类型 if (codecType == formatCtx->streams[i]->codec->codec_type) [ma addObject: [NSNumber numberWithInteger: i]]; return [ma copy]; } static NSData * copyFrameData(UInt8 *src, int linesize, int width, int height) { width = MIN(linesize, width); NSMutableData *md = [NSMutableData dataWithLength: width * height]; Byte *dst = md.mutableBytes; for (NSUInteger i = 0; i < height; ++i) { memcpy(dst, src, width); dst += width; src += linesize; } return md; } static BOOL isNetworkPath (NSString *path) { NSRange r = [path rangeOfString:@":"]; if (r.location == NSNotFound) return NO; NSString *scheme = [path substringToIndex:r.length]; if ([scheme isEqualToString:@"file"]) return NO; return YES; } static int interrupt_callback(void *ctx); //////////////////////////////////////////////////////////////////////////////// @interface KxMovieFrame() @property (readwrite, nonatomic) CGFloat position; @property (readwrite, nonatomic) CGFloat duration; @end @implementation KxMovieFrame @end @interface KxAudioFrame() @property (readwrite, nonatomic, strong) NSData *samples; @end @implementation KxAudioFrame - (KxMovieFrameType) type { return KxMovieFrameTypeAudio; } @end @interface KxVideoFrame() @property (readwrite, nonatomic) NSUInteger width; @property (readwrite, nonatomic) NSUInteger height; @end @implementation KxVideoFrame - (KxMovieFrameType) type { return KxMovieFrameTypeVideo; } @end @interface KxVideoFrameRGB () @property (readwrite, nonatomic) NSUInteger linesize; @property (readwrite, nonatomic, strong) NSData *rgb; @end @implementation KxVideoFrameRGB - (KxVideoFrameFormat) format { return KxVideoFrameFormatRGB; } - (UIImage *) asImage { UIImage *image = nil; CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)(_rgb)); if (provider) { CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); if (colorSpace) { CGImageRef imageRef = CGImageCreate(self.width, self.height, 8, 24, self.linesize, colorSpace, kCGBitmapByteOrderDefault, provider, NULL, YES, // NO kCGRenderingIntentDefault); if (imageRef) { image = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); } CGColorSpaceRelease(colorSpace); } CGDataProviderRelease(provider); } return image; } @end @interface KxVideoFrameYUV() @property (readwrite, nonatomic, strong) NSData *luma; @property (readwrite, nonatomic, strong) NSData *chromaB; @property (readwrite, nonatomic, strong) NSData *chromaR; @end @implementation KxVideoFrameYUV - (KxVideoFrameFormat) format { return KxVideoFrameFormatYUV; } @end @interface KxArtworkFrame() @property (readwrite, nonatomic, strong) NSData *picture; @end @implementation KxArtworkFrame - (KxMovieFrameType) type { return KxMovieFrameTypeArtwork; } - (UIImage *) asImage { UIImage *image = nil; CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)(_picture)); if (provider) { CGImageRef imageRef = CGImageCreateWithJPEGDataProvider(provider, NULL, YES, kCGRenderingIntentDefault); if (imageRef) { image = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); } CGDataProviderRelease(provider); } return image; } @end @interface KxSubtitleFrame() @property (readwrite, nonatomic, strong) NSString *text; @end @implementation KxSubtitleFrame - (KxMovieFrameType) type { return KxMovieFrameTypeSubtitle; } @end //////////////////////////////////////////////////////////////////////////////// @interface KxMovieDecoder () { AVFormatContext *_formatCtx; AVCodecContext *_videoCodecCtx; AVCodecContext *_audioCodecCtx; AVCodecContext *_subtitleCodecCtx; AVFrame *_videoFrame; AVFrame *_audioFrame; NSInteger _videoStream; NSInteger _audioStream; NSInteger _subtitleStream; AVPicture _picture; BOOL _pictureValid; struct SwsContext *_swsContext; CGFloat _videoTimeBase; //基时 CGFloat _audioTimeBase; CGFloat _position; NSArray *_videoStreams; NSArray *_audioStreams; NSArray *_subtitleStreams; SwrContext *_swrContext; void *_swrBuffer; NSUInteger _swrBufferSize; NSDictionary *_info; KxVideoFrameFormat _videoFrameFormat; NSUInteger _artworkStream; NSInteger _subtitleASSEvents; } @end @implementation KxMovieDecoder @dynamic duration; @dynamic position; @dynamic frameWidth; @dynamic frameHeight; @dynamic sampleRate; @dynamic audioStreamsCount; @dynamic subtitleStreamsCount; @dynamic selectedAudioStream; @dynamic selectedSubtitleStream; @dynamic validAudio; @dynamic validVideo; @dynamic validSubtitles; @dynamic info; @dynamic videoStreamFormatName; @dynamic startTime; - (CGFloat) duration { if (!_formatCtx) return 0; if (_formatCtx->duration == AV_NOPTS_VALUE) return MAXFLOAT; return (CGFloat)_formatCtx->duration / AV_TIME_BASE; } - (CGFloat) position { return _position; } - (void) setPosition: (CGFloat)seconds { _position = seconds; _isEOF = NO; if (_videoStream != -1) { int64_t ts = (int64_t)(seconds / _videoTimeBase); avformat_seek_file(_formatCtx, _videoStream, ts, ts, ts, AVSEEK_FLAG_FRAME); avcodec_flush_buffers(_videoCodecCtx); } if (_audioStream != -1) { int64_t ts = (int64_t)(seconds / _audioTimeBase); avformat_seek_file(_formatCtx, _audioStream, ts, ts, ts, AVSEEK_FLAG_FRAME); avcodec_flush_buffers(_audioCodecCtx); } } - (NSUInteger) frameWidth { return _videoCodecCtx ? _videoCodecCtx->width : 0; } - (NSUInteger) frameHeight { return _videoCodecCtx ? _videoCodecCtx->height : 0; } - (CGFloat) sampleRate { return _audioCodecCtx ? _audioCodecCtx->sample_rate : 0; } - (NSUInteger) audioStreamsCount { return [_audioStreams count]; } - (NSUInteger) subtitleStreamsCount { return [_subtitleStreams count]; } - (NSInteger) selectedAudioStream { if (_audioStream == -1) return -1; NSNumber *n = [NSNumber numberWithInteger:_audioStream]; return [_audioStreams indexOfObject:n]; } - (void) setSelectedAudioStream:(NSInteger)selectedAudioStream { NSInteger audioStream = [_audioStreams[selectedAudioStream] integerValue]; [self closeAudioStream]; kxMovieError errCode = [self openAudioStream: audioStream]; if (kxMovieErrorNone != errCode) { LoggerAudio(0, @"%@", errorMessage(errCode)); } } - (NSInteger) selectedSubtitleStream { if (_subtitleStream == -1) return -1; return [_subtitleStreams indexOfObject:@(_subtitleStream)]; } - (void) setSelectedSubtitleStream:(NSInteger)selected { [self closeSubtitleStream]; if (selected == -1) { _subtitleStream = -1; } else { NSInteger subtitleStream = [_subtitleStreams[selected] integerValue]; kxMovieError errCode = [self openSubtitleStream:subtitleStream]; if (kxMovieErrorNone != errCode) { LoggerStream(0, @"%@", errorMessage(errCode)); } } } - (BOOL) validAudio { return _audioStream != -1; } - (BOOL) validVideo { return _videoStream != -1; } - (BOOL) validSubtitles { return _subtitleStream != -1; } - (NSDictionary *) info { if (!_info) { NSMutableDictionary *md = [NSMutableDictionary dictionary]; if (_formatCtx) { const char *formatName = _formatCtx->iformat->name; [md setValue: [NSString stringWithCString:formatName encoding:NSUTF8StringEncoding] forKey: @"format"]; if (_formatCtx->bit_rate) { [md setValue: [NSNumber numberWithInt:_formatCtx->bit_rate] forKey: @"bitrate"]; } if (_formatCtx->metadata) { NSMutableDictionary *md1 = [NSMutableDictionary dictionary]; AVDictionaryEntry *tag = NULL; while((tag = av_dict_get(_formatCtx->metadata, "", tag, AV_DICT_IGNORE_SUFFIX))) { [md1 setValue: [NSString stringWithCString:tag->value encoding:NSUTF8StringEncoding] forKey: [NSString stringWithCString:tag->key encoding:NSUTF8StringEncoding]]; } [md setValue: [md1 copy] forKey: @"metadata"]; } char buf[256]; if (_videoStreams.count) { NSMutableArray *ma = [NSMutableArray array]; for (NSNumber *n in _videoStreams) { AVStream *st = _formatCtx->streams[n.integerValue]; avcodec_string(buf, sizeof(buf), st->codec, 1); NSString *s = [NSString stringWithCString:buf encoding:NSUTF8StringEncoding]; if ([s hasPrefix:@"Video: "]) s = [s substringFromIndex:@"Video: ".length]; [ma addObject:s]; } md[@"video"] = ma.copy; } if (_audioStreams.count) { NSMutableArray *ma = [NSMutableArray array]; for (NSNumber *n in _audioStreams) { AVStream *st = _formatCtx->streams[n.integerValue]; NSMutableString *ms = [NSMutableString string]; AVDictionaryEntry *lang = av_dict_get(st->metadata, "language", NULL, 0); if (lang && lang->value) { [ms appendFormat:@"%s ", lang->value]; } avcodec_string(buf, sizeof(buf), st->codec, 1); NSString *s = [NSString stringWithCString:buf encoding:NSUTF8StringEncoding]; if ([s hasPrefix:@"Audio: "]) s = [s substringFromIndex:@"Audio: ".length]; [ms appendString:s]; [ma addObject:ms.copy]; } md[@"audio"] = ma.copy; } if (_subtitleStreams.count) { NSMutableArray *ma = [NSMutableArray array]; for (NSNumber *n in _subtitleStreams) { AVStream *st = _formatCtx->streams[n.integerValue]; NSMutableString *ms = [NSMutableString string]; AVDictionaryEntry *lang = av_dict_get(st->metadata, "language", NULL, 0); if (lang && lang->value) { [ms appendFormat:@"%s ", lang->value]; } avcodec_string(buf, sizeof(buf), st->codec, 1); NSString *s = [NSString stringWithCString:buf encoding:NSUTF8StringEncoding]; if ([s hasPrefix:@"Subtitle: "]) s = [s substringFromIndex:@"Subtitle: ".length]; [ms appendString:s]; [ma addObject:ms.copy]; } md[@"subtitles"] = ma.copy; } } _info = [md copy]; } return _info; } - (NSString *) videoStreamFormatName { if (!_videoCodecCtx) return nil; if (_videoCodecCtx->pix_fmt == AV_PIX_FMT_NONE) return @""; const char *name = av_get_pix_fmt_name(_videoCodecCtx->pix_fmt); return name ? [NSString stringWithCString:name encoding:NSUTF8StringEncoding] : @"?"; } - (CGFloat) startTime { if (_videoStream != -1) { AVStream *st = _formatCtx->streams[_videoStream]; if (AV_NOPTS_VALUE != st->start_time) return st->start_time * _videoTimeBase; return 0; } if (_audioStream != -1) { AVStream *st = _formatCtx->streams[_audioStream]; if (AV_NOPTS_VALUE != st->start_time) return st->start_time * _audioTimeBase; return 0; } return 0; } + (void)initialize { av_log_set_callback(FFLog); av_register_all(); avformat_network_init(); } + (id) movieDecoderWithContentPath: (NSString *) path error: (NSError **) perror { KxMovieDecoder *mp = [[KxMovieDecoder alloc] init]; if (mp) { [mp openFile:path error:perror]; } return mp; } - (void) dealloc { LoggerStream(2, @"%@ dealloc", self); [[UIApplication sharedApplication] setIdleTimerDisabled:NO]; [self closeFile]; } #pragma mark - private - (BOOL) openFile: (NSString *) path error: (NSError **) perror { NSAssert(path, @"nil path"); NSAssert(!_formatCtx, @"already open"); //先判断是不是网络流 _isNetwork = isNetworkPath(path); static BOOL needNetworkInit = YES; if (needNetworkInit && _isNetwork) { needNetworkInit = NO; //如果是网络流得先初始化 avformat_network_init(); } _path = path; //打开文件 kxMovieError errCode = [self openInput: path]; if (errCode == kxMovieErrorNone) { //打开视频流 kxMovieError videoErr = [self openVideoStream]; //打开音频流 kxMovieError audioErr = [self openAudioStream]; _subtitleStream = -1; if (videoErr != kxMovieErrorNone && audioErr != kxMovieErrorNone) { errCode = videoErr; // both fails } else { _subtitleStreams = collectStreams(_formatCtx, AVMEDIA_TYPE_SUBTITLE); } } if (errCode != kxMovieErrorNone) { [self closeFile]; NSString *errMsg = errorMessage(errCode); LoggerStream(0, @"%@, %@", errMsg, path.lastPathComponent); if (perror) *perror = kxmovieError(errCode, errMsg); return NO; } return YES; } /** avformat_alloc_context 的实现,方便理解 * * AVFormatContext *avformat_alloc_context(void) { AVFormatContext *ic; ic = av_malloc(sizeof(AVFormatContext)); if (!ic) return ic; avformat_get_context_defaults(ic); ic->internal = av_mallocz(sizeof(*ic->internal)); if (!ic->internal) { avformat_free_context(ic); return NULL; } return ic; } */ - (kxMovieError) openInput: (NSString *) path { AVFormatContext *formatCtx = NULL; /**** 网络上有加这些 AVDictionary* options = NULL; av_dict_set(&options, "rtsp_transport", "tcp", 0); //把视频流的传输模式强制成tcp传输 //设置加载时间 av_dict_set(&options, "analyzeduration", "2000000", 0); //解析的最大时长这里的数字代表微妙 2000000/1000000 = 2s av_dict_set(&options, "probesize", "122880", 0); //解析的容量上限为122880/1024M = 120M 可以自己设置不能太小否则会导致流的信息分析不完整 */ if (_interruptCallback) { //初始化AVFormatContext 基本结构体 使用av_malloc分配了一块内存 主要用于处理封装格式(FLV/MKV/RMVB等) formatCtx = avformat_alloc_context(); if (!formatCtx) return kxMovieErrorOpenFile; //处理中断函数 第一个参数函数指针 指向一个函数 AVIOInterruptCB cb = {interrupt_callback, (__bridge void *)(self)}; formatCtx->interrupt_callback = cb; } av_register_all(); //打开文件 url_open,url_read if (avformat_open_input(&formatCtx, [path cStringUsingEncoding: NSUTF8StringEncoding], NULL, NULL) < 0) { if (formatCtx) avformat_free_context(formatCtx); return kxMovieErrorOpenFile; } //读取视音频数据相关的信息 parser find_decoder avcodec_open2 实现了解码器的查找,解码器的打开,视音频帧的读取,视音频帧的解码 if (avformat_find_stream_info(formatCtx, NULL) < 0) { avformat_close_input(&formatCtx); return kxMovieErrorStreamInfoNotFound; } av_dump_format(formatCtx, 0, [path.lastPathComponent cStringUsingEncoding: NSUTF8StringEncoding], false); _formatCtx = formatCtx; return kxMovieErrorNone; } - (kxMovieError) openVideoStream { kxMovieError errCode = kxMovieErrorStreamNotFound; _videoStream = -1; _artworkStream = -1; //收集视频流 _videoStreams = collectStreams(_formatCtx, AVMEDIA_TYPE_VIDEO); for (NSNumber *n in _videoStreams) { const NSUInteger iStream = n.integerValue; if (0 == (_formatCtx->streams[iStream]->disposition & AV_DISPOSITION_ATTACHED_PIC)) { errCode = [self openVideoStream: iStream]; if (errCode == kxMovieErrorNone) break; } else { _artworkStream = iStream; } } return errCode; } - (kxMovieError) openVideoStream: (NSInteger) videoStream { // get a pointer to the codec context for the video stream 视频编解码器结构体 AVCodecContext *codecCtx = _formatCtx->streams[videoStream]->codec; // find the decoder for the video stream 找到解码器 我这里是H264 AVCodec *codec = avcodec_find_decoder(codecCtx->codec_id); if (!codec) return kxMovieErrorCodecNotFound; // inform the codec that we can handle truncated bitstreams -- i.e., // bitstreams where frame boundaries can fall in the middle of packets //if(codec->capabilities & CODEC_CAP_TRUNCATED) // _codecCtx->flags |= CODEC_FLAG_TRUNCATED; // open codec 打开解码器 if (avcodec_open2(codecCtx, codec, NULL) < 0) return kxMovieErrorOpenCodec; //初始化一个视频帧 分配一次 存储原始数据对于视频就是YUV或者RGB //视频帧结构体 _videoFrame = av_frame_alloc(); if (!_videoFrame) { avcodec_close(codecCtx); return kxMovieErrorAllocateFrame; } //视频流在streams的位置 _videoStream = videoStream; //视频解码器结构体 _videoCodecCtx = codecCtx; // determine fps //AVStream 存储每一个视频/音频流信息的结构体 st AVStream *st = _formatCtx->streams[_videoStream]; //PTS*time_base=真正的时间 avStreamFPSTimeBase(st, 0.04, &_fps, &_videoTimeBase); LoggerVideo(1, @"video codec size: %lu:%lu fps: %.3f tb: %f", (unsigned long)self.frameWidth, (unsigned long)self.frameHeight, _fps, _videoTimeBase); LoggerVideo(1, @"video start time %f", st->start_time * _videoTimeBase); LoggerVideo(1, @"video disposition %d", st->disposition); return kxMovieErrorNone; } - (kxMovieError) openAudioStream { kxMovieError errCode = kxMovieErrorStreamNotFound; _audioStream = -1; _audioStreams = collectStreams(_formatCtx, AVMEDIA_TYPE_AUDIO); for (NSNumber *n in _audioStreams) { errCode = [self openAudioStream: n.integerValue]; if (errCode == kxMovieErrorNone) break; } return errCode; } - (kxMovieError) openAudioStream: (NSInteger) audioStream { AVCodecContext *codecCtx = _formatCtx->streams[audioStream]->codec; SwrContext *swrContext = NULL; AVCodec *codec = avcodec_find_decoder(codecCtx->codec_id); if(!codec) return kxMovieErrorCodecNotFound; if (avcodec_open2(codecCtx, codec, NULL) < 0) return kxMovieErrorOpenCodec; if (!audioCodecIsSupported(codecCtx)) { id audioManager = [KxAudioManager audioManager]; swrContext = swr_alloc_set_opts(NULL, av_get_default_channel_layout(audioManager.numOutputChannels), AV_SAMPLE_FMT_S16, audioManager.samplingRate, av_get_default_channel_layout(codecCtx->channels), codecCtx->sample_fmt, codecCtx->sample_rate, 0, NULL); if (!swrContext || swr_init(swrContext)) { if (swrContext) swr_free(&swrContext); avcodec_close(codecCtx); return kxMovieErroReSampler; } } _audioFrame = av_frame_alloc(); if (!_audioFrame) { if (swrContext) swr_free(&swrContext); avcodec_close(codecCtx); return kxMovieErrorAllocateFrame; } _audioStream = audioStream; _audioCodecCtx = codecCtx; _swrContext = swrContext; AVStream *st = _formatCtx->streams[_audioStream]; avStreamFPSTimeBase(st, 0.025, 0, &_audioTimeBase); LoggerAudio(1, @"audio codec smr: %.d fmt: %d chn: %d tb: %f %@", _audioCodecCtx->sample_rate, _audioCodecCtx->sample_fmt, _audioCodecCtx->channels, _audioTimeBase, _swrContext ? @"resample" : @""); return kxMovieErrorNone; } - (kxMovieError) openSubtitleStream: (NSInteger) subtitleStream { AVCodecContext *codecCtx = _formatCtx->streams[subtitleStream]->codec; AVCodec *codec = avcodec_find_decoder(codecCtx->codec_id); if(!codec) return kxMovieErrorCodecNotFound; const AVCodecDescriptor *codecDesc = avcodec_descriptor_get(codecCtx->codec_id); if (codecDesc && (codecDesc->props & AV_CODEC_PROP_BITMAP_SUB)) { // Only text based subtitles supported return kxMovieErroUnsupported; } if (avcodec_open2(codecCtx, codec, NULL) < 0) return kxMovieErrorOpenCodec; _subtitleStream = subtitleStream; _subtitleCodecCtx = codecCtx; LoggerStream(1, @"subtitle codec: '%s' mode: %d enc: %s", codecDesc->name, codecCtx->sub_charenc_mode, codecCtx->sub_charenc); _subtitleASSEvents = -1; if (codecCtx->subtitle_header_size) { NSString *s = [[NSString alloc] initWithBytes:codecCtx->subtitle_header length:codecCtx->subtitle_header_size encoding:NSASCIIStringEncoding]; if (s.length) { NSArray *fields = [KxMovieSubtitleASSParser parseEvents:s]; if (fields.count && [fields.lastObject isEqualToString:@"Text"]) { _subtitleASSEvents = fields.count; LoggerStream(2, @"subtitle ass events: %@", [fields componentsJoinedByString:@","]); } } } return kxMovieErrorNone; } -(void) closeFile { [self closeAudioStream]; [self closeVideoStream]; [self closeSubtitleStream]; _videoStreams = nil; _audioStreams = nil; _subtitleStreams = nil; if (_formatCtx) { _formatCtx->interrupt_callback.opaque = NULL; _formatCtx->interrupt_callback.callback = NULL; avformat_close_input(&_formatCtx); _formatCtx = NULL; } } - (void) closeVideoStream { _videoStream = -1; [self closeScaler]; if (_videoFrame) { av_free(_videoFrame); _videoFrame = NULL; } if (_videoCodecCtx) { avcodec_close(_videoCodecCtx); _videoCodecCtx = NULL; } } - (void) closeAudioStream { _audioStream = -1; if (_swrBuffer) { free(_swrBuffer); _swrBuffer = NULL; _swrBufferSize = 0; } if (_swrContext) { swr_free(&_swrContext); _swrContext = NULL; } if (_audioFrame) { av_free(_audioFrame); _audioFrame = NULL; } if (_audioCodecCtx) { avcodec_close(_audioCodecCtx); _audioCodecCtx = NULL; } } - (void) closeSubtitleStream { _subtitleStream = -1; if (_subtitleCodecCtx) { avcodec_close(_subtitleCodecCtx); _subtitleCodecCtx = NULL; } } - (void) closeScaler { if (_swsContext) { sws_freeContext(_swsContext); _swsContext = NULL; } if (_pictureValid) { avpicture_free(&_picture); _pictureValid = NO; } } - (BOOL) setupScaler { [self closeScaler]; _pictureValid = avpicture_alloc(&_picture, AV_PIX_FMT_RGB24, _videoCodecCtx->width, _videoCodecCtx->height) == 0; if (!_pictureValid) return NO; _swsContext = sws_getCachedContext(_swsContext, _videoCodecCtx->width, _videoCodecCtx->height, _videoCodecCtx->pix_fmt, _videoCodecCtx->width, _videoCodecCtx->height, AV_PIX_FMT_RGB24, SWS_FAST_BILINEAR, NULL, NULL, NULL); return _swsContext != NULL; } /**** * * 这个函数首先把YUV格式的数据分离开来分别放到luma、chromaB、chromaR中。 frame.position =av_frame_get_best_effort_timestamp(_videoFrame) *_videoTimeBase;这个参数非常重要得到当前显示的时间在播放器中用在播放时间的显示。 frame.duration =1.0 / _fps; //得到了当前帧的需要显示的时长 比如我的推流端设置的帧率是25帧那么一帧需要显示的时长就是0.04s这个参数也很重要。 解码完返回数据: - (BOOL) addFrames: (NSArray *)frames */ - (KxVideoFrame *) handleVideoFrame { if (!_videoFrame->data[0]) return nil; KxVideoFrame *frame; if (_videoFrameFormat == KxVideoFrameFormatYUV) { KxVideoFrameYUV * yuvFrame = [[KxVideoFrameYUV alloc] init]; //将YUV分离出来w*h*3/2 Byte的数据 //Y 亮度 w*h Byte存储Y 拷贝一帧图片的数据 yuvFrame.luma = copyFrameData(_videoFrame->data[0], _videoFrame->linesize[0], _videoCodecCtx->width, _videoCodecCtx->height); //U 色度 w*h*1/4 Byte存储U yuvFrame.chromaB = copyFrameData(_videoFrame->data[1], _videoFrame->linesize[1], _videoCodecCtx->width / 2, _videoCodecCtx->height / 2); //V 浓度 w*h*1/4 Byte存储V yuvFrame.chromaR = copyFrameData(_videoFrame->data[2], _videoFrame->linesize[2], _videoCodecCtx->width / 2, _videoCodecCtx->height / 2); frame = yuvFrame; } else { if (!_swsContext && ![self setupScaler]) { LoggerVideo(0, @"fail setup video scaler"); return nil; } sws_scale(_swsContext, (const uint8_t **)_videoFrame->data, _videoFrame->linesize, 0, _videoCodecCtx->height, _picture.data, _picture.linesize); KxVideoFrameRGB *rgbFrame = [[KxVideoFrameRGB alloc] init]; rgbFrame.linesize = _picture.linesize[0]; rgbFrame.rgb = [NSData dataWithBytes:_picture.data[0] length:rgbFrame.linesize * _videoCodecCtx->height]; frame = rgbFrame; } frame.width = _videoCodecCtx->width; frame.height = _videoCodecCtx->height; frame.position = av_frame_get_best_effort_timestamp(_videoFrame) * _videoTimeBase; const int64_t frameDuration = av_frame_get_pkt_duration(_videoFrame); if (frameDuration) { frame.duration = frameDuration * _videoTimeBase; frame.duration += _videoFrame->repeat_pict * _videoTimeBase * 0.5; //if (_videoFrame->repeat_pict > 0) { // LoggerVideo(0, @"_videoFrame.repeat_pict %d", _videoFrame->repeat_pict); //} } else { // sometimes, ffmpeg unable to determine a frame duration // as example yuvj420p stream from web camera frame.duration = 1.0 / _fps; } #if 0 LoggerVideo(2, @"VFD: %.4f %.4f | %lld ", frame.position, frame.duration, av_frame_get_pkt_pos(_videoFrame)); #endif return frame; } - (KxAudioFrame *) handleAudioFrame { if (!_audioFrame->data[0]) return nil; id audioManager = [KxAudioManager audioManager]; const NSUInteger numChannels = audioManager.numOutputChannels; NSInteger numFrames; void * audioData; if (_swrContext) { const NSUInteger ratio = MAX(1, audioManager.samplingRate / _audioCodecCtx->sample_rate) * MAX(1, audioManager.numOutputChannels / _audioCodecCtx->channels) * 2; const int bufSize = av_samples_get_buffer_size(NULL, audioManager.numOutputChannels, _audioFrame->nb_samples * ratio, AV_SAMPLE_FMT_S16, 1); if (!_swrBuffer || _swrBufferSize < bufSize) { _swrBufferSize = bufSize; _swrBuffer = realloc(_swrBuffer, _swrBufferSize); } Byte *outbuf[2] = { _swrBuffer, 0 }; numFrames = swr_convert(_swrContext, outbuf, _audioFrame->nb_samples * ratio, (const uint8_t **)_audioFrame->data, _audioFrame->nb_samples); if (numFrames < 0) { LoggerAudio(0, @"fail resample audio"); return nil; } //int64_t delay = swr_get_delay(_swrContext, audioManager.samplingRate); //if (delay > 0) // LoggerAudio(0, @"resample delay %lld", delay); audioData = _swrBuffer; } else { if (_audioCodecCtx->sample_fmt != AV_SAMPLE_FMT_S16) { NSAssert(false, @"bucheck, audio format is invalid"); return nil; } audioData = _audioFrame->data[0]; numFrames = _audioFrame->nb_samples; } const NSUInteger numElements = numFrames * numChannels; NSMutableData *data = [NSMutableData dataWithLength:numElements * sizeof(float)]; float scale = 1.0 / (float)INT16_MAX ; vDSP_vflt16((SInt16 *)audioData, 1, data.mutableBytes, 1, numElements); vDSP_vsmul(data.mutableBytes, 1, &scale, data.mutableBytes, 1, numElements); KxAudioFrame *frame = [[KxAudioFrame alloc] init]; //_videoTimeBase = 0.001 当前的时间 = pts*_videoTimeBase frame.position = av_frame_get_best_effort_timestamp(_audioFrame) * _audioTimeBase; frame.duration = av_frame_get_pkt_duration(_audioFrame) * _audioTimeBase; frame.samples = data; if (frame.duration == 0) { // sometimes ffmpeg can't determine the duration of audio frame // especially of wma/wmv format // so in this case must compute duration frame.duration = frame.samples.length / (sizeof(float) * numChannels * audioManager.samplingRate); } #if 0 LoggerAudio(2, @"AFD: %.4f %.4f | %.4f ", frame.position, frame.duration, frame.samples.length / (8.0 * 44100.0)); #endif return frame; } - (KxSubtitleFrame *) handleSubtitle: (AVSubtitle *)pSubtitle { NSMutableString *ms = [NSMutableString string]; for (NSUInteger i = 0; i < pSubtitle->num_rects; ++i) { AVSubtitleRect *rect = pSubtitle->rects[i]; if (rect) { if (rect->text) { // rect->type == SUBTITLE_TEXT NSString *s = [NSString stringWithUTF8String:rect->text]; if (s.length) [ms appendString:s]; } else if (rect->ass && _subtitleASSEvents != -1) { NSString *s = [NSString stringWithUTF8String:rect->ass]; if (s.length) { NSArray *fields = [KxMovieSubtitleASSParser parseDialogue:s numFields:_subtitleASSEvents]; if (fields.count && [fields.lastObject length]) { s = [KxMovieSubtitleASSParser removeCommandsFromEventText: fields.lastObject]; if (s.length) [ms appendString:s]; } } } } } if (!ms.length) return nil; KxSubtitleFrame *frame = [[KxSubtitleFrame alloc] init]; frame.text = [ms copy]; frame.position = pSubtitle->pts / AV_TIME_BASE + pSubtitle->start_display_time; frame.duration = (CGFloat)(pSubtitle->end_display_time - pSubtitle->start_display_time) / 1000.f; #if 0 LoggerStream(2, @"SUB: %.4f %.4f | %@", frame.position, frame.duration, frame.text); #endif return frame; } - (BOOL) interruptDecoder { if (_interruptCallback) return _interruptCallback(); return NO; } #pragma mark - public - (BOOL) setupVideoFrameFormat: (KxVideoFrameFormat) format { if (format == KxVideoFrameFormatYUV && _videoCodecCtx && (_videoCodecCtx->pix_fmt == AV_PIX_FMT_YUV420P || _videoCodecCtx->pix_fmt == AV_PIX_FMT_YUVJ420P)) { _videoFrameFormat = KxVideoFrameFormatYUV; return YES; } _videoFrameFormat = KxVideoFrameFormatRGB; return _videoFrameFormat == format; } /** * 解码帧 * * 解码帧的函数,看得挺多的其实我们只需要看视频流和音频流就是了,一步一步来看。av_read_frame将读到的数据放到了一个AVPacket结构体中,如果是视频帧解码器是h264格式的话那AVPacket存的数据应该就是h264格式的数据,但是我们打印packet.data的数据并不是我们看到标准的nalu格式的数据也没有看到sps pps的一些信息,如果你们需要这些信息的话就可以这样做: */ - (NSArray *) decodeFrames: (CGFloat) minDuration { if (_videoStream == -1 && _audioStream == -1) return nil; NSMutableArray *result = [NSMutableArray array]; AVPacket packet; CGFloat decodedDuration = 0; BOOL finished = NO; while (!finished) { //读取码流中的音频若干帧或者视频一帧 if (av_read_frame(_formatCtx, &packet) < 0) { _isEOF = YES; break; } if (packet.stream_index ==_videoStream) { int pktSize = packet.size; while (pktSize > 0) { int gotframe = 0; //解码一帧视频 gotframe如果为0 代表没有帧解码 出错为负 int len = avcodec_decode_video2(_videoCodecCtx, _videoFrame, &gotframe, &packet); /** *调用关键的函数 主要设置 picture *avctx->codec->decode(avctx, picture, got_picture_ptr,&tmp); * */ if (len < 0) { LoggerVideo(0, @"decode video error, skip packet"); break; } if (gotframe) { if (!_disableDeinterlacing && _videoFrame->interlaced_frame) { // avpicture_deinterlace((AVPicture*)_videoFrame, // (AVPicture*)_videoFrame, // _videoCodecCtx->pix_fmt, // _videoCodecCtx->width, // _videoCodecCtx->height); } KxVideoFrame *frame = [self handleVideoFrame]; if (frame) { [result addObject:frame]; _position = frame.position; decodedDuration += frame.duration; if (decodedDuration > minDuration) finished = YES; } } if (0 == len) break; pktSize -= len; } } else if (packet.stream_index == _audioStream) { int pktSize = packet.size; while (pktSize > 0) { int gotframe = 0; int len = avcodec_decode_audio4(_audioCodecCtx, _audioFrame, &gotframe, &packet); if (len < 0) { LoggerAudio(0, @"decode audio error, skip packet"); break; } if (gotframe) { KxAudioFrame * frame = [self handleAudioFrame]; if (frame) { [result addObject:frame]; if (_videoStream == -1) { _position = frame.position; decodedDuration += frame.duration; if (decodedDuration > minDuration) finished = YES; } } } if (0 == len) break; pktSize -= len; } } else if (packet.stream_index == _artworkStream) { if (packet.size) { KxArtworkFrame *frame = [[KxArtworkFrame alloc] init]; frame.picture = [NSData dataWithBytes:packet.data length:packet.size]; [result addObject:frame]; } } else if (packet.stream_index == _subtitleStream) { int pktSize = packet.size; while (pktSize > 0) { AVSubtitle subtitle; int gotsubtitle = 0; int len = avcodec_decode_subtitle2(_subtitleCodecCtx, &subtitle, &gotsubtitle, &packet); if (len < 0) { LoggerStream(0, @"decode subtitle error, skip packet"); break; } if (gotsubtitle) { KxSubtitleFrame *frame = [self handleSubtitle: &subtitle]; if (frame) { [result addObject:frame]; } avsubtitle_free(&subtitle); } if (0 == len) break; pktSize -= len; } } av_free_packet(&packet); } return result; } @end ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// static int interrupt_callback(void *ctx) { if (!ctx) return 0; __unsafe_unretained KxMovieDecoder *p = (__bridge KxMovieDecoder *)ctx; const BOOL r = [p interruptDecoder]; if (r) LoggerStream(1, @"DEBUG: INTERRUPT_CALLBACK!"); return r; } ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @implementation KxMovieSubtitleASSParser + (NSArray *) parseEvents: (NSString *) events { NSRange r = [events rangeOfString:@"[Events]"]; if (r.location != NSNotFound) { NSUInteger pos = r.location + r.length; r = [events rangeOfString:@"Format:" options:0 range:NSMakeRange(pos, events.length - pos)]; if (r.location != NSNotFound) { pos = r.location + r.length; r = [events rangeOfCharacterFromSet:[NSCharacterSet newlineCharacterSet] options:0 range:NSMakeRange(pos, events.length - pos)]; if (r.location != NSNotFound) { NSString *format = [events substringWithRange:NSMakeRange(pos, r.location - pos)]; NSArray *fields = [format componentsSeparatedByString:@","]; if (fields.count > 0) { NSCharacterSet *ws = [NSCharacterSet whitespaceCharacterSet]; NSMutableArray *ma = [NSMutableArray array]; for (NSString *s in fields) { [ma addObject:[s stringByTrimmingCharactersInSet:ws]]; } return ma; } } } } return nil; } + (NSArray *) parseDialogue: (NSString *) dialogue numFields: (NSUInteger) numFields { if ([dialogue hasPrefix:@"Dialogue:"]) { NSMutableArray *ma = [NSMutableArray array]; NSRange r = {@"Dialogue:".length, 0}; NSUInteger n = 0; while (r.location != NSNotFound && n++ < numFields) { const NSUInteger pos = r.location + r.length; r = [dialogue rangeOfString:@"," options:0 range:NSMakeRange(pos, dialogue.length - pos)]; const NSUInteger len = r.location == NSNotFound ? dialogue.length - pos : r.location - pos; NSString *p = [dialogue substringWithRange:NSMakeRange(pos, len)]; p = [p stringByReplacingOccurrencesOfString:@"\\N" withString:@"\n"]; [ma addObject: p]; } return ma; } return nil; } + (NSString *) removeCommandsFromEventText: (NSString *) text { NSMutableString *ms = [NSMutableString string]; NSScanner *scanner = [NSScanner scannerWithString:text]; while (!scanner.isAtEnd) { NSString *s; if ([scanner scanUpToString:@"{\\" intoString:&s]) { [ms appendString:s]; } if (!([scanner scanString:@"{\\" intoString:nil] && [scanner scanUpToString:@"}" intoString:nil] && [scanner scanString:@"}" intoString:nil])) { break; } } return ms; } @end static void FFLog(void* context, int level, const char* format, va_list args) { @autoreleasepool { //Trim time at the beginning and new line at the end NSString* message = [[NSString alloc] initWithFormat: [NSString stringWithUTF8String: format] arguments: args]; switch (level) { case 0: case 1: LoggerStream(0, @"%@", [message stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]); break; case 2: LoggerStream(1, @"%@", [message stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]); break; case 3: case 4: LoggerStream(2, @"%@", [message stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]); break; default: LoggerStream(3, @"%@", [message stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]); break; } } } ================================================ FILE: 3rParty/kxmovie/KxMovieGLView.h ================================================ // // ESGLView.h // kxmovie // // Created by Kolyvan on 22.10.12. // Copyright (c) 2012 Konstantin Boukreev . All rights reserved. // // https://github.com/kolyvan/kxmovie // this file is part of KxMovie // KxMovie is licenced under the LGPL v3, see lgpl-3.0.txt #import @class KxVideoFrame; @class KxMovieDecoder; @interface KxMovieGLView : UIView - (id) initWithFrame:(CGRect)frame decoder: (KxMovieDecoder *) decoder; - (void) render: (KxVideoFrame *) frame; @end ================================================ FILE: 3rParty/kxmovie/KxMovieGLView.m ================================================ // // KxMovieGLView.m // kxmovie // // Created by Kolyvan on 22.10.12. // Copyright (c) 2012 Konstantin Boukreev . All rights reserved. // // https://github.com/kolyvan/kxmovie // this file is part of KxMovie // KxMovie is licenced under the LGPL v3, see lgpl-3.0.txt #import "KxMovieGLView.h" #import #import #import #import #import #import "KxMovieDecoder.h" #import "KxLogger.h" ////////////////////////////////////////////////////////// #pragma mark - shaders #define STRINGIZE(x) #x #define STRINGIZE2(x) STRINGIZE(x) #define SHADER_STRING(text) @ STRINGIZE2(text) NSString *const vertexShaderString = SHADER_STRING ( attribute vec4 position; attribute vec2 texcoord; uniform mat4 modelViewProjectionMatrix; varying vec2 v_texcoord; void main() { gl_Position = modelViewProjectionMatrix * position; v_texcoord = texcoord.xy; } ); NSString *const rgbFragmentShaderString = SHADER_STRING ( varying highp vec2 v_texcoord; uniform sampler2D s_texture; void main() { gl_FragColor = texture2D(s_texture, v_texcoord); } ); NSString *const yuvFragmentShaderString = SHADER_STRING ( varying highp vec2 v_texcoord; uniform sampler2D s_texture_y; uniform sampler2D s_texture_u; uniform sampler2D s_texture_v; void main() { highp float y = texture2D(s_texture_y, v_texcoord).r; highp float u = texture2D(s_texture_u, v_texcoord).r - 0.5; highp float v = texture2D(s_texture_v, v_texcoord).r - 0.5; highp float r = y + 1.402 * v; highp float g = y - 0.344 * u - 0.714 * v; highp float b = y + 1.772 * u; gl_FragColor = vec4(r,g,b,1.0); } ); static BOOL validateProgram(GLuint prog) { GLint status; glValidateProgram(prog); #ifdef DEBUG GLint logLength; glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &logLength); if (logLength > 0) { GLchar *log = (GLchar *)malloc(logLength); glGetProgramInfoLog(prog, logLength, &logLength, log); LoggerVideo(1, @"Program validate log:\n%s", log); free(log); } #endif glGetProgramiv(prog, GL_VALIDATE_STATUS, &status); if (status == GL_FALSE) { LoggerVideo(0, @"Failed to validate program %d", prog); return NO; } return YES; } static GLuint compileShader(GLenum type, NSString *shaderString) { GLint status; const GLchar *sources = (GLchar *)shaderString.UTF8String; GLuint shader = glCreateShader(type); if (shader == 0 || shader == GL_INVALID_ENUM) { LoggerVideo(0, @"Failed to create shader %d", type); return 0; } glShaderSource(shader, 1, &sources, NULL); glCompileShader(shader); #ifdef DEBUG GLint logLength; glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength); if (logLength > 0) { GLchar *log = (GLchar *)malloc(logLength); glGetShaderInfoLog(shader, logLength, &logLength, log); LoggerVideo(1, @"Shader compile log:\n%s", log); free(log); } #endif glGetShaderiv(shader, GL_COMPILE_STATUS, &status); if (status == GL_FALSE) { glDeleteShader(shader); LoggerVideo(0, @"Failed to compile shader:\n"); return 0; } return shader; } static void mat4f_LoadOrtho(float left, float right, float bottom, float top, float near, float far, float* mout) { float r_l = right - left; float t_b = top - bottom; float f_n = far - near; float tx = - (right + left) / (right - left); float ty = - (top + bottom) / (top - bottom); float tz = - (far + near) / (far - near); mout[0] = 2.0f / r_l; mout[1] = 0.0f; mout[2] = 0.0f; mout[3] = 0.0f; mout[4] = 0.0f; mout[5] = 2.0f / t_b; mout[6] = 0.0f; mout[7] = 0.0f; mout[8] = 0.0f; mout[9] = 0.0f; mout[10] = -2.0f / f_n; mout[11] = 0.0f; mout[12] = tx; mout[13] = ty; mout[14] = tz; mout[15] = 1.0f; } ////////////////////////////////////////////////////////// #pragma mark - frame renderers @protocol KxMovieGLRenderer - (BOOL) isValid; - (NSString *) fragmentShader; - (void) resolveUniforms: (GLuint) program; - (void) setFrame: (KxVideoFrame *) frame; - (BOOL) prepareRender; @end @interface KxMovieGLRenderer_RGB : NSObject { GLint _uniformSampler; GLuint _texture; } @end @implementation KxMovieGLRenderer_RGB - (BOOL) isValid { return (_texture != 0); } - (NSString *) fragmentShader { return rgbFragmentShaderString; } - (void) resolveUniforms: (GLuint) program { _uniformSampler = glGetUniformLocation(program, "s_texture"); } - (void) setFrame: (KxVideoFrame *) frame { KxVideoFrameRGB *rgbFrame = (KxVideoFrameRGB *)frame; assert(rgbFrame.rgb.length == rgbFrame.width * rgbFrame.height * 3); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); if (0 == _texture) glGenTextures(1, &_texture); glBindTexture(GL_TEXTURE_2D, _texture); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, frame.width, frame.height, 0, GL_RGB, GL_UNSIGNED_BYTE, rgbFrame.rgb.bytes); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } - (BOOL) prepareRender { if (_texture == 0) return NO; glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, _texture); glUniform1i(_uniformSampler, 0); return YES; } - (void) dealloc { if (_texture) { glDeleteTextures(1, &_texture); _texture = 0; } } @end @interface KxMovieGLRenderer_YUV : NSObject { GLint _uniformSamplers[3]; GLuint _textures[3]; } @end @implementation KxMovieGLRenderer_YUV - (BOOL) isValid { return (_textures[0] != 0); } - (NSString *) fragmentShader { return yuvFragmentShaderString; } - (void) resolveUniforms: (GLuint) program { _uniformSamplers[0] = glGetUniformLocation(program, "s_texture_y"); _uniformSamplers[1] = glGetUniformLocation(program, "s_texture_u"); _uniformSamplers[2] = glGetUniformLocation(program, "s_texture_v"); } - (void) setFrame: (KxVideoFrame *) frame { KxVideoFrameYUV *yuvFrame = (KxVideoFrameYUV *)frame; assert(yuvFrame.luma.length == yuvFrame.width * yuvFrame.height); assert(yuvFrame.chromaB.length == (yuvFrame.width * yuvFrame.height) / 4); assert(yuvFrame.chromaR.length == (yuvFrame.width * yuvFrame.height) / 4); const NSUInteger frameWidth = frame.width; const NSUInteger frameHeight = frame.height; glPixelStorei(GL_UNPACK_ALIGNMENT, 1); if (0 == _textures[0]) glGenTextures(3, _textures); const UInt8 *pixels[3] = { yuvFrame.luma.bytes, yuvFrame.chromaB.bytes, yuvFrame.chromaR.bytes }; const NSUInteger widths[3] = { frameWidth, frameWidth / 2, frameWidth / 2 }; const NSUInteger heights[3] = { frameHeight, frameHeight / 2, frameHeight / 2 }; for (int i = 0; i < 3; ++i) { glBindTexture(GL_TEXTURE_2D, _textures[i]); glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, widths[i], heights[i], 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, pixels[i]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } } - (BOOL) prepareRender { if (_textures[0] == 0) return NO; for (int i = 0; i < 3; ++i) { glActiveTexture(GL_TEXTURE0 + i); glBindTexture(GL_TEXTURE_2D, _textures[i]); glUniform1i(_uniformSamplers[i], i); } return YES; } - (void) dealloc { if (_textures[0]) glDeleteTextures(3, _textures); } @end ////////////////////////////////////////////////////////// #pragma mark - gl view enum { ATTRIBUTE_VERTEX, ATTRIBUTE_TEXCOORD, }; @implementation KxMovieGLView { KxMovieDecoder *_decoder; EAGLContext *_context; GLuint _framebuffer; GLuint _renderbuffer; GLint _backingWidth; GLint _backingHeight; GLuint _program; GLint _uniformMatrix; GLfloat _vertices[8]; id _renderer; } + (Class) layerClass { return [CAEAGLLayer class]; } - (id) initWithFrame:(CGRect)frame decoder: (KxMovieDecoder *) decoder { self = [super initWithFrame:frame]; if (self) { _decoder = decoder; if ([decoder setupVideoFrameFormat:KxVideoFrameFormatYUV]) { _renderer = [[KxMovieGLRenderer_YUV alloc] init]; LoggerVideo(1, @"OK use YUV GL renderer"); } else { _renderer = [[KxMovieGLRenderer_RGB alloc] init]; LoggerVideo(1, @"OK use RGB GL renderer"); } CAEAGLLayer *eaglLayer = (CAEAGLLayer*) self.layer; eaglLayer.opaque = YES; eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:FALSE], kEAGLDrawablePropertyRetainedBacking, kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil]; _context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; if (!_context || ![EAGLContext setCurrentContext:_context]) { LoggerVideo(0, @"failed to setup EAGLContext"); self = nil; return nil; } glGenFramebuffers(1, &_framebuffer); glGenRenderbuffers(1, &_renderbuffer); glBindFramebuffer(GL_FRAMEBUFFER, _framebuffer); glBindRenderbuffer(GL_RENDERBUFFER, _renderbuffer); [_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer]; glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &_backingWidth); glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &_backingHeight); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, _renderbuffer); GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if (status != GL_FRAMEBUFFER_COMPLETE) { LoggerVideo(0, @"failed to make complete framebuffer object %x", status); self = nil; return nil; } GLenum glError = glGetError(); if (GL_NO_ERROR != glError) { LoggerVideo(0, @"failed to setup GL %x", glError); self = nil; return nil; } if (![self loadShaders]) { self = nil; return nil; } _vertices[0] = -1.0f; // x0 _vertices[1] = -1.0f; // y0 _vertices[2] = 1.0f; // .. _vertices[3] = -1.0f; _vertices[4] = -1.0f; _vertices[5] = 1.0f; _vertices[6] = 1.0f; // x3 _vertices[7] = 1.0f; // y3 LoggerVideo(1, @"OK setup GL"); } return self; } - (void)dealloc { _renderer = nil; if (_framebuffer) { glDeleteFramebuffers(1, &_framebuffer); _framebuffer = 0; } if (_renderbuffer) { glDeleteRenderbuffers(1, &_renderbuffer); _renderbuffer = 0; } if (_program) { glDeleteProgram(_program); _program = 0; } if ([EAGLContext currentContext] == _context) { [EAGLContext setCurrentContext:nil]; } _context = nil; } - (void)layoutSubviews { glBindRenderbuffer(GL_RENDERBUFFER, _renderbuffer); [_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer]; glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &_backingWidth); glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &_backingHeight); GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if (status != GL_FRAMEBUFFER_COMPLETE) { LoggerVideo(0, @"failed to make complete framebuffer object %x", status); } else { LoggerVideo(1, @"OK setup GL framebuffer %d:%d", _backingWidth, _backingHeight); } [self updateVertices]; [self render: nil]; } - (void)setContentMode:(UIViewContentMode)contentMode { [super setContentMode:contentMode]; [self updateVertices]; if (_renderer.isValid) [self render:nil]; } - (BOOL)loadShaders { BOOL result = NO; GLuint vertShader = 0, fragShader = 0; _program = glCreateProgram(); vertShader = compileShader(GL_VERTEX_SHADER, vertexShaderString); if (!vertShader) goto exit; fragShader = compileShader(GL_FRAGMENT_SHADER, _renderer.fragmentShader); if (!fragShader) goto exit; glAttachShader(_program, vertShader); glAttachShader(_program, fragShader); glBindAttribLocation(_program, ATTRIBUTE_VERTEX, "position"); glBindAttribLocation(_program, ATTRIBUTE_TEXCOORD, "texcoord"); glLinkProgram(_program); GLint status; glGetProgramiv(_program, GL_LINK_STATUS, &status); if (status == GL_FALSE) { LoggerVideo(0, @"Failed to link program %d", _program); goto exit; } result = validateProgram(_program); _uniformMatrix = glGetUniformLocation(_program, "modelViewProjectionMatrix"); [_renderer resolveUniforms:_program]; exit: if (vertShader) glDeleteShader(vertShader); if (fragShader) glDeleteShader(fragShader); if (result) { LoggerVideo(1, @"OK setup GL programm"); } else { glDeleteProgram(_program); _program = 0; } return result; } - (void)updateVertices { const BOOL fit = (self.contentMode == UIViewContentModeScaleAspectFit); const float width = _decoder.frameWidth; const float height = _decoder.frameHeight; const float dH = (float)_backingHeight / height; const float dW = (float)_backingWidth / width; const float dd = fit ? MIN(dH, dW) : MAX(dH, dW); const float h = (height * dd / (float)_backingHeight); const float w = (width * dd / (float)_backingWidth ); _vertices[0] = - w; _vertices[1] = - h; _vertices[2] = w; _vertices[3] = - h; _vertices[4] = - w; _vertices[5] = h; _vertices[6] = w; _vertices[7] = h; } - (void)render: (KxVideoFrame *) frame { static const GLfloat texCoords[] = { 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, }; [EAGLContext setCurrentContext:_context]; glBindFramebuffer(GL_FRAMEBUFFER, _framebuffer); glViewport(0, 0, _backingWidth, _backingHeight); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glUseProgram(_program); if (frame) { [_renderer setFrame:frame]; } if ([_renderer prepareRender]) { GLfloat modelviewProj[16]; mat4f_LoadOrtho(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, modelviewProj); glUniformMatrix4fv(_uniformMatrix, 1, GL_FALSE, modelviewProj); glVertexAttribPointer(ATTRIBUTE_VERTEX, 2, GL_FLOAT, 0, 0, _vertices); glEnableVertexAttribArray(ATTRIBUTE_VERTEX); glVertexAttribPointer(ATTRIBUTE_TEXCOORD, 2, GL_FLOAT, 0, 0, texCoords); glEnableVertexAttribArray(ATTRIBUTE_TEXCOORD); #if 0 if (!validateProgram(_program)) { LoggerVideo(0, @"Failed to validate program"); return; } #endif glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } glBindRenderbuffer(GL_RENDERBUFFER, _renderbuffer); [_context presentRenderbuffer:GL_RENDERBUFFER]; } @end ================================================ FILE: 3rParty/kxmovie/KxMovieViewController.h ================================================ // // ViewController.h // kxmovieapp // // Created by Kolyvan on 11.10.12. // Copyright (c) 2012 Konstantin Boukreev . All rights reserved. // // https://github.com/kolyvan/kxmovie // this file is part of KxMovie // KxMovie is licenced under the LGPL v3, see lgpl-3.0.txt #import @class KxMovieDecoder; extern NSString * const KxMovieParameterMinBufferedDuration; // Float extern NSString * const KxMovieParameterMaxBufferedDuration; // Float extern NSString * const KxMovieParameterDisableDeinterlacing; // BOOL typedef void(^KxPlayCallBack)(NSError *error, BOOL success); typedef void(^KxVCCallBack)(); @interface KxMovieViewController : UIViewController + (id) movieViewControllerWithContentPath: (NSString *) path parameters: (NSDictionary *) parameters; @property (readonly) BOOL playing; @property (nonatomic, assign) NSInteger timeout; @property (nonatomic, copy) KxPlayCallBack playCallBack; @property (nonatomic, copy) KxVCCallBack VCCallBack; @property (nonatomic, strong) UIAlertView *alertView; - (void) play; - (void) pause; @end ================================================ FILE: 3rParty/kxmovie/KxMovieViewController.m ================================================ // // ViewController.m // kxmovieapp // // Created by Kolyvan on 11.10.12. // Copyright (c) 2012 Konstantin Boukreev . All rights reserved. // // https://github.com/kolyvan/kxmovie // this file is part of KxMovie // KxMovie is licenced under the LGPL v3, see lgpl-3.0.txt #import "KxMovieViewController.h" #import #import #import "KxMovieDecoder.h" #import "KxAudioManager.h" #import "KxMovieGLView.h" #import "KxLogger.h" NSString * const KxMovieParameterMinBufferedDuration = @"KxMovieParameterMinBufferedDuration"; NSString * const KxMovieParameterMaxBufferedDuration = @"KxMovieParameterMaxBufferedDuration"; NSString * const KxMovieParameterDisableDeinterlacing = @"KxMovieParameterDisableDeinterlacing"; //////////////////////////////////////////////////////////////////////////////// static NSString * formatTimeInterval(CGFloat seconds, BOOL isLeft) { seconds = MAX(0, seconds); NSInteger s = seconds; NSInteger m = s / 60; NSInteger h = m / 60; s = s % 60; m = m % 60; NSMutableString *format = [(isLeft && seconds >= 0.5 ? @"-" : @"") mutableCopy]; if (h != 0) [format appendFormat:@"%ld:%0.2ld", (long)h, (long)m]; else [format appendFormat:@"%ld", (long)m]; [format appendFormat:@":%0.2ld", (long)s]; return format; } //////////////////////////////////////////////////////////////////////////////// enum { KxMovieInfoSectionGeneral, KxMovieInfoSectionVideo, KxMovieInfoSectionAudio, KxMovieInfoSectionSubtitles, KxMovieInfoSectionMetadata, KxMovieInfoSectionCount, }; enum { KxMovieInfoGeneralFormat, KxMovieInfoGeneralBitrate, KxMovieInfoGeneralCount, }; //////////////////////////////////////////////////////////////////////////////// static NSMutableDictionary * gHistory; #define LOCAL_MIN_BUFFERED_DURATION 0.2 #define LOCAL_MAX_BUFFERED_DURATION 0.4 #define NETWORK_MIN_BUFFERED_DURATION 2.0 #define NETWORK_MAX_BUFFERED_DURATION 4.0 @interface KxMovieViewController () { KxMovieDecoder *_decoder; dispatch_queue_t _dispatchQueue; NSMutableArray *_videoFrames; NSMutableArray *_audioFrames; NSMutableArray *_subtitles; NSData *_currentAudioFrame; NSUInteger _currentAudioFramePos; CGFloat _moviePosition; BOOL _disableUpdateHUD; NSTimeInterval _tickCorrectionTime; NSTimeInterval _tickCorrectionPosition; NSUInteger _tickCounter; BOOL _fullscreen; BOOL _hiddenHUD; BOOL _fitMode; BOOL _infoMode; BOOL _restoreIdleTimer; BOOL _interrupted; KxMovieGLView *_glView; UIImageView *_imageView; UIView *_topHUD; UIToolbar *_topBar; UIToolbar *_bottomBar; UISlider *_progressSlider; UIBarButtonItem *_playBtn; // 播放 UIBarButtonItem *_pauseBtn; // 暂停 UIBarButtonItem *_rewindBtn; // 倒放 UIBarButtonItem *_fforwardBtn; // 前进 UIBarButtonItem *_fullScreenBtn; // 占位 UIBarButtonItem *_spaceItem; // 占位 UIBarButtonItem *_fixedSpaceItem; // 占位 UIButton *_doneButton; UILabel *_progressLabel; UILabel *_leftLabel; UIButton *_infoButton; UITableView *_tableView; UIActivityIndicatorView *_activityIndicatorView; UILabel *_subtitlesLabel; UITapGestureRecognizer *_tapGestureRecognizer; UITapGestureRecognizer *_doubleTapGestureRecognizer; UIPanGestureRecognizer *_panGestureRecognizer; #ifdef DEBUG UILabel *_messageLabel; NSTimeInterval _debugStartTime; NSUInteger _debugAudioStatus; NSDate *_debugAudioStatusTS; #endif CGFloat _bufferedDuration; CGFloat _minBufferedDuration; CGFloat _maxBufferedDuration; BOOL _buffered; BOOL _savedIdleTimer; NSDictionary *_parameters; } @property (readwrite) BOOL playing; @property (readwrite) BOOL lastPlayingState; @property (readwrite) BOOL decoding; @property (readwrite, strong) KxArtworkFrame *artworkFrame; @end @implementation KxMovieViewController + (void)initialize { if (!gHistory) gHistory = [NSMutableDictionary dictionary]; } - (BOOL)prefersStatusBarHidden { return _hiddenHUD; } + (id) movieViewControllerWithContentPath: (NSString *) path parameters: (NSDictionary *) parameters { //初始化音频 id audioManager = [KxAudioManager audioManager]; [audioManager activateAudioSession]; return [[KxMovieViewController alloc] initWithContentPath: path parameters: parameters]; } - (id) initWithContentPath: (NSString *) path parameters: (NSDictionary *) parameters { NSAssert(path.length > 0, @"empty path"); self = [super initWithNibName:nil bundle:nil]; if (self) { _moviePosition = 0; // self.wantsFullScreenLayout = YES; self.timeout = 30; _parameters = parameters; __weak KxMovieViewController *weakSelf = self; KxMovieDecoder *decoder = [[KxMovieDecoder alloc] init]; //设置解码器中断回调 decoder.interruptCallback = ^BOOL(){ __strong KxMovieViewController *strongSelf = weakSelf; return strongSelf ? [strongSelf interruptDecoder] : YES; }; dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSError *error = nil; [decoder openFile:path error:&error]; __weak __block typeof(self) mySelf = self; if (mySelf) { dispatch_sync(dispatch_get_main_queue(), ^{ [mySelf setMovieDecoder:decoder withError:error]; }); } }); } return self; } - (void) dealloc { [self pause]; [[NSNotificationCenter defaultCenter] removeObserver:self]; if (_dispatchQueue) { // Not needed as of ARC. // dispatch_release(_dispatchQueue); _dispatchQueue = NULL; } LoggerStream(1, @"%@ dealloc", self); } - (void)loadView { // LoggerStream(1, @"loadView"); CGRect bounds = [[UIScreen mainScreen] applicationFrame]; self.view = [[UIView alloc] initWithFrame:bounds]; self.view.backgroundColor = [UIColor blackColor]; self.view.tintColor = [UIColor blackColor]; _activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleWhiteLarge]; _activityIndicatorView.center = self.view.center; _activityIndicatorView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; [self.view addSubview:_activityIndicatorView]; CGFloat width = bounds.size.width; CGFloat height = bounds.size.height; #ifdef DEBUG _messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(20,40,width-40,40)]; _messageLabel.backgroundColor = [UIColor clearColor]; _messageLabel.textColor = [UIColor redColor]; _messageLabel.hidden = YES; _messageLabel.font = [UIFont systemFontOfSize:14]; _messageLabel.numberOfLines = 2; _messageLabel.textAlignment = NSTextAlignmentCenter; _messageLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth; [self.view addSubview:_messageLabel]; #endif CGFloat topH = 50; CGFloat botH = 50; _topHUD = [[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)]; _topBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, width, topH)]; _bottomBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, height-botH, width, botH)]; _bottomBar.tintColor = [UIColor blackColor]; _topHUD.frame = CGRectMake(0,0,width,_topBar.frame.size.height); _topHUD.autoresizingMask = UIViewAutoresizingFlexibleWidth; _topBar.autoresizingMask = UIViewAutoresizingFlexibleWidth; _bottomBar.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth; [self.view addSubview:_topBar]; [self.view addSubview:_topHUD]; [self.view addSubview:_bottomBar]; // top hud _doneButton = [UIButton buttonWithType:UIButtonTypeCustom]; _doneButton.frame = CGRectMake(0, 1, 50, topH); _doneButton.backgroundColor = [UIColor clearColor]; // _doneButton.backgroundColor = [UIColor redColor]; [_doneButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [_doneButton setTitle:NSLocalizedString(@"OK", nil) forState:UIControlStateNormal]; _doneButton.titleLabel.font = [UIFont systemFontOfSize:18]; _doneButton.showsTouchWhenHighlighted = YES; [_doneButton addTarget:self action:@selector(doneDidTouch:) forControlEvents:UIControlEventTouchUpInside]; // [_doneButton setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter]; _progressLabel = [[UILabel alloc] initWithFrame:CGRectMake(46, 1, 50, topH)]; _progressLabel.backgroundColor = [UIColor clearColor]; _progressLabel.opaque = NO; _progressLabel.adjustsFontSizeToFitWidth = NO; _progressLabel.textAlignment = NSTextAlignmentRight; _progressLabel.textColor = [UIColor blackColor]; _progressLabel.text = @""; _progressLabel.font = [UIFont systemFontOfSize:12]; _progressSlider = [[UISlider alloc] initWithFrame:CGRectMake(100, 2, width-197, topH)]; _progressSlider.autoresizingMask = UIViewAutoresizingFlexibleWidth; _progressSlider.continuous = NO; _progressSlider.value = 0; // [_progressSlider setThumbImage:[UIImage imageNamed:@"kxmovie.bundle/sliderthumb"] // forState:UIControlStateNormal]; _leftLabel = [[UILabel alloc] initWithFrame:CGRectMake(width-92, 1, 60, topH)]; _leftLabel.backgroundColor = [UIColor clearColor]; _leftLabel.opaque = NO; _leftLabel.adjustsFontSizeToFitWidth = NO; _leftLabel.textAlignment = NSTextAlignmentLeft; _leftLabel.textColor = [UIColor blackColor]; _leftLabel.text = @""; _leftLabel.font = [UIFont systemFontOfSize:12]; _leftLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; _infoButton = [UIButton buttonWithType:UIButtonTypeInfoDark]; _infoButton.frame = CGRectMake(width-31, (topH-20)/2+1, 20, 20); _infoButton.showsTouchWhenHighlighted = YES; _infoButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; [_infoButton addTarget:self action:@selector(infoDidTouch:) forControlEvents:UIControlEventTouchUpInside]; [_topHUD addSubview:_doneButton]; [_topHUD addSubview:_progressLabel]; [_topHUD addSubview:_progressSlider]; [_topHUD addSubview:_leftLabel]; [_topHUD addSubview:_infoButton]; // bottom hud _spaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; _fixedSpaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; _fixedSpaceItem.width = 30; _rewindBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRewind target:self action:@selector(rewindDidTouch:)]; _playBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:@selector(playDidTouch:)]; _playBtn.width = 50; _pauseBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPause target:self action:@selector(playDidTouch:)]; _pauseBtn.width = 50; _fforwardBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFastForward target:self action:@selector(forwardDidTouch:)]; _fullScreenBtn = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"kxmovie.bundle/fullscreen-normal"] style:UIBarButtonItemStyleDone target:self action:@selector(fullScreenDidTouch:)]; [self updateBottomBar]; if (_decoder) { [self setupPresentView]; } else { _progressLabel.hidden = YES; _progressSlider.hidden = YES; _leftLabel.hidden = YES; _infoButton.hidden = YES; } __weak __block typeof(self) mySelf = self; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, self.timeout * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) { if (!mySelf.playing && mySelf.playCallBack) { mySelf.playCallBack(nil, NO); } }); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; if (self.playing) { [self pause]; [self freeBufferedFrames]; if (_maxBufferedDuration > 0) { _minBufferedDuration = _maxBufferedDuration = 0; [self play]; LoggerStream(0, @"didReceiveMemoryWarning, disable buffering and continue playing"); } else { // force ffmpeg to free allocated memory [_decoder closeFile]; [_decoder openFile:nil error:nil]; [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Failure", nil) message:NSLocalizedString(@"Out of memory", nil) delegate:nil cancelButtonTitle:NSLocalizedString(@"Close", nil) otherButtonTitles:nil] show]; } } else { [self freeBufferedFrames]; [_decoder closeFile]; [_decoder openFile:nil error:nil]; } } - (void) viewDidAppear:(BOOL)animated { // LoggerStream(1, @"viewDidAppear"); [super viewDidAppear:animated]; if (self.presentingViewController) [self fullscreenMode:YES]; if (_infoMode) [self showInfoView:NO animated:NO]; _savedIdleTimer = [[UIApplication sharedApplication] isIdleTimerDisabled]; [self showHUD: YES]; if (_decoder) { [self restorePlay]; } else { [_activityIndicatorView startAnimating]; } [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:[UIApplication sharedApplication]]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:[UIApplication sharedApplication]]; } - (void) viewWillDisappear:(BOOL)animated { [[NSNotificationCenter defaultCenter] removeObserver:self]; [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showHUDNumber:) object:@(NO)]; [super viewWillDisappear:animated]; [_activityIndicatorView stopAnimating]; if (_decoder) { [self pause]; if (_moviePosition == 0 || _decoder.isEOF) [gHistory removeObjectForKey:_decoder.path]; else if (!_decoder.isNetwork) [gHistory setValue:[NSNumber numberWithFloat:_moviePosition] forKey:_decoder.path]; } if (_fullscreen) [self fullscreenMode:NO]; [[UIApplication sharedApplication] setIdleTimerDisabled:_savedIdleTimer]; [_activityIndicatorView stopAnimating]; _buffered = NO; _interrupted = YES; LoggerStream(1, @"viewWillDisappear %@", self); } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); } - (void) applicationWillResignActive: (NSNotification *)notification { [self showHUD:YES]; [self pause]; LoggerStream(1, @"applicationWillResignActive"); } - (void)applicationDidBecomeActive:(NSNotification *)notification{ [self showHUD:YES]; if (self.lastPlayingState) { [self play]; } } #pragma mark - gesture recognizer - (void) handleTap: (UITapGestureRecognizer *) sender { if (sender.state == UIGestureRecognizerStateEnded) { if (sender == _tapGestureRecognizer) { [self showHUD: _hiddenHUD]; } else if (sender == _doubleTapGestureRecognizer) { UIView *frameView = [self frameView]; if (frameView.contentMode == UIViewContentModeScaleAspectFit) frameView.contentMode = UIViewContentModeScaleAspectFill; else frameView.contentMode = UIViewContentModeScaleAspectFit; } } } - (void) handlePan: (UIPanGestureRecognizer *) sender { if (sender.state == UIGestureRecognizerStateEnded) { const CGPoint vt = [sender velocityInView:self.view]; const CGPoint pt = [sender translationInView:self.view]; const CGFloat sp = MAX(0.1, log10(fabs(vt.x)) - 1.0); const CGFloat sc = fabs(pt.x) * 0.33 * sp; if (sc > 10) { const CGFloat ff = pt.x > 0 ? 1.0 : -1.0; [self setMoviePosition: _moviePosition + ff * MIN(sc, 600.0)]; } //LoggerStream(2, @"pan %.2f %.2f %.2f sec", pt.x, vt.x, sc); } } #pragma mark - public -(void) play { if (self.playing) return; if (!_decoder.validVideo && !_decoder.validAudio) { return; } if (_interrupted) return; self.playing = YES; _interrupted = NO; _disableUpdateHUD = NO; _tickCorrectionTime = 0; _tickCounter = 0; #ifdef DEBUG _debugStartTime = -1; #endif //解码frame [self asyncDecodeFrames]; [self updatePlayButton]; // 这个函数也就是延时操作,为什么这样做其实就是为了做开始加载的缓存,可以分析一下这里是0.1s后再去执行tick函数,在此之间已经解码几十帧数据了。接下来看tick函数: dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ [self tick]; }); if (_decoder.validAudio) [self enableAudio:YES]; if (self.playCallBack) { self.playCallBack(nil, YES); } [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; LoggerStream(1, @"play movie"); } - (void) pause { self.lastPlayingState = self.playing; if (!self.playing) return; self.playing = NO; //_interrupted = YES; [self enableAudio:NO]; [self updatePlayButton]; LoggerStream(1, @"pause movie"); [[UIApplication sharedApplication] setIdleTimerDisabled:NO]; } - (void) setMoviePosition: (CGFloat) position { BOOL playMode = self.playing; self.playing = NO; _disableUpdateHUD = YES; [self enableAudio:NO]; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC); __weak __block typeof(self) mySelf = self; dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ [mySelf updatePosition:position playMode:playMode]; }); } #pragma mark - actions - (void) doneDidTouch: (id) sender { if (self.presentingViewController || !self.navigationController) [self dismissViewControllerAnimated:YES completion:nil]; else [self.navigationController popViewControllerAnimated:YES]; self.VCCallBack(); self.playCallBack = nil; self.VCCallBack = nil; } - (void) infoDidTouch: (id) sender { [self showInfoView: !_infoMode animated:YES]; } - (void) playDidTouch: (id) sender { if (self.playing) [self pause]; else [self play]; } - (void) forwardDidTouch: (id) sender { [self setMoviePosition: _moviePosition + 10]; } - (void) rewindDidTouch: (id) sender { [self setMoviePosition: _moviePosition - 10]; } - (void)fullScreenDidTouch:(id)sender{ // [UIView animateWithDuration:0.3 animations:^{ // CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_2); // [self.view setTransform:transform]; //// self.view.frame = CGRectMake(0, 0, CGRectGetHeight([UIScreen mainScreen].bounds), CGRectGetWidth([UIScreen mainScreen].bounds)); // } completion:^(BOOL finished) { // [self fullscreenMode:YES]; // [self.view setNeedsLayout]; // }]; if (_fullscreen) { [self transformToInterfaceOrientation:UIInterfaceOrientationPortrait]; [self fullscreenMode:NO]; }else { [self transformToInterfaceOrientation:UIInterfaceOrientationLandscapeRight]; [self fullscreenMode:YES]; } } - (void)transformToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) { SEL selector = NSSelectorFromString(@"setOrientation:"); NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]]; [invocation setSelector:selector]; [invocation setTarget:[UIDevice currentDevice]]; int val = interfaceOrientation;; [invocation setArgument:&val atIndex:2]; [invocation invoke]; } } - (void) progressDidChange: (id) sender { NSAssert(_decoder.duration != MAXFLOAT, @"bugcheck"); UISlider *slider = sender; [self setMoviePosition:slider.value * _decoder.duration]; } #pragma mark - private - (void) setMovieDecoder: (KxMovieDecoder *) decoder withError: (NSError *) error { LoggerStream(2, @"setMovieDecoder"); if (!error && decoder) { _decoder = decoder; _dispatchQueue = dispatch_queue_create("KxMovie", DISPATCH_QUEUE_SERIAL); _videoFrames = [NSMutableArray array]; _audioFrames = [NSMutableArray array]; if (_decoder.subtitleStreamsCount) { _subtitles = [NSMutableArray array]; } if (_decoder.isNetwork) { _minBufferedDuration = NETWORK_MIN_BUFFERED_DURATION; _maxBufferedDuration = NETWORK_MAX_BUFFERED_DURATION; } else { _minBufferedDuration = LOCAL_MIN_BUFFERED_DURATION; _maxBufferedDuration = LOCAL_MAX_BUFFERED_DURATION; } if (!_decoder.validVideo) _minBufferedDuration *= 10.0; // increase for audio // allow to tweak some parameters at runtime if (_parameters.count) { id val; val = [_parameters valueForKey: KxMovieParameterMinBufferedDuration]; if ([val isKindOfClass:[NSNumber class]]) _minBufferedDuration = [val floatValue]; val = [_parameters valueForKey: KxMovieParameterMaxBufferedDuration]; if ([val isKindOfClass:[NSNumber class]]) _maxBufferedDuration = [val floatValue]; val = [_parameters valueForKey: KxMovieParameterDisableDeinterlacing]; if ([val isKindOfClass:[NSNumber class]]) _decoder.disableDeinterlacing = [val boolValue]; if (_maxBufferedDuration < _minBufferedDuration) _maxBufferedDuration = _minBufferedDuration * 2; } LoggerStream(2, @"buffered limit: %.1f - %.1f", _minBufferedDuration, _maxBufferedDuration); if (self.isViewLoaded) { [self setupPresentView]; _progressLabel.hidden = NO; _progressSlider.hidden = NO; _leftLabel.hidden = NO; _infoButton.hidden = NO; if (_activityIndicatorView.isAnimating) { [_activityIndicatorView stopAnimating]; // if (self.view.window) [self restorePlay]; } } } else { if (self.isViewLoaded && self.view.window) { [_activityIndicatorView stopAnimating]; if (!_interrupted) [self handleDecoderMovieError: error]; } } } - (void) restorePlay { NSNumber *n = [gHistory valueForKey:_decoder.path]; if (n) [self updatePosition:n.floatValue playMode:YES]; else [self play]; } - (void) setupPresentView { CGRect bounds = self.view.bounds; if (_decoder.validVideo) { _glView = [[KxMovieGLView alloc] initWithFrame:bounds decoder:_decoder]; } if (!_glView) { LoggerVideo(0, @"fallback to use RGB video frame and UIKit"); [_decoder setupVideoFrameFormat:KxVideoFrameFormatRGB]; _imageView = [[UIImageView alloc] initWithFrame:bounds]; _imageView.backgroundColor = [UIColor blackColor]; } UIView *frameView = [self frameView]; frameView.contentMode = UIViewContentModeScaleAspectFit; frameView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin; [self.view insertSubview:frameView atIndex:0]; if (_decoder.validVideo) { [self setupUserInteraction]; } else { _imageView.image = [UIImage imageNamed:@"kxmovie.bundle/music_icon.png"]; _imageView.contentMode = UIViewContentModeCenter; } self.view.backgroundColor = [UIColor clearColor]; if (_decoder.duration == MAXFLOAT) { _leftLabel.text = @"\u221E"; // infinity _leftLabel.font = [UIFont systemFontOfSize:14]; CGRect frame; frame = _leftLabel.frame; frame.origin.x += 40; frame.size.width -= 40; _leftLabel.frame = frame; frame =_progressSlider.frame; frame.size.width += 40; _progressSlider.frame = frame; } else { [_progressSlider addTarget:self action:@selector(progressDidChange:) forControlEvents:UIControlEventValueChanged]; } if (_decoder.subtitleStreamsCount) { CGSize size = self.view.bounds.size; _subtitlesLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, size.height, size.width, 0)]; _subtitlesLabel.numberOfLines = 0; _subtitlesLabel.backgroundColor = [UIColor clearColor]; _subtitlesLabel.opaque = NO; _subtitlesLabel.adjustsFontSizeToFitWidth = NO; _subtitlesLabel.textAlignment = NSTextAlignmentCenter; _subtitlesLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth; _subtitlesLabel.textColor = [UIColor whiteColor]; _subtitlesLabel.font = [UIFont systemFontOfSize:16]; _subtitlesLabel.hidden = YES; [self.view addSubview:_subtitlesLabel]; } } - (void) setupUserInteraction { UIView * view = [self frameView]; view.userInteractionEnabled = YES; _tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; _tapGestureRecognizer.numberOfTapsRequired = 1; _doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; _doubleTapGestureRecognizer.numberOfTapsRequired = 2; [_tapGestureRecognizer requireGestureRecognizerToFail: _doubleTapGestureRecognizer]; [view addGestureRecognizer:_doubleTapGestureRecognizer]; [view addGestureRecognizer:_tapGestureRecognizer]; // _panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; // _panGestureRecognizer.enabled = NO; // // [view addGestureRecognizer:_panGestureRecognizer]; } - (UIView *) frameView { return _glView ? _glView : _imageView; } - (void) audioCallbackFillData: (float *) outData numFrames: (UInt32) numFrames numChannels: (UInt32) numChannels { //fillSignalF(outData,numFrames,numChannels); //return; if (_buffered) { memset(outData, 0, numFrames * numChannels * sizeof(float)); return; } @autoreleasepool { while (numFrames > 0) { if (!_currentAudioFrame) { @synchronized(_audioFrames) { NSUInteger count = _audioFrames.count; if (count > 0) { KxAudioFrame *frame = _audioFrames[0]; #ifdef DUMP_AUDIO_DATA LoggerAudio(2, @"Audio frame position: %f", frame.position); #endif if (_decoder.validVideo) { const CGFloat delta = _moviePosition - frame.position; if (delta < -0.1) { memset(outData, 0, numFrames * numChannels * sizeof(float)); #ifdef DEBUG LoggerStream(0, @"desync audio (outrun) wait %.4f %.4f", _moviePosition, frame.position); _debugAudioStatus = 1; _debugAudioStatusTS = [NSDate date]; #endif break; // silence and exit } [_audioFrames removeObjectAtIndex:0]; if (delta > 0.1 && count > 1) { #ifdef DEBUG LoggerStream(0, @"desync audio (lags) skip %.4f %.4f", _moviePosition, frame.position); _debugAudioStatus = 2; _debugAudioStatusTS = [NSDate date]; #endif continue; } } else { [_audioFrames removeObjectAtIndex:0]; _moviePosition = frame.position; _bufferedDuration -= frame.duration; } _currentAudioFramePos = 0; _currentAudioFrame = frame.samples; } } } if (_currentAudioFrame) { const void *bytes = (Byte *)_currentAudioFrame.bytes + _currentAudioFramePos; const NSUInteger bytesLeft = (_currentAudioFrame.length - _currentAudioFramePos); const NSUInteger frameSizeOf = numChannels * sizeof(float); const NSUInteger bytesToCopy = MIN(numFrames * frameSizeOf, bytesLeft); const NSUInteger framesToCopy = bytesToCopy / frameSizeOf; memcpy(outData, bytes, bytesToCopy); numFrames -= framesToCopy; outData += framesToCopy * numChannels; if (bytesToCopy < bytesLeft) _currentAudioFramePos += bytesToCopy; else _currentAudioFrame = nil; } else { memset(outData, 0, numFrames * numChannels * sizeof(float)); //LoggerStream(1, @"silence audio"); #ifdef DEBUG _debugAudioStatus = 3; _debugAudioStatusTS = [NSDate date]; #endif break; } } } } - (void) enableAudio: (BOOL) on { id audioManager = [KxAudioManager audioManager]; if (on && _decoder.validAudio) { audioManager.outputBlock = ^(float *outData, UInt32 numFrames, UInt32 numChannels) { [self audioCallbackFillData: outData numFrames:numFrames numChannels:numChannels]; }; [audioManager play]; LoggerAudio(2, @"audio device smr: %d fmt: %d chn: %d", (int)audioManager.samplingRate, (int)audioManager.numBytesPerSample, (int)audioManager.numOutputChannels); } else { [audioManager pause]; audioManager.outputBlock = nil; } } /***** * *这个函数主要对_bufferedDuration(缓存时长)进行累加,以及对数据的保存都存放一个数组里面,最后面判断当前的缓存有没有超过最大的缓存。这样一个视频帧的解码以及的采集就完成,接着回去看主线程的显示。 第一次定时(tick): */ - (BOOL) addFrames: (NSArray *)frames { if (_decoder.validVideo) { @synchronized(_videoFrames) { for (KxMovieFrame *frame in frames) if (frame.type == KxMovieFrameTypeVideo) { [_videoFrames addObject:frame]; _bufferedDuration += frame.duration; } } } if (_decoder.validAudio) { @synchronized(_audioFrames) { for (KxMovieFrame *frame in frames) if (frame.type == KxMovieFrameTypeAudio) { [_audioFrames addObject:frame]; if (!_decoder.validVideo) _bufferedDuration += frame.duration; } } if (!_decoder.validVideo) { for (KxMovieFrame *frame in frames) if (frame.type == KxMovieFrameTypeArtwork) self.artworkFrame = (KxArtworkFrame *)frame; } } if (_decoder.validSubtitles) { @synchronized(_subtitles) { for (KxMovieFrame *frame in frames) if (frame.type == KxMovieFrameTypeSubtitle) { [_subtitles addObject:frame]; } } } //最大缓存 return self.playing && _bufferedDuration < _maxBufferedDuration; } - (BOOL) decodeFrames { //NSAssert(dispatch_get_current_queue() == _dispatchQueue, @"bugcheck"); NSArray *frames = nil; if (_decoder.validVideo || _decoder.validAudio) { frames = [_decoder decodeFrames:0]; } if (frames.count) { return [self addFrames: frames]; } return NO; } /** * * 这里就得分两步走了 asyncDecodeFrames 开启一个异步线程去执行解码操作 另外一边在主线程执行播放的操作. * 代码很简单在这个线程里面开启一个whil(1)循环,使这个线程一直存活,一直在解码数据将解码玩的数据放addFrames进行处理。 */ - (void) asyncDecodeFrames { if (self.decoding) return; __weak KxMovieViewController *weakSelf = self; __weak KxMovieDecoder *weakDecoder = _decoder; const CGFloat duration = _decoder.isNetwork ? .0f : 0.1f; self.decoding = YES; dispatch_async(_dispatchQueue, ^{ { __strong KxMovieViewController *strongSelf = weakSelf; if (!strongSelf.playing) return; } BOOL good = YES; // while(1) while (good) { good = NO; @autoreleasepool { __strong KxMovieDecoder *decoder = weakDecoder; if (decoder && (decoder.validVideo || decoder.validAudio)) { NSArray *frames = [decoder decodeFrames:duration]; if (frames.count) { __strong KxMovieViewController *strongSelf = weakSelf; if (strongSelf) good = [strongSelf addFrames:frames]; } } } } { __strong KxMovieViewController *strongSelf = weakSelf; if (strongSelf) strongSelf.decoding = NO; } }); } /**** * *tick函数其实就相当于一个被一个定时器循环调用一样隔多少秒调用一次隔多少秒调用一次,调用一次显示一帧数据,下面来看具体的操作: 首先 if (_buffered && ((_bufferedDuration >_minBufferedDuration) || _decoder.isEOF)) 这里有个判断语句 _buffered表示是否需要缓存,如果数组里面有数据当然不需要缓存为NO否则为 YES。_bufferedDuration > _minBufferedDuration判断是否大于最小的缓存这里是2s。分析一下,tick()是在开始解码后0.1s才开始调用_bufferedDuration是进行帧的duration进行累加的,一帧是0.04s要大于2s的缓存肯定至少要解码50帧才可以显示。但是_buffered初始化设置为No,所以第一次缓存帧数是定时0.1的数量。 if (!_buffered) interval = [selfpresentFrame]; //显示一帧 */ - (void) tick { //缓存的时长 if (_buffered && ((_bufferedDuration > _minBufferedDuration) || _decoder.isEOF)) { _tickCorrectionTime = 0; _buffered = NO; [_activityIndicatorView stopAnimating]; } CGFloat interval = 0; if (!_buffered) interval = [self presentFrame]; //显示一帧 if (self.playing) { //还有可显示的音视频帧 const NSUInteger leftFrames = (_decoder.validVideo ? _videoFrames.count : 0) + (_decoder.validAudio ? _audioFrames.count : 0); // 网络不好的操作, 如果没有要显示的数据了 //这里也很好理解,当显示数据的数组里面没有数据了,自然就要等待,进行缓存,此时_minBufferedDuration肯定为0了,因为每显示一帧数据都要减去这一帧的duration,等数据都显示完了自然也就为0,将_buffered置为YES。这时不会调用presentFrame而且必须要等到_bufferedDuration > _minBufferedDuration才开始显示。 if (0 == leftFrames) { if (_decoder.isEOF) { [self pause]; [self updateHUD]; return; } //确认缓存里面是否还有数据 if (_minBufferedDuration > 0 && !_buffered) { _buffered = YES; //开始loading [_activityIndicatorView startAnimating]; } } if (!leftFrames || !(_bufferedDuration > _minBufferedDuration)) { [self asyncDecodeFrames]; } const NSTimeInterval correction = [self tickCorrection]; const NSTimeInterval time = MAX(interval + correction, 0.01); dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, time * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ [self tick]; }); } if ((_tickCounter++ % 3) == 0) { [self updateHUD]; } } - (CGFloat) tickCorrection { if (_buffered) return 0; const NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate]; if (!_tickCorrectionTime) { _tickCorrectionTime = now; //播放的位置 就是现在播的的时间 _tickCorrectionPosition = _moviePosition; return 0; } NSTimeInterval dPosition = _moviePosition - _tickCorrectionPosition; NSTimeInterval dTime = now - _tickCorrectionTime; NSTimeInterval correction = dPosition - dTime; //if ((_tickCounter % 200) == 0) // LoggerStream(1, @"tick correction %.4f", correction); if (correction > 1.f || correction < -1.f) { LoggerStream(1, @"tick correction reset %.2f", correction); correction = 0; _tickCorrectionTime = 0; } return correction; } - (CGFloat) presentFrame { CGFloat interval = 0; if (_decoder.validVideo) { KxVideoFrame *frame; @synchronized(_videoFrames) { if (_videoFrames.count > 0) { frame = _videoFrames[0]; [_videoFrames removeObjectAtIndex:0]; _bufferedDuration -= frame.duration; } } if (frame) interval = [self presentVideoFrame:frame]; } else if (_decoder.validAudio) { //interval = _bufferedDuration * 0.5; if (self.artworkFrame) { _imageView.image = [self.artworkFrame asImage]; self.artworkFrame = nil; } } if (_decoder.validSubtitles) [self presentSubtitles]; #ifdef DEBUG if (self.playing && _debugStartTime < 0) _debugStartTime = [NSDate timeIntervalSinceReferenceDate] - _moviePosition; #endif return interval; } - (CGFloat) presentVideoFrame: (KxVideoFrame *) frame { if (_glView) { [_glView render:frame]; } else { KxVideoFrameRGB *rgbFrame = (KxVideoFrameRGB *)frame; _imageView.image = [rgbFrame asImage]; } _moviePosition = frame.position; return frame.duration; } - (void) presentSubtitles { NSArray *actual, *outdated; if ([self subtitleForPosition:_moviePosition actual:&actual outdated:&outdated]){ if (outdated.count) { @synchronized(_subtitles) { [_subtitles removeObjectsInArray:outdated]; } } if (actual.count) { NSMutableString *ms = [NSMutableString string]; for (KxSubtitleFrame *subtitle in actual.reverseObjectEnumerator) { if (ms.length) [ms appendString:@"\n"]; [ms appendString:subtitle.text]; } if (![_subtitlesLabel.text isEqualToString:ms]) { CGSize viewSize = self.view.bounds.size; CGSize size = [ms sizeWithFont:_subtitlesLabel.font constrainedToSize:CGSizeMake(viewSize.width, viewSize.height * 0.5) lineBreakMode:NSLineBreakByTruncatingTail]; _subtitlesLabel.text = ms; _subtitlesLabel.frame = CGRectMake(0, viewSize.height - size.height - 10, viewSize.width, size.height); _subtitlesLabel.hidden = NO; } } else { _subtitlesLabel.text = nil; _subtitlesLabel.hidden = YES; } } } - (BOOL) subtitleForPosition: (CGFloat) position actual: (NSArray **) pActual outdated: (NSArray **) pOutdated { if (!_subtitles.count) return NO; NSMutableArray *actual = nil; NSMutableArray *outdated = nil; for (KxSubtitleFrame *subtitle in _subtitles) { if (position < subtitle.position) { break; // assume what subtitles sorted by position } else if (position >= (subtitle.position + subtitle.duration)) { if (pOutdated) { if (!outdated) outdated = [NSMutableArray array]; [outdated addObject:subtitle]; } } else { if (pActual) { if (!actual) actual = [NSMutableArray array]; [actual addObject:subtitle]; } } } if (pActual) *pActual = actual; if (pOutdated) *pOutdated = outdated; return actual.count || outdated.count; } - (void) updateBottomBar { UIBarButtonItem *playPauseBtn = self.playing ? _pauseBtn : _playBtn; [_bottomBar setItems:@[_spaceItem, _rewindBtn, _fixedSpaceItem, playPauseBtn, _fixedSpaceItem, _fforwardBtn, _spaceItem ,_fullScreenBtn] animated:NO]; } - (void) updatePlayButton { [self updateBottomBar]; } - (void) updateHUD { if (_disableUpdateHUD) return; const CGFloat duration = _decoder.duration; const CGFloat position = _moviePosition -_decoder.startTime; if (_progressSlider.state == UIControlStateNormal) _progressSlider.value = position / duration; _progressLabel.text = formatTimeInterval(position, NO); if (_decoder.duration != MAXFLOAT) _leftLabel.text = formatTimeInterval(duration - position, YES); #ifdef DEBUG const NSTimeInterval timeSinceStart = [NSDate timeIntervalSinceReferenceDate] - _debugStartTime; NSString *subinfo = _decoder.validSubtitles ? [NSString stringWithFormat: @" %@",@(_subtitles.count)] : @""; NSString *audioStatus; if (_debugAudioStatus) { if (NSOrderedAscending == [_debugAudioStatusTS compare: [NSDate dateWithTimeIntervalSinceNow:-0.5]]) { _debugAudioStatus = 0; } } if (_debugAudioStatus == 1) audioStatus = @"\n(audio outrun)"; else if (_debugAudioStatus == 2) audioStatus = @"\n(audio lags)"; else if (_debugAudioStatus == 3) audioStatus = @"\n(audio silence)"; else audioStatus = @""; _messageLabel.text = [NSString stringWithFormat:@"%@ %@%@ %c - %@ %@ %@\n%@", @(_videoFrames.count), @(_audioFrames.count), subinfo, self.decoding ? 'D' : ' ', formatTimeInterval(timeSinceStart, NO), //timeSinceStart > _moviePosition + 0.5 ? @" (lags)" : @"", _decoder.isEOF ? @"- END" : @"", audioStatus, _buffered ? [NSString stringWithFormat:@"buffering %.1f%%", _bufferedDuration / _minBufferedDuration * 100] : @""]; #endif } - (void) showHUD: (BOOL) show { [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showHUDNumber:) object:@(NO)]; _hiddenHUD = !show; _panGestureRecognizer.enabled = _hiddenHUD; [[UIApplication sharedApplication] setIdleTimerDisabled:_hiddenHUD]; __weak __block typeof(self) mySelf = self; [UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionTransitionNone animations:^{ CGFloat alpha = _hiddenHUD ? 0 : 1; _topBar.alpha = alpha; _topHUD.alpha = alpha; _bottomBar.alpha = alpha; } completion:^(BOOL finished) { NSLog(@"finish %d", finished); if(show){ [mySelf showHUDNumber:@(show)]; } }]; } - (void) showHUDNumber: (NSNumber *) show{ [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showHUDNumber:) object:@(NO)]; if(!show.boolValue && !_activityIndicatorView.isAnimating){ dispatch_async(dispatch_get_main_queue(), ^{ [self showHUD:NO]; }); return; } [self performSelector:@selector(showHUDNumber:) withObject:@(NO) afterDelay:5 ]; } - (void) fullscreenMode: (BOOL) on { _fullscreen = on; UIApplication *app = [UIApplication sharedApplication]; [app setStatusBarHidden:on withAnimation:UIStatusBarAnimationNone]; // if (!self.presentingViewController) { //[self.navigationController setNavigationBarHidden:on animated:YES]; //[self.tabBarController setTabBarHidden:on animated:YES]; // } } - (void) setMoviePositionFromDecoder { _moviePosition = _decoder.position; } - (void) setDecoderPosition: (CGFloat) position { _decoder.position = position; } - (void) enableUpdateHUD { _disableUpdateHUD = NO; } - (void) updatePosition: (CGFloat) position playMode: (BOOL) playMode { [self freeBufferedFrames]; position = MIN(_decoder.duration - 1, MAX(0, position)); __weak KxMovieViewController *weakSelf = self; dispatch_async(_dispatchQueue, ^{ if (playMode) { { __strong KxMovieViewController *strongSelf = weakSelf; if (!strongSelf) return; [strongSelf setDecoderPosition: position]; } dispatch_async(dispatch_get_main_queue(), ^{ __strong KxMovieViewController *strongSelf = weakSelf; if (strongSelf) { [strongSelf setMoviePositionFromDecoder]; [strongSelf play]; } }); } else { { __strong KxMovieViewController *strongSelf = weakSelf; if (!strongSelf) return; [strongSelf setDecoderPosition: position]; [strongSelf decodeFrames]; } dispatch_async(dispatch_get_main_queue(), ^{ __strong KxMovieViewController *strongSelf = weakSelf; if (strongSelf) { [strongSelf enableUpdateHUD]; [strongSelf setMoviePositionFromDecoder]; [strongSelf presentFrame]; [strongSelf updateHUD]; } }); } }); } - (void) freeBufferedFrames { @synchronized(_videoFrames) { [_videoFrames removeAllObjects]; } @synchronized(_audioFrames) { [_audioFrames removeAllObjects]; _currentAudioFrame = nil; } if (_subtitles) { @synchronized(_subtitles) { [_subtitles removeAllObjects]; } } _bufferedDuration = 0; } - (void) showInfoView: (BOOL) showInfo animated: (BOOL)animated { [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showHUDNumber:) object:@(NO)]; if (!_tableView) [self createTableView]; CGSize size = self.view.bounds.size; CGFloat Y = _topHUD.bounds.size.height; if (showInfo) { [self pause]; _tableView.hidden = NO; if (animated) { [UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionTransitionNone animations:^{ _tableView.frame = CGRectMake(0,Y,size.width,size.height - Y); } completion:nil]; } else { _tableView.frame = CGRectMake(0,Y,size.width,size.height - Y); } } else { if (animated) { [UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionTransitionNone animations:^{ _tableView.frame = CGRectMake(0,size.height,size.width,size.height - Y); } completion:^(BOOL f){ if (f) { _tableView.hidden = YES; } [self play]; }]; } else { [self play]; _tableView.frame = CGRectMake(0,size.height,size.width,size.height - Y); _tableView.hidden = YES; } } _infoMode = showInfo; } - (void) createTableView { _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped]; _tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin; _tableView.delegate = self; _tableView.dataSource = self; _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; _tableView.hidden = YES; CGSize size = self.view.bounds.size; CGFloat Y = _topHUD.bounds.size.height; _tableView.frame = CGRectMake(0,size.height,size.width,size.height - Y); [self.view addSubview:_tableView]; } - (void) handleDecoderMovieError: (NSError *) error { self.alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Failure", nil) message:[error localizedDescription] delegate:nil cancelButtonTitle:NSLocalizedString(@"Close", nil) otherButtonTitles:nil]; [self.alertView show]; if (self.playCallBack) { self.playCallBack(error, NO); } } - (BOOL) interruptDecoder { //if (!_decoder) // return NO; return _interrupted; } #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return KxMovieInfoSectionCount; } - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { switch (section) { case KxMovieInfoSectionGeneral: return NSLocalizedString(@"General", nil); case KxMovieInfoSectionMetadata: return NSLocalizedString(@"Metadata", nil); case KxMovieInfoSectionVideo: { NSArray *a = _decoder.info[@"video"]; return a.count ? NSLocalizedString(@"Video", nil) : nil; } case KxMovieInfoSectionAudio: { NSArray *a = _decoder.info[@"audio"]; return a.count ? NSLocalizedString(@"Audio", nil) : nil; } case KxMovieInfoSectionSubtitles: { NSArray *a = _decoder.info[@"subtitles"]; return a.count ? NSLocalizedString(@"Subtitles", nil) : nil; } } return @""; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { switch (section) { case KxMovieInfoSectionGeneral: return KxMovieInfoGeneralCount; case KxMovieInfoSectionMetadata: { NSDictionary *d = [_decoder.info valueForKey:@"metadata"]; return d.count; } case KxMovieInfoSectionVideo: { NSArray *a = _decoder.info[@"video"]; return a.count; } case KxMovieInfoSectionAudio: { NSArray *a = _decoder.info[@"audio"]; return a.count; } case KxMovieInfoSectionSubtitles: { NSArray *a = _decoder.info[@"subtitles"]; return a.count ? a.count + 1 : 0; } default: return 0; } } - (id) mkCell: (NSString *) cellIdentifier withStyle: (UITableViewCellStyle) style { UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:style reuseIdentifier:cellIdentifier]; } return cell; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell; if (indexPath.section == KxMovieInfoSectionGeneral) { if (indexPath.row == KxMovieInfoGeneralBitrate) { int bitrate = [_decoder.info[@"bitrate"] intValue]; cell = [self mkCell:@"ValueCell" withStyle:UITableViewCellStyleValue1]; cell.textLabel.text = NSLocalizedString(@"Bitrate", nil); cell.detailTextLabel.text = [NSString stringWithFormat:@"%d kb/s",bitrate / 1000]; } else if (indexPath.row == KxMovieInfoGeneralFormat) { NSString *format = _decoder.info[@"format"]; cell = [self mkCell:@"ValueCell" withStyle:UITableViewCellStyleValue1]; cell.textLabel.text = NSLocalizedString(@"Format", nil); cell.detailTextLabel.text = format ? format : @"-"; } } else if (indexPath.section == KxMovieInfoSectionMetadata) { NSDictionary *d = _decoder.info[@"metadata"]; NSString *key = d.allKeys[indexPath.row]; cell = [self mkCell:@"ValueCell" withStyle:UITableViewCellStyleValue1]; cell.textLabel.text = key.capitalizedString; cell.detailTextLabel.text = [d valueForKey:key]; } else if (indexPath.section == KxMovieInfoSectionVideo) { NSArray *a = _decoder.info[@"video"]; cell = [self mkCell:@"VideoCell" withStyle:UITableViewCellStyleValue1]; cell.textLabel.text = a[indexPath.row]; cell.textLabel.font = [UIFont systemFontOfSize:14]; cell.textLabel.numberOfLines = 2; } else if (indexPath.section == KxMovieInfoSectionAudio) { NSArray *a = _decoder.info[@"audio"]; cell = [self mkCell:@"AudioCell" withStyle:UITableViewCellStyleValue1]; cell.textLabel.text = a[indexPath.row]; cell.textLabel.font = [UIFont systemFontOfSize:14]; cell.textLabel.numberOfLines = 2; BOOL selected = _decoder.selectedAudioStream == indexPath.row; cell.accessoryType = selected ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone; } else if (indexPath.section == KxMovieInfoSectionSubtitles) { NSArray *a = _decoder.info[@"subtitles"]; cell = [self mkCell:@"SubtitleCell" withStyle:UITableViewCellStyleValue1]; cell.textLabel.font = [UIFont systemFontOfSize:14]; cell.textLabel.numberOfLines = 1; if (indexPath.row) { cell.textLabel.text = a[indexPath.row - 1]; } else { cell.textLabel.text = NSLocalizedString(@"Disable", nil); } const BOOL selected = _decoder.selectedSubtitleStream == (indexPath.row - 1); cell.accessoryType = selected ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone; } cell.selectionStyle = UITableViewCellSelectionStyleNone; return cell; } #pragma mark - Table view delegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section == KxMovieInfoSectionAudio) { NSInteger selected = _decoder.selectedAudioStream; if (selected != indexPath.row) { _decoder.selectedAudioStream = indexPath.row; NSInteger now = _decoder.selectedAudioStream; if (now == indexPath.row) { UITableViewCell *cell; cell = [_tableView cellForRowAtIndexPath:indexPath]; cell.accessoryType = UITableViewCellAccessoryCheckmark; indexPath = [NSIndexPath indexPathForRow:selected inSection:KxMovieInfoSectionAudio]; cell = [_tableView cellForRowAtIndexPath:indexPath]; cell.accessoryType = UITableViewCellAccessoryNone; } } } else if (indexPath.section == KxMovieInfoSectionSubtitles) { NSInteger selected = _decoder.selectedSubtitleStream; if (selected != (indexPath.row - 1)) { _decoder.selectedSubtitleStream = indexPath.row - 1; NSInteger now = _decoder.selectedSubtitleStream; if (now == (indexPath.row - 1)) { UITableViewCell *cell; cell = [_tableView cellForRowAtIndexPath:indexPath]; cell.accessoryType = UITableViewCellAccessoryCheckmark; indexPath = [NSIndexPath indexPathForRow:selected + 1 inSection:KxMovieInfoSectionSubtitles]; cell = [_tableView cellForRowAtIndexPath:indexPath]; cell.accessoryType = UITableViewCellAccessoryNone; } // clear subtitles _subtitlesLabel.text = nil; _subtitlesLabel.hidden = YES; @synchronized(_subtitles) { [_subtitles removeAllObjects]; } } } } @end ================================================ FILE: 3rParty/kxmovie/kxmovie-Prefix.pch ================================================ // // Prefix header for all source files of the 'kxmovie' target in the 'kxmovie' project // #ifdef __OBJC__ # import # import # import "KxLogger.h" #endif ================================================ FILE: LICENSE ================================================ The MIT License (MIT) Copyright (c) 2016 BigDavid Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: MVideo/AppDelegate.h ================================================ // // AppDelegate.h // MVideo // // Created by LiHongli on 16/6/18. // Copyright © 2016年 LHL. All rights reserved. // #import @interface AppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; @end ================================================ FILE: MVideo/AppDelegate.m ================================================ // // AppDelegate.m // MVideo // // Created by LiHongli on 16/6/18. // Copyright © 2016年 LHL. All rights reserved. // #import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. NSLog(@"%@", NSHomeDirectory()); return YES; } - (void)applicationWillResignActive:(UIApplication *)application { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. } - (void)applicationDidEnterBackground:(UIApplication *)application { // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. } - (void)applicationWillEnterForeground:(UIApplication *)application { // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. } - (void)applicationDidBecomeActive:(UIApplication *)application { // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. } - (void)applicationWillTerminate:(UIApplication *)application { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } @end ================================================ FILE: MVideo/Assets.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "idiom" : "iphone", "size" : "20x20", "scale" : "2x" }, { "idiom" : "iphone", "size" : "20x20", "scale" : "3x" }, { "idiom" : "iphone", "size" : "29x29", "scale" : "1x" }, { "idiom" : "iphone", "size" : "29x29", "scale" : "2x" }, { "idiom" : "iphone", "size" : "29x29", "scale" : "3x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "2x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "3x" }, { "idiom" : "iphone", "size" : "57x57", "scale" : "1x" }, { "idiom" : "iphone", "size" : "57x57", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "20-Player.png", "scale" : "2x" }, { "size" : "60x60", "idiom" : "iphone", "filename" : "20-Player-1.png", "scale" : "3x" }, { "idiom" : "ipad", "size" : "20x20", "scale" : "1x" }, { "idiom" : "ipad", "size" : "20x20", "scale" : "2x" }, { "idiom" : "ipad", "size" : "29x29", "scale" : "1x" }, { "idiom" : "ipad", "size" : "29x29", "scale" : "2x" }, { "idiom" : "ipad", "size" : "40x40", "scale" : "1x" }, { "idiom" : "ipad", "size" : "40x40", "scale" : "2x" }, { "idiom" : "ipad", "size" : "50x50", "scale" : "1x" }, { "idiom" : "ipad", "size" : "50x50", "scale" : "2x" }, { "idiom" : "ipad", "size" : "72x72", "scale" : "1x" }, { "idiom" : "ipad", "size" : "72x72", "scale" : "2x" }, { "idiom" : "ipad", "size" : "76x76", "scale" : "1x" }, { "idiom" : "ipad", "size" : "76x76", "scale" : "2x" }, { "idiom" : "ipad", "size" : "83.5x83.5", "scale" : "2x" }, { "idiom" : "ios-marketing", "size" : "1024x1024", "scale" : "1x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: MVideo/Assets.xcassets/Contents.json ================================================ { "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: MVideo/Base.lproj/LaunchScreen.storyboard ================================================ ================================================ FILE: MVideo/Base.lproj/Main.storyboard ================================================ ================================================ FILE: MVideo/Class/Controller/ListViewController.h ================================================ // // ListViewController.h // MVideo // // Created by LiHongli on 16/6/18. // Copyright © 2016年 LHL. All rights reserved. // #import @interface ListViewController : UIViewController @property (nonatomic, strong) NSDictionary *dict; + (NSString *)getResultDocumentFilePath; @end ================================================ FILE: MVideo/Class/Controller/ListViewController.m ================================================ // // ListViewController.m // MVideo // // Created by LiHongli on 16/6/18. // Copyright © 2016年 LHL. All rights reserved. // #import "ListViewController.h" #import #import "ListTableViewCell.h" #import #import #import "KxMovieViewController.h" #import "MMovieModel.h" #import "Masonry.h" #define CanPlayResult @"CanPlayResult" @interface ListViewController () @property (nonatomic, strong) UITableView *liveListTableView; @property (nonatomic, strong) UISwitch *autoPlaySwitch; @property (nonatomic, strong) UIViewController *playerController; @property (nonatomic, strong) NSMutableArray *originalSource; @property (nonatomic, strong) NSMutableArray *dataSource; @property (nonatomic, assign) BOOL kxResetPop; @property (nonatomic, strong) UISearchBar *searchBar; @end @implementation ListViewController - (void)dealloc{ [[NSNotificationCenter defaultCenter] removeObserver:self]; } - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { self.dataSource = [NSMutableArray array]; self.originalSource = [NSMutableArray array]; } return self; } - (void)setNeedsStatusBarAppearanceUpdate{ self.searchBar.frame = CGRectMake(0, 64, self.view.bounds.size.width, 44); self.liveListTableView.frame = CGRectMake(0, self.searchBar.frame.size.height+64, self.view.bounds.size.width, self.view.bounds.size.height-self.searchBar.frame.size.height); } - (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationPortrait; self.searchBar.frame = CGRectMake(0, 64, self.view.bounds.size.width, 44); self.liveListTableView.frame = CGRectMake(0, self.searchBar.frame.size.height+64, self.view.bounds.size.width, self.view.bounds.size.height-self.searchBar.frame.size.height-64); } - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; self.title = self.dict[@"title"]; [self.view addSubview:self.searchBar]; [self.view addSubview:self.liveListTableView]; [self addBackgroundMethod]; [self operationStr]; [self registerObserver]; [self setNavgationRightItem]; [self addMasonry]; } /** * 添加约束 */ - (void)addMasonry{ [self.searchBar mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(self.view); make.top.equalTo(@(64)); make.height.mas_equalTo(44); }]; [self.liveListTableView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.bottom.equalTo(self.view); make.top.equalTo(self.searchBar.mas_bottom); }]; } /** * 导航条右边添加自动返回开关 */ - (void)setNavgationRightItem{ self.autoPlaySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(100-30, 0, 30, 20)]; [self.autoPlaySwitch addTarget:self action:@selector(valueChange:) forControlEvents:UIControlEventValueChanged]; NSNumber *oldValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"kAutoPlaySwitch"]; self.autoPlaySwitch.on = oldValue ? oldValue.boolValue : YES; UILabel *tipLable = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 44)]; tipLable.userInteractionEnabled = YES; tipLable.text = @"自动返回"; tipLable.font = [UIFont systemFontOfSize:14]; [tipLable addSubview:self.autoPlaySwitch]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:tipLable]; } /** * Switch 开关值改变方法回调 * * @param sender switch */ - (void)valueChange:(UISwitch *)sender{ [[NSUserDefaults standardUserDefaults] setObject:@(sender.on) forKey:@"kAutoPlaySwitch"]; } /** * 添加后台方法 */ - (void)addBackgroundMethod{ AVAudioSession *session = [AVAudioSession sharedInstance]; [session setActive:YES error:nil]; [session setCategory:AVAudioSessionCategoryPlayback error:nil]; } /** * 处理文件,如果是本地文件,读取文件字符串,转换 如果是网络文件,则下载文件。然后转换。 */ - (void)operationStr{ NSString *filePath = self.dict[@"filePath"]; __block NSError *error = nil; if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { // 去除路径下的某个txt文件 NSString *videosText = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error]; [self transformVideoUrlFromString:videosText error:error]; [self.liveListTableView reloadData]; } // 网络请求文件 else if([filePath hasPrefix:@"http"]){ NSString *result = nil; if (filePath) { result = [[NSUserDefaults standardUserDefaults] objectForKey:filePath]; } [self transformVideoUrlFromString:result error:error]; dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSString *videosText = [NSString stringWithContentsOfURL:[NSURL URLWithString:filePath] encoding:NSUTF8StringEncoding error:&error]; [self transformVideoUrlFromString:videosText error:error]; if (filePath && videosText) { [[NSUserDefaults standardUserDefaults] setObject:videosText forKey:filePath]; } dispatch_async(dispatch_get_main_queue(), ^{ [self.liveListTableView reloadData]; }); }); } } /** * 转换字符串变成视频url+name * * @param videosText 视频播放的url * @param error 是否有错误 */ - (void)transformVideoUrlFromString:(NSString *)videosText error:(NSError *)error { [self.originalSource removeAllObjects]; [self.dataSource removeAllObjects]; // 过滤掉特殊字符 "\r"。有些url带有"\r",导致转换失败 videosText = [videosText stringByReplacingOccurrencesOfString:@"\r" withString:@""]; if (!error && (videosText.length > 0)) { NSMutableArray *itemArray = [NSMutableArray array]; // 依据换行符截取一行字符串 NSArray *videosArray = [videosText componentsSeparatedByString:@"\n"]; for (NSString *subStr in videosArray) { // 根据"," 和" " 分割一行的字符串 NSArray *subStrArray = [subStr componentsSeparatedByString:@","]; NSArray *sub2StrArray = [subStr componentsSeparatedByString:@" "]; if(subStrArray.count == 2 || (sub2StrArray.count == 2)){ NSArray *tempArray = (subStrArray.count == 2)? subStrArray : sub2StrArray; itemArray = [self checkMultipleUrlInOneUrlWithUrl:[tempArray lastObject] videoName:[tempArray firstObject] itemArray:itemArray]; } else if ([subStr stringByReplacingOccurrencesOfString:@" " withString:@""].length == 0){ // nothing } else if (subStrArray.count >= 3 || (sub2StrArray.count >= 3)){ NSArray *tempArray = (subStrArray.count >= 3)? subStrArray : sub2StrArray; NSString *tempUrl = [tempArray objectAtIndex:1]; itemArray = [self checkMultipleUrlInOneUrlWithUrl:tempUrl.length>5?tempUrl:[tempArray objectAtIndex:2] videoName:[tempArray firstObject] itemArray:itemArray]; } else { subStrArray = [subStr componentsSeparatedByString:@" "]; itemArray = [self checkMultipleUrlInOneUrlWithUrl:[subStrArray lastObject] videoName:[subStrArray firstObject] itemArray:itemArray]; } } [self.originalSource addObjectsFromArray:itemArray]; [self.dataSource addObjectsFromArray:itemArray]; }else { NSLog(@"error %@", error); } } - (NSMutableArray *)checkMultipleUrlInOneUrlWithUrl:(NSString *)url videoName:(NSString *)videoName itemArray:(NSMutableArray *)itemArray { NSArray *multipleArray = [url componentsSeparatedByString:@"#"]; for (NSString *itemUrl in multipleArray) { MMovieModel *model = [MMovieModel getMovieModelWithTitle:videoName ?: @"" url:itemUrl ?: @""]; [itemArray addObject:model]; /* if (![self isContainObject:itemUrl] && itemUrl && videoName) { [self writeNotRepeatURL:itemUrl name:videoName fileName:@"NotRepeat"]; } else { [self writeNotRepeatURL:itemUrl name:videoName fileName:@"Repeat"]; } */ } return itemArray; } /** * 检查是否有重复url * * @param url url description * * @return 重复 YES, 不重复返回NO */ - (BOOL)isContainObject:(NSString *)url{ NSString *document = [NSString stringWithFormat:@"%@/Documents/urlsSet.plist",NSHomeDirectory()]; if (![[NSFileManager defaultManager] fileExistsAtPath:document]) { [[NSFileManager defaultManager] createFileAtPath:document contents:nil attributes:nil]; } NSMutableArray *urlArray = [NSMutableArray arrayWithContentsOfFile:document]; BOOL contain = [urlArray containsObject:url]; [urlArray addObject:url]; NSSet *urlSet = [NSSet setWithArray:urlArray]; urlArray = (id)[urlSet allObjects]; [urlArray writeToFile:document atomically:YES]; return contain; } /** * 把重复的保存在一起,不重复的保存在一起 * * @param url url description * @param name TV name * @param fileName 保存文件名 */ - (void)writeNotRepeatURL:(NSString *)url name:(NSString *)name fileName:(NSString *)fileName{ NSString *document = [NSString stringWithFormat:@"%@/Documents/%@.txt",NSHomeDirectory(), fileName]; if (![[NSFileManager defaultManager] fileExistsAtPath:document]) { [[NSFileManager defaultManager] createFileAtPath:document contents:nil attributes:nil]; } NSLog(@"Home ==== %@", document); NSError *error = nil; NSString *NotRepeat = [NSString stringWithContentsOfFile:document encoding:NSUTF8StringEncoding error:&error]; NotRepeat = [NotRepeat stringByAppendingFormat:@"%@,%@\n",name, url]; NSLog(@"读取字符串 error %@", error); [NotRepeat writeToFile:document atomically:YES encoding:NSUTF8StringEncoding error:&error]; NSLog(@"写入 error %@", error); } /** * 注册前后台观察者 * 进入后台,暂停。进去前台,播放 */ - (void)registerObserver{ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillEnterForegroundNotification:) name:UIApplicationWillEnterForegroundNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackgroundNotification:) name:UIApplicationDidEnterBackgroundNotification object:nil]; } - (void)applicationWillEnterForegroundNotification:(NSNotification *)notification{ [((MPMoviePlayerViewController *)self.playerController).moviePlayer play]; } - (void)applicationDidEnterBackgroundNotification:(NSNotification *)notification{ [((MPMoviePlayerViewController *)self.playerController).moviePlayer pause]; } #pragma mark - Private Method - (UISearchBar *)searchBar{ if (!_searchBar) { _searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 64, self.view.bounds.size.width, 44)]; _searchBar.searchBarStyle = UISearchBarStyleDefault; _searchBar.tintColor = [UIColor lightTextColor]; _searchBar.returnKeyType = UIReturnKeySearch; _searchBar.placeholder = @"请输入要搜索的文字"; _searchBar.delegate = self; } return _searchBar; } - (UITableView *)liveListTableView{ if (_liveListTableView == nil) { _liveListTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, self.searchBar.frame.size.height+64, self.view.bounds.size.width, self.view.bounds.size.height-self.searchBar.frame.size.height) style:UITableViewStylePlain]; _liveListTableView.delegate = self; _liveListTableView.estimatedRowHeight = 100; _liveListTableView.rowHeight = UITableViewAutomaticDimension; _liveListTableView.dataSource = self; [_liveListTableView registerClass:[ListTableViewCell class] forCellReuseIdentifier:@"UITableViewCell"]; } return _liveListTableView; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - scroll delegate - (void)scrollViewDidScroll:(UIScrollView *)scrollView{ [self.searchBar resignFirstResponder]; } #pragma mark - tableView - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.dataSource.count; } - (ListTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *cellName = @"cellName"; ListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellName]; if (cell == nil) { cell = [[ListTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellName]; } if (indexPath.row < [self.dataSource count]) { MMovieModel *model = self.dataSource[indexPath.row]; [cell setObject:model]; cell.nameLabel.text = [NSString stringWithFormat:@"%@-%@",@(indexPath.row+1), model.title]; [cell checkIsCanPlay:cell.urlLabel.text fileName:self.dict[@"title"]]; } return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ if (indexPath.row < [self.dataSource count]) { ListTableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; MMovieModel *model = self.dataSource[indexPath.row]; // 可播,则转移到下一个播放 if (self.autoPlaySwitch.isOn && (model.canPlay == YES)) { [self autoPlayNextVideo:indexPath delegate:self]; return; } if (![tableView.visibleCells containsObject:cell]) { if ((indexPath.row+2) < [self.dataSource count]) { [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:(indexPath.row+2) inSection:indexPath.section] atScrollPosition:UITableViewScrollPositionNone animated:YES]; }else { [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:(indexPath.row) inSection:indexPath.section] atScrollPosition:UITableViewScrollPositionNone animated:YES]; } } NSString *videoName = model.title; NSString *movieUrl = [model.url stringByReplacingOccurrencesOfString:@"[url]" withString:@""]; NSLog(@"title%@\n url = %@", videoName, movieUrl); self.title = videoName; [self playVideoWithMovieUrl:movieUrl movieName:videoName indexPath:indexPath]; } } -(void)viewDidLayoutSubviews { if ([self.liveListTableView respondsToSelector:@selector(setSeparatorInset:)]) { [self.liveListTableView setSeparatorInset:UIEdgeInsetsZero]; } if ([self.liveListTableView respondsToSelector:@selector(setLayoutMargins:)]) { [self.liveListTableView setLayoutMargins:UIEdgeInsetsZero]; } } -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPat{ if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsZero]; } if ([cell respondsToSelector:@selector(setSeparatorInset:)]){ [cell setSeparatorInset:UIEdgeInsetsZero]; } if([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]){ [cell setPreservesSuperviewLayoutMargins:NO]; } } #pragma mark - private Method /** * 播放某一个index下的视频。对于可播放的,存储。然后根据条件自动判断是否进行下一个视频播放 * * kxResetPop 当自动进行下一个播放时,设置为NO,当进行点击操作时,变为YES,这样dispatch_after()就可以判断不用自动进行下一个了。另外条件就是switch开关。 * * @param movieUrl 视频的播放地址 * @param movieName 视频的名称 * @param indexPath 当前播放的视频cell的索引 */ - (void)playVideoWithMovieUrl:(NSString *)movieUrl movieName:(NSString *)movieName indexPath:(NSIndexPath *)indexPath{ if (movieUrl == nil) { return; } if ([UIDevice currentDevice].systemVersion.floatValue >= 9.0) { /** 使用AVPlayer播放 AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:[NSURL URLWithString:movieUrl]]; AVPlayer *avPlayer = [AVPlayer playerWithPlayerItem:playerItem]; NewPlayerViewController *playerVC = [[NewPlayerViewController alloc] init]; [playerVC setPlayer:avPlayer]; [avPlayer play]; self.playerController = playerVC; [self presentViewController:playerVC animated:YES completion:nil]; */ ///* NSMutableDictionary *params = [NSMutableDictionary dictionary]; params[@"KxMovieParameterDisableDeinterlacing"] = @(YES); KxMovieViewController *vc = [KxMovieViewController movieViewControllerWithContentPath:movieUrl parameters:params]; vc.timeout = 60; __block NSString *movieStr = movieUrl; __weak __block typeof(self) mySelf = self; __weak __block typeof(KxMovieViewController *) myvc = vc; self.kxResetPop = YES; vc.VCCallBack = ^(void){ mySelf.kxResetPop = YES; }; vc.playCallBack = ^(NSError *error , BOOL success){ if (success) { ListTableViewCell *ttcell = [mySelf.liveListTableView cellForRowAtIndexPath:indexPath]; if (ttcell.canPlayLabel.hidden || !ttcell.canPlayLabel) { [mySelf saveCanPlayHistory:movieStr]; [mySelf saveCanPlayHistoryToDocument:movieStr name:movieName]; } MMovieModel *model = self.dataSource[indexPath.row]; model.canPlay = YES; ttcell.canPlayLabel.hidden = NO; mySelf.kxResetPop = NO; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 10 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) { if (mySelf.kxResetPop || !self.autoPlaySwitch.on) { return; } [myvc dismissViewControllerAnimated:YES completion:nil]; mySelf.kxResetPop = NO; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) { if (mySelf.kxResetPop) { return; } [mySelf autoPlayNextVideo:indexPath delegate:mySelf]; }); }); }else { [myvc.alertView dismissWithClickedButtonIndex:0 animated:YES]; [myvc dismissViewControllerAnimated:YES completion:nil]; mySelf.kxResetPop = NO; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) { if (mySelf.kxResetPop || !self.autoPlaySwitch.on) { return; } [mySelf autoPlayNextVideo:indexPath delegate:mySelf]; }); } }; [self presentViewController:vc animated:YES completion:nil]; }else { MPMoviePlayerViewController *player = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:movieUrl]]; self.playerController = player; [self presentMoviePlayerViewControllerAnimated:player]; // */ } } /** * 自动播放下一个cell里的视频 * * @param currentIndexPath 当前播放的视频cell索引 * @param vc */ - (void)autoPlayNextVideo:(NSIndexPath *)currentIndexPath delegate:(ListViewController *)vc{ NSIndexPath *indexPath = [NSIndexPath indexPathForRow:currentIndexPath.row+1 inSection:0]; [vc tableView:self.liveListTableView didSelectRowAtIndexPath:indexPath]; } /** * 根据一个列表产生一个可播放地址列表 * * @param movieUrl 播放地址 */ - (void)saveCanPlayHistory:(NSString *)movieUrl{ NSMutableDictionary *canPlaylistDict = [NSMutableDictionary dictionary]; [canPlaylistDict setDictionary:[[NSUserDefaults standardUserDefaults] objectForKey:self.dict[@"title"]]]; [canPlaylistDict setValue:movieUrl forKey:movieUrl]; // 保存到 NSUserDefaults [[NSUserDefaults standardUserDefaults] setObject:canPlaylistDict forKey:self.dict[@"title"]]; [[NSUserDefaults standardUserDefaults] synchronize]; } /** * 保存可以播放的地址进入沙盒 * * @param movieUrl 播放地址 * @param name 播放地址名称 */ - (void)saveCanPlayHistoryToDocument:(NSString *)movieUrl name:(NSString *)name{ NSString *documentPath = [ListViewController getResultDocumentFilePath]; NSError *error = nil; NSString *oldString = [NSString stringWithContentsOfFile:documentPath encoding:NSUTF8StringEncoding error:&error]; if (!error) { NSLog(@"读取字符串 error %@", error); } NSString *newString = [NSString stringWithFormat:@"%@\n%@ %@",oldString?:@"", name, movieUrl]; BOOL success = [newString writeToFile:documentPath atomically:YES encoding:NSUTF8StringEncoding error:&error]; if (!error || !success) { NSLog(@"写入字符串 error %@, success %d", error, success); } } /** * 获取过滤后的列表存储地址 * * @return 沙盒存储地址 */ + (NSString *)getResultDocumentFilePath{ NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; documentPath = [NSString stringWithFormat:@"%@/%@.txt", documentPath, CanPlayResult]; if (![[NSFileManager defaultManager] fileExistsAtPath:documentPath]) { [[NSFileManager defaultManager] createFileAtPath:documentPath contents:nil attributes:nil]; } NSLog(@"documentPath %@", documentPath); return documentPath; } #pragma mark - SearchBar delegate - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ NSLog(@"searchBar %@, searchText %@",searchBar.text, searchText ); if ([searchBar.text stringByReplacingOccurrencesOfString:@" " withString:@""].length > 0) { [self filterDataSourceWithKey:searchBar.text finish:NO]; }else{ [self.dataSource removeAllObjects]; [self.dataSource addObjectsFromArray:self.originalSource]; [self.liveListTableView reloadData]; } } - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{ if ([searchBar.text stringByReplacingOccurrencesOfString:@" " withString:@""].length > 0) { [self filterDataSourceWithKey:searchBar.text finish:YES]; }else { [self.dataSource removeAllObjects]; [self.dataSource addObjectsFromArray:self.originalSource]; [self.liveListTableView reloadData]; } } - (void)filterDataSourceWithKey:(NSString *)searchKey finish:(BOOL)finish{ NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title CONTAINS %@", searchKey]; NSArray *persons = [self.originalSource filteredArrayUsingPredicate:predicate]; NSLog(@"************ \n%@", persons); if (persons.count) { [self.dataSource removeAllObjects]; [self.dataSource addObjectsFromArray:persons]; [self.liveListTableView reloadData]; }else if(!finish && persons.count==0){ [self.dataSource removeAllObjects]; [self.liveListTableView reloadData]; } else { [[[UIAlertView alloc] initWithTitle:nil message:@"筛选无结果" delegate:nil cancelButtonTitle:@"确认" otherButtonTitles:Nil, nil] show]; } } @end ================================================ FILE: MVideo/Class/Controller/MHomeViewController.h ================================================ // // MHomeViewController.h // MVideo // // Created by LHL on 17/2/15. // Copyright © 2017年 LHL. All rights reserved. // #import @interface MHomeViewController : UITableViewController @end ================================================ FILE: MVideo/Class/Controller/MHomeViewController.m ================================================ // // MHomeViewController.m // MVideo // // Created by LHL on 17/2/15. // Copyright © 2017年 LHL. All rights reserved. // #import "MHomeViewController.h" #import "ListViewController.h" #define FileNamePre @"LiveList" #define TVHostURL @"https://iodefog.github.io/text/" #define VideosTVListName @"VideosTVListName.txt" @interface MHomeViewController () @property (nonatomic, strong) NSMutableArray *dataSource; @end @implementation MHomeViewController - (void)viewDidLoad { [super viewDidLoad]; [self operationStr]; [self requestNetWorkData]; [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"HomeTableViewCell"]; } - (void)operationStr{ [self.dataSource addObject:@{@"title":@"已测试可播放列表", @"filePath":[ListViewController getResultDocumentFilePath]}]; for (NSInteger count = 1 ; count < NSIntegerMax; count ++) { NSString *fileName = [NSString stringWithFormat:@"%@%@",FileNamePre,@(count)]; NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"txt"]; if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { [self.dataSource addObject:@{@"title":fileName, @"filePath":filePath}]; }else { NSLog(@"%@.txt不存在", fileName); break; } } } - (void)requestNetWorkData{ NSString *videosTVListNameUrl = [NSString stringWithFormat:@"%@%@", TVHostURL,VideosTVListName]; __block NSError *error = nil; NSString *result = nil; if (videosTVListNameUrl) { result = [[NSUserDefaults standardUserDefaults] objectForKey:videosTVListNameUrl]; } [self transformVideoUrlFromString:result error:error]; dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSString *videoList = [NSString stringWithContentsOfURL:[NSURL URLWithString:videosTVListNameUrl] encoding:NSUTF8StringEncoding error:&error]; error ? NSLog(@"%@", error) : nil; [self transformVideoUrlFromString:videoList error:error]; if (videosTVListNameUrl && videoList) { [[NSUserDefaults standardUserDefaults] setObject:videoList forKey:videosTVListNameUrl]; } }); } - (void)transformVideoUrlFromString:(NSString *)videoList error:(NSError *)error { [self.dataSource removeAllObjects]; NSArray *titleArray = [videoList componentsSeparatedByString:@"\n"]; for (NSString *title in titleArray) { [self.dataSource addObject:@{@"title":title, @"filePath":[NSString stringWithFormat:@"%@%@", TVHostURL, title]}]; } dispatch_async(dispatch_get_main_queue(), ^{ [self.tableView reloadData]; }); } - (NSMutableArray *)dataSource{ if (!_dataSource) { _dataSource = [NSMutableArray array]; } return _dataSource; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.dataSource.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"HomeTableViewCell" forIndexPath:indexPath]; cell.textLabel.text = self.dataSource[indexPath.row][@"title"]; return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ NSDictionary *dict = self.dataSource[indexPath.row]; ListViewController *listVC = [[ListViewController alloc] init]; listVC.dict = dict; [self.navigationController pushViewController:listVC animated:YES]; } @end ================================================ FILE: MVideo/Class/Model/MMovieModel.h ================================================ // // MMovieModel.h // MVideo // // Created by LHL on 17/2/27. // Copyright © 2017年 LHL. All rights reserved. // #import @interface MMovieModel : NSObject @property (nonatomic, strong) NSString *title; @property (nonatomic, strong) NSString *url; @property (nonatomic, assign) BOOL canPlay; + (id)getMovieModelWithTitle:(NSString *)title url:(NSString *)url; @end ================================================ FILE: MVideo/Class/Model/MMovieModel.m ================================================ // // MMovieModel.m // MVideo // // Created by LHL on 17/2/27. // Copyright © 2017年 LHL. All rights reserved. // #import "MMovieModel.h" @implementation MMovieModel + (id)getMovieModelWithTitle:(NSString *)title url:(NSString *)url { MMovieModel *model = [[MMovieModel alloc] init]; model.title = title; model.url = url; return model; } @end ================================================ FILE: MVideo/Class/View/ListTableViewCell.h ================================================ // // ListTableViewCell.h // MVideo // // Created by LHL on 17/2/15. // Copyright © 2017年 LHL. All rights reserved. // #import #import "MMovieModel.h" @interface ListTableViewCell : UITableViewCell @property (nonatomic, strong) UILabel *canPlayLabel; @property (nonatomic, strong) UILabel *nameLabel; @property (nonatomic, strong) UILabel *urlLabel; @property (nonatomic, strong) MMovieModel *object; - (void)checkIsCanPlay:(NSString *)url fileName:(NSString *)fileName; @end ================================================ FILE: MVideo/Class/View/ListTableViewCell.m ================================================ // // ListTableViewCell.m // MVideo // // Created by LHL on 17/2/15. // Copyright © 2017年 LHL. All rights reserved. // #import "ListTableViewCell.h" #import "Masonry.h" @implementation ListTableViewCell - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { self.selectionStyle = UITableViewCellSelectionStyleBlue; [self createUI]; } return self; } - (void)awakeFromNib { [super awakeFromNib]; [self createUI]; } - (void)createUI{ [self addSubview:self.nameLabel]; [self addSubview:self.urlLabel]; [self addSubview:self.canPlayLabel]; [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.top.equalTo(@(10)); make.right.equalTo(self).offset(-10); make.height.mas_equalTo(20); }]; [self.urlLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(self.nameLabel); make.top.equalTo(self.nameLabel.mas_bottom).offset(10); make.bottom.equalTo(self).offset(-20); }]; [self.canPlayLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.top.height.mas_equalTo(20); make.width.mas_equalTo(50); make.right.equalTo(self).offset(-20); }]; } - (void)setObject:(MMovieModel *)anObject{ _object = anObject; self.urlLabel.text = [anObject.url stringByReplacingOccurrencesOfString:@"[url]" withString:@""]; } - (void)checkIsCanPlay:(NSString *)url fileName:(NSString *)fileName{ NSDictionary *canPlaylistDict = [[NSUserDefaults standardUserDefaults] objectForKey:fileName]; NSString *tmpUrl = [canPlaylistDict objectForKey:url]; self.canPlayLabel.hidden = !tmpUrl; if (self.canPlayLabel.hidden == NO) { self.object.canPlay = YES; } } - (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{ [super setHighlighted:highlighted animated:animated]; if (highlighted) { _canPlayLabel.backgroundColor = [UIColor darkGrayColor]; } else { _canPlayLabel.backgroundColor = [UIColor greenColor]; } } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; if (selected) { _canPlayLabel.backgroundColor = [UIColor darkGrayColor]; } else { _canPlayLabel.backgroundColor = [UIColor greenColor]; } } #pragma mark - - (UILabel *)canPlayLabel{ if (!_canPlayLabel) { _canPlayLabel = [[UILabel alloc] init]; _canPlayLabel.backgroundColor = [UIColor greenColor]; _canPlayLabel.textAlignment = NSTextAlignmentCenter; _canPlayLabel.text = @"可播"; _canPlayLabel.font = [UIFont systemFontOfSize:14]; _canPlayLabel.hidden = YES; } return _canPlayLabel; } - (UILabel *)nameLabel{ if (!_nameLabel) { _nameLabel = [[UILabel alloc] init]; _nameLabel.font = [UIFont boldSystemFontOfSize:15]; } return _nameLabel; } - (UILabel *)urlLabel{ if (!_urlLabel) { _urlLabel = [[UILabel alloc] init]; _urlLabel.font = [UIFont systemFontOfSize:13]; _urlLabel.numberOfLines = 0; } return _urlLabel; } @end ================================================ FILE: MVideo/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName MLive CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 LSRequiresIPhoneOS NSAppTransportSecurity NSAllowsArbitraryLoads NSExceptionDomains qq.com NSExceptionAllowsInsecureHTTPLoads NSExceptionRequiresForwardSecrecy NSIncludesSubdomains sina.com.cn NSExceptionAllowsInsecureHTTPLoads NSExceptionRequiresForwardSecrecy NSIncludesSubdomains weibo.cn NSExceptionAllowsInsecureHTTPLoads NSExceptionRequiresForwardSecrecy NSIncludesSubdomains weibo.com NSExceptionAllowsInsecureHTTPLoads NSExceptionRequiresForwardSecrecy NSIncludesSubdomains UIBackgroundModes audio UILaunchStoryboardName LaunchScreen UIMainStoryboardFile Main UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeRight UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationPortraitUpsideDown ================================================ FILE: MVideo/MVideo-Pre.pch ================================================ // // MVideo-Pre.pch // MVideo // // Created by LHL on 17/2/15. // Copyright © 2017年 LHL. All rights reserved. // #ifndef MVideo_Pre_pch #define MVideo_Pre_pch // Include any system framework and library headers here that should be included in all compilation units. // You will also need to set the Prefix Header build setting of one or more of your targets to reference this file. #import #endif /* MVideo_Pre_pch */ ================================================ FILE: MVideo/main.m ================================================ // // main.m // MVideo // // Created by LiHongli on 16/6/18. // Copyright © 2016年 LHL. All rights reserved. // #import #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } ================================================ FILE: MVideo.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 4F16F3941D15926800E8B25D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F16F3931D15926800E8B25D /* main.m */; }; 4F16F3971D15926800E8B25D /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F16F3961D15926800E8B25D /* AppDelegate.m */; }; 4F16F39D1D15926800E8B25D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4F16F39B1D15926800E8B25D /* Main.storyboard */; }; 4F16F39F1D15926800E8B25D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4F16F39E1D15926800E8B25D /* Assets.xcassets */; }; 4F16F3A21D15926800E8B25D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4F16F3A01D15926800E8B25D /* LaunchScreen.storyboard */; }; 7D872EDCA83C4A42043A7C99 /* libPods-MVideo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 555C6A4F7C914B4153854619 /* libPods-MVideo.a */; }; C7345B151EC07B3E00104C1C /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C7345B131EC07B3E00104C1C /* libcrypto.a */; }; C7345B161EC07B3E00104C1C /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C7345B141EC07B3E00104C1C /* libssl.a */; }; C73926EC1D1D2FAD00C93A12 /* AVKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C73926EB1D1D2FAD00C93A12 /* AVKit.framework */; }; C73D4D721EADAF3E00ED8308 /* ListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C73D4D671EADAF3E00ED8308 /* ListViewController.m */; }; C73D4D731EADAF3E00ED8308 /* MHomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C73D4D691EADAF3E00ED8308 /* MHomeViewController.m */; }; C73D4D751EADAF3E00ED8308 /* MMovieModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C73D4D6E1EADAF3E00ED8308 /* MMovieModel.m */; }; C73D4D761EADAF3E00ED8308 /* ListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C73D4D711EADAF3E00ED8308 /* ListTableViewCell.m */; }; C73D4E141EADAF5000ED8308 /* libavcodec.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C73D4E021EADAF5000ED8308 /* libavcodec.a */; }; C73D4E151EADAF5000ED8308 /* libavfilter.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C73D4E031EADAF5000ED8308 /* libavfilter.a */; }; C73D4E161EADAF5000ED8308 /* libavformat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C73D4E041EADAF5000ED8308 /* libavformat.a */; }; C73D4E171EADAF5000ED8308 /* libavutil.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C73D4E051EADAF5000ED8308 /* libavutil.a */; }; C73D4E181EADAF5000ED8308 /* libswresample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C73D4E061EADAF5000ED8308 /* libswresample.a */; }; C73D4E191EADAF5000ED8308 /* libswscale.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C73D4E071EADAF5000ED8308 /* libswscale.a */; }; C73D4E1A1EADAF5000ED8308 /* KxAudioManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C73D4E0A1EADAF5000ED8308 /* KxAudioManager.m */; }; C73D4E1B1EADAF5000ED8308 /* kxmovie.bundle in Resources */ = {isa = PBXBuildFile; fileRef = C73D4E0D1EADAF5000ED8308 /* kxmovie.bundle */; }; C73D4E1C1EADAF5000ED8308 /* KxMovieDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = C73D4E0F1EADAF5000ED8308 /* KxMovieDecoder.m */; }; C73D4E1D1EADAF5000ED8308 /* KxMovieGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = C73D4E111EADAF5000ED8308 /* KxMovieGLView.m */; }; C73D4E1E1EADAF5000ED8308 /* KxMovieViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C73D4E131EADAF5000ED8308 /* KxMovieViewController.m */; }; C7A33F081E5450070009768F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7A33F071E5450070009768F /* UIKit.framework */; }; C7CD070B1E5AB04C007A2F21 /* VideoToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7CD070A1E5AB04C007A2F21 /* VideoToolbox.framework */; }; C7CD070D1E5AB10D007A2F21 /* libz.1.2.5.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = C7CD070C1E5AB10D007A2F21 /* libz.1.2.5.tbd */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 1FFC45E0305C9DC90791AED1 /* Pods-MVideo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MVideo.release.xcconfig"; path = "Pods/Target Support Files/Pods-MVideo/Pods-MVideo.release.xcconfig"; sourceTree = ""; }; 456BAC7CC6557EA39F023529 /* Pods-MVideo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MVideo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MVideo/Pods-MVideo.debug.xcconfig"; sourceTree = ""; }; 4F16F38F1D15926800E8B25D /* MVideo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MVideo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 4F16F3931D15926800E8B25D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 4F16F3951D15926800E8B25D /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 4F16F3961D15926800E8B25D /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 4F16F39C1D15926800E8B25D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 4F16F39E1D15926800E8B25D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 4F16F3A11D15926800E8B25D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 4F16F3A31D15926800E8B25D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 555C6A4F7C914B4153854619 /* libPods-MVideo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MVideo.a"; sourceTree = BUILT_PRODUCTS_DIR; }; C7345B131EC07B3E00104C1C /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libcrypto.a; sourceTree = ""; }; C7345B141EC07B3E00104C1C /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libssl.a; sourceTree = ""; }; C7345B191EC07B5D00104C1C /* avcodec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avcodec.h; sourceTree = ""; }; C7345B1A1EC07B5D00104C1C /* avdct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avdct.h; sourceTree = ""; }; C7345B1B1EC07B5D00104C1C /* avfft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avfft.h; sourceTree = ""; }; C7345B1C1EC07B5D00104C1C /* d3d11va.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = d3d11va.h; sourceTree = ""; }; C7345B1D1EC07B5D00104C1C /* dirac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dirac.h; sourceTree = ""; }; C7345B1E1EC07B5D00104C1C /* dv_profile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dv_profile.h; sourceTree = ""; }; C7345B1F1EC07B5D00104C1C /* dxva2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dxva2.h; sourceTree = ""; }; C7345B201EC07B5D00104C1C /* jni.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jni.h; sourceTree = ""; }; C7345B211EC07B5D00104C1C /* mediacodec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mediacodec.h; sourceTree = ""; }; C7345B221EC07B5D00104C1C /* qsv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qsv.h; sourceTree = ""; }; C7345B231EC07B5D00104C1C /* vaapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vaapi.h; sourceTree = ""; }; C7345B241EC07B5D00104C1C /* vda.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vda.h; sourceTree = ""; }; C7345B251EC07B5D00104C1C /* vdpau.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vdpau.h; sourceTree = ""; }; C7345B261EC07B5D00104C1C /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; C7345B271EC07B5D00104C1C /* videotoolbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = videotoolbox.h; sourceTree = ""; }; C7345B281EC07B5D00104C1C /* vorbis_parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vorbis_parser.h; sourceTree = ""; }; C7345B291EC07B5D00104C1C /* xvmc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xvmc.h; sourceTree = ""; }; C7345B2B1EC07B5D00104C1C /* avfilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avfilter.h; sourceTree = ""; }; C7345B2C1EC07B5D00104C1C /* avfiltergraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avfiltergraph.h; sourceTree = ""; }; C7345B2D1EC07B5D00104C1C /* buffersink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffersink.h; sourceTree = ""; }; C7345B2E1EC07B5D00104C1C /* buffersrc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffersrc.h; sourceTree = ""; }; C7345B2F1EC07B5D00104C1C /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; C7345B311EC07B5D00104C1C /* avc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avc.h; sourceTree = ""; }; C7345B321EC07B5D00104C1C /* avformat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avformat.h; sourceTree = ""; }; C7345B331EC07B5D00104C1C /* avio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avio.h; sourceTree = ""; }; C7345B341EC07B5D00104C1C /* internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = internal.h; sourceTree = ""; }; C7345B351EC07B5D00104C1C /* url.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = url.h; sourceTree = ""; }; C7345B361EC07B5D00104C1C /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; C7345B381EC07B5D00104C1C /* adler32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = adler32.h; sourceTree = ""; }; C7345B391EC07B5D00104C1C /* aes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = ""; }; C7345B3A1EC07B5D00104C1C /* aes_ctr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes_ctr.h; sourceTree = ""; }; C7345B3B1EC07B5D00104C1C /* application.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = application.h; sourceTree = ""; }; C7345B3D1EC07B5D00104C1C /* avconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avconfig.h; sourceTree = ""; }; C7345B3E1EC07B5D00104C1C /* ffversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffversion.h; sourceTree = ""; }; C7345B401EC07B5D00104C1C /* avconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avconfig.h; sourceTree = ""; }; C7345B411EC07B5D00104C1C /* ffversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffversion.h; sourceTree = ""; }; C7345B421EC07B5D00104C1C /* attributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = attributes.h; sourceTree = ""; }; C7345B431EC07B5D00104C1C /* audio_fifo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_fifo.h; sourceTree = ""; }; C7345B441EC07B5D00104C1C /* avassert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avassert.h; sourceTree = ""; }; C7345B451EC07B5D00104C1C /* avconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avconfig.h; sourceTree = ""; }; C7345B461EC07B5D00104C1C /* avstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avstring.h; sourceTree = ""; }; C7345B471EC07B5D00104C1C /* avutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avutil.h; sourceTree = ""; }; C7345B481EC07B5D00104C1C /* base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = base64.h; sourceTree = ""; }; C7345B491EC07B5D00104C1C /* blowfish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blowfish.h; sourceTree = ""; }; C7345B4A1EC07B5D00104C1C /* bprint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bprint.h; sourceTree = ""; }; C7345B4B1EC07B5D00104C1C /* bswap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bswap.h; sourceTree = ""; }; C7345B4C1EC07B5D00104C1C /* buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffer.h; sourceTree = ""; }; C7345B4D1EC07B5D00104C1C /* camellia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = camellia.h; sourceTree = ""; }; C7345B4E1EC07B5D00104C1C /* cast5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cast5.h; sourceTree = ""; }; C7345B4F1EC07B5D00104C1C /* channel_layout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = channel_layout.h; sourceTree = ""; }; C7345B501EC07B5D00104C1C /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; C7345B511EC07B5D00104C1C /* cpu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cpu.h; sourceTree = ""; }; C7345B521EC07B5D00104C1C /* crc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crc.h; sourceTree = ""; }; C7345B531EC07B5D00104C1C /* des.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = des.h; sourceTree = ""; }; C7345B541EC07B5D00104C1C /* dict.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dict.h; sourceTree = ""; }; C7345B551EC07B5D00104C1C /* display.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = display.h; sourceTree = ""; }; C7345B561EC07B5D00104C1C /* downmix_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = downmix_info.h; sourceTree = ""; }; C7345B571EC07B5D00104C1C /* error.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = error.h; sourceTree = ""; }; C7345B581EC07B5D00104C1C /* eval.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eval.h; sourceTree = ""; }; C7345B591EC07B5D00104C1C /* ffversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffversion.h; sourceTree = ""; }; C7345B5A1EC07B5D00104C1C /* fifo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fifo.h; sourceTree = ""; }; C7345B5B1EC07B5D00104C1C /* file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = file.h; sourceTree = ""; }; C7345B5C1EC07B5D00104C1C /* frame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = frame.h; sourceTree = ""; }; C7345B5D1EC07B5D00104C1C /* hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hash.h; sourceTree = ""; }; C7345B5E1EC07B5D00104C1C /* hmac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hmac.h; sourceTree = ""; }; C7345B5F1EC07B5D00104C1C /* hwcontext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hwcontext.h; sourceTree = ""; }; C7345B601EC07B5D00104C1C /* hwcontext_cuda.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hwcontext_cuda.h; sourceTree = ""; }; C7345B611EC07B5D00104C1C /* hwcontext_dxva2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hwcontext_dxva2.h; sourceTree = ""; }; C7345B621EC07B5D00104C1C /* hwcontext_qsv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hwcontext_qsv.h; sourceTree = ""; }; C7345B631EC07B5D00104C1C /* hwcontext_vaapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hwcontext_vaapi.h; sourceTree = ""; }; C7345B641EC07B5D00104C1C /* hwcontext_vdpau.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hwcontext_vdpau.h; sourceTree = ""; }; C7345B661EC07B5D00104C1C /* avconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avconfig.h; sourceTree = ""; }; C7345B671EC07B5D00104C1C /* ffversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffversion.h; sourceTree = ""; }; C7345B681EC07B5D00104C1C /* imgutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imgutils.h; sourceTree = ""; }; C7345B691EC07B5D00104C1C /* intfloat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = intfloat.h; sourceTree = ""; }; C7345B6A1EC07B5D00104C1C /* intreadwrite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = intreadwrite.h; sourceTree = ""; }; C7345B6B1EC07B5D00104C1C /* lfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lfg.h; sourceTree = ""; }; C7345B6C1EC07B5D00104C1C /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = ""; }; C7345B6D1EC07B5D00104C1C /* macros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = macros.h; sourceTree = ""; }; C7345B6E1EC07B5D00104C1C /* mastering_display_metadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mastering_display_metadata.h; sourceTree = ""; }; C7345B6F1EC07B5D00104C1C /* mathematics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mathematics.h; sourceTree = ""; }; C7345B701EC07B5D00104C1C /* md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = ""; }; C7345B711EC07B5D00104C1C /* mem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mem.h; sourceTree = ""; }; C7345B721EC07B5D00104C1C /* motion_vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = motion_vector.h; sourceTree = ""; }; C7345B731EC07B5D00104C1C /* murmur3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = murmur3.h; sourceTree = ""; }; C7345B741EC07B5D00104C1C /* opt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opt.h; sourceTree = ""; }; C7345B751EC07B5D00104C1C /* parseutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parseutils.h; sourceTree = ""; }; C7345B761EC07B5D00104C1C /* pixdesc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pixdesc.h; sourceTree = ""; }; C7345B771EC07B5D00104C1C /* pixelutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pixelutils.h; sourceTree = ""; }; C7345B781EC07B5D00104C1C /* pixfmt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pixfmt.h; sourceTree = ""; }; C7345B791EC07B5D00104C1C /* random_seed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = random_seed.h; sourceTree = ""; }; C7345B7A1EC07B5D00104C1C /* rational.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rational.h; sourceTree = ""; }; C7345B7B1EC07B5D00104C1C /* rc4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc4.h; sourceTree = ""; }; C7345B7C1EC07B5D00104C1C /* replaygain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = replaygain.h; sourceTree = ""; }; C7345B7D1EC07B5D00104C1C /* ripemd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ripemd.h; sourceTree = ""; }; C7345B7E1EC07B5D00104C1C /* samplefmt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = samplefmt.h; sourceTree = ""; }; C7345B7F1EC07B5D00104C1C /* sha.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha.h; sourceTree = ""; }; C7345B801EC07B5D00104C1C /* sha512.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha512.h; sourceTree = ""; }; C7345B811EC07B5D00104C1C /* stereo3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stereo3d.h; sourceTree = ""; }; C7345B821EC07B5D00104C1C /* tea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tea.h; sourceTree = ""; }; C7345B831EC07B5D00104C1C /* thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = thread.h; sourceTree = ""; }; C7345B841EC07B5D00104C1C /* threadmessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = threadmessage.h; sourceTree = ""; }; C7345B851EC07B5D00104C1C /* time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = time.h; sourceTree = ""; }; C7345B861EC07B5D00104C1C /* timecode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timecode.h; sourceTree = ""; }; C7345B871EC07B5D00104C1C /* timestamp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timestamp.h; sourceTree = ""; }; C7345B881EC07B5D00104C1C /* tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tree.h; sourceTree = ""; }; C7345B891EC07B5D00104C1C /* twofish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = twofish.h; sourceTree = ""; }; C7345B8A1EC07B5D00104C1C /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; C7345B8C1EC07B5D00104C1C /* avconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avconfig.h; sourceTree = ""; }; C7345B8D1EC07B5D00104C1C /* ffversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ffversion.h; sourceTree = ""; }; C7345B8E1EC07B5D00104C1C /* xtea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xtea.h; sourceTree = ""; }; C7345B911EC07B5D00104C1C /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; C7345B931EC07B5D00104C1C /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; C7345B941EC07B5D00104C1C /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; C7345B961EC07B5D00104C1C /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; C7345B981EC07B5D00104C1C /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; C7345B9A1EC07B5D00104C1C /* swresample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = swresample.h; sourceTree = ""; }; C7345B9B1EC07B5D00104C1C /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; C7345B9D1EC07B5D00104C1C /* swscale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = swscale.h; sourceTree = ""; }; C7345B9E1EC07B5D00104C1C /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; C7345BA01EC07B5D00104C1C /* aes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = ""; }; C7345BA11EC07B5D00104C1C /* asn1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1.h; sourceTree = ""; }; C7345BA21EC07B5D00104C1C /* asn1_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1_mac.h; sourceTree = ""; }; C7345BA31EC07B5D00104C1C /* asn1t.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1t.h; sourceTree = ""; }; C7345BA41EC07B5D00104C1C /* bio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bio.h; sourceTree = ""; }; C7345BA51EC07B5D00104C1C /* blowfish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blowfish.h; sourceTree = ""; }; C7345BA61EC07B5D00104C1C /* bn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bn.h; sourceTree = ""; }; C7345BA71EC07B5D00104C1C /* buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffer.h; sourceTree = ""; }; C7345BA81EC07B5D00104C1C /* camellia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = camellia.h; sourceTree = ""; }; C7345BA91EC07B5D00104C1C /* cast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cast.h; sourceTree = ""; }; C7345BAA1EC07B5D00104C1C /* cmac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cmac.h; sourceTree = ""; }; C7345BAB1EC07B5D00104C1C /* cms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cms.h; sourceTree = ""; }; C7345BAC1EC07B5D00104C1C /* comp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = comp.h; sourceTree = ""; }; C7345BAD1EC07B5D00104C1C /* conf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conf.h; sourceTree = ""; }; C7345BAE1EC07B5D00104C1C /* conf_api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conf_api.h; sourceTree = ""; }; C7345BAF1EC07B5D00104C1C /* crypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto.h; sourceTree = ""; }; C7345BB01EC07B5D00104C1C /* des.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = des.h; sourceTree = ""; }; C7345BB11EC07B5D00104C1C /* des_old.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = des_old.h; sourceTree = ""; }; C7345BB21EC07B5D00104C1C /* dh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dh.h; sourceTree = ""; }; C7345BB31EC07B5D00104C1C /* dsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dsa.h; sourceTree = ""; }; C7345BB41EC07B5D00104C1C /* dso.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dso.h; sourceTree = ""; }; C7345BB51EC07B5D00104C1C /* dtls1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dtls1.h; sourceTree = ""; }; C7345BB61EC07B5D00104C1C /* e_os2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = e_os2.h; sourceTree = ""; }; C7345BB71EC07B5D00104C1C /* ebcdic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ebcdic.h; sourceTree = ""; }; C7345BB81EC07B5D00104C1C /* ec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ec.h; sourceTree = ""; }; C7345BB91EC07B5D00104C1C /* ecdh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ecdh.h; sourceTree = ""; }; C7345BBA1EC07B5D00104C1C /* ecdsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ecdsa.h; sourceTree = ""; }; C7345BBB1EC07B5D00104C1C /* engine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = engine.h; sourceTree = ""; }; C7345BBC1EC07B5D00104C1C /* err.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = err.h; sourceTree = ""; }; C7345BBD1EC07B5D00104C1C /* evp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = evp.h; sourceTree = ""; }; C7345BBE1EC07B5D00104C1C /* hmac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hmac.h; sourceTree = ""; }; C7345BBF1EC07B5D00104C1C /* idea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = idea.h; sourceTree = ""; }; C7345BC01EC07B5D00104C1C /* krb5_asn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = krb5_asn.h; sourceTree = ""; }; C7345BC11EC07B5D00104C1C /* kssl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kssl.h; sourceTree = ""; }; C7345BC21EC07B5D00104C1C /* lhash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lhash.h; sourceTree = ""; }; C7345BC31EC07B5D00104C1C /* md4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md4.h; sourceTree = ""; }; C7345BC41EC07B5D00104C1C /* md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = ""; }; C7345BC51EC07B5D00104C1C /* mdc2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mdc2.h; sourceTree = ""; }; C7345BC61EC07B5D00104C1C /* modes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = modes.h; sourceTree = ""; }; C7345BC71EC07B5D00104C1C /* obj_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = obj_mac.h; sourceTree = ""; }; C7345BC81EC07B5D00104C1C /* objects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objects.h; sourceTree = ""; }; C7345BC91EC07B5D00104C1C /* ocsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ocsp.h; sourceTree = ""; }; C7345BCA1EC07B5D00104C1C /* opensslconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opensslconf.h; sourceTree = ""; }; C7345BCB1EC07B5D00104C1C /* opensslv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opensslv.h; sourceTree = ""; }; C7345BCC1EC07B5D00104C1C /* ossl_typ.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ossl_typ.h; sourceTree = ""; }; C7345BCD1EC07B5D00104C1C /* pem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pem.h; sourceTree = ""; }; C7345BCE1EC07B5D00104C1C /* pem2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pem2.h; sourceTree = ""; }; C7345BCF1EC07B5D00104C1C /* pkcs12.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pkcs12.h; sourceTree = ""; }; C7345BD01EC07B5D00104C1C /* pkcs7.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pkcs7.h; sourceTree = ""; }; C7345BD11EC07B5D00104C1C /* pqueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pqueue.h; sourceTree = ""; }; C7345BD21EC07B5D00104C1C /* rand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rand.h; sourceTree = ""; }; C7345BD31EC07B5D00104C1C /* rc2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc2.h; sourceTree = ""; }; C7345BD41EC07B5D00104C1C /* rc4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc4.h; sourceTree = ""; }; C7345BD51EC07B5D00104C1C /* ripemd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ripemd.h; sourceTree = ""; }; C7345BD61EC07B5D00104C1C /* rsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rsa.h; sourceTree = ""; }; C7345BD71EC07B5D00104C1C /* safestack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = safestack.h; sourceTree = ""; }; C7345BD81EC07B5D00104C1C /* seed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = seed.h; sourceTree = ""; }; C7345BD91EC07B5D00104C1C /* sha.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha.h; sourceTree = ""; }; C7345BDA1EC07B5D00104C1C /* srp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = srp.h; sourceTree = ""; }; C7345BDB1EC07B5D00104C1C /* srtp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = srtp.h; sourceTree = ""; }; C7345BDC1EC07B5D00104C1C /* ssl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl.h; sourceTree = ""; }; C7345BDD1EC07B5D00104C1C /* ssl2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl2.h; sourceTree = ""; }; C7345BDE1EC07B5D00104C1C /* ssl23.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl23.h; sourceTree = ""; }; C7345BDF1EC07B5D00104C1C /* ssl3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl3.h; sourceTree = ""; }; C7345BE01EC07B5D00104C1C /* stack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stack.h; sourceTree = ""; }; C7345BE11EC07B5D00104C1C /* symhacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = symhacks.h; sourceTree = ""; }; C7345BE21EC07B5D00104C1C /* tls1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tls1.h; sourceTree = ""; }; C7345BE31EC07B5D00104C1C /* ts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ts.h; sourceTree = ""; }; C7345BE41EC07B5D00104C1C /* txt_db.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = txt_db.h; sourceTree = ""; }; C7345BE51EC07B5D00104C1C /* ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui.h; sourceTree = ""; }; C7345BE61EC07B5D00104C1C /* ui_compat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_compat.h; sourceTree = ""; }; C7345BE71EC07B5D00104C1C /* whrlpool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = whrlpool.h; sourceTree = ""; }; C7345BE81EC07B5D00104C1C /* x509.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509.h; sourceTree = ""; }; C7345BE91EC07B5D00104C1C /* x509_vfy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509_vfy.h; sourceTree = ""; }; C7345BEA1EC07B5D00104C1C /* x509v3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509v3.h; sourceTree = ""; }; C73926EB1D1D2FAD00C93A12 /* AVKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVKit.framework; path = System/Library/Frameworks/AVKit.framework; sourceTree = SDKROOT; }; C73D4D661EADAF3E00ED8308 /* ListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ListViewController.h; sourceTree = ""; }; C73D4D671EADAF3E00ED8308 /* ListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ListViewController.m; sourceTree = ""; }; C73D4D681EADAF3E00ED8308 /* MHomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MHomeViewController.h; sourceTree = ""; }; C73D4D691EADAF3E00ED8308 /* MHomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MHomeViewController.m; sourceTree = ""; }; C73D4D6D1EADAF3E00ED8308 /* MMovieModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MMovieModel.h; sourceTree = ""; }; C73D4D6E1EADAF3E00ED8308 /* MMovieModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMovieModel.m; sourceTree = ""; }; C73D4D701EADAF3E00ED8308 /* ListTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ListTableViewCell.h; sourceTree = ""; }; C73D4D711EADAF3E00ED8308 /* ListTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ListTableViewCell.m; sourceTree = ""; }; C73D4E021EADAF5000ED8308 /* libavcodec.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libavcodec.a; sourceTree = ""; }; C73D4E031EADAF5000ED8308 /* libavfilter.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libavfilter.a; sourceTree = ""; }; C73D4E041EADAF5000ED8308 /* libavformat.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libavformat.a; sourceTree = ""; }; C73D4E051EADAF5000ED8308 /* libavutil.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libavutil.a; sourceTree = ""; }; C73D4E061EADAF5000ED8308 /* libswresample.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libswresample.a; sourceTree = ""; }; C73D4E071EADAF5000ED8308 /* libswscale.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libswscale.a; sourceTree = ""; }; C73D4E091EADAF5000ED8308 /* KxAudioManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KxAudioManager.h; sourceTree = ""; }; C73D4E0A1EADAF5000ED8308 /* KxAudioManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KxAudioManager.m; sourceTree = ""; }; C73D4E0B1EADAF5000ED8308 /* KxLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KxLogger.h; sourceTree = ""; }; C73D4E0C1EADAF5000ED8308 /* kxmovie-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "kxmovie-Prefix.pch"; sourceTree = ""; }; C73D4E0D1EADAF5000ED8308 /* kxmovie.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = kxmovie.bundle; sourceTree = ""; }; C73D4E0E1EADAF5000ED8308 /* KxMovieDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KxMovieDecoder.h; sourceTree = ""; }; C73D4E0F1EADAF5000ED8308 /* KxMovieDecoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KxMovieDecoder.m; sourceTree = ""; }; C73D4E101EADAF5000ED8308 /* KxMovieGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KxMovieGLView.h; sourceTree = ""; }; C73D4E111EADAF5000ED8308 /* KxMovieGLView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KxMovieGLView.m; sourceTree = ""; }; C73D4E121EADAF5000ED8308 /* KxMovieViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KxMovieViewController.h; sourceTree = ""; }; C73D4E131EADAF5000ED8308 /* KxMovieViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KxMovieViewController.m; sourceTree = ""; }; C7A33F071E5450070009768F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; C7A33F091E5450530009768F /* MVideo-Pre.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MVideo-Pre.pch"; sourceTree = ""; }; C7CD070A1E5AB04C007A2F21 /* VideoToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VideoToolbox.framework; path = System/Library/Frameworks/VideoToolbox.framework; sourceTree = SDKROOT; }; C7CD070C1E5AB10D007A2F21 /* libz.1.2.5.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.1.2.5.tbd; path = usr/lib/libz.1.2.5.tbd; sourceTree = SDKROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 4F16F38C1D15926800E8B25D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( C73D4E171EADAF5000ED8308 /* libavutil.a in Frameworks */, C7CD070D1E5AB10D007A2F21 /* libz.1.2.5.tbd in Frameworks */, C7345B151EC07B3E00104C1C /* libcrypto.a in Frameworks */, C73D4E191EADAF5000ED8308 /* libswscale.a in Frameworks */, C7CD070B1E5AB04C007A2F21 /* VideoToolbox.framework in Frameworks */, C7A33F081E5450070009768F /* UIKit.framework in Frameworks */, C73D4E161EADAF5000ED8308 /* libavformat.a in Frameworks */, C73D4E151EADAF5000ED8308 /* libavfilter.a in Frameworks */, C73D4E181EADAF5000ED8308 /* libswresample.a in Frameworks */, C73926EC1D1D2FAD00C93A12 /* AVKit.framework in Frameworks */, 7D872EDCA83C4A42043A7C99 /* libPods-MVideo.a in Frameworks */, C7345B161EC07B3E00104C1C /* libssl.a in Frameworks */, C73D4E141EADAF5000ED8308 /* libavcodec.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 4276F6AEEB775FFC413ECEE4 /* Pods */ = { isa = PBXGroup; children = ( 456BAC7CC6557EA39F023529 /* Pods-MVideo.debug.xcconfig */, 1FFC45E0305C9DC90791AED1 /* Pods-MVideo.release.xcconfig */, ); name = Pods; sourceTree = ""; }; 4F16F3861D15926800E8B25D = { isa = PBXGroup; children = ( 4F16F3911D15926800E8B25D /* MVideo */, 4F16F3901D15926800E8B25D /* Products */, 4276F6AEEB775FFC413ECEE4 /* Pods */, E3D7921AC30277C0E3D00926 /* Frameworks */, ); sourceTree = ""; }; 4F16F3901D15926800E8B25D /* Products */ = { isa = PBXGroup; children = ( 4F16F38F1D15926800E8B25D /* MVideo.app */, ); name = Products; sourceTree = ""; }; 4F16F3911D15926800E8B25D /* MVideo */ = { isa = PBXGroup; children = ( 4F16F3951D15926800E8B25D /* AppDelegate.h */, 4F16F3961D15926800E8B25D /* AppDelegate.m */, C73D4D771EADAF5000ED8308 /* 3rParty */, C73D4D641EADAF3E00ED8308 /* Class */, 4F16F39B1D15926800E8B25D /* Main.storyboard */, 4F16F39E1D15926800E8B25D /* Assets.xcassets */, 4F16F3A01D15926800E8B25D /* LaunchScreen.storyboard */, 4F16F3921D15926800E8B25D /* Supporting Files */, ); path = MVideo; sourceTree = ""; }; 4F16F3921D15926800E8B25D /* Supporting Files */ = { isa = PBXGroup; children = ( 4F16F3931D15926800E8B25D /* main.m */, 4F16F3A31D15926800E8B25D /* Info.plist */, C7A33F091E5450530009768F /* MVideo-Pre.pch */, ); name = "Supporting Files"; sourceTree = ""; }; C7345B171EC07B5D00104C1C /* include */ = { isa = PBXGroup; children = ( C7345B181EC07B5D00104C1C /* libavcodec */, C7345B2A1EC07B5D00104C1C /* libavfilter */, C7345B301EC07B5D00104C1C /* libavformat */, C7345B371EC07B5D00104C1C /* libavutil */, C7345B8F1EC07B5D00104C1C /* libffmpeg */, C7345B991EC07B5D00104C1C /* libswresample */, C7345B9C1EC07B5D00104C1C /* libswscale */, C7345B9F1EC07B5D00104C1C /* openssl */, ); path = include; sourceTree = ""; }; C7345B181EC07B5D00104C1C /* libavcodec */ = { isa = PBXGroup; children = ( C7345B191EC07B5D00104C1C /* avcodec.h */, C7345B1A1EC07B5D00104C1C /* avdct.h */, C7345B1B1EC07B5D00104C1C /* avfft.h */, C7345B1C1EC07B5D00104C1C /* d3d11va.h */, C7345B1D1EC07B5D00104C1C /* dirac.h */, C7345B1E1EC07B5D00104C1C /* dv_profile.h */, C7345B1F1EC07B5D00104C1C /* dxva2.h */, C7345B201EC07B5D00104C1C /* jni.h */, C7345B211EC07B5D00104C1C /* mediacodec.h */, C7345B221EC07B5D00104C1C /* qsv.h */, C7345B231EC07B5D00104C1C /* vaapi.h */, C7345B241EC07B5D00104C1C /* vda.h */, C7345B251EC07B5D00104C1C /* vdpau.h */, C7345B261EC07B5D00104C1C /* version.h */, C7345B271EC07B5D00104C1C /* videotoolbox.h */, C7345B281EC07B5D00104C1C /* vorbis_parser.h */, C7345B291EC07B5D00104C1C /* xvmc.h */, ); path = libavcodec; sourceTree = ""; }; C7345B2A1EC07B5D00104C1C /* libavfilter */ = { isa = PBXGroup; children = ( C7345B2B1EC07B5D00104C1C /* avfilter.h */, C7345B2C1EC07B5D00104C1C /* avfiltergraph.h */, C7345B2D1EC07B5D00104C1C /* buffersink.h */, C7345B2E1EC07B5D00104C1C /* buffersrc.h */, C7345B2F1EC07B5D00104C1C /* version.h */, ); path = libavfilter; sourceTree = ""; }; C7345B301EC07B5D00104C1C /* libavformat */ = { isa = PBXGroup; children = ( C7345B311EC07B5D00104C1C /* avc.h */, C7345B321EC07B5D00104C1C /* avformat.h */, C7345B331EC07B5D00104C1C /* avio.h */, C7345B341EC07B5D00104C1C /* internal.h */, C7345B351EC07B5D00104C1C /* url.h */, C7345B361EC07B5D00104C1C /* version.h */, ); path = libavformat; sourceTree = ""; }; C7345B371EC07B5D00104C1C /* libavutil */ = { isa = PBXGroup; children = ( C7345B381EC07B5D00104C1C /* adler32.h */, C7345B391EC07B5D00104C1C /* aes.h */, C7345B3A1EC07B5D00104C1C /* aes_ctr.h */, C7345B3B1EC07B5D00104C1C /* application.h */, C7345B3C1EC07B5D00104C1C /* arm64 */, C7345B3F1EC07B5D00104C1C /* armv7 */, C7345B421EC07B5D00104C1C /* attributes.h */, C7345B431EC07B5D00104C1C /* audio_fifo.h */, C7345B441EC07B5D00104C1C /* avassert.h */, C7345B451EC07B5D00104C1C /* avconfig.h */, C7345B461EC07B5D00104C1C /* avstring.h */, C7345B471EC07B5D00104C1C /* avutil.h */, C7345B481EC07B5D00104C1C /* base64.h */, C7345B491EC07B5D00104C1C /* blowfish.h */, C7345B4A1EC07B5D00104C1C /* bprint.h */, C7345B4B1EC07B5D00104C1C /* bswap.h */, C7345B4C1EC07B5D00104C1C /* buffer.h */, C7345B4D1EC07B5D00104C1C /* camellia.h */, C7345B4E1EC07B5D00104C1C /* cast5.h */, C7345B4F1EC07B5D00104C1C /* channel_layout.h */, C7345B501EC07B5D00104C1C /* common.h */, C7345B511EC07B5D00104C1C /* cpu.h */, C7345B521EC07B5D00104C1C /* crc.h */, C7345B531EC07B5D00104C1C /* des.h */, C7345B541EC07B5D00104C1C /* dict.h */, C7345B551EC07B5D00104C1C /* display.h */, C7345B561EC07B5D00104C1C /* downmix_info.h */, C7345B571EC07B5D00104C1C /* error.h */, C7345B581EC07B5D00104C1C /* eval.h */, C7345B591EC07B5D00104C1C /* ffversion.h */, C7345B5A1EC07B5D00104C1C /* fifo.h */, C7345B5B1EC07B5D00104C1C /* file.h */, C7345B5C1EC07B5D00104C1C /* frame.h */, C7345B5D1EC07B5D00104C1C /* hash.h */, C7345B5E1EC07B5D00104C1C /* hmac.h */, C7345B5F1EC07B5D00104C1C /* hwcontext.h */, C7345B601EC07B5D00104C1C /* hwcontext_cuda.h */, C7345B611EC07B5D00104C1C /* hwcontext_dxva2.h */, C7345B621EC07B5D00104C1C /* hwcontext_qsv.h */, C7345B631EC07B5D00104C1C /* hwcontext_vaapi.h */, C7345B641EC07B5D00104C1C /* hwcontext_vdpau.h */, C7345B651EC07B5D00104C1C /* i386 */, C7345B681EC07B5D00104C1C /* imgutils.h */, C7345B691EC07B5D00104C1C /* intfloat.h */, C7345B6A1EC07B5D00104C1C /* intreadwrite.h */, C7345B6B1EC07B5D00104C1C /* lfg.h */, C7345B6C1EC07B5D00104C1C /* log.h */, C7345B6D1EC07B5D00104C1C /* macros.h */, C7345B6E1EC07B5D00104C1C /* mastering_display_metadata.h */, C7345B6F1EC07B5D00104C1C /* mathematics.h */, C7345B701EC07B5D00104C1C /* md5.h */, C7345B711EC07B5D00104C1C /* mem.h */, C7345B721EC07B5D00104C1C /* motion_vector.h */, C7345B731EC07B5D00104C1C /* murmur3.h */, C7345B741EC07B5D00104C1C /* opt.h */, C7345B751EC07B5D00104C1C /* parseutils.h */, C7345B761EC07B5D00104C1C /* pixdesc.h */, C7345B771EC07B5D00104C1C /* pixelutils.h */, C7345B781EC07B5D00104C1C /* pixfmt.h */, C7345B791EC07B5D00104C1C /* random_seed.h */, C7345B7A1EC07B5D00104C1C /* rational.h */, C7345B7B1EC07B5D00104C1C /* rc4.h */, C7345B7C1EC07B5D00104C1C /* replaygain.h */, C7345B7D1EC07B5D00104C1C /* ripemd.h */, C7345B7E1EC07B5D00104C1C /* samplefmt.h */, C7345B7F1EC07B5D00104C1C /* sha.h */, C7345B801EC07B5D00104C1C /* sha512.h */, C7345B811EC07B5D00104C1C /* stereo3d.h */, C7345B821EC07B5D00104C1C /* tea.h */, C7345B831EC07B5D00104C1C /* thread.h */, C7345B841EC07B5D00104C1C /* threadmessage.h */, C7345B851EC07B5D00104C1C /* time.h */, C7345B861EC07B5D00104C1C /* timecode.h */, C7345B871EC07B5D00104C1C /* timestamp.h */, C7345B881EC07B5D00104C1C /* tree.h */, C7345B891EC07B5D00104C1C /* twofish.h */, C7345B8A1EC07B5D00104C1C /* version.h */, C7345B8B1EC07B5D00104C1C /* x86_64 */, C7345B8E1EC07B5D00104C1C /* xtea.h */, ); path = libavutil; sourceTree = ""; }; C7345B3C1EC07B5D00104C1C /* arm64 */ = { isa = PBXGroup; children = ( C7345B3D1EC07B5D00104C1C /* avconfig.h */, C7345B3E1EC07B5D00104C1C /* ffversion.h */, ); path = arm64; sourceTree = ""; }; C7345B3F1EC07B5D00104C1C /* armv7 */ = { isa = PBXGroup; children = ( C7345B401EC07B5D00104C1C /* avconfig.h */, C7345B411EC07B5D00104C1C /* ffversion.h */, ); path = armv7; sourceTree = ""; }; C7345B651EC07B5D00104C1C /* i386 */ = { isa = PBXGroup; children = ( C7345B661EC07B5D00104C1C /* avconfig.h */, C7345B671EC07B5D00104C1C /* ffversion.h */, ); path = i386; sourceTree = ""; }; C7345B8B1EC07B5D00104C1C /* x86_64 */ = { isa = PBXGroup; children = ( C7345B8C1EC07B5D00104C1C /* avconfig.h */, C7345B8D1EC07B5D00104C1C /* ffversion.h */, ); path = x86_64; sourceTree = ""; }; C7345B8F1EC07B5D00104C1C /* libffmpeg */ = { isa = PBXGroup; children = ( C7345B901EC07B5D00104C1C /* arm64 */, C7345B921EC07B5D00104C1C /* armv7 */, C7345B941EC07B5D00104C1C /* config.h */, C7345B951EC07B5D00104C1C /* i386 */, C7345B971EC07B5D00104C1C /* x86_64 */, ); path = libffmpeg; sourceTree = ""; }; C7345B901EC07B5D00104C1C /* arm64 */ = { isa = PBXGroup; children = ( C7345B911EC07B5D00104C1C /* config.h */, ); path = arm64; sourceTree = ""; }; C7345B921EC07B5D00104C1C /* armv7 */ = { isa = PBXGroup; children = ( C7345B931EC07B5D00104C1C /* config.h */, ); path = armv7; sourceTree = ""; }; C7345B951EC07B5D00104C1C /* i386 */ = { isa = PBXGroup; children = ( C7345B961EC07B5D00104C1C /* config.h */, ); path = i386; sourceTree = ""; }; C7345B971EC07B5D00104C1C /* x86_64 */ = { isa = PBXGroup; children = ( C7345B981EC07B5D00104C1C /* config.h */, ); path = x86_64; sourceTree = ""; }; C7345B991EC07B5D00104C1C /* libswresample */ = { isa = PBXGroup; children = ( C7345B9A1EC07B5D00104C1C /* swresample.h */, C7345B9B1EC07B5D00104C1C /* version.h */, ); path = libswresample; sourceTree = ""; }; C7345B9C1EC07B5D00104C1C /* libswscale */ = { isa = PBXGroup; children = ( C7345B9D1EC07B5D00104C1C /* swscale.h */, C7345B9E1EC07B5D00104C1C /* version.h */, ); path = libswscale; sourceTree = ""; }; C7345B9F1EC07B5D00104C1C /* openssl */ = { isa = PBXGroup; children = ( C7345BA01EC07B5D00104C1C /* aes.h */, C7345BA11EC07B5D00104C1C /* asn1.h */, C7345BA21EC07B5D00104C1C /* asn1_mac.h */, C7345BA31EC07B5D00104C1C /* asn1t.h */, C7345BA41EC07B5D00104C1C /* bio.h */, C7345BA51EC07B5D00104C1C /* blowfish.h */, C7345BA61EC07B5D00104C1C /* bn.h */, C7345BA71EC07B5D00104C1C /* buffer.h */, C7345BA81EC07B5D00104C1C /* camellia.h */, C7345BA91EC07B5D00104C1C /* cast.h */, C7345BAA1EC07B5D00104C1C /* cmac.h */, C7345BAB1EC07B5D00104C1C /* cms.h */, C7345BAC1EC07B5D00104C1C /* comp.h */, C7345BAD1EC07B5D00104C1C /* conf.h */, C7345BAE1EC07B5D00104C1C /* conf_api.h */, C7345BAF1EC07B5D00104C1C /* crypto.h */, C7345BB01EC07B5D00104C1C /* des.h */, C7345BB11EC07B5D00104C1C /* des_old.h */, C7345BB21EC07B5D00104C1C /* dh.h */, C7345BB31EC07B5D00104C1C /* dsa.h */, C7345BB41EC07B5D00104C1C /* dso.h */, C7345BB51EC07B5D00104C1C /* dtls1.h */, C7345BB61EC07B5D00104C1C /* e_os2.h */, C7345BB71EC07B5D00104C1C /* ebcdic.h */, C7345BB81EC07B5D00104C1C /* ec.h */, C7345BB91EC07B5D00104C1C /* ecdh.h */, C7345BBA1EC07B5D00104C1C /* ecdsa.h */, C7345BBB1EC07B5D00104C1C /* engine.h */, C7345BBC1EC07B5D00104C1C /* err.h */, C7345BBD1EC07B5D00104C1C /* evp.h */, C7345BBE1EC07B5D00104C1C /* hmac.h */, C7345BBF1EC07B5D00104C1C /* idea.h */, C7345BC01EC07B5D00104C1C /* krb5_asn.h */, C7345BC11EC07B5D00104C1C /* kssl.h */, C7345BC21EC07B5D00104C1C /* lhash.h */, C7345BC31EC07B5D00104C1C /* md4.h */, C7345BC41EC07B5D00104C1C /* md5.h */, C7345BC51EC07B5D00104C1C /* mdc2.h */, C7345BC61EC07B5D00104C1C /* modes.h */, C7345BC71EC07B5D00104C1C /* obj_mac.h */, C7345BC81EC07B5D00104C1C /* objects.h */, C7345BC91EC07B5D00104C1C /* ocsp.h */, C7345BCA1EC07B5D00104C1C /* opensslconf.h */, C7345BCB1EC07B5D00104C1C /* opensslv.h */, C7345BCC1EC07B5D00104C1C /* ossl_typ.h */, C7345BCD1EC07B5D00104C1C /* pem.h */, C7345BCE1EC07B5D00104C1C /* pem2.h */, C7345BCF1EC07B5D00104C1C /* pkcs12.h */, C7345BD01EC07B5D00104C1C /* pkcs7.h */, C7345BD11EC07B5D00104C1C /* pqueue.h */, C7345BD21EC07B5D00104C1C /* rand.h */, C7345BD31EC07B5D00104C1C /* rc2.h */, C7345BD41EC07B5D00104C1C /* rc4.h */, C7345BD51EC07B5D00104C1C /* ripemd.h */, C7345BD61EC07B5D00104C1C /* rsa.h */, C7345BD71EC07B5D00104C1C /* safestack.h */, C7345BD81EC07B5D00104C1C /* seed.h */, C7345BD91EC07B5D00104C1C /* sha.h */, C7345BDA1EC07B5D00104C1C /* srp.h */, C7345BDB1EC07B5D00104C1C /* srtp.h */, C7345BDC1EC07B5D00104C1C /* ssl.h */, C7345BDD1EC07B5D00104C1C /* ssl2.h */, C7345BDE1EC07B5D00104C1C /* ssl23.h */, C7345BDF1EC07B5D00104C1C /* ssl3.h */, C7345BE01EC07B5D00104C1C /* stack.h */, C7345BE11EC07B5D00104C1C /* symhacks.h */, C7345BE21EC07B5D00104C1C /* tls1.h */, C7345BE31EC07B5D00104C1C /* ts.h */, C7345BE41EC07B5D00104C1C /* txt_db.h */, C7345BE51EC07B5D00104C1C /* ui.h */, C7345BE61EC07B5D00104C1C /* ui_compat.h */, C7345BE71EC07B5D00104C1C /* whrlpool.h */, C7345BE81EC07B5D00104C1C /* x509.h */, C7345BE91EC07B5D00104C1C /* x509_vfy.h */, C7345BEA1EC07B5D00104C1C /* x509v3.h */, ); path = openssl; sourceTree = ""; }; C73D4D641EADAF3E00ED8308 /* Class */ = { isa = PBXGroup; children = ( C73D4D651EADAF3E00ED8308 /* Controller */, C73D4D6C1EADAF3E00ED8308 /* Model */, C73D4D6F1EADAF3E00ED8308 /* View */, ); path = Class; sourceTree = ""; }; C73D4D651EADAF3E00ED8308 /* Controller */ = { isa = PBXGroup; children = ( C73D4D681EADAF3E00ED8308 /* MHomeViewController.h */, C73D4D691EADAF3E00ED8308 /* MHomeViewController.m */, C73D4D661EADAF3E00ED8308 /* ListViewController.h */, C73D4D671EADAF3E00ED8308 /* ListViewController.m */, ); path = Controller; sourceTree = ""; }; C73D4D6C1EADAF3E00ED8308 /* Model */ = { isa = PBXGroup; children = ( C73D4D6D1EADAF3E00ED8308 /* MMovieModel.h */, C73D4D6E1EADAF3E00ED8308 /* MMovieModel.m */, ); path = Model; sourceTree = ""; }; C73D4D6F1EADAF3E00ED8308 /* View */ = { isa = PBXGroup; children = ( C73D4D701EADAF3E00ED8308 /* ListTableViewCell.h */, C73D4D711EADAF3E00ED8308 /* ListTableViewCell.m */, ); path = View; sourceTree = ""; }; C73D4D771EADAF5000ED8308 /* 3rParty */ = { isa = PBXGroup; children = ( C73D4D781EADAF5000ED8308 /* FFmpeg */, C73D4E081EADAF5000ED8308 /* kxmovie */, ); path = 3rParty; sourceTree = SOURCE_ROOT; }; C73D4D781EADAF5000ED8308 /* FFmpeg */ = { isa = PBXGroup; children = ( C7345B171EC07B5D00104C1C /* include */, C73D4E011EADAF5000ED8308 /* lib */, ); path = FFmpeg; sourceTree = ""; }; C73D4E011EADAF5000ED8308 /* lib */ = { isa = PBXGroup; children = ( C7345B131EC07B3E00104C1C /* libcrypto.a */, C7345B141EC07B3E00104C1C /* libssl.a */, C73D4E021EADAF5000ED8308 /* libavcodec.a */, C73D4E031EADAF5000ED8308 /* libavfilter.a */, C73D4E041EADAF5000ED8308 /* libavformat.a */, C73D4E051EADAF5000ED8308 /* libavutil.a */, C73D4E061EADAF5000ED8308 /* libswresample.a */, C73D4E071EADAF5000ED8308 /* libswscale.a */, ); path = lib; sourceTree = ""; }; C73D4E081EADAF5000ED8308 /* kxmovie */ = { isa = PBXGroup; children = ( C73D4E091EADAF5000ED8308 /* KxAudioManager.h */, C73D4E0A1EADAF5000ED8308 /* KxAudioManager.m */, C73D4E0B1EADAF5000ED8308 /* KxLogger.h */, C73D4E0C1EADAF5000ED8308 /* kxmovie-Prefix.pch */, C73D4E0D1EADAF5000ED8308 /* kxmovie.bundle */, C73D4E0E1EADAF5000ED8308 /* KxMovieDecoder.h */, C73D4E0F1EADAF5000ED8308 /* KxMovieDecoder.m */, C73D4E101EADAF5000ED8308 /* KxMovieGLView.h */, C73D4E111EADAF5000ED8308 /* KxMovieGLView.m */, C73D4E121EADAF5000ED8308 /* KxMovieViewController.h */, C73D4E131EADAF5000ED8308 /* KxMovieViewController.m */, ); path = kxmovie; sourceTree = ""; }; E3D7921AC30277C0E3D00926 /* Frameworks */ = { isa = PBXGroup; children = ( C7CD070C1E5AB10D007A2F21 /* libz.1.2.5.tbd */, C7CD070A1E5AB04C007A2F21 /* VideoToolbox.framework */, C73926EB1D1D2FAD00C93A12 /* AVKit.framework */, C7A33F071E5450070009768F /* UIKit.framework */, 555C6A4F7C914B4153854619 /* libPods-MVideo.a */, ); name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 4F16F38E1D15926800E8B25D /* MVideo */ = { isa = PBXNativeTarget; buildConfigurationList = 4F16F3A61D15926800E8B25D /* Build configuration list for PBXNativeTarget "MVideo" */; buildPhases = ( F97F3CACD655DA69E4F9BED3 /* [CP] Check Pods Manifest.lock */, 4F16F38B1D15926800E8B25D /* Sources */, 4F16F38C1D15926800E8B25D /* Frameworks */, 4F16F38D1D15926800E8B25D /* Resources */, AB0855775640C5F14954E2D7 /* [CP] Embed Pods Frameworks */, 9E06F77112723F291207BF14 /* [CP] Copy Pods Resources */, ); buildRules = ( ); dependencies = ( ); name = MVideo; productName = MVideo; productReference = 4F16F38F1D15926800E8B25D /* MVideo.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 4F16F3871D15926800E8B25D /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 0820; ORGANIZATIONNAME = LHL; TargetAttributes = { 4F16F38E1D15926800E8B25D = { CreatedOnToolsVersion = 7.2; DevelopmentTeam = 4AW78593E8; ProvisioningStyle = Manual; SystemCapabilities = { com.apple.BackgroundModes = { enabled = 1; }; }; }; }; }; buildConfigurationList = 4F16F38A1D15926800E8B25D /* Build configuration list for PBXProject "MVideo" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 4F16F3861D15926800E8B25D; productRefGroup = 4F16F3901D15926800E8B25D /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 4F16F38E1D15926800E8B25D /* MVideo */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 4F16F38D1D15926800E8B25D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 4F16F3A21D15926800E8B25D /* LaunchScreen.storyboard in Resources */, C73D4E1B1EADAF5000ED8308 /* kxmovie.bundle in Resources */, 4F16F39F1D15926800E8B25D /* Assets.xcassets in Resources */, 4F16F39D1D15926800E8B25D /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 9E06F77112723F291207BF14 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "[CP] Copy Pods Resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MVideo/Pods-MVideo-resources.sh\"\n"; showEnvVarsInLog = 0; }; AB0855775640C5F14954E2D7 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MVideo/Pods-MVideo-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; F97F3CACD655DA69E4F9BED3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 4F16F38B1D15926800E8B25D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 4F16F3971D15926800E8B25D /* AppDelegate.m in Sources */, C73D4E1C1EADAF5000ED8308 /* KxMovieDecoder.m in Sources */, C73D4E1D1EADAF5000ED8308 /* KxMovieGLView.m in Sources */, C73D4D731EADAF3E00ED8308 /* MHomeViewController.m in Sources */, C73D4E1E1EADAF5000ED8308 /* KxMovieViewController.m in Sources */, C73D4E1A1EADAF5000ED8308 /* KxAudioManager.m in Sources */, 4F16F3941D15926800E8B25D /* main.m in Sources */, C73D4D761EADAF3E00ED8308 /* ListTableViewCell.m in Sources */, C73D4D751EADAF3E00ED8308 /* MMovieModel.m in Sources */, C73D4D721EADAF3E00ED8308 /* ListViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 4F16F39B1D15926800E8B25D /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( 4F16F39C1D15926800E8B25D /* Base */, ); name = Main.storyboard; sourceTree = ""; }; 4F16F3A01D15926800E8B25D /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( 4F16F3A11D15926800E8B25D /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 4F16F3A41D15926800E8B25D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; }; 4F16F3A51D15926800E8B25D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; name = Release; }; 4F16F3A71D15926800E8B25D /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 456BAC7CC6557EA39F023529 /* Pods-MVideo.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; DEVELOPMENT_TEAM = 4AW78593E8; ENABLE_BITCODE = NO; GCC_PREFIX_HEADER = "./MVideo/MVideo-Pre.pch"; HEADER_SEARCH_PATHS = ( "\"${SRCROOT}/3rParty/FFmpeg/include\"/**", "$(inherited)", "\"${PODS_ROOT}/Headers/Public\"", "\"${PODS_ROOT}/Headers/Public/NSLogger\"", ); INFOPLIST_FILE = MVideo/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/3rParty/FFmpeg/lib", ); PRODUCT_BUNDLE_IDENTIFIER = com.sohu.mobile.MVideo; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = "4fffb6ce-c752-4f4e-b5fa-ed44af1b7e98"; PROVISIONING_PROFILE_SPECIFIER = "XC iOS Ad Hoc: *"; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; 4F16F3A81D15926800E8B25D /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 1FFC45E0305C9DC90791AED1 /* Pods-MVideo.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; DEVELOPMENT_TEAM = 4AW78593E8; ENABLE_BITCODE = NO; GCC_PREFIX_HEADER = "./MVideo/MVideo-Pre.pch"; HEADER_SEARCH_PATHS = ( "\"${SRCROOT}/3rParty/FFmpeg/include\"/**", "$(inherited)", "\"${PODS_ROOT}/Headers/Public\"", "\"${PODS_ROOT}/Headers/Public/NSLogger\"", ); INFOPLIST_FILE = MVideo/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/3rParty/FFmpeg/lib", ); PRODUCT_BUNDLE_IDENTIFIER = com.sohu.mobile.MVideo; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = "4fffb6ce-c752-4f4e-b5fa-ed44af1b7e98"; PROVISIONING_PROFILE_SPECIFIER = "XC iOS Ad Hoc: *"; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 4F16F38A1D15926800E8B25D /* Build configuration list for PBXProject "MVideo" */ = { isa = XCConfigurationList; buildConfigurations = ( 4F16F3A41D15926800E8B25D /* Debug */, 4F16F3A51D15926800E8B25D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 4F16F3A61D15926800E8B25D /* Build configuration list for PBXNativeTarget "MVideo" */ = { isa = XCConfigurationList; buildConfigurations = ( 4F16F3A71D15926800E8B25D /* Debug */, 4F16F3A81D15926800E8B25D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 4F16F3871D15926800E8B25D /* Project object */; } ================================================ FILE: MVideo.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: MVideo.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Pods/Masonry/LICENSE ================================================ Copyright (c) 2011-2012 Masonry Team - https://github.com/Masonry Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: Pods/Masonry/Masonry/MASCompositeConstraint.h ================================================ // // MASCompositeConstraint.h // Masonry // // Created by Jonas Budelmann on 21/07/13. // Copyright (c) 2013 cloudling. All rights reserved. // #import "MASConstraint.h" #import "MASUtilities.h" /** * A group of MASConstraint objects */ @interface MASCompositeConstraint : MASConstraint /** * Creates a composite with a predefined array of children * * @param children child MASConstraints * * @return a composite constraint */ - (id)initWithChildren:(NSArray *)children; @end ================================================ FILE: Pods/Masonry/Masonry/MASCompositeConstraint.m ================================================ // // MASCompositeConstraint.m // Masonry // // Created by Jonas Budelmann on 21/07/13. // Copyright (c) 2013 cloudling. All rights reserved. // #import "MASCompositeConstraint.h" #import "MASConstraint+Private.h" @interface MASCompositeConstraint () @property (nonatomic, strong) id mas_key; @property (nonatomic, strong) NSMutableArray *childConstraints; @end @implementation MASCompositeConstraint - (id)initWithChildren:(NSArray *)children { self = [super init]; if (!self) return nil; _childConstraints = [children mutableCopy]; for (MASConstraint *constraint in _childConstraints) { constraint.delegate = self; } return self; } #pragma mark - MASConstraintDelegate - (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint { NSUInteger index = [self.childConstraints indexOfObject:constraint]; NSAssert(index != NSNotFound, @"Could not find constraint %@", constraint); [self.childConstraints replaceObjectAtIndex:index withObject:replacementConstraint]; } - (MASConstraint *)constraint:(MASConstraint __unused *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute { id strongDelegate = self.delegate; MASConstraint *newConstraint = [strongDelegate constraint:self addConstraintWithLayoutAttribute:layoutAttribute]; newConstraint.delegate = self; [self.childConstraints addObject:newConstraint]; return newConstraint; } #pragma mark - NSLayoutConstraint multiplier proxies - (MASConstraint * (^)(CGFloat))multipliedBy { return ^id(CGFloat multiplier) { for (MASConstraint *constraint in self.childConstraints) { constraint.multipliedBy(multiplier); } return self; }; } - (MASConstraint * (^)(CGFloat))dividedBy { return ^id(CGFloat divider) { for (MASConstraint *constraint in self.childConstraints) { constraint.dividedBy(divider); } return self; }; } #pragma mark - MASLayoutPriority proxy - (MASConstraint * (^)(MASLayoutPriority))priority { return ^id(MASLayoutPriority priority) { for (MASConstraint *constraint in self.childConstraints) { constraint.priority(priority); } return self; }; } #pragma mark - NSLayoutRelation proxy - (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation { return ^id(id attr, NSLayoutRelation relation) { for (MASConstraint *constraint in self.childConstraints.copy) { constraint.equalToWithRelation(attr, relation); } return self; }; } #pragma mark - attribute chaining - (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute { [self constraint:self addConstraintWithLayoutAttribute:layoutAttribute]; return self; } #pragma mark - Animator proxy #if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV) - (MASConstraint *)animator { for (MASConstraint *constraint in self.childConstraints) { [constraint animator]; } return self; } #endif #pragma mark - debug helpers - (MASConstraint * (^)(id))key { return ^id(id key) { self.mas_key = key; int i = 0; for (MASConstraint *constraint in self.childConstraints) { constraint.key([NSString stringWithFormat:@"%@[%d]", key, i++]); } return self; }; } #pragma mark - NSLayoutConstraint constant setters - (void)setInsets:(MASEdgeInsets)insets { for (MASConstraint *constraint in self.childConstraints) { constraint.insets = insets; } } - (void)setOffset:(CGFloat)offset { for (MASConstraint *constraint in self.childConstraints) { constraint.offset = offset; } } - (void)setSizeOffset:(CGSize)sizeOffset { for (MASConstraint *constraint in self.childConstraints) { constraint.sizeOffset = sizeOffset; } } - (void)setCenterOffset:(CGPoint)centerOffset { for (MASConstraint *constraint in self.childConstraints) { constraint.centerOffset = centerOffset; } } #pragma mark - MASConstraint - (void)activate { for (MASConstraint *constraint in self.childConstraints) { [constraint activate]; } } - (void)deactivate { for (MASConstraint *constraint in self.childConstraints) { [constraint deactivate]; } } - (void)install { for (MASConstraint *constraint in self.childConstraints) { constraint.updateExisting = self.updateExisting; [constraint install]; } } - (void)uninstall { for (MASConstraint *constraint in self.childConstraints) { [constraint uninstall]; } } @end ================================================ FILE: Pods/Masonry/Masonry/MASConstraint+Private.h ================================================ // // MASConstraint+Private.h // Masonry // // Created by Nick Tymchenko on 29/04/14. // Copyright (c) 2014 cloudling. All rights reserved. // #import "MASConstraint.h" @protocol MASConstraintDelegate; @interface MASConstraint () /** * Whether or not to check for an existing constraint instead of adding constraint */ @property (nonatomic, assign) BOOL updateExisting; /** * Usually MASConstraintMaker but could be a parent MASConstraint */ @property (nonatomic, weak) id delegate; /** * Based on a provided value type, is equal to calling: * NSNumber - setOffset: * NSValue with CGPoint - setPointOffset: * NSValue with CGSize - setSizeOffset: * NSValue with MASEdgeInsets - setInsets: */ - (void)setLayoutConstantWithValue:(NSValue *)value; @end @interface MASConstraint (Abstract) /** * Sets the constraint relation to given NSLayoutRelation * returns a block which accepts one of the following: * MASViewAttribute, UIView, NSValue, NSArray * see readme for more details. */ - (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation; /** * Override to set a custom chaining behaviour */ - (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute; @end @protocol MASConstraintDelegate /** * Notifies the delegate when the constraint needs to be replaced with another constraint. For example * A MASViewConstraint may turn into a MASCompositeConstraint when an array is passed to one of the equality blocks */ - (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint; - (MASConstraint *)constraint:(MASConstraint *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute; @end ================================================ FILE: Pods/Masonry/Masonry/MASConstraint.h ================================================ // // MASConstraint.h // Masonry // // Created by Jonas Budelmann on 22/07/13. // Copyright (c) 2013 cloudling. All rights reserved. // #import "MASUtilities.h" /** * Enables Constraints to be created with chainable syntax * Constraint can represent single NSLayoutConstraint (MASViewConstraint) * or a group of NSLayoutConstraints (MASComposisteConstraint) */ @interface MASConstraint : NSObject // Chaining Support /** * Modifies the NSLayoutConstraint constant, * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following * NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight */ - (MASConstraint * (^)(MASEdgeInsets insets))insets; /** * Modifies the NSLayoutConstraint constant, * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following * NSLayoutAttributeWidth, NSLayoutAttributeHeight */ - (MASConstraint * (^)(CGSize offset))sizeOffset; /** * Modifies the NSLayoutConstraint constant, * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following * NSLayoutAttributeCenterX, NSLayoutAttributeCenterY */ - (MASConstraint * (^)(CGPoint offset))centerOffset; /** * Modifies the NSLayoutConstraint constant */ - (MASConstraint * (^)(CGFloat offset))offset; /** * Modifies the NSLayoutConstraint constant based on a value type */ - (MASConstraint * (^)(NSValue *value))valueOffset; /** * Sets the NSLayoutConstraint multiplier property */ - (MASConstraint * (^)(CGFloat multiplier))multipliedBy; /** * Sets the NSLayoutConstraint multiplier to 1.0/dividedBy */ - (MASConstraint * (^)(CGFloat divider))dividedBy; /** * Sets the NSLayoutConstraint priority to a float or MASLayoutPriority */ - (MASConstraint * (^)(MASLayoutPriority priority))priority; /** * Sets the NSLayoutConstraint priority to MASLayoutPriorityLow */ - (MASConstraint * (^)())priorityLow; /** * Sets the NSLayoutConstraint priority to MASLayoutPriorityMedium */ - (MASConstraint * (^)())priorityMedium; /** * Sets the NSLayoutConstraint priority to MASLayoutPriorityHigh */ - (MASConstraint * (^)())priorityHigh; /** * Sets the constraint relation to NSLayoutRelationEqual * returns a block which accepts one of the following: * MASViewAttribute, UIView, NSValue, NSArray * see readme for more details. */ - (MASConstraint * (^)(id attr))equalTo; /** * Sets the constraint relation to NSLayoutRelationGreaterThanOrEqual * returns a block which accepts one of the following: * MASViewAttribute, UIView, NSValue, NSArray * see readme for more details. */ - (MASConstraint * (^)(id attr))greaterThanOrEqualTo; /** * Sets the constraint relation to NSLayoutRelationLessThanOrEqual * returns a block which accepts one of the following: * MASViewAttribute, UIView, NSValue, NSArray * see readme for more details. */ - (MASConstraint * (^)(id attr))lessThanOrEqualTo; /** * Optional semantic property which has no effect but improves the readability of constraint */ - (MASConstraint *)with; /** * Optional semantic property which has no effect but improves the readability of constraint */ - (MASConstraint *)and; /** * Creates a new MASCompositeConstraint with the called attribute and reciever */ - (MASConstraint *)left; - (MASConstraint *)top; - (MASConstraint *)right; - (MASConstraint *)bottom; - (MASConstraint *)leading; - (MASConstraint *)trailing; - (MASConstraint *)width; - (MASConstraint *)height; - (MASConstraint *)centerX; - (MASConstraint *)centerY; - (MASConstraint *)baseline; #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) - (MASConstraint *)firstBaseline; - (MASConstraint *)lastBaseline; #endif #if TARGET_OS_IPHONE || TARGET_OS_TV - (MASConstraint *)leftMargin; - (MASConstraint *)rightMargin; - (MASConstraint *)topMargin; - (MASConstraint *)bottomMargin; - (MASConstraint *)leadingMargin; - (MASConstraint *)trailingMargin; - (MASConstraint *)centerXWithinMargins; - (MASConstraint *)centerYWithinMargins; #endif /** * Sets the constraint debug name */ - (MASConstraint * (^)(id key))key; // NSLayoutConstraint constant Setters // for use outside of mas_updateConstraints/mas_makeConstraints blocks /** * Modifies the NSLayoutConstraint constant, * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following * NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight */ - (void)setInsets:(MASEdgeInsets)insets; /** * Modifies the NSLayoutConstraint constant, * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following * NSLayoutAttributeWidth, NSLayoutAttributeHeight */ - (void)setSizeOffset:(CGSize)sizeOffset; /** * Modifies the NSLayoutConstraint constant, * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following * NSLayoutAttributeCenterX, NSLayoutAttributeCenterY */ - (void)setCenterOffset:(CGPoint)centerOffset; /** * Modifies the NSLayoutConstraint constant */ - (void)setOffset:(CGFloat)offset; // NSLayoutConstraint Installation support #if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV) /** * Whether or not to go through the animator proxy when modifying the constraint */ @property (nonatomic, copy, readonly) MASConstraint *animator; #endif /** * Activates an NSLayoutConstraint if it's supported by an OS. * Invokes install otherwise. */ - (void)activate; /** * Deactivates previously installed/activated NSLayoutConstraint. */ - (void)deactivate; /** * Creates a NSLayoutConstraint and adds it to the appropriate view. */ - (void)install; /** * Removes previously installed NSLayoutConstraint */ - (void)uninstall; @end /** * Convenience auto-boxing macros for MASConstraint methods. * * Defining MAS_SHORTHAND_GLOBALS will turn on auto-boxing for default syntax. * A potential drawback of this is that the unprefixed macros will appear in global scope. */ #define mas_equalTo(...) equalTo(MASBoxValue((__VA_ARGS__))) #define mas_greaterThanOrEqualTo(...) greaterThanOrEqualTo(MASBoxValue((__VA_ARGS__))) #define mas_lessThanOrEqualTo(...) lessThanOrEqualTo(MASBoxValue((__VA_ARGS__))) #define mas_offset(...) valueOffset(MASBoxValue((__VA_ARGS__))) #ifdef MAS_SHORTHAND_GLOBALS #define equalTo(...) mas_equalTo(__VA_ARGS__) #define greaterThanOrEqualTo(...) mas_greaterThanOrEqualTo(__VA_ARGS__) #define lessThanOrEqualTo(...) mas_lessThanOrEqualTo(__VA_ARGS__) #define offset(...) mas_offset(__VA_ARGS__) #endif @interface MASConstraint (AutoboxingSupport) /** * Aliases to corresponding relation methods (for shorthand macros) * Also needed to aid autocompletion */ - (MASConstraint * (^)(id attr))mas_equalTo; - (MASConstraint * (^)(id attr))mas_greaterThanOrEqualTo; - (MASConstraint * (^)(id attr))mas_lessThanOrEqualTo; /** * A dummy method to aid autocompletion */ - (MASConstraint * (^)(id offset))mas_offset; @end ================================================ FILE: Pods/Masonry/Masonry/MASConstraint.m ================================================ // // MASConstraint.m // Masonry // // Created by Nick Tymchenko on 1/20/14. // #import "MASConstraint.h" #import "MASConstraint+Private.h" #define MASMethodNotImplemented() \ @throw [NSException exceptionWithName:NSInternalInconsistencyException \ reason:[NSString stringWithFormat:@"You must override %@ in a subclass.", NSStringFromSelector(_cmd)] \ userInfo:nil] @implementation MASConstraint #pragma mark - Init - (id)init { NSAssert(![self isMemberOfClass:[MASConstraint class]], @"MASConstraint is an abstract class, you should not instantiate it directly."); return [super init]; } #pragma mark - NSLayoutRelation proxies - (MASConstraint * (^)(id))equalTo { return ^id(id attribute) { return self.equalToWithRelation(attribute, NSLayoutRelationEqual); }; } - (MASConstraint * (^)(id))mas_equalTo { return ^id(id attribute) { return self.equalToWithRelation(attribute, NSLayoutRelationEqual); }; } - (MASConstraint * (^)(id))greaterThanOrEqualTo { return ^id(id attribute) { return self.equalToWithRelation(attribute, NSLayoutRelationGreaterThanOrEqual); }; } - (MASConstraint * (^)(id))mas_greaterThanOrEqualTo { return ^id(id attribute) { return self.equalToWithRelation(attribute, NSLayoutRelationGreaterThanOrEqual); }; } - (MASConstraint * (^)(id))lessThanOrEqualTo { return ^id(id attribute) { return self.equalToWithRelation(attribute, NSLayoutRelationLessThanOrEqual); }; } - (MASConstraint * (^)(id))mas_lessThanOrEqualTo { return ^id(id attribute) { return self.equalToWithRelation(attribute, NSLayoutRelationLessThanOrEqual); }; } #pragma mark - MASLayoutPriority proxies - (MASConstraint * (^)())priorityLow { return ^id{ self.priority(MASLayoutPriorityDefaultLow); return self; }; } - (MASConstraint * (^)())priorityMedium { return ^id{ self.priority(MASLayoutPriorityDefaultMedium); return self; }; } - (MASConstraint * (^)())priorityHigh { return ^id{ self.priority(MASLayoutPriorityDefaultHigh); return self; }; } #pragma mark - NSLayoutConstraint constant proxies - (MASConstraint * (^)(MASEdgeInsets))insets { return ^id(MASEdgeInsets insets){ self.insets = insets; return self; }; } - (MASConstraint * (^)(CGSize))sizeOffset { return ^id(CGSize offset) { self.sizeOffset = offset; return self; }; } - (MASConstraint * (^)(CGPoint))centerOffset { return ^id(CGPoint offset) { self.centerOffset = offset; return self; }; } - (MASConstraint * (^)(CGFloat))offset { return ^id(CGFloat offset){ self.offset = offset; return self; }; } - (MASConstraint * (^)(NSValue *value))valueOffset { return ^id(NSValue *offset) { NSAssert([offset isKindOfClass:NSValue.class], @"expected an NSValue offset, got: %@", offset); [self setLayoutConstantWithValue:offset]; return self; }; } - (MASConstraint * (^)(id offset))mas_offset { // Will never be called due to macro return nil; } #pragma mark - NSLayoutConstraint constant setter - (void)setLayoutConstantWithValue:(NSValue *)value { if ([value isKindOfClass:NSNumber.class]) { self.offset = [(NSNumber *)value doubleValue]; } else if (strcmp(value.objCType, @encode(CGPoint)) == 0) { CGPoint point; [value getValue:&point]; self.centerOffset = point; } else if (strcmp(value.objCType, @encode(CGSize)) == 0) { CGSize size; [value getValue:&size]; self.sizeOffset = size; } else if (strcmp(value.objCType, @encode(MASEdgeInsets)) == 0) { MASEdgeInsets insets; [value getValue:&insets]; self.insets = insets; } else { NSAssert(NO, @"attempting to set layout constant with unsupported value: %@", value); } } #pragma mark - Semantic properties - (MASConstraint *)with { return self; } - (MASConstraint *)and { return self; } #pragma mark - Chaining - (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute __unused)layoutAttribute { MASMethodNotImplemented(); } - (MASConstraint *)left { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeft]; } - (MASConstraint *)top { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTop]; } - (MASConstraint *)right { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRight]; } - (MASConstraint *)bottom { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottom]; } - (MASConstraint *)leading { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeading]; } - (MASConstraint *)trailing { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailing]; } - (MASConstraint *)width { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeWidth]; } - (MASConstraint *)height { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeHeight]; } - (MASConstraint *)centerX { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterX]; } - (MASConstraint *)centerY { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterY]; } - (MASConstraint *)baseline { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBaseline]; } #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) - (MASConstraint *)firstBaseline { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeFirstBaseline]; } - (MASConstraint *)lastBaseline { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLastBaseline]; } #endif #if TARGET_OS_IPHONE || TARGET_OS_TV - (MASConstraint *)leftMargin { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin]; } - (MASConstraint *)rightMargin { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRightMargin]; } - (MASConstraint *)topMargin { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTopMargin]; } - (MASConstraint *)bottomMargin { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottomMargin]; } - (MASConstraint *)leadingMargin { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeadingMargin]; } - (MASConstraint *)trailingMargin { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailingMargin]; } - (MASConstraint *)centerXWithinMargins { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterXWithinMargins]; } - (MASConstraint *)centerYWithinMargins { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterYWithinMargins]; } #endif #pragma mark - Abstract - (MASConstraint * (^)(CGFloat multiplier))multipliedBy { MASMethodNotImplemented(); } - (MASConstraint * (^)(CGFloat divider))dividedBy { MASMethodNotImplemented(); } - (MASConstraint * (^)(MASLayoutPriority priority))priority { MASMethodNotImplemented(); } - (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation { MASMethodNotImplemented(); } - (MASConstraint * (^)(id key))key { MASMethodNotImplemented(); } - (void)setInsets:(MASEdgeInsets __unused)insets { MASMethodNotImplemented(); } - (void)setSizeOffset:(CGSize __unused)sizeOffset { MASMethodNotImplemented(); } - (void)setCenterOffset:(CGPoint __unused)centerOffset { MASMethodNotImplemented(); } - (void)setOffset:(CGFloat __unused)offset { MASMethodNotImplemented(); } #if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV) - (MASConstraint *)animator { MASMethodNotImplemented(); } #endif - (void)activate { MASMethodNotImplemented(); } - (void)deactivate { MASMethodNotImplemented(); } - (void)install { MASMethodNotImplemented(); } - (void)uninstall { MASMethodNotImplemented(); } @end ================================================ FILE: Pods/Masonry/Masonry/MASConstraintMaker.h ================================================ // // MASConstraintBuilder.h // Masonry // // Created by Jonas Budelmann on 20/07/13. // Copyright (c) 2013 cloudling. All rights reserved. // #import "MASConstraint.h" #import "MASUtilities.h" typedef NS_OPTIONS(NSInteger, MASAttribute) { MASAttributeLeft = 1 << NSLayoutAttributeLeft, MASAttributeRight = 1 << NSLayoutAttributeRight, MASAttributeTop = 1 << NSLayoutAttributeTop, MASAttributeBottom = 1 << NSLayoutAttributeBottom, MASAttributeLeading = 1 << NSLayoutAttributeLeading, MASAttributeTrailing = 1 << NSLayoutAttributeTrailing, MASAttributeWidth = 1 << NSLayoutAttributeWidth, MASAttributeHeight = 1 << NSLayoutAttributeHeight, MASAttributeCenterX = 1 << NSLayoutAttributeCenterX, MASAttributeCenterY = 1 << NSLayoutAttributeCenterY, MASAttributeBaseline = 1 << NSLayoutAttributeBaseline, #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) MASAttributeFirstBaseline = 1 << NSLayoutAttributeFirstBaseline, MASAttributeLastBaseline = 1 << NSLayoutAttributeLastBaseline, #endif #if TARGET_OS_IPHONE || TARGET_OS_TV MASAttributeLeftMargin = 1 << NSLayoutAttributeLeftMargin, MASAttributeRightMargin = 1 << NSLayoutAttributeRightMargin, MASAttributeTopMargin = 1 << NSLayoutAttributeTopMargin, MASAttributeBottomMargin = 1 << NSLayoutAttributeBottomMargin, MASAttributeLeadingMargin = 1 << NSLayoutAttributeLeadingMargin, MASAttributeTrailingMargin = 1 << NSLayoutAttributeTrailingMargin, MASAttributeCenterXWithinMargins = 1 << NSLayoutAttributeCenterXWithinMargins, MASAttributeCenterYWithinMargins = 1 << NSLayoutAttributeCenterYWithinMargins, #endif }; /** * Provides factory methods for creating MASConstraints. * Constraints are collected until they are ready to be installed * */ @interface MASConstraintMaker : NSObject /** * The following properties return a new MASViewConstraint * with the first item set to the makers associated view and the appropriate MASViewAttribute */ @property (nonatomic, strong, readonly) MASConstraint *left; @property (nonatomic, strong, readonly) MASConstraint *top; @property (nonatomic, strong, readonly) MASConstraint *right; @property (nonatomic, strong, readonly) MASConstraint *bottom; @property (nonatomic, strong, readonly) MASConstraint *leading; @property (nonatomic, strong, readonly) MASConstraint *trailing; @property (nonatomic, strong, readonly) MASConstraint *width; @property (nonatomic, strong, readonly) MASConstraint *height; @property (nonatomic, strong, readonly) MASConstraint *centerX; @property (nonatomic, strong, readonly) MASConstraint *centerY; @property (nonatomic, strong, readonly) MASConstraint *baseline; #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) @property (nonatomic, strong, readonly) MASConstraint *firstBaseline; @property (nonatomic, strong, readonly) MASConstraint *lastBaseline; #endif #if TARGET_OS_IPHONE || TARGET_OS_TV @property (nonatomic, strong, readonly) MASConstraint *leftMargin; @property (nonatomic, strong, readonly) MASConstraint *rightMargin; @property (nonatomic, strong, readonly) MASConstraint *topMargin; @property (nonatomic, strong, readonly) MASConstraint *bottomMargin; @property (nonatomic, strong, readonly) MASConstraint *leadingMargin; @property (nonatomic, strong, readonly) MASConstraint *trailingMargin; @property (nonatomic, strong, readonly) MASConstraint *centerXWithinMargins; @property (nonatomic, strong, readonly) MASConstraint *centerYWithinMargins; #endif /** * Returns a block which creates a new MASCompositeConstraint with the first item set * to the makers associated view and children corresponding to the set bits in the * MASAttribute parameter. Combine multiple attributes via binary-or. */ @property (nonatomic, strong, readonly) MASConstraint *(^attributes)(MASAttribute attrs); /** * Creates a MASCompositeConstraint with type MASCompositeConstraintTypeEdges * which generates the appropriate MASViewConstraint children (top, left, bottom, right) * with the first item set to the makers associated view */ @property (nonatomic, strong, readonly) MASConstraint *edges; /** * Creates a MASCompositeConstraint with type MASCompositeConstraintTypeSize * which generates the appropriate MASViewConstraint children (width, height) * with the first item set to the makers associated view */ @property (nonatomic, strong, readonly) MASConstraint *size; /** * Creates a MASCompositeConstraint with type MASCompositeConstraintTypeCenter * which generates the appropriate MASViewConstraint children (centerX, centerY) * with the first item set to the makers associated view */ @property (nonatomic, strong, readonly) MASConstraint *center; /** * Whether or not to check for an existing constraint instead of adding constraint */ @property (nonatomic, assign) BOOL updateExisting; /** * Whether or not to remove existing constraints prior to installing */ @property (nonatomic, assign) BOOL removeExisting; /** * initialises the maker with a default view * * @param view any MASConstrait are created with this view as the first item * * @return a new MASConstraintMaker */ - (id)initWithView:(MAS_VIEW *)view; /** * Calls install method on any MASConstraints which have been created by this maker * * @return an array of all the installed MASConstraints */ - (NSArray *)install; - (MASConstraint * (^)(dispatch_block_t))group; @end ================================================ FILE: Pods/Masonry/Masonry/MASConstraintMaker.m ================================================ // // MASConstraintBuilder.m // Masonry // // Created by Jonas Budelmann on 20/07/13. // Copyright (c) 2013 cloudling. All rights reserved. // #import "MASConstraintMaker.h" #import "MASViewConstraint.h" #import "MASCompositeConstraint.h" #import "MASConstraint+Private.h" #import "MASViewAttribute.h" #import "View+MASAdditions.h" @interface MASConstraintMaker () @property (nonatomic, weak) MAS_VIEW *view; @property (nonatomic, strong) NSMutableArray *constraints; @end @implementation MASConstraintMaker - (id)initWithView:(MAS_VIEW *)view { self = [super init]; if (!self) return nil; self.view = view; self.constraints = NSMutableArray.new; return self; } - (NSArray *)install { if (self.removeExisting) { NSArray *installedConstraints = [MASViewConstraint installedConstraintsForView:self.view]; for (MASConstraint *constraint in installedConstraints) { [constraint uninstall]; } } NSArray *constraints = self.constraints.copy; for (MASConstraint *constraint in constraints) { constraint.updateExisting = self.updateExisting; [constraint install]; } [self.constraints removeAllObjects]; return constraints; } #pragma mark - MASConstraintDelegate - (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint { NSUInteger index = [self.constraints indexOfObject:constraint]; NSAssert(index != NSNotFound, @"Could not find constraint %@", constraint); [self.constraints replaceObjectAtIndex:index withObject:replacementConstraint]; } - (MASConstraint *)constraint:(MASConstraint *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute { MASViewAttribute *viewAttribute = [[MASViewAttribute alloc] initWithView:self.view layoutAttribute:layoutAttribute]; MASViewConstraint *newConstraint = [[MASViewConstraint alloc] initWithFirstViewAttribute:viewAttribute]; if ([constraint isKindOfClass:MASViewConstraint.class]) { //replace with composite constraint NSArray *children = @[constraint, newConstraint]; MASCompositeConstraint *compositeConstraint = [[MASCompositeConstraint alloc] initWithChildren:children]; compositeConstraint.delegate = self; [self constraint:constraint shouldBeReplacedWithConstraint:compositeConstraint]; return compositeConstraint; } if (!constraint) { newConstraint.delegate = self; [self.constraints addObject:newConstraint]; } return newConstraint; } - (MASConstraint *)addConstraintWithAttributes:(MASAttribute)attrs { __unused MASAttribute anyAttribute = (MASAttributeLeft | MASAttributeRight | MASAttributeTop | MASAttributeBottom | MASAttributeLeading | MASAttributeTrailing | MASAttributeWidth | MASAttributeHeight | MASAttributeCenterX | MASAttributeCenterY | MASAttributeBaseline #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) | MASAttributeFirstBaseline | MASAttributeLastBaseline #endif #if TARGET_OS_IPHONE || TARGET_OS_TV | MASAttributeLeftMargin | MASAttributeRightMargin | MASAttributeTopMargin | MASAttributeBottomMargin | MASAttributeLeadingMargin | MASAttributeTrailingMargin | MASAttributeCenterXWithinMargins | MASAttributeCenterYWithinMargins #endif ); NSAssert((attrs & anyAttribute) != 0, @"You didn't pass any attribute to make.attributes(...)"); NSMutableArray *attributes = [NSMutableArray array]; if (attrs & MASAttributeLeft) [attributes addObject:self.view.mas_left]; if (attrs & MASAttributeRight) [attributes addObject:self.view.mas_right]; if (attrs & MASAttributeTop) [attributes addObject:self.view.mas_top]; if (attrs & MASAttributeBottom) [attributes addObject:self.view.mas_bottom]; if (attrs & MASAttributeLeading) [attributes addObject:self.view.mas_leading]; if (attrs & MASAttributeTrailing) [attributes addObject:self.view.mas_trailing]; if (attrs & MASAttributeWidth) [attributes addObject:self.view.mas_width]; if (attrs & MASAttributeHeight) [attributes addObject:self.view.mas_height]; if (attrs & MASAttributeCenterX) [attributes addObject:self.view.mas_centerX]; if (attrs & MASAttributeCenterY) [attributes addObject:self.view.mas_centerY]; if (attrs & MASAttributeBaseline) [attributes addObject:self.view.mas_baseline]; #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) if (attrs & MASAttributeFirstBaseline) [attributes addObject:self.view.mas_firstBaseline]; if (attrs & MASAttributeLastBaseline) [attributes addObject:self.view.mas_lastBaseline]; #endif #if TARGET_OS_IPHONE || TARGET_OS_TV if (attrs & MASAttributeLeftMargin) [attributes addObject:self.view.mas_leftMargin]; if (attrs & MASAttributeRightMargin) [attributes addObject:self.view.mas_rightMargin]; if (attrs & MASAttributeTopMargin) [attributes addObject:self.view.mas_topMargin]; if (attrs & MASAttributeBottomMargin) [attributes addObject:self.view.mas_bottomMargin]; if (attrs & MASAttributeLeadingMargin) [attributes addObject:self.view.mas_leadingMargin]; if (attrs & MASAttributeTrailingMargin) [attributes addObject:self.view.mas_trailingMargin]; if (attrs & MASAttributeCenterXWithinMargins) [attributes addObject:self.view.mas_centerXWithinMargins]; if (attrs & MASAttributeCenterYWithinMargins) [attributes addObject:self.view.mas_centerYWithinMargins]; #endif NSMutableArray *children = [NSMutableArray arrayWithCapacity:attributes.count]; for (MASViewAttribute *a in attributes) { [children addObject:[[MASViewConstraint alloc] initWithFirstViewAttribute:a]]; } MASCompositeConstraint *constraint = [[MASCompositeConstraint alloc] initWithChildren:children]; constraint.delegate = self; [self.constraints addObject:constraint]; return constraint; } #pragma mark - standard Attributes - (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute { return [self constraint:nil addConstraintWithLayoutAttribute:layoutAttribute]; } - (MASConstraint *)left { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeft]; } - (MASConstraint *)top { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTop]; } - (MASConstraint *)right { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRight]; } - (MASConstraint *)bottom { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottom]; } - (MASConstraint *)leading { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeading]; } - (MASConstraint *)trailing { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailing]; } - (MASConstraint *)width { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeWidth]; } - (MASConstraint *)height { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeHeight]; } - (MASConstraint *)centerX { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterX]; } - (MASConstraint *)centerY { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterY]; } - (MASConstraint *)baseline { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBaseline]; } - (MASConstraint *(^)(MASAttribute))attributes { return ^(MASAttribute attrs){ return [self addConstraintWithAttributes:attrs]; }; } #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) - (MASConstraint *)firstBaseline { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeFirstBaseline]; } - (MASConstraint *)lastBaseline { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLastBaseline]; } #endif #if TARGET_OS_IPHONE || TARGET_OS_TV - (MASConstraint *)leftMargin { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin]; } - (MASConstraint *)rightMargin { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRightMargin]; } - (MASConstraint *)topMargin { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTopMargin]; } - (MASConstraint *)bottomMargin { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottomMargin]; } - (MASConstraint *)leadingMargin { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeadingMargin]; } - (MASConstraint *)trailingMargin { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailingMargin]; } - (MASConstraint *)centerXWithinMargins { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterXWithinMargins]; } - (MASConstraint *)centerYWithinMargins { return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterYWithinMargins]; } #endif #pragma mark - composite Attributes - (MASConstraint *)edges { return [self addConstraintWithAttributes:MASAttributeTop | MASAttributeLeft | MASAttributeRight | MASAttributeBottom]; } - (MASConstraint *)size { return [self addConstraintWithAttributes:MASAttributeWidth | MASAttributeHeight]; } - (MASConstraint *)center { return [self addConstraintWithAttributes:MASAttributeCenterX | MASAttributeCenterY]; } #pragma mark - grouping - (MASConstraint *(^)(dispatch_block_t group))group { return ^id(dispatch_block_t group) { NSInteger previousCount = self.constraints.count; group(); NSArray *children = [self.constraints subarrayWithRange:NSMakeRange(previousCount, self.constraints.count - previousCount)]; MASCompositeConstraint *constraint = [[MASCompositeConstraint alloc] initWithChildren:children]; constraint.delegate = self; return constraint; }; } @end ================================================ FILE: Pods/Masonry/Masonry/MASLayoutConstraint.h ================================================ // // MASLayoutConstraint.h // Masonry // // Created by Jonas Budelmann on 3/08/13. // Copyright (c) 2013 Jonas Budelmann. All rights reserved. // #import "MASUtilities.h" /** * When you are debugging or printing the constraints attached to a view this subclass * makes it easier to identify which constraints have been created via Masonry */ @interface MASLayoutConstraint : NSLayoutConstraint /** * a key to associate with this constraint */ @property (nonatomic, strong) id mas_key; @end ================================================ FILE: Pods/Masonry/Masonry/MASLayoutConstraint.m ================================================ // // MASLayoutConstraint.m // Masonry // // Created by Jonas Budelmann on 3/08/13. // Copyright (c) 2013 Jonas Budelmann. All rights reserved. // #import "MASLayoutConstraint.h" @implementation MASLayoutConstraint @end ================================================ FILE: Pods/Masonry/Masonry/MASUtilities.h ================================================ // // MASUtilities.h // Masonry // // Created by Jonas Budelmann on 19/08/13. // Copyright (c) 2013 Jonas Budelmann. All rights reserved. // #import #if TARGET_OS_IPHONE || TARGET_OS_TV #import #define MAS_VIEW UIView #define MAS_VIEW_CONTROLLER UIViewController #define MASEdgeInsets UIEdgeInsets typedef UILayoutPriority MASLayoutPriority; static const MASLayoutPriority MASLayoutPriorityRequired = UILayoutPriorityRequired; static const MASLayoutPriority MASLayoutPriorityDefaultHigh = UILayoutPriorityDefaultHigh; static const MASLayoutPriority MASLayoutPriorityDefaultMedium = 500; static const MASLayoutPriority MASLayoutPriorityDefaultLow = UILayoutPriorityDefaultLow; static const MASLayoutPriority MASLayoutPriorityFittingSizeLevel = UILayoutPriorityFittingSizeLevel; #elif TARGET_OS_MAC #import #define MAS_VIEW NSView #define MASEdgeInsets NSEdgeInsets typedef NSLayoutPriority MASLayoutPriority; static const MASLayoutPriority MASLayoutPriorityRequired = NSLayoutPriorityRequired; static const MASLayoutPriority MASLayoutPriorityDefaultHigh = NSLayoutPriorityDefaultHigh; static const MASLayoutPriority MASLayoutPriorityDragThatCanResizeWindow = NSLayoutPriorityDragThatCanResizeWindow; static const MASLayoutPriority MASLayoutPriorityDefaultMedium = 501; static const MASLayoutPriority MASLayoutPriorityWindowSizeStayPut = NSLayoutPriorityWindowSizeStayPut; static const MASLayoutPriority MASLayoutPriorityDragThatCannotResizeWindow = NSLayoutPriorityDragThatCannotResizeWindow; static const MASLayoutPriority MASLayoutPriorityDefaultLow = NSLayoutPriorityDefaultLow; static const MASLayoutPriority MASLayoutPriorityFittingSizeCompression = NSLayoutPriorityFittingSizeCompression; #endif /** * Allows you to attach keys to objects matching the variable names passed. * * view1.mas_key = @"view1", view2.mas_key = @"view2"; * * is equivalent to: * * MASAttachKeys(view1, view2); */ #define MASAttachKeys(...) \ { \ NSDictionary *keyPairs = NSDictionaryOfVariableBindings(__VA_ARGS__); \ for (id key in keyPairs.allKeys) { \ id obj = keyPairs[key]; \ NSAssert([obj respondsToSelector:@selector(setMas_key:)], \ @"Cannot attach mas_key to %@", obj); \ [obj setMas_key:key]; \ } \ } /** * Used to create object hashes * Based on http://www.mikeash.com/pyblog/friday-qa-2010-06-18-implementing-equality-and-hashing.html */ #define MAS_NSUINT_BIT (CHAR_BIT * sizeof(NSUInteger)) #define MAS_NSUINTROTATE(val, howmuch) ((((NSUInteger)val) << howmuch) | (((NSUInteger)val) >> (MAS_NSUINT_BIT - howmuch))) /** * Given a scalar or struct value, wraps it in NSValue * Based on EXPObjectify: https://github.com/specta/expecta */ static inline id _MASBoxValue(const char *type, ...) { va_list v; va_start(v, type); id obj = nil; if (strcmp(type, @encode(id)) == 0) { id actual = va_arg(v, id); obj = actual; } else if (strcmp(type, @encode(CGPoint)) == 0) { CGPoint actual = (CGPoint)va_arg(v, CGPoint); obj = [NSValue value:&actual withObjCType:type]; } else if (strcmp(type, @encode(CGSize)) == 0) { CGSize actual = (CGSize)va_arg(v, CGSize); obj = [NSValue value:&actual withObjCType:type]; } else if (strcmp(type, @encode(MASEdgeInsets)) == 0) { MASEdgeInsets actual = (MASEdgeInsets)va_arg(v, MASEdgeInsets); obj = [NSValue value:&actual withObjCType:type]; } else if (strcmp(type, @encode(double)) == 0) { double actual = (double)va_arg(v, double); obj = [NSNumber numberWithDouble:actual]; } else if (strcmp(type, @encode(float)) == 0) { float actual = (float)va_arg(v, double); obj = [NSNumber numberWithFloat:actual]; } else if (strcmp(type, @encode(int)) == 0) { int actual = (int)va_arg(v, int); obj = [NSNumber numberWithInt:actual]; } else if (strcmp(type, @encode(long)) == 0) { long actual = (long)va_arg(v, long); obj = [NSNumber numberWithLong:actual]; } else if (strcmp(type, @encode(long long)) == 0) { long long actual = (long long)va_arg(v, long long); obj = [NSNumber numberWithLongLong:actual]; } else if (strcmp(type, @encode(short)) == 0) { short actual = (short)va_arg(v, int); obj = [NSNumber numberWithShort:actual]; } else if (strcmp(type, @encode(char)) == 0) { char actual = (char)va_arg(v, int); obj = [NSNumber numberWithChar:actual]; } else if (strcmp(type, @encode(bool)) == 0) { bool actual = (bool)va_arg(v, int); obj = [NSNumber numberWithBool:actual]; } else if (strcmp(type, @encode(unsigned char)) == 0) { unsigned char actual = (unsigned char)va_arg(v, unsigned int); obj = [NSNumber numberWithUnsignedChar:actual]; } else if (strcmp(type, @encode(unsigned int)) == 0) { unsigned int actual = (unsigned int)va_arg(v, unsigned int); obj = [NSNumber numberWithUnsignedInt:actual]; } else if (strcmp(type, @encode(unsigned long)) == 0) { unsigned long actual = (unsigned long)va_arg(v, unsigned long); obj = [NSNumber numberWithUnsignedLong:actual]; } else if (strcmp(type, @encode(unsigned long long)) == 0) { unsigned long long actual = (unsigned long long)va_arg(v, unsigned long long); obj = [NSNumber numberWithUnsignedLongLong:actual]; } else if (strcmp(type, @encode(unsigned short)) == 0) { unsigned short actual = (unsigned short)va_arg(v, unsigned int); obj = [NSNumber numberWithUnsignedShort:actual]; } va_end(v); return obj; } #define MASBoxValue(value) _MASBoxValue(@encode(__typeof__((value))), (value)) ================================================ FILE: Pods/Masonry/Masonry/MASViewAttribute.h ================================================ // // MASAttribute.h // Masonry // // Created by Jonas Budelmann on 21/07/13. // Copyright (c) 2013 cloudling. All rights reserved. // #import "MASUtilities.h" /** * An immutable tuple which stores the view and the related NSLayoutAttribute. * Describes part of either the left or right hand side of a constraint equation */ @interface MASViewAttribute : NSObject /** * The view which the reciever relates to. Can be nil if item is not a view. */ @property (nonatomic, weak, readonly) MAS_VIEW *view; /** * The item which the reciever relates to. */ @property (nonatomic, weak, readonly) id item; /** * The attribute which the reciever relates to */ @property (nonatomic, assign, readonly) NSLayoutAttribute layoutAttribute; /** * Convenience initializer. */ - (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute; /** * The designated initializer. */ - (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute; /** * Determine whether the layoutAttribute is a size attribute * * @return YES if layoutAttribute is equal to NSLayoutAttributeWidth or NSLayoutAttributeHeight */ - (BOOL)isSizeAttribute; @end ================================================ FILE: Pods/Masonry/Masonry/MASViewAttribute.m ================================================ // // MASAttribute.m // Masonry // // Created by Jonas Budelmann on 21/07/13. // Copyright (c) 2013 cloudling. All rights reserved. // #import "MASViewAttribute.h" @implementation MASViewAttribute - (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute { self = [self initWithView:view item:view layoutAttribute:layoutAttribute]; return self; } - (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute { self = [super init]; if (!self) return nil; _view = view; _item = item; _layoutAttribute = layoutAttribute; return self; } - (BOOL)isSizeAttribute { return self.layoutAttribute == NSLayoutAttributeWidth || self.layoutAttribute == NSLayoutAttributeHeight; } - (BOOL)isEqual:(MASViewAttribute *)viewAttribute { if ([viewAttribute isKindOfClass:self.class]) { return self.view == viewAttribute.view && self.layoutAttribute == viewAttribute.layoutAttribute; } return [super isEqual:viewAttribute]; } - (NSUInteger)hash { return MAS_NSUINTROTATE([self.view hash], MAS_NSUINT_BIT / 2) ^ self.layoutAttribute; } @end ================================================ FILE: Pods/Masonry/Masonry/MASViewConstraint.h ================================================ // // MASConstraint.h // Masonry // // Created by Jonas Budelmann on 20/07/13. // Copyright (c) 2013 cloudling. All rights reserved. // #import "MASViewAttribute.h" #import "MASConstraint.h" #import "MASLayoutConstraint.h" #import "MASUtilities.h" /** * A single constraint. * Contains the attributes neccessary for creating a NSLayoutConstraint and adding it to the appropriate view */ @interface MASViewConstraint : MASConstraint /** * First item/view and first attribute of the NSLayoutConstraint */ @property (nonatomic, strong, readonly) MASViewAttribute *firstViewAttribute; /** * Second item/view and second attribute of the NSLayoutConstraint */ @property (nonatomic, strong, readonly) MASViewAttribute *secondViewAttribute; /** * initialises the MASViewConstraint with the first part of the equation * * @param firstViewAttribute view.mas_left, view.mas_width etc. * * @return a new view constraint */ - (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute; /** * Returns all MASViewConstraints installed with this view as a first item. * * @param view A view to retrieve constraints for. * * @return An array of MASViewConstraints. */ + (NSArray *)installedConstraintsForView:(MAS_VIEW *)view; @end ================================================ FILE: Pods/Masonry/Masonry/MASViewConstraint.m ================================================ // // MASConstraint.m // Masonry // // Created by Jonas Budelmann on 20/07/13. // Copyright (c) 2013 cloudling. All rights reserved. // #import "MASViewConstraint.h" #import "MASConstraint+Private.h" #import "MASCompositeConstraint.h" #import "MASLayoutConstraint.h" #import "View+MASAdditions.h" #import @interface MAS_VIEW (MASConstraints) @property (nonatomic, readonly) NSMutableSet *mas_installedConstraints; @end @implementation MAS_VIEW (MASConstraints) static char kInstalledConstraintsKey; - (NSMutableSet *)mas_installedConstraints { NSMutableSet *constraints = objc_getAssociatedObject(self, &kInstalledConstraintsKey); if (!constraints) { constraints = [NSMutableSet set]; objc_setAssociatedObject(self, &kInstalledConstraintsKey, constraints, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } return constraints; } @end @interface MASViewConstraint () @property (nonatomic, strong, readwrite) MASViewAttribute *secondViewAttribute; @property (nonatomic, weak) MAS_VIEW *installedView; @property (nonatomic, weak) MASLayoutConstraint *layoutConstraint; @property (nonatomic, assign) NSLayoutRelation layoutRelation; @property (nonatomic, assign) MASLayoutPriority layoutPriority; @property (nonatomic, assign) CGFloat layoutMultiplier; @property (nonatomic, assign) CGFloat layoutConstant; @property (nonatomic, assign) BOOL hasLayoutRelation; @property (nonatomic, strong) id mas_key; @property (nonatomic, assign) BOOL useAnimator; @end @implementation MASViewConstraint - (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute { self = [super init]; if (!self) return nil; _firstViewAttribute = firstViewAttribute; self.layoutPriority = MASLayoutPriorityRequired; self.layoutMultiplier = 1; return self; } #pragma mark - NSCoping - (id)copyWithZone:(NSZone __unused *)zone { MASViewConstraint *constraint = [[MASViewConstraint alloc] initWithFirstViewAttribute:self.firstViewAttribute]; constraint.layoutConstant = self.layoutConstant; constraint.layoutRelation = self.layoutRelation; constraint.layoutPriority = self.layoutPriority; constraint.layoutMultiplier = self.layoutMultiplier; constraint.delegate = self.delegate; return constraint; } #pragma mark - Public + (NSArray *)installedConstraintsForView:(MAS_VIEW *)view { return [view.mas_installedConstraints allObjects]; } #pragma mark - Private - (void)setLayoutConstant:(CGFloat)layoutConstant { _layoutConstant = layoutConstant; #if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV) if (self.useAnimator) { [self.layoutConstraint.animator setConstant:layoutConstant]; } else { self.layoutConstraint.constant = layoutConstant; } #else self.layoutConstraint.constant = layoutConstant; #endif } - (void)setLayoutRelation:(NSLayoutRelation)layoutRelation { _layoutRelation = layoutRelation; self.hasLayoutRelation = YES; } - (BOOL)supportsActiveProperty { return [self.layoutConstraint respondsToSelector:@selector(isActive)]; } - (BOOL)isActive { BOOL active = YES; if ([self supportsActiveProperty]) { active = [self.layoutConstraint isActive]; } return active; } - (BOOL)hasBeenInstalled { return (self.layoutConstraint != nil) && [self isActive]; } - (void)setSecondViewAttribute:(id)secondViewAttribute { if ([secondViewAttribute isKindOfClass:NSValue.class]) { [self setLayoutConstantWithValue:secondViewAttribute]; } else if ([secondViewAttribute isKindOfClass:MAS_VIEW.class]) { _secondViewAttribute = [[MASViewAttribute alloc] initWithView:secondViewAttribute layoutAttribute:self.firstViewAttribute.layoutAttribute]; } else if ([secondViewAttribute isKindOfClass:MASViewAttribute.class]) { _secondViewAttribute = secondViewAttribute; } else { NSAssert(NO, @"attempting to add unsupported attribute: %@", secondViewAttribute); } } #pragma mark - NSLayoutConstraint multiplier proxies - (MASConstraint * (^)(CGFloat))multipliedBy { return ^id(CGFloat multiplier) { NSAssert(!self.hasBeenInstalled, @"Cannot modify constraint multiplier after it has been installed"); self.layoutMultiplier = multiplier; return self; }; } - (MASConstraint * (^)(CGFloat))dividedBy { return ^id(CGFloat divider) { NSAssert(!self.hasBeenInstalled, @"Cannot modify constraint multiplier after it has been installed"); self.layoutMultiplier = 1.0/divider; return self; }; } #pragma mark - MASLayoutPriority proxy - (MASConstraint * (^)(MASLayoutPriority))priority { return ^id(MASLayoutPriority priority) { NSAssert(!self.hasBeenInstalled, @"Cannot modify constraint priority after it has been installed"); self.layoutPriority = priority; return self; }; } #pragma mark - NSLayoutRelation proxy - (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation { return ^id(id attribute, NSLayoutRelation relation) { if ([attribute isKindOfClass:NSArray.class]) { NSAssert(!self.hasLayoutRelation, @"Redefinition of constraint relation"); NSMutableArray *children = NSMutableArray.new; for (id attr in attribute) { MASViewConstraint *viewConstraint = [self copy]; viewConstraint.layoutRelation = relation; viewConstraint.secondViewAttribute = attr; [children addObject:viewConstraint]; } MASCompositeConstraint *compositeConstraint = [[MASCompositeConstraint alloc] initWithChildren:children]; compositeConstraint.delegate = self.delegate; [self.delegate constraint:self shouldBeReplacedWithConstraint:compositeConstraint]; return compositeConstraint; } else { NSAssert(!self.hasLayoutRelation || self.layoutRelation == relation && [attribute isKindOfClass:NSValue.class], @"Redefinition of constraint relation"); self.layoutRelation = relation; self.secondViewAttribute = attribute; return self; } }; } #pragma mark - Semantic properties - (MASConstraint *)with { return self; } - (MASConstraint *)and { return self; } #pragma mark - attribute chaining - (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute { NSAssert(!self.hasLayoutRelation, @"Attributes should be chained before defining the constraint relation"); return [self.delegate constraint:self addConstraintWithLayoutAttribute:layoutAttribute]; } #pragma mark - Animator proxy #if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV) - (MASConstraint *)animator { self.useAnimator = YES; return self; } #endif #pragma mark - debug helpers - (MASConstraint * (^)(id))key { return ^id(id key) { self.mas_key = key; return self; }; } #pragma mark - NSLayoutConstraint constant setters - (void)setInsets:(MASEdgeInsets)insets { NSLayoutAttribute layoutAttribute = self.firstViewAttribute.layoutAttribute; switch (layoutAttribute) { case NSLayoutAttributeLeft: case NSLayoutAttributeLeading: self.layoutConstant = insets.left; break; case NSLayoutAttributeTop: self.layoutConstant = insets.top; break; case NSLayoutAttributeBottom: self.layoutConstant = -insets.bottom; break; case NSLayoutAttributeRight: case NSLayoutAttributeTrailing: self.layoutConstant = -insets.right; break; default: break; } } - (void)setOffset:(CGFloat)offset { self.layoutConstant = offset; } - (void)setSizeOffset:(CGSize)sizeOffset { NSLayoutAttribute layoutAttribute = self.firstViewAttribute.layoutAttribute; switch (layoutAttribute) { case NSLayoutAttributeWidth: self.layoutConstant = sizeOffset.width; break; case NSLayoutAttributeHeight: self.layoutConstant = sizeOffset.height; break; default: break; } } - (void)setCenterOffset:(CGPoint)centerOffset { NSLayoutAttribute layoutAttribute = self.firstViewAttribute.layoutAttribute; switch (layoutAttribute) { case NSLayoutAttributeCenterX: self.layoutConstant = centerOffset.x; break; case NSLayoutAttributeCenterY: self.layoutConstant = centerOffset.y; break; default: break; } } #pragma mark - MASConstraint - (void)activate { [self install]; } - (void)deactivate { [self uninstall]; } - (void)install { if (self.hasBeenInstalled) { return; } if ([self supportsActiveProperty] && self.layoutConstraint) { self.layoutConstraint.active = YES; [self.firstViewAttribute.view.mas_installedConstraints addObject:self]; return; } MAS_VIEW *firstLayoutItem = self.firstViewAttribute.item; NSLayoutAttribute firstLayoutAttribute = self.firstViewAttribute.layoutAttribute; MAS_VIEW *secondLayoutItem = self.secondViewAttribute.item; NSLayoutAttribute secondLayoutAttribute = self.secondViewAttribute.layoutAttribute; // alignment attributes must have a secondViewAttribute // therefore we assume that is refering to superview // eg make.left.equalTo(@10) if (!self.firstViewAttribute.isSizeAttribute && !self.secondViewAttribute) { secondLayoutItem = self.firstViewAttribute.view.superview; secondLayoutAttribute = firstLayoutAttribute; } MASLayoutConstraint *layoutConstraint = [MASLayoutConstraint constraintWithItem:firstLayoutItem attribute:firstLayoutAttribute relatedBy:self.layoutRelation toItem:secondLayoutItem attribute:secondLayoutAttribute multiplier:self.layoutMultiplier constant:self.layoutConstant]; layoutConstraint.priority = self.layoutPriority; layoutConstraint.mas_key = self.mas_key; if (self.secondViewAttribute.view) { MAS_VIEW *closestCommonSuperview = [self.firstViewAttribute.view mas_closestCommonSuperview:self.secondViewAttribute.view]; NSAssert(closestCommonSuperview, @"couldn't find a common superview for %@ and %@", self.firstViewAttribute.view, self.secondViewAttribute.view); self.installedView = closestCommonSuperview; } else if (self.firstViewAttribute.isSizeAttribute) { self.installedView = self.firstViewAttribute.view; } else { self.installedView = self.firstViewAttribute.view.superview; } MASLayoutConstraint *existingConstraint = nil; if (self.updateExisting) { existingConstraint = [self layoutConstraintSimilarTo:layoutConstraint]; } if (existingConstraint) { // just update the constant existingConstraint.constant = layoutConstraint.constant; self.layoutConstraint = existingConstraint; } else { [self.installedView addConstraint:layoutConstraint]; self.layoutConstraint = layoutConstraint; [firstLayoutItem.mas_installedConstraints addObject:self]; } } - (MASLayoutConstraint *)layoutConstraintSimilarTo:(MASLayoutConstraint *)layoutConstraint { // check if any constraints are the same apart from the only mutable property constant // go through constraints in reverse as we do not want to match auto-resizing or interface builder constraints // and they are likely to be added first. for (NSLayoutConstraint *existingConstraint in self.installedView.constraints.reverseObjectEnumerator) { if (![existingConstraint isKindOfClass:MASLayoutConstraint.class]) continue; if (existingConstraint.firstItem != layoutConstraint.firstItem) continue; if (existingConstraint.secondItem != layoutConstraint.secondItem) continue; if (existingConstraint.firstAttribute != layoutConstraint.firstAttribute) continue; if (existingConstraint.secondAttribute != layoutConstraint.secondAttribute) continue; if (existingConstraint.relation != layoutConstraint.relation) continue; if (existingConstraint.multiplier != layoutConstraint.multiplier) continue; if (existingConstraint.priority != layoutConstraint.priority) continue; return (id)existingConstraint; } return nil; } - (void)uninstall { if ([self supportsActiveProperty]) { self.layoutConstraint.active = NO; [self.firstViewAttribute.view.mas_installedConstraints removeObject:self]; return; } [self.installedView removeConstraint:self.layoutConstraint]; self.layoutConstraint = nil; self.installedView = nil; [self.firstViewAttribute.view.mas_installedConstraints removeObject:self]; } @end ================================================ FILE: Pods/Masonry/Masonry/Masonry.h ================================================ // // Masonry.h // Masonry // // Created by Jonas Budelmann on 20/07/13. // Copyright (c) 2013 cloudling. All rights reserved. // #import //! Project version number for Masonry. FOUNDATION_EXPORT double MasonryVersionNumber; //! Project version string for Masonry. FOUNDATION_EXPORT const unsigned char MasonryVersionString[]; #import "MASUtilities.h" #import "View+MASAdditions.h" #import "View+MASShorthandAdditions.h" #import "ViewController+MASAdditions.h" #import "NSArray+MASAdditions.h" #import "NSArray+MASShorthandAdditions.h" #import "MASConstraint.h" #import "MASCompositeConstraint.h" #import "MASViewAttribute.h" #import "MASViewConstraint.h" #import "MASConstraintMaker.h" #import "MASLayoutConstraint.h" #import "NSLayoutConstraint+MASDebugAdditions.h" ================================================ FILE: Pods/Masonry/Masonry/NSArray+MASAdditions.h ================================================ // // NSArray+MASAdditions.h // // // Created by Daniel Hammond on 11/26/13. // // #import "MASUtilities.h" #import "MASConstraintMaker.h" #import "MASViewAttribute.h" typedef NS_ENUM(NSUInteger, MASAxisType) { MASAxisTypeHorizontal, MASAxisTypeVertical }; @interface NSArray (MASAdditions) /** * Creates a MASConstraintMaker with each view in the callee. * Any constraints defined are added to the view or the appropriate superview once the block has finished executing on each view * * @param block scope within which you can build up the constraints which you wish to apply to each view. * * @return Array of created MASConstraints */ - (NSArray *)mas_makeConstraints:(void (^)(MASConstraintMaker *make))block; /** * Creates a MASConstraintMaker with each view in the callee. * Any constraints defined are added to each view or the appropriate superview once the block has finished executing on each view. * If an existing constraint exists then it will be updated instead. * * @param block scope within which you can build up the constraints which you wish to apply to each view. * * @return Array of created/updated MASConstraints */ - (NSArray *)mas_updateConstraints:(void (^)(MASConstraintMaker *make))block; /** * Creates a MASConstraintMaker with each view in the callee. * Any constraints defined are added to each view or the appropriate superview once the block has finished executing on each view. * All constraints previously installed for the views will be removed. * * @param block scope within which you can build up the constraints which you wish to apply to each view. * * @return Array of created/updated MASConstraints */ - (NSArray *)mas_remakeConstraints:(void (^)(MASConstraintMaker *make))block; /** * distribute with fixed spacing * * @param axisType which axis to distribute items along * @param fixedSpacing the spacing between each item * @param leadSpacing the spacing before the first item and the container * @param tailSpacing the spacing after the last item and the container */ - (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing; /** * distribute with fixed item size * * @param axisType which axis to distribute items along * @param fixedItemLength the fixed length of each item * @param leadSpacing the spacing before the first item and the container * @param tailSpacing the spacing after the last item and the container */ - (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing; @end ================================================ FILE: Pods/Masonry/Masonry/NSArray+MASAdditions.m ================================================ // // NSArray+MASAdditions.m // // // Created by Daniel Hammond on 11/26/13. // // #import "NSArray+MASAdditions.h" #import "View+MASAdditions.h" @implementation NSArray (MASAdditions) - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block { NSMutableArray *constraints = [NSMutableArray array]; for (MAS_VIEW *view in self) { NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views"); [constraints addObjectsFromArray:[view mas_makeConstraints:block]]; } return constraints; } - (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block { NSMutableArray *constraints = [NSMutableArray array]; for (MAS_VIEW *view in self) { NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views"); [constraints addObjectsFromArray:[view mas_updateConstraints:block]]; } return constraints; } - (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block { NSMutableArray *constraints = [NSMutableArray array]; for (MAS_VIEW *view in self) { NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views"); [constraints addObjectsFromArray:[view mas_remakeConstraints:block]]; } return constraints; } - (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing { if (self.count < 2) { NSAssert(self.count>1,@"views to distribute need to bigger than one"); return; } MAS_VIEW *tempSuperView = [self mas_commonSuperviewOfViews]; if (axisType == MASAxisTypeHorizontal) { MAS_VIEW *prev; for (int i = 0; i < self.count; i++) { MAS_VIEW *v = self[i]; [v mas_makeConstraints:^(MASConstraintMaker *make) { if (prev) { make.width.equalTo(prev); make.left.equalTo(prev.mas_right).offset(fixedSpacing); if (i == self.count - 1) {//last one make.right.equalTo(tempSuperView).offset(-tailSpacing); } } else {//first one make.left.equalTo(tempSuperView).offset(leadSpacing); } }]; prev = v; } } else { MAS_VIEW *prev; for (int i = 0; i < self.count; i++) { MAS_VIEW *v = self[i]; [v mas_makeConstraints:^(MASConstraintMaker *make) { if (prev) { make.height.equalTo(prev); make.top.equalTo(prev.mas_bottom).offset(fixedSpacing); if (i == self.count - 1) {//last one make.bottom.equalTo(tempSuperView).offset(-tailSpacing); } } else {//first one make.top.equalTo(tempSuperView).offset(leadSpacing); } }]; prev = v; } } } - (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing { if (self.count < 2) { NSAssert(self.count>1,@"views to distribute need to bigger than one"); return; } MAS_VIEW *tempSuperView = [self mas_commonSuperviewOfViews]; if (axisType == MASAxisTypeHorizontal) { MAS_VIEW *prev; for (int i = 0; i < self.count; i++) { MAS_VIEW *v = self[i]; [v mas_makeConstraints:^(MASConstraintMaker *make) { make.width.equalTo(@(fixedItemLength)); if (prev) { if (i == self.count - 1) {//last one make.right.equalTo(tempSuperView).offset(-tailSpacing); } else { CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1)); make.right.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset); } } else {//first one make.left.equalTo(tempSuperView).offset(leadSpacing); } }]; prev = v; } } else { MAS_VIEW *prev; for (int i = 0; i < self.count; i++) { MAS_VIEW *v = self[i]; [v mas_makeConstraints:^(MASConstraintMaker *make) { make.height.equalTo(@(fixedItemLength)); if (prev) { if (i == self.count - 1) {//last one make.bottom.equalTo(tempSuperView).offset(-tailSpacing); } else { CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1)); make.bottom.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset); } } else {//first one make.top.equalTo(tempSuperView).offset(leadSpacing); } }]; prev = v; } } } - (MAS_VIEW *)mas_commonSuperviewOfViews { MAS_VIEW *commonSuperview = nil; MAS_VIEW *previousView = nil; for (id object in self) { if ([object isKindOfClass:[MAS_VIEW class]]) { MAS_VIEW *view = (MAS_VIEW *)object; if (previousView) { commonSuperview = [view mas_closestCommonSuperview:commonSuperview]; } else { commonSuperview = view; } previousView = view; } } NSAssert(commonSuperview, @"Can't constrain views that do not share a common superview. Make sure that all the views in this array have been added into the same view hierarchy."); return commonSuperview; } @end ================================================ FILE: Pods/Masonry/Masonry/NSArray+MASShorthandAdditions.h ================================================ // // NSArray+MASShorthandAdditions.h // Masonry // // Created by Jonas Budelmann on 22/07/13. // Copyright (c) 2013 Jonas Budelmann. All rights reserved. // #import "NSArray+MASAdditions.h" #ifdef MAS_SHORTHAND /** * Shorthand array additions without the 'mas_' prefixes, * only enabled if MAS_SHORTHAND is defined */ @interface NSArray (MASShorthandAdditions) - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block; - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block; - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block; @end @implementation NSArray (MASShorthandAdditions) - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block { return [self mas_makeConstraints:block]; } - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block { return [self mas_updateConstraints:block]; } - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block { return [self mas_remakeConstraints:block]; } @end #endif ================================================ FILE: Pods/Masonry/Masonry/NSLayoutConstraint+MASDebugAdditions.h ================================================ // // NSLayoutConstraint+MASDebugAdditions.h // Masonry // // Created by Jonas Budelmann on 3/08/13. // Copyright (c) 2013 Jonas Budelmann. All rights reserved. // #import "MASUtilities.h" /** * makes debug and log output of NSLayoutConstraints more readable */ @interface NSLayoutConstraint (MASDebugAdditions) @end ================================================ FILE: Pods/Masonry/Masonry/NSLayoutConstraint+MASDebugAdditions.m ================================================ // // NSLayoutConstraint+MASDebugAdditions.m // Masonry // // Created by Jonas Budelmann on 3/08/13. // Copyright (c) 2013 Jonas Budelmann. All rights reserved. // #import "NSLayoutConstraint+MASDebugAdditions.h" #import "MASConstraint.h" #import "MASLayoutConstraint.h" @implementation NSLayoutConstraint (MASDebugAdditions) #pragma mark - description maps + (NSDictionary *)layoutRelationDescriptionsByValue { static dispatch_once_t once; static NSDictionary *descriptionMap; dispatch_once(&once, ^{ descriptionMap = @{ @(NSLayoutRelationEqual) : @"==", @(NSLayoutRelationGreaterThanOrEqual) : @">=", @(NSLayoutRelationLessThanOrEqual) : @"<=", }; }); return descriptionMap; } + (NSDictionary *)layoutAttributeDescriptionsByValue { static dispatch_once_t once; static NSDictionary *descriptionMap; dispatch_once(&once, ^{ descriptionMap = @{ @(NSLayoutAttributeTop) : @"top", @(NSLayoutAttributeLeft) : @"left", @(NSLayoutAttributeBottom) : @"bottom", @(NSLayoutAttributeRight) : @"right", @(NSLayoutAttributeLeading) : @"leading", @(NSLayoutAttributeTrailing) : @"trailing", @(NSLayoutAttributeWidth) : @"width", @(NSLayoutAttributeHeight) : @"height", @(NSLayoutAttributeCenterX) : @"centerX", @(NSLayoutAttributeCenterY) : @"centerY", @(NSLayoutAttributeBaseline) : @"baseline", #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) @(NSLayoutAttributeFirstBaseline) : @"firstBaseline", @(NSLayoutAttributeLastBaseline) : @"lastBaseline", #endif #if TARGET_OS_IPHONE || TARGET_OS_TV @(NSLayoutAttributeLeftMargin) : @"leftMargin", @(NSLayoutAttributeRightMargin) : @"rightMargin", @(NSLayoutAttributeTopMargin) : @"topMargin", @(NSLayoutAttributeBottomMargin) : @"bottomMargin", @(NSLayoutAttributeLeadingMargin) : @"leadingMargin", @(NSLayoutAttributeTrailingMargin) : @"trailingMargin", @(NSLayoutAttributeCenterXWithinMargins) : @"centerXWithinMargins", @(NSLayoutAttributeCenterYWithinMargins) : @"centerYWithinMargins", #endif }; }); return descriptionMap; } + (NSDictionary *)layoutPriorityDescriptionsByValue { static dispatch_once_t once; static NSDictionary *descriptionMap; dispatch_once(&once, ^{ #if TARGET_OS_IPHONE || TARGET_OS_TV descriptionMap = @{ @(MASLayoutPriorityDefaultHigh) : @"high", @(MASLayoutPriorityDefaultLow) : @"low", @(MASLayoutPriorityDefaultMedium) : @"medium", @(MASLayoutPriorityRequired) : @"required", @(MASLayoutPriorityFittingSizeLevel) : @"fitting size", }; #elif TARGET_OS_MAC descriptionMap = @{ @(MASLayoutPriorityDefaultHigh) : @"high", @(MASLayoutPriorityDragThatCanResizeWindow) : @"drag can resize window", @(MASLayoutPriorityDefaultMedium) : @"medium", @(MASLayoutPriorityWindowSizeStayPut) : @"window size stay put", @(MASLayoutPriorityDragThatCannotResizeWindow) : @"drag cannot resize window", @(MASLayoutPriorityDefaultLow) : @"low", @(MASLayoutPriorityFittingSizeCompression) : @"fitting size", @(MASLayoutPriorityRequired) : @"required", }; #endif }); return descriptionMap; } #pragma mark - description override + (NSString *)descriptionForObject:(id)obj { if ([obj respondsToSelector:@selector(mas_key)] && [obj mas_key]) { return [NSString stringWithFormat:@"%@:%@", [obj class], [obj mas_key]]; } return [NSString stringWithFormat:@"%@:%p", [obj class], obj]; } - (NSString *)description { NSMutableString *description = [[NSMutableString alloc] initWithString:@"<"]; [description appendString:[self.class descriptionForObject:self]]; [description appendFormat:@" %@", [self.class descriptionForObject:self.firstItem]]; if (self.firstAttribute != NSLayoutAttributeNotAnAttribute) { [description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.firstAttribute)]]; } [description appendFormat:@" %@", self.class.layoutRelationDescriptionsByValue[@(self.relation)]]; if (self.secondItem) { [description appendFormat:@" %@", [self.class descriptionForObject:self.secondItem]]; } if (self.secondAttribute != NSLayoutAttributeNotAnAttribute) { [description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.secondAttribute)]]; } if (self.multiplier != 1) { [description appendFormat:@" * %g", self.multiplier]; } if (self.secondAttribute == NSLayoutAttributeNotAnAttribute) { [description appendFormat:@" %g", self.constant]; } else { if (self.constant) { [description appendFormat:@" %@ %g", (self.constant < 0 ? @"-" : @"+"), ABS(self.constant)]; } } if (self.priority != MASLayoutPriorityRequired) { [description appendFormat:@" ^%@", self.class.layoutPriorityDescriptionsByValue[@(self.priority)] ?: [NSNumber numberWithDouble:self.priority]]; } [description appendString:@">"]; return description; } @end ================================================ FILE: Pods/Masonry/Masonry/View+MASAdditions.h ================================================ // // UIView+MASAdditions.h // Masonry // // Created by Jonas Budelmann on 20/07/13. // Copyright (c) 2013 cloudling. All rights reserved. // #import "MASUtilities.h" #import "MASConstraintMaker.h" #import "MASViewAttribute.h" /** * Provides constraint maker block * and convience methods for creating MASViewAttribute which are view + NSLayoutAttribute pairs */ @interface MAS_VIEW (MASAdditions) /** * following properties return a new MASViewAttribute with current view and appropriate NSLayoutAttribute */ @property (nonatomic, strong, readonly) MASViewAttribute *mas_left; @property (nonatomic, strong, readonly) MASViewAttribute *mas_top; @property (nonatomic, strong, readonly) MASViewAttribute *mas_right; @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottom; @property (nonatomic, strong, readonly) MASViewAttribute *mas_leading; @property (nonatomic, strong, readonly) MASViewAttribute *mas_trailing; @property (nonatomic, strong, readonly) MASViewAttribute *mas_width; @property (nonatomic, strong, readonly) MASViewAttribute *mas_height; @property (nonatomic, strong, readonly) MASViewAttribute *mas_centerX; @property (nonatomic, strong, readonly) MASViewAttribute *mas_centerY; @property (nonatomic, strong, readonly) MASViewAttribute *mas_baseline; @property (nonatomic, strong, readonly) MASViewAttribute *(^mas_attribute)(NSLayoutAttribute attr); #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) @property (nonatomic, strong, readonly) MASViewAttribute *mas_firstBaseline; @property (nonatomic, strong, readonly) MASViewAttribute *mas_lastBaseline; #endif #if TARGET_OS_IPHONE || TARGET_OS_TV @property (nonatomic, strong, readonly) MASViewAttribute *mas_leftMargin; @property (nonatomic, strong, readonly) MASViewAttribute *mas_rightMargin; @property (nonatomic, strong, readonly) MASViewAttribute *mas_topMargin; @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomMargin; @property (nonatomic, strong, readonly) MASViewAttribute *mas_leadingMargin; @property (nonatomic, strong, readonly) MASViewAttribute *mas_trailingMargin; @property (nonatomic, strong, readonly) MASViewAttribute *mas_centerXWithinMargins; @property (nonatomic, strong, readonly) MASViewAttribute *mas_centerYWithinMargins; #endif /** * a key to associate with this view */ @property (nonatomic, strong) id mas_key; /** * Finds the closest common superview between this view and another view * * @param view other view * * @return returns nil if common superview could not be found */ - (instancetype)mas_closestCommonSuperview:(MAS_VIEW *)view; /** * Creates a MASConstraintMaker with the callee view. * Any constraints defined are added to the view or the appropriate superview once the block has finished executing * * @param block scope within which you can build up the constraints which you wish to apply to the view. * * @return Array of created MASConstraints */ - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block; /** * Creates a MASConstraintMaker with the callee view. * Any constraints defined are added to the view or the appropriate superview once the block has finished executing. * If an existing constraint exists then it will be updated instead. * * @param block scope within which you can build up the constraints which you wish to apply to the view. * * @return Array of created/updated MASConstraints */ - (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block; /** * Creates a MASConstraintMaker with the callee view. * Any constraints defined are added to the view or the appropriate superview once the block has finished executing. * All constraints previously installed for the view will be removed. * * @param block scope within which you can build up the constraints which you wish to apply to the view. * * @return Array of created/updated MASConstraints */ - (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block; @end ================================================ FILE: Pods/Masonry/Masonry/View+MASAdditions.m ================================================ // // UIView+MASAdditions.m // Masonry // // Created by Jonas Budelmann on 20/07/13. // Copyright (c) 2013 cloudling. All rights reserved. // #import "View+MASAdditions.h" #import @implementation MAS_VIEW (MASAdditions) - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block { self.translatesAutoresizingMaskIntoConstraints = NO; MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self]; block(constraintMaker); return [constraintMaker install]; } - (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *))block { self.translatesAutoresizingMaskIntoConstraints = NO; MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self]; constraintMaker.updateExisting = YES; block(constraintMaker); return [constraintMaker install]; } - (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block { self.translatesAutoresizingMaskIntoConstraints = NO; MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self]; constraintMaker.removeExisting = YES; block(constraintMaker); return [constraintMaker install]; } #pragma mark - NSLayoutAttribute properties - (MASViewAttribute *)mas_left { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeft]; } - (MASViewAttribute *)mas_top { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeTop]; } - (MASViewAttribute *)mas_right { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeRight]; } - (MASViewAttribute *)mas_bottom { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeBottom]; } - (MASViewAttribute *)mas_leading { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeading]; } - (MASViewAttribute *)mas_trailing { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeTrailing]; } - (MASViewAttribute *)mas_width { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeWidth]; } - (MASViewAttribute *)mas_height { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeHeight]; } - (MASViewAttribute *)mas_centerX { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeCenterX]; } - (MASViewAttribute *)mas_centerY { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeCenterY]; } - (MASViewAttribute *)mas_baseline { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeBaseline]; } - (MASViewAttribute *(^)(NSLayoutAttribute))mas_attribute { return ^(NSLayoutAttribute attr) { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:attr]; }; } #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) - (MASViewAttribute *)mas_firstBaseline { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeFirstBaseline]; } - (MASViewAttribute *)mas_lastBaseline { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLastBaseline]; } #endif #if TARGET_OS_IPHONE || TARGET_OS_TV - (MASViewAttribute *)mas_leftMargin { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeftMargin]; } - (MASViewAttribute *)mas_rightMargin { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeRightMargin]; } - (MASViewAttribute *)mas_topMargin { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeTopMargin]; } - (MASViewAttribute *)mas_bottomMargin { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeBottomMargin]; } - (MASViewAttribute *)mas_leadingMargin { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeadingMargin]; } - (MASViewAttribute *)mas_trailingMargin { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeTrailingMargin]; } - (MASViewAttribute *)mas_centerXWithinMargins { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeCenterXWithinMargins]; } - (MASViewAttribute *)mas_centerYWithinMargins { return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeCenterYWithinMargins]; } #endif #pragma mark - associated properties - (id)mas_key { return objc_getAssociatedObject(self, @selector(mas_key)); } - (void)setMas_key:(id)key { objc_setAssociatedObject(self, @selector(mas_key), key, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } #pragma mark - heirachy - (instancetype)mas_closestCommonSuperview:(MAS_VIEW *)view { MAS_VIEW *closestCommonSuperview = nil; MAS_VIEW *secondViewSuperview = view; while (!closestCommonSuperview && secondViewSuperview) { MAS_VIEW *firstViewSuperview = self; while (!closestCommonSuperview && firstViewSuperview) { if (secondViewSuperview == firstViewSuperview) { closestCommonSuperview = secondViewSuperview; } firstViewSuperview = firstViewSuperview.superview; } secondViewSuperview = secondViewSuperview.superview; } return closestCommonSuperview; } @end ================================================ FILE: Pods/Masonry/Masonry/View+MASShorthandAdditions.h ================================================ // // UIView+MASShorthandAdditions.h // Masonry // // Created by Jonas Budelmann on 22/07/13. // Copyright (c) 2013 Jonas Budelmann. All rights reserved. // #import "View+MASAdditions.h" #ifdef MAS_SHORTHAND /** * Shorthand view additions without the 'mas_' prefixes, * only enabled if MAS_SHORTHAND is defined */ @interface MAS_VIEW (MASShorthandAdditions) @property (nonatomic, strong, readonly) MASViewAttribute *left; @property (nonatomic, strong, readonly) MASViewAttribute *top; @property (nonatomic, strong, readonly) MASViewAttribute *right; @property (nonatomic, strong, readonly) MASViewAttribute *bottom; @property (nonatomic, strong, readonly) MASViewAttribute *leading; @property (nonatomic, strong, readonly) MASViewAttribute *trailing; @property (nonatomic, strong, readonly) MASViewAttribute *width; @property (nonatomic, strong, readonly) MASViewAttribute *height; @property (nonatomic, strong, readonly) MASViewAttribute *centerX; @property (nonatomic, strong, readonly) MASViewAttribute *centerY; @property (nonatomic, strong, readonly) MASViewAttribute *baseline; @property (nonatomic, strong, readonly) MASViewAttribute *(^attribute)(NSLayoutAttribute attr); #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) @property (nonatomic, strong, readonly) MASViewAttribute *firstBaseline; @property (nonatomic, strong, readonly) MASViewAttribute *lastBaseline; #endif #if TARGET_OS_IPHONE || TARGET_OS_TV @property (nonatomic, strong, readonly) MASViewAttribute *leftMargin; @property (nonatomic, strong, readonly) MASViewAttribute *rightMargin; @property (nonatomic, strong, readonly) MASViewAttribute *topMargin; @property (nonatomic, strong, readonly) MASViewAttribute *bottomMargin; @property (nonatomic, strong, readonly) MASViewAttribute *leadingMargin; @property (nonatomic, strong, readonly) MASViewAttribute *trailingMargin; @property (nonatomic, strong, readonly) MASViewAttribute *centerXWithinMargins; @property (nonatomic, strong, readonly) MASViewAttribute *centerYWithinMargins; #endif - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block; - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block; - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block; @end #define MAS_ATTR_FORWARD(attr) \ - (MASViewAttribute *)attr { \ return [self mas_##attr]; \ } @implementation MAS_VIEW (MASShorthandAdditions) MAS_ATTR_FORWARD(top); MAS_ATTR_FORWARD(left); MAS_ATTR_FORWARD(bottom); MAS_ATTR_FORWARD(right); MAS_ATTR_FORWARD(leading); MAS_ATTR_FORWARD(trailing); MAS_ATTR_FORWARD(width); MAS_ATTR_FORWARD(height); MAS_ATTR_FORWARD(centerX); MAS_ATTR_FORWARD(centerY); MAS_ATTR_FORWARD(baseline); #if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) MAS_ATTR_FORWARD(firstBaseline); MAS_ATTR_FORWARD(lastBaseline); #endif #if TARGET_OS_IPHONE || TARGET_OS_TV MAS_ATTR_FORWARD(leftMargin); MAS_ATTR_FORWARD(rightMargin); MAS_ATTR_FORWARD(topMargin); MAS_ATTR_FORWARD(bottomMargin); MAS_ATTR_FORWARD(leadingMargin); MAS_ATTR_FORWARD(trailingMargin); MAS_ATTR_FORWARD(centerXWithinMargins); MAS_ATTR_FORWARD(centerYWithinMargins); #endif - (MASViewAttribute *(^)(NSLayoutAttribute))attribute { return [self mas_attribute]; } - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block { return [self mas_makeConstraints:block]; } - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block { return [self mas_updateConstraints:block]; } - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block { return [self mas_remakeConstraints:block]; } @end #endif ================================================ FILE: Pods/Masonry/Masonry/ViewController+MASAdditions.h ================================================ // // UIViewController+MASAdditions.h // Masonry // // Created by Craig Siemens on 2015-06-23. // // #import "MASUtilities.h" #import "MASConstraintMaker.h" #import "MASViewAttribute.h" #ifdef MAS_VIEW_CONTROLLER @interface MAS_VIEW_CONTROLLER (MASAdditions) /** * following properties return a new MASViewAttribute with appropriate UILayoutGuide and NSLayoutAttribute */ @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuide; @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuide; @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideTop; @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideBottom; @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideTop; @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideBottom; @end #endif ================================================ FILE: Pods/Masonry/Masonry/ViewController+MASAdditions.m ================================================ // // UIViewController+MASAdditions.m // Masonry // // Created by Craig Siemens on 2015-06-23. // // #import "ViewController+MASAdditions.h" #ifdef MAS_VIEW_CONTROLLER @implementation MAS_VIEW_CONTROLLER (MASAdditions) - (MASViewAttribute *)mas_topLayoutGuide { return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; } - (MASViewAttribute *)mas_topLayoutGuideTop { return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeTop]; } - (MASViewAttribute *)mas_topLayoutGuideBottom { return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; } - (MASViewAttribute *)mas_bottomLayoutGuide { return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop]; } - (MASViewAttribute *)mas_bottomLayoutGuideTop { return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop]; } - (MASViewAttribute *)mas_bottomLayoutGuideBottom { return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; } @end #endif ================================================ FILE: Pods/Masonry/README.md ================================================ #Masonry [![Build Status](https://travis-ci.org/SnapKit/Masonry.svg?branch=master)](https://travis-ci.org/SnapKit/Masonry) [![Coverage Status](https://img.shields.io/coveralls/SnapKit/Masonry.svg?style=flat-square)](https://coveralls.io/r/SnapKit/Masonry) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) ![Pod Version](https://img.shields.io/cocoapods/v/Masonry.svg?style=flat) **Masonry is still actively maintained, we are committed to fixing bugs and merging good quality PRs from the wider community. However if you're using Swift in your project, we recommend using [SnapKit](https://github.com/SnapKit/SnapKit) as it provides better type safety with a simpler API.** Masonry is a light-weight layout framework which wraps AutoLayout with a nicer syntax. Masonry has its own layout DSL which provides a chainable way of describing your NSLayoutConstraints which results in layout code that is more concise and readable. Masonry supports iOS and Mac OS X. For examples take a look at the **Masonry iOS Examples** project in the Masonry workspace. You will need to run `pod install` after downloading. ## What's wrong with NSLayoutConstraints? Under the hood Auto Layout is a powerful and flexible way of organising and laying out your views. However creating constraints from code is verbose and not very descriptive. Imagine a simple example in which you want to have a view fill its superview but inset by 10 pixels on every side ```obj-c UIView *superview = self.view; UIView *view1 = [[UIView alloc] init]; view1.translatesAutoresizingMaskIntoConstraints = NO; view1.backgroundColor = [UIColor greenColor]; [superview addSubview:view1]; UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10); [superview addConstraints:@[ //view1 constraints [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeTop multiplier:1.0 constant:padding.top], [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeLeft multiplier:1.0 constant:padding.left], [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-padding.bottom], [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeRight multiplier:1 constant:-padding.right], ]]; ``` Even with such a simple example the code needed is quite verbose and quickly becomes unreadable when you have more than 2 or 3 views. Another option is to use Visual Format Language (VFL), which is a bit less long winded. However the ASCII type syntax has its own pitfalls and its also a bit harder to animate as `NSLayoutConstraint constraintsWithVisualFormat:` returns an array. ## Prepare to meet your Maker! Heres the same constraints created using MASConstraintMaker ```obj-c UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10); [view1 mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(superview.mas_top).with.offset(padding.top); //with is an optional semantic filler make.left.equalTo(superview.mas_left).with.offset(padding.left); make.bottom.equalTo(superview.mas_bottom).with.offset(-padding.bottom); make.right.equalTo(superview.mas_right).with.offset(-padding.right); }]; ``` Or even shorter ```obj-c [view1 mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(superview).with.insets(padding); }]; ``` Also note in the first example we had to add the constraints to the superview `[superview addConstraints:...`. Masonry however will automagically add constraints to the appropriate view. Masonry will also call `view1.translatesAutoresizingMaskIntoConstraints = NO;` for you. ## Not all things are created equal > `.equalTo` equivalent to **NSLayoutRelationEqual** > `.lessThanOrEqualTo` equivalent to **NSLayoutRelationLessThanOrEqual** > `.greaterThanOrEqualTo` equivalent to **NSLayoutRelationGreaterThanOrEqual** These three equality constraints accept one argument which can be any of the following: #### 1. MASViewAttribute ```obj-c make.centerX.lessThanOrEqualTo(view2.mas_left); ``` MASViewAttribute | NSLayoutAttribute ------------------------- | -------------------------- view.mas_left | NSLayoutAttributeLeft view.mas_right | NSLayoutAttributeRight view.mas_top | NSLayoutAttributeTop view.mas_bottom | NSLayoutAttributeBottom view.mas_leading | NSLayoutAttributeLeading view.mas_trailing | NSLayoutAttributeTrailing view.mas_width | NSLayoutAttributeWidth view.mas_height | NSLayoutAttributeHeight view.mas_centerX | NSLayoutAttributeCenterX view.mas_centerY | NSLayoutAttributeCenterY view.mas_baseline | NSLayoutAttributeBaseline #### 2. UIView/NSView if you want view.left to be greater than or equal to label.left : ```obj-c //these two constraints are exactly the same make.left.greaterThanOrEqualTo(label); make.left.greaterThanOrEqualTo(label.mas_left); ``` #### 3. NSNumber Auto Layout allows width and height to be set to constant values. if you want to set view to have a minimum and maximum width you could pass a number to the equality blocks: ```obj-c //width >= 200 && width <= 400 make.width.greaterThanOrEqualTo(@200); make.width.lessThanOrEqualTo(@400) ``` However Auto Layout does not allow alignment attributes such as left, right, centerY etc to be set to constant values. So if you pass a NSNumber for these attributes Masonry will turn these into constraints relative to the view’s superview ie: ```obj-c //creates view.left = view.superview.left + 10 make.left.lessThanOrEqualTo(@10) ``` Instead of using NSNumber, you can use primitives and structs to build your constraints, like so: ```obj-c make.top.mas_equalTo(42); make.height.mas_equalTo(20); make.size.mas_equalTo(CGSizeMake(50, 100)); make.edges.mas_equalTo(UIEdgeInsetsMake(10, 0, 10, 0)); make.left.mas_equalTo(view).mas_offset(UIEdgeInsetsMake(10, 0, 10, 0)); ``` By default, macros which support [autoboxing](https://en.wikipedia.org/wiki/Autoboxing#Autoboxing) are prefixed with `mas_`. Unprefixed versions are available by defining `MAS_SHORTHAND_GLOBALS` before importing Masonry. #### 4. NSArray An array of a mixture of any of the previous types ```obj-c make.height.equalTo(@[view1.mas_height, view2.mas_height]); make.height.equalTo(@[view1, view2]); make.left.equalTo(@[view1, @100, view3.right]); ```` ## Learn to prioritize > `.priority` allows you to specify an exact priority > `.priorityHigh` equivalent to **UILayoutPriorityDefaultHigh** > `.priorityMedium` is half way between high and low > `.priorityLow` equivalent to **UILayoutPriorityDefaultLow** Priorities are can be tacked on to the end of a constraint chain like so: ```obj-c make.left.greaterThanOrEqualTo(label.mas_left).with.priorityLow(); make.top.equalTo(label.mas_top).with.priority(600); ``` ## Composition, composition, composition Masonry also gives you a few convenience methods which create multiple constraints at the same time. These are called MASCompositeConstraints #### edges ```obj-c // make top, left, bottom, right equal view2 make.edges.equalTo(view2); // make top = superview.top + 5, left = superview.left + 10, // bottom = superview.bottom - 15, right = superview.right - 20 make.edges.equalTo(superview).insets(UIEdgeInsetsMake(5, 10, 15, 20)) ``` #### size ```obj-c // make width and height greater than or equal to titleLabel make.size.greaterThanOrEqualTo(titleLabel) // make width = superview.width + 100, height = superview.height - 50 make.size.equalTo(superview).sizeOffset(CGSizeMake(100, -50)) ``` #### center ```obj-c // make centerX and centerY = button1 make.center.equalTo(button1) // make centerX = superview.centerX - 5, centerY = superview.centerY + 10 make.center.equalTo(superview).centerOffset(CGPointMake(-5, 10)) ``` You can chain view attributes for increased readability: ```obj-c // All edges but the top should equal those of the superview make.left.right.and.bottom.equalTo(superview); make.top.equalTo(otherView); ``` ## Hold on for dear life Sometimes you need modify existing constraints in order to animate or remove/replace constraints. In Masonry there are a few different approaches to updating constraints. #### 1. References You can hold on to a reference of a particular constraint by assigning the result of a constraint make expression to a local variable or a class property. You could also reference multiple constraints by storing them away in an array. ```obj-c // in public/private interface @property (nonatomic, strong) MASConstraint *topConstraint; ... // when making constraints [view1 mas_makeConstraints:^(MASConstraintMaker *make) { self.topConstraint = make.top.equalTo(superview.mas_top).with.offset(padding.top); make.left.equalTo(superview.mas_left).with.offset(padding.left); }]; ... // then later you can call [self.topConstraint uninstall]; ``` #### 2. mas_updateConstraints Alternatively if you are only updating the constant value of the constraint you can use the convience method `mas_updateConstraints` instead of `mas_makeConstraints` ```obj-c // this is Apple's recommended place for adding/updating constraints // this method can get called multiple times in response to setNeedsUpdateConstraints // which can be called by UIKit internally or in your code if you need to trigger an update to your constraints - (void)updateConstraints { [self.growingButton mas_updateConstraints:^(MASConstraintMaker *make) { make.center.equalTo(self); make.width.equalTo(@(self.buttonSize.width)).priorityLow(); make.height.equalTo(@(self.buttonSize.height)).priorityLow(); make.width.lessThanOrEqualTo(self); make.height.lessThanOrEqualTo(self); }]; //according to apple super should be called at end of method [super updateConstraints]; } ``` ### 3. mas_remakeConstraints `mas_updateConstraints` is useful for updating a set of constraints, but doing anything beyond updating constant values can get exhausting. That's where `mas_remakeConstraints` comes in. `mas_remakeConstraints` is similar to `mas_updateConstraints`, but instead of updating constant values, it will remove all of its constraints before installing them again. This lets you provide different constraints without having to keep around references to ones which you want to remove. ```obj-c - (void)changeButtonPosition { [self.button mas_remakeConstraints:^(MASConstraintMaker *make) { make.size.equalTo(self.buttonSize); if (topLeft) { make.top.and.left.offset(10); } else { make.bottom.and.right.offset(-10); } }]; } ``` You can find more detailed examples of all three approaches in the **Masonry iOS Examples** project. ## When the ^&*!@ hits the fan! Laying out your views doesn't always goto plan. So when things literally go pear shaped, you don't want to be looking at console output like this: ```obj-c Unable to simultaneously satisfy constraints.....blah blah blah.... ( "=5000)]>", "", "", "" ) Will attempt to recover by breaking constraint =5000)]> ``` Masonry adds a category to NSLayoutConstraint which overrides the default implementation of `- (NSString *)description`. Now you can give meaningful names to views and constraints, and also easily pick out the constraints created by Masonry. which means your console output can now look like this: ```obj-c Unable to simultaneously satisfy constraints......blah blah blah.... ( "", "= 5000>", "", "" ) Will attempt to recover by breaking constraint = 5000> ``` For an example of how to set this up take a look at the **Masonry iOS Examples** project in the Masonry workspace. ## Where should I create my constraints? ```objc @implementation DIYCustomView - (id)init { self = [super init]; if (!self) return nil; // --- Create your views here --- self.button = [[UIButton alloc] init]; return self; } // tell UIKit that you are using AutoLayout + (BOOL)requiresConstraintBasedLayout { return YES; } // this is Apple's recommended place for adding/updating constraints - (void)updateConstraints { // --- remake/update constraints here [self.button remakeConstraints:^(MASConstraintMaker *make) { make.width.equalTo(@(self.buttonSize.width)); make.height.equalTo(@(self.buttonSize.height)); }]; //according to apple super should be called at end of method [super updateConstraints]; } - (void)didTapButton:(UIButton *)button { // --- Do your changes ie change variables that affect your layout etc --- self.buttonSize = CGSize(200, 200); // tell constraints they need updating [self setNeedsUpdateConstraints]; } @end ``` ## Installation Use the [orsome](http://www.youtube.com/watch?v=YaIZF8uUTtk) [CocoaPods](http://github.com/CocoaPods/CocoaPods). In your Podfile >`pod 'Masonry'` If you want to use masonry without all those pesky 'mas_' prefixes. Add #define MAS_SHORTHAND to your prefix.pch before importing Masonry >`#define MAS_SHORTHAND` Get busy Masoning >`#import "Masonry.h"` ## Code Snippets Copy the included code snippets to ``~/Library/Developer/Xcode/UserData/CodeSnippets`` to write your masonry blocks at lightning speed! `mas_make` -> `[ mas_makeConstraints:^(MASConstraintMaker *make){}];` `mas_update` -> `[ mas_updateConstraints:^(MASConstraintMaker *make){}];` `mas_remake` -> `[ mas_remakeConstraints:^(MASConstraintMaker *make){}];` ## Features * Not limited to subset of Auto Layout. Anything NSLayoutConstraint can do, Masonry can do too! * Great debug support, give your views and constraints meaningful names. * Constraints read like sentences. * No crazy macro magic. Masonry won't pollute the global namespace with macros. * Not string or dictionary based and hence you get compile time checking. ## TODO * Eye candy * Mac example project * More tests and examples ================================================ FILE: Pods/Pods.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 01E09711F001C49F92A97060414E262B /* MASCompositeConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 475326F2A929CD1AFFB74850961F32C0 /* MASCompositeConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; 13635B78121B99E5C03C92506A161607 /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 82F28AEAAF722BC62BF5B37D6663BBC2 /* MASViewAttribute.m */; }; 1EC363D6911160B063DB6CC87F595A5B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7EC994CDC2D681BA26389F78A7E4B325 /* UIKit.framework */; }; 1F3BD3BC28432BB5E2F73501E06E4579 /* MASUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1321572A3ED9C894C94A131BE29B81B2 /* MASUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2DBB74B8B5DDB1F621433DD12BF35102 /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = C7C02266037F030E22468AC86802DB57 /* MASViewConstraint.m */; }; 3E8E6916C563B9CB12AA417275FC6EB3 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = C762C4F3A304C10AF7EBEA6AAA8508A0 /* NSLayoutConstraint+MASDebugAdditions.m */; }; 490CA524521F7D444EA58FA915D7E99C /* NSArray+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = B179F4D3D34A3CE25A698B8D9AC9D6C2 /* NSArray+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 49B903D576E09560C52AA92FDCC31A68 /* Masonry.h in Headers */ = {isa = PBXBuildFile; fileRef = EC0384F145CF471A951BA8E9486AD626 /* Masonry.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4CBE1B46550A3FB90FDD1CB9CBA7B7FE /* MASConstraint+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 22E2395DA2EBCF6241A0DA0E1859FF45 /* MASConstraint+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; 566EA65277D377CE9AF9BC125521965B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 616BEB51ECCAD129BDBCB7A956B56CC6 /* Foundation.framework */; }; 61CCEA01CBE8EFFA5515E7A0D8635AAE /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = D5EC6EDDDD3E503C5B2E967D3FEECFEB /* MASCompositeConstraint.m */; }; 6249770A7D163B0F3001D5A76C5FA01C /* MASConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 3162AC8E29FA7F3BF0D8641F7F4D9B60 /* MASConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; 68F98758BA84B8EC3472A8C6FD646D16 /* Masonry-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5A231E76AF7DC6CB887B5B2C522A7A /* Masonry-dummy.m */; }; 727141B72D877E2A3F6129877D95E1F9 /* Pods-MVideo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8543E39204AD0343AC0D949C18AABDA8 /* Pods-MVideo-dummy.m */; }; 7BDDE51AF16FA53A09506EDB91E1C3C2 /* NSArray+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8229525E7067F22D3977D2628DF5F2C3 /* NSArray+MASAdditions.m */; }; 7F5CC4BE49072333D24F44E209DD740A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 616BEB51ECCAD129BDBCB7A956B56CC6 /* Foundation.framework */; }; 86EE1CB5473A4A07081D8DE3A2C45924 /* View+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7E17DB5590A8C4D9625D67E6FBD243 /* View+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 89450A58FD91E5B227171FC75160E4EA /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F937BDEB8DF93A08D20C5355C0FDB5C /* MASConstraint.m */; }; 955BE39896CA35F2A585DC3309E5FDA5 /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 807FFD255E8235D5B42FE078299B5F1B /* MASLayoutConstraint.m */; }; 983CB852CBBFBC04C2A6BA407E34F59B /* View+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A9F610CB90E57B81F8F7DCA2176E0FD /* View+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9934AEA2C891C201D8ED5746FF42FE1B /* NSLayoutConstraint+MASDebugAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = E158FC65C5404E098F16E26F478DA504 /* NSLayoutConstraint+MASDebugAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; A1FA046FDFC42676D17FEC387B10D24A /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FCC2A09AC3DCD0E4A3D268DAABC5135 /* View+MASAdditions.m */; }; A6436E3CFFCBFE591E2D2A68ED90CAC6 /* MASLayoutConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = B48867DE203BCF3BB3DFCAB8FDC7516B /* MASLayoutConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; A83991D7C1373DF66020C2FDFC5D7564 /* MASViewConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 043FB94CF93050E20D8E4C071ACFA5D2 /* MASViewConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; C88F85D3200060BD98FC13EA58121706 /* ViewController+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = FA891F8E85C079B4FB101DDD5BC7A477 /* ViewController+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; D7CE05A743B7ACD50796191FA442814C /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 25CED739CF35B6D0A1D95AE17D712A7F /* ViewController+MASAdditions.m */; }; DF7F88B58B564EDF169EC0C9CF8E5124 /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = F8AB44751192F0AA8DA5F75A06138D15 /* MASConstraintMaker.m */; }; E072DA57403C4BFF9B10467BE05604C5 /* NSArray+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = FBE23E70FF64ACC81816A368E171B903 /* NSArray+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; E1E771349813022263F549BDF33CB4BB /* MASViewAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 915A6FF0E04F5A5C0ACDE0E32BD2F193 /* MASViewAttribute.h */; settings = {ATTRIBUTES = (Public, ); }; }; EC48DE078CA5E55922CCE02354D475CD /* MASConstraintMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 780A86CEB0A0131C88BE12414D500734 /* MASConstraintMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 4B5D75A84AA0B5BBF807E7246BBDBC29 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = 9DC8D9E02903E93BD0B2FEC9D846EA20; remoteInfo = Masonry; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 043FB94CF93050E20D8E4C071ACFA5D2 /* MASViewConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewConstraint.h; path = Masonry/MASViewConstraint.h; sourceTree = ""; }; 071723B611FDBA7E1CCB0F19BCB16331 /* Pods-MVideo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MVideo-acknowledgements.markdown"; sourceTree = ""; }; 1321572A3ED9C894C94A131BE29B81B2 /* MASUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASUtilities.h; path = Masonry/MASUtilities.h; sourceTree = ""; }; 22E2395DA2EBCF6241A0DA0E1859FF45 /* MASConstraint+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MASConstraint+Private.h"; path = "Masonry/MASConstraint+Private.h"; sourceTree = ""; }; 25CED739CF35B6D0A1D95AE17D712A7F /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "ViewController+MASAdditions.m"; path = "Masonry/ViewController+MASAdditions.m"; sourceTree = ""; }; 2FCC2A09AC3DCD0E4A3D268DAABC5135 /* View+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "View+MASAdditions.m"; path = "Masonry/View+MASAdditions.m"; sourceTree = ""; }; 3162AC8E29FA7F3BF0D8641F7F4D9B60 /* MASConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraint.h; path = Masonry/MASConstraint.h; sourceTree = ""; }; 475326F2A929CD1AFFB74850961F32C0 /* MASCompositeConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASCompositeConstraint.h; path = Masonry/MASCompositeConstraint.h; sourceTree = ""; }; 616BEB51ECCAD129BDBCB7A956B56CC6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 6E9967F61C19620C38A5ACBDC9B89AD7 /* Pods-MVideo-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MVideo-resources.sh"; sourceTree = ""; }; 708FC0DAF434F49FF0A233D8BC1F2C3C /* libMasonry.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libMasonry.a; path = libMasonry.a; sourceTree = BUILT_PRODUCTS_DIR; }; 7742F03DD54179DFC5C090B319B1DD49 /* Pods-MVideo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MVideo.release.xcconfig"; sourceTree = ""; }; 780A86CEB0A0131C88BE12414D500734 /* MASConstraintMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraintMaker.h; path = Masonry/MASConstraintMaker.h; sourceTree = ""; }; 7882AB8492CA4F59F730C76CC3BBF57A /* Masonry.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.xcconfig; sourceTree = ""; }; 7B5A231E76AF7DC6CB887B5B2C522A7A /* Masonry-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Masonry-dummy.m"; sourceTree = ""; }; 7EC994CDC2D681BA26389F78A7E4B325 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 807FFD255E8235D5B42FE078299B5F1B /* MASLayoutConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASLayoutConstraint.m; path = Masonry/MASLayoutConstraint.m; sourceTree = ""; }; 8229525E7067F22D3977D2628DF5F2C3 /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+MASAdditions.m"; path = "Masonry/NSArray+MASAdditions.m"; sourceTree = ""; }; 82F28AEAAF722BC62BF5B37D6663BBC2 /* MASViewAttribute.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewAttribute.m; path = Masonry/MASViewAttribute.m; sourceTree = ""; }; 8543E39204AD0343AC0D949C18AABDA8 /* Pods-MVideo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MVideo-dummy.m"; sourceTree = ""; }; 8573AB3C97CD01AC8EABCF5279EB1573 /* Pods-MVideo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MVideo-acknowledgements.plist"; sourceTree = ""; }; 8A9F610CB90E57B81F8F7DCA2176E0FD /* View+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASShorthandAdditions.h"; path = "Masonry/View+MASShorthandAdditions.h"; sourceTree = ""; }; 8E7E17DB5590A8C4D9625D67E6FBD243 /* View+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASAdditions.h"; path = "Masonry/View+MASAdditions.h"; sourceTree = ""; }; 915A6FF0E04F5A5C0ACDE0E32BD2F193 /* MASViewAttribute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewAttribute.h; path = Masonry/MASViewAttribute.h; sourceTree = ""; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 9F937BDEB8DF93A08D20C5355C0FDB5C /* MASConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraint.m; path = Masonry/MASConstraint.m; sourceTree = ""; }; A2F75C96947B2651F82FC18F66C43B49 /* Masonry-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-prefix.pch"; sourceTree = ""; }; B179F4D3D34A3CE25A698B8D9AC9D6C2 /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASAdditions.h"; path = "Masonry/NSArray+MASAdditions.h"; sourceTree = ""; }; B48867DE203BCF3BB3DFCAB8FDC7516B /* MASLayoutConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASLayoutConstraint.h; path = Masonry/MASLayoutConstraint.h; sourceTree = ""; }; B65FDBB1B6CBBF9FE65AC505AD23C32D /* Pods-MVideo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MVideo.debug.xcconfig"; sourceTree = ""; }; C2525882635A48D42F94C77E4A4E3880 /* Pods-MVideo-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MVideo-frameworks.sh"; sourceTree = ""; }; C762C4F3A304C10AF7EBEA6AAA8508A0 /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+MASDebugAdditions.m"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = ""; }; C7C02266037F030E22468AC86802DB57 /* MASViewConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewConstraint.m; path = Masonry/MASViewConstraint.m; sourceTree = ""; }; D5EC6EDDDD3E503C5B2E967D3FEECFEB /* MASCompositeConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASCompositeConstraint.m; path = Masonry/MASCompositeConstraint.m; sourceTree = ""; }; E158FC65C5404E098F16E26F478DA504 /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+MASDebugAdditions.h"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = ""; }; E3525D57BBA6966C06E77452B1F554A4 /* libPods-MVideo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-MVideo.a"; path = "libPods-MVideo.a"; sourceTree = BUILT_PRODUCTS_DIR; }; EC0384F145CF471A951BA8E9486AD626 /* Masonry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Masonry.h; path = Masonry/Masonry.h; sourceTree = ""; }; F8AB44751192F0AA8DA5F75A06138D15 /* MASConstraintMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraintMaker.m; path = Masonry/MASConstraintMaker.m; sourceTree = ""; }; FA891F8E85C079B4FB101DDD5BC7A477 /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "ViewController+MASAdditions.h"; path = "Masonry/ViewController+MASAdditions.h"; sourceTree = ""; }; FBE23E70FF64ACC81816A368E171B903 /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASShorthandAdditions.h"; path = "Masonry/NSArray+MASShorthandAdditions.h"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 6FD8312A1AEB348F49A81C438DB25115 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 566EA65277D377CE9AF9BC125521965B /* Foundation.framework in Frameworks */, 1EC363D6911160B063DB6CC87F595A5B /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; A896C56A65C0BF800331F587342ADED1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 7F5CC4BE49072333D24F44E209DD740A /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 3B9FAC5BAEA75CAB3E20372C4D27D7EE /* Masonry */ = { isa = PBXGroup; children = ( 475326F2A929CD1AFFB74850961F32C0 /* MASCompositeConstraint.h */, D5EC6EDDDD3E503C5B2E967D3FEECFEB /* MASCompositeConstraint.m */, 3162AC8E29FA7F3BF0D8641F7F4D9B60 /* MASConstraint.h */, 9F937BDEB8DF93A08D20C5355C0FDB5C /* MASConstraint.m */, 22E2395DA2EBCF6241A0DA0E1859FF45 /* MASConstraint+Private.h */, 780A86CEB0A0131C88BE12414D500734 /* MASConstraintMaker.h */, F8AB44751192F0AA8DA5F75A06138D15 /* MASConstraintMaker.m */, B48867DE203BCF3BB3DFCAB8FDC7516B /* MASLayoutConstraint.h */, 807FFD255E8235D5B42FE078299B5F1B /* MASLayoutConstraint.m */, EC0384F145CF471A951BA8E9486AD626 /* Masonry.h */, 1321572A3ED9C894C94A131BE29B81B2 /* MASUtilities.h */, 915A6FF0E04F5A5C0ACDE0E32BD2F193 /* MASViewAttribute.h */, 82F28AEAAF722BC62BF5B37D6663BBC2 /* MASViewAttribute.m */, 043FB94CF93050E20D8E4C071ACFA5D2 /* MASViewConstraint.h */, C7C02266037F030E22468AC86802DB57 /* MASViewConstraint.m */, B179F4D3D34A3CE25A698B8D9AC9D6C2 /* NSArray+MASAdditions.h */, 8229525E7067F22D3977D2628DF5F2C3 /* NSArray+MASAdditions.m */, FBE23E70FF64ACC81816A368E171B903 /* NSArray+MASShorthandAdditions.h */, E158FC65C5404E098F16E26F478DA504 /* NSLayoutConstraint+MASDebugAdditions.h */, C762C4F3A304C10AF7EBEA6AAA8508A0 /* NSLayoutConstraint+MASDebugAdditions.m */, 8E7E17DB5590A8C4D9625D67E6FBD243 /* View+MASAdditions.h */, 2FCC2A09AC3DCD0E4A3D268DAABC5135 /* View+MASAdditions.m */, 8A9F610CB90E57B81F8F7DCA2176E0FD /* View+MASShorthandAdditions.h */, FA891F8E85C079B4FB101DDD5BC7A477 /* ViewController+MASAdditions.h */, 25CED739CF35B6D0A1D95AE17D712A7F /* ViewController+MASAdditions.m */, 4854BD850DB1ADEB02DE483F0C44E016 /* Support Files */, ); name = Masonry; path = Masonry; sourceTree = ""; }; 433CD3331B6C3787F473C941B61FC68F /* Frameworks */ = { isa = PBXGroup; children = ( E6EE98446B568159EE277B68FD442AF0 /* iOS */, ); name = Frameworks; sourceTree = ""; }; 4854BD850DB1ADEB02DE483F0C44E016 /* Support Files */ = { isa = PBXGroup; children = ( 7882AB8492CA4F59F730C76CC3BBF57A /* Masonry.xcconfig */, 7B5A231E76AF7DC6CB887B5B2C522A7A /* Masonry-dummy.m */, A2F75C96947B2651F82FC18F66C43B49 /* Masonry-prefix.pch */, ); name = "Support Files"; path = "../Target Support Files/Masonry"; sourceTree = ""; }; 7A89195B9634606438B1B4496542AEFA /* Targets Support Files */ = { isa = PBXGroup; children = ( C64CEB4550507F640C50CA6FF0C69799 /* Pods-MVideo */, ); name = "Targets Support Files"; sourceTree = ""; }; 7DB346D0F39D3F0E887471402A8071AB = { isa = PBXGroup; children = ( 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 433CD3331B6C3787F473C941B61FC68F /* Frameworks */, E9B49E9D4F6BC02AA78DCF86BCED2145 /* Pods */, 88D35D580BC7CABF9CCAD41C231F28BB /* Products */, 7A89195B9634606438B1B4496542AEFA /* Targets Support Files */, ); sourceTree = ""; }; 88D35D580BC7CABF9CCAD41C231F28BB /* Products */ = { isa = PBXGroup; children = ( 708FC0DAF434F49FF0A233D8BC1F2C3C /* libMasonry.a */, E3525D57BBA6966C06E77452B1F554A4 /* libPods-MVideo.a */, ); name = Products; sourceTree = ""; }; C64CEB4550507F640C50CA6FF0C69799 /* Pods-MVideo */ = { isa = PBXGroup; children = ( 071723B611FDBA7E1CCB0F19BCB16331 /* Pods-MVideo-acknowledgements.markdown */, 8573AB3C97CD01AC8EABCF5279EB1573 /* Pods-MVideo-acknowledgements.plist */, 8543E39204AD0343AC0D949C18AABDA8 /* Pods-MVideo-dummy.m */, C2525882635A48D42F94C77E4A4E3880 /* Pods-MVideo-frameworks.sh */, 6E9967F61C19620C38A5ACBDC9B89AD7 /* Pods-MVideo-resources.sh */, B65FDBB1B6CBBF9FE65AC505AD23C32D /* Pods-MVideo.debug.xcconfig */, 7742F03DD54179DFC5C090B319B1DD49 /* Pods-MVideo.release.xcconfig */, ); name = "Pods-MVideo"; path = "Target Support Files/Pods-MVideo"; sourceTree = ""; }; E6EE98446B568159EE277B68FD442AF0 /* iOS */ = { isa = PBXGroup; children = ( 616BEB51ECCAD129BDBCB7A956B56CC6 /* Foundation.framework */, 7EC994CDC2D681BA26389F78A7E4B325 /* UIKit.framework */, ); name = iOS; sourceTree = ""; }; E9B49E9D4F6BC02AA78DCF86BCED2145 /* Pods */ = { isa = PBXGroup; children = ( 3B9FAC5BAEA75CAB3E20372C4D27D7EE /* Masonry */, ); name = Pods; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ BDF73468622762862D2FB76ED4AC0D8E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 01E09711F001C49F92A97060414E262B /* MASCompositeConstraint.h in Headers */, 4CBE1B46550A3FB90FDD1CB9CBA7B7FE /* MASConstraint+Private.h in Headers */, 6249770A7D163B0F3001D5A76C5FA01C /* MASConstraint.h in Headers */, EC48DE078CA5E55922CCE02354D475CD /* MASConstraintMaker.h in Headers */, A6436E3CFFCBFE591E2D2A68ED90CAC6 /* MASLayoutConstraint.h in Headers */, 49B903D576E09560C52AA92FDCC31A68 /* Masonry.h in Headers */, 1F3BD3BC28432BB5E2F73501E06E4579 /* MASUtilities.h in Headers */, E1E771349813022263F549BDF33CB4BB /* MASViewAttribute.h in Headers */, A83991D7C1373DF66020C2FDFC5D7564 /* MASViewConstraint.h in Headers */, 490CA524521F7D444EA58FA915D7E99C /* NSArray+MASAdditions.h in Headers */, E072DA57403C4BFF9B10467BE05604C5 /* NSArray+MASShorthandAdditions.h in Headers */, 9934AEA2C891C201D8ED5746FF42FE1B /* NSLayoutConstraint+MASDebugAdditions.h in Headers */, 86EE1CB5473A4A07081D8DE3A2C45924 /* View+MASAdditions.h in Headers */, 983CB852CBBFBC04C2A6BA407E34F59B /* View+MASShorthandAdditions.h in Headers */, C88F85D3200060BD98FC13EA58121706 /* ViewController+MASAdditions.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 71AA29293B3F798A01FD0F27D8042043 /* Pods-MVideo */ = { isa = PBXNativeTarget; buildConfigurationList = 2255899070F55198FB7AAF3C196BFC44 /* Build configuration list for PBXNativeTarget "Pods-MVideo" */; buildPhases = ( F771147C55FEA29D16486D2FE8770A63 /* Sources */, A896C56A65C0BF800331F587342ADED1 /* Frameworks */, ); buildRules = ( ); dependencies = ( ED1C65F3086B0CBF6D7242D16F89D9B1 /* PBXTargetDependency */, ); name = "Pods-MVideo"; productName = "Pods-MVideo"; productReference = E3525D57BBA6966C06E77452B1F554A4 /* libPods-MVideo.a */; productType = "com.apple.product-type.library.static"; }; 9DC8D9E02903E93BD0B2FEC9D846EA20 /* Masonry */ = { isa = PBXNativeTarget; buildConfigurationList = 34CAE1CB89EDBF2E53735CC5D4E5E69F /* Build configuration list for PBXNativeTarget "Masonry" */; buildPhases = ( C4BE2DC1E815E7367562323223772531 /* Sources */, 6FD8312A1AEB348F49A81C438DB25115 /* Frameworks */, BDF73468622762862D2FB76ED4AC0D8E /* Headers */, ); buildRules = ( ); dependencies = ( ); name = Masonry; productName = Masonry; productReference = 708FC0DAF434F49FF0A233D8BC1F2C3C /* libMasonry.a */; productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0730; LastUpgradeCheck = 0700; }; buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; productRefGroup = 88D35D580BC7CABF9CCAD41C231F28BB /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 9DC8D9E02903E93BD0B2FEC9D846EA20 /* Masonry */, 71AA29293B3F798A01FD0F27D8042043 /* Pods-MVideo */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ C4BE2DC1E815E7367562323223772531 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 61CCEA01CBE8EFFA5515E7A0D8635AAE /* MASCompositeConstraint.m in Sources */, 89450A58FD91E5B227171FC75160E4EA /* MASConstraint.m in Sources */, DF7F88B58B564EDF169EC0C9CF8E5124 /* MASConstraintMaker.m in Sources */, 955BE39896CA35F2A585DC3309E5FDA5 /* MASLayoutConstraint.m in Sources */, 68F98758BA84B8EC3472A8C6FD646D16 /* Masonry-dummy.m in Sources */, 13635B78121B99E5C03C92506A161607 /* MASViewAttribute.m in Sources */, 2DBB74B8B5DDB1F621433DD12BF35102 /* MASViewConstraint.m in Sources */, 7BDDE51AF16FA53A09506EDB91E1C3C2 /* NSArray+MASAdditions.m in Sources */, 3E8E6916C563B9CB12AA417275FC6EB3 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */, A1FA046FDFC42676D17FEC387B10D24A /* View+MASAdditions.m in Sources */, D7CE05A743B7ACD50796191FA442814C /* ViewController+MASAdditions.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; F771147C55FEA29D16486D2FE8770A63 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 727141B72D877E2A3F6129877D95E1F9 /* Pods-MVideo-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ ED1C65F3086B0CBF6D7242D16F89D9B1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Masonry; target = 9DC8D9E02903E93BD0B2FEC9D846EA20 /* Masonry */; targetProxy = 4B5D75A84AA0B5BBF807E7246BBDBC29 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 0D84A70EE23C10046C3F540CC11FE5A8 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = B65FDBB1B6CBBF9FE65AC505AD23C32D /* Pods-MVideo.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; IPHONEOS_DEPLOYMENT_TARGET = 7.0; MACH_O_TYPE = staticlib; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; name = Debug; }; 5A6ACE61C4D128598EA7472C87982601 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7882AB8492CA4F59F730C76CC3BBF57A /* Masonry.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; GCC_PREFIX_HEADER = "Target Support Files/Masonry/Masonry-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 6.0; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; PRODUCT_NAME = "$(TARGET_NAME)"; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; name = Debug; }; 6CA42F62CE0652819ED46936FE31E065 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7882AB8492CA4F59F730C76CC3BBF57A /* Masonry.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; GCC_PREFIX_HEADER = "Target Support Files/Masonry/Masonry-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 6.0; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; PRODUCT_NAME = "$(TARGET_NAME)"; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; name = Release; }; 79B0C2E66EFA9917ED6EDDB8FC6A7684 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_PREPROCESSOR_DEFINITIONS = ( "POD_CONFIGURATION_RELEASE=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 7.0; PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; STRIP_INSTALLED_PRODUCT = NO; SYMROOT = "${SRCROOT}/../build"; VALIDATE_PRODUCT = YES; }; name = Release; }; 8590EB2B74F1C07EED817D0D885C6E28 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7742F03DD54179DFC5C090B319B1DD49 /* Pods-MVideo.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; IPHONEOS_DEPLOYMENT_TARGET = 7.0; MACH_O_TYPE = staticlib; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; }; name = Release; }; CF7953F66E785E8876EB4D370D777D50 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; COPY_PHASE_STRIP = NO; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "POD_CONFIGURATION_DEBUG=1", "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 7.0; ONLY_ACTIVE_ARCH = YES; PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; STRIP_INSTALLED_PRODUCT = NO; SYMROOT = "${SRCROOT}/../build"; }; name = Debug; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 2255899070F55198FB7AAF3C196BFC44 /* Build configuration list for PBXNativeTarget "Pods-MVideo" */ = { isa = XCConfigurationList; buildConfigurations = ( 0D84A70EE23C10046C3F540CC11FE5A8 /* Debug */, 8590EB2B74F1C07EED817D0D885C6E28 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( CF7953F66E785E8876EB4D370D777D50 /* Debug */, 79B0C2E66EFA9917ED6EDDB8FC6A7684 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 34CAE1CB89EDBF2E53735CC5D4E5E69F /* Build configuration list for PBXNativeTarget "Masonry" */ = { isa = XCConfigurationList; buildConfigurations = ( 5A6ACE61C4D128598EA7472C87982601 /* Debug */, 6CA42F62CE0652819ED46936FE31E065 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; } ================================================ FILE: Pods/Target Support Files/Masonry/Masonry-dummy.m ================================================ #import @interface PodsDummy_Masonry : NSObject @end @implementation PodsDummy_Masonry @end ================================================ FILE: Pods/Target Support Files/Masonry/Masonry-prefix.pch ================================================ #ifdef __OBJC__ #import #else #ifndef FOUNDATION_EXPORT #if defined(__cplusplus) #define FOUNDATION_EXPORT extern "C" #else #define FOUNDATION_EXPORT extern #endif #endif #endif ================================================ FILE: Pods/Target Support Files/Masonry/Masonry.xcconfig ================================================ CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Masonry GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Masonry" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Masonry" OTHER_LDFLAGS = -framework "Foundation" -framework "UIKit" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/Masonry PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES ================================================ FILE: Pods/Target Support Files/Pods-MVideo/Pods-MVideo-acknowledgements.markdown ================================================ # Acknowledgements This application makes use of the following third party libraries: ## Masonry Copyright (c) 2011-2012 Masonry Team - https://github.com/Masonry Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Generated by CocoaPods - https://cocoapods.org ================================================ FILE: Pods/Target Support Files/Pods-MVideo/Pods-MVideo-acknowledgements.plist ================================================ PreferenceSpecifiers FooterText This application makes use of the following third party libraries: Title Acknowledgements Type PSGroupSpecifier FooterText Copyright (c) 2011-2012 Masonry Team - https://github.com/Masonry Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. License MIT Title Masonry Type PSGroupSpecifier FooterText Generated by CocoaPods - https://cocoapods.org Title Type PSGroupSpecifier StringsTable Acknowledgements Title Acknowledgements ================================================ FILE: Pods/Target Support Files/Pods-MVideo/Pods-MVideo-dummy.m ================================================ #import @interface PodsDummy_Pods_MVideo : NSObject @end @implementation PodsDummy_Pods_MVideo @end ================================================ FILE: Pods/Target Support Files/Pods-MVideo/Pods-MVideo-frameworks.sh ================================================ #!/bin/sh set -e echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then local source="${BUILT_PRODUCTS_DIR}/$1" elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" elif [ -r "$1" ]; then local source="$1" fi local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" if [ -L "${source}" ]; then echo "Symlinked..." source="$(readlink "${source}")" fi # use filter instead of exclude so missing patterns dont' throw errors echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" local basename basename="$(basename -s .framework "$1")" binary="${destination}/${basename}.framework/${basename}" if ! [ -r "$binary" ]; then binary="${destination}/${basename}" fi # Strip invalid architectures so "fat" simulator / device frameworks work on device if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then strip_invalid_archs "$binary" fi # Resign the code if required by the build settings to avoid unstable apps code_sign_if_enabled "${destination}/$(basename "$1")" # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then local swift_runtime_libs swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) for lib in $swift_runtime_libs; do echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" code_sign_if_enabled "${destination}/${lib}" done fi } # Signs a framework with the provided identity code_sign_if_enabled() { if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" fi echo "$code_sign_cmd" eval "$code_sign_cmd" fi } # Strip invalid architectures strip_invalid_archs() { binary="$1" # Get architectures for current file archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" stripped="" for arch in $archs; do if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 stripped="$stripped $arch" fi done if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi } if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait fi ================================================ FILE: Pods/Target Support Files/Pods-MVideo/Pods-MVideo-resources.sh ================================================ #!/bin/sh set -e mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt > "$RESOURCES_TO_COPY" XCASSET_FILES=() case "${TARGETED_DEVICE_FAMILY}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; 1) TARGET_DEVICE_ARGS="--target-device iphone" ;; 2) TARGET_DEVICE_ARGS="--target-device ipad" ;; 3) TARGET_DEVICE_ARGS="--target-device tv" ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; esac install_resource() { if [[ "$1" = /* ]] ; then RESOURCE_PATH="$1" else RESOURCE_PATH="${PODS_ROOT}/$1" fi if [[ ! -e "$RESOURCE_PATH" ]] ; then cat << EOM error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. EOM exit 1 fi case $RESOURCE_PATH in *.storyboard) echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.xib) echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.framework) echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" ;; *.xcdatamodel) echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" ;; *.xcdatamodeld) echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" ;; *.xcmappingmodel) echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" ;; *.xcassets) ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; *) echo "$RESOURCE_PATH" echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" ;; esac } mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi rm -f "$RESOURCES_TO_COPY" if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) while read line; do if [[ $line != "${PODS_ROOT}*" ]]; then XCASSET_FILES+=("$line") fi done <<<"$OTHER_XCASSETS" printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi ================================================ FILE: Pods/Target Support Files/Pods-MVideo/Pods-MVideo.debug.xcconfig ================================================ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Masonry" LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Masonry" OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Masonry" OTHER_LDFLAGS = $(inherited) -ObjC -l"Masonry" -framework "Foundation" -framework "UIKit" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT}/Pods ================================================ FILE: Pods/Target Support Files/Pods-MVideo/Pods-MVideo.release.xcconfig ================================================ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Masonry" LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Masonry" OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Masonry" OTHER_LDFLAGS = $(inherited) -ObjC -l"Masonry" -framework "Foundation" -framework "UIKit" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT}/Pods ================================================ FILE: README.md ================================================ ## MLive 各类直播列表集合 ---- 1.港澳台直播列表 2.乐视直播接口 3.熊猫直播 4.各大电视台直播 5.电影频道直播频道 6.电视剧频道直播频道 7.体育直播 8.支持筛选搜索 ## MLive-iPhone ----- 代码地址: [https://github.com/iodefog/MVideo](https://github.com/iodefog/MVideo.git) 效果 ---- ![image](https://github.com/iodefog/MVideo/blob/master/SnapShoot/animal.gif) 例如: ```objc 演唱会,http://live.g3proxy.lecloud.com/gslb?stream_id=lb_concert_3000&tag=live&ext=m3u8&sign=live_tv&platid=10&splatid=1009&format=letv&expect=1 综艺,http://live.g3proxy.lecloud.com/gslb?stream_id=lb_ent_720p&tag=live&ext=m3u8&sign=live_tv&platid=10&splatid=1009&format=letv&expect=1 音乐,http://live.g3proxy.lecloud.com/gslb?stream_id=lb_music_1080p&tag=live&ext=m3u8&sign=live_tv&platid=10&splatid=1009&format=letv&expect=1 科教?纪录片,http://live.g3proxy.lecloud.com/gslb?stream_id=lb_jilu_720p&tag=live&ext=m3u8&sign=live_tv&platid=10&splatid=1009&format=letv&expect=1 娱乐,http://live.g3proxy.lecloud.com/gslb?stream_id=lb_yule_720p&tag=live&ext=m3u8&sign=live_tv&platid=10&splatid=1009&format=letv&expect=1 自制剧,http://live.g3proxy.lecloud.com/gslb?stream_id=lb_make_720p&tag=live&ext=m3u8&sign=live_tv&platid=10&splatid=1009&format=letv&expect=1 MV,http://live.g3proxy.lecloud.com/gslb?stream_id=lb_mv_720p&tag=live&ext=m3u8&sign=live_tv&platid=10&splatid=1009&format=letv&expect=1 高清海贼王,http://dlhls.cdn.zhanqi.tv/zqlive/37119_4ibXM.m3u8 蜡笔小新,http://dlhls.cdn.zhanqi.tv/zqlive/36799_8JBTz.m3u8 高清影院,http://dlhls.cdn.zhanqi.tv/zqlive/20910_uUMgC.m3u8 火影忍者,http://dlhls.cdn.zhanqi.tv/zqlive/41832_NfsIa.m3u8 ``` ## MLive-Mac [MLive.dmg](https://iodefog.github.io/dmg/MVideo.dmg) ----- 代码地址: [https://github.com/iodefog/MVideo-Mac](https://github.com/iodefog/MVideo-Mac) ![image](https://github.com/iodefog/MVideo/blob/master/SnapShoot/20170616-180526.png) ================================================ FILE: archive.sh ================================================ log_path="log_path.txt" workspaceName="MVideo.xcworkspace" scheme="MVideo" configurationBuildDir="MVideo/build" codeSignIdentity="iPhone Distribution: BEIJING SOHU NEW MEDIA INFORMATION TECHNOLOGY CO. Ltd." adHocProvisioningProfile="iPhoneVideo Inhouse" appStoreProvisioningProfile="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" configuration="Debug" archivePath="./MVideo.xcarchive" # xcodebuild clean -configuration "$configuration" -alltargets >> $log_path xcodebuild archive -workspace "$workspaceName" -scheme "$scheme" -configuration "$configuration" -archivePath "$archivePath" CONFIGURATION_BUILD_DIR="$configurationBuildDir" # CODE_SIGN_IDENTITY="$codeSignIdentity" PROVISIONING_PROFILE="$provisioningProfile" > $log_path # xcodebuild -workspace "$workspaceName" -scheme "$scheme" -configuration Debug build CODE_SIGN_IDENTITY="$codeSignIdentity" ================================================ FILE: podfile ================================================ platform :ios, '7.0' target "MVideo" do #pod 'NSLogger', '~> 1.7.0' #pod 'FFmpeg', '~> 2.8.3' # pod 'pili-ffmpeg', '~> 3.1.0' #pod 'kxmovie', '~> 0.0.3' pod 'Masonry' end