📄 main.cpp
字号:
SDL_SysWMinfo wmi; SDL_VERSION(&wmi.version); if(!SDL_GetWMInfo(&wmi)) { ERROR_MSG("Error retrieving window information"); } else { sdl.hwnd = wmi.window; } if(sdl.hwnd) { if(sdl.screen.fullscreen) { SetWindowPos(sdl.hwnd, HWND_TOPMOST, desktop.x, desktop.y, 0, 0, SWP_NOSIZE); } else if(sdl.topmost) { SetWindowPos(sdl.hwnd, HWND_TOPMOST, sdl.screen.x, sdl.screen.y, 0, 0, ((sdl.screen.x || sdl.screen.y) ? SWP_NOSIZE : SWP_NOSIZE|SWP_NOMOVE)); sdl.screen.x = sdl.screen.y = 0; } else if(sdl.screen.x || sdl.screen.y) { SetWindowPos(sdl.hwnd, HWND_NOTOPMOST, sdl.screen.x, sdl.screen.y, 0, 0, SWP_NOSIZE); sdl.screen.x = sdl.screen.y = 0; } }#endif DEBUG_MSG("Setup Screen finished"); sdl.renderer->Unlock(); // we were called by the video thread if(th) SDL_SemPost(sdl.video->display_change); sdl_bar.UpdateTitleBar();}void QuitProgram(bool mode){ sdl.time = 0;#if (C_HAVE_WXGUI) if(mode && (sdl.recording)) { if(wxMessageBox(wxT("Recording is in progress and exiting the program will stop it.\nDo you want to continue?"), wxT("Recording in progress"), wxICON_QUESTION | wxYES_NO) == wxNO) return; }#endif if((mode) && sdl.iniFile.length()) SaveConfigurationToIniFile(sdl.iniFile.c_str());#ifdef WIN32 // Re-enable screensaver SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, TRUE, 0, SPIF_SENDWININICHANGE);#endif ERROR_MSG("Ending.."); SDL_PauseAudio(1); SAFE_DELETE(sdl.channel); SAFE_DELETE(sdl.renderer); close_audio(true); SAFE_DELETE(timer); SAFE_DELETE(events);#if (C_HAVE_WXGUI) wxGUIend();#endif SDL_Quit(); fprintf(stderr, "Main finish complete.\n"); exit(0);}void ParseIniFile(const char *iniFileName){ GetPot ini(iniFileName, "#;"); sdl.iface = ini("network/interface", ""); sdl.ch_num = ini("general/channel", 1); sdl.screen.fullscreen = (bool)ini("output/fullscreen", (int)false); sdl.silent = (bool)ini("output/silent", (int)false); sdl.rememberChannel = (bool)ini("general/rememberchannel", (int)false);#ifdef WIN32 sdl.winfast = (bool)ini("output/winfast", (int)false);#endif sdl.time = ini("general/timer", 0); sdl.recording = ini("output/recording", (int)false); sdl.delay = ini("general/delay", 700); sdl.recordingDir = ini("output/recordingdir", "./"); const char *tmp = ini("output/mode", "overlay").c_str(); if(strcasecmp(tmp, "overlay") == 0) sdl.output_mode = OVERLAY;#ifdef WIN32 else if(strcasecmp(tmp, "gdi") == 0) sdl.output_mode = GDI;#endif#if (HAVE_DDRAW_H) else if(strcasecmp(tmp, "ddraw") == 0) sdl.output_mode = DDRAW;#endif#if (C_OPENGL) else if(strcasecmp(tmp, "opengl") == 0) sdl.output_mode = OPENGL;#endif tmp = ini("output/deinterlace", "weave").c_str(); if(strcasecmp(tmp, "weave") == 0) sdl.deint_mode = 0; else if(strcasecmp(tmp, "discard") == 0) sdl.deint_mode = 1; else if(strcasecmp(tmp, "mean") == 0) sdl.deint_mode = 2; else if(strcasecmp(tmp, "blend") == 0) sdl.deint_mode = 3; tmp = ini("general/channellist", "").c_str(); if(tmp && strlen(tmp)) sdl.channel_list = tmp;#if (C_HAS_LIBPOSTPROC) sdl.ppEnabled = (bool)ini("output/ppenabled", (int)false); sdl.ppMode = ini("output/ppmode", "de");#endif sdl.channelSurfingDelay = ini("general/channelsurfingdelay", 8000); sdl.hideMouseInFullscreenDelay = ini("general/hidemouseinfullscreendelay", 3000);}void ParseCmdLine(int argc, char *argv[]){ GetPot cl(argc, argv); if(cl.search(3, "-h", "--help", "/?")) { PrintHelp(); QuitProgram(true); } if(cl.search(4, "-if", "--interface", "/if", "/interface")) sdl.iface = cl.follow("", 4, "-if", "--interface", "/if", "/interface"); if(cl.search(4, "-c", "--channel", "/c", "/channel")) sdl.ch_num = cl.follow(1, 4, "-c", "--channel", "/c", "/channel"); if(!sdl.screen.fullscreen) sdl.screen.fullscreen = cl.search(4, "-f", "--fullscreen", "/f", "/fullscreen"); if(!sdl.silent) sdl.silent = cl.search(4, "-s", "--silent", "/s", "/silent");#ifdef WIN32 if(!sdl.winfast) sdl.winfast = cl.search(4, "-w", "--winfast", "/w", "/winfast");#endif if(cl.search(4, "-t", "--timer", "/t", "/timer")) sdl.time = cl.follow(0, 4, "-t", "--timer", "/t", "/timer"); if(cl.search(4, "-fi", "--file", "/fi", "/file")) { sdl.recording = true; sdl.filename = cl.follow("", 4, "-fi", "--file", "/fi", "/file"); } if(cl.search(4, "-o", "--output", "/o", "/output")) { const char *outputMode = cl.follow("overlay", 4, "-o", "--output", "/o", "/output").c_str(); if(strcasecmp(outputMode, "overlay") == 0) sdl.output_mode = OVERLAY;#ifdef WIN32 else if(strcasecmp(outputMode, "gdi") == 0) sdl.output_mode = GDI;#endif#if (HAVE_DDRAW_H) else if(strcasecmp(outputMode, "ddraw") == 0) sdl.output_mode = DDRAW;#endif#if (C_OPENGL) else if(strcasecmp(outputMode, "opengl") == 0) sdl.output_mode = OPENGL;#endif } if(cl.search(4, "-di", "--deinterlace", "/di", "/deinterlace")) { const char *deint = cl.follow("weave", 4, "-di", "--deinterlace", "/di", "/deinterlace").c_str(); if(strcasecmp(deint, "weave") == 0) sdl.deint_mode = 0; else if(strcasecmp(deint, "discard") == 0) sdl.deint_mode = 1; else if(strcasecmp(deint, "mean") == 0) sdl.deint_mode = 2; else if(strcasecmp(deint, "blend") == 0) sdl.deint_mode = 3; } if(cl.search(4, "-cl", "--channel-list", "/cl", "/channellist")) { sdl.channel_list = cl.follow("", 4, "-cl", "--channel-list", "/cl", "/channellist"); } if(cl.search(4, "-i", "--ini-file", "/i", "/inifile")) { sdl.iniFile = cl.follow("friptv.ini", 4, "-i", "--ini-file", "/i", "/inifile"); ParseIniFile(sdl.iniFile.c_str()); } else if(argc > 1) { // Clear iniFile variable so that modified configuration won't be saved sdl.iniFile.clear(); }#if (C_HAS_LIBPOSTPROC) if(cl.search(4, "-pp", "--pp-mode", "/pp", "/ppmode")) { sdl.ppEnabled = true; sdl.ppMode = cl.follow("", 4, "-pp", "--pp-mode", "/pp", "/ppmode"); }#endif}void PrintHelp(){ printf(PACKAGE_NAME " version " PACKAGE_VERSION "\n"); printf("Copyright (c) 2005-2008 gulikoza, mtrooper; published under GNU GPL.\n\n"); printf("Usage:\n"); printf("-i <file>, --ini-file <file> Read options from <file>\n"); printf("-c <num>, --channel <num> Start on channel <num>\n"); printf("-f, --fullscreen Start in fullscreen mode\n"); printf("-s, --silent No playback\n"); printf("-t <num>, --timer <num> Quit after <num> minutes\n"); printf("-o <mode>, --output <mode> Output mode. Valid values: overlay (default), opengl, ddraw (Windows only), GDI (Windows only)\n"); printf("-fi <file>, --file <file> Record to <file>\n"); printf("-if <ip>, --interface <ip> Listen on address <ip>\n"); printf("-cl <file>, --channel-list <file> Read channel list from <file>, default is channels.txt\n"); printf("-di <mode>, --deinterlace <mode> Deinterlace mode. Valid values: weave(default), discard, mean, blend\n"); printf("-pp <mode>, --pp-mode <mode> Use postprocessing mode <mode>. Mode must be in ffmpeg format\n");}// GetPot needs path in quotes...void ExpandBackslashesAddQuotes(CStr& dest, CStr& src){ dest.clear(); dest += '\''; for(CStr::iterator iter = src.begin(); iter != src.end(); iter++) { if(*iter == '\\') { dest += "\\\\"; } else { dest += *iter; } } dest += '\'';}void SaveConfigurationToIniFile(const char *iniFileName){ CStr tmpStr; FILE *iniFile = fopen(iniFileName, "w"); fprintf(iniFile, "# " PACKAGE_NAME " configuration file\n"); fprintf(iniFile, "\n[general]\n"); fprintf(iniFile, "rememberchannel=%d\n", (int)sdl.rememberChannel); fprintf(iniFile, "channel=%d\n", sdl.rememberChannel ? sdl.channel->GetNum() : sdl.ch_num); fprintf(iniFile, "timer=%d\n", sdl.time); fprintf(iniFile, "delay=%d\n", sdl.delay); ExpandBackslashesAddQuotes(tmpStr, sdl.channel_list); fprintf(iniFile, "channellist=%s\n", tmpStr.c_str()); fprintf(iniFile, "channelsurfingdelay=%d\n", sdl.channelSurfingDelay); fprintf(iniFile, "hidemouseinfullscreendelay=%d\n", sdl.hideMouseInFullscreenDelay); fprintf(iniFile, "\n[network]\n"); fprintf(iniFile, "interface=%s\n", sdl.iface.c_str()); fprintf(iniFile, "\n[output]\n"); fprintf(iniFile, "fullscreen=%d\n", (int)sdl.screen.fullscreen); fprintf(iniFile, "silent=%d\n", (int)sdl.silent);#ifdef WIN32 fprintf(iniFile, "winfast=%d\n", (int)sdl.winfast);#endif ExpandBackslashesAddQuotes(tmpStr, sdl.recordingDir); fprintf(iniFile, "recordingdir=%s\n", tmpStr.c_str()); switch (sdl.output_mode) { case OVERLAY: fprintf(iniFile, "mode=overlay\n"); break;#ifdef WIN32 case GDI: fprintf(iniFile, "mode=gdi\n"); break;#endif#if (HAVE_DDRAW_H) case DDRAW: fprintf(iniFile, "mode=ddraw\n"); break;#endif#if (C_OPENGL) case OPENGL: fprintf(iniFile, "mode=opengl\n"); break;#endif } switch (sdl.deint_mode) { case 0: fprintf(iniFile, "deinterlace=weave\n"); break; case 1: fprintf(iniFile, "deinterlace=discard\n"); break; case 2: fprintf(iniFile, "deinterlace=mean\n"); break; case 3: fprintf(iniFile, "deinterlace=blend\n"); break; }#if (C_HAS_LIBPOSTPROC) fprintf(iniFile, "ppenabled=%d\n", (int)sdl.ppEnabled); ExpandBackslashesAddQuotes(tmpStr, sdl.ppMode); fprintf(iniFile, "ppmode=%s\n", tmpStr.c_str());#endif fprintf(iniFile, "\n"); fclose(iniFile);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -