Updated FFmpeg.

This commit is contained in:
Christopher Snowhill 2018-03-20 20:47:04 -07:00
parent 4c8d6cffbc
commit 948cd89c24
32 changed files with 445 additions and 99 deletions

View File

@ -615,6 +615,7 @@ enum AVCodecID {
AV_CODEC_ID_PAF_AUDIO,
AV_CODEC_ID_ON2AVC,
AV_CODEC_ID_DSS_SP,
AV_CODEC_ID_CODEC2,
AV_CODEC_ID_FFWAVESYNTH = 0x15800,
AV_CODEC_ID_SONIC,
@ -634,6 +635,8 @@ enum AVCodecID {
AV_CODEC_ID_ATRAC3PAL,
AV_CODEC_ID_DOLBY_E,
AV_CODEC_ID_APTX,
AV_CODEC_ID_APTX_HD,
AV_CODEC_ID_SBC,
/* subtitle codecs */
AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs.
@ -767,7 +770,7 @@ typedef struct AVCodecDescriptor {
* 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
#define AV_INPUT_BUFFER_PADDING_SIZE 64
/**
* @ingroup lavc_encoding
@ -1045,6 +1048,20 @@ typedef struct RcOverride{
*/
#define AV_CODEC_CAP_LOSSLESS 0x80000000
/**
* Codec is backed by a hardware implementation. Typically used to
* identify a non-hwaccel hardware decoder. For information about hwaccels, use
* avcodec_get_hw_config() instead.
*/
#define AV_CODEC_CAP_HARDWARE (1 << 18)
/**
* Codec is potentially backed by a hardware implementation, but not
* necessarily. This is used instead of AV_CODEC_CAP_HARDWARE, if the
* implementation provides some sort of internal fallback.
*/
#define AV_CODEC_CAP_HYBRID (1 << 19)
/**
* Pan Scan area.
* This specifies the area which should be displayed.
@ -2903,6 +2920,14 @@ typedef struct AVCodecContext {
#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3
#define FF_PROFILE_HEVC_REXT 4
#define FF_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT 0xc0
#define FF_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT 0xc1
#define FF_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT 0xc2
#define FF_PROFILE_MJPEG_HUFFMAN_LOSSLESS 0xc3
#define FF_PROFILE_MJPEG_JPEG_LS 0xf7
#define FF_PROFILE_SBC_MSBC 1
/**
* level
* - encoding: Set by user.
@ -3240,6 +3265,20 @@ typedef struct AVCodecContext {
* (with the display dimensions being determined by the crop_* fields).
*/
int apply_cropping;
/*
* Video decoding only. Sets the number of extra hardware frames which
* the decoder will allocate for use by the caller. This must be set
* before avcodec_open2() is called.
*
* Some hardware decoders require all frames that they will use for
* output to be defined in advance before decoding starts. For such
* decoders, the hardware frame pool must therefore be of a fixed size.
* The extra frames set here are on top of any number that the decoder
* needs internally in order to operate normally (for example, frames
* used as reference pictures).
*/
int extra_hw_frames;
} AVCodecContext;
#if FF_API_CODEC_GET_SET
@ -3377,6 +3416,18 @@ typedef struct AVCodec {
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}
/**
* Group name of the codec implementation.
* This is a short symbolic name of the wrapper backing this codec. A
* wrapper uses some kind of external implementation for the codec, such
* as an external library, or a codec implementation provided by the OS or
* the hardware.
* If this field is NULL, this is a builtin, libavcodec native codec.
* If non-NULL, this will be the suffix in AVCodec.name in most cases
* (usually AVCodec.name will be of the form "<codec_name>_<wrapper_name>").
*/
const char *wrapper_name;
/*****************************************************************
* No fields below this line are part of the public API. They
* may not be used outside of libavcodec and can be changed and
@ -3413,6 +3464,9 @@ typedef struct AVCodec {
/**
* Initialize codec static data, called from avcodec_register().
*
* This is not intended for time consuming operations as it is
* run for every codec regardless of that codec being used.
*/
void (*init_static_data)(struct AVCodec *codec);
@ -3952,12 +4006,26 @@ typedef struct AVCodecParameters {
int seek_preroll;
} AVCodecParameters;
/**
* Iterate over all registered codecs.
*
* @param opaque a pointer where libavcodec will store the iteration state. Must
* point to NULL to start the iteration.
*
* @return the next registered codec or NULL when the iteration is
* finished
*/
const AVCodec *av_codec_iterate(void **opaque);
#if FF_API_NEXT
/**
* 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.
*/
attribute_deprecated
AVCodec *av_codec_next(const AVCodec *c);
#endif
/**
* Return the LIBAVCODEC_VERSION_INT constant.
@ -3974,6 +4042,7 @@ const char *avcodec_configuration(void);
*/
const char *avcodec_license(void);
#if FF_API_NEXT
/**
* Register the codec codec and initialize libavcodec.
*
@ -3982,6 +4051,7 @@ const char *avcodec_license(void);
*
* @see avcodec_register_all()
*/
attribute_deprecated
void avcodec_register(AVCodec *codec);
/**
@ -3994,7 +4064,9 @@ void avcodec_register(AVCodec *codec);
* @see av_register_codec_parser
* @see av_register_bitstream_filter
*/
attribute_deprecated
void avcodec_register_all(void);
#endif
/**
* Allocate an AVCodecContext and set its fields to default values. The
@ -5094,8 +5166,21 @@ typedef struct AVCodecParser {
struct AVCodecParser *next;
} AVCodecParser;
/**
* Iterate over all registered codec parsers.
*
* @param opaque a pointer where libavcodec will store the iteration state. Must
* point to NULL to start the iteration.
*
* @return the next registered codec parser or NULL when the iteration is
* finished
*/
const AVCodecParser *av_parser_iterate(void **opaque);
attribute_deprecated
AVCodecParser *av_parser_next(const AVCodecParser *c);
attribute_deprecated
void av_register_codec_parser(AVCodecParser *parser);
AVCodecParserContext *av_parser_init(int codec_id);
@ -5671,7 +5756,7 @@ attribute_deprecated
void av_bitstream_filter_close(AVBitStreamFilterContext *bsf);
/**
* @deprecated the old bitstream filtering API (using AVBitStreamFilterContext)
* is deprecated. Use av_bsf_next() from the new bitstream filtering API (using
* is deprecated. Use av_bsf_iterate() from the new bitstream filtering API (using
* AVBSFContext).
*/
attribute_deprecated
@ -5693,7 +5778,11 @@ const AVBitStreamFilter *av_bsf_get_by_name(const char *name);
* @return the next registered bitstream filter or NULL when the iteration is
* finished
*/
const AVBitStreamFilter *av_bsf_iterate(void **opaque);
#if FF_API_NEXT
attribute_deprecated
const AVBitStreamFilter *av_bsf_next(void **opaque);
#endif
/**
* Allocate a context for a given bitstream filter. The caller must fill in the
@ -5904,9 +5993,11 @@ attribute_deprecated
AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel);
#endif
#if FF_API_LOCKMGR
/**
* Lock operation used by lockmgr
*
* @deprecated Deprecated together with av_lockmgr_register().
*/
enum AVLockOp {
AV_LOCK_CREATE, ///< Create a mutex
@ -5937,8 +6028,13 @@ enum AVLockOp {
* 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.
*
* @deprecated This function does nothing, and always returns 0. Be sure to
* build with thread support to get basic thread safety.
*/
attribute_deprecated
int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op));
#endif
/**
* Get the type of the given codec.

View File

@ -28,8 +28,8 @@
#include "libavutil/version.h"
#define LIBAVCODEC_VERSION_MAJOR 58
#define LIBAVCODEC_VERSION_MINOR 6
#define LIBAVCODEC_VERSION_MICRO 102
#define LIBAVCODEC_VERSION_MINOR 14
#define LIBAVCODEC_VERSION_MICRO 100
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \
@ -126,6 +126,12 @@
#ifndef FF_API_USER_VISIBLE_AVHWACCEL
#define FF_API_USER_VISIBLE_AVHWACCEL (LIBAVCODEC_VERSION_MAJOR < 59)
#endif
#ifndef FF_API_LOCKMGR
#define FF_API_LOCKMGR (LIBAVCODEC_VERSION_MAJOR < 59)
#endif
#ifndef FF_API_NEXT
#define FF_API_NEXT (LIBAVCODEC_VERSION_MAJOR < 59)
#endif
#endif /* AVCODEC_VERSION_H */

View File

@ -845,6 +845,7 @@ typedef struct AVStreamInternal AVStreamInternal;
#define AV_DISPOSITION_CAPTIONS 0x10000
#define AV_DISPOSITION_DESCRIPTIONS 0x20000
#define AV_DISPOSITION_METADATA 0x40000
#define AV_DISPOSITION_DEPENDENT 0x80000 ///< dependent audio stream (mix_type=0 in mpegts)
/**
* Options for behavior on timestamp wrap detection.
@ -986,12 +987,17 @@ typedef struct AVStream {
*/
AVRational r_frame_rate;
#if FF_API_LAVF_FFSERVER
/**
* String containing pairs of key and values describing recommended encoder configuration.
* Pairs are separated by ','.
* Keys are separated from values by '='.
*
* @deprecated unused
*/
attribute_deprecated
char *recommended_encoder_configuration;
#endif
/**
* Codec parameters associated with this stream. Allocated and freed by
@ -1014,10 +1020,10 @@ typedef struct AVStream {
*****************************************************************
*/
#define MAX_STD_TIMEBASES (30*12+30+3+6)
/**
* Stream information used internally by avformat_find_stream_info()
*/
#define MAX_STD_TIMEBASES (30*12+30+3+6)
struct {
int64_t last_dts;
int64_t duration_gcd;
@ -1217,11 +1223,13 @@ attribute_deprecated
AVRational av_stream_get_r_frame_rate(const AVStream *s);
attribute_deprecated
void av_stream_set_r_frame_rate(AVStream *s, AVRational r);
#if FF_API_LAVF_FFSERVER
attribute_deprecated
char* av_stream_get_recommended_encoder_configuration(const AVStream *s);
attribute_deprecated
void av_stream_set_recommended_encoder_configuration(AVStream *s, char *configuration);
#endif
#endif
struct AVCodecParserContext *av_stream_get_parser(const AVStream *s);
@ -1268,6 +1276,11 @@ typedef struct AVProgram {
#define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present
(streams are added dynamically) */
#define AVFMTCTX_UNSEEKABLE 0x0002 /**< signal that the stream is definitely
not seekable, and attempts to call the
seek function will fail. For some
network protocols (e.g. HLS), this can
change dynamically at runtime. */
typedef struct AVChapter {
int id; ///< unique ID to identify the chapter
@ -1382,13 +1395,33 @@ typedef struct AVFormatContext {
*/
AVStream **streams;
#if FF_API_FORMAT_FILENAME
/**
* input or output filename
*
* - demuxing: set by avformat_open_input()
* - muxing: may be set by the caller before avformat_write_header()
*
* @deprecated Use url instead.
*/
attribute_deprecated
char filename[1024];
#endif
/**
* input or output URL. Unlike the old filename field, this field has no
* length restriction.
*
* - demuxing: set by avformat_open_input(), initialized to an empty
* string if url parameter was NULL in avformat_open_input().
* - muxing: may be set by the caller before calling avformat_write_header()
* (or avformat_init_output() if that is called first) to a string
* which is freeable by av_free(). Set to an empty string if it
* was NULL in avformat_init_output().
*
* Freed by libavformat in avformat_free_context().
*/
char *url;
/**
* Position of the first frame of the component, in
@ -1449,7 +1482,7 @@ typedef struct AVFormatContext {
#endif
#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
#define AVFMT_FLAG_AUTO_BSF 0x200000 ///< Add bitstream filters as requested by the muxer
/**
* Maximum size of the data read from input for determining
@ -1852,7 +1885,7 @@ typedef struct AVFormatContext {
*/
char *protocol_whitelist;
/*
/**
* A callback for opening new IO streams.
*
* Whenever a muxer or a demuxer needs to open an IO stream (typically from
@ -1979,6 +2012,7 @@ const char *avformat_configuration(void);
*/
const char *avformat_license(void);
#if FF_API_NEXT
/**
* Initialize libavformat and register all the muxers, demuxers and
* protocols. If you do not call this function, then you can select
@ -1987,31 +2021,44 @@ const char *avformat_license(void);
* @see av_register_input_format()
* @see av_register_output_format()
*/
attribute_deprecated
void av_register_all(void);
attribute_deprecated
void av_register_input_format(AVInputFormat *format);
attribute_deprecated
void av_register_output_format(AVOutputFormat *format);
#endif
/**
* Do global initialization of network components. This is optional,
* but recommended, since it avoids the overhead of implicitly
* doing the setup for each session.
* Do global initialization of network libraries. This is optional,
* and not recommended anymore.
*
* Calling this function will become mandatory if using network
* protocols at some major version bump.
* This functions only exists to work around thread-safety issues
* with older GnuTLS or OpenSSL libraries. If libavformat is linked
* to newer versions of those libraries, or if you do not use them,
* calling this function is unnecessary. Otherwise, you need to call
* this function before any other threads using them are started.
*
* This function will be deprecated once support for older GnuTLS and
* OpenSSL libraries is removed, and this function has no purpose
* anymore.
*/
int avformat_network_init(void);
/**
* Undo the initialization done by avformat_network_init.
* Undo the initialization done by avformat_network_init. Call it only
* once for each time you called avformat_network_init.
*/
int avformat_network_deinit(void);
#if FF_API_NEXT
/**
* 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.
*/
attribute_deprecated
AVInputFormat *av_iformat_next(const AVInputFormat *f);
/**
@ -2019,7 +2066,31 @@ AVInputFormat *av_iformat_next(const AVInputFormat *f);
* if f is non-NULL, returns the next registered output format after f
* or NULL if f is the last one.
*/
attribute_deprecated
AVOutputFormat *av_oformat_next(const AVOutputFormat *f);
#endif
/**
* Iterate over all registered muxers.
*
* @param opaque a pointer where libavformat will store the iteration state. Must
* point to NULL to start the iteration.
*
* @return the next registered muxer or NULL when the iteration is
* finished
*/
const AVOutputFormat *av_muxer_iterate(void **opaque);
/**
* Iterate over all registered demuxers.
*
* @param opaque a pointer where libavformat will store the iteration state. Must
* point to NULL to start the iteration.
*
* @return the next registered demuxer or NULL when the iteration is
* finished
*/
const AVInputFormat *av_demuxer_iterate(void **opaque);
/**
* Allocate an AVFormatContext.

View File

@ -32,8 +32,8 @@
// 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 58
#define LIBAVFORMAT_VERSION_MINOR 2
#define LIBAVFORMAT_VERSION_MICRO 103
#define LIBAVFORMAT_VERSION_MINOR 10
#define LIBAVFORMAT_VERSION_MICRO 100
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \
@ -82,6 +82,18 @@
#ifndef FF_API_OLD_AVIO_EOF_0
#define FF_API_OLD_AVIO_EOF_0 (LIBAVFORMAT_VERSION_MAJOR < 59)
#endif
#ifndef FF_API_LAVF_FFSERVER
#define FF_API_LAVF_FFSERVER (LIBAVFORMAT_VERSION_MAJOR < 59)
#endif
#ifndef FF_API_FORMAT_FILENAME
#define FF_API_FORMAT_FILENAME (LIBAVFORMAT_VERSION_MAJOR < 59)
#endif
#ifndef FF_API_OLD_RTSP_OPTIONS
#define FF_API_OLD_RTSP_OPTIONS (LIBAVFORMAT_VERSION_MAJOR < 59)
#endif
#ifndef FF_API_NEXT
#define FF_API_NEXT (LIBAVFORMAT_VERSION_MAJOR < 59)
#endif
#ifndef FF_API_R_FRAME_RATE

View File

@ -67,10 +67,15 @@ const uint8_t* av_aes_ctr_get_iv(struct AVAESCTR *a);
void av_aes_ctr_set_random_iv(struct AVAESCTR *a);
/**
* Forcefully change the iv
* Forcefully change the 8-byte iv
*/
void av_aes_ctr_set_iv(struct AVAESCTR *a, const uint8_t* iv);
/**
* Forcefully change the "full" 16-byte iv, including the counter
*/
void av_aes_ctr_set_full_iv(struct AVAESCTR *a, const uint8_t* iv);
/**
* Increment the top 64 bit of the iv (performed after each frame)
*/

View File

@ -162,7 +162,7 @@ static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, in
*/
static av_always_inline av_const uint8_t av_clip_uint8_c(int a)
{
if (a&(~0xFF)) return (-a)>>31;
if (a&(~0xFF)) return (~a)>>31;
else return a;
}
@ -184,7 +184,7 @@ static av_always_inline av_const int8_t av_clip_int8_c(int a)
*/
static av_always_inline av_const uint16_t av_clip_uint16_c(int a)
{
if (a&(~0xFFFF)) return (-a)>>31;
if (a&(~0xFFFF)) return (~a)>>31;
else return a;
}
@ -264,13 +264,37 @@ static av_always_inline int av_sat_add32_c(int a, int b)
*
* @param a first value
* @param b value doubled and added to a
* @return sum with signed saturation
* @return sum sat(a + sat(2*b)) with signed saturation
*/
static av_always_inline int av_sat_dadd32_c(int a, int b)
{
return av_sat_add32(a, av_sat_add32(b, b));
}
/**
* Subtract two signed 32-bit values with saturation.
*
* @param a one value
* @param b another value
* @return difference with signed saturation
*/
static av_always_inline int av_sat_sub32_c(int a, int b)
{
return av_clipl_int32((int64_t)a - b);
}
/**
* Subtract a doubled value from another value with saturation at both stages.
*
* @param a first value
* @param b value doubled and subtracted from a
* @return difference sat(a - sat(2*b)) with signed saturation
*/
static av_always_inline int av_sat_dsub32_c(int a, int b)
{
return av_sat_sub32(a, av_sat_add32(b, b));
}
/**
* Clip a float value into the amin-amax range.
* @param a value to clip
@ -517,6 +541,12 @@ static av_always_inline av_const int av_parity_c(uint32_t v)
#ifndef av_sat_dadd32
# define av_sat_dadd32 av_sat_dadd32_c
#endif
#ifndef av_sat_sub32
# define av_sat_sub32 av_sat_sub32_c
#endif
#ifndef av_sat_dsub32
# define av_sat_dsub32 av_sat_dsub32_c
#endif
#ifndef av_clipf
# define av_clipf av_clipf_c
#endif

View File

@ -55,6 +55,7 @@
#define AV_CPU_FLAG_FMA3 0x10000 ///< Haswell FMA3 functions
#define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 1
#define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 2
#define AV_CPU_FLAG_AVX512 0x100000 ///< AVX-512 functions: requires OS support even if YMM/ZMM registers aren't used
#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard
#define AV_CPU_FLAG_VSX 0x0002 ///< ISA 2.06

View File

@ -54,6 +54,7 @@ typedef enum {
AV_CRC_32_IEEE_LE, /*< reversed bitorder version of AV_CRC_32_IEEE */
AV_CRC_16_ANSI_LE, /*< reversed bitorder version of AV_CRC_16_ANSI */
AV_CRC_24_IEEE,
AV_CRC_8_EBU,
AV_CRC_MAX, /*< Not part of public API! Do not use outside libavutil. */
}AVCRCId;

View File

@ -1,5 +1,5 @@
/* Automatically generated by version.sh, do not manually edit! */
#ifndef AVUTIL_FFVERSION_H
#define AVUTIL_FFVERSION_H
#define FFMPEG_VERSION "N-89370-g26825d962f"
#define FFMPEG_VERSION "N-90388-g2ddc6b4392"
#endif /* AVUTIL_FFVERSION_H */

View File

@ -141,6 +141,23 @@ enum AVFrameSideDataType {
* metadata key entry "name".
*/
AV_FRAME_DATA_ICC_PROFILE,
#if FF_API_FRAME_QP
/**
* Implementation-specific description of the format of AV_FRAME_QP_TABLE_DATA.
* The contents of this side data are undocumented and internal; use
* av_frame_set_qp_table() and av_frame_get_qp_table() to access this in a
* meaningful way instead.
*/
AV_FRAME_DATA_QP_TABLE_PROPERTIES,
/**
* Raw QP table data. Its format is described by
* AV_FRAME_DATA_QP_TABLE_PROPERTIES. Use av_frame_set_qp_table() and
* av_frame_get_qp_table() to access this instead.
*/
AV_FRAME_DATA_QP_TABLE_DATA,
#endif
};
enum AVActiveFormatDescription {
@ -529,6 +546,7 @@ typedef struct AVFrame {
attribute_deprecated
int qscale_type;
attribute_deprecated
AVBufferRef *qp_table_buf;
#endif
/**
@ -800,6 +818,22 @@ AVFrameSideData *av_frame_new_side_data(AVFrame *frame,
enum AVFrameSideDataType type,
int size);
/**
* Add a new side data to a frame from an existing AVBufferRef
*
* @param frame a frame to which the side data should be added
* @param type the type of the added side data
* @param buf an AVBufferRef to add as side data. The ownership of
* the reference is transferred to the frame.
*
* @return newly added side data on success, NULL on error. On failure
* the frame is unchanged and the AVBufferRef remains owned by
* the caller.
*/
AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame,
enum AVFrameSideDataType type,
AVBufferRef *buf);
/**
* @return a pointer to the side data of a given type on success, NULL if there
* is no side data with such type in this frame.

View File

@ -29,6 +29,8 @@
#include <stdint.h>
#include "version.h"
/**
* @defgroup lavu_hash Hash Functions
* @ingroup lavu_crypto
@ -179,7 +181,11 @@ void av_hash_init(struct AVHashContext *ctx);
* @param[in] src Data to be added to the hash context
* @param[in] len Size of the additional data
*/
#if FF_API_CRYPTO_SIZE_T
void av_hash_update(struct AVHashContext *ctx, const uint8_t *src, int len);
#else
void av_hash_update(struct AVHashContext *ctx, const uint8_t *src, size_t len);
#endif
/**
* Finalize a hash context and compute the actual hash value.

View File

@ -35,6 +35,7 @@ enum AVHWDeviceType {
AV_HWDEVICE_TYPE_D3D11VA,
AV_HWDEVICE_TYPE_DRM,
AV_HWDEVICE_TYPE_OPENCL,
AV_HWDEVICE_TYPE_MEDIACODEC,
};
typedef struct AVHWDeviceInternal AVHWDeviceInternal;

View File

@ -0,0 +1,36 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_HWCONTEXT_MEDIACODEC_H
#define AVUTIL_HWCONTEXT_MEDIACODEC_H
/**
* MediaCodec details.
*
* Allocated as AVHWDeviceContext.hwctx
*/
typedef struct AVMediaCodecDeviceContext {
/**
* android/view/Surface handle, to be filled by the user.
*
* This is the default surface used by decoders on this device.
*/
void *surface;
} AVMediaCodecDeviceContext;
#endif /* AVUTIL_HWCONTEXT_MEDIACODEC_H */

View File

@ -224,7 +224,7 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias;
# define AV_RN(s, p) (((const union unaligned_##s *) (p))->l)
# define AV_WN(s, p, v) ((((union unaligned_##s *) (p))->l) = (v))
#elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_X64)) && AV_HAVE_FAST_UNALIGNED
#elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_X64) || defined(_M_ARM64)) && AV_HAVE_FAST_UNALIGNED
# define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p)))
# define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v))

View File

@ -1,4 +1,4 @@
/**
/*
* Copyright (c) 2016 Neil Birkbeck <neil.birkbeck@gmail.com>
*
* This file is part of FFmpeg.

View File

@ -29,6 +29,8 @@
#include <stdint.h>
#include "version.h"
/**
* @defgroup lavu_murmur3 Murmur3
* @ingroup lavu_hash
@ -97,7 +99,11 @@ void av_murmur3_init(struct AVMurMur3 *c);
* @param[in] src Input data to update hash with
* @param[in] len Number of bytes to read from `src`
*/
#if FF_API_CRYPTO_SIZE_T
void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, int len);
#else
void av_murmur3_update(struct AVMurMur3 *c, const uint8_t *src, size_t len);
#endif
/**
* Finish hashing and output digest value.

View File

@ -229,15 +229,15 @@ enum AVOptionType{
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_UINT64,
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'),
AV_OPT_TYPE_CONST,
AV_OPT_TYPE_IMAGE_SIZE, ///< offset must point to two consecutive integers
AV_OPT_TYPE_PIXEL_FMT,
AV_OPT_TYPE_SAMPLE_FMT,
AV_OPT_TYPE_VIDEO_RATE, ///< offset must point to AVRational
AV_OPT_TYPE_DURATION,
AV_OPT_TYPE_COLOR,
AV_OPT_TYPE_CHANNEL_LAYOUT,
AV_OPT_TYPE_BOOL,
};
/**
@ -287,6 +287,7 @@ typedef struct AVOption {
* This flag only makes sense when AV_OPT_FLAG_EXPORT is also set.
*/
#define AV_OPT_FLAG_READONLY 128
#define AV_OPT_FLAG_BSF_PARAM (1<<8) ///< a generic parameter which can be set by the user for bit stream filtering
#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

View File

@ -66,7 +66,11 @@ int av_ripemd_init(struct AVRIPEMD* context, int bits);
* @param data input data to update hash with
* @param len input data length
*/
#if FF_API_CRYPTO_SIZE_T
void av_ripemd_update(struct AVRIPEMD* context, const uint8_t* data, unsigned int len);
#else
void av_ripemd_update(struct AVRIPEMD* context, const uint8_t* data, size_t len);
#endif
/**
* Finish hashing and output digest value.

View File

@ -79,7 +79,7 @@
*/
#define LIBAVUTIL_VERSION_MAJOR 56
#define LIBAVUTIL_VERSION_MINOR 4
#define LIBAVUTIL_VERSION_MINOR 11
#define LIBAVUTIL_VERSION_MICRO 100
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \

View File

@ -11,6 +11,7 @@ EXPORTS
av_bsf_get_class
av_bsf_get_null_filter
av_bsf_init
av_bsf_iterate
av_bsf_list_alloc
av_bsf_list_append
av_bsf_list_append2
@ -30,6 +31,7 @@ EXPORTS
av_codec_get_seek_preroll
av_codec_is_decoder
av_codec_is_encoder
av_codec_iterate
av_codec_next
av_codec_set_chroma_intra_matrix
av_codec_set_codec_descriptor
@ -100,6 +102,7 @@ EXPORTS
av_parser_change
av_parser_close
av_parser_init
av_parser_iterate
av_parser_next
av_parser_parse2
av_picture_copy
@ -195,10 +198,17 @@ EXPORTS
avpriv_dca_convert_bitstream
avpriv_dca_parse_core_frame_header
avpriv_dca_sample_rates
avpriv_exif_decode_ifd
avpriv_find_pix_fmt
avpriv_find_start_code
avpriv_get_raw_pix_fmt_tags
avpriv_lock_avformat
avpriv_mjpeg_bits_ac_chrominance
avpriv_mjpeg_bits_ac_luminance
avpriv_mjpeg_bits_dc_chrominance
avpriv_mjpeg_bits_dc_luminance
avpriv_mjpeg_val_ac_chrominance
avpriv_mjpeg_val_ac_luminance
avpriv_mjpeg_val_dc
avpriv_mpa_bitrate_tab
avpriv_mpa_freq_tab
avpriv_mpeg4audio_get_config
@ -210,5 +220,4 @@ EXPORTS
avpriv_split_xiph_headers
avpriv_tak_parse_streaminfo
avpriv_toupper4
avpriv_unlock_avformat
avsubtitle_free

Binary file not shown.

View File

@ -1,17 +1,16 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABCAAGBQJaJHR1AAoJEI1smEefSt5xalQP/jnuQwo9iUfxYkwaRV033J4u
Qn14RWui7avcFQBD/tEeywX2ZxZkC8ijv1DDGdjuosW3kBroKjWwW54hLfVuaqYL
fVGE3p25atJ9pKGQYXKlqWlZo9OvhM+0h8Fa8qH23e3XNTo0lJFFom28epeWAh5t
ojijpvBSCxUSYhSBNPmZyrxK3MREoH7vBhzVOkdxAb3xVFvZO9bhGNKhQUaWdmzV
4KLqMNfzoK5xP3hItlwdjrhbYPHcU1OQwwhHlpz1rNqZyN47UB+3r4OPO9zqLDUb
4YPrqVmzA1YygsbE7kWifxKjGGr5LObtlOvPOHMWrtDa8wdfFXU6vs+qLLZoEphg
jSDDNjD39NWK1cxg0IOpXEQA7mE33ejegQ/5CrFPGBimd0c0Xk3FQrnXcCMIL5NC
X73+hE1bayd9HXdvtI3CPT/M7kkh1cD9loRDr5ajZ0WjkgzSBTLCcZGm+uOjC+eZ
ov5nU5erpUMGCYSnhGfsOao8NTJlFrvZniDXc6XZBfNPcZ0Ryqmk6o7XAlUuF7TS
5TqFCLYxWsdb8BRz/NxTyw9zJ37cKtc9Vdt6fbavcinKx6+CJrQ3M10dedWQripE
ZUJFIEtjHbKPtmiqHFFzjP5oNPl8VGZXrGzKXZwgXmo9HD2B+bwoOwpmlDjJyyGS
cX/ze0Rq6oTmkxPxNHAh
=wTAE
iQIzBAABCAAdFiEEdiLr51NrDwQ29PFjjWyYR59K3nEFAlqx1TAACgkQjWyYR59K
3nGMPw/8CKcaUz0CW0q0gaTSlPRij4nSLkdoyV4HOolo5CV8/Ee2JWJzQSp8gNYu
6/EAG/jgjoiwyTf7ajXhbNGFQfEq6tLTGRGQny3vdrWKI4OFlj3GIiMrNm2LVFFP
MWtd8luU6VBHT2DV2/wwpvpXEFu44IWb14N1UBMyxlo8Cs9o3/6hZ1I5hwGbQ/HL
Tl9bz/U9E7JXNR1mXlPZDiQx5QnD/Lhmw8xynEw03YNG2YB8G+kujlf1egxbvrzy
htr3BZtxY6OmiLzv4Vf4/KhtYaRV249zN3ydINLHOwXT/gN/hGk/u9RQpigABKCU
lrTVx5HjLvuYd7FmMsmLuCKpUI900RhqqvmlQB/7Scppo3I/fAfZoIojH7P3rH8V
ipdjBqxoeZN+fhvRK3IH0VBq7d/o1MTDUR1+8NXjmjdSqWXxDYD9izfFMi3BKm8o
jx8b0l2CPPJl7q/xZpcTpNzOWLFmTA9IEwmh0LjR1TSvRK0gWoaSsYBCel6zkuRp
8QyLCeky7uQo2XRfSNF+ZtfX0Zg3IMARzir250oY+T/ssb1DrBBYmmeNbNxYFFdi
qp2fznTzhdNGkgq1TmhoowvQ5i5HEG6JfgFRNLL4l3tUek2QNjpW032HPt08kqhG
34QbcvRE80Mr/jH5x3G2klE2CLQSnynPEzO4F942x8et1LmwyVI=
=qCwb
-----END PGP SIGNATURE-----

View File

@ -5,6 +5,7 @@ EXPORTS
av_codec_get_id
av_codec_get_tag
av_codec_get_tag2
av_demuxer_iterate
av_demuxer_open
av_dump_format
av_filename_number_test
@ -47,6 +48,7 @@ EXPORTS
av_interleaved_write_frame
av_interleaved_write_uncoded_frame
av_match_ext
av_muxer_iterate
av_new_program
av_oformat_next
av_pkt_dump_log2
@ -163,11 +165,5 @@ EXPORTS
avpriv_io_delete
avpriv_io_move
avpriv_new_chapter
avpriv_register_devices
avpriv_set_pts_info
ffio_open_dyn_packet_buf
ffio_set_buf_size
ffurl_close
ffurl_closep
ffurl_open
ffurl_open_whitelist
ffurl_write

Binary file not shown.

View File

@ -1,17 +1,16 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABCAAGBQJaJHR2AAoJEI1smEefSt5x3/wP/j50DZychoqJNHUlAvhaixS3
0i0e9+3Q4MMj/YtkEXu31LTXHW7OYUYpIzyxMCTUnSfAgCiuET8UXUVV2scZjzAz
6bTLcgamdbzhE51FCPF07+pYWN5jcKTMv2gJXael6KpdH6TnLOJZRlHyFJf1689G
hzfZ+zQlN4q5GLm1ZVXiTFPV2iFO4xJdTTBy4u+y68o7oa4ceDIGMOor8wNmaOE3
S8yt8WdG97rXiKFa7ErT8fS+qER8FQ/yaVWIlng8tEhLamWF+dWJD3n18SMNjQgX
xUV4IfZAgzVR1F+HjVpCUsAMqWB2wUHxUC/wa8kbApfVCdMQyVJVAUA03VkRieJb
TOczG9DhTqIjOOgZVtqqxynP9JmIw4g2AtwR0jIGBiClVDkOtQPeAlcUgNCYi0CH
vdB7qYfvZbxUNwuKa95jmsBbIPG09vqbw8N9MmBB/UQYv8MqVfPOEge81S+qM/+j
Qt9f03PlU4bAviFvDO7xHZ3/OjdWtxtr0XeVfSZmscJIYoQkaK6j5fKbQN5xsIlf
wegAVF1Ah/WMz+f4xKcywlX4BhG5vFdfGeYvqVmTlIEACmtrUOnL0zFkT9+Lpi5b
TUbS3eipMEgcMtLt52cutinTGH7bj12vWjaKgbeJEOdOUlQ1wIvgdP+h6f1TsH5h
0JRgX4rLuL5j7bxvHn8/
=38ue
iQIzBAABCAAdFiEEdiLr51NrDwQ29PFjjWyYR59K3nEFAlqx1TAACgkQjWyYR59K
3nHIng//R1X9FrxcMubJrEwRckmXYkdBANdjbLkGjaSA+pgUGqtB/t5r6JiMHW9C
POULXwaFBxVd/OKnx54NwFSiZiSQiq9MKCS8tdO61F/A6E623QoIx5lqYiuTIZ+S
8qboxiFksMrLzQ/I5P5603QOJ5/mbzam1vBIhf9NwdsUmUp5aD8bOZGj1K9OBE+E
uEqbQh1kmaPOiQo0pwxCPvu12Aiq2dVQcGqmkacZUr0B2LENh60SUAnYiiashlgH
hGiiZeBoET/eKXwHV3Q8rTx3RpuroF2lonAb6PXlJWVfU37D5GqHpKWA5pU3W26c
vWHYS9B1KMHefZonBJzVZiDp9zwVFDtL730NJcsQE61zGU7CxJBc8O1pVblSnQy6
022EP8euKZoKGmtj5m2HS8W85tf+CbdhsqK6oP7NVYW2ka0xReck8mStbHk6Q/yR
+1ccGtq5VIVoMztAW1nlYsUovqcKe2LUwddKLMMOihmQDz2kSXrd9XbGbHsccpKE
m40jkoMvuIR6fiz0YZGGTD133xtYNt1IF01wWPW3BLPIMq0BfYq0PJv7aqQZkgUy
RYdHfsw4vgQrrr0+w1l/CftC92RdtnbdXFmZZB0huQvfTJ9JUCrS++ce/GZzIPMS
6Fvui9MV+wexsZjFnHKGXbnRxBiXfFRx6E9xMz0NTVZGQ0l2qE0=
=Py3f
-----END PGP SIGNATURE-----

View File

@ -11,6 +11,7 @@ EXPORTS
av_aes_ctr_get_iv
av_aes_ctr_increment_iv
av_aes_ctr_init
av_aes_ctr_set_full_iv
av_aes_ctr_set_iv
av_aes_ctr_set_random_iv
av_aes_init
@ -175,6 +176,7 @@ EXPORTS
av_frame_make_writable
av_frame_move_ref
av_frame_new_side_data
av_frame_new_side_data_from_buf
av_frame_ref
av_frame_remove_side_data
av_frame_set_best_effort_timestamp

Binary file not shown.

View File

@ -1,17 +1,16 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABCAAGBQJaJHR3AAoJEI1smEefSt5xf6AQAKnODDHuqxmdj7bub9WHccNK
t/jTr/CdfaO+0xKAuAPTqgcMwovIK0A+H/We/WjRqMW5cHGaRladKmg/z7JRrNDd
qf8doUMGDW6UszF0B8oJ/8EV14f+W4VfQcA5li6oVM3MjW+zPCc577n5hP9d+qXW
i3zuocx+4Hy5Tw73OMuZ3mIrlae4DaiN34Jd1g1YmN02iAnf3Xo4LBkb51dNq5gq
CbTn1nWTII/qN9WKQlPD4IzW2wp5YCMpD6UZO0qFMwzGlb+lB4uo2XVAQCxjSPLF
RummkfAxr54KJGFh9Qf3SUSfSk0w2AQHpcXjgufN9XI974kI7OfO7bwZj1CPMQR0
QivjF92tn5rZWV4EDeohWZhdpQcOT/6MzJUOdINQyY1CzgNTOlPxf8+tJ5xfUbo9
4zi3zFL3cNyDX8trY6vaArynl9amSzICrQGcRMWjdwMPcslQlQ/W4wwYK2cVyJXH
AKu+cxNmrNXi0X5V51qFSXmG6LpYqFBDLKRbz4G/YMY+0lgceRPOen1Gqu5RQZBn
43QTM7+FW9DdexlYNXFyQ+X2eIgVn4wZiLrWT82s4T0wncaxClbDXZ1bWQWmnyr/
wiNLbj+vEzaiW3hPpYF232o4BYy11DD3WetDXQUhFeEwX3eOOZzs+o/BoP5kWTZO
eE6LGjazOkCRHXs3/BT7
=TRdQ
iQIzBAABCAAdFiEEdiLr51NrDwQ29PFjjWyYR59K3nEFAlqx1TEACgkQjWyYR59K
3nFvCA/8DfkMhBKR/Yc8razgdOWI9tZVMvGJKkN1y1c0Zj+Ti9Vzf/E7APiCx0e/
NvnDeSZwO8P7TlOJUNaWg2tgHxrroBWrNGw3BBPmEpiMQ4muL1TnzRy8la1NeMiD
27UMSYu3bcMRQKJ1imYOK6MqZYBFTM9bFBIAPI3muBCBqltqIUtAel2/LaUx9gmu
rz66oetqOVCTA7to3e/ceE52tW7BaEdblEdJ4yscqiOIlcNLXsCb6/yuPEc/lgda
lucILs/EfXBpFrlHVIslZyh8SPmmzb/buKmGwu/d8H58Hn0NkzJZG1kRIdC+F5h2
XflslMqOHlmWMfGSk12T7jBYFejTtD6XneMMmRF/cqVjf1Y02HZGCyR/1IUltPkT
luDrp1nBYFs7SauDygDU6pawUGhGmfndVWBAvl0YAc6VpqToUkySIfvsowTto+pQ
XzkiE1yj1kfvXVg5EaX2298Nl3IMHlm8JkXlCADOlmcucIxdIu2q3M8jfMya06Hy
qWXE5Br3+GJaamAKoapEefCemyVhM06oTJmHTJ4os3SRilUquV08tI347lFYfutn
8c2JZVWwsmYa/BMbXBpqJqD027flGOW3HMcBuZA8vP9zGP3cxgJe5l9R9QsJ1t9y
1KB8fXavyQVFsDwAHCscMaJE5wMeheR4QbgblchR+AZVh7S/+qk=
=fOm7
-----END PGP SIGNATURE-----

View File

@ -22,7 +22,7 @@
--enable-swresample
--enable-parser=ac3,mpegaudio,xma,vorbis,opus
--enable-demuxer=ac3,asf,xwma,mov,oma,ogg,tak,dsf,wav,aac,dts,dtshd,mp3,bink,flac,msf,xmv,caf,ape,smacker,pcm_s8,spdif,mpc,mpc8
--enable-decoder=ac3,wmapro,wmav1,wmav2,wmavoice,wmalossless,xma1,xma2,dca,tak,dsd_lsbf,dsd_lsbf_planar,dsd_mbf,dsd_msbf_planar,aac,atrac3,atrac3p,mp3float,bink,binkaudio_dct,binkaudio_rdft,flac,pcm_s16be,pcm_s16be_planar,pcm_s16le,pcm_s16le_planar,vorbis,ape,adpcm_ima_qt,smackaud,opus,pcm_s8,pcm_s8_planar,mpc7,mpc8
--enable-decoder=ac3,wmapro,wmav1,wmav2,wmavoice,wmalossless,xma1,xma2,dca,tak,dsd_lsbf,dsd_lsbf_planar,dsd_mbf,dsd_msbf_planar,aac,atrac3,atrac3p,mp3float,bink,binkaudio_dct,binkaudio_rdft,flac,pcm_s16be,pcm_s16be_planar,pcm_s16le,pcm_s16le_planar,vorbis,ape,adpcm_ima_qt,smackaud,opus,pcm_s8,pcm_s8_planar,mpc7,mpc8,alac
--disable-parser=mpeg4video,h263
--disable-decoder=mpeg2video,h263,h264,mpeg1video,mpeg2video,mpeg4,hevc,vp9
--disable-cuvid

View File

@ -0,0 +1,33 @@
[compiler list]
msys2Arch=2
arch=2
license2=2
standalone=2
vpx2=2
aom=2
x2643=2
x2652=2
other265=2
flac=2
fdkaac=2
faac=2
mediainfo=2
soxB=1
ffmpegB2=3
ffmpegUpdate=1
ffmpegChoice=1
mp4box=2
rtmpdump=2
mplayer2=2
mpv=2
bmx=2
curl=2
ffmbc=2
cyanrip=2
redshift=2
cores=8
deleteSource=2
strip=1
pack=2
logging=1
updateSuite=1

Binary file not shown.

View File

@ -1,17 +1,16 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAABCAAGBQJaJHRzAAoJEI1smEefSt5xJ3YP/3m6wquOl/ICXzveiURXvoG/
7akxaEj5QYPGwZcxYos6YL2aVUHSbM1icrYSi//pRihZfwvIU0WJv3Xixhz51edx
MrI8r7K4qajfHuOR2t2UZsPlow5cdblb9LymGCarWoK99bK/VSlRTlYGspu1yRja
6CKcdXmMHahiWeTo1f1MeC9Q8utFqKHY8ewYO2b74OtxRvQ2/Hv52C5shCVwEdpc
SOK7cqHf7yLfznPpcNNN+8Zd7Bd/v6tnJ8hnpESqazlf/MHofeCTYFMnHz0YHJPR
tss0nusebkRNbfoKzmu9SOAVx4iZ9PpAoFsa2BAjEctj4lN2QFLd/f0sWZITQzDK
ribkszFQ+XnVJxxljBQwemMGueLZDGLO1DuRaOMz/Hh3SAL9/p6dUL0kZWO3U9UP
Rbca/SpQwA/LytEy7DqmboMp64/GHd+GAtWpkUjuTxcAnxxytbo0XZkunWo5qjhW
2aGcu05e41POzsnN/i0rjSQ+S7kDsxwmeVXnOs87bJ5xbXWhHPJQIGc53ZQEKJpc
72I5Ey0x0AgMymqwbq5rBytcw/Z36ipz3Tdyd7ROxvUy3XzxYIVpT3gyBv7hQa/O
Ummi49spH7vYDRdLLappqN6Kjy31yd24mGraQJx3Z1YRhE1tMNO8D7oguJmW+ggk
szsG/m3nS4B8ZNBZfpas
=r+sV
iQIzBAABCAAdFiEEdiLr51NrDwQ29PFjjWyYR59K3nEFAlqx1SQACgkQjWyYR59K
3nGr3g/9E86vs68h7nZvSlMWtsaNNmdkY5GX4LlD1L8XfZ8RfxwV8xmEOvqezdmI
EonU2jUGzocAf2nuiahFHJ0bXT7TxY7btoLzT5P/M+Frvog1l+9fmxCo6/b143J1
pwersbMW2F8fUcxx75JHx4hdV3FL4LCNU/tztxdf0TN45cNMYs/XugAsBzBfJZQ3
Yd1D1dCnrZ9R560M3sZgLF24wdhxa+cZxwLJpnZeQxN/IWi4/npkZVhjLsoMhPPg
K8cnjOpX6rZ9ux/XhG1LyQK6FCigJ/ta5gBMi+neLisNB2ryPfx3mimE+o7k15wX
tAwry8UgeXAVWMp+idppqDRjbzDODEfZRpfoPFbOosNNFy963NO2bVDGRIna/wnt
05szWlzm1PtnVxYMjeg+GdGnU+GA/J+F8alRNu+RgMW4WSGQ2OKBV8AoGn9Htmpa
ELpIGEqHXbBmcSMgDIuU38AGiiBLnfNst5CgkwZe/QqKFRa/hpPT28ljDKqdKxXg
3p/KwD60oNGxMQ2bbRKGrrh+UCWp6L+gyBRwwupGfM5oxUSjoIsZLcM2+55u9kUT
BfjOROZFoK3BA5leCO893cs63AiHRjXjSIxTmbF70EdxsqrrNc1LFGThu8CPlE1U
Dn8aaU2JxeQTkrmT1KrmTcO7wIE05oHfs50hdhrt/b303Q2t+v4=
=8sKv
-----END PGP SIGNATURE-----