vinfo_t * hdmi_get_current_vinfo(void) { const vinfo_t *info; #ifdef CONFIG_AM_TV_OUTPUT2 if(get_cur_vout_index() == 2){ info = get_current_vinfo2(); } else{ info = get_current_vinfo(); } #else info = get_current_vinfo(); #endif return info; }
static void osd_clone_process(void) { canvas_t cs, cd; u32 width = 0; u32 height = 0; u32 x0 = 0; u32 y0 = 0; unsigned char x_rev = 0; unsigned char y_rev = 0; unsigned char xy_swap = 0; const vinfo_t *vinfo = NULL; config_para_ex_t *ge2d_config = &s_osd_clone.ge2d_config; ge2d_context_t *context = s_osd_clone.ge2d_context; vinfo = get_current_vinfo2(); if (vinfo == NULL) { printk("++ osd_clone vinfo2 NULL\n"); return; } width = vinfo->width; height = vinfo->height; if (s_osd_clone.pan == 1) { y0 = height; } if (s_osd_clone.angle == 1) { xy_swap = 1; x_rev = 1; } else if (s_osd_clone.angle == 2) { x_rev = 1; y_rev = 1; } else if (s_osd_clone.angle == 3) { xy_swap = 1; y_rev = 1; } memset(ge2d_config, 0, sizeof(config_para_ex_t)); ge2d_config->alu_const_color = 0; ge2d_config->bitmask_en = 0; ge2d_config->src1_gb_alpha = 0; ge2d_config->dst_xy_swap = 0; canvas_read(OSD1_CANVAS_INDEX, &cs); ge2d_config->src_planes[0].addr = cs.addr; ge2d_config->src_planes[0].w = cs.width / 4; ge2d_config->src_planes[0].h = cs.height; canvas_read(OSD3_CANVAS_INDEX, &cd); ge2d_config->dst_planes[0].addr = cd.addr; ge2d_config->dst_planes[0].w = cd.width / 4; ge2d_config->dst_planes[0].h = cd.height; ge2d_config->src_para.canvas_index = OSD1_CANVAS_INDEX; ge2d_config->src_para.mem_type = CANVAS_OSD0; ge2d_config->dst_para.mem_type = CANVAS_TYPE_INVALID; ge2d_config->dst_para.format = GE2D_FORMAT_S32_ABGR; ge2d_config->src_para.fill_color_en = 0; ge2d_config->src_para.fill_mode = 0; ge2d_config->src_para.x_rev = 0; ge2d_config->src_para.y_rev = 0; ge2d_config->src_para.color = 0xffffffff; ge2d_config->src_para.top = 0; ge2d_config->src_para.left = 0; ge2d_config->src_para.width = width; ge2d_config->src_para.height = height * 2; ge2d_config->dst_para.canvas_index = OSD3_CANVAS_INDEX; ge2d_config->dst_para.mem_type = CANVAS_TYPE_INVALID; ge2d_config->dst_para.format = GE2D_FORMAT_S32_ABGR; ge2d_config->dst_para.top = 0; ge2d_config->dst_para.left = 0; ge2d_config->dst_para.width = width; ge2d_config->dst_para.height = height * 2; ge2d_config->dst_para.fill_color_en = 0; ge2d_config->dst_para.fill_mode = 0; ge2d_config->dst_para.x_rev = 0; ge2d_config->dst_para.y_rev = 0; ge2d_config->dst_xy_swap = 0; ge2d_config->dst_para.color = 0; ge2d_config->dst_para.x_rev = x_rev; ge2d_config->dst_para.y_rev = y_rev; ge2d_config->dst_xy_swap = xy_swap; if (ge2d_context_config_ex(context, ge2d_config) < 0) { printk("++ osd clone ge2d config error.\n"); return; } stretchblt_noalpha(context, x0, y0, width, height, x0, y0, width, height); }