Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
230
Src/nsv/nsvplay/main.cpp
Normal file
230
Src/nsv/nsvplay/main.cpp
Normal file
|
@ -0,0 +1,230 @@
|
|||
#include <windows.h>
|
||||
|
||||
#include "main.h"
|
||||
#include "video.h"
|
||||
#include "resource.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
VideoOutput *vidOut;
|
||||
NSVDecoder *decode;
|
||||
int quit;
|
||||
} parms;
|
||||
|
||||
HINSTANCE g_hInstance;
|
||||
int g_bitmap_id=IDB_BITMAP1;
|
||||
|
||||
//#define NO_ABOUT_EGG
|
||||
|
||||
extern long glCounterNSVf, glSyncFrameCount, glNonSyncFrameCount;
|
||||
|
||||
#define WNDMENU_CAPTION "NSVPlay/0.994"
|
||||
#include "about.h"
|
||||
#include "wndmenu.h"
|
||||
|
||||
DWORD WINAPI pooThread(LPVOID p)
|
||||
{
|
||||
parms *parm=(parms*)p;
|
||||
unsigned int last_title_check=0;
|
||||
|
||||
while (!parm->quit)
|
||||
{
|
||||
int r=parm->decode->run(&parm->quit);
|
||||
if (r < 0)
|
||||
{
|
||||
if (parm->decode->get_error()) MessageBox(parm->vidOut->getHwnd(),parm->decode->get_error(),"NSV Player Error",MB_OK|MB_ICONSTOP);
|
||||
break;
|
||||
}
|
||||
else if (!r)
|
||||
{
|
||||
if ((GetTickCount()-last_title_check) > 1000)
|
||||
{
|
||||
char *v=parm->decode->getTitle();
|
||||
char *buf=(char*)malloc((v?strlen(v):0)+128);
|
||||
int posms=parm->decode->getpos();
|
||||
int lenms=parm->decode->getlen();
|
||||
char *s=parm->decode->getStatus();
|
||||
if (lenms != ~0)
|
||||
wsprintf(buf,"%s [%d:%02d/%d:%02d] @ %dkbps %s%s%s- NSV Player",v?v:"",
|
||||
posms/60000,(posms/1000)%60,
|
||||
lenms/60000,(lenms/1000)%60,
|
||||
parm->decode->getBitrate()/1000,
|
||||
s?"[":"",s?s:"",s?"] ":""
|
||||
);
|
||||
else
|
||||
wsprintf(buf,"%s [%d:%02d] @ %dkbps %s%s%s- NSV Player",v?v:"",
|
||||
posms/60000,(posms/1000)%60,
|
||||
parm->decode->getBitrate()/1000,
|
||||
s?"[":"",s?s:"",s?"] ":""
|
||||
);
|
||||
|
||||
char *p=buf;
|
||||
while (*p)
|
||||
{
|
||||
if (*p == '_') *p=' ';
|
||||
p++;
|
||||
}
|
||||
|
||||
SetWindowText(parm->vidOut->getHwnd(),buf);
|
||||
free(buf);
|
||||
|
||||
last_title_check=GetTickCount();
|
||||
}
|
||||
Sleep(1);
|
||||
}
|
||||
}
|
||||
parm->quit++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int g_quit;
|
||||
|
||||
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdParam, int nCmdShow)
|
||||
{
|
||||
g_hInstance=hInstance;
|
||||
|
||||
BOOL bDisplayInfoAtEnd = FALSE;
|
||||
char *subtitlefile=NULL;
|
||||
char buf[11];
|
||||
lstrcpyn(buf,lpszCmdParam,11);
|
||||
|
||||
if(strstr(lpszCmdParam, "/info")) {
|
||||
bDisplayInfoAtEnd = TRUE;
|
||||
}
|
||||
|
||||
if (!lstrcmpi(buf,"/subtitle="))
|
||||
{
|
||||
lpszCmdParam += 10;
|
||||
char scanc=' ';
|
||||
if (*lpszCmdParam == '\"')
|
||||
{
|
||||
scanc=*lpszCmdParam++;
|
||||
}
|
||||
subtitlefile=lpszCmdParam;
|
||||
while (*lpszCmdParam && *lpszCmdParam != scanc) lpszCmdParam++;
|
||||
*lpszCmdParam++=0;
|
||||
while (*lpszCmdParam == ' ') lpszCmdParam++;
|
||||
}
|
||||
|
||||
if (*lpszCmdParam == '\"')
|
||||
{
|
||||
lpszCmdParam++;
|
||||
char *p=strstr(lpszCmdParam,"\"");
|
||||
if (p) *p=0;
|
||||
}
|
||||
|
||||
if (!*lpszCmdParam)
|
||||
{
|
||||
MessageBox(NULL,"Usage: nsvplay.exe [/subtitle=\"file|url\"] filename.nsv|http://url.nsv","NSV Player",MB_OK|MB_ICONINFORMATION);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int xpos=CW_USEDEFAULT;
|
||||
int ypos=CW_USEDEFAULT;
|
||||
|
||||
_ReadConfigItemInt("xpos",&xpos);
|
||||
_ReadConfigItemInt("ypos",&ypos);
|
||||
|
||||
VideoOutput *vidOut = new VideoOutput(NULL,xpos,ypos);
|
||||
Decoders_Init();
|
||||
|
||||
|
||||
NSVDecoder *decode=new NSVDecoder(lpszCmdParam,vidOut,subtitlefile);
|
||||
vidOut->setNSVDecoder(decode);
|
||||
|
||||
int m_pause=0;
|
||||
|
||||
|
||||
vidOut->vid_vsync=false;
|
||||
|
||||
|
||||
_ReadConfigItemInt("vsync",&vidOut->vid_vsync);
|
||||
_ReadConfigItemInt("overlays",&vidOut->vid_overlays);
|
||||
_ReadConfigItemInt("ddraw",&vidOut->vid_ddraw);
|
||||
_ReadConfigItemInt("aspectadj",&vidOut->vid_aspectadj);
|
||||
_ReadConfigItemInt("use_mixer",&g_audio_use_mixer);
|
||||
{
|
||||
int temp=1;
|
||||
_ReadConfigItemInt("subtitles",&temp);
|
||||
decode->enableSubs(temp);
|
||||
temp=0;
|
||||
_ReadConfigItemInt("subtitles_size",&temp);
|
||||
decode->setSubsFontSize(temp);
|
||||
}
|
||||
|
||||
DWORD id;
|
||||
parms parm={0,};
|
||||
parm.decode=decode;
|
||||
parm.vidOut=vidOut;
|
||||
|
||||
vidOut->setcallback(my_wndcallback,&parm);
|
||||
|
||||
HANDLE hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)pooThread,(LPVOID)&parm,0,&id);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
MSG msg;
|
||||
while (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
|
||||
{
|
||||
if (msg.hwnd == vidOut->getHwnd() && msg.message == WM_KEYDOWN)
|
||||
{
|
||||
if (msg.wParam == VK_SPACE) decode->pause(m_pause=!m_pause);
|
||||
if (msg.wParam == VK_LEFT) decode->seek(decode->getpos()-30000);
|
||||
if (msg.wParam == VK_RIGHT) decode->seek(decode->getpos()+30000);
|
||||
if (msg.wParam == VK_UP)
|
||||
{
|
||||
int vol=decode->getvolume()+16;
|
||||
if (vol > 255) vol=255;
|
||||
decode->setvolume(vol);
|
||||
}
|
||||
if (msg.wParam == VK_DOWN)
|
||||
{
|
||||
int vol=decode->getvolume()-16;
|
||||
if (vol < 0) vol=0;
|
||||
decode->setvolume(vol);
|
||||
}
|
||||
if (msg.wParam == VK_RETURN)
|
||||
{
|
||||
if (vidOut->is_fullscreen()) vidOut->remove_fullscreen();
|
||||
else vidOut->fullscreen();
|
||||
}
|
||||
if (msg.wParam == 'v' || msg.wParam == 'V')
|
||||
{
|
||||
vidOut->vid_vsync=!vidOut->vid_vsync;
|
||||
}
|
||||
if (msg.wParam == 'a' || msg.wParam == 'A')
|
||||
{
|
||||
vidOut->vid_aspectadj=!vidOut->vid_aspectadj;
|
||||
PostMessage(vidOut->getHwnd(),WM_TIMER,1,0);
|
||||
}
|
||||
}
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
if (!IsWindow(vidOut->getHwnd()) || parm.quit) break;
|
||||
|
||||
Sleep(50);
|
||||
|
||||
}
|
||||
parm.quit++;
|
||||
WaitForSingleObject(hThread,INFINITE);
|
||||
CloseHandle(hThread);
|
||||
delete decode;
|
||||
delete vidOut;
|
||||
|
||||
Decoders_Quit();
|
||||
|
||||
#if _DEBUG
|
||||
// if "/info" on the command line, display some statistics about the movie
|
||||
if(bDisplayInfoAtEnd) {
|
||||
char szMessage[MAX_PATH];
|
||||
|
||||
wsprintf(szMessage, "File Header Count=%ld\nSync Frames=%ld\nNon-sync Frames=%ld", glCounterNSVf, glSyncFrameCount, glNonSyncFrameCount);
|
||||
MessageBox(NULL, szMessage, WNDMENU_CAPTION, MB_OK);
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue