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

📄 img533.c

📁 台湾凌阳方案300万数码相机源代码
💻 C
字号:
/*++

Copyright (c) 2001 Sunplus Technology Co., Ltd.

Module Name:

        fiimg.c

Abstract:

        Module related to image setting of asic

Environment:

        Keil C51 Compiler

Revision History:

        09/03/2001      William Yeo    created

--*/

//=============================================================================
//Header file
//=============================================================================
// WWW1 start
#include "general.h"
#include "cardimpt.h"
#include "exiffunc.h"
#include "cardlink.h"
#include "cardusr.h"
// WWW1 end

//=============================================================================
//Symbol
//=============================================================================
//-----------------------------------------------------------------------------
//Constant
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
//Variable
//-----------------------------------------------------------------------------
xdata   USHORT  G_Image_SensorWidth;
xdata   USHORT  G_Image_SensorHeight;
xdata   UCHAR   G_Image_HSubSample;
xdata   UCHAR   G_Image_VSubSample;
xdata   UCHAR   G_Image_QTableIndex;
xdata   UCHAR   G_Image_SrcDataType;
xdata   ULONG   G_SDRAM_ImageAddr;

xdata   ULONG   G_Image_VlcSize;
xdata   UCHAR   G_log27c0;

//=============================================================================
//Program
//=============================================================================

//-------------------------------------
// File_SetImageMode
//-------------------------------------
/*++

Routine Description:

Arguments:
        none

Return Value:

        none

--*/
void File_SetImageMode(BYTE imagemode, BYTE bAudio) USING_0
{
        BYTE bTemp0 = imagemode;
        BYTE bTemp1 = bAudio;
}

//-------------------------------------
//File_ExifStillImage
//-------------------------------------
/*++

Routine Description:

Arguments:
        none

Return Value:

        none

--*/
//patch3.2@cytsai@0328
ULONG File_ExifStillImage(PULONG pStart) USING_0
{
        ULONG imagesize,thumbsize;



        //L1_InitPreview();
	//patch5.0@richie@sdram mapping marked
	//L2_CtrlScreen(2);

#ifdef ICM107B
        //richie@ae0226 //cytsai@0328
	//patch4.5@richie@hue
  	XBYTE[0x21ac] &= 0xFE; 			// disable color saturation boost
#endif

#ifdef ICM108
        //richie@ae0226 //cytsai@0328
	//patch4.5@richie@hue
  	XBYTE[0x21ac] &= 0xFE; 			// disable color saturation boost
#endif

//patch4.4@andrew@ICM109
#ifdef ICM109

	//patch4.5@richie@hue
  	XBYTE[0x21ac] &= 0xFE; 			// disable color saturation boost
#endif
/*#ifdef OV3610
		
			//patch4.5@richie@hue
			XBYTE[0x21ac] &= 0xFE;			// disable color saturation boost
#endif*/

        L1_SnapOne(&imagesize,&thumbsize); //ada@0111 //cytsai@0131

        //DbgPrint("Parsing thumbnail size = %lx\n",thumbsize);
        //DbgPrint("File_SnapJpg: snap done. Imagesize = %lx\n", imagesize);
//patch5.0@richie@sdram mapping begin

	//Joe@2003.3.12 9:21 add begin
	XBYTE[0x2000] = 0x00;
	//Joe@2003.3.12 9:22 add end

		XBYTE[0x2000] = 0x05;
		EXIFHDR_Initialize_AllExifHeader();
        imagesize += EXIFHDR_LoadExifHeader(K_SDRAM_ImageCaptureGeneralBufAddr,pStart,&thumbsize);    //ada@0111
//patch5.0@richie@sdram mapping end
        //DbgPrint("File_SnapJpg: load header done. Image size + EXIF header size + EOI= %lx\n", imagesize);
        //DbgPrint("The real header start address %lx\n = ",*pStart);

        File_SendMessage(K_File_UI_End_DscImage, 0);

        return imagesize;
}
#if ( K_File_HaveVideo == 1 )
#if ( K_File_PutVideoAtDram == 1 )
//-----------------------------------------------------------------------------
//File_VideoStrm1Image
//-----------------------------------------------------------------------------
/*++

Routine Description:

Arguments:
        none

Return Value:

        none

--*/
ULONG File_VideoStrm1Image(void) USING_0
{
        ULONG size = 0;
        //set image buffer start address
        G_DOS_SDRAM_NextIntRetAddr = G_SDRAM_ImageAddr;
//        SDRAM_SetVlcStartAddress(G_SDRAM_ImageAddr);
//        SDRAM_SetVlcEndAddress(G_DOS_SDRAM_MaxAddr);
        SETMODE_ChangeCameraMode(K_MODE_IDLE);
        XBYTE[0x2301] = 0x23;                   //SDRAM to SMC
        XBYTE[0x2074] = 0x01;                   //start timer
        XBYTE[0x27d0] = 0x01;                   //Enable Jpeg Interrupt

        //Joe@2003.3.12 9:21 add begin
	XBYTE[0x2000] = 0x00;
	//Joe@2003.3.12 9:22 add end

        XBYTE[0x2000] = 0x03;                   //Set VideoClip Mode
        while (!(G_log27c0 & 0x01));            //This bit was set in Y_INT0
        G_log27c0 = 0x00;
        XBYTE[0x27a1] =  0x20;                  //for SMC StopClip2 EricSu
        XBYTE[0x27d0] = 0x00;                   //disable Jpeg Interrupt
        SETMODE_ChangeCameraMode(K_MODE_PLAYBACK);                //set upload mode

        size = G_Image_VlcSize;
        size = (size + 511) / 512 * 512;

        L2_DRAMSetStartAddr(G_SDRAM_ImageAddr, K_SDRAM_Prefetch);

        return (size);
}

