⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buxx_sample.c

📁 bu1566dsp芯片用来处理ov7660或其他30万摄像模组的图像预览.图像拍照(jpeg压缩)
💻 C
📖 第 1 页 / 共 2 页
字号:
/* ************************************************************************ */
/*                                                                          */
/* 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 + -