-
- /* Bluescreen stuff */
- if( p_sys->b_bs )
- {
- int i,j;
- int i_lines = p_converted->p[ A_PLANE ].i_lines;
- int i_pitch = p_converted->p[ A_PLANE ].i_pitch;
- uint8_t *p_a = p_converted->p[ A_PLANE ].p_pixels;
- uint8_t *p_at = malloc( i_lines * i_pitch * sizeof( uint8_t ) );
- uint8_t *p_u = p_converted->p[ U_PLANE ].p_pixels;
- uint8_t *p_v = p_converted->p[ V_PLANE ].p_pixels;
- uint8_t umin, umax, vmin, vmax;
- umin = p_sys->i_bsu - p_sys->i_bsut >= 0x00 ?
- p_sys->i_bsu - p_sys->i_bsut : 0x00;
- umax = p_sys->i_bsu + p_sys->i_bsut <= 0xff ?
- p_sys->i_bsu + p_sys->i_bsut : 0xff;
- vmin = p_sys->i_bsv - p_sys->i_bsvt >= 0x00 ?
- p_sys->i_bsv - p_sys->i_bsvt : 0x00;
- vmax = p_sys->i_bsv + p_sys->i_bsvt <= 0xff ?
- p_sys->i_bsv + p_sys->i_bsvt : 0xff;
-
- for( i = 0; i < i_lines*i_pitch; i++ )
- {
- if( p_u[i] < umax
- && p_u[i] > umin
- && p_v[i] < vmax
- && p_v[i] > vmin )
- {
- p_at[i] = 0x00;
- }
- else
- {
- p_at[i] = 0xff;
- }
- }
- /* Gaussian convolution to make it look cleaner */
- memset( p_a, 0, 2 * i_pitch );
- for( i = 2; i < i_lines - 2; i++ )
- {
- p_a[i*i_pitch] = 0x00;
- p_a[i*i_pitch+1] = 0x00;
- for( j = 2; j < i_pitch - 2; j ++ )
- {
- p_a[i*i_pitch+j] = (uint8_t)((
- /* 2 rows up */
- ( p_at[(i-2)*i_pitch+j-2]<<1 )
- + ( p_at[(i-2)*i_pitch+j-1]<<2 )
- + ( p_at[(i-2)*i_pitch+j]<<2 )
- + ( p_at[(i-2)*i_pitch+j+1]<<2 )
- + ( p_at[(i-2)*i_pitch+j+2]<<1 )
- /* 1 row up */
- + ( p_at[(i-1)*i_pitch+j-1]<<3 )
- + ( p_at[(i-1)*i_pitch+j-2]<<2 )
- + ( p_at[(i-1)*i_pitch+j]*12 )
- + ( p_at[(i-1)*i_pitch+j+1]<<3 )
- + ( p_at[(i-1)*i_pitch+j+2]<<2 )
- /* */
- + ( p_at[i*i_pitch+j-2]<<2 )
- + ( p_at[i*i_pitch+j-1]*12 )
- + ( p_at[i*i_pitch+j]<<4 )
- + ( p_at[i*i_pitch+j+1]*12 )
- + ( p_at[i*i_pitch+j+2]<<2 )
- /* 1 row down */
- + ( p_at[(i+1)*i_pitch+j-2]<<2 )
- + ( p_at[(i+1)*i_pitch+j-1]<<3 )
- + ( p_at[(i+1)*i_pitch+j]*12 )
- + ( p_at[(i+1)*i_pitch+j+1]<<3 )
- + ( p_at[(i+1)*i_pitch+j+2]<<2 )
- /* 2 rows down */
- + ( p_at[(i+2)*i_pitch+j-2]<<1 )
- + ( p_at[(i+2)*i_pitch+j-1]<<2 )
- + ( p_at[(i+2)*i_pitch+j]<<2 )
- + ( p_at[(i+2)*i_pitch+j+1]<<2 )
- + ( p_at[(i+2)*i_pitch+j+2]<<1 )
- )/152);
- if( p_a[i*i_pitch+j] < 0xbf ) p_a[i*i_pitch+j] = 0x00;
- }
- }
- }