#define CPU_CAPABILITY_SSE2 (1<<7)
#define CPU_CAPABILITY_ALTIVEC (1<<16)
#define CPU_CAPABILITY_FPU (1<<31)
+VLC_EXPORT( unsigned, vlc_CPU, ( void ) );
/*****************************************************************************
* I18n stuff
mad_synth_init( &p_sys->mad_synth );
mad_stream_options( &p_sys->mad_stream, MAD_OPTION_IGNORECRC );
- if( p_this->p_libvlc_global->i_cpu & CPU_CAPABILITY_FPU )
+ if( vlc_CPU() & CPU_CAPABILITY_FPU )
p_filter->fmt_out.i_codec = VLC_FOURCC('f','l','3','2');
else
p_filter->fmt_out.i_codec = VLC_FOURCC('f','i','3','2');
/* Choose the linear PCM format (read the comment above about FPU
and float32) */
- if( p_aout->p_libvlc_global->i_cpu & CPU_CAPABILITY_FPU )
+ if( vlc_CPU() & CPU_CAPABILITY_FPU )
{
i_vlc_pcm_format = VLC_FOURCC('f','l','3','2');
i_snd_pcm_format = SND_PCM_FORMAT_FLOAT;
aout_DateSet( &p_sys->date, 0 );
p_dec->fmt_out.i_cat = AUDIO_ES;
- if (p_this->p_libvlc_global->i_cpu & CPU_CAPABILITY_FPU)
+ if (vlc_CPU() & CPU_CAPABILITY_FPU)
p_dec->fmt_out.i_codec = VLC_FOURCC('f','l','3','2');
else
p_dec->fmt_out.i_codec = AOUT_FMT_S16_NE;
/* Set the faad config */
cfg = faacDecGetCurrentConfiguration( p_sys->hfaad );
- if (p_this->p_libvlc_global->i_cpu & CPU_CAPABILITY_FPU)
+ if (vlc_CPU() & CPU_CAPABILITY_FPU)
cfg->outputFormat = FAAD_FMT_FLOAT;
else
cfg->outputFormat = FAAD_FMT_16BIT;
}
/* Do the actual reordering */
- if( p_dec->p_libvlc_global->i_cpu & CPU_CAPABILITY_FPU )
+ if( vlc_CPU() & CPU_CAPABILITY_FPU )
for( i = 0; i < i_samples; i++ )
for( j = 0; j < i_nb_channels; j++ )
p_out[i * i_nb_channels + pi_chan_table[j]] =
p_context->opaque = (void *)p_this;
/* Set CPU capabilities */
+ unsigned i_cpu = vlc_CPU();
p_context->dsp_mask = 0;
- if( !(p_enc->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMX) )
+ if( !(i_cpu & CPU_CAPABILITY_MMX) )
{
p_context->dsp_mask |= FF_MM_MMX;
}
- if( !(p_enc->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMXEXT) )
+ if( !(i_cpu & CPU_CAPABILITY_MMXEXT) )
{
p_context->dsp_mask |= FF_MM_MMXEXT;
}
- if( !(p_enc->p_libvlc_global->i_cpu & CPU_CAPABILITY_3DNOW) )
+ if( !(i_cpu & CPU_CAPABILITY_3DNOW) )
{
p_context->dsp_mask |= FF_MM_3DNOW;
}
- if( !(p_enc->p_libvlc_global->i_cpu & CPU_CAPABILITY_SSE) )
+ if( !(i_cpu & CPU_CAPABILITY_SSE) )
{
p_context->dsp_mask |= FF_MM_SSE;
p_context->dsp_mask |= FF_MM_SSE2;
add_shortcut( "ffmpeg-deinterlace" );
#endif
- var_Create( p_module->p_libvlc_global, "avcodec", VLC_VAR_MUTEX );
+ var_Create( (vlc_object_t *)p_module->p_libvlc_global, "avcodec",
+ VLC_VAR_MUTEX );
vlc_module_end();
p_context->opaque = (void *)p_this;
/* Set CPU capabilities */
+ unsigned i_cpu = vlc_CPU();
p_context->dsp_mask = 0;
- if( !(p_dec->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMX) )
+ if( !(i_cpu & CPU_CAPABILITY_MMX) )
{
p_context->dsp_mask |= FF_MM_MMX;
}
- if( !(p_dec->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMXEXT) )
+ if( !(i_cpu & CPU_CAPABILITY_MMXEXT) )
{
p_context->dsp_mask |= FF_MM_MMXEXT;
}
- if( !(p_dec->p_libvlc_global->i_cpu & CPU_CAPABILITY_3DNOW) )
+ if( !(i_cpu & CPU_CAPABILITY_3DNOW) )
{
p_context->dsp_mask |= FF_MM_3DNOW;
}
- if( !(p_dec->p_libvlc_global->i_cpu & CPU_CAPABILITY_SSE) )
+ if( !(i_cpu & CPU_CAPABILITY_SSE) )
{
p_context->dsp_mask |= FF_MM_SSE;
}
- if( !(p_dec->p_libvlc_global->i_cpu & CPU_CAPABILITY_SSE2) )
+ if( !(i_cpu & CPU_CAPABILITY_SSE2) )
{
p_context->dsp_mask |= FF_MM_SSE2;
}
decoder_sys_t *p_sys = p_dec->p_sys;
vlc_value_t lockval;
- var_Get( p_dec->p_libvlc_global, "avcodec", &lockval );
+ var_Get( (vlc_object_t *)p_dec->p_libvlc_global, "avcodec", &lockval );
switch( p_sys->i_cat )
{
static int b_ffmpeginit = 0;
vlc_value_t lockval;
- var_Get( p_object->p_libvlc_global, "avcodec", &lockval );
+ var_Get( (vlc_object_t *)p_object->p_libvlc_global, "avcodec", &lockval );
vlc_mutex_lock( lockval.p_address );
/* *** init ffmpeg library (libavcodec) *** */
int i_width, int i_height, int pix_fmt )
{
video_postproc_sys_t *p_sys = (video_postproc_sys_t *)p_data;
- int32_t i_cpu = p_dec->p_libvlc_global->i_cpu;
+ unsigned i_cpu = vlc_CPU();
int i_flags = 0;
/* Set CPU capabilities */
swscale_fast_memcpy = p_filter->p_libvlc->pf_memcpy;
/* Set CPU capabilities */
+ unsigned i_cpu = vlc_CPU();
p_sys->i_cpu_mask = 0;
- if( p_filter->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMX )
+ if( i_cpu & CPU_CAPABILITY_MMX )
{
p_sys->i_cpu_mask |= SWS_CPU_CAPS_MMX;
}
- if( p_filter->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMXEXT )
+ if( i_cpu & CPU_CAPABILITY_MMXEXT )
{
p_sys->i_cpu_mask |= SWS_CPU_CAPS_MMX2;
}
- if( p_filter->p_libvlc_global->i_cpu & CPU_CAPABILITY_3DNOW )
+ if( i_cpu & CPU_CAPABILITY_3DNOW )
{
p_sys->i_cpu_mask |= SWS_CPU_CAPS_3DNOW;
}
- if( p_filter->p_libvlc_global->i_cpu & CPU_CAPABILITY_ALTIVEC )
+ if( i_cpu & CPU_CAPABILITY_ALTIVEC )
{
p_sys->i_cpu_mask |= SWS_CPU_CAPS_ALTIVEC;
}
p_sys->b_preroll = VLC_FALSE;
#if defined( __i386__ ) || defined( __x86_64__ )
- if( p_dec->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMX )
+ if( vlc_CPU() & CPU_CAPABILITY_MMX )
{
i_accel |= MPEG2_ACCEL_X86_MMX;
}
- if( p_dec->p_libvlc_global->i_cpu & CPU_CAPABILITY_3DNOW )
+ if( vlc_CPU() & CPU_CAPABILITY_3DNOW )
{
i_accel |= MPEG2_ACCEL_X86_3DNOW;
}
- if( p_dec->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMXEXT )
+ if( vlc_CPU() & CPU_CAPABILITY_MMXEXT )
{
i_accel |= MPEG2_ACCEL_X86_MMXEXT;
}
#elif defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc64__ )
- if( p_dec->p_libvlc_global->i_cpu & CPU_CAPABILITY_ALTIVEC )
+ if( vlc_CPU() & CPU_CAPABILITY_ALTIVEC )
{
i_accel |= MPEG2_ACCEL_PPC_ALTIVEC;
}
p_sys->param.i_fps_num = p_enc->fmt_in.video.i_frame_rate;
p_sys->param.i_fps_den = p_enc->fmt_in.video.i_frame_rate_base;
}
- if( !(p_enc->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMX) )
+
+ unsigned i_cpu = vlc_CPU();
+ if( !(i_cpu & CPU_CAPABILITY_MMX) )
{
p_sys->param.cpu &= ~X264_CPU_MMX;
}
- if( !(p_enc->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMXEXT) )
+ if( !(i_cpu & CPU_CAPABILITY_MMXEXT) )
{
p_sys->param.cpu &= ~X264_CPU_MMXEXT;
}
- if( !(p_enc->p_libvlc_global->i_cpu & CPU_CAPABILITY_SSE) )
+ if( !(i_cpu & CPU_CAPABILITY_SSE) )
{
p_sys->param.cpu &= ~X264_CPU_SSE;
}
- if( !(p_enc->p_libvlc_global->i_cpu & CPU_CAPABILITY_SSE2) )
+ if( !(i_cpu & CPU_CAPABILITY_SSE2) )
{
p_sys->param.cpu &= ~X264_CPU_SSE2;
}
p_sys->b_skip = 0;
#if defined( __i386__ )
- if( p_dec->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMX )
+ if( vlc_CPU() & CPU_CAPABILITY_MMX )
{
i_accel |= MPEG2_ACCEL_X86_MMX;
}
- if( p_dec->p_libvlc_global->i_cpu & CPU_CAPABILITY_3DNOW )
+ if( vlc_CPU() & CPU_CAPABILITY_3DNOW )
{
i_accel |= MPEG2_ACCEL_X86_3DNOW;
}
- if( p_dec->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMXEXT )
+ if( vlc_CPU() & CPU_CAPABILITY_MMXEXT )
{
i_accel |= MPEG2_ACCEL_X86_MMXEXT;
}
#elif defined( __powerpc__ ) || defined( SYS_DARWIN )
- if( p_dec->p_libvlc_global->i_cpu & CPU_CAPABILITY_ALTIVEC )
+ if( vlc_CPU() & CPU_CAPABILITY_ALTIVEC )
{
i_accel |= MPEG2_ACCEL_PPC_ALTIVEC;
}
id->ff_enc_c = avcodec_alloc_context();
/* Set CPU capabilities */
+ unsigned i_cpu = vlc_CPU();
id->ff_enc_c->dsp_mask = 0;
- if( !(p_stream->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMX) )
+ if( !(i_cpu & CPU_CAPABILITY_MMX) )
{
id->ff_enc_c->dsp_mask |= FF_MM_MMX;
}
- if( !(p_stream->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMXEXT) )
+ if( !(i_cpu & CPU_CAPABILITY_MMXEXT) )
{
id->ff_enc_c->dsp_mask |= FF_MM_MMXEXT;
}
- if( !(p_stream->p_libvlc_global->i_cpu & CPU_CAPABILITY_3DNOW) )
+ if( !(i_cpu & CPU_CAPABILITY_3DNOW) )
{
id->ff_enc_c->dsp_mask |= FF_MM_3DNOW;
}
- if( !(p_stream->p_libvlc_global->i_cpu & CPU_CAPABILITY_SSE) )
+ if( !(i_cpu & CPU_CAPABILITY_SSE) )
{
id->ff_enc_c->dsp_mask |= FF_MM_SSE;
id->ff_enc_c->dsp_mask |= FF_MM_SSE2;
id->ff_enc_c = avcodec_alloc_context();
/* Set CPU capabilities */
+ unsigned i_cpu = vlc_CPU();
id->ff_enc_c->dsp_mask = 0;
- if( !(p_stream->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMX) )
+ if( !(i_cpu & CPU_CAPABILITY_MMX) )
{
id->ff_enc_c->dsp_mask |= FF_MM_MMX;
}
- if( !(p_stream->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMXEXT) )
+ if( !(i_cpu & CPU_CAPABILITY_MMXEXT) )
{
id->ff_enc_c->dsp_mask |= FF_MM_MMXEXT;
}
- if( !(p_stream->p_libvlc_global->i_cpu & CPU_CAPABILITY_3DNOW) )
+ if( !(i_cpu & CPU_CAPABILITY_3DNOW) )
{
id->ff_enc_c->dsp_mask |= FF_MM_3DNOW;
}
- if( !(p_stream->p_libvlc_global->i_cpu & CPU_CAPABILITY_SSE) )
+ if( !(i_cpu & CPU_CAPABILITY_SSE) )
{
id->ff_enc_c->dsp_mask |= FF_MM_SSE;
id->ff_enc_c->dsp_mask |= FF_MM_SSE2;
vlc_mutex_init( p_vout, &p_vout->p_sys->filter_lock );
#if defined(CAN_COMPILE_C_ALTIVEC)
- if( p_vout->p_libvlc_global->i_cpu & CPU_CAPABILITY_ALTIVEC )
+ if( vlc_CPU() & CPU_CAPABILITY_ALTIVEC )
{
p_vout->p_sys->pf_merge = MergeAltivec;
p_vout->p_sys->pf_end_merge = NULL;
else
#endif
#if defined(CAN_COMPILE_SSE)
- if( p_vout->p_libvlc_global->i_cpu & CPU_CAPABILITY_SSE2 )
+ if( vlc_CPU() & CPU_CAPABILITY_SSE2 )
{
p_vout->p_sys->pf_merge = MergeSSE2;
p_vout->p_sys->pf_end_merge = EndMMX;
else
#endif
#if defined(CAN_COMPILE_MMXEXT)
- if( p_vout->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMXEXT )
+ if( vlc_CPU() & CPU_CAPABILITY_MMXEXT )
{
p_vout->p_sys->pf_merge = MergeMMXEXT;
p_vout->p_sys->pf_end_merge = EndMMX;
else
#endif
#if defined(CAN_COMPILE_3DNOW)
- if( p_vout->p_libvlc_global->i_cpu & CPU_CAPABILITY_3DNOW )
+ if( vlc_CPU() & CPU_CAPABILITY_3DNOW )
{
p_vout->p_sys->pf_merge = Merge3DNow;
p_vout->p_sys->pf_end_merge = End3DNow;
uint8_t *src = &p_pic->p[i_plane].p_pixels[8*y*i_src];
#ifdef CAN_COMPILE_MMXEXT
- if( p_vout->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMXEXT )
+ if( vlc_CPU & CPU_CAPABILITY_MMXEXT )
XDeintBand8x8MMXEXT( dst, i_dst, src, i_src, i_mbx, i_modx );
else
#endif
}
#ifdef CAN_COMPILE_MMXEXT
- if( p_vout->p_libvlc_global->i_cpu & CPU_CAPABILITY_MMXEXT )
+ if( vlc_CPU & CPU_CAPABILITY_MMXEXT )
emms();
#endif
}
if( !libvlc_global.b_ready )
{
/* Guess what CPU we have */
- libvlc_global.i_cpu = CPUCapabilities();
+ cpu_flags = CPUCapabilities();
/* The module bank will be initialized later */
libvlc_global.p_module_bank = NULL;
msg_Flush( p_libvlc );
if( !config_GetInt( p_libvlc, "fpu" ) )
- libvlc_global.i_cpu &= ~CPU_CAPABILITY_FPU;
+ cpu_flags &= ~CPU_CAPABILITY_FPU;
#if defined( __i386__ ) || defined( __x86_64__ )
if( !config_GetInt( p_libvlc, "mmx" ) )
- libvlc_global.i_cpu &= ~CPU_CAPABILITY_MMX;
+ cpu_flags &= ~CPU_CAPABILITY_MMX;
if( !config_GetInt( p_libvlc, "3dn" ) )
- libvlc_global.i_cpu &= ~CPU_CAPABILITY_3DNOW;
+ cpu_flags &= ~CPU_CAPABILITY_3DNOW;
if( !config_GetInt( p_libvlc, "mmxext" ) )
- libvlc_global.i_cpu &= ~CPU_CAPABILITY_MMXEXT;
+ cpu_flags &= ~CPU_CAPABILITY_MMXEXT;
if( !config_GetInt( p_libvlc, "sse" ) )
- libvlc_global.i_cpu &= ~CPU_CAPABILITY_SSE;
+ cpu_flags &= ~CPU_CAPABILITY_SSE;
if( !config_GetInt( p_libvlc, "sse2" ) )
- libvlc_global.i_cpu &= ~CPU_CAPABILITY_SSE2;
+ cpu_flags &= ~CPU_CAPABILITY_SSE2;
#endif
#if defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc64__ )
if( !config_GetInt( p_libvlc, "altivec" ) )
- libvlc_global.i_cpu &= ~CPU_CAPABILITY_ALTIVEC;
+ cpu_flags &= ~CPU_CAPABILITY_ALTIVEC;
#endif
#define PRINT_CAPABILITY( capability, string ) \
- if( libvlc_global.i_cpu & capability ) \
+ if( vlc_CPU() & capability ) \
{ \
strncat( p_capabilities, string " ", \
sizeof(p_capabilities) - strlen(p_capabilities) ); \
static jmp_buf env;
static int i_illegal;
#if defined( __i386__ ) || defined( __x86_64__ )
-static char *psz_capability;
+static const char *psz_capability;
#endif
#endif
*****************************************************************************
* This function is called to list extensions the CPU may have.
*****************************************************************************/
-uint32_t CPUCapabilities( void )
+static uint32_t CPUCapabilities( void )
{
volatile uint32_t i_capabilities = CPU_CAPABILITY_NONE;
}
#endif
+
+extern uint32_t cpu_flags = 0;
+
+
+/*****************************************************************************
+ * vlc_CPU: get pre-computed CPU capability flags
+ ****************************************************************************/
+unsigned vlc_CPU (void)
+{
+ return cpu_flags;
+}
+