mirror of
https://git.videolan.org/git/ffmpeg.git
synced 2024-08-21 08:45:06 +02:00
Detect and check for CMOV.
Some MMX-only CPUs do not have support for CMOV. All SSE/MMX2 CPUs should be fine, thus no check was added to those functions. See also https://sourceforge.net/tracker/?func=detail&aid=3358347&group_id=205275&atid=992986 Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
This commit is contained in:
parent
cd1c12b5c5
commit
b223035511
@ -188,7 +188,8 @@ void ff_h264_pred_init_x86(H264PredContext *h, int codec_id, const int bit_depth
|
||||
if (chroma_format_idc == 1)
|
||||
h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_plane_mmx;
|
||||
if (codec_id == CODEC_ID_SVQ3) {
|
||||
h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_svq3_mmx;
|
||||
if (mm_flags & AV_CPU_FLAG_CMOV)
|
||||
h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_svq3_mmx;
|
||||
} else if (codec_id == CODEC_ID_RV40) {
|
||||
h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_rv40_mmx;
|
||||
} else {
|
||||
|
@ -361,7 +361,8 @@ void ff_h264dsp_init_x86(H264DSPContext *c, const int bit_depth, const int chrom
|
||||
if (chroma_format_idc == 1)
|
||||
c->h264_idct_add8 = ff_h264_idct_add8_8_mmx;
|
||||
c->h264_idct_add16intra = ff_h264_idct_add16intra_8_mmx;
|
||||
c->h264_luma_dc_dequant_idct= ff_h264_luma_dc_dequant_idct_mmx;
|
||||
if (mm_flags & AV_CPU_FLAG_CMOV)
|
||||
c->h264_luma_dc_dequant_idct= ff_h264_luma_dc_dequant_idct_mmx;
|
||||
|
||||
if (mm_flags & AV_CPU_FLAG_MMX2) {
|
||||
c->h264_idct_dc_add = ff_h264_idct_dc_add_8_mmx2;
|
||||
|
@ -38,6 +38,7 @@
|
||||
#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions
|
||||
#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions
|
||||
#define AV_CPU_FLAG_AVX 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used
|
||||
#define AV_CPU_FLAG_CMOV 0x1000000 ///< supports cmov instruction
|
||||
#define AV_CPU_FLAG_XOP 0x0400 ///< Bulldozer XOP functions
|
||||
#define AV_CPU_FLAG_FMA4 0x0800 ///< Bulldozer FMA4 functions
|
||||
#define AV_CPU_FLAG_IWMMXT 0x0100 ///< XScale IWMMXT
|
||||
|
@ -83,6 +83,8 @@ int ff_get_cpu_flags_x86(void)
|
||||
cpuid(1, eax, ebx, ecx, std_caps);
|
||||
family = ((eax>>8)&0xf) + ((eax>>20)&0xff);
|
||||
model = ((eax>>4)&0xf) + ((eax>>12)&0xf0);
|
||||
if (std_caps & (1<<15))
|
||||
rval |= AV_CPU_FLAG_CMOV;
|
||||
if (std_caps & (1<<23))
|
||||
rval |= AV_CPU_FLAG_MMX;
|
||||
if (std_caps & (1<<25))
|
||||
|
Loading…
Reference in New Issue
Block a user