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

📄 image_effect.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 *   image_effect.c
 *
 * Project:
 * --------
 *   MT6219,MT6226,MT6227,MT6228,MT6229
 *
 * Description:
 * ------------
 *   This driver provides two categories effects which are special
 *   effect and adjustment effect.
 *
 * Author:
 * -------
 * -------
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *
 * removed!
 * removed!
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/
#if (defined(ISP_SUPPORT))
#include "drv_comm.h"
#include "visualhisr.h"
#include "visual_comm.h"
#include "isp_if.h"
#include "imgproc.h"
#include "resizer.h"
#include "imgdma.h"
#include "camera_para.h"
#include "image_effect.h"
#include "med_api.h"
#include "kal_release.h"
#include "jpeg.h"
#include "img_comm.h"

kal_uint8 image_effect_enc;
IMAGE_EFFECT_DEC_STRUCT	image_effect_dec_para;
IMAGE_EFFECT_DEC_STRUCT	image_adj_dec_para;
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
IMGDMA_IBW1_STRUCT ibw1_para;
IMGDMA_IBR1_STRUCT ibr1_para;
#endif
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
ipp_effect_struct ipp_config_data;
#endif
volatile kal_uint8 IBW1_COMPLETE_FLAG=0;

const kal_uint8 sine[91]={	 0, 1, 2, 3, 4, 6, 7, 8, 9,10,
									11,12,13,14,15,17,18,19,20,21,
									22,23,24,25,26,27,28,29,30,31,
									32,33,34,35,36,37,38,39,39,40,
									41,42,43,44,44,45,46,47,48,48,
									49,50,50,51,52,52,53,54,54,55,
									55,56,57,57,58,58,58,59,59,60,
									60,61,61,61,62,62,62,62,63,63,
									63,63,63,64,64,64,64,64,64,64,
									64};

const kal_uint8 gamma[9][17]={ {0,25, 9,7,5,5, 5, 4, 3,50,18,14,10,10,10, 8, 7},
										 {0,22,10,7,6,5, 5, 4, 4,44,20,14,12,10,10, 8, 9},
										 {0,18,10,7,7,6, 6, 5, 4,36,20,14,14,12,12,10, 9},
										 {0,12, 9,8,8,7, 7, 6, 6,24,18,16,16,14,14,12,14},
										 {0, 8, 8,8,8,8, 8, 8, 7,16,16,16,16,16,16,16,16},
										 {1, 5, 7,8,8,9, 8,10, 8,10,14,16,16,18,16,20,18},
										 {1, 3, 5,7,8,9,10,11,10, 6,10,14,16,18,20,22,23},
										 {1, 2, 3,6,8,9,11,12,12, 4, 6,12,16,18,22,24,27},
										 {1, 1, 3,5,7,9,12,13,13, 2, 6,10,14,18,24,26,30}};

const kal_uint8 coloradj_rb[9][7]={ {8, 3,16,16, 6,16,27},
												{8, 4,16,16, 8,16,25},
												{8, 6,16,16,12,16,21},
												{8, 7,16,16,14,16,19},
												{8, 8,16,16,16,16,16},
												{8,10,16,16,20,16,11},
												{8,12,16,16,23,16, 8},
												{8,13,16,16,26,16, 5},
												{8,14,16,16,28,16, 2}};

const kal_uint8 coloradj_g[9][7]={ 	{16, 6,32,32, 6,16,26},
												{16, 8,32,32, 8,16,25},
												{16,12,32,32,12,16,20},
												{16,14,32,32,14,16,19},
												{16,16,32,32,16,16,16},
												{16,20,32,32,20,16,12},
												{16,23,32,32,23,16, 8},
												{16,26,32,32,26,16, 6},
												{16,28,32,32,28,16, 3}};

/*************************************************************************
* FUNCTION
*	image_effect_enc_process
*
* DESCRIPTION
*	This function process special effect in PREVIEW, CAPTURE and MPEG4
*	ENCODE mode.
*
* PARAMETERS
*	effect_enc	:	one of the image effect enum
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void image_effect_enc_process(kal_uint8 effect_enc)
{
	effect_enc_normal();
	image_effect_enc=effect_enc;
	image_effect_enc_handler();
}

/*************************************************************************
* FUNCTION
*	image_effect_dec_process
*
* DESCRIPTION
*	This function provides special effect in VIDEO PLAYBACK,
*	IMAGE PLAYBACK and POST-PORCESSING mode.
*
* PARAMETERS
*	None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void image_effect_dec_process(IMAGE_EFFECT_DEC_STRUCT *effect_dec_para)
{
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
	RESZ_CFG_STRUCT rez_cfg;
	RESZ_PXL_CFG_STRUCT rez_pxl_cfg;
	kal_uint16 src_width, src_height, target_width, target_height;

	image_effect_dec_para.data_type=effect_dec_para->data_type;
	image_effect_dec_para.data_order=effect_dec_para->data_order;
	image_effect_dec_para.source_buffer_address=effect_dec_para->source_buffer_address;
	image_effect_dec_para.dest1_buffer_address=effect_dec_para->dest1_buffer_address;
	image_effect_dec_para.dest2_buffer_address=effect_dec_para->dest2_buffer_address;
	image_effect_dec_para.image_width=effect_dec_para->image_width;
	image_effect_dec_para.image_height=effect_dec_para->image_height;
	image_effect_dec_para.effect_index=effect_dec_para->effect_index;
	image_effect_dec_para.image_effect_dec_cb=effect_dec_para->image_effect_dec_cb;

	ibw1_para.bs=image_effect_dec_para.dest1_buffer_address;
	ibw1_para.pxlnum=(image_effect_dec_para.image_width)*(image_effect_dec_para.image_height);
	ibw1_para.cb=imgdma_ibw1_callback;
	ibr1_para.type=image_effect_dec_para.data_type;
	ibr1_para.order=image_effect_dec_para.data_order;
	ibr1_para.bs=image_effect_dec_para.source_buffer_address;
	ibr1_para.pxlnum=(image_effect_dec_para.image_width)*(image_effect_dec_para.image_height);

	rez_cfg.src1=SRC_MEM;
	rez_cfg.pcontinue=0;
	rez_cfg.pixel_sel=1;
	rez_cfg.run2=0;

	rez_pxl_cfg.wmsize=4;	//3<wmsize<17
	rez_pxl_cfg.wmbase=0;

	src_width=image_effect_dec_para.image_width;
	src_height=image_effect_dec_para.image_height;
	target_width=image_effect_dec_para.image_width;
	target_height=image_effect_dec_para.image_height;

	RESZ_Open(SCENARIO_IMG_EFFECT_ID);
	RESZ_Config(&rez_cfg,&rez_pxl_cfg, SCENARIO_IMG_EFFECT_ID);
	RESZ_SetSize(src_width, src_height, target_width, target_height,SCENARIO_IMG_EFFECT_ID);
	RESZ_Start(SCENARIO_IMG_EFFECT_ID);

	IBW1_COMPLETE_FLAG=0;
	IMGPROC_Open(SCENARIO_IMG_EFFECT_ID);
	IMGPROC_SelectMode(IMGPROC_IMAGE_CON_IE, SCENARIO_IMG_EFFECT_ID);
	image_effect_dec_handler();
	IMGPROC_Close(SCENARIO_IMG_EFFECT_ID);
	RESZ_Close(SCENARIO_IMG_EFFECT_ID);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
	image_effect_dec_para.data_type=effect_dec_para->data_type;
	image_effect_dec_para.data_order=effect_dec_para->data_order;
	image_effect_dec_para.source_buffer_address=effect_dec_para->source_buffer_address;
	image_effect_dec_para.dest1_buffer_address=effect_dec_para->dest1_buffer_address;
	image_effect_dec_para.dest2_buffer_address=effect_dec_para->dest2_buffer_address;
	image_effect_dec_para.effect_index=effect_dec_para->effect_index;
	IBW1_COMPLETE_FLAG=0;
		
	ipp_config_data.src_color_mode=effect_dec_para->data_type;
	ipp_config_data.src_color_order=effect_dec_para->data_order;
	ipp_config_data.dest_color_mode=effect_dec_para->dest_color_mode;
	ipp_config_data.src_address=effect_dec_para->source_buffer_address;
	ipp_config_data.dest_address=effect_dec_para->dest1_buffer_address;
	ipp_config_data.src_width=effect_dec_para->image_width;
	ipp_config_data.src_height=effect_dec_para->image_height;
	ipp_config_data.ipp_effect_cb=imgdma_ibw1_callback;

	open_image_data_path(SCENARIO_IMG_EFFECT_ID);
	image_effect_dec_handler();
	close_image_data_path(SCENARIO_IMG_EFFECT_ID);
#endif
}

/*************************************************************************
* FUNCTION
*	image_adj_dec_process
*
* DESCRIPTION
*	This function provides adjustment effects in IMAGE PLAYBACK and
*	POST-PORCESSING mode.
*
* PARAMETERS
*	None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void image_adj_dec_process(IMAGE_EFFECT_DEC_STRUCT *effect_dec_para)
{
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
	RESZ_CFG_STRUCT rez_cfg;
	RESZ_PXL_CFG_STRUCT rez_pxl_cfg;
	kal_uint16 src_width, src_height, target_width, target_height;

	image_adj_dec_para.data_type=effect_dec_para->data_type;
	image_adj_dec_para.data_order=effect_dec_para->data_order;
	image_adj_dec_para.source_buffer_address=effect_dec_para->source_buffer_address;
	image_adj_dec_para.dest1_buffer_address=effect_dec_para->dest1_buffer_address;
	image_adj_dec_para.image_width=effect_dec_para->image_width;
	image_adj_dec_para.image_height=effect_dec_para->image_height;
	image_adj_dec_para.effect_index=effect_dec_para->effect_index;
	image_adj_dec_para.adj_level=effect_dec_para->adj_level;
	image_adj_dec_para.image_effect_dec_cb=effect_dec_para->image_effect_dec_cb;

	ibw1_para.bs=image_adj_dec_para.dest1_buffer_address;
	ibw1_para.pxlnum=(image_adj_dec_para.image_width)*(image_adj_dec_para.image_height);
	ibw1_para.cb=imgdma_ibw1_callback;
	ibr1_para.type=image_adj_dec_para.data_type;
	ibr1_para.order=image_adj_dec_para.data_order;
	ibr1_para.bs=image_adj_dec_para.source_buffer_address;
	ibr1_para.pxlnum=(image_adj_dec_para.image_width)*(image_adj_dec_para.image_height);

	rez_cfg.src1=SRC_MEM;
	rez_cfg.pcontinue=0;
	rez_cfg.pixel_sel=1;
	rez_cfg.run2=0;

	rez_pxl_cfg.wmsize=4;	//3<wmsize<17
	rez_pxl_cfg.wmbase=0;

	src_width=image_adj_dec_para.image_width;
	src_height=image_adj_dec_para.image_height;
	target_width=image_adj_dec_para.image_width;
	target_height=image_adj_dec_para.image_height;

	RESZ_Open(SCENARIO_IMG_EFFECT_ID);
	RESZ_Config(&rez_cfg,&rez_pxl_cfg, SCENARIO_IMG_EFFECT_ID);
	RESZ_SetSize(src_width, src_height, target_width, target_height,SCENARIO_IMG_EFFECT_ID);
	RESZ_Start(SCENARIO_IMG_EFFECT_ID);

	IBW1_COMPLETE_FLAG=0;
	IMGPROC_Open(SCENARIO_IMG_EFFECT_ID);
	clean_imgprc_coefficient(SCENARIO_IMG_EFFECT_ID);
	IMGPROC_SelectMode(IMGPROC_IMAGE_CON_IE, SCENARIO_IMG_EFFECT_ID);
	image_adj_dec_handler();
	IMGPROC_Close(SCENARIO_IMG_EFFECT_ID);
	RESZ_Close(SCENARIO_IMG_EFFECT_ID);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
	image_adj_dec_para.effect_index=effect_dec_para->effect_index;
	image_adj_dec_para.adj_level=effect_dec_para->adj_level;
	IBW1_COMPLETE_FLAG=0;

	ipp_config_data.src_color_mode=effect_dec_para->data_type;
	ipp_config_data.src_color_order=effect_dec_para->data_order;
	ipp_config_data.dest_color_mode=effect_dec_para->dest_color_mode;
	ipp_config_data.src_address=effect_dec_para->source_buffer_address;
	ipp_config_data.dest_address=effect_dec_para->dest1_buffer_address;
	ipp_config_data.src_width=effect_dec_para->image_width;
	ipp_config_data.src_height=effect_dec_para->image_height;
	ipp_config_data.ipp_effect_cb=imgdma_ibw1_callback;

	open_image_data_path(SCENARIO_IMG_EFFECT_ID);
	image_adj_dec_handler();
	close_image_data_path(SCENARIO_IMG_EFFECT_ID);
#endif
}

/*************************************************************************
* FUNCTION
*	adjustment_hue_para
*
* DESCRIPTION
*	This function adjustments hue parameters in PREVIEW and CAPTURE mode
*
* PARAMETERS
*	None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void adjustment_hue_para(MMDI_SCENERIO_ID owner_id, kal_uint16 degree)
{
	IMGPROC_HUE_STURCT hue_para;

	if(degree<=90)
	{
		hue_para.c11=sine[90-degree];
		hue_para.c12=sine[degree];
		hue_para.c21=-sine[degree];
		hue_para.c22=sine[90-degree];
	}
	else if(degree>90 && degree<=180)
	{
		hue_para.c11=-sine[degree-90];
		hue_para.c12=sine[180-degree];
		hue_para.c21=-sine[180-degree];
		hue_para.c22=-sine[degree-90];
	}
	else if(degree>180 && degree<=270)
	{
		hue_para.c11=-sine[270-degree];
		hue_para.c12=-sine[degree-180];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -