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

📄 img_comm.c

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