📄 img533.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 + -