early-access version 1680
This commit is contained in:
1
externals/ffmpeg/libavutil/frame.c
vendored
1
externals/ffmpeg/libavutil/frame.c
vendored
@@ -851,6 +851,7 @@ const char *av_frame_side_data_name(enum AVFrameSideDataType type)
|
||||
case AV_FRAME_DATA_DYNAMIC_HDR_PLUS: return "HDR Dynamic Metadata SMPTE2094-40 (HDR10+)";
|
||||
case AV_FRAME_DATA_REGIONS_OF_INTEREST: return "Regions Of Interest";
|
||||
case AV_FRAME_DATA_VIDEO_ENC_PARAMS: return "Video encoding parameters";
|
||||
case AV_FRAME_DATA_SEI_UNREGISTERED: return "H.26[45] User Data Unregistered SEI message";
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
8
externals/ffmpeg/libavutil/frame.h
vendored
8
externals/ffmpeg/libavutil/frame.h
vendored
@@ -184,6 +184,14 @@ enum AVFrameSideDataType {
|
||||
* Encoding parameters for a video frame, as described by AVVideoEncParams.
|
||||
*/
|
||||
AV_FRAME_DATA_VIDEO_ENC_PARAMS,
|
||||
|
||||
/**
|
||||
* User data unregistered metadata associated with a video frame.
|
||||
* This is the H.26[45] UDU SEI message, and shouldn't be used for any other purpose
|
||||
* The data is stored as uint8_t in AVFrameSideData.data which is 16 bytes of
|
||||
* uuid_iso_iec_11578 followed by AVFrameSideData.size - 16 bytes of user_data_payload_byte.
|
||||
*/
|
||||
AV_FRAME_DATA_SEI_UNREGISTERED,
|
||||
};
|
||||
|
||||
enum AVActiveFormatDescription {
|
||||
|
3
externals/ffmpeg/libavutil/hwcontext_vaapi.c
vendored
3
externals/ffmpeg/libavutil/hwcontext_vaapi.c
vendored
@@ -136,6 +136,9 @@ static const VAAPIFormatDescriptor vaapi_format_map[] = {
|
||||
#endif
|
||||
MAP(ARGB, RGB32, ARGB, 0),
|
||||
MAP(XRGB, RGB32, 0RGB, 0),
|
||||
#ifdef VA_FOURCC_X2R10G10B10
|
||||
MAP(X2R10G10B10, RGB32_10, X2RGB10, 0),
|
||||
#endif
|
||||
};
|
||||
#undef MAP
|
||||
|
||||
|
21
externals/ffmpeg/libavutil/hwcontext_vdpau.c
vendored
21
externals/ffmpeg/libavutil/hwcontext_vdpau.c
vendored
@@ -39,8 +39,8 @@ typedef struct VDPAUDeviceContext {
|
||||
VdpVideoSurfaceCreate *surf_create;
|
||||
VdpVideoSurfaceDestroy *surf_destroy;
|
||||
|
||||
enum AVPixelFormat *pix_fmts[3];
|
||||
int nb_pix_fmts[3];
|
||||
enum AVPixelFormat *pix_fmts[8];
|
||||
int nb_pix_fmts[8];
|
||||
} VDPAUDeviceContext;
|
||||
|
||||
typedef struct VDPAUFramesContext {
|
||||
@@ -61,6 +61,10 @@ typedef struct VDPAUPixFmtMap {
|
||||
static const VDPAUPixFmtMap pix_fmts_420[] = {
|
||||
{ VDP_YCBCR_FORMAT_NV12, AV_PIX_FMT_NV12 },
|
||||
{ VDP_YCBCR_FORMAT_YV12, AV_PIX_FMT_YUV420P },
|
||||
#ifdef VDP_YCBCR_FORMAT_P016
|
||||
{ VDP_YCBCR_FORMAT_P016, AV_PIX_FMT_P016 },
|
||||
{ VDP_YCBCR_FORMAT_P010, AV_PIX_FMT_P010 },
|
||||
#endif
|
||||
{ 0, AV_PIX_FMT_NONE, },
|
||||
};
|
||||
|
||||
@@ -75,6 +79,9 @@ static const VDPAUPixFmtMap pix_fmts_422[] = {
|
||||
static const VDPAUPixFmtMap pix_fmts_444[] = {
|
||||
#ifdef VDP_YCBCR_FORMAT_Y_U_V_444
|
||||
{ VDP_YCBCR_FORMAT_Y_U_V_444, AV_PIX_FMT_YUV444P },
|
||||
#endif
|
||||
#ifdef VDP_YCBCR_FORMAT_P016
|
||||
{VDP_YCBCR_FORMAT_Y_U_V_444_16, AV_PIX_FMT_YUV444P16},
|
||||
#endif
|
||||
{ 0, AV_PIX_FMT_NONE, },
|
||||
};
|
||||
@@ -87,6 +94,13 @@ static const struct {
|
||||
{ VDP_CHROMA_TYPE_420, AV_PIX_FMT_YUV420P, pix_fmts_420 },
|
||||
{ VDP_CHROMA_TYPE_422, AV_PIX_FMT_YUV422P, pix_fmts_422 },
|
||||
{ VDP_CHROMA_TYPE_444, AV_PIX_FMT_YUV444P, pix_fmts_444 },
|
||||
#ifdef VDP_YCBCR_FORMAT_P016
|
||||
{ VDP_CHROMA_TYPE_420_16, AV_PIX_FMT_YUV420P10, pix_fmts_420 },
|
||||
{ VDP_CHROMA_TYPE_420_16, AV_PIX_FMT_YUV420P12, pix_fmts_420 },
|
||||
{ VDP_CHROMA_TYPE_422_16, AV_PIX_FMT_YUV422P10, pix_fmts_422 },
|
||||
{ VDP_CHROMA_TYPE_444_16, AV_PIX_FMT_YUV444P10, pix_fmts_444 },
|
||||
{ VDP_CHROMA_TYPE_444_16, AV_PIX_FMT_YUV444P12, pix_fmts_444 },
|
||||
#endif
|
||||
};
|
||||
|
||||
static int count_pixfmts(const VDPAUPixFmtMap *map)
|
||||
@@ -354,6 +368,9 @@ static int vdpau_transfer_data_from(AVHWFramesContext *ctx, AVFrame *dst,
|
||||
if ((vdpau_format == VDP_YCBCR_FORMAT_YV12)
|
||||
#ifdef VDP_YCBCR_FORMAT_Y_U_V_444
|
||||
|| (vdpau_format == VDP_YCBCR_FORMAT_Y_U_V_444)
|
||||
#endif
|
||||
#ifdef VDP_YCBCR_FORMAT_P016
|
||||
|| (vdpau_format == VDP_YCBCR_FORMAT_Y_U_V_444_16)
|
||||
#endif
|
||||
)
|
||||
FFSWAP(void*, data[1], data[2]);
|
||||
|
40
externals/ffmpeg/libavutil/internal.h
vendored
40
externals/ffmpeg/libavutil/internal.h
vendored
@@ -137,41 +137,8 @@
|
||||
# define LOCAL_ALIGNED_32(t, v, ...) E1(LOCAL_ALIGNED_A(32, t, v, __VA_ARGS__,,))
|
||||
#endif
|
||||
|
||||
#define FF_ALLOC_OR_GOTO(ctx, p, size, label)\
|
||||
{\
|
||||
p = av_malloc(size);\
|
||||
if (!(p) && (size) != 0) {\
|
||||
av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\
|
||||
goto label;\
|
||||
}\
|
||||
}
|
||||
|
||||
#define FF_ALLOCZ_OR_GOTO(ctx, p, size, label)\
|
||||
{\
|
||||
p = av_mallocz(size);\
|
||||
if (!(p) && (size) != 0) {\
|
||||
av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\
|
||||
goto label;\
|
||||
}\
|
||||
}
|
||||
|
||||
#define FF_ALLOC_ARRAY_OR_GOTO(ctx, p, nelem, elsize, label)\
|
||||
{\
|
||||
p = av_malloc_array(nelem, elsize);\
|
||||
if (!p) {\
|
||||
av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\
|
||||
goto label;\
|
||||
}\
|
||||
}
|
||||
|
||||
#define FF_ALLOCZ_ARRAY_OR_GOTO(ctx, p, nelem, elsize, label)\
|
||||
{\
|
||||
p = av_mallocz_array(nelem, elsize);\
|
||||
if (!p) {\
|
||||
av_log(ctx, AV_LOG_ERROR, "Cannot allocate memory.\n");\
|
||||
goto label;\
|
||||
}\
|
||||
}
|
||||
#define FF_ALLOC_TYPED_ARRAY(p, nelem) (p = av_malloc_array(nelem, sizeof(*p)))
|
||||
#define FF_ALLOCZ_TYPED_ARRAY(p, nelem) (p = av_mallocz_array(nelem, sizeof(*p)))
|
||||
|
||||
#include "libm.h"
|
||||
|
||||
@@ -353,7 +320,8 @@ void ff_check_pixfmt_descriptors(void);
|
||||
/**
|
||||
* Set a dictionary value to an ISO-8601 compliant timestamp string.
|
||||
*
|
||||
* @param s AVFormatContext
|
||||
* @param dict pointer to a pointer to a dictionary struct. If *dict is NULL
|
||||
* a dictionary struct is allocated and put in *dict.
|
||||
* @param key metadata key
|
||||
* @param timestamp unix timestamp in microseconds
|
||||
* @return <0 on error
|
||||
|
18
externals/ffmpeg/libavutil/log.h
vendored
18
externals/ffmpeg/libavutil/log.h
vendored
@@ -112,6 +112,7 @@ typedef struct AVClass {
|
||||
*/
|
||||
void* (*child_next)(void *obj, void *prev);
|
||||
|
||||
#if FF_API_CHILD_CLASS_NEXT
|
||||
/**
|
||||
* Return an AVClass corresponding to the next potential
|
||||
* AVOptions-enabled child.
|
||||
@@ -120,7 +121,9 @@ typedef struct AVClass {
|
||||
* child_next iterates over _already existing_ objects, while
|
||||
* child_class_next iterates over _all possible_ children.
|
||||
*/
|
||||
attribute_deprecated
|
||||
const struct AVClass* (*child_class_next)(const struct AVClass *prev);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Category used for visualization (like color)
|
||||
@@ -140,6 +143,21 @@ typedef struct AVClass {
|
||||
* available since version (52.12)
|
||||
*/
|
||||
int (*query_ranges)(struct AVOptionRanges **, void *obj, const char *key, int flags);
|
||||
|
||||
/**
|
||||
* Iterate over the AVClasses corresponding to potential AVOptions-enabled
|
||||
* children.
|
||||
*
|
||||
* @param iter pointer to opaque iteration state. The caller must initialize
|
||||
* *iter to NULL before the first call.
|
||||
* @return AVClass for the next AVOptions-enabled child or NULL if there are
|
||||
* no more such children.
|
||||
*
|
||||
* @note The difference between child_next and this is that child_next
|
||||
* iterates over _already existing_ objects, while child_class_iterate
|
||||
* iterates over _all possible_ children.
|
||||
*/
|
||||
const struct AVClass* (*child_class_iterate)(void **iter);
|
||||
} AVClass;
|
||||
|
||||
/**
|
||||
|
28
externals/ffmpeg/libavutil/opt.c
vendored
28
externals/ffmpeg/libavutil/opt.c
vendored
@@ -1679,8 +1679,9 @@ const AVOption *av_opt_find2(void *obj, const char *name, const char *unit,
|
||||
|
||||
if (search_flags & AV_OPT_SEARCH_CHILDREN) {
|
||||
if (search_flags & AV_OPT_SEARCH_FAKE_OBJ) {
|
||||
const AVClass *child = NULL;
|
||||
while (child = av_opt_child_class_next(c, child))
|
||||
void *iter = NULL;
|
||||
const AVClass *child;
|
||||
while (child = av_opt_child_class_iterate(c, &iter))
|
||||
if (o = av_opt_find2(&child, name, unit, opt_flags, search_flags, NULL))
|
||||
return o;
|
||||
} else {
|
||||
@@ -1715,12 +1716,31 @@ void *av_opt_child_next(void *obj, void *prev)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#if FF_API_CHILD_CLASS_NEXT
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev)
|
||||
{
|
||||
if (parent->child_class_next)
|
||||
return parent->child_class_next(prev);
|
||||
return NULL;
|
||||
}
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
const AVClass *av_opt_child_class_iterate(const AVClass *parent, void **iter)
|
||||
{
|
||||
if (parent->child_class_iterate)
|
||||
return parent->child_class_iterate(iter);
|
||||
#if FF_API_CHILD_CLASS_NEXT
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
if (parent->child_class_next) {
|
||||
*iter = parent->child_class_next(*iter);
|
||||
return *iter;
|
||||
}
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void *av_opt_ptr(const AVClass *class, void *obj, const char *name)
|
||||
{
|
||||
@@ -2100,6 +2120,8 @@ int av_opt_serialize(void *obj, int opt_flags, int flags, char **buffer,
|
||||
av_freep(&buf);
|
||||
}
|
||||
}
|
||||
av_bprint_finalize(&bprint, buffer);
|
||||
ret = av_bprint_finalize(&bprint, buffer);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
31
externals/ffmpeg/libavutil/opt.h
vendored
31
externals/ffmpeg/libavutil/opt.h
vendored
@@ -114,7 +114,7 @@
|
||||
* 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
|
||||
* implement AVClass.child_next() and AVClass.child_class_iterate() in the
|
||||
* parent struct's AVClass.
|
||||
* Assuming that the test_struct from above now also contains a
|
||||
* child_struct field:
|
||||
@@ -143,23 +143,25 @@
|
||||
* return t->child_struct;
|
||||
* return NULL
|
||||
* }
|
||||
* const AVClass child_class_next(const AVClass *prev)
|
||||
* const AVClass child_class_iterate(void **iter)
|
||||
* {
|
||||
* return prev ? NULL : &child_class;
|
||||
* const AVClass *c = *iter ? NULL : &child_class;
|
||||
* *iter = (void*)(uintptr_t)c;
|
||||
* return c;
|
||||
* }
|
||||
* @endcode
|
||||
* Putting child_next() and child_class_next() as defined above into
|
||||
* Putting child_next() and child_class_iterate() 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()
|
||||
* and child_class_iterate() are needed. The distinction is that child_next()
|
||||
* iterates over actually existing objects, while child_class_iterate()
|
||||
* 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
|
||||
* iterating. OTOH child_class_iterate() on AVCodecContext.av_class will
|
||||
* iterate over all available codecs with private options.
|
||||
*
|
||||
* @subsection avoptions_implement_named_constants Named constants
|
||||
@@ -194,7 +196,7 @@
|
||||
* 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
|
||||
* av_opt_child_class_iterate() 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
|
||||
@@ -646,13 +648,26 @@ const AVOption *av_opt_next(const void *obj, const AVOption *prev);
|
||||
*/
|
||||
void *av_opt_child_next(void *obj, void *prev);
|
||||
|
||||
#if FF_API_CHILD_CLASS_NEXT
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
* @deprecated use av_opt_child_class_iterate
|
||||
*/
|
||||
attribute_deprecated
|
||||
const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Iterate over potential AVOptions-enabled children of parent.
|
||||
*
|
||||
* @param iter a pointer where iteration state is stored.
|
||||
* @return AVClass corresponding to next potential child or NULL
|
||||
*/
|
||||
const AVClass *av_opt_child_class_iterate(const AVClass *parent, void **iter);
|
||||
|
||||
/**
|
||||
* @defgroup opt_set_funcs Option setting functions
|
||||
|
24
externals/ffmpeg/libavutil/pixdesc.c
vendored
24
externals/ffmpeg/libavutil/pixdesc.c
vendored
@@ -252,6 +252,30 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
|
||||
},
|
||||
.flags = AV_PIX_FMT_FLAG_RGB,
|
||||
},
|
||||
[AV_PIX_FMT_X2RGB10LE] = {
|
||||
.name = "x2rgb10le",
|
||||
.nb_components= 3,
|
||||
.log2_chroma_w= 0,
|
||||
.log2_chroma_h= 0,
|
||||
.comp = {
|
||||
{ 0, 4, 2, 4, 10, 3, 9, 2 }, /* R */
|
||||
{ 0, 4, 1, 2, 10, 3, 9, 3 }, /* G */
|
||||
{ 0, 4, 0, 0, 10, 3, 9, 4 }, /* B */
|
||||
},
|
||||
.flags = AV_PIX_FMT_FLAG_RGB,
|
||||
},
|
||||
[AV_PIX_FMT_X2RGB10BE] = {
|
||||
.name = "x2rgb10be",
|
||||
.nb_components= 3,
|
||||
.log2_chroma_w= 0,
|
||||
.log2_chroma_h= 0,
|
||||
.comp = {
|
||||
{ 0, 4, 0, 4, 10, 3, 9, 2 }, /* R */
|
||||
{ 0, 4, 1, 2, 10, 3, 9, 3 }, /* G */
|
||||
{ 0, 4, 2, 0, 10, 3, 9, 4 }, /* B */
|
||||
},
|
||||
.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE,
|
||||
},
|
||||
[AV_PIX_FMT_YUV422P] = {
|
||||
.name = "yuv422p",
|
||||
.nb_components = 3,
|
||||
|
3
externals/ffmpeg/libavutil/pixfmt.h
vendored
3
externals/ffmpeg/libavutil/pixfmt.h
vendored
@@ -358,6 +358,8 @@ enum AVPixelFormat {
|
||||
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_X2RGB10LE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), little-endian, X=unused/undefined
|
||||
AV_PIX_FMT_X2RGB10BE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), big-endian, X=unused/undefined
|
||||
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
|
||||
};
|
||||
|
||||
@@ -447,6 +449,7 @@ enum AVPixelFormat {
|
||||
#define AV_PIX_FMT_P016 AV_PIX_FMT_NE(P016BE, P016LE)
|
||||
|
||||
#define AV_PIX_FMT_Y210 AV_PIX_FMT_NE(Y210BE, Y210LE)
|
||||
#define AV_PIX_FMT_X2RGB10 AV_PIX_FMT_NE(X2RGB10BE, X2RGB10LE)
|
||||
|
||||
/**
|
||||
* Chromaticity coordinates of the source primaries.
|
||||
|
32
externals/ffmpeg/libavutil/timecode.c
vendored
32
externals/ffmpeg/libavutil/timecode.c
vendored
@@ -81,6 +81,38 @@ uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum)
|
||||
(hh % 10); // units of hours
|
||||
}
|
||||
|
||||
uint32_t av_timecode_get_smpte(AVRational rate, int drop, int hh, int mm, int ss, int ff)
|
||||
{
|
||||
uint32_t tc = 0;
|
||||
uint32_t frames;
|
||||
|
||||
/* For SMPTE 12-M timecodes, frame count is a special case if > 30 FPS.
|
||||
See SMPTE ST 12-1:2014 Sec 12.1 for more info. */
|
||||
if (av_cmp_q(rate, (AVRational) {30, 1}) == 1) {
|
||||
frames = ff / 2;
|
||||
if (ff % 2 == 1) {
|
||||
if (av_cmp_q(rate, (AVRational) {50, 1}) == 0)
|
||||
tc |= (1 << 7);
|
||||
else
|
||||
tc |= (1 << 23);
|
||||
}
|
||||
} else {
|
||||
frames = ff;
|
||||
}
|
||||
|
||||
tc |= drop << 30;
|
||||
tc |= (frames / 10) << 28;
|
||||
tc |= (frames % 10) << 24;
|
||||
tc |= (ss / 10) << 20;
|
||||
tc |= (ss % 10) << 16;
|
||||
tc |= (mm / 10) << 12;
|
||||
tc |= (mm % 10) << 8;
|
||||
tc |= (hh / 10) << 4;
|
||||
tc |= (hh % 10);
|
||||
|
||||
return tc;
|
||||
}
|
||||
|
||||
char *av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum)
|
||||
{
|
||||
int fps = tc->fps;
|
||||
|
13
externals/ffmpeg/libavutil/timecode.h
vendored
13
externals/ffmpeg/libavutil/timecode.h
vendored
@@ -70,6 +70,19 @@ int av_timecode_adjust_ntsc_framenum2(int framenum, int fps);
|
||||
*/
|
||||
uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum);
|
||||
|
||||
/**
|
||||
* Convert sei info to SMPTE 12M binary representation.
|
||||
*
|
||||
* @param rate frame rate in rational form
|
||||
* @param drop drop flag
|
||||
* @param hh hour
|
||||
* @param mm minute
|
||||
* @param ss second
|
||||
* @param ff frame number
|
||||
* @return the SMPTE binary representation
|
||||
*/
|
||||
uint32_t av_timecode_get_smpte(AVRational rate, int drop, int hh, int mm, int ss, int ff);
|
||||
|
||||
/**
|
||||
* Load timecode string in buf.
|
||||
*
|
||||
|
6
externals/ffmpeg/libavutil/version.h
vendored
6
externals/ffmpeg/libavutil/version.h
vendored
@@ -79,7 +79,7 @@
|
||||
*/
|
||||
|
||||
#define LIBAVUTIL_VERSION_MAJOR 56
|
||||
#define LIBAVUTIL_VERSION_MINOR 51
|
||||
#define LIBAVUTIL_VERSION_MINOR 55
|
||||
#define LIBAVUTIL_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
||||
@@ -129,7 +129,9 @@
|
||||
#ifndef FF_API_PSEUDOPAL
|
||||
#define FF_API_PSEUDOPAL (LIBAVUTIL_VERSION_MAJOR < 57)
|
||||
#endif
|
||||
|
||||
#ifndef FF_API_CHILD_CLASS_NEXT
|
||||
#define FF_API_CHILD_CLASS_NEXT (LIBAVUTIL_VERSION_MAJOR < 57)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
Reference in New Issue
Block a user