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

📄 w_interface.c

📁 bu1566dsp芯片用来处理ov7660或其他30万摄像模组的图像预览.图像拍照(jpeg压缩)
💻 C
📖 第 1 页 / 共 2 页
字号:
#define _W_INTERFACE_C_

#include "BUxx_aDSC.h"
#include "BUxx_Sample.h"
#include "W_Interface.h"

#ifdef _BU1563API_INTERFACE_
void fObjectInit(void)
{
    UINT16 i;

    gv_SetMaxNum = sizeof(cBase) / sizeof(cBase[0]);
		
    for (i = 0; i < gv_SetMaxNum; i++)
    {
        cBase[i]->fInit(cBase[i]);
    }
		
    gv_VideoData.p_u16JpgCode = gl_pJpegMem_Buf;
}

void fPreSizeInit(c_SetBase * p_cBaseSet)
{
    UINT16 i;
    c_PreSizeSet *p_cPreSizeSet = (c_PreSizeSet *) p_cBaseSet;
    p_cPreSizeSet->v_Set.u16MaxNum = sizeof(cPreSizeItem) / sizeof(cPreSizeItem[0]);

	for(i=0;i<p_cPreSizeSet->v_Set.u16MaxNum;i++)
	{
	    cPreSizeItem[i].m_pcamera->mst_x = cPreSizeItem[i].m_pwindow->st_x;
	    cPreSizeItem[i].m_pcamera->mst_y = cPreSizeItem[i].m_pwindow->st_y;
	    cPreSizeItem[i].m_pcamera->cst_x =
	        (cPreSizeItem[i].m_pcamera->srkx - cPreSizeItem[i].m_pcamera->xsize) / 2;
	    cPreSizeItem[i].m_pcamera->cst_y =
	        (cPreSizeItem[i].m_pcamera->srky - cPreSizeItem[i].m_pcamera->ysize) / 2;

	    if (cPreSizeItem[i].m_pcamera->rot_h_vflip & sROT_ON)
	    {
	        if (cPreSizeItem[i].m_pcamera->cst_y % 2)
	            cPreSizeItem[i].m_pcamera->cst_y++;
	    }
	    else
	    {
	        if (cPreSizeItem[i].m_pcamera->cst_x % 2)
	            cPreSizeItem[i].m_pcamera->cst_x++;
	    }
	}

}

void fFilterInit(c_SetBase * p_cBaseSet)
{
    c_FilterSet *p_cFilterSet = (c_FilterSet *) p_cBaseSet;
    p_cFilterSet->v_Set.u16MaxNum = sizeof(cFilterItem) / sizeof(cFilterItem[0]);
}

void fOvlInit(c_SetBase * p_cBaseSet)
{
    c_OvlSet *p_cOvlSet = (c_OvlSet *) p_cBaseSet;
    p_cOvlSet->v_Set.u16MaxNum = sizeof(cOvlItem) / sizeof(cOvlItem[0]);
}

void fJpgQualityInit(c_SetBase * p_cBaseSet)
{
    c_JpgQualitySet *p_cJpgQualitySet = (c_JpgQualitySet *) p_cBaseSet;
    p_cJpgQualitySet->v_Set.u16MaxNum = sizeof(cJpgQualityItem) / sizeof(cJpgQualityItem[0]);
}

void fJpgFuncInit(c_SetBase * p_cBaseSet)
{
    c_JpgFuncSet *p_cJpgFuncSet = (c_JpgFuncSet *) p_cBaseSet;
    p_cJpgFuncSet->v_Set.u16MaxNum = sizeof(cJpgFuncItem) / sizeof(cJpgFuncItem[0]);
}

void fJpgEncSizeInit(c_SetBase * p_cBaseSet)
{
    c_JpgEncSizeSet *p_cJpgEncSizeSet = (c_JpgEncSizeSet *) p_cBaseSet;
    p_cJpgEncSizeSet->v_Set.u16MaxNum = sizeof(cJpgEncSizeItem) / sizeof(cJpgEncSizeItem[0]);
}

void fJpgDecSizeInit(c_SetBase * p_cBaseSet)
{
    c_JpgDecSizeSet *p_cJpgDecSizeSet = (c_JpgDecSizeSet *) p_cBaseSet;
    p_cJpgDecSizeSet->v_Set.u16MaxNum = sizeof(cJpgDecSizeItem) / sizeof(cJpgDecSizeItem[0]);
}

//-----------------------------------------------------------------------------
//                                                             
//-----------------------------------------------------------------------------
void fPreSizeSet(c_SetBase * p_cBaseSet)
{
    c_PreSizeSet *p_PreSizeSet = (c_PreSizeSet *) p_cBaseSet;
    c_PreSizeItem *p_PreSizeItem =
        (c_PreSizeItem *) (p_PreSizeSet->p_PreSize + p_PreSizeSet->v_Set.u16CurIndex);

    gv_VideoData.p_Window = p_PreSizeItem->m_pwindow;
    gv_VideoData.p_Camera = p_PreSizeItem->m_pcamera;
    gv_VideoData.p_Item = &p_PreSizeItem->v_Item;
}

void fFilterSet(c_SetBase * p_cBaseSet)
{
    c_FilterSet *p_FilterSet = (c_FilterSet *) p_cBaseSet;
    c_FilterItem *p_FilterItem = 
		(c_FilterItem*)(p_FilterSet->p_Filter + p_FilterSet->v_Set.u16CurIndex);

    gv_VideoData.u16Filter=p_FilterItem->u16Filter;
    gv_VideoData.p_Item=&p_FilterItem->v_Item;
}

void fOvlSet(c_SetBase * p_cBaseSet)
{
    c_OvlSet *p_OvlSet = (c_OvlSet *) p_cBaseSet;
    c_OvlItem *p_OvlItem = 
		(c_OvlItem *) (p_OvlSet->p_Overlay + p_OvlSet->v_Set.u16CurIndex);

    gv_VideoData.p_Overlay = p_OvlItem->p_Overlay;
    gv_VideoData.p_Item = &p_OvlItem->v_Item;
}

void fJpgQualitySet(c_SetBase * p_cBaseSet)
{
    c_JpgQualitySet *p_JpgQualitySet = (c_JpgQualitySet *) p_cBaseSet;
    c_JpgQualityItem *p_JpgQualityItem = 
		(c_JpgQualityItem *) (p_JpgQualitySet->p_Quality + p_JpgQualitySet->v_Set.u16CurIndex);

    gv_VideoData.u16JpgQuality = p_JpgQualityItem->u16JpgQuality;
    gv_VideoData.p_Item = &p_JpgQualityItem->v_Item;
}

void fJpgFuncSet(c_SetBase * p_cBaseSet)
{
    c_JpgFuncSet *p_JpgFuncSet = (c_JpgFuncSet *) p_cBaseSet;
    c_JpgFuncItem *p_JpgFuncItem = 
		(c_JpgFuncItem *) (p_JpgFuncSet->p_Func + p_JpgFuncSet->v_Set.u16CurIndex);

    gv_VideoData.u16JpgFunc = p_JpgFuncItem->u16JpgFunc;
    gv_VideoData.p_Item = &p_JpgFuncItem->v_Item;
}

void fJpgEncSizeSet(c_SetBase * p_cBaseSet)
{
    c_JpgEncSizeSet *p_JpgEncSizeSet = (c_JpgEncSizeSet *) p_cBaseSet;
    c_JpgEncSizeItem *p_JpgEncSizeItem = 
		(c_JpgEncSizeItem *) (p_JpgEncSizeSet->p_EncSize + p_JpgEncSizeSet->v_Set.u16CurIndex);

    gv_VideoData.p_EncSize = p_JpgEncSizeItem->p_EncSize;
    gv_VideoData.p_Item = &p_JpgEncSizeItem->v_Item;
}

void fJpgDecSizeSet(c_SetBase * p_cBaseSet)
{
    c_JpgDecSizeSet *p_JpgDecSizeSet = (c_JpgDecSizeSet *) p_cBaseSet;
    c_JpgDecSizeItem *p_JpgDecSizeItem =
		(c_JpgDecSizeItem *) (p_JpgDecSizeSet->p_DecSize + p_JpgDecSizeSet->v_Set.u16CurIndex);

    gv_VideoData.p_DecSize = p_JpgDecSizeItem->p_DecSize;
    gv_VideoData.p_Item = &p_JpgDecSizeItem->v_Item;
}

void fPreview(void)
{
    aDSC_fmemory_clear(0, 0, M_LCD_WSIZE, M_LCD_HSIZE, 0x0000);
    aDSC_overlayframe_off();

    if (gv_VideoData.p_Overlay->u16OvlOpen)
    {
        aDSC_fmemory_write_rgb565(gv_VideoData.p_Overlay->u16OvlData,
                                  gv_VideoData.p_Overlay->st_x, gv_VideoData.p_Overlay->st_y);
//        aDSC_maskmemory_write(gv_VideoData.p_Overlay->xsize, gv_VideoData.p_Overlay->ysize);
        aDSC_overlayframe_on();
    }

    fFillExOvlMirror(gv_VideoData.p_Item);
    aDSC_data_trans_st(0, 0, M_LCD_WSIZE, M_LCD_HSIZE);

    sFilterSet(gv_VideoData.u16Filter);

    aDSC_Start_Preview(gv_VideoData.p_Window->st_x,
                       gv_VideoData.p_Window->st_y,
                       gv_VideoData.p_Window->xsize,
                       gv_VideoData.p_Window->ysize, gv_VideoData.p_Camera);
}

void fJpegEnc(void)
{
    aDSC_fmemory_clear(0, 0, M_LCD_WSIZE, M_LCD_HSIZE, 0x0000);
    aDSC_data_trans_st(0, 0, M_LCD_WSIZE, M_LCD_HSIZE);
    wait(500);
    switch (gv_VideoData.u16JpgFunc)
    {
    	 case SIGLESHOT:
        {
				gv_VideoData.u32JpgSize = JPEG_BUFFER;
				bit_write(OVL_CNT, 3, LOW); //switch off OSD
				aDSC_CameraEncode(gv_VideoData.p_u16JpgCode, &gv_VideoData.u32JpgSize,
				                  gv_VideoData.p_EncSize, gv_VideoData.u16JpgQuality,
				                  sROT_OFF | sHFLIP_OFF | sVFLIP_OFF);
				fFillExOvlMirror(gv_VideoData.p_Item);
        }
        break;
    	 case MULTISHOT:
    	 {
            UINT32 u32FrameByteSize = JPEG_BUFFER;

            gv_VideoData.u32JpgSize = 0;
            aDSC_overlayframe_off();
            do
            {
                //u32FrameByteSize = JPEG_BUFFER;
			     aDSC_Start_Preview(gv_VideoData.p_Window->st_x,
			                       gv_VideoData.p_Window->st_y,
			                       gv_VideoData.p_Window->xsize,
			                       gv_VideoData.p_Window->ysize, gv_VideoData.p_Camera);
				  aDSC_CameraEncode(gv_VideoData.p_u16JpgCode + gv_VideoData.u32JpgSize / 2+2, 
	            					  &u32FrameByteSize,
	                              gv_VideoData.p_EncSize, gv_VideoData.u16JpgQuality,
	                              sROT_OFF | sHFLIP_OFF | sVFLIP_OFF);
				  fFillExOvlMirror(gv_VideoData.p_Item);
				  *(gv_VideoData.p_u16JpgCode + gv_VideoData.u32JpgSize / 2) =
                    (UINT16) ((u32FrameByteSize | 0xffff0000) >> 16);
                *(gv_VideoData.p_u16JpgCode + gv_VideoData.u32JpgSize / 2 + 1) =
                    (UINT16) (u32FrameByteSize | 0x0000ffff);
                gv_VideoData.u32JpgSize += u32FrameByteSize + 4;
                u32FrameByteSize = JPEG_BUFFER-gv_VideoData.u32JpgSize;
                //wait(10); // >1400ms@1280x960; >ms@640x480
            }while (gv_VideoData.u32JpgSize < MJPEG_BUFFER);
    	 }
        break;
    	 case MOTIONJPEG:
        {
            UINT32 u32FrameByteSize = 0;

            aDSC_overlayframe_off();
            gv_VideoData.u32JpgSize = 0;
            do
            {
                u32FrameByteSize = 144 * 176;
                aDSC_Start_Preview(tWindow80x80.st_x,
                                   tWindow80x80.st_y,
                                   tWindow80x80.xsize,
                                   tWindow80x80.ysize, &tCamera80x80);
				  aDSC_FrameEncode(gv_VideoData.p_u16JpgCode + gv_VideoData.u32JpgSize / 2 +
                                 2, &u32FrameByteSize, tWindow80x80.st_x,
                                 tWindow80x80.st_y,
                                 tWindow80x80.xsize,
                                 tWindow80x80.ysize,
                                 gv_VideoData.u16JpgQuality);
				  fFillExOvlMirror(gv_VideoData.p_Item);
                *(gv_VideoData.p_u16JpgCode + gv_VideoData.u32JpgSize / 2) =
                    (UINT16) ((u32FrameByteSize | 0xffff0000) >> 16);
                *(gv_VideoData.p_u16JpgCode + gv_VideoData.u32JpgSize / 2 + 1) =
                    (UINT16) (u32FrameByteSize | 0x0000ffff);
                gv_VideoData.u32JpgSize += u32FrameByteSize + 4;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -