📄 img_comm.c
字号:
if (tv_output_owner == TV_OUT_OWNER_VID_DMA_W)
{
if (tv_out_current_fb == 0)
tv_fb_update(TV_OUT_OWNER_VID_DMA_W, video_encode_config_data.tv_output_buffer1_address);
else
tv_fb_update(TV_OUT_OWNER_VID_DMA_W, video_encode_config_data.tv_output_buffer2_address);
tv_out_current_fb++;
tv_out_current_fb &= 0x01;
}
} /* mpeg4_vid_enc_w_cb() */
kal_uint8 video_record_frame = 0;
/*****************************************************************************
* FUNCTION
* mpeg4_vid_enc_r_cb
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void mpeg4_vid_enc_r_cb(void)
{ /* in direct couple mode, trigger LCD update */
if (get_lcd_status())
{ /* do not display the frame */
video_record_frame++;
video_record_frame &= 0x01;
}
else
{
STOP_IBW2;
STOP_IMGDMA_VIDEO_DECODE;
if (video_record_frame == 0)
{
REG_IMGDMA_VIDEO_DECODE_Y_BASE_ADDR1 = REG_IMGDMA_VIDEO_ENCODE_Y_BASE_ADDR1;
REG_IMGDMA_VIDEO_DECODE_U_BASE_ADDR1 = REG_IMGDMA_VIDEO_ENCODE_U_BASE_ADDR1;
REG_IMGDMA_VIDEO_DECODE_V_BASE_ADDR1 = REG_IMGDMA_VIDEO_ENCODE_V_BASE_ADDR1;
}
else
{
REG_IMGDMA_VIDEO_DECODE_Y_BASE_ADDR1 = REG_IMGDMA_VIDEO_ENCODE_Y_BASE_ADDR2;
REG_IMGDMA_VIDEO_DECODE_U_BASE_ADDR1 = REG_IMGDMA_VIDEO_ENCODE_U_BASE_ADDR2;
REG_IMGDMA_VIDEO_DECODE_V_BASE_ADDR1 = REG_IMGDMA_VIDEO_ENCODE_V_BASE_ADDR2;
}
video_record_frame++;
video_record_frame &= 0x01;
if (REG_LCD_ROI_HW_CTRL != 0)
{
START_IBW2;
START_IMGDMA_VIDEO_DECODE;
}
}
}
#endif /* (defined(MT6228) || defined(MT6229)||defined(MT6230)) */
#if (defined(MT6219) || defined(MT6226) || defined(MT6226M) || defined(MT6227))
/*****************************************************************************
* FUNCTION
* config_pixel_resizer
* DESCRIPTION
* This function is to configure MT6219 resizer for each multi-media scenario
* CALLS
*
* PARAMETERS
* scenario_id [IN] which scenario will be applied by resizer
* RETURNS
* void
*****************************************************************************/
kal_uint8 config_pixel_resizer(MMDI_SCENERIO_ID scenario_id)
{
RESZ_DCB_STRUCT resizer_dcb;
RESZ_PXL_CFG_STRUCT resizer_cfg;
kal_uint16 src_width=0, src_height=0, target_width=0, target_height=0;
if (scenario_id == SCENARIO_MPEG_SNAPSHOT_ID)
resizer_dcb.owner = SCENARIO_MPEG_DECODE_ID;
else
resizer_dcb.owner = scenario_id;
RESZ_Open(resizer_dcb.owner);
switch (scenario_id)
{
#if (defined(ISP_SUPPORT))
case SCENARIO_CAMERA_PREVIEW_ID:
resizer_dcb.cfg.src1 = SRC_CAMERA;
resizer_dcb.cfg.pcontinue = 1;
resizer_dcb.cfg.pixel_sel = 1;
resizer_dcb.cfg.run2 = 0;
resizer_cfg.wmsize = RESIZER_WORKING_MEM_LINE_NUMBER;
src_width = isp_preview_config_data.source_width;
src_height = isp_preview_config_data.source_height;
target_width = isp_preview_config_data.target_width;
target_height = isp_preview_config_data.target_height;
resizer_cfg.wmbase = (kal_uint32) intmem_get_buffer((target_width * RESIZER_WORKING_MEM_LINE_NUMBER * 3));
break;
#if (defined(WEBCAM_SUPPORT))
case SCENARIO_USBVIDEO_CAPTURE_JPEG_ID:
resizer_dcb.cfg.src1 = SRC_CAMERA;
resizer_dcb.cfg.pcontinue = 0;
resizer_dcb.cfg.pixel_sel = 1;
resizer_dcb.cfg.run2 = 0;
resizer_cfg.wmsize = RESIZER_WORKING_MEM_LINE_NUMBER;
src_width = g_usbvideo_camera_data.source_width;
src_height = g_usbvideo_camera_data.source_height;
target_width = g_usbvideo_camera_data.target_width;
target_height = g_usbvideo_camera_data.target_height;
resizer_cfg.wmbase = (kal_uint32) intmem_get_buffer((target_width * RESIZER_WORKING_MEM_LINE_NUMBER * 3));
break;
#endif /* (defined(WEBCAM_SUPPORT)) */
case SCENARIO_CAMERA_CAPTURE_JPEG_ID:
#if (defined(MT6219) || defined(MT6226) || defined(MT6226M) || defined(MT6227))
if (isp_capture_jpeg_data.source_height == isp_capture_jpeg_data.target_height)
(*((volatile unsigned int*)0x80610090)) = 0x00000200;
#endif /* (defined(MT6219) || defined(MT6226) || defined(MT6226M) || defined(MT6227)) */
resizer_dcb.cfg.src1 = SRC_CAMERA;
resizer_dcb.cfg.pcontinue = 0;
resizer_dcb.cfg.pixel_sel = 1;
resizer_dcb.cfg.run2 = 0;
resizer_cfg.wmsize = RESIZER_WORKING_MEM_LINE_NUMBER;
src_width = isp_capture_jpeg_data.source_width;
src_height = isp_capture_jpeg_data.source_height;
target_width = isp_capture_jpeg_data.target_width;
target_height = isp_capture_jpeg_data.target_height;
resizer_cfg.wmbase = (kal_uint32) intmem_get_buffer((target_width * RESIZER_WORKING_MEM_LINE_NUMBER * 3));
break;
case SCENARIO_MPEG_ENCODE_ID:
resizer_dcb.cfg.src1 = SRC_CAMERA;
resizer_dcb.cfg.pcontinue = 1;
resizer_dcb.cfg.pixel_sel = 1;
resizer_dcb.cfg.run2 = 1;
resizer_dcb.cfg.src2 = SRC_MPEG4;
resizer_cfg.wmsize = RESIZER_WORKING_MEM_LINE_NUMBER;
src_width = mpeg4_encode_data.image_source_width;
src_height = mpeg4_encode_data.image_source_height;
target_width = mpeg4_encode_data.mpeg4_image_width;
target_height = mpeg4_encode_data.mpeg4_image_height;
if (target_width > mpeg4_encode_data.image_target_width)
resizer_cfg.wmbase=(kal_uint32) intmem_get_buffer((target_width * RESIZER_WORKING_MEM_LINE_NUMBER*3));
else
resizer_cfg.wmbase=(kal_uint32) intmem_get_buffer((mpeg4_encode_data.image_target_width* RESIZER_WORKING_MEM_LINE_NUMBER*3));
break;
case SCENARIO_CAMERA_CAPTURE_MEM_ID:
resizer_dcb.cfg.src1 = SRC_CAMERA;
resizer_dcb.cfg.pcontinue = 0;
resizer_dcb.cfg.pixel_sel = 1;
resizer_dcb.cfg.run2 = 0;
resizer_cfg.wmsize = RESIZER_WORKING_MEM_LINE_NUMBER;
src_width = isp_capture_mem_data.source_width;
src_height = isp_capture_mem_data.source_height;
target_width = isp_capture_mem_data.target_width;
target_height = isp_capture_mem_data.target_height;
resizer_cfg.wmbase = (kal_uint32) intmem_get_buffer((target_width * RESIZER_WORKING_MEM_LINE_NUMBER * 3));
break;
/*XXXXX add for barcode*/
case SCENARIO_CAMERA_CAPTURE_BARCODE_ID:
resizer_dcb.cfg.src1 = SRC_CAMERA;
resizer_dcb.cfg.pcontinue = 1;
resizer_dcb.cfg.pixel_sel = 1;
resizer_dcb.cfg.run2 = 0;
resizer_cfg.wmsize = RESIZER_WORKING_MEM_LINE_NUMBER;
src_width = isp_capture_barcode_data.source_width;/*ISP output size*/
src_height = isp_capture_barcode_data.source_height;
if ((get_lcd_hw_layer_rotate_value(isp_capture_barcode_data.hw_update_layer)==LCD_LAYER_ROTATE_NORMAL) &&
((current_lcd_rotate_value==LCD_LAYER_ROTATE_NORMAL) ||
(current_lcd_rotate_value==LCD_LAYER_ROTATE_180) ||
(current_lcd_rotate_value==LCD_LAYER_MIRROR) ||
(current_lcd_rotate_value==LCD_LAYER_MIRROR_ROTATE_180)))
{
target_width= isp_capture_barcode_data.lcm_end_x-isp_capture_barcode_data.lcm_start_x+1;
target_height= isp_capture_barcode_data.lcm_end_y-isp_capture_barcode_data.lcm_start_y+1;
}
else
{
target_height= isp_capture_barcode_data.lcm_end_x-isp_capture_barcode_data.lcm_start_x+1;
target_width= isp_capture_barcode_data.lcm_end_y-isp_capture_barcode_data.lcm_start_y+1;
}
resizer_cfg.wmbase = (kal_uint32) intmem_get_buffer((target_width * RESIZER_WORKING_MEM_LINE_NUMBER * 3));
break;
case SCENARIO_CAMERA_CAPTURE_BARCODE_SAVE_ID:
resizer_dcb.cfg.src1 = SRC_CAMERA;
resizer_dcb.cfg.pcontinue = 0;
resizer_dcb.cfg.pixel_sel = 1;
resizer_dcb.cfg.run2 = 0;
resizer_cfg.wmsize = RESIZER_WORKING_MEM_LINE_NUMBER;
src_width = isp_capture_barcode_data.source_width;
src_height = isp_capture_barcode_data.source_height;
target_width = isp_capture_barcode_data.target_width;
target_height = isp_capture_barcode_data.target_height;
resizer_cfg.wmbase = (kal_uint32) intmem_get_buffer((target_width * RESIZER_WORKING_MEM_LINE_NUMBER * 3));
break;
#endif /* (defined(ISP_SUPPORT)) */
case SCENARIO_JPEG_ENCODE_ID:
case SCENARIO_MPEG_SNAPSHOT_ID:
resizer_dcb.cfg.src1 = SRC_MEM;
resizer_dcb.cfg.pcontinue = 0;
resizer_dcb.cfg.pixel_sel = 1;
resizer_dcb.cfg.run2 = 0;
resizer_cfg.wmsize = RESIZER_WORKING_MEM_LINE_NUMBER;
src_width = jpeg_encode_config_data.image_width;
src_height = jpeg_encode_config_data.image_height;
target_width = jpeg_encode_config_data.target_width;
target_height = jpeg_encode_config_data.target_height;
if (scenario_id == SCENARIO_JPEG_ENCODE_ID)
{
resizer_cfg.wmbase=(kal_uint32) intmem_get_buffer((target_width * RESIZER_WORKING_MEM_LINE_NUMBER*3));
}
#if (defined(MP4_CODEC))
else
{
resizer_cfg.wmbase = video_dec_get_snapshot_resize_mem();
if (resizer_cfg.wmbase == NULL)
{
resizer_cfg.wmbase=(kal_uint32) extmem_get_buffer((target_width * RESIZER_WORKING_MEM_LINE_NUMBER*3));
video_dec_set_snapshot_resize_mem(resizer_cfg.wmbase);
}
}
#endif /* (defined(MP4_CODEC)) */
break;
case SCENARIO_RESIZE_ID:
resizer_dcb.cfg.src1 = SRC_MEM;
resizer_dcb.cfg.pcontinue = 0;
resizer_dcb.cfg.pixel_sel = 1;
resizer_dcb.cfg.run2 = 0;
resizer_cfg.wmsize = RESIZER_WORKING_MEM_LINE_NUMBER;
src_width = image_resize_data.src_pitch;
src_height = image_resize_data.src_height;
target_width = image_resize_data.target_pitch;
target_height = image_resize_data.target_height;
resizer_cfg.wmbase = (kal_uint32) intmem_get_buffer((target_width * RESIZER_WORKING_MEM_LINE_NUMBER * 3));
break;
}
RESZ_Config((RESZ_CFG_STRUCT*) & resizer_dcb.cfg, &resizer_cfg, resizer_dcb.owner);
RESZ_SetSize(src_width, src_height, target_width, target_height, resizer_dcb.owner);
if (scenario_id == SCENARIO_MPEG_ENCODE_ID)
RESZ_SetSize2(target_width, target_height, mpeg4_encode_data.image_target_width,
mpeg4_encode_data.image_target_height,resizer_dcb.owner);
RESZ_Start(resizer_dcb.owner);
return KAL_TRUE;
} /* config_pixel_resizer() */
/*****************************************************************************
* FUNCTION
* config_image_processor
* DESCRIPTION
* This function is to configure MT6219 image processor for each multi-media scenario
* CALLS
*
* PARAMETERS
* scenario_id [IN] which scenario will be applied by image processor
* RETURNS
* void
*****************************************************************************/
kal_uint8 config_image_processor(MMDI_SCENERIO_ID scenario_id)
{
MMDI_SCENERIO_ID scenario_id1 = SCENARIO_UNKNOW_ID;
IMGPROC_PIXEL_EFFECT_STURCT pixel_effect_para;
IMGPROC_MODE_ENUM image_proc_mode=0;
switch (scenario_id)
{
#if (defined(ISP_SUPPORT))
case SCENARIO_CAMERA_PREVIEW_ID:
image_proc_mode = IMGPROC_DECODE;
break;
#if (defined(WEBCAM_SUPPORT))
case SCENARIO_USBVIDEO_CAPTURE_JPEG_ID:
#endif
case SCENARIO_CAMERA_CAPTURE_JPEG_ID:
image_proc_mode = IMGPROC_CAPTURE;
break;
case SCENARIO_MPEG_ENCODE_ID:
image_proc_mode = IMGPROC_MPEG_ENCODE;
break;
case SCENARIO_CAMERA_CAPTURE_MEM_ID:
image_proc_mode = IMGPROC_DECODE;
break;
/*XXXXX add for barcode*/
case SCENARIO_CAMERA_CAPTURE_BARCODE_ID:/*XXXXX add for barcode*/
image_proc_mode = IMGPROC_DECODE;
break;
case SCENARIO_CAMERA_CAPTURE_BARCODE_SAVE_ID:/*XXXXX add for barcode*/
image_proc_mode = IMGPROC_DECODE;
break;
#endif /* (defined(ISP_SUPPORT)) */
case SCENARIO_JPEG_DECODE_ID:
image_proc_mode = IMGPROC_DECODE;
break;
case SCENARIO_MPEG_SNAPSHOT_ID:
image_proc_mode = IMGPORC_ENCODE;
scenario_id = SCENARIO_MPEG_DECODE_ID;
scenario_id1 = SCENARIO_MPEG_SNAPSHOT_ID;
break;
case SCENARIO_JPEG_ENCODE_ID:
image_proc_mode = IMGPORC_ENCODE;
break;
case SCENARIO_RESIZE_ID:
image_proc_mode = IMGPROC_EFFECT;
break;
}
IMGPROC_Open(scenario_id);
#if (defined(ISP_SUPPORT))
clean_imgprc_coefficient(scenario_id);
#endif
IMGPROC_SelectMode(image_proc_mode, scenario_id);
if (((scenario_id == SCENARIO_CAMERA_PREVIEW_ID) ||
#if (defined(WEBCAM_SUPPORT))
(scenario_id == SCENARIO_USBVIDEO_CAPTURE_JPEG_ID) ||
#endif
(scenario_id == SCENARIO_CAMERA_CAPTURE_JPEG_ID) ||
(scenario_id == SCENARIO_CAMERA_CAPTURE_MEM_ID) ||
/*XXXXX add for barcode*/
(scenario_id == SCENARIO_CAMERA_CAPTURE_BARCODE_ID) ||
(scenario_id == SCENARIO_CAMERA_CAPTURE_BARCODE_SAVE_ID) ||
(scenario_id == SCENARIO_MPEG_ENCODE_ID)) && (scenario_id1 == SCENARIO_UNKNOW_ID))
{
pixel_effect_para.hsa = IMGPROC_HSA_HUE_SAT; /* turn on Hue and Saturation function */
pixel_effect_para.cba = 1;
pixel_effect_para.inv = 0;
pixel_effect_para.clr = 0;
pixel_effect_para.gma = 0;
IMGPROC_SetPixelEffect(&pixel_effect_para, scenario_id);
}
IMGPROC_Start(scenario_id);
return KAL_TRUE;
} /* config_image_processor() */
/*****************************************************************************
* FUNCTION
* config_image_dma
* DESCRIPTION
* This function is to configure MT6219 image dma for each multi-media scenario
* CALLS
*
* PARAMETERS
* scenario_id [IN] which scenario will be applied by image dma
* tar_width [IN]
* tar_height [IN]
* RETURNS
* void
*****************************************************************************/
kal_uint8 config_image_dma(MMDI_SCENERIO_ID scenario_id, kal_uint16 tar_width, kal_uint16 tar_height)
{
kal_uint8 buffer_ptr[40];
IMGDMA_IBW2_STRUCT *ibw2_para = (IMGDMA_IBW2_STRUCT*) buffer_ptr;
IMGDMA_IBR1_STRUCT *ibr1_para = (IMGDMA_IBR1_STRUCT*) buffer_ptr;
IMGDMA_JPEG_STRUCT *jpeg_idma_para = (IMGDMA_JPEG_STRUCT*) buffer_ptr;
IMGDMA_VDO_STRUCT *video_dma_para = (IMGDMA_VDO_STRUCT*) buffer_ptr;
if (scenario_id == SCENARIO_MPEG_SNAPSHOT_ID)
IMGDMA_Open(SCENARIO_MPEG_DECODE_ID);
else
IMGDMA_Open(scenario_id);
switch (scenario_id)
{
#if (defined(ISP_SUPPORT))
case SCENARIO_CAMERA_PREVIEW_ID:
ibw2_para->twice = 0;
ibw2_para->restart = 1;
ibw2_para->lcd_hk = 1;
ibw2_para->couple = 0;
ibw2_para->pan = 0;
ibw2_para->bs1 = isp_preview_config_data.frame_buffer_address;
ibw2_para->bs2 = isp_preview_config_data.frame_buffer_address1;
ibw2_para->width = tar_width;
ibw2_para->height = tar_height;
ibw2_para->cb = NULL;
IMGDMA_IBW2Config(ibw2_para, 1, scenario_id);
break;
case SCENARIO_MPEG_ENCODE_ID:
current_video_buffer_count = 0;
video_dma_para->dir = 1;
video_dma_para->twice = 1;
video_dma_para->restart = 1;
video_dma_para->bs1 = mpeg4_encode_data.video_buffer1_address;
video_dma_para->bs2 = mpeg4_encode_data.video_buffer2_address;
mpeg4_video_buffer[0] = video_dma_para->bs1;
mpeg4_video_buffer[1] = video_dma_para->bs2;
video_dma_para->width = mpeg4_encode_data.mpeg4_image_width;
video_dma_para->height = mpeg4_encode_data.mpeg4_image_height;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -