From cdfafa69996bce40732997dca168b9f36794dbe8 Mon Sep 17 00:00:00 2001 From: diego Date: Tue, 10 Feb 2009 15:34:44 +0000 Subject: [PATCH] Add priority support for OS/2 and factorize the Windows priority support. patch by KO Myung-Hun, komh chollian net git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28520 b3059339-0415-0410-9bf9-f77b7e298cf2 --- DOCS/man/en/mplayer.1 | 4 +- Makefile | 1 + cfg-common-opts.h | 4 +- cfg-common.h | 19 --------- configure | 8 ++++ mencoder.c | 17 ++------ mplayer.c | 19 +++------ osdep/priority.c | 92 +++++++++++++++++++++++++++++++++++++++++++ osdep/priority.h | 31 +++++++++++++++ 9 files changed, 146 insertions(+), 49 deletions(-) create mode 100644 osdep/priority.c create mode 100644 osdep/priority.h diff --git a/DOCS/man/en/mplayer.1 b/DOCS/man/en/mplayer.1 index 73ae4b1df4..289c0c57a6 100644 --- a/DOCS/man/en/mplayer.1 +++ b/DOCS/man/en/mplayer.1 @@ -732,9 +732,9 @@ Particularly useful on slow terminals or broken ones which do not properly handle carriage return (i.e.\& \\r). . .TP -.B \-priority (Windows only) +.B \-priority (Windows and OS/2 only) Set process priority for MPlayer according to the predefined -priorities available under Windows. +priorities available under Windows and OS/2. Possible values of : .RSs idle|belownormal|normal|abovenormal|high|realtime diff --git a/Makefile b/Makefile index 2fed37f9a2..6d849ab9c0 100644 --- a/Makefile +++ b/Makefile @@ -433,6 +433,7 @@ SRCS_COMMON-$(NETWORK) += stream/stream_netstream.c \ stream/realrtsp/xbuffer.c \ SRCS_COMMON-$(PNG) += libmpcodecs/vd_mpng.c +SRCS_COMMON-$(PRIORITY) += osdep/priority.c SRCS_COMMON-$(PVR) += stream/stream_pvr.c SRCS_COMMON-$(QTX_CODECS) += libmpcodecs/ad_qtaudio.c \ libmpcodecs/vd_qtvideo.c diff --git a/cfg-common-opts.h b/cfg-common-opts.h index 65d7a413ea..13d3f386d3 100644 --- a/cfg-common-opts.h +++ b/cfg-common-opts.h @@ -3,6 +3,8 @@ #include "config.h" +#include "osdep/priority.h" + // ------------------------- common options -------------------- {"quiet", &quiet, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL}, {"noquiet", &quiet, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL}, @@ -17,7 +19,7 @@ {"msgcharset", &mp_msg_charset, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL}, #endif {"include", cfg_include, CONF_TYPE_FUNC_PARAM, CONF_NOSAVE, 0, 0, NULL}, -#if defined(__MINGW32__) || defined(__CYGWIN__) +#ifdef CONFIG_PRIORITY {"priority", &proc_priority, CONF_TYPE_STRING, 0, 0, 0, NULL}, #endif {"noconfig", noconfig_opts, CONF_TYPE_SUBCONFIG, CONF_GLOBAL|CONF_NOCFG|CONF_PRE_PARSE, 0, 0, NULL}, diff --git a/cfg-common.h b/cfg-common.h index 9a4e258f35..ea5fce63f0 100644 --- a/cfg-common.h +++ b/cfg-common.h @@ -350,25 +350,6 @@ const m_option_t msgl_config[]={ }; -#if defined(__MINGW32__) || defined(__CYGWIN__) -struct { - char* name; - int prio; -} priority_presets_defs[] = { - { "realtime", REALTIME_PRIORITY_CLASS}, - { "high", HIGH_PRIORITY_CLASS}, -#ifdef ABOVE_NORMAL_PRIORITY_CLASS - { "abovenormal", ABOVE_NORMAL_PRIORITY_CLASS}, -#endif - { "normal", NORMAL_PRIORITY_CLASS}, -#ifdef BELOW_NORMAL_PRIORITY_CLASS - { "belownormal", BELOW_NORMAL_PRIORITY_CLASS}, -#endif - { "idle", IDLE_PRIORITY_CLASS}, - { NULL, NORMAL_PRIORITY_CLASS} /* default */ -}; -#endif /* defined(__MINGW32__) || defined(__CYGWIN__) */ - extern const m_option_t noconfig_opts[]; extern const m_option_t lavc_decode_opts_conf[]; diff --git a/configure b/configure index d6ba6d8807..d1ec138627 100755 --- a/configure +++ b/configure @@ -718,8 +718,10 @@ _ass=auto _rpath=no _asmalign_pot=auto _stream_cache=yes +_priority=no def_dos_paths="#define HAVE_DOS_PATHS 0" def_stream_cache="#define CONFIG_STREAM_CACHE 1" +def_priority="#undef CONFIG_PRIORITY" def_pthread_cache="#undef PTHREAD_CACHE" _need_shmem=yes for ac_option do @@ -1433,7 +1435,9 @@ if win32 ; then _ld_extra="$_ld_extra -lwinmm" _pe_executable=yes _timer=timer-win2.c + _priority=yes def_dos_paths="#define HAVE_DOS_PATHS 1" + def_priority="#define CONFIG_PRIORITY 1" fi if mingw32 ; then @@ -1456,7 +1460,9 @@ if os2 ; then _exesuf=".exe" _getch=getch2-os2.c _need_shmem=no + _priority=yes def_dos_paths="#define HAVE_DOS_PATHS 1" + def_priority="#define CONFIG_PRIORITY 1" fi for I in "$TMPDIR" "$TEMPDIR" "/tmp" ; do @@ -8090,6 +8096,7 @@ OSS = $_ossaudio PE_EXECUTABLE = $_pe_executable PNG = $_png PNM = $_pnm +PRIORITY = $_priority PULSE = $_pulse PVR = $_pvr QTX_CODECS = $_qtx @@ -8355,6 +8362,7 @@ $def_macosx_bundle $def_macosx_finder $def_maemo $def_named_asm_args +$def_priority $def_quicktime $def_restrict_keyword $def_rtc diff --git a/mencoder.c b/mencoder.c index df85a37974..2d9d037e22 100644 --- a/mencoder.c +++ b/mencoder.c @@ -139,9 +139,7 @@ double cur_video_time_usage=0; double cur_vout_time_usage=0; int benchmark=0; -#if defined(__MINGW32__) || defined(__CYGWIN__) -char * proc_priority=NULL; -#endif +#include "osdep/priority.h" // A-V sync: int delay_corrected=1; @@ -479,17 +477,8 @@ if (frameno_filename) { } } -#if defined(__MINGW32__) || defined(__CYGWIN__) - if(proc_priority){ - int i; - for(i=0; priority_presets_defs[i].name; i++){ - if(strcasecmp(priority_presets_defs[i].name, proc_priority) == 0) - break; - } - mp_msg(MSGT_CPLAYER,MSGL_STATUS,MSGTR_SettingProcessPriority, - priority_presets_defs[i].name); - SetPriorityClass(GetCurrentProcess(), priority_presets_defs[i].prio); - } +#ifdef CONFIG_PRIORITY + set_priority(); #endif // check font diff --git a/mplayer.c b/mplayer.c index 631fd6b17a..0c097db71b 100644 --- a/mplayer.c +++ b/mplayer.c @@ -84,9 +84,7 @@ int quiet=0; int enable_mouse_movements=0; float start_volume = -1; -#if defined(__MINGW32__) || defined(__CYGWIN__) -char * proc_priority=NULL; -#endif +#include "osdep/priority.h" char *heartbeat_cmd; @@ -2596,17 +2594,12 @@ int gui_no_filename=0; SetErrorMode(0x8003); // request 1ms timer resolution timeBeginPeriod(1); - if(proc_priority){ - int i; - for(i=0; priority_presets_defs[i].name; i++){ - if(strcasecmp(priority_presets_defs[i].name, proc_priority) == 0) - break; - } - mp_msg(MSGT_CPLAYER,MSGL_STATUS,MSGTR_SettingProcessPriority, - priority_presets_defs[i].name); - SetPriorityClass(GetCurrentProcess(), priority_presets_defs[i].prio); - } #endif + +#ifdef CONFIG_PRIORITY + set_priority(); +#endif + #ifndef CONFIG_GUI if(use_gui){ mp_msg(MSGT_CPLAYER,MSGL_WARN,MSGTR_NoGui); diff --git a/osdep/priority.c b/osdep/priority.c new file mode 100644 index 0000000000..8ef7c34c76 --- /dev/null +++ b/osdep/priority.c @@ -0,0 +1,92 @@ +/* + * implementation of '-priority' for OS/2 and Win32 + * + * Copyright (c) 2009 by KO Myung-Hun (komh@chollian.net) + * + * This file is part of MPlayer. + * + * MPlayer is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * MPlayer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with MPlayer; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifdef __OS2__ + +#define INCL_DOS +#include + +#define REALTIME_PRIORITY_CLASS MAKESHORT(0, PRTYC_TIMECRITICAL) +#define HIGH_PRIORITY_CLASS MAKESHORT(PRTYD_MAXIMUM, PRTYC_REGULAR) +#define ABOVE_NORMAL_PRIORITY_CLASS MAKESHORT(PRTYD_MAXIMUM / 2, PRTYC_REGULAR) +#define NORMAL_PRIORITY_CLASS MAKESHORT(0, PRTYC_REGULAR) +#define BELOW_NORMAL_PRIORITY_CLASS MAKESHORT(PRTYD_MAXIMUM, PRTYC_IDLETIME) +#define IDLE_PRIORITY_CLASS MAKESHORT(0, PRTYC_IDLETIME) + +#else + +/* Disable non-underscored versions of non-ANSI functions + * as otherwise int eof would conflict with eof(). */ +#define _UWIN 1 +#include + +#endif /* __OS2__ */ + +#include + +#include "mp_msg.h" +#include "help_mp.h" + +#include "priority.h" + +char *proc_priority = NULL; + +void set_priority(void) +{ + struct { + char* name; + int prio; + } priority_presets_defs[] = { + { "realtime", REALTIME_PRIORITY_CLASS}, + { "high", HIGH_PRIORITY_CLASS}, +#ifdef ABOVE_NORMAL_PRIORITY_CLASS + { "abovenormal", ABOVE_NORMAL_PRIORITY_CLASS}, +#endif + { "normal", NORMAL_PRIORITY_CLASS}, +#ifdef BELOW_NORMAL_PRIORITY_CLASS + { "belownormal", BELOW_NORMAL_PRIORITY_CLASS}, +#endif + { "idle", IDLE_PRIORITY_CLASS}, + { NULL, NORMAL_PRIORITY_CLASS} /* default */ + }; + + if (proc_priority) { + int i; + + for (i = 0; priority_presets_defs[i].name; i++) { + if (strcasecmp(priority_presets_defs[i].name, proc_priority) == 0) + break; + } + mp_msg(MSGT_CPLAYER, MSGL_STATUS, MSGTR_SettingProcessPriority, + priority_presets_defs[i].name); + +#ifdef __OS2__ + DosSetPriority(PRTYS_PROCESS, + HIBYTE(priority_presets_defs[i].prio), + LOBYTE(priority_presets_defs[i].prio), + 0); +#else + SetPriorityClass(GetCurrentProcess(), priority_presets_defs[i].prio); +#endif + } +} + diff --git a/osdep/priority.h b/osdep/priority.h new file mode 100644 index 0000000000..cb4bc56c3f --- /dev/null +++ b/osdep/priority.h @@ -0,0 +1,31 @@ +/* + * header for implementation of '-priority' + * + * Copyright (c) 2009 by KO Myung-Hun (komh@chollian.net) + * + * This file is part of MPlayer. + * + * MPlayer is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * MPlayer is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with MPlayer; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef MPLAYER_PRIORITY_H +#define MPLAYER_PRIORITY_H + +extern char *proc_priority; + +void set_priority(void); + +#endif /* MPLAYER_PRIORITY_H */ +