📄 image_effect.c
字号:
/*****************************************************************************
* 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 + -