Example #1
0
int BC_Bitmap::read_frame(VFrame *frame, 
	int in_x, int in_y, int in_w, int in_h,
	int out_x, int out_y, int out_w, int out_h)
{
	BC_BitmapImage *bfr = cur_bfr();
	if( hardware_scaling() && frame->get_color_model() == color_model ) {
// Hardware accelerated bitmap
		switch(color_model) {
		case BC_YUV420P:
			memcpy(bfr->get_y_data(), frame->get_y(), w * h);
			memcpy(bfr->get_u_data(), frame->get_u(), w * h / 4);
			memcpy(bfr->get_v_data(), frame->get_v(), w * h / 4);
			break;
		case BC_YUV422P:
			memcpy(bfr->get_y_data(), frame->get_y(), w * h);
			memcpy(bfr->get_u_data(), frame->get_u(), w * h / 2);
			memcpy(bfr->get_v_data(), frame->get_v(), w * h / 2);
			break;
		default:
		case BC_YUV422:
			memcpy(get_data(), frame->get_data(), w * h + w * h);
			break;
		}
	}
	else {
// Software only

//printf("BC_Bitmap::read_frame %d -> %d %d %d %d %d -> %d %d %d %d\n",
//  frame->get_color_model(), color_model,
//  in_x, in_y, in_w, in_h, out_x, out_y, out_w, out_h);
//if(color_model == 6 && frame->get_color_model() == 19)
//printf("BC_Bitmap::read_frame 1 %d %d %d %d\n", frame->get_w(), frame->get_h(), get_w(), get_h());
		BC_CModels::transfer(
			bfr->get_row_data(), frame->get_rows(),
			bfr->get_y_data(), bfr->get_u_data(), bfr->get_v_data(),
			frame->get_y(), frame->get_u(), frame->get_v(),
			in_x, in_y, in_w, in_h,
			out_x, out_y, out_w, out_h,
			frame->get_color_model(), color_model,
			bg_color, frame->get_w(), w);

		if( color_model == BC_TRANSPARENCY && !top_level->server_byte_order )
			transparency_bitswap(frame->get_data(), w, h);
//if(color_model == 6 && frame->get_color_model() == 19)
//printf("BC_Bitmap::read_frame 2\n");
	}

	return 0;
}
int BC_Bitmap::read_frame(VFrame *frame,
                          int in_x,
                          int in_y,
                          int in_w,
                          int in_h,
                          int out_x,
                          int out_y,
                          int out_w,
                          int out_h)
{
    switch(color_model)
    {
// Hardware accelerated bitmap
    case BC_YUV420P:
        if(frame->get_color_model() == color_model)
        {
            memcpy(get_y_plane(), frame->get_y(), w * h);
            memcpy(get_u_plane(), frame->get_u(), w * h / 4);
            memcpy(get_v_plane(), frame->get_v(), w * h / 4);
            break;
        }

    case BC_YUV422P:
        if(frame->get_color_model() == color_model)
        {
            memcpy(get_y_plane(), frame->get_y(), w * h);
            memcpy(get_u_plane(), frame->get_u(), w * h / 2);
            memcpy(get_v_plane(), frame->get_v(), w * h / 2);
            break;
        }

    case BC_YUV422:
        if(frame->get_color_model() == color_model)
        {
            memcpy(get_data(), frame->get_data(), w * h + w * h);
            break;
        }

// Software only
    default:
// printf("BC_Bitmap::read_frame %d -> %d %d %d %d %d -> %d %d %d %d\n",
// 				frame->get_color_model(),
// 				color_model,
// 				in_x,
// 				in_y,
// 				in_w,
// 				in_h,
// 				out_x,
// 				out_y,
// 				out_w,
// 				out_h);
//if(color_model == 6 && frame->get_color_model() == 19)
//printf("BC_Bitmap::read_frame 1 %d %d %d %d\n", frame->get_w(), frame->get_h(), get_w(), get_h());
        cmodel_transfer(row_data[current_ringbuffer],
                        frame->get_rows(),
                        get_y_plane(),
                        get_u_plane(),
                        get_v_plane(),
                        frame->get_y(),
                        frame->get_u(),
                        frame->get_v(),
                        in_x,
                        in_y,
                        in_w,
                        in_h,
                        out_x,
                        out_y,
                        out_w,
                        out_h,
                        frame->get_color_model(),
                        color_model,
                        bg_color,
                        frame->get_w(),
                        w);
// color model transfer_*_to_TRANSPARENCY don't care about endianness
// so buffer bitswaped here if needed.
        if ((color_model == BC_TRANSPARENCY) && (!top_level->server_byte_order))
            transparency_bitswap();


//if(color_model == 6 && frame->get_color_model() == 19)
//printf("BC_Bitmap::read_frame 2\n");
        break;
    }


    return 0;
}