}
static vlc_bool_t is_valid( vout_sys_t *p_sys )
{
- int i, s=0;
+ int i, j, d=0;
if( p_sys->b_blackslot == VLC_FALSE ) return VLC_TRUE;
for( i = 0; i < p_sys->i_cols * p_sys->i_rows; i++ )
{
- if( (p_sys->i_cols*p_sys->i_rows+i-p_sys->pi_order[i])%2 ) s++;
- else s--;
+ if( p_sys->pi_order[i] == p_sys->i_cols * p_sys->i_rows - 1 )
+ {
+ d += i / p_sys->i_cols + 1;
+ continue;
+ }
+ for( j = i+1; j < p_sys->i_cols * p_sys->i_rows; j++ )
+ {
+ if( p_sys->pi_order[j] == p_sys->i_cols * p_sys->i_rows - 1 )
+ continue;
+ if( p_sys->pi_order[i] > p_sys->pi_order[j] ) d++;
+ }
}
- if( s!=0 ) return VLC_FALSE;
+ if( d%2!=0 ) return VLC_FALSE;
else return VLC_TRUE;
}
static void shuffle( vout_sys_t *p_sys )
}
p_sys->b_finished = finished( p_sys );
} while( p_sys->b_finished == VLC_TRUE
- && is_valid( p_sys ) == VLC_FALSE );
+ || is_valid( p_sys ) == VLC_FALSE );
if( p_sys->b_blackslot == VLC_TRUE )
{
for( i = 0; i < p_sys->i_cols * p_sys->i_rows; i++ )
{
if( p_sys->pi_order[i] ==
- ( p_sys->i_cols - 1 ) * p_sys->i_rows )
+ p_sys->i_cols * p_sys->i_rows - 1 )
{
p_sys->i_selected = i;
break;
{
p_sys->i_selected = -1;
}
- printf( "selected: %d\n", p_sys->i_selected );
}
/*****************************************************************************
{
p_vout->p_sys->i_selected = -1;
}
- else if( p_vout->p_sys->i_selected == i_pos + 1
- || p_vout->p_sys->i_selected == i_pos - 1
+ else if( ( p_vout->p_sys->i_selected == i_pos + 1
+ && p_vout->p_sys->i_selected%p_vout->p_sys->i_cols != 0 )
+ || ( p_vout->p_sys->i_selected == i_pos - 1
+ && i_pos % p_vout->p_sys->i_cols != 0 )
|| p_vout->p_sys->i_selected == i_pos + p_vout->p_sys->i_cols
|| p_vout->p_sys->i_selected == i_pos - p_vout->p_sys->i_cols )
{