Exemplo n.º 1
0
void atari_ntsc_blit_double( atari_ntsc_t const* ntsc,
    atari_ntsc_in_t const* atari_in1, atari_ntsc_in_t const* atari_in2,
    long in_row_width, int in_width, int in_height,
    void* rgb_out, long out_pitch )
{
  #define TO_DOUBLE(pixel1, pixel2) (((pixel1>>1)<<7)+(pixel2>>1))

  int const chunk_count = (in_width - 1) / atari_ntsc_in_chunk;
  while ( in_height-- )
  {
    atari_ntsc_in_t const* line_in1 = atari_in1;
    atari_ntsc_in_t const* line_in2 = atari_in2;
    ATARI_NTSC_BEGIN_ROW( ntsc,
        TO_DOUBLE(atari_ntsc_black, atari_ntsc_black),
        TO_DOUBLE(line_in1[0], line_in2[0]) );
    atari_ntsc_out_t* restrict line_out = (atari_ntsc_out_t*) rgb_out;
    int n;
    ++line_in1;
    ++line_in2;
    
    for ( n = chunk_count; n; --n )
    {
      /* order of input and output pixels must not be altered */
      ATARI_NTSC_COLOR_IN( 0, ntsc,
          TO_DOUBLE(line_in1[0], line_in2[0]) );
      ATARI_NTSC_RGB_OUT_8888( 0, line_out[0] );
      ATARI_NTSC_RGB_OUT_8888( 1, line_out[1] );
      ATARI_NTSC_RGB_OUT_8888( 2, line_out[2] );
      ATARI_NTSC_RGB_OUT_8888( 3, line_out[3] );
      
      ATARI_NTSC_COLOR_IN( 1, ntsc,
          TO_DOUBLE(line_in1[1], line_in2[1]) );
      ATARI_NTSC_RGB_OUT_8888( 4, line_out[4] );
      ATARI_NTSC_RGB_OUT_8888( 5, line_out[5] );
      ATARI_NTSC_RGB_OUT_8888( 6, line_out[6] );
      
      line_in1 += 2;
      line_in2 += 2;
      line_out += 7;
    }
    
    /* finish final pixels */
    ATARI_NTSC_COLOR_IN( 0, ntsc,
        TO_DOUBLE(atari_ntsc_black, atari_ntsc_black) );
    ATARI_NTSC_RGB_OUT_8888( 0, line_out[0] );
    ATARI_NTSC_RGB_OUT_8888( 1, line_out[1] );
    ATARI_NTSC_RGB_OUT_8888( 2, line_out[2] );
    ATARI_NTSC_RGB_OUT_8888( 3, line_out[3] );
    
    ATARI_NTSC_COLOR_IN( 1, ntsc,
        TO_DOUBLE(atari_ntsc_black, atari_ntsc_black) );
    ATARI_NTSC_RGB_OUT_8888( 4, line_out[4] );
    ATARI_NTSC_RGB_OUT_8888( 5, line_out[5] );
    ATARI_NTSC_RGB_OUT_8888( 6, line_out[6] );
    
    atari_in1 += in_row_width;
    atari_in2 += in_row_width;
    rgb_out = (char*) rgb_out + out_pitch;
  }
}
Exemplo n.º 2
0
/* Atari change: no alternating burst phases - remove burst_phase parameter. */
void atari_ntsc_blit( atari_ntsc_t const* ntsc, ATARI_NTSC_IN_T const* input, long in_row_width,
		int in_width, int in_height, void* rgb_out, long out_pitch )
{
	int chunk_count = (in_width - 1) / atari_ntsc_in_chunk;
	for ( ; in_height; --in_height )
	{
		ATARI_NTSC_IN_T const* line_in = input;
		/* Atari change: no alternating burst phases - remove burst_phase parameter; adjust to 4/7 pixel ratio. */
		ATARI_NTSC_BEGIN_ROW( ntsc,
				atari_ntsc_black, atari_ntsc_black, atari_ntsc_black, ATARI_NTSC_ADJ_IN( *line_in ) );
		atari_ntsc_out_t* restrict line_out = (atari_ntsc_out_t*) rgb_out;
		int n;
		++line_in;

		for ( n = chunk_count; n; --n )
		{
			/* order of input and output pixels must not be altered */
			ATARI_NTSC_COLOR_IN( 0, ATARI_NTSC_ADJ_IN( line_in [0] ) );
			ATARI_NTSC_RGB_OUT( 0, line_out [0], ATARI_NTSC_OUT_DEPTH );
			ATARI_NTSC_RGB_OUT( 1, line_out [1], ATARI_NTSC_OUT_DEPTH );

			ATARI_NTSC_COLOR_IN( 1, ATARI_NTSC_ADJ_IN( line_in [1] ) );
			ATARI_NTSC_RGB_OUT( 2, line_out [2], ATARI_NTSC_OUT_DEPTH );
			ATARI_NTSC_RGB_OUT( 3, line_out [3], ATARI_NTSC_OUT_DEPTH );

			ATARI_NTSC_COLOR_IN( 2, ATARI_NTSC_ADJ_IN( line_in [2] ) );
			ATARI_NTSC_RGB_OUT( 4, line_out [4], ATARI_NTSC_OUT_DEPTH );
			ATARI_NTSC_RGB_OUT( 5, line_out [5], ATARI_NTSC_OUT_DEPTH );

			ATARI_NTSC_COLOR_IN( 3, ATARI_NTSC_ADJ_IN( line_in [3] ) );
			ATARI_NTSC_RGB_OUT( 6, line_out [6], ATARI_NTSC_OUT_DEPTH );

			line_in  += 4;
			line_out += 7;
		}

		/* finish final pixels */
		ATARI_NTSC_COLOR_IN( 0, atari_ntsc_black );
		ATARI_NTSC_RGB_OUT( 0, line_out [0], ATARI_NTSC_OUT_DEPTH );
		ATARI_NTSC_RGB_OUT( 1, line_out [1], ATARI_NTSC_OUT_DEPTH );

		ATARI_NTSC_COLOR_IN( 1, atari_ntsc_black );
		ATARI_NTSC_RGB_OUT( 2, line_out [2], ATARI_NTSC_OUT_DEPTH );
		ATARI_NTSC_RGB_OUT( 3, line_out [3], ATARI_NTSC_OUT_DEPTH );

		ATARI_NTSC_COLOR_IN( 2, atari_ntsc_black );
		ATARI_NTSC_RGB_OUT( 4, line_out [4], ATARI_NTSC_OUT_DEPTH );
		ATARI_NTSC_RGB_OUT( 5, line_out [5], ATARI_NTSC_OUT_DEPTH );

		ATARI_NTSC_COLOR_IN( 3, atari_ntsc_black );
		ATARI_NTSC_RGB_OUT( 6, line_out [6], ATARI_NTSC_OUT_DEPTH );

		input += in_row_width;
		rgb_out = (char*) rgb_out + out_pitch;
	}
}