⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 img_comm.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 5 页
字号:
            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 + -