?? buxx_sample.c
字號:
/* ************************************************************************ */
/* */
/* ROHM BU15xx demo firmware on MD2306 */
/* Client : ROHM Co., Ltd.丂 丂丂丂丂丂 */
/* End User : */
/* */
/* Processor: ARM-7TDMI(THUMB Mode) */
/* Dev.Env. : ARM-SDTv2.51 */
/* */
/* Sample Routines */
/* */
/* file : BUxx_Sample.c */
/* Auther : J.SATO(NTC)丂 */
/* Date : 2004/Jul./1 */
/* */
/* Copyright (c) 2002-04 Naritagiken Co., Ltd. All rights reserved. */
/* ************************************************************************ */
/* ************************************************** */
/* INCLUDE FILES */
/* ************************************************** */
#include "BUxx_Sample.h"
#include <stdio.h>
#include <stdlib.h>
/* ************************************************** */
/* TYPEDEF */
/* ************************************************** */
/* ************************************************** */
/* LOCAL DEFINES */
/* ************************************************** */
/* ************************************************** */
/* GLOBAL VARIABLE */
/* ************************************************** */
/* ************************************************** */
/* CONST */
/* ************************************************** */
/* ************************************************** */
/* GLOBAL FUNCTIONS */
/* ************************************************** */
/* ************************************************** */
/* LOCAL FUNCTIONS */
/* ************************************************** */
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
void sStartPreview(void)
{
CAMSET cam;
// aDSC_overlayframe_off();
// data_write(OVL_CNT, 0x0000); //william for overlay
#if defined SENSOR_ROT90
cam.rot_h_vflip = sROT_ON | sHFLIP_OFF | sVFLIP_OFF;
cam.srkx = M_LCD_WSIZE ;
cam.srky = M_LCD_WSIZE* 4 / 3;
#else
cam.rot_h_vflip = sROT_OFF | sHFLIP_OFF | sVFLIP_OFF;
cam.srkx = M_LCD_HSIZE * 4 / 3;
cam.srky = M_LCD_HSIZE;
#endif
cam.xsize = M_LCD_WSIZE;
cam.ysize = M_LCD_HSIZE;
if (cam.rot_h_vflip & sROT_ON)
{
cam.cst_x = (cam.srkx - cam.xsize) / 2;
cam.cst_y = (cam.srky - cam.ysize) / 2 + 1;
if(cam.cst_y%2) cam.cst_y--;
}
else
{
cam.cst_x = (cam.srkx - cam.xsize) / 2 + 1;
cam.cst_y = (cam.srky - cam.ysize) / 2;
if(cam.cst_x%2) cam.cst_x--;
}
cam.mst_x = 0;
cam.mst_y = 0;
aDSC_Start_Preview(0, 0, M_LCD_WSIZE, M_LCD_HSIZE, &cam);
}
void sExOverlayPreview(void)
{
CAMSET cam;
// aDSC_ExOvlMemory_write_rgb565(OvlFrame_dat,0,0);
// aDSC_ExOvlmemory_set();
// data_write(OVL_FRMST1, (86 << 8) | gl_ExOvl_High); //95,60
#if defined SENSOR_ROT90
cam.rot_h_vflip = sROT_ON | sHFLIP_OFF | sVFLIP_OFF;
cam.srkx = M_LCD_WSIZE ;
cam.srky = M_LCD_WSIZE* 4 / 3;
#else
cam.rot_h_vflip = sROT_OFF | sHFLIP_OFF | sVFLIP_OFF;
cam.srkx = M_LCD_HSIZE * 4 / 3;
cam.srky = M_LCD_HSIZE;
#endif
cam.xsize = M_LCD_WSIZE;
cam.ysize = M_LCD_HSIZE;
if (cam.rot_h_vflip & sROT_ON)
{
cam.cst_x = (cam.srkx - cam.xsize) / 2;
cam.cst_y = (cam.srky - cam.ysize) / 2 + 1;
if(cam.cst_y%2) cam.cst_y--;
}
else
{
cam.cst_x = (cam.srkx - cam.xsize) / 2 + 1;
cam.cst_y = (cam.srky - cam.ysize) / 2;
if(cam.cst_x%2) cam.cst_x--;
}
cam.mst_x = 0;
cam.mst_y = 0;
aDSC_Start_Preview(0, 0, M_LCD_WSIZE, M_LCD_HSIZE, &cam);
}
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
void sOverlayPreview(void)
{
CAMSET cam;
//aDSC_fmemory_write_rgb565_2(frame_dat, 10, 10, 144, 176);
// aDSC_fmemory_write_rgb565(OvlFrame_dat, 10, 60);
aDSC_maskmemory_write(0, 0,144, 176, TRAN_KEY_COLOR);
aDSC_overlayframe_on();
#if defined SENSOR_ROT90
cam.rot_h_vflip = sROT_ON | sHFLIP_OFF | sVFLIP_OFF;
cam.srkx = M_LCD_WSIZE ;
cam.srky = M_LCD_WSIZE* 4 / 3;
#else
cam.rot_h_vflip = sROT_OFF | sHFLIP_OFF | sVFLIP_OFF;
cam.srkx = M_LCD_HSIZE * 4 / 3;
cam.srky = M_LCD_HSIZE;
#endif
cam.xsize = M_LCD_WSIZE;
cam.ysize = M_LCD_HSIZE;
if (cam.rot_h_vflip & sROT_ON)
{
cam.cst_x = (cam.srkx - cam.xsize) / 2;
cam.cst_y = (cam.srky - cam.ysize) / 2 + 1;
if(cam.cst_y%2) cam.cst_y--;
}
else
{
cam.cst_x = (cam.srkx - cam.xsize) / 2 + 1;
cam.cst_y = (cam.srky - cam.ysize) / 2;
if(cam.cst_x%2) cam.cst_x--;
}
cam.mst_x = 0;
cam.mst_y = 0;
aDSC_Start_Preview(0, 0, M_LCD_WSIZE, M_LCD_HSIZE, &cam);
}
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
void sFilterSet(const int sel)
{
switch (sel)
{
case sDISABLE:
aDSC_filter_set("disable");
break;
case sTHD:
aDSC_filter_set("thd", 0x0060);
break;
case sGRAY:
aDSC_filter_set("gray");
break;
case sSEPIA:
aDSC_filter_set("sepia", 0x20, 0xf0, 0x0000);
break;
case sEMBOSS:
aDSC_filter_set("emboss", 0x0d);
break;
case sEDGE1:
aDSC_filter_set("edge1", 0x0001, 0x0d);
break;
case sEDGE2:
aDSC_filter_set("edge2", 0x0b, 0x2f);
break;
case sNEGA:
aDSC_filter_set("nega");
break;
default:
aDSC_filter_set("disable");
break;
}
}
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
void sJPEGFEncode(UINT16 * start_add, UINT32 * const jpeg_size)
{
aDSC_FrameEncode(start_add, jpeg_size, 0, 0, M_LCD_WSIZE, M_LCD_HSIZE,
0);
aDSC_fmemory_clear(0, 0, M_LCD_WSIZE, M_LCD_HSIZE,0x00f8);
aDSC_data_trans_st(0, 0, M_LCD_WSIZE, M_LCD_HSIZE);
}
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
#if 1
void sJPEGCEncode(UINT16 * start_add,const UINT16 je_q)
{
CAMSET cam;
UINT16* p_u16JpgCode=(UINT16 *)(start_add+2);
UINT32 u32JpgSize=JPEG_BUFFER;
cam.rot_h_vflip = sROT_OFF | sHFLIP_OFF | sVFLIP_OFF;
cam.srkx = CAM_HSIZE;
cam.srky = CAM_VSIZE;
cam.xsize = CAM_HSIZE;
cam.ysize = CAM_VSIZE;
if (cam.rot_h_vflip & sROT_ON)
{
cam.cst_x = (cam.srkx - cam.xsize) / 2 ;
cam.cst_y = (cam.srky - cam.ysize) / 2+ 1;
if(cam.cst_y%2) cam.cst_y--;
}
else
{
cam.cst_x = (cam.srkx - cam.xsize) / 2 + 1;
cam.cst_y = (cam.srky - cam.ysize) / 2;
if(cam.cst_x%2) cam.cst_x--;
}
cam.mst_x = 0;
cam.mst_y = 0;
*start_add=0;
*(start_add+1)=0;
aDSC_CameraEncode(p_u16JpgCode, &u32JpgSize, &cam, je_q, sJE_HFLIP_OFF);
*start_add=(UINT16)((u32JpgSize & 0xffff0000)>>16);
*(start_add+1)=(UINT16)(u32JpgSize & 0x0000ffff);
aDSC_fmemory_clear(0, 0, M_LCD_WSIZE, M_LCD_HSIZE, 0x0000);
aDSC_data_trans_st(0, 0, M_LCD_WSIZE, M_LCD_HSIZE);
}
#else
void sJPEGCEncode(UINT16 * start_add, UINT32 * const jpeg_size)
{
CAMSET cam;
cam.rot_h_vflip = sROT_OFF | sHFLIP_OFF | sVFLIP_OFF;
cam.srkx = CAM_HSIZE;
cam.srky = CAM_VSIZE;
cam.xsize = CAM_HSIZE;
cam.ysize = CAM_VSIZE;
if (cam.rot_h_vflip & sROT_ON)
{
cam.cst_x = (cam.srkx - cam.xsize) / 2;
cam.cst_y = (cam.srky - cam.ysize) / 2 + 1;
if(cam.cst_y%2) cam.cst_y--;
}
else
{
cam.cst_x = (cam.srkx - cam.xsize) / 2 + 1;
cam.cst_y = (cam.srky - cam.ysize) / 2;
if(cam.cst_x%2) cam.cst_x--;
}
cam.mst_x = 0;
cam.mst_y = 0;
aDSC_CameraEncode(start_add, jpeg_size, &cam, 9, sJE_HFLIP_OFF);
aDSC_fmemory_clear(0, 0, M_LCD_WSIZE, M_LCD_HSIZE, 0x0000);
aDSC_data_trans_st(0, 0, M_LCD_WSIZE, M_LCD_HSIZE);
// gl_bitstream_size = *jpeg_size;
}
#endif
void sJPEGCEncode2(UINT16 * start_add,const UINT16 je_q)
{
CAMSET cam;
UINT16* p_u16JpgCode=(UINT16 *)(start_add+2);
UINT32 u32JpgSize=100*1024;
cam.rot_h_vflip = sROT_OFF | sHFLIP_OFF | sVFLIP_OFF;
cam.srkx = 320;
cam.srky = 240;
cam.xsize = 320;
cam.ysize = 240;
if (cam.rot_h_vflip & sROT_ON)
{
cam.cst_x = (cam.srkx - cam.xsize) / 2 ;
cam.cst_y = (cam.srky - cam.ysize) / 2+ 1;
if(cam.cst_y%2) cam.cst_y--;
}
else
{
cam.cst_x = (cam.srkx - cam.xsize) / 2 + 1;
cam.cst_y = (cam.srky - cam.ysize) / 2;
if(cam.cst_x%2) cam.cst_x--;
}
cam.mst_x = 0;
cam.mst_y = 0;
*start_add=0;
*(start_add+1)=0;
aDSC_CameraEncode(p_u16JpgCode, &u32JpgSize, &cam, je_q, sJE_HFLIP_OFF);
*start_add=(UINT16)((u32JpgSize & 0xffff0000)>>16);
*(start_add+1)=(UINT16)(u32JpgSize & 0x0000ffff);
aDSC_fmemory_clear(0, 0, M_LCD_WSIZE, M_LCD_HSIZE, 0x0000);
aDSC_data_trans_st(0, 0, M_LCD_WSIZE, M_LCD_HSIZE);
}
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
void sJPEGDecode(UINT16 * start_add, UINT32 * const jpeg_size)
{
CAMSET cam;
cam.rot_h_vflip = sROT_OFF | sHFLIP_OFF | sVFLIP_OFF;
cam.srkx = M_LCD_WSIZE;
cam.srky = M_LCD_HSIZE;
cam.xsize = M_LCD_WSIZE;
cam.ysize = M_LCD_HSIZE;
cam.cst_x = 0;
cam.cst_y = 0;
cam.mst_x = 0;
cam.mst_y = 0;
aDSC_Decode(start_add, jpeg_size, &cam);
aDSC_data_trans_st(0, 0, M_LCD_WSIZE, M_LCD_HSIZE);
}
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
void sJPEGCameraDecode(UINT16 * start_add, UINT16 u16CstX, UINT16 u16CstY)
{
CAMSET cam;
UINT16 *p_u16JpgCode=(UINT16 *)(start_add+2);
UINT16 u16OvlPos=0;
UINT32 u32JpgSize=0;
sFilterSet(sDISABLE);
u32JpgSize=(*start_add)<<16;
u32JpgSize=u32JpgSize|(*(start_add+1));
if(*p_u16JpgCode!=0xd8ff) //if dec before enc, return
{
data_write(OVL_CNT,0x0000);
return;
}
if((u16CstX/20)%2==0) u16OvlPos=(u16CstX/20)<<8;
else u16OvlPos=(u16CstX/20+1)<<8;
u16OvlPos = u16OvlPos | (u16CstY/20) ;
data_write(OVL_FRMST1, u16OvlPos); //95,60
cam.rot_h_vflip = sROT_OFF | sHFLIP_OFF | sVFLIP_OFF;
cam.srkx = CAM_HSIZE;
cam.srky = CAM_VSIZE;
cam.xsize = M_LCD_WSIZE;
cam.ysize = M_LCD_HSIZE;
cam.cst_x = u16CstX;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -