📄 zoomosd.c
字号:
#include <comsub.h>
#include <ui.h>
#include <nv.h>
#include <osd.h>
#include <ui_sub.h>
#include <panel.h>
#include <rscstruc.h>
#include <resource.h>
#include <platform.h>
#include <fileopen.h>
#include "normal.h"
#include "NMOSD.h"
#include "../fileopenmenu/GuiControl.h"
#include <setupfunc.h>
#include<guiddi.h>
#include <gui.h>
#include <UIOSD.h>
extern int bZoomVRatio;
extern int bZoomHRatio;
//------------------
//for zoom
//#undef PRINTF
void ShowZoomOSD(void)
{
if(bZoomCount==0)
{}
else if(bZoomCount<3)
ShowZoomWindow(0x02<<((1<<bZoomCount)-1),bZoomXOffset,bZoomYOffset);
else
ShowScreenFitWindow(ZOOM_SF_STAGE_N);
SetTimer(OSD2_TM_ID,CancelZoom,TIME_10SEC);
}
void CancelZoom(void)
{
if(PollCmdUIMsg(C_TIMER_ACTIVE, C_ZOOM_TIMER)==FALSE)
SetTimer(OSD2_TM_ID, CancelZoom, C_WAIT_MSG_TIME);
}
void ModifyZoomOSD(int Key)
{
switch(Key)
{
case V_KEY_LEFT:
case V_KEY_RIGHT:
case V_KEY_UP:
case V_KEY_DOWN:
case V_KEY_ZOOM:
if(bZoomCount<3)
ShowZoomWindow(0x02<<((1<<bZoomCount)-1),bZoomXOffset,bZoomYOffset);
else
ShowScreenFitWindow(ZOOM_SF_STAGE_N);
break;
case V_KEY_CLEAR:
ClearRectArea(gui_hdc,GUITYPE_ZOOM);
break;
}
// if(g_UiCrntSubFunc == UI_SUBFUNC_ZOOM)
// {
//OSDScrShow(&scrMain);
// }
SetTimer(OSD2_TM_ID,CancelZoom,TIME_10SEC);
}
#define VP_ZOOM_
#include <VP2UI_setting.h>
#undef VP_ZOOM_
VP2UI_ZOOM jpg_Zoom_Par;
VP2UI_ZOOM backzoominfo;
extern WORD zoomnum;
#if (_JPEG_ZOOM_MODE==_JPG_ZOOM_ENABLE)
BOOL zoompositcheck()
{
if(jpg_Zoom_Par.XOrg==backzoominfo.XOrg&&backzoominfo.YOrg==jpg_Zoom_Par.YOrg&&
jpg_Zoom_Par.StartX==backzoominfo.StartX&&jpg_Zoom_Par.StartY==backzoominfo.StartY)
return TRUE;
else
return FALSE;
}
void jpgrunzoom()
{
#if(__JPG_ZOOM_DECODE ==1)
WORD tempTTN;
BYTE bzoomcnt;
bzoomcnt = bZoomCount;
// printk("jpg_Zoom_Par.StartX is %d,jpg_Zoom_Par.StartY %d,jpg_Zoom_Par.XOrg %d,jpg_Zoom_Par.YOrg %d\n",jpg_Zoom_Par.StartX,jpg_Zoom_Par.StartY,jpg_Zoom_Par.XOrg,jpg_Zoom_Par.YOrg);
// NvJpgZoom(bZoomCount,jpg_Zoom_Par);
tempTTN = zoomnum;
if(bzoomcnt==3)//for fit screen ,we should show the normal picture and do the fitscreen work by VP
bzoomcnt = 0;
backzoominfo = jpg_Zoom_Par;
JPGZoomPlay(tempTTN,jpg_Zoom_Par,bzoomcnt);//benjamin add
// CloseZoom();
#endif
}
#endif //40309
void RunZoom(void)
{
extern BYTE ZoomPreOnOff;
extern int ZoomPreSub;
extern unsigned char bzoomokflag;
//30827_02 Sean modify for Zoom
#define VP_ZOOM_
#include <VP2UI_setting.h>
#undef VP_ZOOM_
static VP2UI_ZOOM Zoom_Par;
//30827_02 Sean modify for Zoom
BYTE scrFH,scrFV;
int range;
float ZoomPara[3] = {1.0, 1.4142135623730950488016887242097, 2.0};
//30827_02 Sean modify for Zoom
// if(bZoomCount==0 || (bZoomCount==3 && bZoomHRatio==0 && bZoomVRatio==0))
if (bZoomCount==0)
//30827_02 Sean modify for Zoom
{
backzoominfo.StartX=0;
backzoominfo.StartY=0;
backzoominfo.XOrg=0;
backzoominfo.YOrg=0;
bzoomokflag = 0;
if(DiscType==C_FILEOPENDISC&&FileType==C_JPGFILE)
VfdOpenLongKey(2);//benjamin add
if (DiscType == C_DVD)
{
NVSetSpSW( C_ON );
NVSPIdSet( ZoomPreSub, 1 );
ZoomPreOnOff = 0;
ZoomPreSub = 0;
}
//31025_02 Sean modify for screenfit
#if (CCbyTVENCder == 1)
#ifdef _Screen_Fit_Enable
UINotePE_Set_ScreenFitMode(FALSE);
#endif
#endif//#if (CCbyTVENCder == 1)
//31025_02 Sean modify for screenfit
if ( DiscType == C_DVD )
APOprParam.DspMode = NoZoomDspMode;
else
APOprParam.DspMode = Normal;
//30827_02 Sean modify for Zoom
Zoom_Par.DspMode = APOprParam.DspMode;
Zoom_Par.ZoomRatio = 0;
Zoom_Par.XOrg = 0;
Zoom_Par.YOrg = 0;
Zoom_Par.StartX = 0;
Zoom_Par.StartY = 0;
Dec_SetVP_Zoom(Zoom_Par);
//Dec_SetVP_Zoom(APOprParam.DspMode,0,0,0);
//30827_02 Sean modify for Zoom
jpg_Zoom_Par=Zoom_Par;
//31025_02 Sean modify for screenfit
/*
#if (CCbyTVENCder == 1)
#ifdef _Screen_Fit_Enable
UINotePE_Set_ScreenFitMode(FALSE);
#endif
#endif//#if (CCbyTVENCder == 1)
*/
//31025_02 Sean modify for screenfit
//30826_01 Sean for Screen Fit & Zoom
}
else if(bZoomCount<3)
{
if(DiscType==C_FILEOPENDISC&&FileType==C_JPGFILE)
VfdCloseLongKey(2);
if ( ( bZoomCount==1 )&&(APOprParam.DspMode!=Zoom) )
NoZoomDspMode = APOprParam.DspMode;
APOprParam.DspMode = Zoom;
if(bZoomCount==1)
{
Zoom_Par.ZoomRatio = 2;//30827_02 Sean modify for Zoom
range = ZOOM_RANGE_4X;
}
if(bZoomCount ==2)
{
Zoom_Par.ZoomRatio =4;//30827_02 Sean modify for Zoom
range = ZOOM_RANGE_16X;
}
//30827_02 Sean modify for Zoom
Zoom_Par.XOrg = APOprParam.HSize_Src*(range + bZoomXOffset)*(ZoomPara[bZoomCount]-1)/(range*2*ZoomPara[bZoomCount]);
Zoom_Par.YOrg = APOprParam.VSize_Src*(range + bZoomYOffset)*(ZoomPara[bZoomCount]-1)/(range*2*ZoomPara[bZoomCount]);
if ( (bZoomXOffset==0)&&(bZoomYOffset==0) )
{
Zoom_Par.StartX = Zoom_Par.XOrg;
Zoom_Par.StartY = Zoom_Par.YOrg;
}
//30827_02 Sean modify for Zoom
//30826_01 Sean for Screen Fit & Zoom
Zoom_Par.DspMode = APOprParam.DspMode;
Dec_SetVP_Zoom(Zoom_Par);
jpg_Zoom_Par=Zoom_Par;
//30827_02 Sean modify for Zoom
//Dec_SetVP_Zoom(APOprParam.DspMode,zoomRatio,zoomLeft,zoomTop);
#if (CCbyTVENCder == 1)
#ifdef _Screen_Fit_Enable
UINotePE_Set_ScreenFitMode(FALSE);
#endif
#endif//#if (CCbyTVENCder == 1)
//30826_01 Sean for Screen Fit & Zoom
}
else
{
//map the zoom ratio
//if you like, change the mapping way.
//30829_01 Sean mark for screenfit picture size change bug. temp solution
if(DiscType==C_FILEOPENDISC&&FileType==C_JPGFILE)
VfdCloseLongKey(2);
#if 0
if (bZoomHRatio==0 && bZoomVRatio==0)
{
if ( (DiscType == C_DVD) && (NoZoomDspMode != Letterbox) && (NoZoomDspMode != Panscan) ) //031021 turn on screen-fit on letter box mode //031023 Panscan dead temp fixed
APOprParam.DspMode = NoZoomDspMode;
else
APOprParam.DspMode = Normal;
}
#else
APOprParam.DspMode = Normal;
#endif
//30829_01 Sean mark for screenfit picture size change bug. temp solution
if(bZoomHRatio>=0)
{
scrFH = 1 + bZoomHRatio;
}
else
{
scrFH = SCREEN_FIT_SCALE_RANGE + 1 - bZoomHRatio;
}
if(bZoomVRatio>=0)
{
scrFV= 1 + bZoomVRatio;
}
else
{
scrFV= SCREEN_FIT_SCALE_RANGE + 1 - bZoomVRatio;
}
//------------------------------------
jpg_Zoom_Par=Zoom_Par;
jpg_Zoom_Par.StartX =scrFH ;
jpg_Zoom_Par.StartY =scrFV ;
//30826_01 Sean for Screen Fit & Zoom
#if (CCbyTVENCder == 1)
#ifdef _Screen_Fit_Enable
UINotePE_Set_ScreenFitMode(TRUE);
#endif
#endif//#if (CCbyTVENCder == 1)
if(scrFH <= (SCREEN_FIT_SCALE_RANGE + 1) && scrFV <= (SCREEN_FIT_SCALE_RANGE + 1))//when can small remove this code
Dec_Set_HV_Scale(scrFH,scrFV);
//30826_01 Sean for Screen Fit & Zoom
}
}
void ShowZoomWindow(BYTE zoomRatio,int xOffset,int yOffset)
{
//use mdc to do it
// HBITMAP hbmp_comp,hbmp_old;
// HDC mhdc;
// mhdc = CreateCompatibleDC(gui_hdc);
// hbmp_comp = CreateCompatibleBitmap(gui_hdc,188,130);
if (DiscType == C_FILEOPENDISC)
{
MPA_RefreshAuxiliary(AT_SLIDESHOWHELP_CLOSE, &gAuxParam);
}
//--> Gordon. in Slide show, the dc(which used to draw zoom) is different, i.e. (0, 0) is different, so i changed the left, top to be viaribles
ZOOM_LEFT=430;//290;//MSGRIGHT-ZOOM_WIDTH;
ZOOM_TOP=280;//170;//CNSL_DOWNHINTBOX_BOTTOM-ZOOM_UP_HEIGHT-ZOOM_DOWN_HEIGHT;
/*
if(FileType==C_JPGFILE)
{
ZOOM_LEFT-=-66; // i.e. L_CANVAS_TO_TV_AUX;
ZOOM_TOP-=-32; // i.e. T_CANVAS_TO_TV_AUX;
}
*/
// if(hbmp_comp==NULL)
// {
// return ;
// }
// hbmp_old = (HBITMAP)SelectObject(mhdc,(HGDIOBJ)hbmp_comp);
DrawZoomFrame(gui_hdc,zoomRatio,xOffset,yOffset,FALSE);
// BitBlt(gui_hdc,
// ZOOM_LEFT,ZOOM_TOP,
// ZOOM_WIDTH,ZOOM_UP_HEIGHT+ZOOM_DOWN_HEIGHT-1,
// mhdc, 0, 0, SRCCOPY);
// SelectObject(mhdc,(HGDIOBJ)hbmp_old);
// DeleteObject((HGDIOBJ)hbmp_comp);
// DeleteDC(mhdc);
}
void DrawZoomFrame(HDC hdc,BYTE zoomRatio,int xOffset,int yOffset,BYTE fromZero)
{
BYTE range;
int i,j;
RECT r;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -