?? .#v5hdemo.c.1.16
字號:
#include "V5Hdemo.h"
#include <string.h>
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\timer.h"
#include "..\inc\picture.h"
#include "..\..\vc0528rdk\vim_high_api.h"
#include "..\..\vc0528demo\inc\thin_usr.h"
#include "..\..\vc0528demo\inc\fat_thin.h"
#include "..\..\vc0528rdk\VIM_AVI_Recorder.h"
extern void Delay(int time);
extern F_FILE *g_file;
UINT8 JpegBuf[0x160000];
UINT32 Jpeg_Length=0;
UINT8 ThumbBuf[0x1000];
UINT8 YUVBuf[0x15000];
UINT8 BmpBuf[176*220*2];
UINT8 VideoBuf[0x10000];
UINT32 Video_Length=0;
UINT32 Video_FrameCount=0;
extern UINT8 TestJpegData[];
char* V5HDEMO_GetFile(char *string,unsigned long *length)
{
if(strstr(string,"jpeg_ram"))
{
*length=Jpeg_Length;
return (char*)JpegBuf;
}
else if(strstr(string,"video_ram"))
{
*length=Video_Length;
return (char*)VideoBuf;
}
else if(strstr(string,"bmp_ram"))
{
*length=128*160*2;
return (char*)BmpBuf;
}
else if(strstr(string,"yuv_ram"))
{
*length=128*160*2;
return (char*)YUVBuf;
}
return 0;
}
char* V5HDEMO_DownFile(char *string)
{
if(strstr(string,"jpeg_ram"))
{
return (char*)JpegBuf;
}
else
if(strstr(string,"video_ram"))
{
return (char*)VideoBuf;
}
else
if(strstr(string,"bmp_ram"))
{
return (char*)BmpBuf;
}
return 0;
}
void V5HDEMO_DrawRGB( int startx, int starty,int Width,int Height)
{
VIM_HAPI_DrawLCDRctngl(VIM_HAPI_B0_LAYER,startx,starty,Width,Height,(UINT8*)ThumbBuf);
VIM_HAPI_UpdateLCD(VIM_HAPI_B0_LAYER,startx,starty,Width,Height);
}
#define DECODE_AUTO_BASE 10
UINT32 fileIndex=1;
extern unsigned char JPEG_128x160_422[];
void V5HDEMO_Decode(int Width,int Height, int DecodeMode)
{
UINT8 mode = VIM_HAPI_GetWorkMode();
UINT16 Widthpic,Heightpic;
UINT16 result;
#if 0 //decode file in ROM
F_FILE *file;
const char name[200];
if (fileIndex>2)
fileIndex=1;
sprintf(name,"/%d.jpg",fileIndex);
file=f_open(name,"r+");
if(file==0)
Uart_Printf("\n open error");
DecodeMode=VIM_DECODE_RESIZE_TO_RGB;
#endif
VIM_HAPI_SetLCDSize(VIM_HAPI_B1_LAYER,0,0,0,0);
VIM_HAPI_SetLCDSize(VIM_HAPI_B0_LAYER,0,0,176,220);
VIM_HAPI_SetLCDMirror(0,VIM_HAPI_B0_LAYER);
memset(BmpBuf,0,Width*Height*2);
switch (DecodeMode)
{
case VIM_DECODE_RESIZE_TO_RGB:
#if 0
result=VIM_HAPI_Decode_Jpeg(VIM_HAPI_ROM_SAVE,VIM_DECODE_RESIZE_TO_RGB,file,BmpBuf,0xfffffff, 128*160*2,Width,Height);
Uart_Printf("\n VIM_HAPI_Decode_Jpeg result = %d\n", result);
#else
//JpegBuf JPEG_128x160_422
VIM_HAPI_Decode_Jpeg(VIM_HAPI_RAM_SAVE,VIM_DECODE_RESIZE_TO_RGB,JpegBuf,BmpBuf,0x200000, 176*220*2,Width,Height);
#endif
break;
case VIM_DECODE_RESIZE_TO_YUV:
VIM_HAPI_Decode_Jpeg(VIM_HAPI_RAM_SAVE,VIM_DECODE_RESIZE_TO_YUV,JpegBuf, YUVBuf,0x200000, 0x15000,Width,Height);
VIM_HAPI_YuvToRgb(YUVBuf,BmpBuf,Width,Height,VIM_CON_UYVY_565);
break;
case VIM_DECODE_WITHFRAME_TO_YUV:
VIM_HAPI_DrawLCDPureColor(VIM_HAPI_B0_LAYER,0,0,128,160,0);
VIM_HAPI_DrawLCDPureColor(VIM_HAPI_B0_LAYER,0,0,40,40,0xf800);
VIM_HAPI_SetLCDWorkMode(VIM_HAPI_LCDMODE_OVERLAY,0);
VIM_HAPI_Decode_Jpeg(VIM_HAPI_RAM_SAVE,VIM_DECODE_WITHFRAME_TO_YUV,JpegBuf, YUVBuf,0x200000, 0x15000,Width,Height);
VIM_HAPI_YuvToRgb(YUVBuf,BmpBuf,Width,Height,VIM_CON_UYVY_565);
break;
case VIM_DECODE_WITHFRAME_TO_RGB:
VIM_HAPI_DrawLCDPureColor(VIM_HAPI_B0_LAYER,0,0,128,160,0);
VIM_HAPI_DrawLCDPureColor(VIM_HAPI_B0_LAYER,0,0,40,40,0xf800);
VIM_HAPI_SetLCDWorkMode(VIM_HAPI_LCDMODE_OVERLAY,0);
VIM_HAPI_Decode_Jpeg(VIM_HAPI_RAM_SAVE,VIM_DECODE_WITHFRAME_TO_RGB,JpegBuf, BmpBuf,0x200000, 128*160*2,Width,Height);
break;
case VIM_DECODE_RESIZE_TO_RGB+DECODE_AUTO_BASE:
VIM_HAPI_Decode_Jpeg(VIM_HAPI_RAM_SAVE,VIM_DECODE_RESIZE_TO_RGB,NULL, BmpBuf,0x200000, 128*160*2,Width,Height);
break;
case VIM_DECODE_RESIZE_TO_YUV+DECODE_AUTO_BASE:
VIM_HAPI_Decode_Jpeg(VIM_HAPI_RAM_SAVE,VIM_DECODE_RESIZE_TO_YUV,NULL, YUVBuf,0x200000, 0x15000,Width,Height);
VIM_HAPI_YuvToRgb(YUVBuf,BmpBuf,Width,Height,VIM_CON_UYVY_565);
break;
case VIM_DECODE_WITHFRAME_TO_YUV+DECODE_AUTO_BASE:
VIM_HAPI_DrawLCDPureColor(VIM_HAPI_B0_LAYER,0,0,128,160,0);
VIM_HAPI_DrawLCDPureColor(VIM_HAPI_B0_LAYER,0,0,40,40,0xf800);
VIM_HAPI_SetLCDWorkMode(VIM_HAPI_LCDMODE_OVERLAY,0);
VIM_HAPI_Decode_Jpeg(VIM_HAPI_RAM_SAVE,VIM_DECODE_WITHFRAME_TO_YUV,NULL, YUVBuf,0x200000, 128*160*2,Width,Height);
VIM_HAPI_YuvToRgb(YUVBuf,BmpBuf,Width,Height,VIM_CON_UYVY_565);
break;
case VIM_DECODE_WITHFRAME_TO_RGB+DECODE_AUTO_BASE:
VIM_HAPI_DrawLCDPureColor(VIM_HAPI_B0_LAYER,0,0,128,160,0);
VIM_HAPI_DrawLCDPureColor(VIM_HAPI_B0_LAYER,0,0,40,40,0xf800);
VIM_HAPI_SetLCDWorkMode(VIM_HAPI_LCDMODE_OVERLAY,0);
VIM_HAPI_Decode_Jpeg(VIM_HAPI_RAM_SAVE,VIM_DECODE_WITHFRAME_TO_RGB,NULL, BmpBuf,0x200000, 128*160*2,Width,Height);
break;
}
VIM_HAPI_SetWorkMode(VIM_HAPI_MODE_PHOTOPROCESS);
VIM_HAPI_SetLCDWorkMode(VIM_HAPI_LCDMODE_BLONLY,0);
VIM_HAPI_SetLCDColordep(VIM_HAPI_COLORDEP_16BIT);
VIM_HAPI_DrawLCDPureColor(VIM_HAPI_B0_LAYER,0,0,128,160,0);
VIM_HAPI_UpdateLCD(VIM_HAPI_B0_LAYER,0,0,128,160);
Delay(100);
VIM_HAPI_GetPictureSize(&Widthpic,&Heightpic);
if(Widthpic<=Width)
Width=Widthpic;
if(Heightpic<=Height)
Height=Heightpic;
VIM_HAPI_DrawLCDRctngl(VIM_HAPI_B0_LAYER,0,0,Width,Height,BmpBuf);
VIM_HAPI_UpdateLCD(VIM_HAPI_B0_LAYER,0,0,Width,Height);
Delay(1000);
VIM_HAPI_SetWorkMode(mode);
#if 0
f_close(file);
Uart_Printf("\n file %s display findish", name);
fileIndex=fileIndex+1;
#endif
}
void V5HDEMO_Encode(int Width,int Height)
{
/*UINT32 i=0;
memset(YUVBuf,0,0x15000);
for(i=0;i<(128*160*2)/4;i++)
{
YUVBuf[i*4]=84;//u
YUVBuf[i*4+1]=76;//y
YUVBuf[i*4+2]=255;//v
YUVBuf[i*4+3]=76;//y
}*/
//memset(YUVBuf,0,0x15000);
//V5H_Encode_Jpeg(YUVBuf,JpegBuf,Width*Height*2,0x10000,Width,Height);
//Jpeg_Length=V5H_Capture_GetLength();
}
UINT8 CAPTUREEND;
void V5HDEMO_CaptureMulitiCallback(UINT8 Status, UINT32 Byte_Length)
{
switch (Status)
{
case VIM_HAPI_ONEFRAME_END:
Beep(1);
Delay(100);
Beep(0);
break;
case VIM_HAPI_CAPTURE_END:
Beep(1);
Delay(50);
Beep(0);
f_close(g_file);
CAPTUREEND=1;
Jpeg_Length=Byte_Length;
Uart_Printf("\n568 ISR_MarbEncDone!CapFileLength=%d",Byte_Length);
break;
//case V5H_FIFO_FULL:
//Uart_Printf("\n568 ISR_MarbFifoCnt!CapFileLength=%x",Byte_Length);
//break;
case VIM_HAPI_BUF_ERROR:
CAPTUREEND=1;
f_close(g_file);
Uart_Printf("\n568 ISR_Buf error,ID%d",Byte_Length);
break;
}
}
void V5HDEMO_CaptureAviCallback(UINT8 Status, UINT32 Byte_Length)
{
UINT8 error;
switch (Status)
{
case VIM_HAPI_ONEFRAME_END:
break;
case VIM_HAPI_CAPTURE_END:
Beep(1);
Delay(50);
Beep(0);
Uart_Printf("\n file id =0x%x",g_file);
error=f_close(g_file);
if(error)
Uart_Printf("\n close file error=%d",error);
Uart_Printf("\n578 avi TIME=%d",ReturnTime());
CAPTUREEND=1;
Jpeg_Length=Byte_Length;
Uart_Printf("\n578 ISR_MarbEncDone!CapFileLength=%x",Byte_Length);
break;
//case V5H_FIFO_FULL:
//Uart_Printf("\n568 ISR_MarbFifoCnt!CapFileLength=%x",Byte_Length);
//break;
case VIM_HAPI_BUF_ERROR:
CAPTUREEND=1;
f_close(g_file);
Uart_Printf("\n568 ISR_Buf error,ID%d",Byte_Length);
break;
}
}
void V5HDEMO_CaptureStill(void)
{
UINT16 count=0xfff,Result,num=0;
#if 0
Jpeg_Length=0;
CAPTUREEND=0;
Result=VIM_HAPI_CaptureStill(VIM_HAPI_RAM_SAVE,JpegBuf,0x160000,0);
Jpeg_Length=VIM_HAPI_GetCaptureLength();
if(Result)
Uart_Printf("\n568 ISR_Buf error=%d",Result);
else
Uart_Printf("\nlength =%d",Jpeg_Length);
#else
char g_namestr[20];
F_FIND find;
InitMalloc();
sprintf(g_namestr,"vim%d.jpg",num);
while(1)
{
if(f_findfirst(g_namestr, &find))//have not the same name
break;
num++;
sprintf(g_namestr,"vim%d.jpg",num);
}
g_file=f_open(g_namestr,"w+");
Result=VIM_HAPI_CaptureStill(VIM_HAPI_ROM_SAVE,g_file,0x160000,0);
Uart_Printf("\n VIM_HAPI_CaptureStill return : %d ",Result);
Result=f_close(g_file);
Uart_Printf("\n f_close return : %d ",Result);
Jpeg_Length=VIM_HAPI_GetCaptureLength();
Uart_Printf("\n capture file size : %d ",Jpeg_Length);
Beep(0x1);
Delay(10);
Beep(0x0);
/*Jpeg_Length=0;
CAPTUREEND=0;
g_file=f_open("1.jpg","w+");//
if(g_file==0)
Uart_Printf("\n open error");
else
Result=VIM_HAPI_CaptureStill(VIM_HAPI_ROM_SAVE,g_file,0x160000,V5HDEMO_CaptureMulitiCallback);
if(Result)
Uart_Printf("\n568 ISR_Buf error=%d",Result);
//Jpeg_Length=VIM_HAPI_GetCaptureLength();
*/
#endif
}
void DrawBack(void)
{
VIM_HAPI_SetLCDSize(VIM_HAPI_B0_LAYER,0,0,240,160);
VIM_HAPI_DrawLCDPureColor(VIM_HAPI_B0_LAYER,0,0,240,160,0);
VIM_HAPI_UpdateLCD(VIM_HAPI_B0_LAYER,0,0,240,160);
Delay(50);
VIM_HAPI_SetLCDSize(VIM_HAPI_B0_LAYER,0,160,240,160);
VIM_HAPI_DrawLCDPureColor(VIM_HAPI_B0_LAYER,0,160,240,160,0);
VIM_HAPI_UpdateLCD(VIM_HAPI_B0_LAYER,0,160,240,160);
Delay(50);
VIM_HAPI_SetLCDSize(VIM_HAPI_B0_LAYER,0,0,0,0);
}
void V5HDEMO_DisplayRomAuto(const char * name)
{
UINT16 count=0xfff,Result,num=0;
char g_namestr[20];
F_FIND find;
if(f_chdir(name))
return;
if(f_findfirst("*.*", &find))
return;
g_file=f_open(find.filename,"r+");
DrawBack();
VIM_HAPI_SetLCDMirror(VIM_HAPI_ROTATE_0,VIM_HAPI_A_LAYER);
VIM_HAPI_Display_Jpeg(VIM_HAPI_ROM_SAVE,g_file,0xffffff,0,0,240,320);
Delay(1000);
DrawBack();
VIM_HAPI_SetLCDMirror(VIM_HAPI_ROTATE_90,VIM_HAPI_A_LAYER);
VIM_HAPI_Display_Jpeg(VIM_HAPI_ROM_SAVE,g_file,0xffffff,0,0,320,240);
Delay(1000);
DrawBack();
VIM_HAPI_SetLCDMirror(VIM_HAPI_ROTATE_180,VIM_HAPI_A_LAYER);
VIM_HAPI_Display_Jpeg(VIM_HAPI_ROM_SAVE,g_file,0xffffff,0,0,240,320);
Delay(1000);
DrawBack();
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -