⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 linux下实现视频播放的播放器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    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 + -