📄 img_comm.c
字号:
video_dma_para->cb1 = mpeg4_encode_data.mpeg4_encode_cb;
video_dma_para->cb2 = NULL;
IMGDMA_VdoConfig(video_dma_para, 1, scenario_id);
ibw2_para->twice = 1;
ibw2_para->restart = 1;
ibw2_para->lcd_hk = 1;
ibw2_para->couple = 0;
ibw2_para->pan = 0;
ibw2_para->bs1 = (kal_uint32) (mpeg4_encode_data.frame_buffer_address +
((mpeg4_encode_data.mpeg4_offset_y * tar_width +
mpeg4_encode_data.mpeg4_offset_x) << 1));
ibw2_para->bs2 = ibw2_para->bs1;
ibw2_para->width = tar_width;
ibw2_para->height = tar_height;
ibw2_para->cb = isp_ibw2_cb;
IMGDMA_IBW2Config(ibw2_para, 1, scenario_id);
*(volatile unsigned int*)0x80690404 &= ~1; /* disable IBW2 interrupt forcely for
digital zoom during MPEG4 recording */
break;
#if (defined(WEBCAM_SUPPORT))
case SCENARIO_USBVIDEO_CAPTURE_JPEG_ID:
#endif
case SCENARIO_CAMERA_CAPTURE_JPEG_ID:
jpeg_idma_para->fifo = JPEG_ENCODER_IDMA_LINE_BUFFER_NUMBER;
jpeg_idma_para->width = tar_width;
jpeg_idma_para->height = tar_height;
jpeg_idma_para->gray = jpeg_encode_config_data.jpeg_gray_mode;
jpeg_idma_para->bs= (kal_uint32) intmem_get_buffer((jpeg_idma_para->fifo*((jpeg_idma_para->width&0xFFF0)+16))<<1);
jpeg_idma_para->cb = NULL;
IMGDMA_JpegConfig(jpeg_idma_para, 1, scenario_id);
break;
case SCENARIO_CAMERA_CAPTURE_MEM_ID:
ibw2_para->twice = 0;
ibw2_para->restart = 0;
ibw2_para->lcd_hk = 1;
ibw2_para->couple = 0;
ibw2_para->pan = 0;
ibw2_para->bs1 = isp_capture_mem_data.imgdma_buffer_address;
ibw2_para->bs2 = isp_capture_mem_data.imgdma_buffer_address;
ibw2_para->width = tar_width;
ibw2_para->height = tar_height;
ibw2_para->cb = NULL;
IMGDMA_IBW2Config(ibw2_para, 1, scenario_id);
break;
/*XXXXX add for barcode*/
case SCENARIO_CAMERA_CAPTURE_BARCODE_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_capture_barcode_data.frame_buffer_address;
ibw2_para->bs2 = isp_capture_barcode_data.frame_buffer_address1;
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)))
{
ibw2_para->width= isp_capture_barcode_data.lcm_end_x-isp_capture_barcode_data.lcm_start_x+1;
ibw2_para->height= isp_capture_barcode_data.lcm_end_y-isp_capture_barcode_data.lcm_start_y+1;
}
else
{
ibw2_para->height= isp_capture_barcode_data.lcm_end_x-isp_capture_barcode_data.lcm_start_x+1;
ibw2_para->width= isp_capture_barcode_data.lcm_end_y-isp_capture_barcode_data.lcm_start_y+1;
}
ibw2_para->cb = NULL;
IMGDMA_IBW2Config(ibw2_para, 1, scenario_id);
break;
case SCENARIO_CAMERA_CAPTURE_BARCODE_SAVE_ID:
ibw2_para->twice = 0;
ibw2_para->restart = 0;
ibw2_para->lcd_hk = 1;
ibw2_para->couple = 0;
ibw2_para->pan = 0;
ibw2_para->bs1 = isp_capture_barcode_data.barcode_buffer_address;
ibw2_para->bs2 = isp_capture_barcode_data.barcode_buffer_address;
ibw2_para->width = tar_width;
ibw2_para->height = tar_height;
ibw2_para->cb = NULL;
IMGDMA_IBW2Config(ibw2_para, 1, scenario_id);
break;
#endif /* (defined(ISP_SUPPORT)) */
case SCENARIO_JPEG_ENCODE_ID:
case SCENARIO_MPEG_SNAPSHOT_ID:
if (scenario_id == SCENARIO_MPEG_SNAPSHOT_ID)
scenario_id = SCENARIO_MPEG_DECODE_ID;
jpeg_idma_para->fifo = JPEG_ENCODER_IDMA_LINE_BUFFER_NUMBER;
jpeg_idma_para->width = jpeg_encode_config_data.target_width;
jpeg_idma_para->height = jpeg_encode_config_data.target_height;
jpeg_idma_para->gray = jpeg_encode_config_data.jpeg_gray_mode;
if (scenario_id == SCENARIO_JPEG_ENCODE_ID)
{
jpeg_idma_para->bs= (kal_uint32) intmem_get_buffer((jpeg_idma_para->fifo*((jpeg_idma_para->width&0xFFF0)+16))<<1);
}
#if (defined(MP4_CODEC))
else
{
jpeg_idma_para->bs = video_dec_get_snapshot_imgdma_mem();
if (jpeg_idma_para->bs == NULL)
{
jpeg_idma_para->bs= (kal_uint32) extmem_get_buffer((jpeg_idma_para->fifo*((jpeg_idma_para->width&0xFFF0)+16))<<1);
video_dec_set_snapshot_imgdma_mem(jpeg_idma_para->bs);
}
}
#endif /* (defined(MP4_CODEC)) */
jpeg_idma_para->cb = NULL;
IMGDMA_JpegConfig(jpeg_idma_para, 1, scenario_id);
ibr1_para->type = jpeg_encode_config_data.type;
ibr1_para->order = jpeg_encode_config_data.data_order;
ibr1_para->bs = jpeg_encode_config_data.image_buffer_address;
ibr1_para->pxlnum = jpeg_encode_config_data.image_width * jpeg_encode_config_data.image_height;
ibr1_para->cb = NULL;
IMGDMA_IBR1Config(ibr1_para, 0, scenario_id);
break;
case SCENARIO_JPEG_DECODE_ID:
ibw2_para->twice = 0;
ibw2_para->restart = 0;
ibw2_para->lcd_hk = 0;
ibw2_para->couple = 0;
ibw2_para->pan = 1;
ibw2_para->bs1 = jpeg_decode_config_data.image_buffer_address;
ibw2_para->width = tar_width;
ibw2_para->height = tar_height;
ibw2_para->hpitch1 = jpeg_decode_config_data.image_clip_x1;
ibw2_para->hpitch2 = jpeg_decode_config_data.image_clip_x2;
ibw2_para->vpitch1 = jpeg_decode_config_data.image_clip_y1;
ibw2_para->vpitch2 = jpeg_decode_config_data.image_clip_y2;
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif /* 0 */
ibw2_para->cb = jpeg_decode_cb;
IMGDMA_IBW2Config(ibw2_para, 1, scenario_id);
break;
case SCENARIO_RESIZE_ID:
ibw2_para->twice = 0;
ibw2_para->restart = 0;
ibw2_para->lcd_hk = 0;
ibw2_para->couple = 0;
ibw2_para->pan = 1;
ibw2_para->bs1 = image_resize_data.dest_image_address;
ibw2_para->bs2 = ibw2_para->bs1;
ibw2_para->width = image_resize_data.target_pitch;
ibw2_para->height = image_resize_data.target_height;
ibw2_para->hpitch1 = image_resize_data.image_clip_x1;
ibw2_para->hpitch2 = image_resize_data.image_clip_x2;
ibw2_para->vpitch1 = image_resize_data.image_clip_y1;
ibw2_para->vpitch2 = image_resize_data.image_clip_y2;
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif /* 0 */
ibw2_para->cb = NULL;
IMGDMA_IBW2Config(ibw2_para, 1, scenario_id);
ibr1_para->type = image_resize_data.type;
ibr1_para->order = image_resize_data.data_order;
ibr1_para->bs = image_resize_data.src_image_address;
ibr1_para->pxlnum = image_resize_data.src_pitch * image_resize_data.src_height;
ibr1_para->cb = NULL;
IMGDMA_IBR1Config(ibr1_para, 1, scenario_id);
break;
}
return KAL_TRUE;
} /* config_image_dma() */
/*****************************************************************************
* FUNCTION
* stop_image_dma
* DESCRIPTION
* This function is to stop MT6219 image dma for each multi-media scenario
* CALLS
*
* PARAMETERS
* scenario_id [IN] which image dma scenario will be stopped
* RETURNS
* void
*****************************************************************************/
kal_uint8 stop_image_dma(MMDI_SCENERIO_ID scenario_id)
{
IMGDMA_CHANNEL_ENUM idma_ch1, idma_ch2;
IMGDMA_STOP_ENUM idma_stop_mode;
switch (scenario_id)
{
#if (defined(ISP_SUPPORT))
case SCENARIO_CAMERA_PREVIEW_ID:
idma_ch1 = IMGDMA_IBW2_CH;
idma_stop_mode = IMGDMA_STOP_NOW;
IMGDMA_Stop(idma_ch1, idma_stop_mode, NULL, scenario_id);
break;
case SCENARIO_MPEG_ENCODE_ID:
idma_ch1 = IMGDMA_VDO_CH;
idma_ch2 = IMGDMA_IBW2_CH;
idma_stop_mode = IMGDMA_STOP_NOW;
IMGDMA_Stop(idma_ch1, idma_stop_mode, NULL, scenario_id);
IMGDMA_Stop(idma_ch2, idma_stop_mode, NULL, scenario_id);
break;
#if (defined(WEBCAM_SUPPORT))
case SCENARIO_USBVIDEO_CAPTURE_JPEG_ID:
#endif
case SCENARIO_CAMERA_CAPTURE_JPEG_ID:
idma_ch1 = IMGDMA_JPEG_CH;
idma_stop_mode = IMGDMA_STOP_NOW;
IMGDMA_Stop(idma_ch1, idma_stop_mode, NULL, scenario_id);
break;
/*XXXXX add for barcode*/
case SCENARIO_CAMERA_CAPTURE_BARCODE_ID:
idma_ch1 = IMGDMA_IBW2_CH;
idma_stop_mode = IMGDMA_STOP_NOW;
IMGDMA_Stop(idma_ch1, idma_stop_mode, NULL, scenario_id);
break;
#endif /* (defined(ISP_SUPPORT)) */
case SCENARIO_JPEG_ENCODE_ID:
case SCENARIO_MPEG_SNAPSHOT_ID:
if (scenario_id == SCENARIO_MPEG_SNAPSHOT_ID)
scenario_id = SCENARIO_MPEG_DECODE_ID;
idma_ch1 = IMGDMA_IBR1_CH;
idma_ch2 = IMGDMA_JPEG_CH;
idma_stop_mode = IMGDMA_STOP_NOW;
IMGDMA_Stop(idma_ch1, idma_stop_mode, NULL, scenario_id);
IMGDMA_Stop(idma_ch2, idma_stop_mode, NULL, scenario_id);
break;
case SCENARIO_JPEG_DECODE_ID:
idma_ch1 = IMGDMA_IBW2_CH;
idma_stop_mode = IMGDMA_STOP_NOW;
IMGDMA_Stop(idma_ch1, idma_stop_mode, NULL, scenario_id);
break;
case SCENARIO_RESIZE_ID:
idma_ch1 = IMGDMA_IBR1_CH;
idma_ch2 = IMGDMA_IBW2_CH;
idma_stop_mode = IMGDMA_STOP_NOW;
IMGDMA_Stop(idma_ch1, idma_stop_mode, NULL, scenario_id);
IMGDMA_Stop(idma_ch2, idma_stop_mode, NULL, scenario_id);
break;
}
return KAL_TRUE;
} /* stop_image_dma() */
extern kal_eventgrpid lcd_event_id;
extern camera_capture_barcode_struct isp_capture_barcode_data;
/*****************************************************************************
* FUNCTION
* get_barcode_image
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void get_barcode_image(void)
{
kal_uint32 event_group;
MMDI_SCENERIO_ID scene_id=SCENARIO_CAMERA_CAPTURE_BARCODE_SAVE_ID;
lcd_frame_update_to_mem_struct lcd_data;
lcd_data.fb_update_mode=LCD_HW_TRIGGER_MODE;
lcd_data.block_mode=KAL_FALSE;
// lcd_data.dest_block_width=;
lcd_data.dest_buffer_address=isp_capture_barcode_data.barcode_buffer_address;
lcd_data.dest_buffer_size=isp_capture_barcode_data.barcode_buffer_size;
lcd_data.roi_offset_x=isp_capture_barcode_data.roi_offset_x;
lcd_data.roi_offset_y=isp_capture_barcode_data.roi_offset_y;
lcd_data.roi_width=isp_capture_barcode_data.lcm_end_x-isp_capture_barcode_data.lcm_start_x+1;
lcd_data.roi_height=isp_capture_barcode_data.lcm_end_y-isp_capture_barcode_data.lcm_start_y+1;
lcd_data.update_layer=isp_capture_barcode_data.update_layer;
lcd_data.hw_update_layer=isp_capture_barcode_data.hw_update_layer;
lcd_data.roi_background_color=0xFFFFFF;
pause_camera_capture_barcode_process();
// get barcode image
intmem_init((kal_uint32 *) isp_capture_barcode_data.intmem_start_address,
isp_capture_barcode_data.intmem_size);
extmem_init((kal_uint32 *) isp_capture_barcode_data.extmem_start_address,
isp_capture_barcode_data.extmem_size);
lcd_fb_update_to_memory(&lcd_data);
config_image_dma(scene_id,isp_capture_barcode_data.target_width,isp_capture_barcode_data.target_height);
config_image_processor(scene_id);
config_pixel_resizer(scene_id);
//kal_set_eg_events(lcd_event_id,0,KAL_AND);
SET_CAMERA_CAPTURE_MODE;
ENABLE_VIEW_FINDER_MODE;
//kal_retrieve_eg_events(lcd_event_id,LCD_TRANSFER_COMPLETE_EVENT,KAL_OR_CONSUME,
// &event_group,KAL_SUSPEND);
while (LCD_IS_RUNNING) {};
lcd_stop_hw_update(isp_capture_barcode_data.lcd_id);
kal_sleep_task(15);
DISABLE_VIEW_FINDER_MODE;
RESZ_Stop(scene_id);
RESZ_Close(scene_id);
#if (defined(ISP_SUPPORT))
clean_imgprc_coefficient(scene_id);
#endif
IMGPROC_Stop(scene_id);
IMGPROC_Close(scene_id);
stop_image_dma(scene_id);
IMGDMA_Close(scene_id);
intmem_deinit();
extmem_deinit();
resume_camera_capture_barcode_process();
}
/*************************************************************************
* FUNCTION
* image_resize_process
*
* DESCRIPTION
* This function resize one RGB image as RGB format.
*
* PARAMETERS
*
* resize_para the parameters the for image resize process
*
* RETURNS
* return_code : the image resize process error code
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint8 image_resize_process(resize_struct *resize_para)
{
MMDI_SCENERIO_ID scenario_id=SCENARIO_RESIZE_ID;
kal_uint8 result;
if ((resize_para->src_height==1)||(resize_para->src_width==1))
return KAL_FALSE; /* Hardware resize can not process the case that source image height is 1 */
#if (defined(JPEG_DRV_V2))
intmem_init((kal_uint32 *) resize_para->intmem_start_address,resize_para->intmem_size);
extmem_init((kal_uint32 *) resize_para->extmem_start_address,resize_para->extmem_size);
#endif
image_resize_data.type=resize_para->type;
image_resize_data.data_order=resize_para->data_order;
image_resize_data.src_image_address=resize_para->src_image_address;
image_resize_data.dest_image_address=resize_para->dest_image_address;
image_resize_data.dest_buffer_size=resize_para->dest_buffer_size;
image_resize_data.src_width=resize_para->src_width;
image_resize_data.src_height=resize_para->src_height;
image_resize_data.src_pitch=resize_para->src_pitch;
image_resize_data.target_width=resize_para->target_width;
image_resize_data.target_height=resize_para->target_height;
if (resize_para->src_pitch==resize_para->src_width)
image_resize_data.target_pitch=resize_para->target_width;
else
image_resize_data.target_pitch=resize_para->target_width * (resize_para->src_pitch-1)/(resize_para->src_width-1)+1;
image_resize_data.image_clip_x1=resize_para->image_clip_x1;
image_resize_data.image_clip_x2=resize_para->image_clip_x2;
image_resize_data.image_clip_y1=resize_para->image_clip_y1;
image_resize_data.image_clip_y2=resize_para->image_clip_y2;
#if (defined(JPEG_DRV_V3))
image_resize_data.image_data_format=resize_para->image_data_format;
image_resize_data.image_pitch_mode=resize_para->image_pitch_mode;
image_resize_data.image_pitch_bytes=resize_para->image_pitch_bytes;
#endif
if ((((resize_para->image_clip_x2-resize_para->image_clip_x1+1)*
(resize_para->image_clip_y2-resize_para->image_clip_y1+1))<<1)>resize_para->dest_buffer_size)
ASSERT(0);
#if (defined(JPEG_DRV_V2))
config_image_processor(scenario_id);
config_pixel_resizer(scenario_id);
config_image_dma(scenario_id,0,0);
while (IMGDMA_CheckBusy(IMGDMA_IBW2_CH,scenario_id)) {};
#elif (defined(JPEG_DRV_V3))
open_image_data_path(scenario_id);
result=config_image_resize_data_path(scenario_id,&image_resize_data);
if(result!=0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -