📄 camera.c
字号:
/*
*********************************camera.c***************************************
*/
#include "camera.h"
#include "chiplib.h"
#include "hal.h"
#include "topc.h"
#include "r2d_i.h"
PREVIEWINFO prvinfo;
JPEGINFO pJpeginfo;
//unsigned long jpg_buf[1024*20];
unsigned char jpg_buf[1024*20*4];
CAMCONFIG pCamConfig;
extern T_R2D_FRAMEBUFFER* r2d_g_framebuffer;
CAMU8 FLAG;
void S1D13716_Parameter_Initial(void)
{
pCamConfig.m_nCurAction = CAMERA_MODE; //表明处于camera模式状态
pCamConfig.m_nCurLCD = MAINLCD;
}
/*******************************************************************************
* Function: Windows_Set
* Parameters: none
* Returns: none
* Description: 用于设置overlay和main窗口
******************************************************************************/
void Overlay_Windows_Update(CAMU8 x_start, CAMU8 y_start, CAMU8 x_width, CAMU8 y_height/*, CAMU8 *Overlay_b*/)
{
UINT32 *pPmemory_Words_Pointer;
CAMU32 main_addr;
CAMU32 overlay_addr;
main_addr=GetStartAddress(cl_MAIN_WINDOW);
overlay_addr=GetStartAddress(cl_OVERLAY_WINDOW);
pPmemory_Words_Pointer = r2d_g_framebuffer->p_memory_words + 64*y_start;
halWriteData(4, overlay_addr+x_width*y_start*2, pPmemory_Words_Pointer, 128*16*4);
halWriteDisplay16(overlay_addr+128*16*2, 0x0001, 128*96);
clStartOneFrameTransfer();
}
void Enter_Camera_Mode(CAMU8 mode)
{
pCamConfig.m_nCurAction = CAMERA_MODE;
switch(mode)
{
case MAINLCD:
pCamConfig.m_nCurLCD = MAINLCD;
break;
case SUBLCD:
pCamConfig.m_nCurLCD = SUBLCD;
break;
}
}
void Exit_Camera_Mode(void)
{
pCamConfig.m_nCurAction = BYPSS_MODE;
}
void CamPreview_On(void)
{
previewStart();
/*zhq, 2004/08/17, modified for we use 5 times scale size rather than 3. */
prvinfo.XStart=(640-5*128)/2;
prvinfo.YStart=(480-5*96)/2;
prvinfo.Width=128*5;
prvinfo.Height=96*5;
prvinfo.ScaleRate=5;
previewZoom(&prvinfo);
MI_dbgPrintf("camera preview on");
}
void CamPreview_Off(void)
{
previewStop();
MI_dbgPrintf("camera preview off");
}
Boolean Camera_OnCapture(void)
{
Boolean retjpg;
memset(jpg_buf, 0, 1024*80);
jpegInit(&pJpeginfo);
/*zhq, 2004/08/17, modified for we use 5 times scale mode rather than 3. */
pJpeginfo.m_pBuf=(UInt8 *)jpg_buf;
pJpeginfo.m_BufSize=1024*80;
pJpeginfo.m_fMotionJPEG=FALSE;
pJpeginfo.m_FrameCount=1;
pJpeginfo.m_MemEnc=FALSE;
pJpeginfo.m_fSOE=FALSE;
pJpeginfo.m_Width=128*5;
pJpeginfo.m_Height=96*5;
pJpeginfo.m_XStart=(640-128*5)/2;
pJpeginfo.m_RWidth=128*5;
pJpeginfo.m_YStart=(480-96*5)/2;
pJpeginfo.m_RHeight=96*5;
pJpeginfo.m_fAFAP=TRUE;
pJpeginfo.m_fWrAlways=TRUE;
pJpeginfo.m_HScaleRate=5;
pJpeginfo.m_fIndScale=FALSE;
pJpeginfo.m_VScaleRate=5;
pJpeginfo.m_ScaleMode=0x01;
pJpeginfo.m_YUVFmt=YUVFmt422;
pJpeginfo.m_Delay=0;
MI_dbgPrintf("jpegEncode Start");
retjpg=jpegEncode(&pJpeginfo);
MI_dbgPrintf("jpegEncode End:%d",retjpg);
//halWriteReg8(REG022A_YOFFSET0, 0);
retjpg=jpegGetLastError();
MI_dbgPrintf("jpegEncode Error:%d",retjpg);
previewStop();
MI_dbgPrintf("camera preview stop");
#ifdef CAMERA_INTERRUPT_ENABLE
// wait_ARM_cycles(convert_nanosec_to_cycles(100000000));
#else
halDelayUS(1000000);
#endif
return retjpg;
}
int Camera_GetPicSize(void)
{
MI_dbgPrintf("Capture picture size = %d", pJpeginfo.m_EncSize);
return pJpeginfo.m_EncSize;
}
#if 0
void Camera_GetPic(UInt8* p)
{
int i;
MI_dbgPrintf("Camera_GetPic");
p = pJpeginfo.m_pBuf;
for(i = 0; i<10; i++)
{
MI_dbgPrintf("Capture picture data = %x", p[i]);
}
}
#else
unsigned char *Camera_GetPic(void)
{
return pJpeginfo.m_pBuf;
}
#endif
Camera_DisplayJPG(CAMU16 *jpg_buf, int size/*, int jpgtype*/)
{
Boolean retjpg;
jpegInit(&pJpeginfo);
pJpeginfo.m_pBuf=(UInt8 *)jpg_buf;
pJpeginfo.m_EncSize=size;
pJpeginfo.m_BufSize=1024*80;
pJpeginfo.m_fMotionJPEG=FALSE;
pJpeginfo.m_FrameCount=1;
pJpeginfo.m_MemEnc=FALSE;
pJpeginfo.m_fSOE=FALSE;
pJpeginfo.m_Width=0;
pJpeginfo.m_Height=0;
pJpeginfo.m_DesiredHeight=96;
pJpeginfo.m_DesiredWidth=128;
pJpeginfo.m_XStart=0;
pJpeginfo.m_RWidth=128;
pJpeginfo.m_YStart=0;
pJpeginfo.m_RHeight=96;
pJpeginfo.m_fAFAP=FALSE;
pJpeginfo.m_fWrAlways=TRUE;
pJpeginfo.m_HScaleRate=1;
pJpeginfo.m_fIndScale=FALSE;
pJpeginfo.m_VScaleRate=1;
pJpeginfo.m_ScaleMode=0x01;
pJpeginfo.m_YUVFmt=YUVFmt422;
pJpeginfo.m_fFastCpu=TRUE;
pJpeginfo.m_fScale=TRUE;
MI_dbgPrintf("jpegDecode Start");
retjpg=jpegDecode(&pJpeginfo);
MI_dbgPrintf("jpegDecode End:%d",retjpg);
retjpg=jpegGetLastError();
MI_dbgPrintf("jpegDecode Error:%d",retjpg);
//clStartOneFrameTransfer();
}
void S1D13716_Initial(void)
{
halAcquireController();
halInitController( fINIT_NORMAL );
if( MODEL == 1 )
{
}
else if( MODEL == 5 )
{
SetSwivelViewMode(cl_MAIN_WINDOW, 180);
}
}
void S1D13716_Power_Mode(CAMU8 mode)
{
switch(mode)
{
case POWER_ON:
PowerSaveMode(FALSE);
break;
case POWER_OFF:
PowerSaveMode(TRUE);
break;
default:
break;
}
}
void Select_LcdPort(CAMU8 port)
{
switch(port)
{
case MAINLCD_PORT:
halWriteReg8(REG004C_DISPSETTING, 0x41); // select the mainlcd-port
break;
case SUBLCD_PORT:
halWriteReg8(REG004C_DISPSETTING, 0x42); // select the sublcd-port
break;
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -