123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- #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;
- }
|