📄 imgproc.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:
* ---------
* imgporc.c
*
* Project:
* --------
* Maui_Software
*
* Description:
* ------------
* Driver of image processor
*
* 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!
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
#include "Drv_comm.h"
#include "reg_base.h"
#include "stack_config.h"
#include "intrCtrl.h"
#include "visual_comm.h"
#include "visualhisr.h"
#include"imgproc.h"
#include "drvpdn.h"
#include "img_comm.h"
/*
NOTE:
1. open
2. select mode
3. set pixel effect or set mask(option)
3. set parameters(option)
4. start
5. stop
6. close
II. CBA and HSA will take effect simutaneously, reset the parameters before
input the parameters.
*/
// global variables
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
static IMGPROC_DCB_STRUCT imgproc_dcb;
#endif
static kal_eventgrpid IMGPROC_Events = 0;
/*
* FUNCTION
* IMGPROC_HISR_Entry
*
* DESCRIPTION
* Hisr for image processor(stands for filter mode)
*
* CALLS
*
* PARAMETERS
*
* RETURNS
* None
*
* GLOBALS AFFECTED
* imgproc_dcb.state
*/
void INTERN IMGPROC_HISR_Entry(void)
{
kal_uint32 reg = DRV_Reg32(IMGPROC_INTR);
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
ASSERT(imgproc_dcb.mask != FILTER_NONE);
ASSERT(imgproc_dcb.state == IMGPROC_BUSY);
if(reg & IMGPROC_INTR_INT)
{
if(imgproc_dcb.cb)
imgproc_dcb.cb();
else
kal_set_eg_events(IMGPROC_Events,IMGPROC_EVENT,KAL_OR);
}
else
ASSERT(0);
imgproc_dcb.state = IMGPROC_READY;
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
if(reg & IMGPROC_INTR_INT)
kal_set_eg_events(IMGPROC_Events,IMGPROC_EVENT,KAL_OR);
else
ASSERT(0);
#endif
IRQClearInt(IRQ_IMGPROC_CODE);
IRQUnmask(IRQ_IMGPROC_CODE);
}
/*
* FUNCTION
* IMGPROC_LISR_Entry
*
* DESCRIPTION
* Lisr for image processor(stands for filter mode)
*
* CALLS
*
* PARAMETERS
*
* RETURNS
* None
*
* GLOBALS AFFECTED
* None
*/
void INTERN IMGPROC_LISR_Entry(void)
{
IRQMask(IRQ_IMGPROC_CODE);
visual_active_hisr(VISUAL_IMGPROC_HISR_ID);
}
/*
* FUNCTION
* IMGPROC_Init
*
* DESCRIPTION
* Initialize the IMGPROC driver and it should be called only once.
*
* CALLS
*
* PARAMETERS
*
* RETURNS
* None
*
* GLOBALS AFFECTED
* None
*/
kal_int32 API IMGPROC_Init(void)
{
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
ASSERT(IMGPROC_Events == 0);
IMGPROC_Events = kal_create_event_group("IMGPROC Events");
VISUAL_Register_HISR(VISUAL_IMGPROC_HISR_ID,IMGPROC_HISR_Entry);
IRQ_Register_LISR(IRQ_IMGPROC_CODE, IMGPROC_LISR_Entry,"IMGPROC");
IRQSensitivity(IRQ_IMGPROC_CODE,LEVEL_SENSITIVE);
IRQUnmask(IRQ_IMGPROC_CODE);
kal_mem_set(&imgproc_dcb,0,sizeof(IMGPROC_DCB_STRUCT));
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
IMGPROC_Events = kal_create_event_group("IMGPROC Events");
VISUAL_Register_HISR(VISUAL_IMGPROC_HISR_ID,IMGPROC_HISR_Entry);
IRQ_Register_LISR(IRQ_IMGPROC_CODE, IMGPROC_LISR_Entry,"IMGPROC");
IRQSensitivity(IRQ_IMGPROC_CODE,LEVEL_SENSITIVE);
IRQUnmask(IRQ_IMGPROC_CODE);
#endif
return NO_ERROR;
}
/*
* FUNCTION
* IMGPROC_Open
*
* DESCRIPTION
* Set owner of the IMGPROC. While one owner open the IMGPROC, no one
* is allowed to use IMGPROC untile the owern close it.
*
* CALLS
*
* PARAMETERS
*
* RETURNS
* None
*
* GLOBALS AFFECTED
* imgproc_dcb.owner
*/
kal_int32 API IMGPROC_Open(MMDI_SCENERIO_ID owner)
{
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
ENTER_CRITICAL();
ASSERT(imgproc_dcb.owner == SCENARIO_UNKNOW_ID);
imgproc_dcb.owner = owner;
EXIT_CRITICAL();
DRVPDN_Disable(DRVPDN_CON3,DRVPDN_CON3_IMGPROC,PDN_IMGPROC);
#endif
return NO_ERROR;
}
/*
* FUNCTION
* IMGPROC_Close
*
* DESCRIPTION
* Release the ownership of IMGPORC
*
* CALLS
*
* PARAMETERS
*
* RETURNS
* None
*
* GLOBALS AFFECTED
* imgproc_dcb.owner
*/
kal_int32 API IMGPROC_Close(MMDI_SCENERIO_ID owner)
{
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
ASSERT(imgproc_dcb.owner == owner);
IMGPROC_Stop(owner);
IMGPROC_RESET();
IMGPROC_DISABLE_INT();
kal_mem_set(&imgproc_dcb,0,sizeof(IMGPROC_DCB_STRUCT));
DRVPDN_Enable(DRVPDN_CON3,DRVPDN_CON3_IMGPROC,PDN_IMGPROC);
#endif
return NO_ERROR;
}
/*
* FUNCTION
* IMGPROC_SelectMode
*
* DESCRIPTION
* Selet operation mode for image processor.
* It determines the color space conversion
* It must be called before start
*
* CALLS
*
* PARAMETERS
*
* RETURNS
* None
*
* GLOBALS AFFECTED
* imgproc_dcb.gmode
*
* NOTE
* RGB->YUV
* RGB->RGB (Memory effect, GIF decoder)
* YUV->YUV, RGB (MPEG4 encoder)
* YUV->YUV (JPEG encoder)
* YUV->RGB (preview, JPEG decoder, MPEG4 dedocer)
*/
kal_int32 API IMGPROC_SelectMode(IMGPROC_MODE_ENUM mode, MMDI_SCENERIO_ID owner)
{
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
ASSERT(imgproc_dcb.owner == owner);
ASSERT(imgproc_dcb.state != IMGPROC_BUSY);
imgproc_dcb.gmode = mode;
imgproc_dcb.state = IMGPROC_READY;
#endif
return NO_ERROR;
}
/*
* FUNCTION
* IMGPROC_SetEffect_Pixel
*
* DESCRIPTION
* enable pixel effects
* set all member to zero to disable all effects
*
* CALLS
*
* PARAMETERS
*
* RETURNS
* None
*
* GLOBALS AFFECTED
* imgproc_dcb.feature
*/
kal_int32 API IMGPROC_SetPixelEffect(IMGPROC_PIXEL_EFFECT_STURCT *s, MMDI_SCENERIO_ID owner)
{
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
ASSERT(imgproc_dcb.owner == owner);
ASSERT(imgproc_dcb.state != IMGPROC_BUSY);
imgproc_dcb.feature = (s->hsa) | (s->cba << 3) | (s->inv << 4) |(s->clr << 5) |
(s->gma << 6);
#endif
return NO_ERROR;
}
/*
* FUNCTION
* IMGPROC_SetFeature
*
* DESCRIPTION
* enable filter effect or pixel effect(cannot function simutaneously)
*
* CALLS
*
* PARAMETERS
*
* RETURNS
* None
*
* GLOBALS AFFECTED
* None
*/
kal_int32 API IMGPROC_SetMask(IMGPROC_FILTER_ENUM mask, MMDI_SCENERIO_ID owner)
{
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
ASSERT(imgproc_dcb.owner == owner);
ASSERT(imgproc_dcb.state != IMGPROC_BUSY);
imgproc_dcb.mask = mask;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -