static void _g2d_drv_set_layer_info(g2d_layer_t *g2d_layer, int id) { unsigned int layer_width = g2d_layer->width; unsigned int layer_height = g2d_layer->height; unsigned int layer_pitch = _g2d_get_pitch_byte(g2d_layer->pitch, g2d_layer->format); CLR_G2D_LAYER_CON(id); SET_G2D_LAYER_CON_COLOR_FORMAT(id, g2d_layer->format); SET_G2D_LAYER_CON_ROTATE(id, g2d_layer->transform); SET_G2D_LAYER_OFFSET(id, g2d_layer->offset.x, g2d_layer->offset.y); if (!g2d_layer->rectangle) { SET_G2D_LAYER_ADDR(id, g2d_layer->addr); ASSERT(((unsigned) layer_pitch) <= 0x2000); SET_G2D_LAYER_PITCH(id, layer_pitch); } else { ENABLE_G2D_LAYER_CON_RECT_FILL(id); SET_G2D_LAYER_RECTANGLE_FILL_COLOR(id, g2d_layer->rect_color); } SET_G2D_LAYER_SIZE(id, layer_width, layer_height); if (g2d_layer->blending) { ENABLE_G2D_LAYER_CON_ALPHA(id); SET_G2D_LAYER_CON_ALPHA(id, g2d_layer->const_alpha); } else { DISABLE_G2D_LAYER_CON_ALPHA(id); } ENABLE_G2D_ROI_LAYER(id); }
static void _g2d_drv_rectfill_set_info(G2D_HANDLE_STRUCT *handle) { G2D_RECTANGLE_FILL_STRUCT *rectFillFunc = &(handle->rectFillFunc); G2D_CANVAS_INFO_STRUCT *srcCanvas = &(rectFillFunc->srcCanvas); G2D_CANVAS_INFO_STRUCT *dstCanvas = &(handle->dstCanvas); #if defined(G2D_FPGA) G2D_WINDOW_STRUCT *dstWindow = &(handle->rectFillFunc.dstWindow); #else G2D_WINDOW_STRUCT *dstWindow = &(handle->targetClipWindow); #endif G2D_COORDINATE_STRUCT *topLeft = &(dstWindow->topLeft); G2D_COORDINATE_STRUCT *buttomRight = &(dstWindow->buttomRight); kal_uint32 width, height, pitch, srcpitch; /// destination base addr ASSERT(dstCanvas->RGBBufferAddr); //SET_G2D_LAYER_ADDR(0, (kal_uint32)(dstCanvas->RGBBufferAddr)); REG_G2D_W2M_ADDR = (kal_int32)dstCanvas->RGBBufferAddr; /// destination pitch pitch = (dstCanvas->width) * (dstCanvas->bytesPerPixel); ASSERT(((unsigned)pitch) <= 0x2000); //SET_G2D_LAYER_PITCH(0, pitch); SET_G2D_LAYER_PITCH(1, pitch); REG_G2D_W2M_PITCH = pitch; /// -2048 <= x <= 2047 ASSERT(((unsigned)((topLeft->x) + 2048)) < 4096); ASSERT(((unsigned)((topLeft->y) + 2048)) < 4096); /// destination rectangle start point(x,y) SET_G2D_W2M_OFFSET(topLeft->x, topLeft->y); SET_G2D_ROI_OFFSET(topLeft->x, topLeft->y); //SET_G2D_LAYER_OFFSET(0, 0, 0); SET_G2D_LAYER_OFFSET(1, topLeft->x, topLeft->y); width = buttomRight->x - topLeft->x + 1; height = buttomRight->y - topLeft->y + 1; /// 1 <= x <= 2048 ASSERT(((unsigned)(width - 1)) <= 2048); ASSERT(((unsigned)(height - 1)) <= 2048); /// destination rectangle width and height REG_G2D_ROI_SIZE = (width << 16) | height; //SET_G2D_LAYER_SIZE(0, dstCanvas->width, dstCanvas->height); SET_G2D_LAYER_SIZE(1, width, height); if (KAL_TRUE == rectFillFunc->overlayBufferEnable) { srcpitch = (srcCanvas->width) * (srcCanvas->bytesPerPixel); ASSERT(((unsigned)srcpitch) <= 0x2000); SET_G2D_LAYER_PITCH(1, srcpitch); SET_G2D_LAYER_ADDR(0, (kal_uint32)(srcCanvas->RGBBufferAddr)); SET_G2D_LAYER_OFFSET(0, 0, 0); SET_G2D_LAYER_SIZE(0, srcCanvas->width, srcCanvas->height); /// set src_clr_fmt bits switch(srcCanvas->colorFormat) { case G2D_COLOR_FORMAT_GRAY: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_GRAY); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_GRAY); break; case G2D_COLOR_FORMAT_RGB565: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_RGB565); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_RGB565); break; case G2D_COLOR_FORMAT_ARGB8888: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_ARGB8888); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_ARGB8888); break; case G2D_COLOR_FORMAT_RGB888: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_RGB888); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_RGB888); break; case G2D_COLOR_FORMAT_BGR888: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_BGR888); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_BGR888); break; case G2D_COLOR_FORMAT_PARGB8888: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_PARGB8888); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_PARGB8888); break; case G2D_COLOR_FORMAT_UYVY422: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_UYVY); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_UYVY); break; case G2D_COLOR_FORMAT_ARGB8565: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_ARGB8565); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_ARGB8565); break; case G2D_COLOR_FORMAT_PARGB8565: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_PARGB8565); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_PARGB8565); break; case G2D_COLOR_FORMAT_ARGB6666: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_ARGB6666); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_ARGB6666); break; case G2D_COLOR_FORMAT_PARGB6666: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_PARGB6666); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_PARGB6666); break; default: ASSERT(0); break; } } else { SET_G2D_LAYER_ADDR(0, (kal_uint32)(dstCanvas->RGBBufferAddr)); SET_G2D_LAYER_PITCH(0, pitch); SET_G2D_LAYER_OFFSET(0, 0, 0); SET_G2D_LAYER_SIZE(0, dstCanvas->width, dstCanvas->height); /// setting destination color format bits switch(dstCanvas->colorFormat) { case G2D_COLOR_FORMAT_RGB565: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_RGB565); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_RGB565); break; case G2D_COLOR_FORMAT_ARGB6666: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_ARGB6666); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_ARGB6666); break; case G2D_COLOR_FORMAT_ARGB8888: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_ARGB8888); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_ARGB8888); break; case G2D_COLOR_FORMAT_RGB888: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_RGB888); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_RGB888); break; case G2D_COLOR_FORMAT_BGR888: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_BGR888); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_BGR888); break; case G2D_COLOR_FORMAT_PARGB6666: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_PARGB6666); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_PARGB6666); break; case G2D_COLOR_FORMAT_PARGB8888: SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_PARGB8888); SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_PARGB8888); break; default: ASSERT(0); break; } } /// setting destination color format bits switch(dstCanvas->colorFormat) { case G2D_COLOR_FORMAT_RGB565: SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_RGB565); break; case G2D_COLOR_FORMAT_ARGB6666: SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_ARGB6666); break; case G2D_COLOR_FORMAT_ARGB8888: SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_ARGB8888); break; case G2D_COLOR_FORMAT_RGB888: SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_RGB888); break; case G2D_COLOR_FORMAT_BGR888: SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_BGR888); break; case G2D_COLOR_FORMAT_PARGB6666: SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_PARGB6666); break; case G2D_COLOR_FORMAT_PARGB8888: SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_PARGB8888); break; default: ASSERT(0); break; } if(KAL_TRUE == (rectFillFunc->srcAlphaEnable)) { ENABLE_G2D_LAYER_CON_ALPHA(1); SET_G2D_LAYER_CON_ALPHA(1, rectFillFunc->srcAlphaValue); //ENABLE_G2D_ROI_LAYER(0); ENABLE_G2D_ROI_LAYER_0; } /// Set color; SET_G2D_LAYER_RECTANGLE_FILL_COLOR(1, (kal_uint32)rectFillFunc->rectFillColor); ENABLE_G2D_ROI_LAYER(1); }
static void _g2d_drv_overlay_set_layer_info(G2D_HANDLE_STRUCT *handle) { G2D_OVERLAY_STRUCT *overlayFunc = &(handle->overlayFunc); kal_int32 layer; for (layer = 0; layer < G2D_HW_OVERLAY_TOTAL_LAYER; layer++) { G2D_OVERLAY_LAYER_STRUCT *layerInfo = &(overlayFunc->layerInfo[layer]); G2D_WINDOW_STRUCT *layerWindow = &(layerInfo->layerWindow); G2D_CANVAS_INFO_STRUCT *layerCanvas = &(layerInfo->layerCanvas); if(KAL_TRUE == (layerInfo->layerEnable)) { kal_uint32 layerWidth = layerWindow->buttomRight.x - layerWindow->topLeft.x + 1; kal_uint32 layerHeight = layerWindow->buttomRight.y - layerWindow->topLeft.y + 1; kal_uint32 layerPitch = 0; CLR_G2D_LAYER_CON(layer); switch(layerInfo->function) { case G2D_OVERLAY_LAYER_FUNCTION_BUFFER: { layerPitch = (layerCanvas->width) * (layerCanvas->bytesPerPixel); if(KAL_TRUE == (layerInfo->srcKeyEnable)) { ENABLE_G2D_LAYER_CON_SRC_KEY(layer); SET_G2D_LAYER_SRC_KEY(layer, layerInfo->srcKeyValue); } if(KAL_TRUE == (layerInfo->layerAlphaEnable)) { ENABLE_G2D_LAYER_CON_ALPHA(layer); SET_G2D_LAYER_CON_ALPHA(layer, layerInfo->layerAlphaValue); } { switch(layerCanvas->colorFormat) { case G2D_COLOR_FORMAT_GRAY: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_GRAY); break; case G2D_COLOR_FORMAT_RGB565: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_RGB565); break; case G2D_COLOR_FORMAT_ARGB8888: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_ARGB8888); break; case G2D_COLOR_FORMAT_RGB888: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_RGB888); break; case G2D_COLOR_FORMAT_BGR888: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_BGR888); break; case G2D_COLOR_FORMAT_PARGB8888: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_PARGB8888); break; case G2D_COLOR_FORMAT_UYVY422: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_UYVY); break; case G2D_COLOR_FORMAT_ARGB8565: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_ARGB8565); break; case G2D_COLOR_FORMAT_PARGB8565: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_PARGB8565); break; case G2D_COLOR_FORMAT_ARGB6666: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_ARGB6666); break; case G2D_COLOR_FORMAT_PARGB6666: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_PARGB6666); break; default: ASSERT(0); break; } } } break; case G2D_OVERLAY_LAYER_FUNCTION_RECT: { layerPitch = (layerCanvas->width) * (layerCanvas->bytesPerPixel); ENABLE_G2D_LAYER_CON_RECT_FILL(layer); if(KAL_TRUE == (layerInfo->srcKeyEnable)) { ASSERT(0); } if(KAL_TRUE == (layerInfo->layerAlphaEnable)) { ENABLE_G2D_LAYER_CON_ALPHA(layer); SET_G2D_LAYER_CON_ALPHA(layer, layerInfo->layerAlphaValue); } { switch(layerCanvas->colorFormat) { case G2D_COLOR_FORMAT_GRAY: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_GRAY); break; case G2D_COLOR_FORMAT_RGB565: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_RGB565); break; case G2D_COLOR_FORMAT_ARGB8888: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_ARGB8888); break; case G2D_COLOR_FORMAT_RGB888: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_RGB888); break; case G2D_COLOR_FORMAT_BGR888: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_BGR888); break; case G2D_COLOR_FORMAT_PARGB8888: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_PARGB8888); break; case G2D_COLOR_FORMAT_UYVY422: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_UYVY); break; case G2D_COLOR_FORMAT_ARGB8565: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_ARGB8565); break; case G2D_COLOR_FORMAT_PARGB8565: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_PARGB8565); break; case G2D_COLOR_FORMAT_ARGB6666: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_ARGB6666); break; case G2D_COLOR_FORMAT_PARGB6666: SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_PARGB6666); break; default: ASSERT(0); break; } } /// Set color; SET_G2D_LAYER_RECTANGLE_FILL_COLOR(layer, (kal_uint32)layerInfo->rectFillColor); } break; case G2D_OVERLAY_LAYER_FUNCTION_NORMAL_FONT: { layerPitch = layerCanvas->width; ENABLE_G2D_LAYER_CON_FONT(layer); if((KAL_TRUE == (layerInfo->srcKeyEnable)) || (KAL_TRUE == (layerInfo->layerAlphaEnable))) { ASSERT(0); } ASSERT(G2D_CW_ROTATE_ANGLE_000 == (layerInfo->rotation)); SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_ARGB8888); layerCanvas->colorFormat = G2D_COLOR_FORMAT_ARGB8888; SET_G2D_LAYER_FONT_FOREGROUND_COLOR(layer, layerInfo->foregroundColor); } break; case G2D_OVERLAY_LAYER_FUNCTION_AA_FONT: { layerPitch = layerCanvas->width; ENABLE_G2D_LAYER_CON_FONT(layer); SET_G2D_LAYER_CON_AA_FONT_BIT(layer, (layerInfo->fontBit) << 28); if((KAL_TRUE == (layerInfo->srcKeyEnable)) || (KAL_FALSE == (layerInfo->layerAlphaEnable))) { ASSERT(0); } ENABLE_G2D_LAYER_CON_ALPHA(layer); SET_G2D_LAYER_CON_ALPHA(layer, 0xFF); ASSERT(G2D_CW_ROTATE_ANGLE_000 == (layerInfo->rotation)); layerCanvas->colorFormat = G2D_COLOR_FORMAT_ARGB8888; SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_ARGB8888); SET_G2D_LAYER_FONT_FOREGROUND_COLOR(layer, layerInfo->foregroundColor); } break; default: ASSERT(0); } /// rotation { switch(layerInfo->rotation) { case G2D_CW_ROTATE_ANGLE_000: { SET_G2D_LAYER_CON_ROTATE(layer, G2D_LX_CON_CCW_ROTATE_000); SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x, layerWindow->topLeft.y); } break; case G2D_CW_ROTATE_ANGLE_090: { SET_G2D_LAYER_CON_ROTATE(layer, G2D_LX_CON_CCW_ROTATE_090); SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x, layerWindow->topLeft.y + layerWidth - 1); } break; case G2D_CW_ROTATE_ANGLE_180: { SET_G2D_LAYER_CON_ROTATE(layer, G2D_LX_CON_CCW_ROTATE_180); SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x + layerWidth - 1, layerWindow->topLeft.y + layerHeight - 1); } break; case G2D_CW_ROTATE_ANGLE_270: { SET_G2D_LAYER_CON_ROTATE(layer, G2D_LX_CON_CCW_ROTATE_270); SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x + layerHeight - 1, layerWindow->topLeft.y); } break; case G2D_CW_ROTATE_ANGLE_MIRROR_000: { SET_G2D_LAYER_CON_ROTATE(layer, G2D_LX_CON_CCW_ROTATE_MIRROR_000); SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x + layerWidth - 1, layerWindow->topLeft.y); } break; case G2D_CW_ROTATE_ANGLE_MIRROR_090: { SET_G2D_LAYER_CON_ROTATE(layer, G2D_LX_CON_CCW_ROTATE_MIRROR_090); SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x, layerWindow->topLeft.y); } break; case G2D_CW_ROTATE_ANGLE_MIRROR_180: { SET_G2D_LAYER_CON_ROTATE(layer, G2D_LX_CON_CCW_ROTATE_MIRROR_180); SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x, layerWindow->topLeft.y + layerHeight - 1); } break; case G2D_CW_ROTATE_ANGLE_MIRROR_270: { SET_G2D_LAYER_CON_ROTATE(layer, G2D_LX_CON_CCW_ROTATE_MIRROR_270); SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x + layerHeight - 1, layerWindow->topLeft.y + layerWidth - 1); } break; default: ASSERT(0); break; } } switch(layerCanvas->colorFormat) { case G2D_COLOR_FORMAT_GRAY: case G2D_COLOR_FORMAT_RGB565: case G2D_COLOR_FORMAT_ARGB8888: case G2D_COLOR_FORMAT_RGB888: case G2D_COLOR_FORMAT_BGR888: case G2D_COLOR_FORMAT_PARGB8888: case G2D_COLOR_FORMAT_ARGB8565: case G2D_COLOR_FORMAT_PARGB8565: case G2D_COLOR_FORMAT_ARGB6666: case G2D_COLOR_FORMAT_PARGB6666: SET_G2D_LAYER_ADDR(layer, (kal_uint32)(layerCanvas->RGBBufferAddr)); break; case G2D_COLOR_FORMAT_UYVY422: SET_G2D_LAYER_ADDR(layer, (kal_uint32)(layerCanvas->YUVBufferAddr[0])); break; default: ASSERT(0); break; } ASSERT(((unsigned)layerPitch) <= 0x2000); SET_G2D_LAYER_PITCH(layer, layerPitch); /// This is set in rotation /// SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x, layerWindow->topLeft.y); SET_G2D_LAYER_SIZE(layer, layerWidth, layerHeight); ENABLE_G2D_ROI_LAYER(layer); } } }