📄 _csl_prevgetoutsize.c
字号:
/** @file _csl_prevGetOutSize.c
*
* @brief File for functional layer of CSL API @a CSL_prevGetOutSize()
*
* Description
* - The @a CSL_prevGetOutSize() function definition & it's associated
* functions
*
* @date 11th May, 2005
* @author Jesse Villarreal.
*/
#include <csl_prev_aux.h>
#pragma CODE_SECTION (CSL_prevGetOutSize, ".text:csl_section:prev");
/** @brief This function calculates the output width and height of the
* output of the preview engine. Since this function bases its
* calculations on register values, this should be called after
* all other settings have been set except the preview enable.
*/
CSL_Status CSL_prevGetOutSize(
/** Pointer to the object that holds reference to the
* instance of PREV requested after the call
*/
CSL_PrevHandle hPrev,
/** Returns the response
*/
CSL_PrevOutSizeData *response
){
/** As per the spec, the following table outlines how many pixels/lines
are subtracted from the output of the input averager depending on which
modes are on:
Function ON Pix/line Lines
---------------------------------------------------
Horizontal Median Filter 4 0
Noise Filter 4 4
CFA (bayer, Fuji, or Sony) 4 4
CFA (Foveon or 2x dnsamp) 0 2
"Color Suppression OR
Luminance Enhancement" 2 0
---------------------------------------------------
Maximum Total 14 8
*/
Uint16 width, height;
CSL_PrevRegsOvly prevRegs = hPrev->regs;
width = CSL_FEXT(prevRegs->HORZ_INFO, PREV_HORZ_INFO_EPH) -
CSL_FEXT(prevRegs->HORZ_INFO, PREV_HORZ_INFO_SPH) + 1;
height = CSL_FEXT(prevRegs->VERT_INFO, PREV_VERT_INFO_ELV) -
CSL_FEXT(prevRegs->VERT_INFO, PREV_VERT_INFO_SLV) + 1;
// Divide the width (by right shifting) by the number of averaged pixels
width >>= CSL_FEXT(prevRegs->AVE, PREV_AVE_COUNT);
if(CSL_FEXT(prevRegs->PCR, PREV_PCR_HMEDEN) == CSL_PREV_HMED_ENABLE)
width -= 4;
if(CSL_FEXT(prevRegs->PCR, PREV_PCR_NFEN) == CSL_PREV_NF_ENABLE) {
width -= 4;
height -= 4;
}
if(CSL_FEXT(prevRegs->PCR, PREV_PCR_CFAEN) == CSL_PREV_CFA_ENABLE) {
Uint16 cfa;
cfa = CSL_FEXT(prevRegs->PCR, PREV_PCR_CFAFMT);
switch(cfa) {
case CSL_PREV_CFAFMT_CONV_BAYER:
case CSL_PREV_CFAFMT_SONY_VGAMODE:
case CSL_PREV_CFAFMT_FUJI_HONEYCOMB:
width -= 4;
height -= 4;
break;
case CSL_PREV_CFAFMT_RGBFOVEON_BYPASSCFA:
case CSL_PREV_CFAFMT_V_AND_H_2X_DNSAMPLE:
case CSL_PREV_CFAFMT_RRRGGGBBBFOVEON:
height -= 2;
break;
default:
return (CSL_ESYS_INVPARAMS);
}
}
if( CSL_FEXT(prevRegs->PCR, PREV_PCR_SUPEN) == CSL_PREV_SUP_ENABLE ||
CSL_FEXT(prevRegs->PCR, PREV_PCR_YNENHEN) == CSL_PREV_NL_YENH_ENABLE
)
width -= 2;
response->width = width;
response->height = height;
return (CSL_SOK);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -