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; }