#endif

//--------------------------------
//File_StopClipMode
//---------------------------------
/*++

Routine Description:

Arguments:
        none

Return Value:

        none

--*/
void File_StopClipMode(BYTE bAudio) USING_0
{
        BYTE bTemp = bAudio;

        XBYTE[0x27a1] = 0x20;           //Set StopClip = 1 to stop VideoClip
        XBYTE[0x23B0] &= 0xFB;          //Clear LastPage
        XBYTE[0x2074] = 0x02;           //stop Timer
        G_TimeStamp = ((ULONG)XBYTE[0x2070] & 0x0000ff)+(((ULONG)XBYTE[0x2071] << 8) & 0x00ff00)+(((ULONG)XBYTE[0x2072] << 16) & 0xff0000);
}
#endif

// @WYWO, 1008
#if (PLAYBACK_OPTION)
//--------------------------------
//File_PlayJfifImage
//---------------------------------
/*++

Routine Description:

Arguments:
        none

Return Value:

        none

--*/
void File_PlayDscImage(ULONG ramAddr, ULONG size, USHORT width, USHORT height, BYTE srcDataType, BYTE jiff) USING_0
{
        BYTE bTemp0 = srcDataType;
        BYTE bTemp1 = jiff;
//      ULONG VLCEnd;
//      VLCEnd = ramAddr + ( (size + 1 ) >> 1);

        //cch@10/18      debug
        if ( size & 0x01 )
        {
             size --;
        }
        // DSC 1280 * 960
        XBYTE[0x2720] = (BYTE) (size & 0xff);
        XBYTE[0x2721] = (BYTE) ((size >> 8) & 0xff);
        XBYTE[0x2722] = (BYTE) ((size >> 16) & 0xff);

        XBYTE[0x2730] = (BYTE) (ramAddr & 0xff);
        XBYTE[0x2731] = (BYTE) ((ramAddr >> 8) & 0xff);
        XBYTE[0x2732] = (BYTE) ((ramAddr >> 16) & 0xff);

//      XBYTE[0x2733] = (BYTE) (VLCEnd & 0xff);
//      XBYTE[0x2734] = (BYTE) ((VLCEnd >> 8) & 0xff);
//      XBYTE[0x2735] = (BYTE) ((VLCEnd >> 16) & 0xff);

        XBYTE[0x2733] = 0xff;
        XBYTE[0x2734] = 0xff;
        XBYTE[0x2735] = 0xff;

        XBYTE[0x2736] = 0xff;
        XBYTE[0x2737] = 0xff;
        XBYTE[0x2738] = 0xff;

        XBYTE[0x2011] = (BYTE) (width & 0xff);       //image width=1280
        XBYTE[0x2012] = (BYTE) ((width >> 8) & 0xff);
        XBYTE[0x2013] = (BYTE) (height & 0xff);       //image height=960
        XBYTE[0x2014] = (BYTE) ((height >> 8) & 0xff);

        XBYTE[0x270e] = 0x02;                   //image type
        XBYTE[0x2710] = 0x00;                   //Hsubsample
        XBYTE[0x2711] = 0x00;                   //Vsubsample
        XBYTE[0x27e1] = 0x00;
        XBYTE[0x2306] = 0x00;
//      XBYTE[0x2880] = 0x02;                   //Qtable index
        XBYTE[0x2883] = 0x00;                   //thumbnail disable forplayback
        XBYTE[0x2884] = 0x01;                   //JFIF enable for JPG
        if (G_thumbnailPlayFlag == 1)
        {
        XBYTE[0x273a] = 0x01;
        }
        else
        {
        XBYTE[0x273a] = 0x21;
        }
//      XBYTE[0x2745] = 0x00;                   //playback scaling
//      XBYTE[0x2740] = 0x00;                   //pboffsetx
//      XBYTE[0x2742] = 0x00;                   //pbrescale

        XBYTE[0x23b0] = 0x00;                   //clear PB last
        XBYTE[0x23e2] = 0x01;                   //clear postbuffer
        XBYTE[0x23e2] = 0x00;
        XBYTE[0x27a1] = 0x02;                   //VLC Decompress -->  Framebuffer tigger
        while ((XBYTE[0x27b0] & 0x40) != 0x40) ;
}

//--------------------------------
//File_PlayVideoImage
//---------------------------------
/*++

Routine Description:

Arguments:
        none

Return Value:

        none

--*/
// @WYEO, 1023
void File_PlayAviStream(ULONG vidRamAddr, ULONG vidSize, USHORT width, USHORT height,
                        BYTE srcDataType, BYTE jiff, ULONG audRamAddr, ULONG audSize) USING_0
{
        BYTE bTemp0 = srcDataType;
        BYTE bTemp1 = jiff;
        ULONG ulTemp0 = audRamAddr;
        ULONG ulTemp1 = audSize;

        //cch@10/18      debug
        if ( vidSize & 0x01 )   // @WYEO, 102301
        {
             vidSize --;
        }
        // DSC 1280 * 960
        XBYTE[0x2720] = (BYTE) (vidSize & 0xff);                // @WYEO, 102301
        XBYTE[0x2721] = (BYTE) ((vidSize >> 8) & 0xff);         // @WYEO, 102301
        XBYTE[0x2722] = (BYTE) ((vidSize >> 16) & 0xff);        // @WYEO, 102301

        XBYTE[0x2730] = (BYTE) (vidRamAddr & 0xff);             // @WYEO, 102301
        XBYTE[0x2731] = (BYTE) ((vidRamAddr >> 8) & 0xff);      // @WYEO, 102301
        XBYTE[0x2732] = (BYTE) ((vidRamAddr >> 16) & 0xff);     // @WYEO, 102301

        XBYTE[0x2733] = 0xff;
        XBYTE[0x2734] = 0xff;
        XBYTE[0x2735] = 0xff;

        XBYTE[0x2736] = 0xff;
        XBYTE[0x2737] = 0xff;
        XBYTE[0x2738] = 0xff;

        XBYTE[0x2011] = (BYTE) (width & 0xff);       //image width=1280
        XBYTE[0x2012] = (BYTE) ((width >> 8) & 0xff);
        XBYTE[0x2013] = (BYTE) (height & 0xff);       //image height=960
        XBYTE[0x2014] = (BYTE) ((height >> 8) & 0xff);

        XBYTE[0x270e] = 0x05;                   //image type
        XBYTE[0x2710] = 0x00;                   //Hsubsample
        XBYTE[0x2711] = 0x00;                   //Vsubsample
        XBYTE[0x27e1] = 0x00;
        XBYTE[0x2306] = 0x00;
        XBYTE[0x2880] = 0x02;                   //Qtable index
        XBYTE[0x2883] = 0x00;                   //thumbnail disable forplayback
        XBYTE[0x2884] = 0x00;                   //JFIF disable for Avi
        XBYTE[0x273a] = 0x01;

//      XBYTE[0x2745] = 0x00;                   //playback scaling
//      XBYTE[0x2740] = 0x00;                   //pboffsetx
//      XBYTE[0x2742] = 0x00;                   //pbrescale

        XBYTE[0x23b0] = 0x00;                   //clear PB last
        XBYTE[0x23e2] = 0x01;                   //clear postbuffer
        XBYTE[0x23e2] = 0x00;
        XBYTE[0x27a1] = 0x02;                   //VLC Decompress -->  Framebuffer tigger
        while ((XBYTE[0x27b0] & 0x40) != 0x40) ;
}

#endif

⌨️ 快捷键说明

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