mirror of
https://github.com/moonlight-stream/moonlight-qt.git
synced 2026-04-22 16:08:45 +00:00
Rebuild FFmpeg 4.3.1, discord-rpc, Opus, and OpenSSL 1.1.1i for x86, x64, and ARM64
https://github.com/cgutman/moonlight-deps 382270e6c9a9c42addce06ef5dc6522b1368b5e2
This commit is contained in:
@@ -34,6 +34,12 @@
|
||||
# define AV_GCC_VERSION_AT_MOST(x,y) 0
|
||||
#endif
|
||||
|
||||
#ifdef __has_builtin
|
||||
# define AV_HAS_BUILTIN(x) __has_builtin(x)
|
||||
#else
|
||||
# define AV_HAS_BUILTIN(x) 0
|
||||
#endif
|
||||
|
||||
#ifndef av_always_inline
|
||||
#if AV_GCC_VERSION_AT_LEAST(3,1)
|
||||
# define av_always_inline __attribute__((always_inline)) inline
|
||||
|
||||
@@ -274,16 +274,21 @@ char *av_strireplace(const char *str, const char *from, const char *to);
|
||||
|
||||
/**
|
||||
* Thread safe basename.
|
||||
* @param path the path, on DOS both \ and / are considered separators.
|
||||
* @param path the string to parse, on DOS both \ and / are considered separators.
|
||||
* @return pointer to the basename substring.
|
||||
* If path does not contain a slash, the function returns a copy of path.
|
||||
* If path is a NULL pointer or points to an empty string, a pointer
|
||||
* to a string "." is returned.
|
||||
*/
|
||||
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.
|
||||
* @param path the string to parse, on DOS both \ and / are considered separators.
|
||||
* @return A pointer to a string that's the parent directory of path.
|
||||
* If path is a NULL pointer or points to an empty string, a pointer
|
||||
* to a string "." is returned.
|
||||
* @note the function may modify the contents of the path, so copies should be passed.
|
||||
*/
|
||||
const char *av_dirname(char *path);
|
||||
|
||||
|
||||
@@ -254,12 +254,13 @@ AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size));
|
||||
* @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.
|
||||
* pool is empty. May be NULL, then the default allocator will be
|
||||
* used (av_buffer_alloc()).
|
||||
* @param pool_free a function that will be called immediately before the pool
|
||||
* is freed. I.e. after av_buffer_pool_uninit() is called
|
||||
* by the caller and all the frames are returned to the pool
|
||||
* and freed. It is intended to uninitialize the user opaque
|
||||
* data.
|
||||
* data. May be NULL.
|
||||
* @return newly created buffer pool on success, NULL on error.
|
||||
*/
|
||||
AVBufferPool *av_buffer_pool_init2(int size, void *opaque,
|
||||
@@ -284,6 +285,19 @@ void av_buffer_pool_uninit(AVBufferPool **pool);
|
||||
*/
|
||||
AVBufferRef *av_buffer_pool_get(AVBufferPool *pool);
|
||||
|
||||
/**
|
||||
* Query the original opaque parameter of an allocated buffer in the pool.
|
||||
*
|
||||
* @param ref a buffer reference to a buffer returned by av_buffer_pool_get.
|
||||
* @return the opaque parameter set by the buffer allocator function of the
|
||||
* buffer pool.
|
||||
*
|
||||
* @note the opaque parameter of ref is used by the buffer pool implementation,
|
||||
* therefore you have to use this function to access the original opaque
|
||||
* parameter of an allocated buffer.
|
||||
*/
|
||||
void *av_buffer_pool_buffer_get_opaque(AVBufferRef *ref);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
//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))
|
||||
#define ROUNDED_DIV(a,b) (((a)>=0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b))
|
||||
/* Fast a/(1<<b) rounded toward +inf. Assume a>=0 and b>=0 */
|
||||
#define AV_CEIL_RSHIFT(a,b) (!av_builtin_constant_p(b) ? -((-(a)) >> (b)) \
|
||||
: ((a) + (1<<(b)) - 1) >> (b))
|
||||
@@ -240,7 +240,7 @@ static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p)
|
||||
*/
|
||||
static av_always_inline av_const unsigned av_mod_uintp2_c(unsigned a, unsigned p)
|
||||
{
|
||||
return a & ((1 << p) - 1);
|
||||
return a & ((1U << p) - 1);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -291,6 +291,46 @@ static av_always_inline int av_sat_dsub32_c(int a, int b)
|
||||
return av_sat_sub32(a, av_sat_add32(b, b));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add two signed 64-bit values with saturation.
|
||||
*
|
||||
* @param a one value
|
||||
* @param b another value
|
||||
* @return sum with signed saturation
|
||||
*/
|
||||
static av_always_inline int64_t av_sat_add64_c(int64_t a, int64_t b) {
|
||||
#if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5,1)) || AV_HAS_BUILTIN(__builtin_add_overflow)
|
||||
int64_t tmp;
|
||||
return !__builtin_add_overflow(a, b, &tmp) ? tmp : (tmp < 0 ? INT64_MAX : INT64_MIN);
|
||||
#else
|
||||
if (b >= 0 && a >= INT64_MAX - b)
|
||||
return INT64_MAX;
|
||||
if (b <= 0 && a <= INT64_MIN - b)
|
||||
return INT64_MIN;
|
||||
return a + b;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Subtract two signed 64-bit values with saturation.
|
||||
*
|
||||
* @param a one value
|
||||
* @param b another value
|
||||
* @return difference with signed saturation
|
||||
*/
|
||||
static av_always_inline int64_t av_sat_sub64_c(int64_t a, int64_t b) {
|
||||
#if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5,1)) || AV_HAS_BUILTIN(__builtin_sub_overflow)
|
||||
int64_t tmp;
|
||||
return !__builtin_sub_overflow(a, b, &tmp) ? tmp : (tmp < 0 ? INT64_MAX : INT64_MIN);
|
||||
#else
|
||||
if (b <= 0 && a >= INT64_MAX + b)
|
||||
return INT64_MAX;
|
||||
if (b >= 0 && a <= INT64_MIN + b)
|
||||
return INT64_MIN;
|
||||
return a - b;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Clip a float value into the amin-amax range.
|
||||
* @param a value to clip
|
||||
@@ -331,7 +371,7 @@ static av_always_inline av_const double av_clipd_c(double a, double amin, double
|
||||
*/
|
||||
static av_always_inline av_const int av_ceil_log2_c(int x)
|
||||
{
|
||||
return av_log2((x - 1) << 1);
|
||||
return av_log2((x - 1U) << 1);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -373,7 +413,9 @@ static av_always_inline av_const int av_parity_c(uint32_t v)
|
||||
* @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++.
|
||||
* input, this could be *ptr++, or if you want to make sure
|
||||
* that *ptr stops at the end of a NULL terminated string then
|
||||
* *ptr ? *ptr++ : 0
|
||||
* @param ERROR Expression to be evaluated on invalid input,
|
||||
* typically a goto statement.
|
||||
*
|
||||
@@ -387,11 +429,11 @@ static av_always_inline av_const int av_parity_c(uint32_t v)
|
||||
{\
|
||||
uint32_t top = (val & 128) >> 1;\
|
||||
if ((val & 0xc0) == 0x80 || val >= 0xFE)\
|
||||
ERROR\
|
||||
{ERROR}\
|
||||
while (val & top) {\
|
||||
int tmp= (GET_BYTE) - 128;\
|
||||
unsigned int tmp = (GET_BYTE) - 128;\
|
||||
if(tmp>>6)\
|
||||
ERROR\
|
||||
{ERROR}\
|
||||
val= (val<<6) + tmp;\
|
||||
top <<= 5;\
|
||||
}\
|
||||
@@ -408,13 +450,13 @@ static av_always_inline av_const int av_parity_c(uint32_t v)
|
||||
* typically a goto statement.
|
||||
*/
|
||||
#define GET_UTF16(val, GET_16BIT, ERROR)\
|
||||
val = GET_16BIT;\
|
||||
val = (GET_16BIT);\
|
||||
{\
|
||||
unsigned int hi = val - 0xD800;\
|
||||
if (hi < 0x800) {\
|
||||
val = GET_16BIT - 0xDC00;\
|
||||
val = (GET_16BIT) - 0xDC00;\
|
||||
if (val > 0x3FFU || hi > 0x3FFU)\
|
||||
ERROR\
|
||||
{ERROR}\
|
||||
val += (hi<<10) + 0x10000;\
|
||||
}\
|
||||
}\
|
||||
@@ -543,6 +585,12 @@ static av_always_inline av_const int av_parity_c(uint32_t v)
|
||||
#ifndef av_sat_dsub32
|
||||
# define av_sat_dsub32 av_sat_dsub32_c
|
||||
#endif
|
||||
#ifndef av_sat_add64
|
||||
# define av_sat_add64 av_sat_add64_c
|
||||
#endif
|
||||
#ifndef av_sat_sub64
|
||||
# define av_sat_sub64 av_sat_sub64_c
|
||||
#endif
|
||||
#ifndef av_clipf
|
||||
# define av_clipf av_clipf_c
|
||||
#endif
|
||||
|
||||
70
libs/windows/include/libavutil/dovi_meta.h
Normal file
70
libs/windows/include/libavutil/dovi_meta.h
Normal file
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Vacing Fang <vacingfang@tencent.com>
|
||||
*
|
||||
* 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
|
||||
* DOVI configuration
|
||||
*/
|
||||
|
||||
|
||||
#ifndef AVUTIL_DOVI_META_H
|
||||
#define AVUTIL_DOVI_META_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
|
||||
/*
|
||||
* DOVI configuration
|
||||
* ref: dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2
|
||||
dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2
|
||||
* @code
|
||||
* uint8_t dv_version_major, the major version number that the stream complies with
|
||||
* uint8_t dv_version_minor, the minor version number that the stream complies with
|
||||
* uint8_t dv_profile, the Dolby Vision profile
|
||||
* uint8_t dv_level, the Dolby Vision level
|
||||
* uint8_t rpu_present_flag
|
||||
* uint8_t el_present_flag
|
||||
* uint8_t bl_present_flag
|
||||
* uint8_t dv_bl_signal_compatibility_id
|
||||
* @endcode
|
||||
*
|
||||
* @note The struct must be allocated with av_dovi_alloc() and
|
||||
* its size is not a part of the public ABI.
|
||||
*/
|
||||
typedef struct AVDOVIDecoderConfigurationRecord {
|
||||
uint8_t dv_version_major;
|
||||
uint8_t dv_version_minor;
|
||||
uint8_t dv_profile;
|
||||
uint8_t dv_level;
|
||||
uint8_t rpu_present_flag;
|
||||
uint8_t el_present_flag;
|
||||
uint8_t bl_present_flag;
|
||||
uint8_t dv_bl_signal_compatibility_id;
|
||||
} AVDOVIDecoderConfigurationRecord;
|
||||
|
||||
/**
|
||||
* Allocate a AVDOVIDecoderConfigurationRecord structure and initialize its
|
||||
* fields to default values.
|
||||
*
|
||||
* @return the newly allocated struct or NULL on failure
|
||||
*/
|
||||
AVDOVIDecoderConfigurationRecord *av_dovi_alloc(size_t *size);
|
||||
|
||||
#endif /* AVUTIL_DOVI_META_H */
|
||||
@@ -86,6 +86,30 @@ int av_expr_parse(AVExpr **expr, const char *s,
|
||||
*/
|
||||
double av_expr_eval(AVExpr *e, const double *const_values, void *opaque);
|
||||
|
||||
/**
|
||||
* Track the presence of variables and their number of occurrences in a parsed expression
|
||||
*
|
||||
* @param counter a zero-initialized array where the count of each variable will be stored
|
||||
* @param size size of array
|
||||
* @return 0 on success, a negative value indicates that no expression or array was passed
|
||||
* or size was zero
|
||||
*/
|
||||
int av_expr_count_vars(AVExpr *e, unsigned *counter, int size);
|
||||
|
||||
/**
|
||||
* Track the presence of user provided functions and their number of occurrences
|
||||
* in a parsed expression.
|
||||
*
|
||||
* @param counter a zero-initialized array where the count of each function will be stored
|
||||
* if you passed 5 functions with 2 arguments to av_expr_parse()
|
||||
* then for arg=2 this will use upto 5 entries.
|
||||
* @param size size of array
|
||||
* @param arg number of arguments the counted functions have
|
||||
* @return 0 on success, a negative value indicates that no expression or array was passed
|
||||
* or size was zero
|
||||
*/
|
||||
int av_expr_count_func(AVExpr *e, unsigned *counter, int size, int arg);
|
||||
|
||||
/**
|
||||
* Free a parsed expression previously created with av_expr_parse().
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Automatically generated by version.sh, do not manually edit! */
|
||||
#ifndef AVUTIL_FFVERSION_H
|
||||
#define AVUTIL_FFVERSION_H
|
||||
#define FFMPEG_VERSION "4.2.1"
|
||||
#define FFMPEG_VERSION "n4.3.1"
|
||||
#endif /* AVUTIL_FFVERSION_H */
|
||||
|
||||
@@ -179,6 +179,11 @@ enum AVFrameSideDataType {
|
||||
* array element is implied by AVFrameSideData.size / AVRegionOfInterest.self_size.
|
||||
*/
|
||||
AV_FRAME_DATA_REGIONS_OF_INTEREST,
|
||||
|
||||
/**
|
||||
* Encoding parameters for a video frame, as described by AVVideoEncParams.
|
||||
*/
|
||||
AV_FRAME_DATA_VIDEO_ENC_PARAMS,
|
||||
};
|
||||
|
||||
enum AVActiveFormatDescription {
|
||||
@@ -920,8 +925,7 @@ 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.
|
||||
* Remove and free all side data instances of the given type.
|
||||
*/
|
||||
void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type);
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ enum AVHWDeviceType {
|
||||
AV_HWDEVICE_TYPE_DRM,
|
||||
AV_HWDEVICE_TYPE_OPENCL,
|
||||
AV_HWDEVICE_TYPE_MEDIACODEC,
|
||||
AV_HWDEVICE_TYPE_VULKAN,
|
||||
};
|
||||
|
||||
typedef struct AVHWDeviceInternal AVHWDeviceInternal;
|
||||
@@ -327,6 +328,26 @@ int av_hwdevice_ctx_create_derived(AVBufferRef **dst_ctx,
|
||||
enum AVHWDeviceType type,
|
||||
AVBufferRef *src_ctx, int flags);
|
||||
|
||||
/**
|
||||
* Create a new device of the specified type from an existing device.
|
||||
*
|
||||
* This function performs the same action as av_hwdevice_ctx_create_derived,
|
||||
* however, it is able to set options for the new device to be derived.
|
||||
*
|
||||
* @param dst_ctx On success, a reference to the newly-created
|
||||
* AVHWDeviceContext.
|
||||
* @param type The type of the new device to create.
|
||||
* @param src_ctx A reference to an existing AVHWDeviceContext which will be
|
||||
* used to create the new device.
|
||||
* @param options Options for the new device to create, same format as in
|
||||
* av_hwdevice_ctx_create.
|
||||
* @param flags Currently unused; should be set to zero.
|
||||
* @return Zero on success, a negative AVERROR code on failure.
|
||||
*/
|
||||
int av_hwdevice_ctx_create_derived_opts(AVBufferRef **dst_ctx,
|
||||
enum AVHWDeviceType type,
|
||||
AVBufferRef *src_ctx,
|
||||
AVDictionary *options, int flags);
|
||||
|
||||
/**
|
||||
* Allocate an AVHWFramesContext tied to a given device context.
|
||||
|
||||
@@ -49,4 +49,21 @@ typedef struct AVCUDADeviceContext {
|
||||
* AVHWFramesContext.hwctx is currently not used
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup hwcontext_cuda Device context creation flags
|
||||
*
|
||||
* Flags for av_hwdevice_ctx_create.
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* Use primary device context instead of creating a new one.
|
||||
*/
|
||||
#define AV_CUDA_USE_PRIMARY_CONTEXT (1 << 0)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* AVUTIL_HWCONTEXT_CUDA_H */
|
||||
|
||||
100
libs/windows/include/libavutil/hwcontext_opencl.h
Normal file
100
libs/windows/include/libavutil/hwcontext_opencl.h
Normal file
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* 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_OPENCL_H
|
||||
#define AVUTIL_HWCONTEXT_OPENCL_H
|
||||
|
||||
#ifdef __APPLE__
|
||||
#include <OpenCL/cl.h>
|
||||
#else
|
||||
#include <CL/cl.h>
|
||||
#endif
|
||||
|
||||
#include "frame.h"
|
||||
|
||||
/**
|
||||
* @file
|
||||
* API-specific header for AV_HWDEVICE_TYPE_OPENCL.
|
||||
*
|
||||
* Pools allocated internally are always dynamic, and are primarily intended
|
||||
* to be used in OpenCL-only cases. If interoperation is required, it is
|
||||
* typically required to allocate frames in the other API and then map the
|
||||
* frames context to OpenCL with av_hwframe_ctx_create_derived().
|
||||
*/
|
||||
|
||||
/**
|
||||
* OpenCL frame descriptor for pool allocation.
|
||||
*
|
||||
* In user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs
|
||||
* with the data pointer pointing at an object of this type describing the
|
||||
* planes of the frame.
|
||||
*/
|
||||
typedef struct AVOpenCLFrameDescriptor {
|
||||
/**
|
||||
* Number of planes in the frame.
|
||||
*/
|
||||
int nb_planes;
|
||||
/**
|
||||
* OpenCL image2d objects for each plane of the frame.
|
||||
*/
|
||||
cl_mem planes[AV_NUM_DATA_POINTERS];
|
||||
} AVOpenCLFrameDescriptor;
|
||||
|
||||
/**
|
||||
* OpenCL device details.
|
||||
*
|
||||
* Allocated as AVHWDeviceContext.hwctx
|
||||
*/
|
||||
typedef struct AVOpenCLDeviceContext {
|
||||
/**
|
||||
* The primary device ID of the device. If multiple OpenCL devices
|
||||
* are associated with the context then this is the one which will
|
||||
* be used for all operations internal to FFmpeg.
|
||||
*/
|
||||
cl_device_id device_id;
|
||||
/**
|
||||
* The OpenCL context which will contain all operations and frames on
|
||||
* this device.
|
||||
*/
|
||||
cl_context context;
|
||||
/**
|
||||
* The default command queue for this device, which will be used by all
|
||||
* frames contexts which do not have their own command queue. If not
|
||||
* intialised by the user, a default queue will be created on the
|
||||
* primary device.
|
||||
*/
|
||||
cl_command_queue command_queue;
|
||||
} AVOpenCLDeviceContext;
|
||||
|
||||
/**
|
||||
* OpenCL-specific data associated with a frame pool.
|
||||
*
|
||||
* Allocated as AVHWFramesContext.hwctx.
|
||||
*/
|
||||
typedef struct AVOpenCLFramesContext {
|
||||
/**
|
||||
* The command queue used for internal asynchronous operations on this
|
||||
* device (av_hwframe_transfer_data(), av_hwframe_map()).
|
||||
*
|
||||
* If this is not set, the command queue from the associated device is
|
||||
* used instead.
|
||||
*/
|
||||
cl_command_queue command_queue;
|
||||
} AVOpenCLFramesContext;
|
||||
|
||||
#endif /* AVUTIL_HWCONTEXT_OPENCL_H */
|
||||
@@ -51,4 +51,10 @@ enum AVPixelFormat av_map_videotoolbox_format_to_pixfmt(uint32_t cv_fmt);
|
||||
*/
|
||||
uint32_t av_map_videotoolbox_format_from_pixfmt(enum AVPixelFormat pix_fmt);
|
||||
|
||||
/**
|
||||
* Same as av_map_videotoolbox_format_from_pixfmt function, but can map and
|
||||
* return full range pixel formats via a flag.
|
||||
*/
|
||||
uint32_t av_map_videotoolbox_format_from_pixfmt2(enum AVPixelFormat pix_fmt, bool full_range);
|
||||
|
||||
#endif /* AVUTIL_HWCONTEXT_VIDEOTOOLBOX_H */
|
||||
|
||||
204
libs/windows/include/libavutil/hwcontext_vulkan.h
Normal file
204
libs/windows/include/libavutil/hwcontext_vulkan.h
Normal file
@@ -0,0 +1,204 @@
|
||||
/*
|
||||
* 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_VULKAN_H
|
||||
#define AVUTIL_HWCONTEXT_VULKAN_H
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
#include "pixfmt.h"
|
||||
#include "frame.h"
|
||||
|
||||
/**
|
||||
* @file
|
||||
* API-specific header for AV_HWDEVICE_TYPE_VULKAN.
|
||||
*
|
||||
* For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs
|
||||
* with the data pointer set to an AVVkFrame.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Main Vulkan context, allocated as AVHWDeviceContext.hwctx.
|
||||
* All of these can be set before init to change what the context uses
|
||||
*/
|
||||
typedef struct AVVulkanDeviceContext {
|
||||
/**
|
||||
* Custom memory allocator, else NULL
|
||||
*/
|
||||
const VkAllocationCallbacks *alloc;
|
||||
/**
|
||||
* Vulkan instance. Must be at least version 1.1.
|
||||
*/
|
||||
VkInstance inst;
|
||||
/**
|
||||
* Physical device
|
||||
*/
|
||||
VkPhysicalDevice phys_dev;
|
||||
/**
|
||||
* Active device
|
||||
*/
|
||||
VkDevice act_dev;
|
||||
/**
|
||||
* Queue family index for graphics
|
||||
* @note av_hwdevice_create() will set all 3 queue indices if unset
|
||||
* If there is no dedicated queue for compute or transfer operations,
|
||||
* they will be set to the graphics queue index which can handle both.
|
||||
* nb_graphics_queues indicates how many queues were enabled for the
|
||||
* graphics queue (must be at least 1)
|
||||
*/
|
||||
int queue_family_index;
|
||||
int nb_graphics_queues;
|
||||
/**
|
||||
* Queue family index to use for transfer operations, and the amount of queues
|
||||
* enabled. In case there is no dedicated transfer queue, nb_tx_queues
|
||||
* must be 0 and queue_family_tx_index must be the same as either the graphics
|
||||
* queue or the compute queue, if available.
|
||||
*/
|
||||
int queue_family_tx_index;
|
||||
int nb_tx_queues;
|
||||
/**
|
||||
* Queue family index for compute ops, and the amount of queues enabled.
|
||||
* In case there are no dedicated compute queues, nb_comp_queues must be
|
||||
* 0 and its queue family index must be set to the graphics queue.
|
||||
*/
|
||||
int queue_family_comp_index;
|
||||
int nb_comp_queues;
|
||||
/**
|
||||
* Enabled instance extensions.
|
||||
* If supplying your own device context, set this to an array of strings, with
|
||||
* each entry containing the specified Vulkan extension string to enable.
|
||||
* Duplicates are possible and accepted.
|
||||
* If no extensions are enabled, set these fields to NULL, and 0 respectively.
|
||||
*/
|
||||
const char * const *enabled_inst_extensions;
|
||||
int nb_enabled_inst_extensions;
|
||||
/**
|
||||
* Enabled device extensions. By default, VK_KHR_external_memory_fd,
|
||||
* VK_EXT_external_memory_dma_buf, VK_EXT_image_drm_format_modifier,
|
||||
* VK_KHR_external_semaphore_fd and VK_EXT_external_memory_host are enabled if found.
|
||||
* If supplying your own device context, these fields takes the same format as
|
||||
* the above fields, with the same conditions that duplicates are possible
|
||||
* and accepted, and that NULL and 0 respectively means no extensions are enabled.
|
||||
*/
|
||||
const char * const *enabled_dev_extensions;
|
||||
int nb_enabled_dev_extensions;
|
||||
/**
|
||||
* This structure should be set to the set of features that present and enabled
|
||||
* during device creation. When a device is created by FFmpeg, it will default to
|
||||
* enabling all that are present of the shaderImageGatherExtended,
|
||||
* fragmentStoresAndAtomics, shaderInt64 and vertexPipelineStoresAndAtomics features.
|
||||
*/
|
||||
VkPhysicalDeviceFeatures2 device_features;
|
||||
} AVVulkanDeviceContext;
|
||||
|
||||
/**
|
||||
* Allocated as AVHWFramesContext.hwctx, used to set pool-specific options
|
||||
*/
|
||||
typedef struct AVVulkanFramesContext {
|
||||
/**
|
||||
* Controls the tiling of allocated frames.
|
||||
*/
|
||||
VkImageTiling tiling;
|
||||
/**
|
||||
* Defines extra usage of output frames. If left as 0, the following bits
|
||||
* are set: TRANSFER_SRC, TRANSFER_DST. SAMPLED and STORAGE.
|
||||
*/
|
||||
VkImageUsageFlagBits usage;
|
||||
/**
|
||||
* Extension data for image creation.
|
||||
*/
|
||||
void *create_pnext;
|
||||
/**
|
||||
* Extension data for memory allocation. Must have as many entries as
|
||||
* the number of planes of the sw_format.
|
||||
* This will be chained to VkExportMemoryAllocateInfo, which is used
|
||||
* to make all pool images exportable to other APIs if the necessary
|
||||
* extensions are present in enabled_dev_extensions.
|
||||
*/
|
||||
void *alloc_pnext[AV_NUM_DATA_POINTERS];
|
||||
} AVVulkanFramesContext;
|
||||
|
||||
/*
|
||||
* Frame structure, the VkFormat of the image will always match
|
||||
* the pool's sw_format.
|
||||
* All frames, imported or allocated, will be created with the
|
||||
* VK_IMAGE_CREATE_ALIAS_BIT flag set, so the memory may be aliased if needed.
|
||||
*
|
||||
* If all three queue family indices in the device context are the same,
|
||||
* images will be created with the EXCLUSIVE sharing mode. Otherwise, all images
|
||||
* will be created using the CONCURRENT sharing mode.
|
||||
*
|
||||
* @note the size of this structure is not part of the ABI, to allocate
|
||||
* you must use @av_vk_frame_alloc().
|
||||
*/
|
||||
typedef struct AVVkFrame {
|
||||
/**
|
||||
* Vulkan images to which the memory is bound to.
|
||||
*/
|
||||
VkImage img[AV_NUM_DATA_POINTERS];
|
||||
|
||||
/**
|
||||
* The same tiling must be used for all images in the frame.
|
||||
*/
|
||||
VkImageTiling tiling;
|
||||
|
||||
/**
|
||||
* Memory backing the images. Could be less than the amount of images
|
||||
* if importing from a DRM or VAAPI frame.
|
||||
*/
|
||||
VkDeviceMemory mem[AV_NUM_DATA_POINTERS];
|
||||
size_t size[AV_NUM_DATA_POINTERS];
|
||||
|
||||
/**
|
||||
* OR'd flags for all memory allocated
|
||||
*/
|
||||
VkMemoryPropertyFlagBits flags;
|
||||
|
||||
/**
|
||||
* Updated after every barrier
|
||||
*/
|
||||
VkAccessFlagBits access[AV_NUM_DATA_POINTERS];
|
||||
VkImageLayout layout[AV_NUM_DATA_POINTERS];
|
||||
|
||||
/**
|
||||
* Synchronization semaphores. Must not be freed manually. Must be waited on
|
||||
* and signalled at every queue submission.
|
||||
* Could be less than the amount of images: either one per VkDeviceMemory
|
||||
* or one for the entire frame. All others will be set to VK_NULL_HANDLE.
|
||||
*/
|
||||
VkSemaphore sem[AV_NUM_DATA_POINTERS];
|
||||
|
||||
/**
|
||||
* Internal data.
|
||||
*/
|
||||
struct AVVkFrameInternal *internal;
|
||||
} AVVkFrame;
|
||||
|
||||
/**
|
||||
* Allocates a single AVVkFrame and initializes everything as 0.
|
||||
* @note Must be freed via av_free()
|
||||
*/
|
||||
AVVkFrame *av_vk_frame_alloc(void);
|
||||
|
||||
/**
|
||||
* Returns the format of each image up to the number of planes for a given sw_format.
|
||||
* Returns NULL on unsupported formats.
|
||||
*/
|
||||
const VkFormat *av_vkfmt_from_pixfmt(enum AVPixelFormat p);
|
||||
|
||||
#endif /* AVUTIL_HWCONTEXT_VULKAN_H */
|
||||
@@ -24,6 +24,12 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* Context structure for the Lagged Fibonacci PRNG.
|
||||
* The exact layout, types and content of this struct may change and should
|
||||
* not be accessed directly. Only its sizeof() is guranteed to stay the same
|
||||
* to allow easy instanciation.
|
||||
*/
|
||||
typedef struct AVLFG {
|
||||
unsigned int state[64];
|
||||
int index;
|
||||
@@ -45,8 +51,9 @@ int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length);
|
||||
* 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];
|
||||
unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
|
||||
c->index += 1U;
|
||||
return a;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -57,7 +64,9 @@ static inline unsigned int av_lfg_get(AVLFG *c){
|
||||
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;
|
||||
a = c->state[c->index & 63] = 2*a*b+a+b;
|
||||
c->index += 1U;
|
||||
return a;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -233,6 +233,27 @@ typedef struct AVClass {
|
||||
*/
|
||||
void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4);
|
||||
|
||||
/**
|
||||
* Send the specified message to the log once with the initial_level and then with
|
||||
* the subsequent_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
|
||||
*
|
||||
* @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 initial_level importance level of the message expressed using a @ref
|
||||
* lavu_log_constants "Logging Constant" for the first occurance.
|
||||
* @param subsequent_level importance level of the message expressed using a @ref
|
||||
* lavu_log_constants "Logging Constant" after the first occurance.
|
||||
* @param fmt The format string (printf-compatible) that specifies how
|
||||
* subsequent arguments are converted to output.
|
||||
* @param state a variable to keep trak of if a message has already been printed
|
||||
* this must be initialized to 0 before the first use. The same state
|
||||
* must not be accessed by 2 Threads simultaneously.
|
||||
*/
|
||||
void av_log_once(void* avcl, int initial_level, int subsequent_level, int *state, const char *fmt, ...) av_printf_format(5, 6);
|
||||
|
||||
|
||||
/**
|
||||
* Send the specified message to the log if the level is less than or equal
|
||||
|
||||
@@ -288,8 +288,10 @@ typedef struct AVOption {
|
||||
*/
|
||||
#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_RUNTIME_PARAM (1<<15) ///< a generic parameter which can be set by the user at runtime
|
||||
#define AV_OPT_FLAG_FILTERING_PARAM (1<<16) ///< a generic parameter which can be set by the user for filtering
|
||||
#define AV_OPT_FLAG_DEPRECATED (1<<17) ///< set if option is deprecated, users should refer to AVOption.help text for more information
|
||||
#define AV_OPT_FLAG_CHILD_CONSTS (1<<18) ///< set if option constants can also reside in child objects
|
||||
//FIXME think about enc-audio, ... style flags
|
||||
|
||||
/**
|
||||
@@ -669,6 +671,9 @@ const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *pre
|
||||
* 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.
|
||||
* If the field is of a dictionary type, it has to be a ':' separated list of
|
||||
* key=value parameters. Values containing ':' special characters must be
|
||||
* escaped.
|
||||
* @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.
|
||||
*
|
||||
@@ -729,9 +734,10 @@ int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, in
|
||||
/**
|
||||
* @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.
|
||||
* @note if AV_OPT_ALLOW_NULL is set in search_flags in av_opt_get, and the
|
||||
* option is of type AV_OPT_TYPE_STRING, AV_OPT_TYPE_BINARY or AV_OPT_TYPE_DICT
|
||||
* 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);
|
||||
|
||||
@@ -257,18 +257,18 @@ enum AVPixelFormat {
|
||||
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 */
|
||||
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
|
||||
|
||||
AV_PIX_FMT_XVMC,///< XVideo Motion Acceleration via common packet passing
|
||||
|
||||
@@ -348,6 +348,16 @@ enum AVPixelFormat {
|
||||
AV_PIX_FMT_NV24, ///< planar YUV 4:4:4, 24bpp, 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_NV42, ///< as above, but U and V bytes are swapped
|
||||
|
||||
/**
|
||||
* Vulkan hardware images.
|
||||
*
|
||||
* data[0] points to an AVVkFrame
|
||||
*/
|
||||
AV_PIX_FMT_VULKAN,
|
||||
|
||||
AV_PIX_FMT_Y210BE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, big-endian
|
||||
AV_PIX_FMT_Y210LE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, little-endian
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
@@ -436,6 +446,8 @@ enum AVPixelFormat {
|
||||
#define AV_PIX_FMT_P010 AV_PIX_FMT_NE(P010BE, P010LE)
|
||||
#define AV_PIX_FMT_P016 AV_PIX_FMT_NE(P016BE, P016LE)
|
||||
|
||||
#define AV_PIX_FMT_Y210 AV_PIX_FMT_NE(Y210BE, Y210LE)
|
||||
|
||||
/**
|
||||
* Chromaticity coordinates of the source primaries.
|
||||
* These values match the ones defined by ISO/IEC 23001-8_2013 § 7.1.
|
||||
@@ -456,7 +468,8 @@ enum AVColorPrimaries {
|
||||
AVCOL_PRI_SMPTEST428_1 = AVCOL_PRI_SMPTE428,
|
||||
AVCOL_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) / DCI P3
|
||||
AVCOL_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 (2010) / P3 D65 / Display P3
|
||||
AVCOL_PRI_JEDEC_P22 = 22, ///< JEDEC P22 phosphors
|
||||
AVCOL_PRI_EBU3213 = 22, ///< EBU Tech. 3213-E / JEDEC P22 phosphors
|
||||
AVCOL_PRI_JEDEC_P22 = AVCOL_PRI_EBU3213,
|
||||
AVCOL_PRI_NB ///< Not part of ABI
|
||||
};
|
||||
|
||||
|
||||
@@ -207,6 +207,12 @@ int av_find_nearest_q_idx(AVRational q, const AVRational* q_list);
|
||||
*/
|
||||
uint32_t av_q2intfloat(AVRational q);
|
||||
|
||||
/**
|
||||
* Return the best rational so that a and b are multiple of it.
|
||||
* If the resulting denominator is larger than max_den, return def.
|
||||
*/
|
||||
AVRational av_gcd_q(AVRational a, AVRational b, int max_den, AVRational def);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
@@ -28,17 +28,50 @@ typedef struct AVComplexFloat {
|
||||
float re, im;
|
||||
} AVComplexFloat;
|
||||
|
||||
typedef struct AVComplexDouble {
|
||||
double re, im;
|
||||
} AVComplexDouble;
|
||||
|
||||
typedef struct AVComplexInt32 {
|
||||
int32_t re, im;
|
||||
} AVComplexInt32;
|
||||
|
||||
enum AVTXType {
|
||||
/**
|
||||
* Standard complex to complex FFT with sample data type AVComplexFloat.
|
||||
* Scaling currently unsupported
|
||||
* Output is not 1/len normalized. Scaling currently unsupported.
|
||||
* The stride parameter is ignored.
|
||||
*/
|
||||
AV_TX_FLOAT_FFT = 0,
|
||||
/**
|
||||
* Standard MDCT with sample data type of float and a scale type of
|
||||
* float. Length is the frame size, not the window size (which is 2x frame)
|
||||
* For forward transforms, the stride specifies the spacing between each
|
||||
* sample in the output array in bytes. The input must be a flat array.
|
||||
* For inverse transforms, the stride specifies the spacing between each
|
||||
* sample in the input array in bytes. The output will be a flat array.
|
||||
* Stride must be a non-zero multiple of sizeof(float).
|
||||
*/
|
||||
AV_TX_FLOAT_MDCT = 1,
|
||||
/**
|
||||
* Same as AV_TX_FLOAT_FFT with a data type of AVComplexDouble.
|
||||
*/
|
||||
AV_TX_DOUBLE_FFT = 2,
|
||||
/**
|
||||
* Same as AV_TX_FLOAT_MDCT with data and scale type of double.
|
||||
* Stride must be a non-zero multiple of sizeof(double).
|
||||
*/
|
||||
AV_TX_DOUBLE_MDCT = 3,
|
||||
/**
|
||||
* Same as AV_TX_FLOAT_FFT with a data type of AVComplexInt32.
|
||||
*/
|
||||
AV_TX_INT32_FFT = 4,
|
||||
/**
|
||||
* Same as AV_TX_FLOAT_MDCT with data type of int32_t and scale type of float.
|
||||
* Only scale values less than or equal to 1.0 are supported.
|
||||
* Stride must be a non-zero multiple of sizeof(int32_t).
|
||||
*/
|
||||
AV_TX_INT32_MDCT = 5,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -50,14 +83,17 @@ enum AVTXType {
|
||||
* @param s the transform context
|
||||
* @param out the output array
|
||||
* @param in the input array
|
||||
* @param stride the input or output stride (depending on transform direction)
|
||||
* in bytes, currently implemented for all MDCT transforms
|
||||
* @param stride the input or output stride in bytes
|
||||
*
|
||||
* The out and in arrays must be aligned to the maximum required by the CPU
|
||||
* architecture.
|
||||
* The stride must follow the constraints the transform type has specified.
|
||||
*/
|
||||
typedef void (*av_tx_fn)(AVTXContext *s, void *out, void *in, ptrdiff_t stride);
|
||||
|
||||
/**
|
||||
* Initialize a transform context with the given configuration
|
||||
* Currently power of two lengths from 4 to 131072 are supported, along with
|
||||
* Currently power of two lengths from 2 to 131072 are supported, along with
|
||||
* any length decomposable to a power of two and either 3, 5 or 15.
|
||||
*
|
||||
* @param ctx the context to allocate, will be NULL on error
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
*/
|
||||
|
||||
#define LIBAVUTIL_VERSION_MAJOR 56
|
||||
#define LIBAVUTIL_VERSION_MINOR 31
|
||||
#define LIBAVUTIL_VERSION_MINOR 51
|
||||
#define LIBAVUTIL_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
||||
|
||||
163
libs/windows/include/libavutil/video_enc_params.h
Normal file
163
libs/windows/include/libavutil/video_enc_params.h
Normal file
@@ -0,0 +1,163 @@
|
||||
/*
|
||||
* 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_VIDEO_ENC_PARAMS_H
|
||||
#define AVUTIL_VIDEO_ENC_PARAMS_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "libavutil/avassert.h"
|
||||
#include "libavutil/frame.h"
|
||||
|
||||
enum AVVideoEncParamsType {
|
||||
AV_VIDEO_ENC_PARAMS_NONE = -1,
|
||||
/**
|
||||
* VP9 stores:
|
||||
* - per-frame base (luma AC) quantizer index, exported as AVVideoEncParams.qp
|
||||
* - deltas for luma DC, chroma AC and chroma DC, exported in the
|
||||
* corresponding entries in AVVideoEncParams.delta_qp
|
||||
* - per-segment delta, exported as for each block as AVVideoBlockParams.delta_qp
|
||||
*
|
||||
* To compute the resulting quantizer index for a block:
|
||||
* - for luma AC, add the base qp and the per-block delta_qp, saturating to
|
||||
* unsigned 8-bit.
|
||||
* - for luma DC and chroma AC/DC, add the corresponding
|
||||
* AVVideoBlockParams.delta_qp to the luma AC index, again saturating to
|
||||
* unsigned 8-bit.
|
||||
*/
|
||||
AV_VIDEO_ENC_PARAMS_VP9,
|
||||
|
||||
/**
|
||||
* H.264 stores:
|
||||
* - in PPS (per-picture):
|
||||
* * initial QP_Y (luma) value, exported as AVVideoEncParams.qp
|
||||
* * delta(s) for chroma QP values (same for both, or each separately),
|
||||
* exported as in the corresponding entries in AVVideoEncParams.delta_qp
|
||||
* - per-slice QP delta, not exported directly, added to the per-MB value
|
||||
* - per-MB delta; not exported directly; the final per-MB quantizer
|
||||
* parameter - QP_Y - minus the value in AVVideoEncParams.qp is exported
|
||||
* as AVVideoBlockParams.qp_delta.
|
||||
*/
|
||||
AV_VIDEO_ENC_PARAMS_H264,
|
||||
};
|
||||
|
||||
/**
|
||||
* Video encoding parameters for a given frame. This struct is allocated along
|
||||
* with an optional array of per-block AVVideoBlockParams descriptors.
|
||||
* Must be allocated with av_video_enc_params_alloc().
|
||||
*/
|
||||
typedef struct AVVideoEncParams {
|
||||
/**
|
||||
* Number of blocks in the array.
|
||||
*
|
||||
* May be 0, in which case no per-block information is present. In this case
|
||||
* the values of blocks_offset / block_size are unspecified and should not
|
||||
* be accessed.
|
||||
*/
|
||||
unsigned int nb_blocks;
|
||||
/**
|
||||
* Offset in bytes from the beginning of this structure at which the array
|
||||
* of blocks starts.
|
||||
*/
|
||||
size_t blocks_offset;
|
||||
/*
|
||||
* Size of each block in bytes. May not match sizeof(AVVideoBlockParams).
|
||||
*/
|
||||
size_t block_size;
|
||||
|
||||
/**
|
||||
* Type of the parameters (the codec they are used with).
|
||||
*/
|
||||
enum AVVideoEncParamsType type;
|
||||
|
||||
/**
|
||||
* Base quantisation parameter for the frame. The final quantiser for a
|
||||
* given block in a given plane is obtained from this value, possibly
|
||||
* combined with {@code delta_qp} and the per-block delta in a manner
|
||||
* documented for each type.
|
||||
*/
|
||||
int32_t qp;
|
||||
|
||||
/**
|
||||
* Quantisation parameter offset from the base (per-frame) qp for a given
|
||||
* plane (first index) and AC/DC coefficients (second index).
|
||||
*/
|
||||
int32_t delta_qp[4][2];
|
||||
} AVVideoEncParams;
|
||||
|
||||
/**
|
||||
* Data structure for storing block-level encoding information.
|
||||
* It is allocated as a part of AVVideoEncParams and should be retrieved with
|
||||
* av_video_enc_params_block().
|
||||
*
|
||||
* sizeof(AVVideoBlockParams) is not a part of the ABI and new fields may be
|
||||
* added to it.
|
||||
*/
|
||||
typedef struct AVVideoBlockParams {
|
||||
/**
|
||||
* Distance in luma pixels from the top-left corner of the visible frame
|
||||
* to the top-left corner of the block.
|
||||
* Can be negative if top/right padding is present on the coded frame.
|
||||
*/
|
||||
int src_x, src_y;
|
||||
/**
|
||||
* Width and height of the block in luma pixels.
|
||||
*/
|
||||
int w, h;
|
||||
|
||||
/**
|
||||
* Difference between this block's final quantization parameter and the
|
||||
* corresponding per-frame value.
|
||||
*/
|
||||
int32_t delta_qp;
|
||||
} AVVideoBlockParams;
|
||||
|
||||
/*
|
||||
* Get the block at the specified {@code idx}. Must be between 0 and nb_blocks.
|
||||
*/
|
||||
static av_always_inline AVVideoBlockParams*
|
||||
av_video_enc_params_block(AVVideoEncParams *par, unsigned int idx)
|
||||
{
|
||||
av_assert0(idx < par->nb_blocks);
|
||||
return (AVVideoBlockParams *)((uint8_t *)par + par->blocks_offset +
|
||||
idx * par->block_size);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allocates memory for AVVideoEncParams of the given type, plus an array of
|
||||
* {@code nb_blocks} AVVideoBlockParams and initializes the variables. Can be
|
||||
* freed with a normal av_free() call.
|
||||
*
|
||||
* @param out_size if non-NULL, the size in bytes of the resulting data array is
|
||||
* written here.
|
||||
*/
|
||||
AVVideoEncParams *av_video_enc_params_alloc(enum AVVideoEncParamsType type,
|
||||
unsigned int nb_blocks, size_t *out_size);
|
||||
|
||||
/**
|
||||
* Allocates memory for AVEncodeInfoFrame plus an array of
|
||||
* {@code nb_blocks} AVEncodeInfoBlock in the given AVFrame {@code frame}
|
||||
* as AVFrameSideData of type AV_FRAME_DATA_ENCODE_INFO
|
||||
* and initializes the variables.
|
||||
*/
|
||||
AVVideoEncParams*
|
||||
av_video_enc_params_create_side_data(AVFrame *frame, enum AVVideoEncParamsType type,
|
||||
unsigned int nb_blocks);
|
||||
|
||||
#endif /* AVUTIL_VIDEO_ENC_PARAMS_H */
|
||||
Reference in New Issue
Block a user