Commit b5c2d452 authored by Sam Hocevar's avatar Sam Hocevar

* Really fixed strict aliasing breakage here and there.

parent 7e6650a1
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* float32tos16.c : converter from float32 to signed 16 bits integer * float32tos16.c : converter from float32 to signed 16 bits integer
***************************************************************************** *****************************************************************************
* Copyright (C) 2002 VideoLAN * Copyright (C) 2002 VideoLAN
* $Id: float32tos16.c,v 1.14 2003/12/04 16:02:54 sam Exp $ * $Id$
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* *
...@@ -92,12 +92,11 @@ static void DoWork( aout_instance_t * p_aout, aout_filter_t * p_filter, ...@@ -92,12 +92,11 @@ static void DoWork( aout_instance_t * p_aout, aout_filter_t * p_filter,
else *p_out = *p_in * 32768.0; else *p_out = *p_in * 32768.0;
#else #else
/* This is walken's trick based on IEEE float format. */ /* This is walken's trick based on IEEE float format. */
float f_in = *p_in + 384.0; union { float f; int32_t i; } u;
int32_t i_in; u.f = *p_in + 384.0;
i_in = *(int32_t *)(intptr_t)&f_in; if ( u.i > 0x43c07fff ) *p_out = 32767;
if ( i_in > 0x43c07fff ) *p_out = 32767; else if ( u.i < 0x43bf8000 ) *p_out = -32768;
else if ( i_in < 0x43bf8000 ) *p_out = -32768; else *p_out = u.i - 0x43c00000;
else *p_out = i_in - 0x43c00000;
#endif #endif
p_in++; p_out++; p_in++; p_out++;
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* s16tofloat32.c : converter from signed 16 bits integer to float32 * s16tofloat32.c : converter from signed 16 bits integer to float32
***************************************************************************** *****************************************************************************
* Copyright (C) 2002 VideoLAN * Copyright (C) 2002 VideoLAN
* $Id: s16tofloat32.c,v 1.7 2003/12/04 16:02:54 sam Exp $ * $Id$
* *
* Authors: Samuel Hocevar <sam@zoy.org> * Authors: Samuel Hocevar <sam@zoy.org>
* *
...@@ -95,9 +95,9 @@ static void DoWork( aout_instance_t * p_aout, aout_filter_t * p_filter, ...@@ -95,9 +95,9 @@ static void DoWork( aout_instance_t * p_aout, aout_filter_t * p_filter,
/* This is walken's trick based on IEEE float format. On my PIII /* This is walken's trick based on IEEE float format. On my PIII
* this takes 16 seconds to perform one billion conversions, instead * this takes 16 seconds to perform one billion conversions, instead
* of 19 seconds for the above division. */ * of 19 seconds for the above division. */
int32_t i_out = *p_in + 0x43c00000; union { float f; int32_t i; } u;
float f_out = *(float *)(intptr_t)&i_out; u.i = *p_in + 0x43c00000;
*p_out = f_out - 384.0; *p_out = u.f - 384.0;
#endif #endif
p_in--; p_out--; p_in--; p_out--;
......
...@@ -176,7 +176,10 @@ void X11Window::toggleOnTop( bool onTop ) const ...@@ -176,7 +176,10 @@ void X11Window::toggleOnTop( bool onTop ) const
{ {
int i_ret, i_format; int i_ret, i_format;
unsigned long i, i_items, i_bytesafter; unsigned long i, i_items, i_bytesafter;
Atom net_wm_supported, net_wm_state, net_wm_state_on_top, *p_args = NULL; Atom net_wm_supported, net_wm_state, net_wm_state_on_top;
union { Atom *p_atom; unsigned char *p_char; } p_args;
p_args.p_atom = NULL;
net_wm_supported = XInternAtom( XDISPLAY, "_NET_SUPPORTED", False ); net_wm_supported = XInternAtom( XDISPLAY, "_NET_SUPPORTED", False );
...@@ -185,7 +188,7 @@ void X11Window::toggleOnTop( bool onTop ) const ...@@ -185,7 +188,7 @@ void X11Window::toggleOnTop( bool onTop ) const
0, 16384, False, AnyPropertyType, 0, 16384, False, AnyPropertyType,
&net_wm_supported, &net_wm_supported,
&i_format, &i_items, &i_bytesafter, &i_format, &i_items, &i_bytesafter,
(unsigned char **)(intptr_t)&p_args ); (unsigned char **)&p_args );
if( i_ret != Success || i_items == 0 ) return; /* Not supported */ if( i_ret != Success || i_items == 0 ) return; /* Not supported */
...@@ -195,10 +198,10 @@ void X11Window::toggleOnTop( bool onTop ) const ...@@ -195,10 +198,10 @@ void X11Window::toggleOnTop( bool onTop ) const
for( i = 0; i < i_items; i++ ) for( i = 0; i < i_items; i++ )
{ {
if( p_args[i] == net_wm_state_on_top ) break; if( p_args.p_atom[i] == net_wm_state_on_top ) break;
} }
XFree( p_args ); XFree( p_args.p_atom );
if( i == i_items ) return; /* Not supported */ if( i == i_items ) return; /* Not supported */
/* Switch "on top" status */ /* Switch "on top" status */
......
...@@ -2187,7 +2187,10 @@ static void TestNetWMSupport( vout_thread_t *p_vout ) ...@@ -2187,7 +2187,10 @@ static void TestNetWMSupport( vout_thread_t *p_vout )
{ {
int i_ret, i_format; int i_ret, i_format;
unsigned long i, i_items, i_bytesafter; unsigned long i, i_items, i_bytesafter;
Atom net_wm_supported, *p_args = NULL; Atom net_wm_supported;
union { Atom *p_atom; unsigned char *p_char; } p_args;
p_args.p_atom = NULL;
p_vout->p_sys->b_net_wm_state_fullscreen = VLC_FALSE; p_vout->p_sys->b_net_wm_state_fullscreen = VLC_FALSE;
p_vout->p_sys->b_net_wm_state_above = VLC_FALSE; p_vout->p_sys->b_net_wm_state_above = VLC_FALSE;
...@@ -2203,7 +2206,7 @@ static void TestNetWMSupport( vout_thread_t *p_vout ) ...@@ -2203,7 +2206,7 @@ static void TestNetWMSupport( vout_thread_t *p_vout )
0, 16384, False, AnyPropertyType, 0, 16384, False, AnyPropertyType,
&net_wm_supported, &net_wm_supported,
&i_format, &i_items, &i_bytesafter, &i_format, &i_items, &i_bytesafter,
(unsigned char **)(intptr_t)&p_args ); (unsigned char **)&p_args );
if( i_ret != Success || i_items == 0 ) return; if( i_ret != Success || i_items == 0 ) return;
...@@ -2224,23 +2227,23 @@ static void TestNetWMSupport( vout_thread_t *p_vout ) ...@@ -2224,23 +2227,23 @@ static void TestNetWMSupport( vout_thread_t *p_vout )
for( i = 0; i < i_items; i++ ) for( i = 0; i < i_items; i++ )
{ {
if( p_args[i] == p_vout->p_sys->net_wm_state_fullscreen ) if( p_args.p_atom[i] == p_vout->p_sys->net_wm_state_fullscreen )
{ {
msg_Dbg( p_vout, msg_Dbg( p_vout,
"Window manager supports _NET_WM_STATE_FULLSCREEN" ); "Window manager supports _NET_WM_STATE_FULLSCREEN" );
p_vout->p_sys->b_net_wm_state_fullscreen = VLC_TRUE; p_vout->p_sys->b_net_wm_state_fullscreen = VLC_TRUE;
} }
else if( p_args[i] == p_vout->p_sys->net_wm_state_above ) else if( p_args.p_atom[i] == p_vout->p_sys->net_wm_state_above )
{ {
msg_Dbg( p_vout, "Window manager supports _NET_WM_STATE_ABOVE" ); msg_Dbg( p_vout, "Window manager supports _NET_WM_STATE_ABOVE" );
p_vout->p_sys->b_net_wm_state_above = VLC_TRUE; p_vout->p_sys->b_net_wm_state_above = VLC_TRUE;
} }
else if( p_args[i] == p_vout->p_sys->net_wm_state_below ) else if( p_args.p_atom[i] == p_vout->p_sys->net_wm_state_below )
{ {
msg_Dbg( p_vout, "Window manager supports _NET_WM_STATE_BELOW" ); msg_Dbg( p_vout, "Window manager supports _NET_WM_STATE_BELOW" );
p_vout->p_sys->b_net_wm_state_below = VLC_TRUE; p_vout->p_sys->b_net_wm_state_below = VLC_TRUE;
} }
else if( p_args[i] == p_vout->p_sys->net_wm_state_stays_on_top ) else if( p_args.p_atom[i] == p_vout->p_sys->net_wm_state_stays_on_top )
{ {
msg_Dbg( p_vout, msg_Dbg( p_vout,
"Window manager supports _NET_WM_STATE_STAYS_ON_TOP" ); "Window manager supports _NET_WM_STATE_STAYS_ON_TOP" );
...@@ -2248,7 +2251,7 @@ static void TestNetWMSupport( vout_thread_t *p_vout ) ...@@ -2248,7 +2251,7 @@ static void TestNetWMSupport( vout_thread_t *p_vout )
} }
} }
XFree( p_args ); XFree( p_args.p_atom );
} }
/***************************************************************************** /*****************************************************************************
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* effects.c : Effects for the visualization system * effects.c : Effects for the visualization system
***************************************************************************** *****************************************************************************
* Copyright (C) 2002 VideoLAN * Copyright (C) 2002 VideoLAN
* $Id: effects.c,v 1.10 2003/12/04 16:02:54 sam Exp $ * $Id$
* *
* Authors: Clment Stenac <zorglub@via.ecp.fr> * Authors: Clment Stenac <zorglub@via.ecp.fr>
* *
...@@ -146,12 +146,11 @@ int spectrum_Run(visual_effect_t * p_effect, aout_instance_t *p_aout, ...@@ -146,12 +146,11 @@ int spectrum_Run(visual_effect_t * p_effect, aout_instance_t *p_aout,
/* Pasted from float32tos16.c */ /* Pasted from float32tos16.c */
for (i = p_buffer->i_nb_samples * p_effect->i_nb_chans; i--; ) for (i = p_buffer->i_nb_samples * p_effect->i_nb_chans; i--; )
{ {
float f_in = *p_buffl + 384.0; union { float f; int32_t i; } u;
int32_t i_in; u.f = *p_buffl + 384.0;
i_in = *(int32_t *)(intptr_t)&f_in; if(u.i > 0x43c07fff ) * p_buffs = 32767;
if(i_in > 0x43c07fff ) * p_buffs = 32767; else if ( u.i < 0x43bf8000 ) *p_buffs = -32768;
else if ( i_in < 0x43bf8000 ) *p_buffs = -32768; else *p_buffs = u.i - 0x43c00000;
else *p_buffs = i_in - 0x43c00000;
p_buffl++ ; p_buffs++ ; p_buffl++ ; p_buffs++ ;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment