mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
Merge commit 'e6bff23f1e11aefb16a2b5d6ee72bf7469c5a66e'
* commit 'e6bff23f1e11aefb16a2b5d6ee72bf7469c5a66e': cpu: add a function for querying maximum required data alignment Adapted to work with the arbitrary runtime cpuflag changes av_force_cpu_flags() can generate. Merged-by: James Almer <jamrial@gmail.com>
This commit is contained in:
commit
522f877086
@ -15,6 +15,9 @@ libavutil: 2015-08-28
|
||||
|
||||
API changes, most recent first:
|
||||
|
||||
2017-09-27 - xxxxxxx - lavu 55.77.100 / lavu 55.31.0 - cpu.h
|
||||
Add av_cpu_max_align() for querying maximum required data alignment.
|
||||
|
||||
2017-09-26 - xxxxxxx - lavc 57.106.102 - avcodec.h
|
||||
Deprecate AVCodecContext.refcounted_frames. This was useful for deprecated
|
||||
API only (avcodec_decode_video2/avcodec_decode_audio4). The new decode APIs
|
||||
|
@ -16,9 +16,11 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <stdatomic.h>
|
||||
|
||||
#include "attributes.h"
|
||||
#include "cpu.h"
|
||||
#include "cpu_internal.h"
|
||||
#include "config.h"
|
||||
@ -299,3 +301,40 @@ int av_cpu_count(void)
|
||||
|
||||
return nb_cpus;
|
||||
}
|
||||
|
||||
size_t av_cpu_max_align(void)
|
||||
{
|
||||
int av_unused flags = av_get_cpu_flags();
|
||||
|
||||
#if ARCH_ARM || ARCH_AARCH64
|
||||
if (flags & AV_CPU_FLAG_NEON)
|
||||
return 16;
|
||||
#elif ARCH_PPC
|
||||
if (flags & (AV_CPU_FLAG_ALTIVEC |
|
||||
AV_CPU_FLAG_VSX |
|
||||
AV_CPU_FLAG_POWER8))
|
||||
return 16;
|
||||
#elif ARCH_X86
|
||||
if (flags & (AV_CPU_FLAG_AVX2 |
|
||||
AV_CPU_FLAG_AVX |
|
||||
AV_CPU_FLAG_XOP |
|
||||
AV_CPU_FLAG_FMA4 |
|
||||
AV_CPU_FLAG_FMA3 |
|
||||
AV_CPU_FLAG_AVXSLOW))
|
||||
return 32;
|
||||
if (flags & (AV_CPU_FLAG_AESNI |
|
||||
AV_CPU_FLAG_SSE42 |
|
||||
AV_CPU_FLAG_SSE4 |
|
||||
AV_CPU_FLAG_SSSE3 |
|
||||
AV_CPU_FLAG_SSE3 |
|
||||
AV_CPU_FLAG_SSE2 |
|
||||
AV_CPU_FLAG_SSE |
|
||||
AV_CPU_FLAG_ATOM |
|
||||
AV_CPU_FLAG_SSSE3SLOW |
|
||||
AV_CPU_FLAG_SSE3SLOW |
|
||||
AV_CPU_FLAG_SSE2SLOW))
|
||||
return 16;
|
||||
#endif
|
||||
|
||||
return 8;
|
||||
}
|
||||
|
@ -21,6 +21,8 @@
|
||||
#ifndef AVUTIL_CPU_H
|
||||
#define AVUTIL_CPU_H
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include "attributes.h"
|
||||
|
||||
#define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */
|
||||
@ -113,4 +115,15 @@ int av_parse_cpu_caps(unsigned *flags, const char *s);
|
||||
*/
|
||||
int av_cpu_count(void);
|
||||
|
||||
/**
|
||||
* Get the maximum data alignment that may be required by FFmpeg.
|
||||
*
|
||||
* Note that this is affected by the build configuration and the CPU flags mask,
|
||||
* so e.g. if the CPU supports AVX, but libavutil has been built with
|
||||
* --disable-avx or the AV_CPU_FLAG_AVX flag has been disabled through
|
||||
* av_set_cpu_flags_mask(), then this function will behave as if AVX is not
|
||||
* present.
|
||||
*/
|
||||
size_t av_cpu_max_align(void);
|
||||
|
||||
#endif /* AVUTIL_CPU_H */
|
||||
|
@ -80,7 +80,7 @@
|
||||
|
||||
|
||||
#define LIBAVUTIL_VERSION_MAJOR 55
|
||||
#define LIBAVUTIL_VERSION_MINOR 76
|
||||
#define LIBAVUTIL_VERSION_MINOR 77
|
||||
#define LIBAVUTIL_VERSION_MICRO 100
|
||||
|
||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
||||
|
Loading…
Reference in New Issue
Block a user