/** * @brief Camera line event callback when no camera image rotation is required * @param None * @retval None */ static void Camera_LineEventCallbackNoRotation(void) { uint32_t LcdResX = BSP_LCD_GetXSize(); uint32_t LcdResY = BSP_LCD_GetYSize(); if (refresh_authorized) { if ((offset_lcd == 0) && (CameraResX <= LcdResX) && (CameraResY <= LcdResY)) { /* If Camera resolution is lower than LCD resolution, set display in the middle of the screen */ offset_lcd = ((((LcdResY - CameraResY) / 2) * LcdResX) /* Middle of the screen on Y axis */ + ((LcdResX - CameraResX) / 2)) /* Middle of the screen on X axis */ * sizeof(uint32_t); if ((CameraResY == CAMERA_QQVGA_RES_Y) || (CameraResIndex == CAMERA_R480x272)) { /* Add offset for QQVGA */ offset_lcd += 40 * LcdResX * sizeof(uint32_t); } } if (display_line_counter < CameraResY) { if (display_line_counter < LcdResY) { if (CameraResX < LcdResX) { ConvertCameraLineRgb565ToLcdLineARGB8888((uint32_t *)(CAMERA_FB_START_ADDR + offset_cam), (uint32_t *)(LCD_FB_START_ADDRESS + offset_lcd), CameraResX); } else { ConvertCameraLineRgb565ToLcdLineARGB8888((uint32_t *)(CAMERA_FB_START_ADDR + offset_cam), (uint32_t *)(LCD_FB_START_ADDRESS + offset_lcd), LcdResX); } offset_cam = offset_cam + (CameraResX * sizeof(uint16_t)); offset_lcd = offset_lcd + (LcdResX * sizeof(uint32_t)); } display_line_counter++; } else { offset_cam = 0; offset_lcd = 0; display_line_counter = 0; } } }
/** * @brief Camera line event callback * @param None * @retval None */ void BSP_CAMERA_LineEventCallback(void) { uint32_t LcdResX = BSP_LCD_GetXSize(); uint32_t LcdResY = BSP_LCD_GetYSize(); #if 0 uint32_t bgr, i, sizex; uint32_t *ptr; #endif if (Camera_AllowDma2dCopyCamFrmBuffToLcdFrmBuff) { if ((offset_lcd == 0) && (CameraResX < LcdResX) && (CameraResY < LcdResY)) { /* If Camera resolution is lower than LCD resolution, set display in the middle of the screen */ offset_lcd = ((((LcdResY - CameraResY) / 2) * LcdResX) /* Middle of the screen on Y axis */ + ((LcdResX - CameraResX) / 2)) /* Middle of the screen on X axis */ * sizeof(uint32_t); if (CameraResY == CAMERA_QQVGA_RES_Y) { /* Add offset for QQVGA */ offset_lcd += 40 * LcdResX * sizeof(uint32_t); } } if (display_line_counter < CameraResY) { if (display_line_counter < LcdResY) { if (CameraResX < LcdResX) { ConvertCameraLineRgb565ToLcdLineARGB8888((uint32_t *)(CAMERA_FRAME_BUFFER + offset_cam), (uint32_t *)(LCD_FRAME_BUFFER + offset_lcd), CameraResX); } else { ConvertCameraLineRgb565ToLcdLineARGB8888((uint32_t *)(CAMERA_FRAME_BUFFER + offset_cam), (uint32_t *)(LCD_FRAME_BUFFER + offset_lcd), LcdResX); } #if 0 /* Convert RGB -> BGR */ ptr = (uint32_t*)(LCD_FRAME_BUFFER + offset_lcd); if (CameraResX < LcdResX) sizex = CameraResX; else sizex = LcdResX; for (i = 0; i < sizex; i++) { bgr = ptr[i] & 0xFF00FF00; /* Alpha and green */ bgr |= (ptr[i] & 0x00FF0000) >> 16 ; /* blue */ bgr |= (ptr[i] & 0x000000FF) << 16 ; /* red */ ptr[i] = bgr; } #endif offset_cam = offset_cam + (CameraResX * sizeof(uint16_t)); offset_lcd = offset_lcd + (LcdResX * sizeof(uint32_t)); } display_line_counter++; } else { offset_cam = 0; offset_lcd = 0; display_line_counter = 0; } }