[PATCH 1/5] Remove some useless static zero initializations.
--- mplayer.c | 48 ++++++++++++++++++++++++------------------------ 1 files changed, 24 insertions(+), 24 deletions(-) diff --git a/mplayer.c b/mplayer.c index c946b4a..501e2d4 100644 --- a/mplayer.c +++ b/mplayer.c @@ -162,7 +162,7 @@ static int cfg_include(m_option_t *conf, char *filename){ return m_config_parse_config_file(mconfig, filename); } -static int max_framesize=0; +static int max_framesize; int noconsolecontrols=0; //**************************************************************************// @@ -188,16 +188,16 @@ int fixed_vo=0; // benchmark: double video_time_usage=0; double vout_time_usage=0; -static double audio_time_usage=0; -static int total_time_usage_start=0; -static int total_frame_cnt=0; -static int drop_frame_cnt=0; // total number of dropped frames +static double audio_time_usage; +static int total_time_usage_start; +static int total_frame_cnt; +static int drop_frame_cnt; // total number of dropped frames int benchmark=0; // options: #define DEFAULT_STARTUP_DECODE_RETRY 8 int auto_quality=0; -static int output_quality=0; +static int output_quality; float playback_speed=1.0; @@ -207,7 +207,7 @@ int use_gui=0; int enqueue=0; #endif -static int list_properties = 0; +static int list_properties; int osd_level=1; // if nonzero, hide current OSD contents when GetTimerMS() reaches this @@ -218,12 +218,12 @@ int osd_fractions = 0; // determines how fractions of seconds are displayed int term_osd = 1; static char* term_osd_esc = "\x1b[A\r\x1b[K"; -static char* playing_msg = NULL; +static char* playing_msg; // seek: static double seek_to_sec; -static off_t seek_to_byte=0; -static off_t step_sec=0; -static int loop_seek=0; +static off_t seek_to_byte; +static off_t step_sec; +static int loop_seek; static m_time_size_t end_at = { .type = END_AT_NONE, .pos = 0 }; @@ -251,7 +251,7 @@ int dvdsub_lang_id; int vobsub_id=-1; char* audio_lang=NULL; char* dvdsub_lang=NULL; -static char* spudec_ifo=NULL; +static char* spudec_ifo; char* filename=NULL; //"MI2-Trailer.avi"; int forced_subs_only=0; int file_filter=1; @@ -271,14 +271,14 @@ int capture_dump = 0; // A-V sync: static float default_max_pts_correction=-1; static float max_pts_correction=0;//default_max_pts_correction; -static float c_total=0; +static float c_total; float audio_delay=0; -static int ignore_start=0; +static int ignore_start; -static int softsleep=0; +static int softsleep; double force_fps=0; -static int force_srate=0; +static int force_srate; static int audio_output_format=-1; // AF_FORMAT_UNKNOWN int frame_dropping=0; // option 0=no drop 1= drop vo 2= drop decode static int play_n_frames=-1; @@ -309,9 +309,9 @@ static const vf_info_t* const libmenu_vfs[] = { &vf_info_menu, NULL }; -static vf_instance_t* vf_menu = NULL; +static vf_instance_t* vf_menu; int use_menu = 0; -static char* menu_cfg = NULL; +static char* menu_cfg; static char* menu_root = "main"; #endif @@ -337,14 +337,14 @@ int edl_start_pts = 0; ///< Automatically add/sub this from EDL start/stop pos int use_filedir_conf; int use_filename_title; -static unsigned int initialized_flags=0; +static unsigned int initialized_flags; /// step size of mixer changes int volstep = 3; #ifdef CONFIG_CRASH_DEBUG static char *prog_path; -static int crash_debug = 0; +static int crash_debug; #endif /* This header requires all the global variable declarations. */ @@ -759,7 +759,7 @@ static void child_sighandler(int x){ #endif static void exit_sighandler(int x){ - static int sig_count=0; + static int sig_count; #ifdef CONFIG_CRASH_DEBUG if (!crash_debug || x != SIGTRAP) #endif @@ -1351,7 +1351,7 @@ struct mp_osd_msg { }; /// OSD message stack. -static mp_osd_msg_t* osd_msg_stack = NULL; +static mp_osd_msg_t* osd_msg_stack; /** * \brief Add a message on the OSD message stack @@ -1439,7 +1439,7 @@ static void clear_osd_msgs(void) { static mp_osd_msg_t* get_osd_msg(void) { mp_osd_msg_t *msg,*prev,*last = NULL; - static unsigned last_update = 0; + static unsigned last_update; unsigned now = GetTimerMS(); unsigned diff; char hidden_dec_done = 0; @@ -2039,7 +2039,7 @@ static void adjust_sync_and_print_status(int between_frames, float timing_error) v_pts = mpctx->sh_video->pts; { - static int drop_message=0; + static int drop_message; double AV_delay = a_pts - audio_delay - v_pts; double x; // not a good idea to do A-V correction with with bogus values -- 1.7.4.4
The threshold wasn't enough for some alignment in mplayer.c for example, and a lot of comments where truncated due to the force space setting. --- TOOLS/mp-uncrustify-style.cfg | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/TOOLS/mp-uncrustify-style.cfg b/TOOLS/mp-uncrustify-style.cfg index e68e6f6..622a086 100644 --- a/TOOLS/mp-uncrustify-style.cfg +++ b/TOOLS/mp-uncrustify-style.cfg @@ -606,7 +606,7 @@ sp_case_label = ignore # ignore/add/remove/force sp_range = ignore # ignore/add/remove/force # Control the space after the opening of a C++ comment '// A' vs '//A' -sp_cmt_cpp_start = force # ignore/add/remove/force +sp_cmt_cpp_start = ignore # ignore/add/remove/force # Controls the spaces between #else or #endif and a trailing comment sp_endif_cmt = ignore # ignore/add/remove/force @@ -668,7 +668,7 @@ align_var_def_inline = false # false/true align_assign_span = 1 # number # The threshold for aligning on '=' in assignments (0=no limit) -align_assign_thresh = 6 # number +align_assign_thresh = 12 # number # The span for aligning on '=' in enums (0=don't align) align_enum_equ_span = 1 # number -- 1.7.4.4
On Sat, Apr 16, 2011 at 12:02:50AM +0200, Clément Bœsch wrote:
The threshold wasn't enough for some alignment in mplayer.c for example, and a lot of comments where truncated due to the force space setting.
Applied without the threshold change. -- Clément B.
Direct use of uncrustify profile with mplayer.c --- mplayer.c | 4900 +++++++++++++++++++++++++++++++------------------------------ 1 files changed, 2491 insertions(+), 2409 deletions(-) diff --git a/mplayer.c b/mplayer.c index 501e2d4..20ef389 100644 --- a/mplayer.c +++ b/mplayer.c @@ -44,11 +44,11 @@ #include <sys/ioctl.h> #include <sys/wait.h> #else -#define SIGHUP 1 /* hangup */ -#define SIGQUIT 3 /* quit */ -#define SIGKILL 9 /* kill (cannot be caught or ignored) */ -#define SIGBUS 10 /* bus error */ -#define SIGPIPE 13 /* broken pipe */ +#define SIGHUP 1 /* hangup */ +#define SIGQUIT 3 /* quit */ +#define SIGKILL 9 /* kill (cannot be caught or ignored) */ +#define SIGBUS 10 /* bus error */ +#define SIGPIPE 13 /* broken pipe */ #endif #ifdef HAVE_RTC @@ -141,84 +141,88 @@ #include "stream/stream_dvd.h" #endif - -int slave_mode=0; -int player_idle_mode=0; -int quiet=0; -int enable_mouse_movements=0; -float start_volume = -1; -double start_pts = MP_NOPTS_VALUE; +int slave_mode = 0; +int player_idle_mode = 0; +int quiet = 0; +int enable_mouse_movements = 0; +float start_volume = -1; +double start_pts = MP_NOPTS_VALUE; char *heartbeat_cmd; -m_config_t* mconfig; +m_config_t *mconfig; //**************************************************************************// // Config file //**************************************************************************// -static int cfg_inc_verbose(m_option_t *conf){ ++verbose; return 0;} +static int cfg_inc_verbose(m_option_t *conf) +{ + ++verbose; + return 0; +} -static int cfg_include(m_option_t *conf, char *filename){ - return m_config_parse_config_file(mconfig, filename); +static int cfg_include(m_option_t *conf, char *filename) +{ + return m_config_parse_config_file(mconfig, filename); } static int max_framesize; -int noconsolecontrols=0; +int noconsolecontrols = 0; //**************************************************************************// // Not all functions in mplayer.c take the context as an argument yet static MPContext mpctx_s = { - .osd_function = OSD_PLAY, - .begin_skip = MP_NOPTS_VALUE, + .osd_function = OSD_PLAY, + .begin_skip = MP_NOPTS_VALUE, .play_tree_step = 1, .global_sub_pos = -1, .set_of_sub_pos = -1, - .file_format = DEMUXER_TYPE_UNKNOWN, - .loop_times = -1, + .file_format = DEMUXER_TYPE_UNKNOWN, + .loop_times = -1, #ifdef CONFIG_DVBIN - .last_dvb_step = 1, + .last_dvb_step = 1, #endif }; static MPContext *mpctx = &mpctx_s; -int fixed_vo=0; +int fixed_vo = 0; // benchmark: -double video_time_usage=0; -double vout_time_usage=0; +double video_time_usage = 0; +double vout_time_usage = 0; static double audio_time_usage; static int total_time_usage_start; static int total_frame_cnt; static int drop_frame_cnt; // total number of dropped frames -int benchmark=0; +int benchmark = 0; // options: #define DEFAULT_STARTUP_DECODE_RETRY 8 - int auto_quality=0; +int auto_quality = 0; static int output_quality; -float playback_speed=1.0; +float playback_speed = 1.0; -int use_gui=0; +int use_gui = 0; #ifdef CONFIG_GUI -int enqueue=0; +int enqueue = 0; #endif static int list_properties; -int osd_level=1; +int osd_level = 1; // if nonzero, hide current OSD contents when GetTimerMS() reaches this unsigned int osd_visible; -int osd_duration = 1000; +int osd_duration = 1000; int osd_fractions = 0; // determines how fractions of seconds are displayed // on OSD int term_osd = 1; -static char* term_osd_esc = "\x1b[A\r\x1b[K"; -static char* playing_msg; +static char *term_osd_esc = "\x1b[A\r\x1b[K"; +static char *playing_msg; // seek: static double seek_to_sec; static off_t seek_to_byte; @@ -228,112 +232,110 @@ static int loop_seek; static m_time_size_t end_at = { .type = END_AT_NONE, .pos = 0 }; // A/V sync: - int autosync=0; // 30 might be a good default value. +int autosync = 0; // 30 might be a good default value. // may be changed by GUI: (FIXME!) -float rel_seek_secs=0; -int abs_seek_pos=0; +float rel_seek_secs = 0; +int abs_seek_pos = 0; // codecs: -char **audio_codec_list=NULL; // override audio codec -char **video_codec_list=NULL; // override video codec -char **audio_fm_list=NULL; // override audio codec family -char **video_fm_list=NULL; // override video codec family +char **audio_codec_list = NULL; // override audio codec +char **video_codec_list = NULL; // override video codec +char **audio_fm_list = NULL; // override audio codec family +char **video_fm_list = NULL; // override video codec family // streaming: -int audio_id=-1; -int video_id=-1; -int dvdsub_id=-1; +int audio_id = -1; +int video_id = -1; +int dvdsub_id = -1; // this dvdsub_id was selected via slang // use this to allow dvdnav to follow -slang across stream resets, // in particular the subtitle ID for a language changes int dvdsub_lang_id; -int vobsub_id=-1; -char* audio_lang=NULL; -char* dvdsub_lang=NULL; -static char* spudec_ifo; -char* filename=NULL; //"MI2-Trailer.avi"; -int forced_subs_only=0; -int file_filter=1; +int vobsub_id = -1; +char *audio_lang = NULL; +char *dvdsub_lang = NULL; +static char *spudec_ifo; +char *filename = NULL; //"MI2-Trailer.avi"; +int forced_subs_only = 0; +int file_filter = 1; // cache2: - int stream_cache_size=-1; +int stream_cache_size = -1; #ifdef CONFIG_STREAM_CACHE -float stream_cache_min_percent=20.0; -float stream_cache_seek_min_percent=50.0; +float stream_cache_min_percent = 20.0; +float stream_cache_seek_min_percent = 50.0; #endif // dump: char *stream_dump_name = "stream.dump"; -int stream_dump_type = 0; -int capture_dump = 0; +int stream_dump_type = 0; +int capture_dump = 0; // A-V sync: -static float default_max_pts_correction=-1; -static float max_pts_correction=0;//default_max_pts_correction; +static float default_max_pts_correction = -1; +static float max_pts_correction = 0; //default_max_pts_correction; static float c_total; - float audio_delay=0; +float audio_delay = 0; static int ignore_start; static int softsleep; - double force_fps=0; +double force_fps = 0; static int force_srate; -static int audio_output_format=-1; // AF_FORMAT_UNKNOWN - int frame_dropping=0; // option 0=no drop 1= drop vo 2= drop decode -static int play_n_frames=-1; -static int play_n_frames_mf=-1; +static int audio_output_format = -1; // AF_FORMAT_UNKNOWN +int frame_dropping = 0; // option 0=no drop 1= drop vo 2= drop decode +static int play_n_frames = -1; +static int play_n_frames_mf = -1; // screen info: -char** video_driver_list=NULL; -char** audio_driver_list=NULL; +char **video_driver_list = NULL; +char **audio_driver_list = NULL; // sub: -char *font_name=NULL; -char *sub_font_name=NULL; -float font_factor=0.75; -char **sub_name=NULL; -char **sub_paths = NULL; -float sub_delay=0; -float sub_fps=0; -int sub_auto = 1; -char *vobsub_name=NULL; -int subcc_enabled=0; +char *font_name = NULL; +char *sub_font_name = NULL; +float font_factor = 0.75; +char **sub_name = NULL; +char **sub_paths = NULL; +float sub_delay = 0; +float sub_fps = 0; +int sub_auto = 1; +char *vobsub_name = NULL; +int subcc_enabled = 0; int suboverlap_enabled = 1; -char* current_module=NULL; // for debugging - +char *current_module = NULL; // for debugging #ifdef CONFIG_MENU -static const vf_info_t* const libmenu_vfs[] = { - &vf_info_menu, - NULL +static const vf_info_t *const libmenu_vfs[] = { + &vf_info_menu, + NULL }; -static vf_instance_t* vf_menu; +static vf_instance_t *vf_menu; int use_menu = 0; -static char* menu_cfg; -static char* menu_root = "main"; +static char *menu_cfg; +static char *menu_root = "main"; #endif - #ifdef HAVE_RTC static int nortc = 1; -static char* rtc_device; +static char *rtc_device; #endif -edl_record_ptr edl_records = NULL; ///< EDL entries memory area +edl_record_ptr edl_records = NULL; ///< EDL entries memory area edl_record_ptr next_edl_record = NULL; ///< only for traversing edl_records -short edl_decision = 0; ///< 1 when an EDL operation has been made. -short edl_needs_reset = 0; ///< 1 if we need to reset EDL next pointer -short edl_backward = 0; ///< 1 if we need to skip to the beginning of the next EDL record -FILE* edl_fd = NULL; ///< fd to write to when in -edlout mode. +short edl_decision = 0; ///< 1 when an EDL operation has been made. +short edl_needs_reset = 0; ///< 1 if we need to reset EDL next pointer +short edl_backward = 0; ///< 1 if we need to skip to the beginning of the next EDL record +FILE *edl_fd = NULL; ///< fd to write to when in -edlout mode. // Number of seconds to add to the seek when jumping out // of EDL scene in backward direction. This is needed to // have some time after the seek to decide what to do next // (next seek, pause,...), otherwise after the seek it will // enter the same scene again and skip forward immediately float edl_backward_delay = 2; -int edl_start_pts = 0; ///< Automatically add/sub this from EDL start/stop pos +int edl_start_pts = 0; ///< Automatically add/sub this from EDL start/stop pos int use_filedir_conf; int use_filename_title; @@ -350,7 +352,6 @@ static int crash_debug; /* This header requires all the global variable declarations. */ #include "cfg-mplayer.h" - const void *mpctx_get_video_out(MPContext *mpctx) { return mpctx->video_out; @@ -386,542 +387,557 @@ int mpctx_get_osd_function(MPContext *mpctx) return mpctx->osd_function; } -static int is_valid_metadata_type (metadata_t type) { - switch (type) - { - /* check for valid video stream */ - case META_VIDEO_CODEC: - case META_VIDEO_BITRATE: - case META_VIDEO_RESOLUTION: - if (!mpctx->sh_video) - return 0; - break; - - /* check for valid audio stream */ - case META_AUDIO_CODEC: - case META_AUDIO_BITRATE: - case META_AUDIO_SAMPLES: - if (!mpctx->sh_audio) - return 0; - break; - - /* check for valid demuxer */ - case META_INFO_TITLE: - case META_INFO_ARTIST: - case META_INFO_ALBUM: - case META_INFO_YEAR: - case META_INFO_COMMENT: - case META_INFO_TRACK: - case META_INFO_GENRE: - if (!mpctx->demuxer) - return 0; - break; - - default: - break; - } - - return 1; -} +static int is_valid_metadata_type(metadata_t type) +{ + switch (type) { + /* check for valid video stream */ + case META_VIDEO_CODEC: + case META_VIDEO_BITRATE: + case META_VIDEO_RESOLUTION: + if (!mpctx->sh_video) + return 0; + break; -static char *get_demuxer_info (char *tag) { - char **info = mpctx->demuxer->info; - int n; + /* check for valid audio stream */ + case META_AUDIO_CODEC: + case META_AUDIO_BITRATE: + case META_AUDIO_SAMPLES: + if (!mpctx->sh_audio) + return 0; + break; - if (!info || !tag) - return NULL; + /* check for valid demuxer */ + case META_INFO_TITLE: + case META_INFO_ARTIST: + case META_INFO_ALBUM: + case META_INFO_YEAR: + case META_INFO_COMMENT: + case META_INFO_TRACK: + case META_INFO_GENRE: + if (!mpctx->demuxer) + return 0; + break; - for (n = 0; info[2*n] != NULL ; n++) - if (!strcasecmp (info[2*n], tag)) - break; + default: + break; + } - return info[2*n+1] ? strdup (info[2*n+1]) : NULL; + return 1; } -char *get_metadata (metadata_t type) { - sh_audio_t * const sh_audio = mpctx->sh_audio; - sh_video_t * const sh_video = mpctx->sh_video; - - if (!is_valid_metadata_type (type)) - return NULL; - - switch (type) - { - case META_NAME: - return strdup(mp_basename(filename)); +static char *get_demuxer_info(char *tag) +{ + char **info = mpctx->demuxer->info; + int n; - case META_VIDEO_CODEC: - if (sh_video->format == 0x10000001) - return strdup("mpeg1"); - else if (sh_video->format == 0x10000002) - return strdup("mpeg2"); - else if (sh_video->format == 0x10000004) - return strdup("mpeg4"); - else if (sh_video->format == 0x10000005) - return strdup("h264"); - else if (sh_video->format >= 0x20202020) - return mp_asprintf("%.4s", (char *)&sh_video->format); - return mp_asprintf("0x%08X", sh_video->format); + if (!info || !tag) + return NULL; - case META_VIDEO_BITRATE: - return mp_asprintf("%d kbps", (int)(sh_video->i_bps * 8 / 1024)); + for (n = 0; info[2 * n] != NULL; n++) + if (!strcasecmp(info[2 * n], tag)) + break; - case META_VIDEO_RESOLUTION: - return mp_asprintf("%d x %d", sh_video->disp_w, sh_video->disp_h); + return info[2 * n + 1] ? strdup(info[2 * n + 1]) : NULL; +} - case META_AUDIO_CODEC: - if (sh_audio->codec && sh_audio->codec->name) - return strdup(sh_audio->codec->name); - break; +char *get_metadata(metadata_t type) +{ + sh_audio_t *const sh_audio = mpctx->sh_audio; + sh_video_t *const sh_video = mpctx->sh_video; + + if (!is_valid_metadata_type(type)) + return NULL; + + switch (type) { + case META_NAME: + return strdup(mp_basename(filename)); + + case META_VIDEO_CODEC: + if (sh_video->format == 0x10000001) + return strdup("mpeg1"); + else if (sh_video->format == 0x10000002) + return strdup("mpeg2"); + else if (sh_video->format == 0x10000004) + return strdup("mpeg4"); + else if (sh_video->format == 0x10000005) + return strdup("h264"); + else if (sh_video->format >= 0x20202020) + return mp_asprintf("%.4s", (char *)&sh_video->format); + return mp_asprintf("0x%08X", sh_video->format); + + case META_VIDEO_BITRATE: + return mp_asprintf("%d kbps", (int)(sh_video->i_bps * 8 / 1024)); + + case META_VIDEO_RESOLUTION: + return mp_asprintf("%d x %d", sh_video->disp_w, sh_video->disp_h); + + case META_AUDIO_CODEC: + if (sh_audio->codec && sh_audio->codec->name) + return strdup(sh_audio->codec->name); + break; - case META_AUDIO_BITRATE: - return mp_asprintf("%d kbps", (int)(sh_audio->i_bps * 8 / 1000)); + case META_AUDIO_BITRATE: + return mp_asprintf("%d kbps", (int)(sh_audio->i_bps * 8 / 1000)); - case META_AUDIO_SAMPLES: - return mp_asprintf("%d Hz, %d ch.", sh_audio->samplerate, sh_audio->channels); + case META_AUDIO_SAMPLES: + return mp_asprintf("%d Hz, %d ch.", sh_audio->samplerate, sh_audio->channels); - /* check for valid demuxer */ - case META_INFO_TITLE: - return get_demuxer_info ("Title"); + /* check for valid demuxer */ + case META_INFO_TITLE: + return get_demuxer_info("Title"); - case META_INFO_ARTIST: - return get_demuxer_info ("Artist"); + case META_INFO_ARTIST: + return get_demuxer_info("Artist"); - case META_INFO_ALBUM: - return get_demuxer_info ("Album"); + case META_INFO_ALBUM: + return get_demuxer_info("Album"); - case META_INFO_YEAR: - return get_demuxer_info ("Year"); + case META_INFO_YEAR: + return get_demuxer_info("Year"); - case META_INFO_COMMENT: - return get_demuxer_info ("Comment"); + case META_INFO_COMMENT: + return get_demuxer_info("Comment"); - case META_INFO_TRACK: - return get_demuxer_info ("Track"); + case META_INFO_TRACK: + return get_demuxer_info("Track"); - case META_INFO_GENRE: - return get_demuxer_info ("Genre"); + case META_INFO_GENRE: + return get_demuxer_info("Genre"); - default: - break; - } + default: + break; + } - return NULL; + return NULL; } static void print_file_properties(const MPContext *mpctx, const char *filename) { - double video_start_pts = MP_NOPTS_VALUE; - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_FILENAME=%s\n", - filename_recode(filename)); - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_DEMUXER=%s\n", mpctx->demuxer->desc->name); - if (mpctx->sh_video) { - /* Assume FOURCC if all bytes >= 0x20 (' ') */ - if (mpctx->sh_video->format >= 0x20202020) - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_VIDEO_FORMAT=%.4s\n", (char *)&mpctx->sh_video->format); - else - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_VIDEO_FORMAT=0x%08X\n", mpctx->sh_video->format); - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_VIDEO_BITRATE=%d\n", mpctx->sh_video->i_bps*8); - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_VIDEO_WIDTH=%d\n", mpctx->sh_video->disp_w); - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_VIDEO_HEIGHT=%d\n", mpctx->sh_video->disp_h); - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_VIDEO_FPS=%5.3f\n", mpctx->sh_video->fps); - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_VIDEO_ASPECT=%1.4f\n", mpctx->sh_video->aspect); - video_start_pts = ds_get_next_pts(mpctx->d_video); - } - if (mpctx->sh_audio) { - /* Assume FOURCC if all bytes >= 0x20 (' ') */ - if (mpctx->sh_audio->format >= 0x20202020) - mp_msg(MSGT_IDENTIFY,MSGL_INFO, "ID_AUDIO_FORMAT=%.4s\n", (char *)&mpctx->sh_audio->format); + double video_start_pts = MP_NOPTS_VALUE; + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_FILENAME=%s\n", + filename_recode(filename)); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_DEMUXER=%s\n", mpctx->demuxer->desc->name); + if (mpctx->sh_video) { + /* Assume FOURCC if all bytes >= 0x20 (' ') */ + if (mpctx->sh_video->format >= 0x20202020) + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FORMAT=%.4s\n", (char *)&mpctx->sh_video->format); + else + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FORMAT=0x%08X\n", mpctx->sh_video->format); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_BITRATE=%d\n", mpctx->sh_video->i_bps * 8); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_WIDTH=%d\n", mpctx->sh_video->disp_w); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_HEIGHT=%d\n", mpctx->sh_video->disp_h); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FPS=%5.3f\n", mpctx->sh_video->fps); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_ASPECT=%1.4f\n", mpctx->sh_video->aspect); + video_start_pts = ds_get_next_pts(mpctx->d_video); + } + if (mpctx->sh_audio) { + /* Assume FOURCC if all bytes >= 0x20 (' ') */ + if (mpctx->sh_audio->format >= 0x20202020) + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_FORMAT=%.4s\n", (char *)&mpctx->sh_audio->format); + else + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_FORMAT=%d\n", mpctx->sh_audio->format); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_BITRATE=%d\n", mpctx->sh_audio->i_bps * 8); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_RATE=%d\n", mpctx->sh_audio->samplerate); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_NCH=%d\n", mpctx->sh_audio->channels); + start_pts = ds_get_next_pts(mpctx->d_audio); + } + if (video_start_pts != MP_NOPTS_VALUE) { + if (start_pts == MP_NOPTS_VALUE || !mpctx->sh_audio || + (mpctx->sh_video && video_start_pts < start_pts)) + start_pts = video_start_pts; + } + if (start_pts != MP_NOPTS_VALUE) + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_START_TIME=%.2f\n", start_pts); else - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_AUDIO_FORMAT=%d\n", mpctx->sh_audio->format); - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_AUDIO_BITRATE=%d\n", mpctx->sh_audio->i_bps*8); - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_AUDIO_RATE=%d\n", mpctx->sh_audio->samplerate); - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_AUDIO_NCH=%d\n", mpctx->sh_audio->channels); - start_pts = ds_get_next_pts(mpctx->d_audio); - } - if (video_start_pts != MP_NOPTS_VALUE) { - if (start_pts == MP_NOPTS_VALUE || !mpctx->sh_audio || - (mpctx->sh_video && video_start_pts < start_pts)) - start_pts = video_start_pts; - } - if (start_pts != MP_NOPTS_VALUE) - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_START_TIME=%.2f\n", start_pts); - else - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_START_TIME=unknown\n"); - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_LENGTH=%.2f\n", demuxer_get_time_length(mpctx->demuxer)); - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_SEEKABLE=%d\n", - mpctx->stream->seek && (!mpctx->demuxer || mpctx->demuxer->seekable)); - if (mpctx->demuxer) { - if (mpctx->demuxer->num_chapters == 0) - stream_control(mpctx->demuxer->stream, STREAM_CTRL_GET_NUM_CHAPTERS, &mpctx->demuxer->num_chapters); - mp_msg(MSGT_IDENTIFY,MSGL_INFO,"ID_CHAPTERS=%d\n", mpctx->demuxer->num_chapters); - } + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_START_TIME=unknown\n"); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_LENGTH=%.2f\n", demuxer_get_time_length(mpctx->demuxer)); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SEEKABLE=%d\n", + mpctx->stream->seek && (!mpctx->demuxer || mpctx->demuxer->seekable)); + if (mpctx->demuxer) { + if (mpctx->demuxer->num_chapters == 0) + stream_control(mpctx->demuxer->stream, STREAM_CTRL_GET_NUM_CHAPTERS, &mpctx->demuxer->num_chapters); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CHAPTERS=%d\n", mpctx->demuxer->num_chapters); + } } #ifdef CONFIG_DVDNAV -static void mp_dvdnav_context_free(MPContext *ctx){ - if (ctx->nav_smpi) free_mp_image(ctx->nav_smpi); +static void mp_dvdnav_context_free(MPContext *ctx) +{ + if (ctx->nav_smpi) + free_mp_image(ctx->nav_smpi); ctx->nav_smpi = NULL; free(ctx->nav_buffer); - ctx->nav_buffer = NULL; - ctx->nav_start = NULL; + ctx->nav_buffer = NULL; + ctx->nav_start = NULL; ctx->nav_in_size = 0; } + #endif -void uninit_player(unsigned int mask){ - mask &= initialized_flags; +void uninit_player(unsigned int mask) +{ + mask &= initialized_flags; - mp_msg(MSGT_CPLAYER,MSGL_DBG2,"\n*** uninit(0x%X)\n",mask); + mp_msg(MSGT_CPLAYER, MSGL_DBG2, "\n*** uninit(0x%X)\n", mask); - if(mask&INITIALIZED_ACODEC){ - initialized_flags&=~INITIALIZED_ACODEC; - current_module="uninit_acodec"; - if(mpctx->sh_audio) uninit_audio(mpctx->sh_audio); + if (mask & INITIALIZED_ACODEC) { + initialized_flags &= ~INITIALIZED_ACODEC; + current_module = "uninit_acodec"; + if (mpctx->sh_audio) + uninit_audio(mpctx->sh_audio); #ifdef CONFIG_GUI - if (use_gui) guiGetEvent(guiSetAfilter, (char *)NULL); + if (use_gui) + guiGetEvent(guiSetAfilter, (char *)NULL); #endif - mpctx->sh_audio=NULL; - mpctx->mixer.afilter = NULL; - } + mpctx->sh_audio = NULL; + mpctx->mixer.afilter = NULL; + } - if(mask&INITIALIZED_VCODEC){ - initialized_flags&=~INITIALIZED_VCODEC; - current_module="uninit_vcodec"; - if(mpctx->sh_video) uninit_video(mpctx->sh_video); - mpctx->sh_video=NULL; + if (mask & INITIALIZED_VCODEC) { + initialized_flags &= ~INITIALIZED_VCODEC; + current_module = "uninit_vcodec"; + if (mpctx->sh_video) + uninit_video(mpctx->sh_video); + mpctx->sh_video = NULL; #ifdef CONFIG_MENU - vf_menu=NULL; -#endif - } - - if(mask&INITIALIZED_DEMUXER){ - initialized_flags&=~INITIALIZED_DEMUXER; - current_module="free_demuxer"; - if(mpctx->demuxer){ - mpctx->stream=mpctx->demuxer->stream; - free_demuxer(mpctx->demuxer); - } - mpctx->demuxer=NULL; - } - - // kill the cache process: - if(mask&INITIALIZED_STREAM){ - initialized_flags&=~INITIALIZED_STREAM; - current_module="uninit_stream"; - if(mpctx->stream) free_stream(mpctx->stream); - mpctx->stream=NULL; - } - - if(mask&INITIALIZED_VO){ - initialized_flags&=~INITIALIZED_VO; - current_module="uninit_vo"; - mpctx->video_out->uninit(); - mpctx->video_out=NULL; + vf_menu = NULL; +#endif + } + + if (mask & INITIALIZED_DEMUXER) { + initialized_flags &= ~INITIALIZED_DEMUXER; + current_module = "free_demuxer"; + if (mpctx->demuxer) { + mpctx->stream = mpctx->demuxer->stream; + free_demuxer(mpctx->demuxer); + } + mpctx->demuxer = NULL; + } + + // kill the cache process: + if (mask & INITIALIZED_STREAM) { + initialized_flags &= ~INITIALIZED_STREAM; + current_module = "uninit_stream"; + if (mpctx->stream) + free_stream(mpctx->stream); + mpctx->stream = NULL; + } + + if (mask & INITIALIZED_VO) { + initialized_flags &= ~INITIALIZED_VO; + current_module = "uninit_vo"; + mpctx->video_out->uninit(); + mpctx->video_out = NULL; #ifdef CONFIG_DVDNAV - mp_dvdnav_context_free(mpctx); + mp_dvdnav_context_free(mpctx); #endif - if (vo_spudec){ - current_module="uninit_spudec"; - spudec_free(vo_spudec); - vo_spudec=NULL; + if (vo_spudec) { + current_module = "uninit_spudec"; + spudec_free(vo_spudec); + vo_spudec = NULL; + } } - } - // Must be after libvo uninit, as few vo drivers (svgalib) have tty code. - if(mask&INITIALIZED_GETCH2){ - initialized_flags&=~INITIALIZED_GETCH2; - current_module="uninit_getch2"; - mp_msg(MSGT_CPLAYER,MSGL_DBG2,"\n[[[uninit getch2]]]\n"); - // restore terminal: - getch2_disable(); - } - - if(mask&INITIALIZED_VOBSUB){ - initialized_flags&=~INITIALIZED_VOBSUB; - current_module="uninit_vobsub"; - if(vo_vobsub) vobsub_close(vo_vobsub); - vo_vobsub=NULL; - } - - if(mask&INITIALIZED_AO){ - initialized_flags&=~INITIALIZED_AO; - current_module="uninit_ao"; - if (mpctx->edl_muted) mixer_mute(&mpctx->mixer); - if (mpctx->audio_out) mpctx->audio_out->uninit(mpctx->eof?0:1); - mpctx->audio_out=NULL; - } + // Must be after libvo uninit, as few vo drivers (svgalib) have tty code. + if (mask & INITIALIZED_GETCH2) { + initialized_flags &= ~INITIALIZED_GETCH2; + current_module = "uninit_getch2"; + mp_msg(MSGT_CPLAYER, MSGL_DBG2, "\n[[[uninit getch2]]]\n"); + // restore terminal: + getch2_disable(); + } + + if (mask & INITIALIZED_VOBSUB) { + initialized_flags &= ~INITIALIZED_VOBSUB; + current_module = "uninit_vobsub"; + if (vo_vobsub) + vobsub_close(vo_vobsub); + vo_vobsub = NULL; + } + + if (mask & INITIALIZED_AO) { + initialized_flags &= ~INITIALIZED_AO; + current_module = "uninit_ao"; + if (mpctx->edl_muted) + mixer_mute(&mpctx->mixer); + if (mpctx->audio_out) + mpctx->audio_out->uninit(mpctx->eof ? 0 : 1); + mpctx->audio_out = NULL; + } #ifdef CONFIG_GUI - if(mask&INITIALIZED_GUI){ - initialized_flags&=~INITIALIZED_GUI; - current_module="uninit_gui"; - guiDone(); - } + if (mask & INITIALIZED_GUI) { + initialized_flags &= ~INITIALIZED_GUI; + current_module = "uninit_gui"; + guiDone(); + } #endif - if(mask&INITIALIZED_INPUT){ - initialized_flags&=~INITIALIZED_INPUT; - current_module="uninit_input"; - mp_input_uninit(); + if (mask & INITIALIZED_INPUT) { + initialized_flags &= ~INITIALIZED_INPUT; + current_module = "uninit_input"; + mp_input_uninit(); #ifdef CONFIG_MENU - if (use_menu) - menu_uninit(); + if (use_menu) + menu_uninit(); #endif - } + } - current_module=NULL; + current_module = NULL; } void exit_player_with_rc(enum exit_reason how, int rc) { - #ifdef CONFIG_NETWORKING - if (udp_master) - send_udp(udp_ip, udp_port, "bye"); + if (udp_master) + send_udp(udp_ip, udp_port, "bye"); #endif /* CONFIG_NETWORKING */ - if (mpctx->user_muted && !mpctx->edl_muted) mixer_mute(&mpctx->mixer); - uninit_player(INITIALIZED_ALL); + if (mpctx->user_muted && !mpctx->edl_muted) + mixer_mute(&mpctx->mixer); + uninit_player(INITIALIZED_ALL); #if defined(__MINGW32__) || defined(__CYGWIN__) - timeEndPeriod(1); + timeEndPeriod(1); #endif #ifdef CONFIG_X11 #ifdef CONFIG_GUI - if ( !use_gui ) + if (!use_gui) #endif - vo_uninit(); // Close the X11 connection (if any is open). + vo_uninit(); // Close the X11 connection (if any is open). #endif #ifdef CONFIG_FREETYPE - current_module="uninit_font"; - if (sub_font && sub_font != vo_font) free_font_desc(sub_font); - sub_font = NULL; - if (vo_font) free_font_desc(vo_font); - vo_font = NULL; - done_freetype(); + current_module = "uninit_font"; + if (sub_font && sub_font != vo_font) + free_font_desc(sub_font); + sub_font = NULL; + if (vo_font) + free_font_desc(vo_font); + vo_font = NULL; + done_freetype(); #endif - free_osd_list(); + free_osd_list(); #ifdef CONFIG_ASS - ass_library_done(ass_library); - ass_library = NULL; + ass_library_done(ass_library); + ass_library = NULL; #endif - current_module="exit_player"; + current_module = "exit_player"; // free mplayer config - if(mconfig) - m_config_free(mconfig); - mconfig = NULL; - - if(mpctx->playtree_iter) - play_tree_iter_free(mpctx->playtree_iter); - mpctx->playtree_iter = NULL; - if(mpctx->playtree) - play_tree_free(mpctx->playtree, 1); - mpctx->playtree = NULL; - - - free(edl_records); // free mem allocated for EDL - edl_records = NULL; - switch(how) { - case EXIT_QUIT: - mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_ExitingHow,MSGTR_Exit_quit); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_EXIT=QUIT\n"); - break; - case EXIT_EOF: - mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_ExitingHow,MSGTR_Exit_eof); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_EXIT=EOF\n"); - break; - case EXIT_ERROR: - mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_ExitingHow,MSGTR_Exit_error); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_EXIT=ERROR\n"); - break; - default: - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_EXIT=NONE\n"); - } - mp_msg(MSGT_CPLAYER,MSGL_DBG2,"max framesize was %d bytes\n",max_framesize); - - exit(rc); + if (mconfig) + m_config_free(mconfig); + mconfig = NULL; + + if (mpctx->playtree_iter) + play_tree_iter_free(mpctx->playtree_iter); + mpctx->playtree_iter = NULL; + if (mpctx->playtree) + play_tree_free(mpctx->playtree, 1); + mpctx->playtree = NULL; + + free(edl_records); // free mem allocated for EDL + edl_records = NULL; + switch (how) { + case EXIT_QUIT: + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_ExitingHow, MSGTR_Exit_quit); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_EXIT=QUIT\n"); + break; + case EXIT_EOF: + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_ExitingHow, MSGTR_Exit_eof); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_EXIT=EOF\n"); + break; + case EXIT_ERROR: + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_ExitingHow, MSGTR_Exit_error); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_EXIT=ERROR\n"); + break; + default: + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_EXIT=NONE\n"); + } + mp_msg(MSGT_CPLAYER, MSGL_DBG2, "max framesize was %d bytes\n", max_framesize); + + exit(rc); } void exit_player(enum exit_reason how) { - exit_player_with_rc(how, 1); + exit_player_with_rc(how, 1); } #ifndef __MINGW32__ -static void child_sighandler(int x){ - pid_t pid; - while((pid=waitpid(-1,NULL,WNOHANG)) > 0); +static void child_sighandler(int x) +{ + pid_t pid; + while ((pid = waitpid(-1, NULL, WNOHANG)) > 0) ; } + #endif -static void exit_sighandler(int x){ - static int sig_count; +static void exit_sighandler(int x) +{ + static int sig_count; #ifdef CONFIG_CRASH_DEBUG - if (!crash_debug || x != SIGTRAP) + if (!crash_debug || x != SIGTRAP) #endif - ++sig_count; - if(initialized_flags==0 && sig_count>1) exit(1); - if(sig_count==5) - { - /* We're crashing bad and can't uninit cleanly :( - * by popular request, we make one last (dirty) - * effort to restore the user's - * terminal. */ - getch2_disable(); - exit(1); - } - if(sig_count==6) exit(1); - if(sig_count>6){ - // can't stop :( + ++sig_count; + if (initialized_flags == 0 && sig_count > 1) + exit(1); + if (sig_count == 5) { + /* We're crashing bad and can't uninit cleanly :( + * by popular request, we make one last (dirty) + * effort to restore the user's + * terminal. */ + getch2_disable(); + exit(1); + } + if (sig_count == 6) + exit(1); + if (sig_count > 6) { + // can't stop :( #ifndef __MINGW32__ - kill(getpid(),SIGKILL); -#endif - } - mp_msg(MSGT_CPLAYER,MSGL_FATAL,"\n" MSGTR_IntBySignal,x, - current_module?current_module:"unknown" - ); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SIGNAL=%d\n", x); - if(sig_count<=1) - switch(x){ - case SIGINT: - case SIGPIPE: - case SIGQUIT: - case SIGTERM: - case SIGKILL: - async_quit_request = 1; - return; // killed from keyboard (^C) or killed [-9] - case SIGILL: + kill(getpid(), SIGKILL); +#endif + } + mp_msg(MSGT_CPLAYER, MSGL_FATAL, "\n" MSGTR_IntBySignal, x, + current_module ? current_module : "unknown" + ); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SIGNAL=%d\n", x); + if (sig_count <= 1) + switch (x) { + case SIGINT: + case SIGPIPE: + case SIGQUIT: + case SIGTERM: + case SIGKILL: + async_quit_request = 1; + return; // killed from keyboard (^C) or killed [-9] + case SIGILL: #if CONFIG_RUNTIME_CPUDETECT - mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_Exit_SIGILL_RTCpuSel); + mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_Exit_SIGILL_RTCpuSel); #else - mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_Exit_SIGILL); + mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_Exit_SIGILL); #endif - case SIGFPE: - case SIGSEGV: - mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_Exit_SIGSEGV_SIGFPE); - default: - mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_Exit_SIGCRASH); + case SIGFPE: + case SIGSEGV: + mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_Exit_SIGSEGV_SIGFPE); + default: + mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_Exit_SIGCRASH); #ifdef CONFIG_CRASH_DEBUG - if (crash_debug) { - int gdb_pid; - mp_msg(MSGT_CPLAYER, MSGL_INFO, "Forking...\n"); - gdb_pid = fork(); - mp_msg(MSGT_CPLAYER, MSGL_INFO, "Forked...\n"); - if (gdb_pid == 0) { // We are the child - char spid[20]; - snprintf(spid, sizeof(spid), "%i", getppid()); - getch2_disable(); // allow terminal to work properly with gdb - if (execlp("gdb", "gdb", prog_path, spid, "-ex", "bt", NULL) == -1) - mp_msg(MSGT_CPLAYER, MSGL_ERR, "Couldn't start gdb\n"); - } else if (gdb_pid < 0) - mp_msg(MSGT_CPLAYER, MSGL_ERR, "Couldn't fork\n"); - else { - waitpid(gdb_pid, NULL, 0); - } - if (x == SIGTRAP) return; - } + if (crash_debug) { + int gdb_pid; + mp_msg(MSGT_CPLAYER, MSGL_INFO, "Forking...\n"); + gdb_pid = fork(); + mp_msg(MSGT_CPLAYER, MSGL_INFO, "Forked...\n"); + if (gdb_pid == 0) { // We are the child + char spid[20]; + snprintf(spid, sizeof(spid), "%i", getppid()); + getch2_disable(); // allow terminal to work properly with gdb + if (execlp("gdb", "gdb", prog_path, spid, "-ex", "bt", NULL) == -1) + mp_msg(MSGT_CPLAYER, MSGL_ERR, "Couldn't start gdb\n"); + } else if (gdb_pid < 0) + mp_msg(MSGT_CPLAYER, MSGL_ERR, "Couldn't fork\n"); + else { + waitpid(gdb_pid, NULL, 0); + } + if (x == SIGTRAP) + return; + } #endif - } - getch2_disable(); - exit(1); + } + getch2_disable(); + exit(1); } -static void parse_cfgfiles( m_config_t* conf ) +static void parse_cfgfiles(m_config_t *conf) { -char *conffile; -int conffile_fd; -if (!disable_system_conf && - m_config_parse_config_file(conf, MPLAYER_CONFDIR "/mplayer.conf") < 0) - exit_player(EXIT_NONE); -if ((conffile = get_path("")) == NULL) { - mp_msg(MSGT_CPLAYER,MSGL_WARN,MSGTR_NoHomeDir); -} else { + char *conffile; + int conffile_fd; + if (!disable_system_conf && + m_config_parse_config_file(conf, MPLAYER_CONFDIR "/mplayer.conf") < 0) + exit_player(EXIT_NONE); + if ((conffile = get_path("")) == NULL) { + mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_NoHomeDir); + } else { #ifdef __MINGW32__ - mkdir(conffile); + mkdir(conffile); #else - mkdir(conffile, 0777); + mkdir(conffile, 0777); #endif - free(conffile); - if ((conffile = get_path("config")) == NULL) { - mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_GetpathProblem); - } else { - if ((conffile_fd = open(conffile, O_CREAT | O_EXCL | O_WRONLY, 0666)) != -1) { - mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_CreatingCfgFile, conffile); - write(conffile_fd, default_config, strlen(default_config)); - close(conffile_fd); + free(conffile); + if ((conffile = get_path("config")) == NULL) { + mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_GetpathProblem); + } else { + if ((conffile_fd = open(conffile, O_CREAT | O_EXCL | O_WRONLY, 0666)) != -1) { + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_CreatingCfgFile, conffile); + write(conffile_fd, default_config, strlen(default_config)); + close(conffile_fd); + } + if (!disable_user_conf && + m_config_parse_config_file(conf, conffile) < 0) + exit_player(EXIT_NONE); + free(conffile); + } } - if (!disable_user_conf && - m_config_parse_config_file(conf, conffile) < 0) - exit_player(EXIT_NONE); - free(conffile); - } -} } #define PROFILE_CFG_PROTOCOL "protocol." -static void load_per_protocol_config (m_config_t* conf, const char *const file) +static void load_per_protocol_config(m_config_t *conf, const char *const file) { char *str; - char protocol[strlen (PROFILE_CFG_PROTOCOL) + strlen (file) + 1]; + char protocol[strlen(PROFILE_CFG_PROTOCOL) + strlen(file) + 1]; m_profile_t *p; /* does filename actually uses a protocol ? */ - str = strstr (file, "://"); + str = strstr(file, "://"); if (!str) return; - sprintf (protocol, "%s%s", PROFILE_CFG_PROTOCOL, file); - protocol[strlen (PROFILE_CFG_PROTOCOL)+strlen(file)-strlen(str)] = '\0'; - p = m_config_get_profile (conf, protocol); - if (p) - { - mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_LoadingProtocolProfile, protocol); - m_config_set_profile(conf,p); + sprintf(protocol, "%s%s", PROFILE_CFG_PROTOCOL, file); + protocol[strlen(PROFILE_CFG_PROTOCOL) + strlen(file) - strlen(str)] = '\0'; + p = m_config_get_profile(conf, protocol); + if (p) { + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_LoadingProtocolProfile, protocol); + m_config_set_profile(conf, p); } } #define PROFILE_CFG_EXTENSION "extension." -static void load_per_extension_config (m_config_t* conf, const char *const file) +static void load_per_extension_config(m_config_t *conf, const char *const file) { char *str; - char extension[strlen (PROFILE_CFG_EXTENSION) + 8]; + char extension[strlen(PROFILE_CFG_EXTENSION) + 8]; m_profile_t *p; /* does filename actually have an extension ? */ - str = strrchr (filename, '.'); + str = strrchr(filename, '.'); if (!str) return; - sprintf (extension, PROFILE_CFG_EXTENSION); - strncat (extension, ++str, 7); - p = m_config_get_profile (conf, extension); - if (p) - { - mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_LoadingExtensionProfile, extension); - m_config_set_profile(conf,p); + sprintf(extension, PROFILE_CFG_EXTENSION); + strncat(extension, ++str, 7); + p = m_config_get_profile(conf, extension); + if (p) { + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_LoadingExtensionProfile, extension); + m_config_set_profile(conf, p); } } #define PROFILE_CFG_VO "vo." #define PROFILE_CFG_AO "ao." -static void load_per_output_config (m_config_t* conf, char *cfg, char *out) +static void load_per_output_config(m_config_t *conf, char *cfg, char *out) { - char profile[strlen (cfg) + strlen (out) + 1]; + char profile[strlen(cfg) + strlen(out) + 1]; m_profile_t *p; - sprintf (profile, "%s%s", cfg, out); - p = m_config_get_profile (conf, profile); - if (p) - { - mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_LoadingExtensionProfile, profile); - m_config_set_profile(conf,p); + sprintf(profile, "%s%s", cfg, out); + p = m_config_get_profile(conf, profile); + if (p) { + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_LoadingExtensionProfile, profile); + m_config_set_profile(conf, p); } } @@ -934,12 +950,12 @@ static int try_load_config(m_config_t *conf, const char *file) struct stat st; if (stat(file, &st)) return 0; - mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_LoadingConfig, file); - m_config_parse_config_file (conf, file); + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_LoadingConfig, file); + m_config_parse_config_file(conf, file); return 1; } -static void load_per_file_config (m_config_t* conf, const char *const file) +static void load_per_file_config(m_config_t *conf, const char *const file) { char *confpath; char cfg[PATH_MAX]; @@ -949,7 +965,7 @@ static void load_per_file_config (m_config_t* conf, const char *const file) mp_msg(MSGT_CPLAYER, MSGL_WARN, "Filename is too long, can not load file or directory specific config files\n"); return; } - sprintf (cfg, "%s.conf", file); + sprintf(cfg, "%s.conf", file); name = mp_basename(cfg); if (use_filedir_conf) { @@ -962,11 +978,10 @@ static void load_per_file_config (m_config_t* conf, const char *const file) return; } - if ((confpath = get_path (name)) != NULL) - { - try_load_config(conf, confpath); + if ((confpath = get_path(name)) != NULL) { + try_load_config(conf, confpath); - free (confpath); + free(confpath); } } @@ -974,63 +989,64 @@ static void load_per_file_config (m_config_t* conf, const char *const file) * cache filling) if the operation fails we use this function to check * if it was interrupted by the user. * The function returns a new value for eof. */ -static int libmpdemux_was_interrupted(int eof) { - mp_cmd_t* cmd; - if((cmd = mp_input_get_cmd(0,0,0)) != NULL) { - switch(cmd->id) { - case MP_CMD_QUIT: - exit_player_with_rc(EXIT_QUIT, (cmd->nargs > 0)? cmd->args[0].v.i : 0); - case MP_CMD_PLAY_TREE_STEP: - eof = (cmd->args[0].v.i > 0) ? PT_NEXT_ENTRY : PT_PREV_ENTRY; - mpctx->play_tree_step = (cmd->args[0].v.i == 0) ? 1 : cmd->args[0].v.i; - break; - case MP_CMD_PLAY_TREE_UP_STEP: - eof = (cmd->args[0].v.i > 0) ? PT_UP_NEXT : PT_UP_PREV; - break; - case MP_CMD_PLAY_ALT_SRC_STEP: - eof = (cmd->args[0].v.i > 0) ? PT_NEXT_SRC : PT_PREV_SRC; - break; - } - mp_cmd_free(cmd); - } - return eof; -} - -static int playtree_add_playlist(play_tree_t* entry) -{ - play_tree_add_bpf(entry,filename); +static int libmpdemux_was_interrupted(int eof) +{ + mp_cmd_t *cmd; + if ((cmd = mp_input_get_cmd(0, 0, 0)) != NULL) { + switch (cmd->id) { + case MP_CMD_QUIT: + exit_player_with_rc(EXIT_QUIT, (cmd->nargs > 0) ? cmd->args[0].v.i : 0); + case MP_CMD_PLAY_TREE_STEP: + eof = (cmd->args[0].v.i > 0) ? PT_NEXT_ENTRY : PT_PREV_ENTRY; + mpctx->play_tree_step = (cmd->args[0].v.i == 0) ? 1 : cmd->args[0].v.i; + break; + case MP_CMD_PLAY_TREE_UP_STEP: + eof = (cmd->args[0].v.i > 0) ? PT_UP_NEXT : PT_UP_PREV; + break; + case MP_CMD_PLAY_ALT_SRC_STEP: + eof = (cmd->args[0].v.i > 0) ? PT_NEXT_SRC : PT_PREV_SRC; + break; + } + mp_cmd_free(cmd); + } + return eof; +} + +static int playtree_add_playlist(play_tree_t *entry) +{ + play_tree_add_bpf(entry, filename); #ifdef CONFIG_GUI - if (use_gui) { - if (entry) { - import_playtree_playlist_into_gui(entry, mconfig); - play_tree_free_list(entry,1); - } - } else + if (use_gui) { + if (entry) { + import_playtree_playlist_into_gui(entry, mconfig); + play_tree_free_list(entry, 1); + } + } else #endif - { - if(!entry) { - entry = mpctx->playtree_iter->tree; - if(play_tree_iter_step(mpctx->playtree_iter,1,0) != PLAY_TREE_ITER_ENTRY) { - return PT_NEXT_ENTRY; - } - if(mpctx->playtree_iter->tree == entry ) { // Loop with a single file - if(play_tree_iter_up_step(mpctx->playtree_iter,1,0) != PLAY_TREE_ITER_ENTRY) { - return PT_NEXT_ENTRY; - } + { + if (!entry) { + entry = mpctx->playtree_iter->tree; + if (play_tree_iter_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) { + return PT_NEXT_ENTRY; + } + if (mpctx->playtree_iter->tree == entry) { // Loop with a single file + if (play_tree_iter_up_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) { + return PT_NEXT_ENTRY; + } + } + play_tree_remove(entry, 1, 1); + return PT_NEXT_SRC; + } + play_tree_insert_entry(mpctx->playtree_iter->tree, entry); + play_tree_set_params_from(entry, mpctx->playtree_iter->tree); + entry = mpctx->playtree_iter->tree; + if (play_tree_iter_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) { + return PT_NEXT_ENTRY; + } + play_tree_remove(entry, 1, 1); } - play_tree_remove(entry,1,1); return PT_NEXT_SRC; - } - play_tree_insert_entry(mpctx->playtree_iter->tree,entry); - play_tree_set_params_from(entry,mpctx->playtree_iter->tree); - entry = mpctx->playtree_iter->tree; - if(play_tree_iter_step(mpctx->playtree_iter,1,0) != PLAY_TREE_ITER_ENTRY) { - return PT_NEXT_ENTRY; - } - play_tree_remove(entry,1,1); - } - return PT_NEXT_SRC; } void add_subtitles(char *filename, float fps, int noerr) @@ -1041,7 +1057,7 @@ void add_subtitles(char *filename, float fps, int noerr) #endif if (filename == NULL || mpctx->set_of_sub_size >= MAX_SUBTITLE_FILES) { - return; + return; } subd = sub_read_file(filename, fps); @@ -1057,27 +1073,29 @@ void add_subtitles(char *filename, float fps, int noerr) if (!asst && !subd) #else - if(!subd) + if (!subd) #endif mp_msg(MSGT_CPLAYER, noerr ? MSGL_WARN : MSGL_ERR, MSGTR_CantLoadSub, - filename_recode(filename)); + filename_recode(filename)); #ifdef CONFIG_ASS - if (!asst && !subd) return; + if (!asst && !subd) + return; mpctx->set_of_ass_tracks[mpctx->set_of_sub_size] = asst; #else - if (!subd) return; + if (!subd) + return; #endif mpctx->set_of_subtitles[mpctx->set_of_sub_size] = subd; mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_FILE_SUB_ID=%d\n", mpctx->set_of_sub_size); mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_FILE_SUB_FILENAME=%s\n", - filename_recode(filename)); + filename_recode(filename)); ++mpctx->set_of_sub_size; mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_AddedSubtitleFile, mpctx->set_of_sub_size, - filename_recode(filename)); + filename_recode(filename)); } -static int add_vob_subtitle(const char *vobname, const char * const ifo, int force, void *spu) +static int add_vob_subtitle(const char *vobname, const char *const ifo, int force, void *spu) { if (!vobname) return 0; @@ -1095,68 +1113,68 @@ static int add_vob_subtitle(const char *vobname, const char * const ifo, int for // FIXME: if/when the GUI calls this, global sub numbering gets (potentially) broken. void update_set_of_subtitles(void) - // subdata was changed, set_of_sub... have to be updated. { - sub_data ** const set_of_subtitles = mpctx->set_of_subtitles; + // subdata was changed, set_of_sub... have to be updated. + sub_data **const set_of_subtitles = mpctx->set_of_subtitles; int i; if (mpctx->set_of_sub_size > 0 && subdata == NULL) { // *subdata was deleted for (i = mpctx->set_of_sub_pos + 1; i < mpctx->set_of_sub_size; ++i) - set_of_subtitles[i-1] = set_of_subtitles[i]; - set_of_subtitles[mpctx->set_of_sub_size-1] = NULL; + set_of_subtitles[i - 1] = set_of_subtitles[i]; + set_of_subtitles[mpctx->set_of_sub_size - 1] = NULL; --mpctx->set_of_sub_size; - if (mpctx->set_of_sub_size > 0) subdata = set_of_subtitles[mpctx->set_of_sub_pos=0]; - } - else if (mpctx->set_of_sub_size > 0 && subdata != NULL) { // *subdata was changed + if (mpctx->set_of_sub_size > 0) + subdata = set_of_subtitles[mpctx->set_of_sub_pos = 0]; + } else if (mpctx->set_of_sub_size > 0 && subdata != NULL) { // *subdata was changed set_of_subtitles[mpctx->set_of_sub_pos] = subdata; - } - else if (mpctx->set_of_sub_size <= 0 && subdata != NULL) { // *subdata was added - set_of_subtitles[mpctx->set_of_sub_pos=mpctx->set_of_sub_size] = subdata; + } else if (mpctx->set_of_sub_size <= 0 && subdata != NULL) { // *subdata was added + set_of_subtitles[mpctx->set_of_sub_pos = mpctx->set_of_sub_size] = subdata; ++mpctx->set_of_sub_size; } } -void init_vo_spudec(void) { - spudec_free(vo_spudec); - vo_spudec = NULL; +void init_vo_spudec(void) +{ + spudec_free(vo_spudec); + vo_spudec = NULL; - // we currently can't work without video stream - if (!mpctx->sh_video) - return; + // we currently can't work without video stream + if (!mpctx->sh_video) + return; - if (spudec_ifo) { - unsigned int palette[16], width, height; - current_module="spudec_init_vobsub"; - if (vobsub_parse_ifo(NULL,spudec_ifo, palette, &width, &height, 1, -1, NULL) >= 0) - vo_spudec=spudec_new_scaled(palette, width, height, NULL, 0); - } + if (spudec_ifo) { + unsigned int palette[16], width, height; + current_module = "spudec_init_vobsub"; + if (vobsub_parse_ifo(NULL, spudec_ifo, palette, &width, &height, 1, -1, NULL) >= 0) + vo_spudec = spudec_new_scaled(palette, width, height, NULL, 0); + } #ifdef CONFIG_DVDREAD - if (vo_spudec==NULL && mpctx->stream->type==STREAMTYPE_DVD) { - current_module="spudec_init_dvdread"; - vo_spudec=spudec_new_scaled(((dvd_priv_t *)(mpctx->stream->priv))->cur_pgc->palette, - mpctx->sh_video->disp_w, mpctx->sh_video->disp_h, - NULL, 0); - } + if (vo_spudec == NULL && mpctx->stream->type == STREAMTYPE_DVD) { + current_module = "spudec_init_dvdread"; + vo_spudec = spudec_new_scaled(((dvd_priv_t *)(mpctx->stream->priv))->cur_pgc->palette, + mpctx->sh_video->disp_w, mpctx->sh_video->disp_h, + NULL, 0); + } #endif #ifdef CONFIG_DVDNAV - if (vo_spudec==NULL && mpctx->stream->type==STREAMTYPE_DVDNAV) { - unsigned int *palette = mp_dvdnav_get_spu_clut(mpctx->stream); - current_module="spudec_init_dvdnav"; - vo_spudec=spudec_new_scaled(palette, mpctx->sh_video->disp_w, mpctx->sh_video->disp_h, NULL, 0); - } + if (vo_spudec == NULL && mpctx->stream->type == STREAMTYPE_DVDNAV) { + unsigned int *palette = mp_dvdnav_get_spu_clut(mpctx->stream); + current_module = "spudec_init_dvdnav"; + vo_spudec = spudec_new_scaled(palette, mpctx->sh_video->disp_w, mpctx->sh_video->disp_h, NULL, 0); + } #endif - if (vo_spudec==NULL) { - sh_sub_t *sh = mpctx->d_sub->sh; - current_module="spudec_init_normal"; - vo_spudec=spudec_new_scaled(NULL, mpctx->sh_video->disp_w, mpctx->sh_video->disp_h, sh->extradata, sh->extradata_len); - spudec_set_font_factor(vo_spudec,font_factor); - } + if (vo_spudec == NULL) { + sh_sub_t *sh = mpctx->d_sub->sh; + current_module = "spudec_init_normal"; + vo_spudec = spudec_new_scaled(NULL, mpctx->sh_video->disp_w, mpctx->sh_video->disp_h, sh->extradata, sh->extradata_len); + spudec_set_font_factor(vo_spudec, font_factor); + } - if (vo_spudec!=NULL) { - mp_property_do("sub_forced_only", M_PROPERTY_SET, &forced_subs_only, mpctx); - } + if (vo_spudec != NULL) { + mp_property_do("sub_forced_only", M_PROPERTY_SET, &forced_subs_only, mpctx); + } } /** @@ -1168,14 +1186,14 @@ void init_vo_spudec(void) { */ static void saddf(char *buf, unsigned *pos, int len, const char *format, ...) { - va_list va; - va_start(va, format); - *pos += vsnprintf(&buf[*pos], len - *pos, format, va); - va_end(va); - if (*pos >= len ) { - buf[len] = 0; - *pos = len; - } + va_list va; + va_start(va, format); + *pos += vsnprintf(&buf[*pos], len - *pos, format, va); + va_end(va); + if (*pos >= len) { + buf[len] = 0; + *pos = len; + } } /** @@ -1185,21 +1203,22 @@ static void saddf(char *buf, unsigned *pos, int len, const char *format, ...) * \param len maximum number of characters in buf, not including terminating 0 * \param time time value to convert/append */ -static void sadd_hhmmssf(char *buf, unsigned *pos, int len, float time) { - int64_t tenths = 10 * time; - int f1 = tenths % 10; - int ss = (tenths / 10) % 60; - int mm = (tenths / 600) % 60; - int hh = tenths / 36000; - if (time <= 0) { - saddf(buf, pos, len, "unknown"); - return; - } - if (hh > 0) - saddf(buf, pos, len, "%2d:", hh); - if (hh > 0 || mm > 0) - saddf(buf, pos, len, "%02d:", mm); - saddf(buf, pos, len, "%02d.%1d", ss, f1); +static void sadd_hhmmssf(char *buf, unsigned *pos, int len, float time) +{ + int64_t tenths = 10 * time; + int f1 = tenths % 10; + int ss = (tenths / 10) % 60; + int mm = (tenths / 600) % 60; + int hh = tenths / 36000; + if (time <= 0) { + saddf(buf, pos, len, "unknown"); + return; + } + if (hh > 0) + saddf(buf, pos, len, "%2d:", hh); + if (hh > 0 || mm > 0) + saddf(buf, pos, len, "%02d:", mm); + saddf(buf, pos, len, "%02d.%1d", ss, f1); } /** @@ -1210,90 +1229,90 @@ static void sadd_hhmmssf(char *buf, unsigned *pos, int len, float time) { */ static void print_status(float a_pos, float a_v, float corr) { - sh_video_t * const sh_video = mpctx->sh_video; - int width; - char *line; - unsigned pos = 0; - get_screen_size(); - if (screen_width > 0) - width = screen_width; - else - width = 80; -#if defined(__MINGW32__) || defined(__CYGWIN__) || defined(__OS2__) - /* Windows command line is broken (MinGW's rxvt works, but we - * should not depend on that). */ - width--; -#endif - line = malloc(width + 1); // one additional char for the terminating null - - // Audio time - if (mpctx->sh_audio) { - saddf(line, &pos, width, "A:%6.1f ", a_pos); - if (!sh_video) { - float len = demuxer_get_time_length(mpctx->demuxer); - saddf(line, &pos, width, "("); - sadd_hhmmssf(line, &pos, width, a_pos); - saddf(line, &pos, width, ") of %.1f (", len); - sadd_hhmmssf(line, &pos, width, len); - saddf(line, &pos, width, ") "); - } - } - - // Video time - if (sh_video) - saddf(line, &pos, width, "V:%6.1f ", sh_video->pts); - - // A-V sync - if (mpctx->sh_audio && sh_video) - saddf(line, &pos, width, "A-V:%7.3f ct:%7.3f ", a_v, corr); - - // Video stats - if (sh_video) - saddf(line, &pos, width, "%3d/%3d ", - (int)sh_video->num_frames, - (int)sh_video->num_frames_decoded); - - // CPU usage - if (sh_video) { - if (sh_video->timer > 0.5) - saddf(line, &pos, width, "%2d%% %2d%% %4.1f%% ", - (int)(100.0*video_time_usage*playback_speed/(double)sh_video->timer), - (int)(100.0*vout_time_usage*playback_speed/(double)sh_video->timer), - (100.0*audio_time_usage*playback_speed/(double)sh_video->timer)); - else - saddf(line, &pos, width, "??%% ??%% ??,?%% "); - } else if (mpctx->sh_audio) { - if (mpctx->delay > 0.5) - saddf(line, &pos, width, "%4.1f%% ", - 100.0*audio_time_usage/(double)mpctx->delay); + sh_video_t *const sh_video = mpctx->sh_video; + int width; + char *line; + unsigned pos = 0; + get_screen_size(); + if (screen_width > 0) + width = screen_width; else - saddf(line, &pos, width, "??,?%% "); - } + width = 80; +#if defined(__MINGW32__) || defined(__CYGWIN__) || defined(__OS2__) + /* Windows command line is broken (MinGW's rxvt works, but we + * should not depend on that). */ + width--; +#endif + line = malloc(width + 1); // one additional char for the terminating null + + // Audio time + if (mpctx->sh_audio) { + saddf(line, &pos, width, "A:%6.1f ", a_pos); + if (!sh_video) { + float len = demuxer_get_time_length(mpctx->demuxer); + saddf(line, &pos, width, "("); + sadd_hhmmssf(line, &pos, width, a_pos); + saddf(line, &pos, width, ") of %.1f (", len); + sadd_hhmmssf(line, &pos, width, len); + saddf(line, &pos, width, ") "); + } + } + + // Video time + if (sh_video) + saddf(line, &pos, width, "V:%6.1f ", sh_video->pts); + + // A-V sync + if (mpctx->sh_audio && sh_video) + saddf(line, &pos, width, "A-V:%7.3f ct:%7.3f ", a_v, corr); + + // Video stats + if (sh_video) + saddf(line, &pos, width, "%3d/%3d ", + (int)sh_video->num_frames, + (int)sh_video->num_frames_decoded); + + // CPU usage + if (sh_video) { + if (sh_video->timer > 0.5) + saddf(line, &pos, width, "%2d%% %2d%% %4.1f%% ", + (int)(100.0 * video_time_usage * playback_speed / (double)sh_video->timer), + (int)(100.0 * vout_time_usage * playback_speed / (double)sh_video->timer), + (100.0 * audio_time_usage * playback_speed / (double)sh_video->timer)); + else + saddf(line, &pos, width, "??%% ??%% ??,?%% "); + } else if (mpctx->sh_audio) { + if (mpctx->delay > 0.5) + saddf(line, &pos, width, "%4.1f%% ", + 100.0 * audio_time_usage / (double)mpctx->delay); + else + saddf(line, &pos, width, "??,?%% "); + } - // VO stats - if (sh_video) - saddf(line, &pos, width, "%d %d ", drop_frame_cnt, output_quality); + // VO stats + if (sh_video) + saddf(line, &pos, width, "%d %d ", drop_frame_cnt, output_quality); #ifdef CONFIG_STREAM_CACHE - // cache stats - if (stream_cache_size > 0) - saddf(line, &pos, width, "%d%% ", cache_fill_status(mpctx->stream)); + // cache stats + if (stream_cache_size > 0) + saddf(line, &pos, width, "%d%% ", cache_fill_status(mpctx->stream)); #endif - // other - if (playback_speed != 1) - saddf(line, &pos, width, "%4.2fx ", playback_speed); + // other + if (playback_speed != 1) + saddf(line, &pos, width, "%4.2fx ", playback_speed); - // end - if (erase_to_end_of_line) { - line[pos] = 0; - mp_msg(MSGT_STATUSLINE, MSGL_STATUS, "%s%s\r", line, erase_to_end_of_line); - } else { - memset(&line[pos], ' ', width - pos); - line[width] = 0; - mp_msg(MSGT_STATUSLINE, MSGL_STATUS, "%s\r", line); - } - free(line); + // end + if (erase_to_end_of_line) { + line[pos] = 0; + mp_msg(MSGT_STATUSLINE, MSGL_STATUS, "%s%s\r", line, erase_to_end_of_line); + } else { + memset(&line[pos], ' ', width - pos); + line[width] = 0; + mp_msg(MSGT_STATUSLINE, MSGL_STATUS, "%s\r", line); + } + free(line); } /** @@ -1304,54 +1323,54 @@ static void print_status(float a_pos, float a_v, float corr) */ static int build_afilter_chain(sh_audio_t *sh_audio, ao_data_t *ao_data) { - int new_srate; - int result; - if (!sh_audio) - { + int new_srate; + int result; + if (!sh_audio) { #ifdef CONFIG_GUI - if (use_gui) guiGetEvent(guiSetAfilter, (char *)NULL); + if (use_gui) + guiGetEvent(guiSetAfilter, (char *)NULL); #endif - mpctx->mixer.afilter = NULL; - return 0; - } - if(af_control_any_rev(sh_audio->afilter, - AF_CONTROL_PLAYBACK_SPEED | AF_CONTROL_SET, - &playback_speed)) { - new_srate = sh_audio->samplerate; - } else { - new_srate = sh_audio->samplerate * playback_speed; - if (new_srate != ao_data->samplerate) { - // limits are taken from libaf/af_resample.c - if (new_srate < 8000) - new_srate = 8000; - if (new_srate > 192000) - new_srate = 192000; - playback_speed = (float)new_srate / (float)sh_audio->samplerate; - } - } - result = init_audio_filters(sh_audio, new_srate, - &ao_data->samplerate, &ao_data->channels, &ao_data->format); - mpctx->mixer.afilter = sh_audio->afilter; + mpctx->mixer.afilter = NULL; + return 0; + } + if (af_control_any_rev(sh_audio->afilter, + AF_CONTROL_PLAYBACK_SPEED | AF_CONTROL_SET, + &playback_speed)) { + new_srate = sh_audio->samplerate; + } else { + new_srate = sh_audio->samplerate * playback_speed; + if (new_srate != ao_data->samplerate) { + // limits are taken from libaf/af_resample.c + if (new_srate < 8000) + new_srate = 8000; + if (new_srate > 192000) + new_srate = 192000; + playback_speed = (float)new_srate / (float)sh_audio->samplerate; + } + } + result = init_audio_filters(sh_audio, new_srate, + &ao_data->samplerate, &ao_data->channels, &ao_data->format); + mpctx->mixer.afilter = sh_audio->afilter; #ifdef CONFIG_GUI - if (use_gui) guiGetEvent(guiSetAfilter, (char *)sh_audio->afilter); + if (use_gui) + guiGetEvent(guiSetAfilter, (char *)sh_audio->afilter); #endif - return result; + return result; } - typedef struct mp_osd_msg mp_osd_msg_t; struct mp_osd_msg { /// Previous message on the stack. - mp_osd_msg_t* prev; + mp_osd_msg_t *prev; /// Message text. char msg[128]; - int id,level,started; + int id, level, started; /// Display duration in ms. - unsigned time; + unsigned time; }; /// OSD message stack. -static mp_osd_msg_t* osd_msg_stack; +static mp_osd_msg_t *osd_msg_stack; /** * \brief Add a message on the OSD message stack @@ -1361,34 +1380,35 @@ static mp_osd_msg_t* osd_msg_stack; * */ -void set_osd_msg(int id, int level, int time, const char* fmt, ...) { - mp_osd_msg_t *msg,*last=NULL; +void set_osd_msg(int id, int level, int time, const char *fmt, ...) +{ + mp_osd_msg_t *msg, *last = NULL; va_list va; int r; // look if the id is already in the stack - for(msg = osd_msg_stack ; msg && msg->id != id ; - last = msg, msg = msg->prev); + for (msg = osd_msg_stack; msg && msg->id != id; + last = msg, msg = msg->prev) ; // not found: alloc it - if(!msg) { - msg = calloc(1,sizeof(mp_osd_msg_t)); - msg->prev = osd_msg_stack; + if (!msg) { + msg = calloc(1, sizeof(mp_osd_msg_t)); + msg->prev = osd_msg_stack; osd_msg_stack = msg; - } else if(last) { // found, but it's not on top of the stack - last->prev = msg->prev; - msg->prev = osd_msg_stack; + } else if (last) { // found, but it's not on top of the stack + last->prev = msg->prev; + msg->prev = osd_msg_stack; osd_msg_stack = msg; } // write the msg - va_start(va,fmt); + va_start(va, fmt); r = vsnprintf(msg->msg, 128, fmt, va); va_end(va); - if(r >= 128) msg->msg[127] = 0; + if (r >= 128) + msg->msg[127] = 0; // set id and time - msg->id = id; + msg->id = id; msg->level = level; - msg->time = time; - + msg->time = time; } /** @@ -1398,16 +1418,18 @@ void set_osd_msg(int id, int level, int time, const char* fmt, ...) { * */ -void rm_osd_msg(int id) { - mp_osd_msg_t *msg,*last=NULL; +void rm_osd_msg(int id) +{ + mp_osd_msg_t *msg, *last = NULL; // Search for the msg - for(msg = osd_msg_stack ; msg && msg->id != id ; - last = msg, msg = msg->prev); - if(!msg) return; + for (msg = osd_msg_stack; msg && msg->id != id; + last = msg, msg = msg->prev) ; + if (!msg) + return; // Detach it from the stack and free it - if(last) + if (last) last->prev = msg->prev; else osd_msg_stack = msg->prev; @@ -1419,9 +1441,10 @@ void rm_osd_msg(int id) { * */ -static void clear_osd_msgs(void) { - mp_osd_msg_t* msg = osd_msg_stack, *prev = NULL; - while(msg) { +static void clear_osd_msgs(void) +{ + mp_osd_msg_t *msg = osd_msg_stack, *prev = NULL; + while (msg) { prev = msg->prev; free(msg); msg = prev; @@ -1437,52 +1460,58 @@ static void clear_osd_msgs(void) { * */ -static mp_osd_msg_t* get_osd_msg(void) { - mp_osd_msg_t *msg,*prev,*last = NULL; +static mp_osd_msg_t *get_osd_msg(void) +{ + mp_osd_msg_t *msg, *prev, *last = NULL; static unsigned last_update; unsigned now = GetTimerMS(); unsigned diff; char hidden_dec_done = 0; if (osd_visible) { - // 36000000 means max timed visibility is 1 hour into the future, if - // the difference is greater assume it's wrapped around from below 0 - if (osd_visible - now > 36000000) { - osd_visible = 0; - vo_osd_progbar_type = -1; // disable - vo_osd_changed(OSDTYPE_PROGBAR); - if (mpctx->osd_function != OSD_PAUSE) - mpctx->osd_function = OSD_PLAY; - } - } - - if(!last_update) last_update = now; + // 36000000 means max timed visibility is 1 hour into the future, if + // the difference is greater assume it's wrapped around from below 0 + if (osd_visible - now > 36000000) { + osd_visible = 0; + vo_osd_progbar_type = -1; // disable + vo_osd_changed(OSDTYPE_PROGBAR); + if (mpctx->osd_function != OSD_PAUSE) + mpctx->osd_function = OSD_PLAY; + } + } + + if (!last_update) + last_update = now; diff = now >= last_update ? now - last_update : 0; last_update = now; // Look for the first message in the stack with high enough level. - for(msg = osd_msg_stack ; msg ; last = msg, msg = prev) { + for (msg = osd_msg_stack; msg; last = msg, msg = prev) { prev = msg->prev; - if(msg->level > osd_level && hidden_dec_done) continue; + if (msg->level > osd_level && hidden_dec_done) + continue; // The message has a high enough level or it is the first hidden one // in both cases we decrement the timer or kill it. - if(!msg->started || msg->time > diff) { - if(msg->started) msg->time -= diff; - else msg->started = 1; + if (!msg->started || msg->time > diff) { + if (msg->started) + msg->time -= diff; + else + msg->started = 1; // display it - if(msg->level <= osd_level) return msg; + if (msg->level <= osd_level) + return msg; hidden_dec_done = 1; continue; } // kill the message free(msg); - if(last) { + if (last) { last->prev = prev; - msg = last; + msg = last; } else { osd_msg_stack = prev; - msg = NULL; + msg = NULL; } } // Nothing found @@ -1496,26 +1525,28 @@ static mp_osd_msg_t* get_osd_msg(void) { * */ -void set_osd_bar(int type,const char* name,double min,double max,double val) { - - if(osd_level < 1) return; +void set_osd_bar(int type, const char *name, double min, double max, double val) +{ + if (osd_level < 1) + return; - if(mpctx->sh_video) { - osd_visible = (GetTimerMS() + 1000) | 1; - vo_osd_progbar_type = type; - vo_osd_progbar_value = 256*(val-min)/(max-min); + if (mpctx->sh_video) { + osd_visible = (GetTimerMS() + 1000) | 1; + vo_osd_progbar_type = type; + vo_osd_progbar_value = 256 * (val - min) / (max - min); vo_osd_changed(OSDTYPE_PROGBAR); return; } - set_osd_msg(OSD_MSG_BAR,1,osd_duration,"%s: %d %%", - name,ROUND(100*(val-min)/(max-min))); + set_osd_msg(OSD_MSG_BAR, 1, osd_duration, "%s: %d %%", + name, ROUND(100 * (val - min) / (max - min))); } /** * \brief Display text subtitles on the OSD */ -void set_osd_subtitle(subtitle *subs) { +void set_osd_subtitle(subtitle *subs) +{ int i; vo_sub = subs; vo_osd_changed(OSDTYPE_SUBTITLE); @@ -1542,28 +1573,31 @@ void set_osd_subtitle(subtitle *subs) { * */ -static void update_osd_msg(void) { +static void update_osd_msg(void) +{ mp_osd_msg_t *msg; static char osd_text[128] = ""; static char osd_text_timer[128]; // we need some mem for vo_osd_text - vo_osd_text = (unsigned char*)osd_text; + vo_osd_text = (unsigned char *)osd_text; // Look if we have a msg - if((msg = get_osd_msg())) { - if(strcmp(osd_text,msg->msg)) { - strncpy((char*)osd_text, msg->msg, 127); - if(mpctx->sh_video) vo_osd_changed(OSDTYPE_OSD); else - if(term_osd) mp_msg(MSGT_CPLAYER,MSGL_STATUS,"%s%s\n",term_osd_esc,msg->msg); + if ((msg = get_osd_msg())) { + if (strcmp(osd_text, msg->msg)) { + strncpy((char *)osd_text, msg->msg, 127); + if (mpctx->sh_video) + vo_osd_changed(OSDTYPE_OSD); + else if (term_osd) + mp_msg(MSGT_CPLAYER, MSGL_STATUS, "%s%s\n", term_osd_esc, msg->msg); } return; } - if(mpctx->sh_video) { + if (mpctx->sh_video) { // fallback on the timer - if(osd_level>=2) { - int len = demuxer_get_time_length(mpctx->demuxer); + if (osd_level >= 2) { + int len = demuxer_get_time_length(mpctx->demuxer); int percentage = -1; char percentage_text[10]; char fractions_text[4]; @@ -1577,12 +1611,12 @@ static void update_osd_msg(void) { else percentage_text[0] = 0; - if (osd_fractions==1) { + if (osd_fractions == 1) { //print fractions as sub-second timestamp snprintf(fractions_text, sizeof(fractions_text), ".%02d", - (int)( (mpctx->sh_video->pts - pts)* 100 + 0.5) + (int)((mpctx->sh_video->pts - pts) * 100 + 0.5) % 100); - } else if (osd_fractions==2) { + } else if (osd_fractions == 2) { //print fractions by estimating the frame count within the //second @@ -1592,8 +1626,8 @@ static void update_osd_msg(void) { //we add 0.2 and cut off at the decimal point, which proved //as good heuristic snprintf(fractions_text, sizeof(fractions_text), ".%02d", - (int) ( ( mpctx->sh_video->pts - pts ) * - mpctx->sh_video->fps + 0.2 ) ); + (int)((mpctx->sh_video->pts - pts) * + mpctx->sh_video->fps + 0.2)); } else { //do not print fractions fractions_text[0] = 0; @@ -1602,21 +1636,21 @@ static void update_osd_msg(void) { if (osd_level == 3) snprintf(osd_text_timer, 63, "%c %02d:%02d:%02d%s / %02d:%02d:%02d%s", - mpctx->osd_function,pts/3600,(pts/60)%60,pts%60, - fractions_text,len/3600,(len/60)%60,len%60, + mpctx->osd_function, pts / 3600, (pts / 60) % 60, pts % 60, + fractions_text, len / 3600, (len / 60) % 60, len % 60, percentage_text); else snprintf(osd_text_timer, 63, "%c %02d:%02d:%02d%s%s", - mpctx->osd_function,pts/3600,(pts/60)%60, - pts%60,fractions_text,percentage_text); + mpctx->osd_function, pts / 3600, (pts / 60) % 60, + pts % 60, fractions_text, percentage_text); } else - osd_text_timer[0]=0; + osd_text_timer[0] = 0; // always decrement the percentage timer - if(mpctx->osd_show_percentage) + if (mpctx->osd_show_percentage) mpctx->osd_show_percentage--; - if(strcmp(osd_text,osd_text_timer)) { + if (strcmp(osd_text, osd_text_timer)) { strncpy(osd_text, osd_text_timer, 63); vo_osd_changed(OSDTYPE_OSD); } @@ -1624,87 +1658,84 @@ static void update_osd_msg(void) { } // Clear the term osd line - if(term_osd && osd_text[0]) { + if (term_osd && osd_text[0]) { osd_text[0] = 0; - printf("%s\n",term_osd_esc); + printf("%s\n", term_osd_esc); } } ///@} // OSDMsgStack - -void reinit_audio_chain(void) { +void reinit_audio_chain(void) +{ if (!mpctx->sh_audio) return; if (!(initialized_flags & INITIALIZED_ACODEC)) { - current_module="init_audio_codec"; - mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n"); - if(!init_best_audio_codec(mpctx->sh_audio,audio_codec_list,audio_fm_list)){ + current_module = "init_audio_codec"; + mp_msg(MSGT_CPLAYER, MSGL_INFO, "==========================================================================\n"); + if (!init_best_audio_codec(mpctx->sh_audio, audio_codec_list, audio_fm_list)) { goto init_error; } - initialized_flags|=INITIALIZED_ACODEC; - mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n"); + initialized_flags |= INITIALIZED_ACODEC; + mp_msg(MSGT_CPLAYER, MSGL_INFO, "==========================================================================\n"); } - if (!(initialized_flags & INITIALIZED_AO)) { - current_module="af_preinit"; - ao_data.samplerate=force_srate; - ao_data.channels=0; - ao_data.format=audio_output_format; + current_module = "af_preinit"; + ao_data.samplerate = force_srate; + ao_data.channels = 0; + ao_data.format = audio_output_format; // first init to detect best values - if(!init_audio_filters(mpctx->sh_audio, // preliminary init - // input: - mpctx->sh_audio->samplerate, - // output: - &ao_data.samplerate, &ao_data.channels, &ao_data.format)){ - mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_AudioFilterChainPreinitError); + if (!init_audio_filters(mpctx->sh_audio, // preliminary init + // input: + mpctx->sh_audio->samplerate, + // output: + &ao_data.samplerate, &ao_data.channels, &ao_data.format)) { + mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_AudioFilterChainPreinitError); exit_player(EXIT_ERROR); } - current_module="ao2_init"; + current_module = "ao2_init"; mpctx->audio_out = init_best_audio_out(audio_driver_list, 0, // plugin flag ao_data.samplerate, ao_data.channels, ao_data.format, 0); - if(!mpctx->audio_out){ - mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CannotInitAO); + if (!mpctx->audio_out) { + mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_CannotInitAO); goto init_error; } - initialized_flags|=INITIALIZED_AO; - mp_msg(MSGT_CPLAYER,MSGL_INFO,"AO: [%s] %dHz %dch %s (%d bytes per sample)\n", + initialized_flags |= INITIALIZED_AO; + mp_msg(MSGT_CPLAYER, MSGL_INFO, "AO: [%s] %dHz %dch %s (%d bytes per sample)\n", mpctx->audio_out->info->short_name, ao_data.samplerate, ao_data.channels, af_fmt2str_short(ao_data.format), - af_fmt2bits(ao_data.format)/8 ); - mp_msg(MSGT_CPLAYER,MSGL_V,"AO: Description: %s\nAO: Author: %s\n", + af_fmt2bits(ao_data.format) / 8); + mp_msg(MSGT_CPLAYER, MSGL_V, "AO: Description: %s\nAO: Author: %s\n", mpctx->audio_out->info->name, mpctx->audio_out->info->author); - if(strlen(mpctx->audio_out->info->comment) > 0) - mp_msg(MSGT_CPLAYER,MSGL_V,"AO: Comment: %s\n", mpctx->audio_out->info->comment); + if (strlen(mpctx->audio_out->info->comment) > 0) + mp_msg(MSGT_CPLAYER, MSGL_V, "AO: Comment: %s\n", mpctx->audio_out->info->comment); } // init audio filters: - current_module="af_init"; - if(!build_afilter_chain(mpctx->sh_audio, &ao_data)) { - mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_NoMatchingFilter); + current_module = "af_init"; + if (!build_afilter_chain(mpctx->sh_audio, &ao_data)) { + mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_NoMatchingFilter); goto init_error; } mpctx->mixer.audio_out = mpctx->audio_out; - mpctx->mixer.volstep = volstep; + mpctx->mixer.volstep = volstep; return; init_error: - uninit_player(INITIALIZED_ACODEC|INITIALIZED_AO); // close codec and possibly AO - mpctx->sh_audio=mpctx->d_audio->sh=NULL; // -> nosound + uninit_player(INITIALIZED_ACODEC | INITIALIZED_AO); // close codec and possibly AO + mpctx->sh_audio = mpctx->d_audio->sh = NULL; // -> nosound mpctx->d_audio->id = -2; } - ///@} // Command2Property - // Return pts value corresponding to the end point of audio written to the // ao so far. static double written_audio_pts(sh_audio_t *sh_audio, demux_stream_t *d_audio) @@ -1734,149 +1765,150 @@ static double written_audio_pts(sh_audio_t *sh_audio, demux_stream_t *d_audio) // Return pts value corresponding to currently playing audio. double playing_audio_pts(sh_audio_t *sh_audio, demux_stream_t *d_audio, - const ao_functions_t *audio_out) + const ao_functions_t *audio_out) { return written_audio_pts(sh_audio, d_audio) - playback_speed * - audio_out->get_delay(); -} - -static int check_framedrop(double frame_time) { - // check for frame-drop: - current_module = "check_framedrop"; - if (mpctx->sh_audio && !mpctx->d_audio->eof) { - static int dropped_frames; - float delay = playback_speed*mpctx->audio_out->get_delay(); - float d = delay-mpctx->delay; - ++total_frame_cnt; - // we should avoid dropping too many frames in sequence unless we - // are too late. and we allow 100ms A-V delay here: - if (d < -dropped_frames*frame_time-0.100 && - mpctx->osd_function != OSD_PAUSE) { - ++drop_frame_cnt; - ++dropped_frames; - return frame_dropping; - } else - dropped_frames = 0; - } - return 0; + audio_out->get_delay(); +} + +static int check_framedrop(double frame_time) +{ + // check for frame-drop: + current_module = "check_framedrop"; + if (mpctx->sh_audio && !mpctx->d_audio->eof) { + static int dropped_frames; + float delay = playback_speed * mpctx->audio_out->get_delay(); + float d = delay - mpctx->delay; + ++total_frame_cnt; + // we should avoid dropping too many frames in sequence unless we + // are too late. and we allow 100ms A-V delay here: + if (d < -dropped_frames * frame_time - 0.100 && + mpctx->osd_function != OSD_PAUSE) { + ++drop_frame_cnt; + ++dropped_frames; + return frame_dropping; + } else + dropped_frames = 0; + } + return 0; } static int generate_video_frame(sh_video_t *sh_video, demux_stream_t *d_video) { unsigned char *start; int in_size; - int hit_eof=0; + int hit_eof = 0; double pts; while (1) { - int drop_frame = check_framedrop(sh_video->frametime); - void *decoded_frame; - current_module = "decode video"; - // XXX Time used in this call is not counted in any performance - // timer now, OSD is not updated correctly for filter-added frames - if (vf_output_queued_frame(sh_video->vfilter)) - break; - current_module = "video_read_frame"; - in_size = ds_get_packet_pts(d_video, &start, &pts); - if (in_size < 0) { - // try to extract last frames in case of decoder lag - in_size = 0; - pts = MP_NOPTS_VALUE; - hit_eof = 1; - } - if (in_size > max_framesize) - max_framesize = in_size; - current_module = "decode video"; - decoded_frame = decode_video(sh_video, start, in_size, drop_frame, pts, NULL); - if (decoded_frame) { - update_subtitles(sh_video, sh_video->pts, mpctx->d_sub, 0); - update_teletext(sh_video, mpctx->demuxer, 0); - update_osd_msg(); - current_module = "filter video"; - if (filter_video(sh_video, decoded_frame, sh_video->pts)) - break; - } else if (drop_frame) - return -1; - if (hit_eof) - return 0; + int drop_frame = check_framedrop(sh_video->frametime); + void *decoded_frame; + current_module = "decode video"; + // XXX Time used in this call is not counted in any performance + // timer now, OSD is not updated correctly for filter-added frames + if (vf_output_queued_frame(sh_video->vfilter)) + break; + current_module = "video_read_frame"; + in_size = ds_get_packet_pts(d_video, &start, &pts); + if (in_size < 0) { + // try to extract last frames in case of decoder lag + in_size = 0; + pts = MP_NOPTS_VALUE; + hit_eof = 1; + } + if (in_size > max_framesize) + max_framesize = in_size; + current_module = "decode video"; + decoded_frame = decode_video(sh_video, start, in_size, drop_frame, pts, NULL); + if (decoded_frame) { + update_subtitles(sh_video, sh_video->pts, mpctx->d_sub, 0); + update_teletext(sh_video, mpctx->demuxer, 0); + update_osd_msg(); + current_module = "filter video"; + if (filter_video(sh_video, decoded_frame, sh_video->pts)) + break; + } else if (drop_frame) + return -1; + if (hit_eof) + return 0; } return 1; } #ifdef HAVE_RTC - int rtc_fd = -1; +int rtc_fd = -1; #endif static float timing_sleep(float time_frame) { #ifdef HAVE_RTC - if (rtc_fd >= 0){ - // -------- RTC ----------- - current_module="sleep_rtc"; + if (rtc_fd >= 0) { + // -------- RTC ----------- + current_module = "sleep_rtc"; while (time_frame > 0.000) { - unsigned long rtc_ts; - if (read(rtc_fd, &rtc_ts, sizeof(rtc_ts)) <= 0) - mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_LinuxRTCReadError, strerror(errno)); - time_frame -= GetRelativeTime(); - } + unsigned long rtc_ts; + if (read(rtc_fd, &rtc_ts, sizeof(rtc_ts)) <= 0) + mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_LinuxRTCReadError, strerror(errno)); + time_frame -= GetRelativeTime(); + } } else #endif { - // assume kernel HZ=100 for softsleep, works with larger HZ but with - // unnecessarily high CPU usage - float margin = softsleep ? 0.011 : 0; - current_module = "sleep_timer"; - while (time_frame > margin) { - usec_sleep(1000000 * (time_frame - margin)); - time_frame -= GetRelativeTime(); - } - if (softsleep){ - current_module = "sleep_soft"; - if (time_frame < 0) - mp_msg(MSGT_AVSYNC, MSGL_WARN, MSGTR_SoftsleepUnderflow); - while (time_frame > 0) - time_frame-=GetRelativeTime(); // burn the CPU - } + // assume kernel HZ=100 for softsleep, works with larger HZ but with + // unnecessarily high CPU usage + float margin = softsleep ? 0.011 : 0; + current_module = "sleep_timer"; + while (time_frame > margin) { + usec_sleep(1000000 * (time_frame - margin)); + time_frame -= GetRelativeTime(); + } + if (softsleep) { + current_module = "sleep_soft"; + if (time_frame < 0) + mp_msg(MSGT_AVSYNC, MSGL_WARN, MSGTR_SoftsleepUnderflow); + while (time_frame > 0) + time_frame -= GetRelativeTime(); // burn the CPU + } } return time_frame; } static int select_subtitle(MPContext *mpctx) { - // find the best sub to use - int id; - int found = 0; - mpctx->global_sub_pos = -1; // no subs by default - if (vobsub_id >= 0) { - // if user asks for a vobsub id, use that first. - id = vobsub_id; - found = mp_property_do("sub_vob", M_PROPERTY_SET, &id, mpctx) == M_PROPERTY_OK; - } - - if (!found && dvdsub_id >= 0) { - // if user asks for a dvd sub id, use that next. - id = dvdsub_id; - found = mp_property_do("sub_demux", M_PROPERTY_SET, &id, mpctx) == M_PROPERTY_OK; - } - - if (!found) { - // if there are text subs to use, use those. (autosubs come last here) - id = 0; - found = mp_property_do("sub_file", M_PROPERTY_SET, &id, mpctx) == M_PROPERTY_OK; - } - - if (!found && dvdsub_id == -1) { - // finally select subs by language and container hints - if (dvdsub_id == -1 && dvdsub_lang) - dvdsub_id = demuxer_sub_track_by_lang(mpctx->demuxer, dvdsub_lang); - if (dvdsub_id == -1) - dvdsub_id = demuxer_default_sub_track(mpctx->demuxer); - if (dvdsub_id >= 0) { - id = dvdsub_id; - found = mp_property_do("sub_demux", M_PROPERTY_SET, &id, mpctx) == M_PROPERTY_OK; - } - } - return found; + // find the best sub to use + int id; + int found = 0; + mpctx->global_sub_pos = -1; // no subs by default + if (vobsub_id >= 0) { + // if user asks for a vobsub id, use that first. + id = vobsub_id; + found = mp_property_do("sub_vob", M_PROPERTY_SET, &id, mpctx) == M_PROPERTY_OK; + } + + if (!found && dvdsub_id >= 0) { + // if user asks for a dvd sub id, use that next. + id = dvdsub_id; + found = mp_property_do("sub_demux", M_PROPERTY_SET, &id, mpctx) == M_PROPERTY_OK; + } + + if (!found) { + // if there are text subs to use, use those. (autosubs come last here) + id = 0; + found = mp_property_do("sub_file", M_PROPERTY_SET, &id, mpctx) == M_PROPERTY_OK; + } + + if (!found && dvdsub_id == -1) { + // finally select subs by language and container hints + if (dvdsub_id == -1 && dvdsub_lang) + dvdsub_id = demuxer_sub_track_by_lang(mpctx->demuxer, dvdsub_lang); + if (dvdsub_id == -1) + dvdsub_id = demuxer_default_sub_track(mpctx->demuxer); + if (dvdsub_id >= 0) { + id = dvdsub_id; + found = mp_property_do("sub_demux", M_PROPERTY_SET, &id, mpctx) == M_PROPERTY_OK; + } + } + return found; } #ifdef CONFIG_DVDNAV @@ -1884,8 +1916,9 @@ static int select_subtitle(MPContext *mpctx) #define FF_B_TYPE 3 #endif /// store decoded video image -static mp_image_t * mp_dvdnav_copy_mpi(mp_image_t *to_mpi, - mp_image_t *from_mpi) { +static mp_image_t *mp_dvdnav_copy_mpi(mp_image_t *to_mpi, + mp_image_t *from_mpi) +{ mp_image_t *mpi; /// Do not store B-frames @@ -1902,34 +1935,35 @@ static mp_image_t * mp_dvdnav_copy_mpi(mp_image_t *to_mpi, free_mp_image(to_mpi); if (from_mpi->w == 0 || from_mpi->h == 0) return NULL; - mpi = alloc_mpi(from_mpi->w,from_mpi->h,from_mpi->imgfmt); + mpi = alloc_mpi(from_mpi->w, from_mpi->h, from_mpi->imgfmt); } - copy_mpi(mpi,from_mpi); + copy_mpi(mpi, from_mpi); return mpi; } -static void mp_dvdnav_reset_stream (MPContext *ctx) { +static void mp_dvdnav_reset_stream(MPContext *ctx) +{ if (ctx->sh_video) { /// clear video pts - ctx->d_video->pts = 0.0f; - ctx->sh_video->pts = 0.0f; - ctx->sh_video->i_pts = 0.0f; - ctx->sh_video->last_pts = 0.0f; - ctx->sh_video->num_buffered_pts = 0; - ctx->sh_video->num_frames = 0; + ctx->d_video->pts = 0.0f; + ctx->sh_video->pts = 0.0f; + ctx->sh_video->i_pts = 0.0f; + ctx->sh_video->last_pts = 0.0f; + ctx->sh_video->num_buffered_pts = 0; + ctx->sh_video->num_frames = 0; ctx->sh_video->num_frames_decoded = 0; - ctx->sh_video->timer = 0.0f; - ctx->sh_video->stream_delay = 0.0f; - ctx->sh_video->timer = 0; - ctx->demuxer->stream_pts = MP_NOPTS_VALUE; + ctx->sh_video->timer = 0.0f; + ctx->sh_video->stream_delay = 0.0f; + ctx->sh_video->timer = 0; + ctx->demuxer->stream_pts = MP_NOPTS_VALUE; } if (ctx->sh_audio) { /// free audio packets and reset ds_free_packs(ctx->d_audio); audio_delay -= ctx->sh_audio->stream_delay; - ctx->delay =- audio_delay; + ctx->delay = -audio_delay; ctx->audio_out->reset(); resync_audio_stream(ctx->sh_audio); } @@ -1957,12 +1991,12 @@ static mp_image_t *mp_dvdnav_restore_smpi(int *in_size, return decoded_frame; /// a change occured in dvdnav stream - if (mp_dvdnav_cell_has_changed(mpctx->stream,0)) { + if (mp_dvdnav_cell_has_changed(mpctx->stream, 0)) { mp_dvdnav_read_wait(mpctx->stream, 1, 1); mp_dvdnav_context_free(mpctx); mp_dvdnav_reset_stream(mpctx); mp_dvdnav_read_wait(mpctx->stream, 0, 1); - mp_dvdnav_cell_has_changed(mpctx->stream,1); + mp_dvdnav_cell_has_changed(mpctx->stream, 1); } if (*in_size < 0) { @@ -1982,10 +2016,10 @@ static mp_image_t *mp_dvdnav_restore_smpi(int *in_size, mpctx->sh_video->pts += 1 / mpctx->sh_video->fps; if (mpctx->nav_buffer) { - *start = mpctx->nav_start; + *start = mpctx->nav_start; *in_size = mpctx->nav_in_size; if (mpctx->nav_start) - memcpy(*start,mpctx->nav_buffer,mpctx->nav_in_size); + memcpy(*start, mpctx->nav_buffer, mpctx->nav_in_size); } } @@ -2002,81 +2036,81 @@ static void mp_dvdnav_save_smpi(int in_size, free(mpctx->nav_buffer); - mpctx->nav_buffer = malloc(in_size); - mpctx->nav_start = start; + mpctx->nav_buffer = malloc(in_size); + mpctx->nav_start = start; mpctx->nav_in_size = mpctx->nav_buffer ? in_size : -1; if (mpctx->nav_buffer) - memcpy(mpctx->nav_buffer,start,in_size); + memcpy(mpctx->nav_buffer, start, in_size); if (decoded_frame && mpctx->nav_smpi != decoded_frame) - mpctx->nav_smpi = mp_dvdnav_copy_mpi(mpctx->nav_smpi,decoded_frame); + mpctx->nav_smpi = mp_dvdnav_copy_mpi(mpctx->nav_smpi, decoded_frame); } + #endif /* CONFIG_DVDNAV */ static void adjust_sync_and_print_status(int between_frames, float timing_error) { - current_module="av_sync"; - - if(mpctx->sh_audio){ - double a_pts, v_pts; - - if (autosync) - /* - * If autosync is enabled, the value for delay must be calculated - * a bit differently. It is set only to the difference between - * the audio and video timers. Any attempt to include the real - * or corrected delay causes the pts_correction code below to - * try to correct for the changes in delay which autosync is - * trying to measure. This keeps the two from competing, but still - * allows the code to correct for PTS drift *only*. (Using a delay - * value here, even a "corrected" one, would be incompatible with - * autosync mode.) - */ - a_pts = written_audio_pts(mpctx->sh_audio, mpctx->d_audio) - mpctx->delay; - else - a_pts = playing_audio_pts(mpctx->sh_audio, mpctx->d_audio, mpctx->audio_out); - - v_pts = mpctx->sh_video->pts; - - { - static int drop_message; - double AV_delay = a_pts - audio_delay - v_pts; - double x; - // not a good idea to do A-V correction with with bogus values - if (a_pts == MP_NOPTS_VALUE || v_pts == MP_NOPTS_VALUE) - AV_delay = 0; - if (AV_delay>0.5 && drop_frame_cnt>50 && drop_message==0){ - ++drop_message; - mp_msg(MSGT_AVSYNC,MSGL_WARN,MSGTR_SystemTooSlow); - } - if (autosync) - x = AV_delay*0.1f; - else - /* Do not correct target time for the next frame if this frame - * was late not because of wrong target time but because the - * target time could not be met */ - x = (AV_delay + timing_error * playback_speed) * 0.1f; - if (x < -max_pts_correction) - x = -max_pts_correction; - else if (x> max_pts_correction) - x = max_pts_correction; - if (default_max_pts_correction >= 0) - max_pts_correction = default_max_pts_correction; - else - max_pts_correction = mpctx->sh_video->frametime*0.10; // +-10% of time - if (!between_frames) { - mpctx->delay+=x; - c_total+=x; - } - if(!quiet) - print_status(a_pts - audio_delay, AV_delay, c_total); - } + current_module = "av_sync"; + if (mpctx->sh_audio) { + double a_pts, v_pts; + + if (autosync) + /* + * If autosync is enabled, the value for delay must be calculated + * a bit differently. It is set only to the difference between + * the audio and video timers. Any attempt to include the real + * or corrected delay causes the pts_correction code below to + * try to correct for the changes in delay which autosync is + * trying to measure. This keeps the two from competing, but still + * allows the code to correct for PTS drift *only*. (Using a delay + * value here, even a "corrected" one, would be incompatible with + * autosync mode.) + */ + a_pts = written_audio_pts(mpctx->sh_audio, mpctx->d_audio) - mpctx->delay; + else + a_pts = playing_audio_pts(mpctx->sh_audio, mpctx->d_audio, mpctx->audio_out); + + v_pts = mpctx->sh_video->pts; + + { + static int drop_message; + double AV_delay = a_pts - audio_delay - v_pts; + double x; + // not a good idea to do A-V correction with with bogus values + if (a_pts == MP_NOPTS_VALUE || v_pts == MP_NOPTS_VALUE) + AV_delay = 0; + if (AV_delay > 0.5 && drop_frame_cnt > 50 && drop_message == 0) { + ++drop_message; + mp_msg(MSGT_AVSYNC, MSGL_WARN, MSGTR_SystemTooSlow); + } + if (autosync) + x = AV_delay * 0.1f; + else + /* Do not correct target time for the next frame if this frame + * was late not because of wrong target time but because the + * target time could not be met */ + x = (AV_delay + timing_error * playback_speed) * 0.1f; + if (x < -max_pts_correction) + x = -max_pts_correction; + else if (x > max_pts_correction) + x = max_pts_correction; + if (default_max_pts_correction >= 0) + max_pts_correction = default_max_pts_correction; + else + max_pts_correction = mpctx->sh_video->frametime * 0.10; // +-10% of time + if (!between_frames) { + mpctx->delay += x; + c_total += x; + } + if (!quiet) + print_status(a_pts - audio_delay, AV_delay, c_total); + } } else { - // No audio: + // No audio: - if (!quiet) - print_status(0, 0, 0); + if (!quiet) + print_status(0, 0, 0); } } @@ -2085,87 +2119,88 @@ static int fill_audio_out_buffers(void) unsigned int t; double tt; int playsize; - int playflags=0; - int audio_eof=0; + int playflags = 0; + int audio_eof = 0; int bytes_to_write; - int format_change = 0; - sh_audio_t * const sh_audio = mpctx->sh_audio; + int format_change = 0; + sh_audio_t *const sh_audio = mpctx->sh_audio; - current_module="play_audio"; + current_module = "play_audio"; while (1) { - int sleep_time; - // all the current uses of ao_data.pts seem to be in aos that handle - // sync completely wrong; there should be no need to use ao_data.pts - // in get_space() - ao_data.pts = ((mpctx->sh_video?mpctx->sh_video->timer:0)+mpctx->delay)*90000.0; - bytes_to_write = mpctx->audio_out->get_space(); - if (mpctx->sh_video || bytes_to_write >= ao_data.outburst) - break; - - // handle audio-only case: - // this is where mplayer sleeps during audio-only playback - // to avoid 100% CPU use - sleep_time = (ao_data.outburst - bytes_to_write) * 1000 / ao_data.bps; - if (sleep_time < 10) sleep_time = 10; // limit to 100 wakeups per second - usec_sleep(sleep_time * 1000); + int sleep_time; + // all the current uses of ao_data.pts seem to be in aos that handle + // sync completely wrong; there should be no need to use ao_data.pts + // in get_space() + ao_data.pts = ((mpctx->sh_video ? mpctx->sh_video->timer : 0) + mpctx->delay) * 90000.0; + bytes_to_write = mpctx->audio_out->get_space(); + if (mpctx->sh_video || bytes_to_write >= ao_data.outburst) + break; + + // handle audio-only case: + // this is where mplayer sleeps during audio-only playback + // to avoid 100% CPU use + sleep_time = (ao_data.outburst - bytes_to_write) * 1000 / ao_data.bps; + if (sleep_time < 10) + sleep_time = 10; // limit to 100 wakeups per second + usec_sleep(sleep_time * 1000); } while (bytes_to_write) { - int res; - playsize = bytes_to_write; - if (playsize > MAX_OUTBURST) - playsize = MAX_OUTBURST; - bytes_to_write -= playsize; - - // Fill buffer if needed: - current_module="decode_audio"; - t = GetTimer(); - if (!format_change) { - res = mp_decode_audio(sh_audio, playsize); - format_change = res == -2; - } - if (!format_change && res < 0) // EOF or error - if (mpctx->d_audio->eof) { - audio_eof = 1; - if (sh_audio->a_out_buffer_len == 0) - return 0; - } - t = GetTimer() - t; - tt = t*0.000001f; audio_time_usage+=tt; - if (playsize > sh_audio->a_out_buffer_len) { - playsize = sh_audio->a_out_buffer_len; - if (audio_eof || format_change) - playflags |= AOPLAY_FINAL_CHUNK; - } - if (!playsize) - break; - - // play audio: - current_module="play_audio"; - - // Is this pts value actually useful for the aos that access it? - // They're obviously badly broken in the way they handle av sync; - // would not having access to this make them more broken? - ao_data.pts = ((mpctx->sh_video?mpctx->sh_video->timer:0)+mpctx->delay)*90000.0; - playsize = mpctx->audio_out->play(sh_audio->a_out_buffer, playsize, playflags); - - if (playsize > 0) { - sh_audio->a_out_buffer_len -= playsize; - memmove(sh_audio->a_out_buffer, &sh_audio->a_out_buffer[playsize], - sh_audio->a_out_buffer_len); - mpctx->delay += playback_speed*playsize/(double)ao_data.bps; - } - else if ((format_change || audio_eof) && mpctx->audio_out->get_delay() < .04) { - // Sanity check to avoid hanging in case current ao doesn't output - // partial chunks and doesn't check for AOPLAY_FINAL_CHUNK - mp_msg(MSGT_CPLAYER, MSGL_WARN, "Audio output truncated at end.\n"); - sh_audio->a_out_buffer_len = 0; - } + int res; + playsize = bytes_to_write; + if (playsize > MAX_OUTBURST) + playsize = MAX_OUTBURST; + bytes_to_write -= playsize; + + // Fill buffer if needed: + current_module = "decode_audio"; + t = GetTimer(); + if (!format_change) { + res = mp_decode_audio(sh_audio, playsize); + format_change = res == -2; + } + if (!format_change && res < 0) // EOF or error + if (mpctx->d_audio->eof) { + audio_eof = 1; + if (sh_audio->a_out_buffer_len == 0) + return 0; + } + t = GetTimer() - t; + tt = t * 0.000001f; + audio_time_usage += tt; + if (playsize > sh_audio->a_out_buffer_len) { + playsize = sh_audio->a_out_buffer_len; + if (audio_eof || format_change) + playflags |= AOPLAY_FINAL_CHUNK; + } + if (!playsize) + break; + + // play audio: + current_module = "play_audio"; + + // Is this pts value actually useful for the aos that access it? + // They're obviously badly broken in the way they handle av sync; + // would not having access to this make them more broken? + ao_data.pts = ((mpctx->sh_video ? mpctx->sh_video->timer : 0) + mpctx->delay) * 90000.0; + playsize = mpctx->audio_out->play(sh_audio->a_out_buffer, playsize, playflags); + + if (playsize > 0) { + sh_audio->a_out_buffer_len -= playsize; + memmove(sh_audio->a_out_buffer, &sh_audio->a_out_buffer[playsize], + sh_audio->a_out_buffer_len); + mpctx->delay += playback_speed * playsize / (double)ao_data.bps; + } else if ((format_change || audio_eof) && mpctx->audio_out->get_delay() < .04) { + // Sanity check to avoid hanging in case current ao doesn't output + // partial chunks and doesn't check for AOPLAY_FINAL_CHUNK + mp_msg(MSGT_CPLAYER, MSGL_WARN, "Audio output truncated at end.\n"); + sh_audio->a_out_buffer_len = 0; + } } if (format_change) { - uninit_player(INITIALIZED_AO); - reinit_audio_chain(); + uninit_player(INITIALIZED_AO); + reinit_audio_chain(); } return 1; } @@ -2174,9 +2209,9 @@ static void handle_udp_master(double time) { #ifdef CONFIG_NETWORKING if (udp_master) { - char current_time[256]; - snprintf(current_time, sizeof(current_time), "%f", time); - send_udp(udp_ip, udp_port, current_time); + char current_time[256]; + snprintf(current_time, sizeof(current_time), "%f", time); + send_udp(udp_ip, udp_port, current_time); } #endif /* CONFIG_NETWORKING */ } @@ -2184,7 +2219,7 @@ static void handle_udp_master(double time) static int sleep_until_update(float *time_frame, float *aq_sleep_time) { int frame_time_remaining = 0; - current_module="calc_sleep_time"; + current_module = "calc_sleep_time"; #ifdef CONFIG_NETWORKING if (udp_slave) { @@ -2200,288 +2235,292 @@ static int sleep_until_update(float *time_frame, float *aq_sleep_time) *time_frame -= GetRelativeTime(); // reset timer if (mpctx->sh_audio && !mpctx->d_audio->eof) { - float delay = mpctx->audio_out->get_delay(); - mp_dbg(MSGT_AVSYNC, MSGL_DBG2, "delay=%f\n", delay); - - if (autosync) { - /* - * Adjust this raw delay value by calculating the expected - * delay for this frame and generating a new value which is - * weighted between the two. The higher autosync is, the - * closer to the delay value gets to that which "-nosound" - * would have used, and the longer it will take for A/V - * sync to settle at the right value (but it eventually will.) - * This settling time is very short for values below 100. - */ - float predicted = mpctx->delay / playback_speed + *time_frame; - float difference = delay - predicted; - delay = predicted + difference / (float)autosync; - } - - *time_frame = delay - mpctx->delay / playback_speed; - - // delay = amount of audio buffered in soundcard/driver - if (delay > 0.25) delay=0.25; else - if (delay < 0.10) delay=0.10; - if (*time_frame > delay*0.6) { - // sleep time too big - may cause audio drops (buffer underrun) - frame_time_remaining = 1; - *time_frame = delay*0.5; - } + float delay = mpctx->audio_out->get_delay(); + mp_dbg(MSGT_AVSYNC, MSGL_DBG2, "delay=%f\n", delay); + + if (autosync) { + /* + * Adjust this raw delay value by calculating the expected + * delay for this frame and generating a new value which is + * weighted between the two. The higher autosync is, the + * closer to the delay value gets to that which "-nosound" + * would have used, and the longer it will take for A/V + * sync to settle at the right value (but it eventually will.) + * This settling time is very short for values below 100. + */ + float predicted = mpctx->delay / playback_speed + *time_frame; + float difference = delay - predicted; + delay = predicted + difference / (float)autosync; + } + + *time_frame = delay - mpctx->delay / playback_speed; + + // delay = amount of audio buffered in soundcard/driver + if (delay > 0.25) + delay = 0.25; + else if (delay < 0.10) + delay = 0.10; + if (*time_frame > delay * 0.6) { + // sleep time too big - may cause audio drops (buffer underrun) + frame_time_remaining = 1; + *time_frame = delay * 0.5; + } } else { - // If we're lagging more than 200 ms behind the right playback rate, - // don't try to "catch up". - // If benchmark is set always output frames as fast as possible - // without sleeping. - if (*time_frame < -0.2 || benchmark) - *time_frame = 0; + // If we're lagging more than 200 ms behind the right playback rate, + // don't try to "catch up". + // If benchmark is set always output frames as fast as possible + // without sleeping. + if (*time_frame < -0.2 || benchmark) + *time_frame = 0; } *aq_sleep_time += *time_frame; - //============================== SLEEP: =================================== // flag 256 means: libvo driver does its timing (dvb card) - if (*time_frame > 0.001 && !(vo_flags&256)) - *time_frame = timing_sleep(*time_frame); + if (*time_frame > 0.001 && !(vo_flags & 256)) + *time_frame = timing_sleep(*time_frame); handle_udp_master(mpctx->sh_video->pts); return frame_time_remaining; } -int reinit_video_chain(void) { - sh_video_t * const sh_video = mpctx->sh_video; - double ar=-1.0; +int reinit_video_chain(void) +{ + sh_video_t *const sh_video = mpctx->sh_video; + double ar = -1.0; //================== Init VIDEO (codec & libvo) ========================== - if(!fixed_vo || !(initialized_flags&INITIALIZED_VO)){ - current_module="preinit_libvo"; - - //shouldn't we set dvideo->id=-2 when we fail? - vo_config_count=0; - //if((mpctx->video_out->preinit(vo_subdevice))!=0){ - if(!(mpctx->video_out=init_best_video_out(video_driver_list))){ - mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_ErrorInitializingVODevice); - goto err_out; - } - initialized_flags|=INITIALIZED_VO; - } - - if(stream_control(mpctx->demuxer->stream, STREAM_CTRL_GET_ASPECT_RATIO, &ar) != STREAM_UNSUPPORTED) - mpctx->sh_video->stream_aspect = ar; - current_module="init_video_filters"; - { - char* vf_arg[] = { "_oldargs_", (char*)mpctx->video_out , NULL }; - sh_video->vfilter=vf_open_filter(NULL,"vo",vf_arg); - } + if (!fixed_vo || !(initialized_flags & INITIALIZED_VO)) { + current_module = "preinit_libvo"; + + //shouldn't we set dvideo->id=-2 when we fail? + vo_config_count = 0; + //if((mpctx->video_out->preinit(vo_subdevice))!=0){ + if (!(mpctx->video_out = init_best_video_out(video_driver_list))) { + mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_ErrorInitializingVODevice); + goto err_out; + } + initialized_flags |= INITIALIZED_VO; + } + + if (stream_control(mpctx->demuxer->stream, STREAM_CTRL_GET_ASPECT_RATIO, &ar) != STREAM_UNSUPPORTED) + mpctx->sh_video->stream_aspect = ar; + current_module = "init_video_filters"; + { + char *vf_arg[] = { "_oldargs_", (char *)mpctx->video_out, NULL }; + sh_video->vfilter = vf_open_filter(NULL, "vo", vf_arg); + } #ifdef CONFIG_MENU - if(use_menu) { - char* vf_arg[] = { "_oldargs_", menu_root, NULL }; - vf_menu = vf_open_plugin(libmenu_vfs,sh_video->vfilter,"menu",vf_arg); - if(!vf_menu) { - mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantOpenLibmenuFilterWithThisRootMenu,menu_root); - use_menu = 0; + if (use_menu) { + char *vf_arg[] = { "_oldargs_", menu_root, NULL }; + vf_menu = vf_open_plugin(libmenu_vfs, sh_video->vfilter, "menu", vf_arg); + if (!vf_menu) { + mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_CantOpenLibmenuFilterWithThisRootMenu, menu_root); + use_menu = 0; + } } - } - if(vf_menu) - sh_video->vfilter=vf_menu; + if (vf_menu) + sh_video->vfilter = vf_menu; #endif #ifdef CONFIG_ASS - if(ass_enabled) { - int i; - int insert = 1; - if (vf_settings) - for (i = 0; vf_settings[i].name; ++i) - if (strcmp(vf_settings[i].name, "ass") == 0) { - insert = 0; - break; + if (ass_enabled) { + int i; + int insert = 1; + if (vf_settings) + for (i = 0; vf_settings[i].name; ++i) + if (strcmp(vf_settings[i].name, "ass") == 0) { + insert = 0; + break; + } + if (insert) { + char *vf_arg[] = { "auto", "1", NULL }; + vf_instance_t *vf_ass = vf_open_filter(sh_video->vfilter, "ass", vf_arg); + if (vf_ass) + sh_video->vfilter = vf_ass; + else + mp_msg(MSGT_CPLAYER, MSGL_ERR, "ASS: cannot add video filter\n"); } - if (insert) { - char* vf_arg[] = {"auto", "1", NULL}; - vf_instance_t* vf_ass = vf_open_filter(sh_video->vfilter,"ass",vf_arg); - if (vf_ass) - sh_video->vfilter=vf_ass; - else - mp_msg(MSGT_CPLAYER,MSGL_ERR, "ASS: cannot add video filter\n"); } - } #endif - sh_video->vfilter=append_filters(sh_video->vfilter); - eosd_init(sh_video->vfilter); + sh_video->vfilter = append_filters(sh_video->vfilter); + eosd_init(sh_video->vfilter); #ifdef CONFIG_ASS - if (ass_enabled) - eosd_ass_init(ass_library); + if (ass_enabled) + eosd_ass_init(ass_library); #endif - current_module="init_video_codec"; + current_module = "init_video_codec"; - mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n"); - init_best_video_codec(sh_video,video_codec_list,video_fm_list); - mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n"); + mp_msg(MSGT_CPLAYER, MSGL_INFO, "==========================================================================\n"); + init_best_video_codec(sh_video, video_codec_list, video_fm_list); + mp_msg(MSGT_CPLAYER, MSGL_INFO, "==========================================================================\n"); - if(!sh_video->initialized){ - if(!fixed_vo) uninit_player(INITIALIZED_VO); - goto err_out; - } + if (!sh_video->initialized) { + if (!fixed_vo) + uninit_player(INITIALIZED_VO); + goto err_out; + } - initialized_flags|=INITIALIZED_VCODEC; + initialized_flags |= INITIALIZED_VCODEC; - if (sh_video->codec) - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_CODEC=%s\n", sh_video->codec->name); + if (sh_video->codec) + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_CODEC=%s\n", sh_video->codec->name); - sh_video->last_pts = MP_NOPTS_VALUE; - sh_video->num_buffered_pts = 0; - sh_video->next_frame_time = 0; + sh_video->last_pts = MP_NOPTS_VALUE; + sh_video->num_buffered_pts = 0; + sh_video->next_frame_time = 0; - if(auto_quality>0){ - // Auto quality option enabled - output_quality=get_video_quality_max(sh_video); - if(auto_quality>output_quality) auto_quality=output_quality; - else output_quality=auto_quality; - mp_msg(MSGT_CPLAYER,MSGL_V,"AutoQ: setting quality to %d.\n",output_quality); - set_video_quality(sh_video,output_quality); - } + if (auto_quality > 0) { + // Auto quality option enabled + output_quality = get_video_quality_max(sh_video); + if (auto_quality > output_quality) + auto_quality = output_quality; + else + output_quality = auto_quality; + mp_msg(MSGT_CPLAYER, MSGL_V, "AutoQ: setting quality to %d.\n", output_quality); + set_video_quality(sh_video, output_quality); + } - // ========== Init display (sh_video->disp_w*sh_video->disp_h/out_fmt) ============ + // ========== Init display (sh_video->disp_w*sh_video->disp_h/out_fmt) ============ - current_module="init_vo"; + current_module = "init_vo"; - return 1; + return 1; err_out: - mpctx->sh_video = mpctx->d_video->sh = NULL; - return 0; + mpctx->sh_video = mpctx->d_video->sh = NULL; + return 0; } static double update_video(int *blit_frame) { - sh_video_t * const sh_video = mpctx->sh_video; + sh_video_t *const sh_video = mpctx->sh_video; //-------------------- Decode a frame: ----------------------- double frame_time; *blit_frame = 0; // Don't blit if we hit EOF if (!correct_pts) { - unsigned char* start=NULL; - void *decoded_frame = NULL; - int drop_frame=0; - int in_size; - int full_frame; - - do { - current_module = "video_read_frame"; - frame_time = sh_video->next_frame_time; - in_size = video_read_frame(sh_video, &sh_video->next_frame_time, - &start, force_fps); + unsigned char *start = NULL; + void *decoded_frame = NULL; + int drop_frame = 0; + int in_size; + int full_frame; + + do { + current_module = "video_read_frame"; + frame_time = sh_video->next_frame_time; + in_size = video_read_frame(sh_video, &sh_video->next_frame_time, + &start, force_fps); #ifdef CONFIG_DVDNAV - /// wait, still frame or EOF - if (mpctx->stream->type == STREAMTYPE_DVDNAV && in_size < 0) { - if (mp_dvdnav_is_eof(mpctx->stream)) + /// wait, still frame or EOF + if (mpctx->stream->type == STREAMTYPE_DVDNAV && in_size < 0) { + if (mp_dvdnav_is_eof(mpctx->stream)) + return -1; + if (mpctx->d_video) + mpctx->d_video->eof = 0; + if (mpctx->d_audio) + mpctx->d_audio->eof = 0; + mpctx->stream->eof = 0; + } else +#endif + if (in_size < 0) return -1; - if (mpctx->d_video) - mpctx->d_video->eof = 0; - if (mpctx->d_audio) - mpctx->d_audio->eof = 0; - mpctx->stream->eof = 0; - } else -#endif - if (in_size < 0) - return -1; - if (in_size > max_framesize) - max_framesize = in_size; // stats - drop_frame = check_framedrop(frame_time); - current_module = "decode_video"; -#ifdef CONFIG_DVDNAV - full_frame = 1; - decoded_frame = mp_dvdnav_restore_smpi(&in_size,&start,decoded_frame); - /// still frame has been reached, no need to decode - if (in_size > 0 && !decoded_frame) -#endif - decoded_frame = decode_video(sh_video, start, in_size, drop_frame, - sh_video->pts, &full_frame); - - if (full_frame) { - sh_video->timer += frame_time; - - // Time-based PTS recalculation. - // The key to maintaining A-V sync is to not touch PTS until the proper frame is reached - if (sh_video->pts != MP_NOPTS_VALUE) { - if (sh_video->last_pts != MP_NOPTS_VALUE) { - double pts = sh_video->last_pts + frame_time; - double ptsdiff = fabs(pts - sh_video->pts); - - // Allow starting PTS recalculation at the appropriate frame only - mpctx->framestep_found |= (ptsdiff <= frame_time * 1.5); - - // replace PTS only if we're not too close and not too far - // and a correctly timed frame has been found, otherwise - // keep pts to eliminate rounding errors or catch up with stream - if (ptsdiff > frame_time * 20) - mpctx->framestep_found = 0; - if (ptsdiff * 10 > frame_time && mpctx->framestep_found) - sh_video->pts = pts; - else - mp_dbg(MSGT_AVSYNC,MSGL_DBG2,"Keeping PTS at %6.2f\n", sh_video->pts); - } - sh_video->last_pts = sh_video->pts; - } - if (mpctx->sh_audio) - mpctx->delay -= frame_time; - // video_read_frame can change fps (e.g. for ASF video) - vo_fps = sh_video->fps; - update_subtitles(sh_video, sh_video->pts, mpctx->d_sub, 0); - update_teletext(sh_video, mpctx->demuxer, 0); - update_osd_msg(); - } + if (in_size > max_framesize) + max_framesize = in_size; // stats + drop_frame = check_framedrop(frame_time); + current_module = "decode_video"; #ifdef CONFIG_DVDNAV - /// save back last still frame for future display - mp_dvdnav_save_smpi(in_size,start,decoded_frame); + full_frame = 1; + decoded_frame = mp_dvdnav_restore_smpi(&in_size, &start, decoded_frame); + /// still frame has been reached, no need to decode + if (in_size > 0 && !decoded_frame) #endif - } while (!full_frame); - - current_module = "filter_video"; - *blit_frame = (decoded_frame && filter_video(sh_video, decoded_frame, - sh_video->pts)); - } - else { - int res = generate_video_frame(sh_video, mpctx->d_video); - if (!res) - return -1; - ((vf_instance_t *)sh_video->vfilter)->control(sh_video->vfilter, - VFCTRL_GET_PTS, &sh_video->pts); - if (sh_video->pts == MP_NOPTS_VALUE) { - mp_msg(MSGT_CPLAYER, MSGL_ERR, "pts after filters MISSING\n"); - sh_video->pts = sh_video->last_pts; - } - if (sh_video->last_pts == MP_NOPTS_VALUE) - sh_video->last_pts= sh_video->pts; - else if (sh_video->last_pts > sh_video->pts) { - // make a guess whether this is some kind of discontinuity - // we should jump along with or some wron timestamps we - // should replace instead + decoded_frame = decode_video(sh_video, start, in_size, drop_frame, + sh_video->pts, &full_frame); + + if (full_frame) { + sh_video->timer += frame_time; + + // Time-based PTS recalculation. + // The key to maintaining A-V sync is to not touch PTS until the proper frame is reached + if (sh_video->pts != MP_NOPTS_VALUE) { + if (sh_video->last_pts != MP_NOPTS_VALUE) { + double pts = sh_video->last_pts + frame_time; + double ptsdiff = fabs(pts - sh_video->pts); + + // Allow starting PTS recalculation at the appropriate frame only + mpctx->framestep_found |= (ptsdiff <= frame_time * 1.5); + + // replace PTS only if we're not too close and not too far + // and a correctly timed frame has been found, otherwise + // keep pts to eliminate rounding errors or catch up with stream + if (ptsdiff > frame_time * 20) + mpctx->framestep_found = 0; + if (ptsdiff * 10 > frame_time && mpctx->framestep_found) + sh_video->pts = pts; + else + mp_dbg(MSGT_AVSYNC, MSGL_DBG2, "Keeping PTS at %6.2f\n", sh_video->pts); + } + sh_video->last_pts = sh_video->pts; + } + if (mpctx->sh_audio) + mpctx->delay -= frame_time; + // video_read_frame can change fps (e.g. for ASF video) + vo_fps = sh_video->fps; + update_subtitles(sh_video, sh_video->pts, mpctx->d_sub, 0); + update_teletext(sh_video, mpctx->demuxer, 0); + update_osd_msg(); + } +#ifdef CONFIG_DVDNAV + /// save back last still frame for future display + mp_dvdnav_save_smpi(in_size, start, decoded_frame); +#endif + } while (!full_frame); + + current_module = "filter_video"; + *blit_frame = (decoded_frame && filter_video(sh_video, decoded_frame, + sh_video->pts)); + } else { + int res = generate_video_frame(sh_video, mpctx->d_video); + if (!res) + return -1; + ((vf_instance_t *)sh_video->vfilter)->control(sh_video->vfilter, + VFCTRL_GET_PTS, &sh_video->pts); + if (sh_video->pts == MP_NOPTS_VALUE) { + mp_msg(MSGT_CPLAYER, MSGL_ERR, "pts after filters MISSING\n"); + sh_video->pts = sh_video->last_pts; + } + if (sh_video->last_pts == MP_NOPTS_VALUE) + sh_video->last_pts = sh_video->pts; + else if (sh_video->last_pts > sh_video->pts) { + // make a guess whether this is some kind of discontinuity + // we should jump along with or some wron timestamps we + // should replace instead if (sh_video->pts < sh_video->last_pts - 20 * sh_video->frametime) - sh_video->last_pts = sh_video->pts; - else - sh_video->pts = sh_video->last_pts + sh_video->frametime; - mp_msg(MSGT_CPLAYER, MSGL_V, "pts value < previous\n"); - } - frame_time = sh_video->pts - sh_video->last_pts; - if (!frame_time) - frame_time = sh_video->frametime; - sh_video->last_pts = sh_video->pts; - sh_video->timer += frame_time; - if(mpctx->sh_audio) - mpctx->delay -= frame_time; - *blit_frame = res > 0; + sh_video->last_pts = sh_video->pts; + else + sh_video->pts = sh_video->last_pts + sh_video->frametime; + mp_msg(MSGT_CPLAYER, MSGL_V, "pts value < previous\n"); + } + frame_time = sh_video->pts - sh_video->last_pts; + if (!frame_time) + frame_time = sh_video->frametime; + sh_video->last_pts = sh_video->pts; + sh_video->timer += frame_time; + if (mpctx->sh_audio) + mpctx->delay -= frame_time; + *blit_frame = res > 0; } return frame_time; } static void pause_loop(void) { - mp_cmd_t* cmd; + mp_cmd_t *cmd; #ifdef CONFIG_STREAM_CACHE int old_cache_fill = stream_cache_size > 0 ? cache_fill_status(mpctx->stream) : 0; #endif @@ -2490,7 +2529,7 @@ static void pause_loop(void) set_osd_msg(OSD_MSG_PAUSE, 1, 0, MSGTR_Paused); update_osd_msg(); } else - mp_msg(MSGT_CPLAYER,MSGL_STATUS,"\n"MSGTR_Paused"\r"); + mp_msg(MSGT_CPLAYER, MSGL_STATUS, "\n"MSGTR_Paused "\r"); mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_PAUSED\n"); } #ifdef CONFIG_GUI @@ -2501,14 +2540,14 @@ static void pause_loop(void) mpctx->video_out->control(VOCTRL_PAUSE, NULL); if (mpctx->audio_out && mpctx->sh_audio) - mpctx->audio_out->pause(); // pause audio, keep data if possible + mpctx->audio_out->pause(); // pause audio, keep data if possible - while ( (cmd = mp_input_get_cmd(20, 1, 1)) == NULL || cmd->pausing == 4) { + while ((cmd = mp_input_get_cmd(20, 1, 1)) == NULL || cmd->pausing == 4) { if (cmd) { - cmd = mp_input_get_cmd(0,1,0); - run_command(mpctx, cmd); - mp_cmd_free(cmd); - continue; + cmd = mp_input_get_cmd(0, 1, 0); + run_command(mpctx, cmd); + mp_cmd_free(cmd); + continue; } if (mpctx->sh_video && mpctx->video_out && vo_config_count) mpctx->video_out->check_events(); @@ -2516,7 +2555,7 @@ static void pause_loop(void) if (use_gui) { guiEventHandling(); guiGetEvent(guiReDraw, NULL); - if (guiIntfStruct.Playing!=2 || (rel_seek_secs || abs_seek_pos)) + if (guiIntfStruct.Playing != 2 || (rel_seek_secs || abs_seek_pos)) break; } #endif @@ -2529,11 +2568,11 @@ static void pause_loop(void) int new_cache_fill = cache_fill_status(mpctx->stream); if (new_cache_fill != old_cache_fill) { if (term_osd && !mpctx->sh_video) { - set_osd_msg(OSD_MSG_PAUSE, 1, 0, MSGTR_Paused" %d%%", + set_osd_msg(OSD_MSG_PAUSE, 1, 0, MSGTR_Paused " %d%%", new_cache_fill); update_osd_msg(); } else - mp_msg(MSGT_CPLAYER, MSGL_STATUS, MSGTR_Paused" %d%%\r", + mp_msg(MSGT_CPLAYER, MSGL_STATUS, MSGTR_Paused " %d%%\r", new_cache_fill); old_cache_fill = new_cache_fill; } @@ -2544,18 +2583,18 @@ static void pause_loop(void) usec_sleep(20000); } if (cmd && cmd->id == MP_CMD_PAUSE) { - cmd = mp_input_get_cmd(0,1,0); + cmd = mp_input_get_cmd(0, 1, 0); mp_cmd_free(cmd); } - mpctx->osd_function=OSD_PLAY; + mpctx->osd_function = OSD_PLAY; if (mpctx->audio_out && mpctx->sh_audio) { if (mpctx->eof) // do not play remaining audio if we e.g. switch to the next file - mpctx->audio_out->reset(); + mpctx->audio_out->reset(); else - mpctx->audio_out->resume(); // resume audio + mpctx->audio_out->resume(); // resume audio } if (mpctx->video_out && mpctx->sh_video && vo_config_count) - mpctx->video_out->control(VOCTRL_RESUME, NULL); // resume video + mpctx->video_out->control(VOCTRL_RESUME, NULL); // resume video (void)GetRelativeTime(); // ignore time that passed during pause #ifdef CONFIG_GUI if (use_gui) { @@ -2586,19 +2625,19 @@ static void edl_update(MPContext *mpctx) } if (!mpctx->sh_video) { - mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_EdlNOsh_video); - free_edl(edl_records); - next_edl_record = NULL; - edl_records = NULL; - return; + mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_EdlNOsh_video); + free_edl(edl_records); + next_edl_record = NULL; + edl_records = NULL; + return; } // This indicates that we need to reset next EDL record according // to new PTS due to seek or other condition if (edl_needs_reset) { - edl_needs_reset = 0; + edl_needs_reset = 0; mpctx->edl_muted = 0; - next_edl_record = edl_records; + next_edl_record = edl_records; // Find next record, also skip immediately if we are already // inside any record @@ -2608,13 +2647,13 @@ static void edl_update(MPContext *mpctx) if (next_edl_record->stop_sec >= mpctx->sh_video->pts) { if (edl_backward) { mpctx->osd_function = OSD_REW; - edl_decision = 1; - abs_seek_pos = 0; - rel_seek_secs = -(mpctx->sh_video->pts - - next_edl_record->start_sec + - edl_backward_delay); + edl_decision = 1; + abs_seek_pos = 0; + rel_seek_secs = -(mpctx->sh_video->pts - + next_edl_record->start_sec + + edl_backward_delay); mp_msg(MSGT_CPLAYER, MSGL_DBG4, "EDL_SKIP: pts [%f], " - "offset [%f], start [%f], stop [%f], length [%f]\n", + "offset [%f], start [%f], stop [%f], length [%f]\n", mpctx->sh_video->pts, rel_seek_secs, next_edl_record->start_sec, next_edl_record->stop_sec, next_edl_record->length_sec); @@ -2627,7 +2666,7 @@ static void edl_update(MPContext *mpctx) mpctx->edl_muted = !mpctx->edl_muted; next_edl_record = next_edl_record->next; - } + } if ((mpctx->user_muted | mpctx->edl_muted) != mpctx->mixer.muted) mixer_mute(&mpctx->mixer); } @@ -2636,27 +2675,25 @@ static void edl_update(MPContext *mpctx) mpctx->sh_video->pts >= next_edl_record->start_sec) { if (next_edl_record->action == EDL_SKIP) { mpctx->osd_function = OSD_FFW; - edl_decision = 1; - abs_seek_pos = 0; - rel_seek_secs = next_edl_record->stop_sec - mpctx->sh_video->pts; + edl_decision = 1; + abs_seek_pos = 0; + rel_seek_secs = next_edl_record->stop_sec - mpctx->sh_video->pts; mp_msg(MSGT_CPLAYER, MSGL_DBG4, "EDL_SKIP: pts [%f], offset [%f], " - "start [%f], stop [%f], length [%f]\n", + "start [%f], stop [%f], length [%f]\n", mpctx->sh_video->pts, rel_seek_secs, next_edl_record->start_sec, next_edl_record->stop_sec, next_edl_record->length_sec); - } - else if (next_edl_record->action == EDL_MUTE) { + } else if (next_edl_record->action == EDL_MUTE) { mpctx->edl_muted = !mpctx->edl_muted; if ((mpctx->user_muted | mpctx->edl_muted) != mpctx->mixer.muted) mixer_mute(&mpctx->mixer); mp_msg(MSGT_CPLAYER, MSGL_DBG4, "EDL_MUTE: [%f]\n", - next_edl_record->start_sec ); + next_edl_record->start_sec); } next_edl_record = next_edl_record->next; } } - // style & SEEK_ABSOLUTE == 0 means seek relative to current position, == 1 means absolute // style & SEEK_FACTOR == 0 means amount in seconds, == 2 means fraction of file length // return -1 if seek failed (non-seekable stream?), 0 otherwise @@ -2664,35 +2701,35 @@ static int seek(MPContext *mpctx, double amount, int style) { current_module = "seek"; if (demux_seek(mpctx->demuxer, amount, audio_delay, style) == 0) - return -1; + return -1; mpctx->startup_decode_retry = DEFAULT_STARTUP_DECODE_RETRY; if (mpctx->sh_video) { - current_module = "seek_video_reset"; - if (vo_config_count) - mpctx->video_out->control(VOCTRL_RESET, NULL); - mpctx->num_buffered_frames = 0; - mpctx->delay = 0; - mpctx->time_frame = 0; - mpctx->framestep_found = 0; - // Not all demuxers set d_video->pts during seek, so this value - // (which is used by at least vobsub and edl code below) may - // be completely wrong (probably 0). - mpctx->sh_video->pts = mpctx->d_video->pts; - update_subtitles(mpctx->sh_video, mpctx->sh_video->pts, mpctx->d_sub, 1); - update_teletext(mpctx->sh_video, mpctx->demuxer, 1); + current_module = "seek_video_reset"; + if (vo_config_count) + mpctx->video_out->control(VOCTRL_RESET, NULL); + mpctx->num_buffered_frames = 0; + mpctx->delay = 0; + mpctx->time_frame = 0; + mpctx->framestep_found = 0; + // Not all demuxers set d_video->pts during seek, so this value + // (which is used by at least vobsub and edl code below) may + // be completely wrong (probably 0). + mpctx->sh_video->pts = mpctx->d_video->pts; + update_subtitles(mpctx->sh_video, mpctx->sh_video->pts, mpctx->d_sub, 1); + update_teletext(mpctx->sh_video, mpctx->demuxer, 1); } if (mpctx->sh_audio) { - current_module = "seek_audio_reset"; - mpctx->audio_out->reset(); // stop audio, throwing away buffered data - if (!mpctx->sh_video) - update_subtitles(NULL, mpctx->sh_audio->pts, mpctx->d_sub, 1); + current_module = "seek_audio_reset"; + mpctx->audio_out->reset(); // stop audio, throwing away buffered data + if (!mpctx->sh_video) + update_subtitles(NULL, mpctx->sh_audio->pts, mpctx->d_sub, 1); } if (vo_vobsub && mpctx->sh_video) { - current_module = "seek_vobsub_reset"; - vobsub_seek(vo_vobsub, mpctx->sh_video->pts); + current_module = "seek_vobsub_reset"; + vobsub_seek(vo_vobsub, mpctx->sh_video->pts); } #ifdef CONFIG_ASS @@ -2702,13 +2739,15 @@ static int seek(MPContext *mpctx, double amount, int style) if (edl_records) { edl_needs_reset = 1; - edl_backward = amount < 0; + edl_backward = amount < 0; } - c_total = 0; + c_total = 0; max_pts_correction = 0.1; - audio_time_usage = 0; video_time_usage = 0; vout_time_usage = 0; - drop_frame_cnt = 0; + audio_time_usage = 0; + video_time_usage = 0; + vout_time_usage = 0; + drop_frame_cnt = 0; current_module = NULL; return 0; @@ -2717,64 +2756,63 @@ static int seek(MPContext *mpctx, double amount, int style) /* This preprocessor directive is a hack to generate a mplayer-nomain.o object * file for some tools to link against. */ #ifndef DISABLE_MAIN -int main(int argc,char* argv[]){ - - +int main(int argc, char *argv[]) +{ // movie info: /* Flag indicating whether MPlayer should exit without playing anything. */ -int opt_exit = 0; -int i; + int opt_exit = 0; + int i; -int gui_no_filename=0; + int gui_no_filename = 0; - common_preinit(); + common_preinit(); - // Create the config context and register the options - mconfig = m_config_new(); - m_config_register_options(mconfig,mplayer_opts); - m_config_register_options(mconfig, common_opts); - mp_input_register_options(mconfig); + // Create the config context and register the options + mconfig = m_config_new(); + m_config_register_options(mconfig, mplayer_opts); + m_config_register_options(mconfig, common_opts); + mp_input_register_options(mconfig); - // Preparse the command line - m_config_preparse_command_line(mconfig,argc,argv); + // Preparse the command line + m_config_preparse_command_line(mconfig, argc, argv); #ifdef CONFIG_TV - stream_tv_defaults.immediate = 1; + stream_tv_defaults.immediate = 1; #endif - if (argc > 1 && argv[1] && - (!strcmp(argv[1], "-gui") || !strcmp(argv[1], "-nogui"))) { - use_gui = !strcmp(argv[1], "-gui"); - } else - if (argv[0] && strstr(mp_basename(argv[0]), "gmplayer")) { - use_gui=1; - } + if (argc > 1 && argv[1] && + (!strcmp(argv[1], "-gui") || !strcmp(argv[1], "-nogui"))) { + use_gui = !strcmp(argv[1], "-gui"); + } else if (argv[0] && strstr(mp_basename(argv[0]), "gmplayer")) { + use_gui = 1; + } parse_cfgfiles(mconfig); #ifdef CONFIG_GUI - if ( use_gui ) cfg_read(); + if (use_gui) + cfg_read(); #endif mpctx->playtree = m_config_parse_mp_command_line(mconfig, argc, argv); - if(mpctx->playtree == NULL) - opt_exit = 1; + if (mpctx->playtree == NULL) + opt_exit = 1; else { - mpctx->playtree = play_tree_cleanup(mpctx->playtree); - if(mpctx->playtree) { - mpctx->playtree_iter = play_tree_iter_new(mpctx->playtree,mconfig); - if(mpctx->playtree_iter) { - if(play_tree_iter_step(mpctx->playtree_iter,0,0) != PLAY_TREE_ITER_ENTRY) { - play_tree_iter_free(mpctx->playtree_iter); - mpctx->playtree_iter = NULL; - } - filename = play_tree_iter_get_file(mpctx->playtree_iter,1); - } - } + mpctx->playtree = play_tree_cleanup(mpctx->playtree); + if (mpctx->playtree) { + mpctx->playtree_iter = play_tree_iter_new(mpctx->playtree, mconfig); + if (mpctx->playtree_iter) { + if (play_tree_iter_step(mpctx->playtree_iter, 0, 0) != PLAY_TREE_ITER_ENTRY) { + play_tree_iter_free(mpctx->playtree_iter); + mpctx->playtree_iter = NULL; + } + filename = play_tree_iter_get_file(mpctx->playtree_iter, 1); + } + } } - print_version("MPlayer"); + print_version("MPlayer"); #if (defined(__MINGW32__) || defined(__CYGWIN__)) && defined(CONFIG_GUI) void *runningmplayer = FindWindow("MPlayer GUI for Windows", "MPlayer for Windows"); if (runningmplayer && filename && use_gui) { @@ -2783,7 +2821,7 @@ int gui_no_filename=0; char *filepart = filename; if (GetFullPathName(filename, MAX_PATH, file, &filepart)) { csData.dwData = 0; - csData.cbData = strlen(file)*2; + csData.cbData = strlen(file) * 2; csData.lpData = file; SendMessage(runningmplayer, WM_COPYDATA, (WPARAM)runningmplayer, (LPARAM)&csData); } @@ -2793,314 +2831,314 @@ int gui_no_filename=0; exit_player_with_rc(EXIT_NONE, 0); #ifndef CONFIG_GUI - if(use_gui){ - mp_msg(MSGT_CPLAYER,MSGL_WARN,MSGTR_NoGui); - use_gui=0; + if (use_gui) { + mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_NoGui); + use_gui = 0; } #else #if !defined(__MINGW32__) && !defined(__CYGWIN__) - if(use_gui && !vo_init()){ - mp_msg(MSGT_CPLAYER,MSGL_WARN,MSGTR_GuiNeedsX); - use_gui=0; - } -#endif - if (use_gui && mpctx->playtree_iter){ - char cwd[PATH_MAX+2]; - // Free Playtree and Playtree-Iter as it's not used by the GUI. - play_tree_iter_free(mpctx->playtree_iter); - mpctx->playtree_iter=NULL; - - if (getcwd(cwd, PATH_MAX) != (char *)NULL) - { - strcat(cwd, "/"); - // Prefix relative paths with current working directory - play_tree_add_bpf(mpctx->playtree, cwd); - } - // Import initital playtree into GUI. - import_initial_playtree_into_gui(mpctx->playtree, mconfig, enqueue); + if (use_gui && !vo_init()) { + mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_GuiNeedsX); + use_gui = 0; + } +#endif + if (use_gui && mpctx->playtree_iter) { + char cwd[PATH_MAX + 2]; + // Free Playtree and Playtree-Iter as it's not used by the GUI. + play_tree_iter_free(mpctx->playtree_iter); + mpctx->playtree_iter = NULL; + + if (getcwd(cwd, PATH_MAX) != (char *)NULL) { + strcat(cwd, "/"); + // Prefix relative paths with current working directory + play_tree_add_bpf(mpctx->playtree, cwd); + } + // Import initital playtree into GUI. + import_initial_playtree_into_gui(mpctx->playtree, mconfig, enqueue); } #endif /* CONFIG_GUI */ - if(video_driver_list && strcmp(video_driver_list[0],"help")==0){ - list_video_out(); - opt_exit = 1; + if (video_driver_list && strcmp(video_driver_list[0], "help") == 0) { + list_video_out(); + opt_exit = 1; } - if(audio_driver_list && strcmp(audio_driver_list[0],"help")==0){ - list_audio_out(); - opt_exit = 1; + if (audio_driver_list && strcmp(audio_driver_list[0], "help") == 0) { + list_audio_out(); + opt_exit = 1; } - if(audio_codec_list && strcmp(audio_codec_list[0],"help")==0){ - mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_AvailableAudioCodecs); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_CODECS\n"); - list_codecs(1); - mp_msg(MSGT_FIXME, MSGL_FIXME, "\n"); - opt_exit = 1; + if (audio_codec_list && strcmp(audio_codec_list[0], "help") == 0) { + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_AvailableAudioCodecs); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_CODECS\n"); + list_codecs(1); + mp_msg(MSGT_FIXME, MSGL_FIXME, "\n"); + opt_exit = 1; } - if(video_codec_list && strcmp(video_codec_list[0],"help")==0){ - mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_AvailableVideoCodecs); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_CODECS\n"); - list_codecs(0); - mp_msg(MSGT_FIXME, MSGL_FIXME, "\n"); - opt_exit = 1; + if (video_codec_list && strcmp(video_codec_list[0], "help") == 0) { + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_AvailableVideoCodecs); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_CODECS\n"); + list_codecs(0); + mp_msg(MSGT_FIXME, MSGL_FIXME, "\n"); + opt_exit = 1; } - if(video_fm_list && strcmp(video_fm_list[0],"help")==0){ - vfm_help(); - mp_msg(MSGT_FIXME, MSGL_FIXME, "\n"); - opt_exit = 1; + if (video_fm_list && strcmp(video_fm_list[0], "help") == 0) { + vfm_help(); + mp_msg(MSGT_FIXME, MSGL_FIXME, "\n"); + opt_exit = 1; } - if(audio_fm_list && strcmp(audio_fm_list[0],"help")==0){ - afm_help(); - mp_msg(MSGT_FIXME, MSGL_FIXME, "\n"); - opt_exit = 1; + if (audio_fm_list && strcmp(audio_fm_list[0], "help") == 0) { + afm_help(); + mp_msg(MSGT_FIXME, MSGL_FIXME, "\n"); + opt_exit = 1; } - if(af_cfg.list && strcmp(af_cfg.list[0],"help")==0){ - af_help(); - printf("\n"); - opt_exit = 1; + if (af_cfg.list && strcmp(af_cfg.list[0], "help") == 0) { + af_help(); + printf("\n"); + opt_exit = 1; } #ifdef CONFIG_X11 - if(vo_fstype_list && strcmp(vo_fstype_list[0],"help")==0){ - fstype_help(); - mp_msg(MSGT_FIXME, MSGL_FIXME, "\n"); - opt_exit = 1; + if (vo_fstype_list && strcmp(vo_fstype_list[0], "help") == 0) { + fstype_help(); + mp_msg(MSGT_FIXME, MSGL_FIXME, "\n"); + opt_exit = 1; } #endif - if((demuxer_name && strcmp(demuxer_name,"help")==0) || - (audio_demuxer_name && strcmp(audio_demuxer_name,"help")==0) || - (sub_demuxer_name && strcmp(sub_demuxer_name,"help")==0)){ - demuxer_help(); - mp_msg(MSGT_CPLAYER, MSGL_INFO, "\n"); - opt_exit = 1; + if ((demuxer_name && strcmp(demuxer_name, "help") == 0) || + (audio_demuxer_name && strcmp(audio_demuxer_name, "help") == 0) || + (sub_demuxer_name && strcmp(sub_demuxer_name, "help") == 0)) { + demuxer_help(); + mp_msg(MSGT_CPLAYER, MSGL_INFO, "\n"); + opt_exit = 1; } - if(list_properties) { - property_print_help(); - opt_exit = 1; + if (list_properties) { + property_print_help(); + opt_exit = 1; } - if(opt_exit) - exit_player(EXIT_NONE); + if (opt_exit) + exit_player(EXIT_NONE); if (player_idle_mode && use_gui) { mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_NoIdleAndGui); exit_player_with_rc(EXIT_NONE, 1); } - if(!filename && !player_idle_mode){ - if(!use_gui){ - // no file/vcd/dvd -> show HELP: - mp_msg(MSGT_CPLAYER, MSGL_INFO, help_text); - exit_player_with_rc(EXIT_NONE, 0); - } else gui_no_filename=1; + if (!filename && !player_idle_mode) { + if (!use_gui) { + // no file/vcd/dvd -> show HELP: + mp_msg(MSGT_CPLAYER, MSGL_INFO, help_text); + exit_player_with_rc(EXIT_NONE, 0); + } else + gui_no_filename = 1; } /* Display what configure line was used */ mp_msg(MSGT_CPLAYER, MSGL_V, "Configuration: " CONFIGURATION "\n"); // Many users forget to include command line in bugreports... - if( mp_msg_test(MSGT_CPLAYER,MSGL_V) ){ - mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_CommandLine); - for(i=1;i<argc;i++)mp_msg(MSGT_CPLAYER, MSGL_INFO," '%s'",argv[i]); - mp_msg(MSGT_CPLAYER, MSGL_INFO, "\n"); + if (mp_msg_test(MSGT_CPLAYER, MSGL_V)) { + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_CommandLine); + for (i = 1; i < argc; i++) + mp_msg(MSGT_CPLAYER, MSGL_INFO, " '%s'", argv[i]); + mp_msg(MSGT_CPLAYER, MSGL_INFO, "\n"); } //------ load global data first ------ #ifdef HAVE_RTC - if(!nortc) - { - // seteuid(0); /* Can't hurt to try to get root here */ - if ((rtc_fd = open(rtc_device ? rtc_device : "/dev/rtc", O_RDONLY)) < 0) - mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_RTCDeviceNotOpenable, - rtc_device ? rtc_device : "/dev/rtc", strerror(errno)); - else { - unsigned long irqp = 1024; /* 512 seemed OK. 128 is jerky. */ - - if (ioctl(rtc_fd, RTC_IRQP_SET, irqp) < 0) { - mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_LinuxRTCInitErrorIrqpSet, irqp, strerror(errno)); - mp_msg(MSGT_CPLAYER, MSGL_HINT, MSGTR_IncreaseRTCMaxUserFreq, irqp); - close (rtc_fd); - rtc_fd = -1; - } else if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) { - /* variable only by the root */ - mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_LinuxRTCInitErrorPieOn, strerror(errno)); - close (rtc_fd); - rtc_fd = -1; - } else - mp_msg(MSGT_CPLAYER, MSGL_V, MSGTR_UsingRTCTiming, irqp); - } - } + if (!nortc) { + // seteuid(0); /* Can't hurt to try to get root here */ + if ((rtc_fd = open(rtc_device ? rtc_device : "/dev/rtc", O_RDONLY)) < 0) + mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_RTCDeviceNotOpenable, + rtc_device ? rtc_device : "/dev/rtc", strerror(errno)); + else { + unsigned long irqp = 1024; /* 512 seemed OK. 128 is jerky. */ + + if (ioctl(rtc_fd, RTC_IRQP_SET, irqp) < 0) { + mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_LinuxRTCInitErrorIrqpSet, irqp, strerror(errno)); + mp_msg(MSGT_CPLAYER, MSGL_HINT, MSGTR_IncreaseRTCMaxUserFreq, irqp); + close(rtc_fd); + rtc_fd = -1; + } else if (ioctl(rtc_fd, RTC_PIE_ON, 0) < 0) { + /* variable only by the root */ + mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_LinuxRTCInitErrorPieOn, strerror(errno)); + close(rtc_fd); + rtc_fd = -1; + } else + mp_msg(MSGT_CPLAYER, MSGL_V, MSGTR_UsingRTCTiming, irqp); + } + } #ifdef CONFIG_GUI // breaks DGA and SVGAlib and VESA drivers: --A'rpi // and now ? -- Pontscho - if(use_gui) setuid( getuid() ); // strongly test, please check this. + if (use_gui) + setuid(getuid()); // strongly test, please check this. #endif - if(rtc_fd<0) + if (rtc_fd < 0) #endif /* HAVE_RTC */ - mp_msg(MSGT_CPLAYER, MSGL_V, "Using %s timing\n", - softsleep?"software":timer_name); + mp_msg(MSGT_CPLAYER, MSGL_V, "Using %s timing\n", + softsleep ? "software" : timer_name); #ifdef HAVE_TERMCAP - if ( !use_gui ) load_termcap(NULL); // load key-codes + if (!use_gui) + load_termcap(NULL); // load key-codes #endif // ========== Init keyboard FIFO (connection to libvo) ============ // Init input system -current_module = "init_input"; -mp_input_init(); - mp_input_add_key_fd(-1,0,mplayer_get_key,NULL); -if(slave_mode) - mp_input_add_cmd_fd(0,USE_SELECT,MP_INPUT_SLAVE_CMD_FUNC,NULL); -else if(!noconsolecontrols) - mp_input_add_event_fd(0, getch2); + current_module = "init_input"; + mp_input_init(); + mp_input_add_key_fd(-1, 0, mplayer_get_key, NULL); + if (slave_mode) + mp_input_add_cmd_fd(0, USE_SELECT, MP_INPUT_SLAVE_CMD_FUNC, NULL); + else if (!noconsolecontrols) + mp_input_add_event_fd(0, getch2); // Set the libstream interrupt callback -stream_set_interrupt_callback(mp_input_check_interrupt); + stream_set_interrupt_callback(mp_input_check_interrupt); #ifdef CONFIG_MENU - if(use_menu) { - if(menu_cfg && menu_init(mpctx, menu_cfg)) - mp_msg(MSGT_CPLAYER, MSGL_V, MSGTR_MenuInitialized, menu_cfg); - else { - menu_cfg = get_path("menu.conf"); - if(menu_init(mpctx, menu_cfg)) - mp_msg(MSGT_CPLAYER, MSGL_V, MSGTR_MenuInitialized, menu_cfg); - else { - if(menu_init(mpctx, MPLAYER_CONFDIR "/menu.conf")) - mp_msg(MSGT_CPLAYER, MSGL_V, MSGTR_MenuInitialized, MPLAYER_CONFDIR"/menu.conf"); - else { - mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_MenuInitFailed); - use_menu = 0; - } - } - } - } -#endif - -initialized_flags|=INITIALIZED_INPUT; -current_module = NULL; - - /// Catch signals + if (use_menu) { + if (menu_cfg && menu_init(mpctx, menu_cfg)) + mp_msg(MSGT_CPLAYER, MSGL_V, MSGTR_MenuInitialized, menu_cfg); + else { + menu_cfg = get_path("menu.conf"); + if (menu_init(mpctx, menu_cfg)) + mp_msg(MSGT_CPLAYER, MSGL_V, MSGTR_MenuInitialized, menu_cfg); + else { + if (menu_init(mpctx, MPLAYER_CONFDIR "/menu.conf")) + mp_msg(MSGT_CPLAYER, MSGL_V, MSGTR_MenuInitialized, MPLAYER_CONFDIR "/menu.conf"); + else { + mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_MenuInitFailed); + use_menu = 0; + } + } + } + } +#endif + + initialized_flags |= INITIALIZED_INPUT; + current_module = NULL; + + /// Catch signals #ifndef __MINGW32__ - signal(SIGCHLD,child_sighandler); + signal(SIGCHLD, child_sighandler); #endif #ifdef CONFIG_CRASH_DEBUG - prog_path = argv[0]; + prog_path = argv[0]; #endif - //========= Catch terminate signals: ================ - // terminate requests: - signal(SIGTERM,exit_sighandler); // kill - signal(SIGHUP,exit_sighandler); // kill -HUP / xterm closed + //========= Catch terminate signals: ================ + // terminate requests: + signal(SIGTERM, exit_sighandler); // kill + signal(SIGHUP, exit_sighandler); // kill -HUP / xterm closed - signal(SIGINT,exit_sighandler); // Interrupt from keyboard + signal(SIGINT, exit_sighandler); // Interrupt from keyboard - signal(SIGQUIT,exit_sighandler); // Quit from keyboard - signal(SIGPIPE,exit_sighandler); // Some window managers cause this + signal(SIGQUIT, exit_sighandler); // Quit from keyboard + signal(SIGPIPE, exit_sighandler); // Some window managers cause this #ifdef CONFIG_SIGHANDLER - // fatal errors: - signal(SIGBUS,exit_sighandler); // bus error - signal(SIGSEGV,exit_sighandler); // segfault - signal(SIGILL,exit_sighandler); // illegal instruction - signal(SIGFPE,exit_sighandler); // floating point exc. - signal(SIGABRT,exit_sighandler); // abort() + // fatal errors: + signal(SIGBUS, exit_sighandler); // bus error + signal(SIGSEGV, exit_sighandler); // segfault + signal(SIGILL, exit_sighandler); // illegal instruction + signal(SIGFPE, exit_sighandler); // floating point exc. + signal(SIGABRT, exit_sighandler); // abort() #ifdef CONFIG_CRASH_DEBUG - if (crash_debug) - signal(SIGTRAP,exit_sighandler); + if (crash_debug) + signal(SIGTRAP, exit_sighandler); #endif #endif #ifdef CONFIG_GUI - if(use_gui){ - guiInit(); - guiGetEvent(guiSetContext, mpctx); - initialized_flags|=INITIALIZED_GUI; - guiGetEvent( guiCEvent,(char *)((gui_no_filename) ? 0 : 1) ); - } + if (use_gui) { + guiInit(); + guiGetEvent(guiSetContext, mpctx); + initialized_flags |= INITIALIZED_GUI; + guiGetEvent(guiCEvent, (char *)((gui_no_filename) ? 0 : 1)); + } #endif // ******************* Now, let's see the per-file stuff ******************** play_next_file: - // init global sub numbers - mpctx->global_sub_size = 0; - memset(mpctx->sub_counts, 0, sizeof(mpctx->sub_counts)); + // init global sub numbers + mpctx->global_sub_size = 0; + memset(mpctx->sub_counts, 0, sizeof(mpctx->sub_counts)); - if (filename) { - load_per_protocol_config (mconfig, filename); - load_per_extension_config (mconfig, filename); - load_per_file_config (mconfig, filename); - } + if (filename) { + load_per_protocol_config(mconfig, filename); + load_per_extension_config(mconfig, filename); + load_per_file_config(mconfig, filename); + } - if (video_driver_list) - load_per_output_config (mconfig, PROFILE_CFG_VO, video_driver_list[0]); - if (audio_driver_list) - load_per_output_config (mconfig, PROFILE_CFG_AO, audio_driver_list[0]); + if (video_driver_list) + load_per_output_config(mconfig, PROFILE_CFG_VO, video_driver_list[0]); + if (audio_driver_list) + load_per_output_config(mconfig, PROFILE_CFG_AO, audio_driver_list[0]); // We must enable getch2 here to be able to interrupt network connection // or cache filling -if(!noconsolecontrols && !slave_mode){ - if(initialized_flags&INITIALIZED_GETCH2) - mp_msg(MSGT_CPLAYER,MSGL_WARN,MSGTR_Getch2InitializedTwice); - else - getch2_enable(); // prepare stdin for hotkeys... - initialized_flags|=INITIALIZED_GETCH2; - mp_msg(MSGT_CPLAYER,MSGL_DBG2,"\n[[[init getch2]]]\n"); -} + if (!noconsolecontrols && !slave_mode) { + if (initialized_flags & INITIALIZED_GETCH2) + mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_Getch2InitializedTwice); + else + getch2_enable(); // prepare stdin for hotkeys... + initialized_flags |= INITIALIZED_GETCH2; + mp_msg(MSGT_CPLAYER, MSGL_DBG2, "\n[[[init getch2]]]\n"); + } // =================== GUI idle loop (STOP state) =========================== #ifdef CONFIG_GUI - if ( use_gui ) { - mpctx->file_format=DEMUXER_TYPE_UNKNOWN; - guiGetEvent( guiSetDefaults,0 ); - while ( guiIntfStruct.Playing != 1 ) - { - mp_cmd_t* cmd; - usec_sleep(20000); - guiEventHandling(); - guiGetEvent( guiReDraw,NULL ); - if ( (cmd = mp_input_get_cmd(0,0,0)) != NULL) { - guiGetEvent(guiIEvent, (char *)cmd->id); - mp_cmd_free(cmd); - } - } - guiGetEvent( guiSetParameters,NULL ); - if ( guiIntfStruct.StreamType == STREAMTYPE_STREAM ) - { - play_tree_t * entry = play_tree_new(); - play_tree_add_file( entry,guiIntfStruct.Filename ); - if ( mpctx->playtree ) play_tree_free_list( mpctx->playtree->child,1 ); - else mpctx->playtree=play_tree_new(); - play_tree_set_child( mpctx->playtree,entry ); - if(mpctx->playtree) - { - mpctx->playtree_iter = play_tree_iter_new(mpctx->playtree,mconfig); - if(mpctx->playtree_iter) - { - if(play_tree_iter_step(mpctx->playtree_iter,0,0) != PLAY_TREE_ITER_ENTRY) - { - play_tree_iter_free(mpctx->playtree_iter); - mpctx->playtree_iter = NULL; - } - filename = play_tree_iter_get_file(mpctx->playtree_iter,1); - } - } - } + if (use_gui) { + mpctx->file_format = DEMUXER_TYPE_UNKNOWN; + guiGetEvent(guiSetDefaults, 0); + while (guiIntfStruct.Playing != 1) { + mp_cmd_t *cmd; + usec_sleep(20000); + guiEventHandling(); + guiGetEvent(guiReDraw, NULL); + if ((cmd = mp_input_get_cmd(0, 0, 0)) != NULL) { + guiGetEvent(guiIEvent, (char *)cmd->id); + mp_cmd_free(cmd); + } + } + guiGetEvent(guiSetParameters, NULL); + if (guiIntfStruct.StreamType == STREAMTYPE_STREAM) { + play_tree_t *entry = play_tree_new(); + play_tree_add_file(entry, guiIntfStruct.Filename); + if (mpctx->playtree) + play_tree_free_list(mpctx->playtree->child, 1); + else + mpctx->playtree = play_tree_new(); + play_tree_set_child(mpctx->playtree, entry); + if (mpctx->playtree) { + mpctx->playtree_iter = play_tree_iter_new(mpctx->playtree, mconfig); + if (mpctx->playtree_iter) { + if (play_tree_iter_step(mpctx->playtree_iter, 0, 0) != PLAY_TREE_ITER_ENTRY) { + play_tree_iter_free(mpctx->playtree_iter); + mpctx->playtree_iter = NULL; + } + filename = play_tree_iter_get_file(mpctx->playtree_iter, 1); + } + } + } } #endif /* CONFIG_GUI */ -while (player_idle_mode && !filename) { - play_tree_t * entry = NULL; - mp_cmd_t * cmd; - if (mpctx->video_out && vo_config_count) - mpctx->video_out->control(VOCTRL_PAUSE, NULL); - while (!(cmd = mp_input_get_cmd(0,1,0))) { // wait for command - if (mpctx->video_out && vo_config_count) mpctx->video_out->check_events(); - usec_sleep(20000); - } - switch (cmd->id) { + while (player_idle_mode && !filename) { + play_tree_t *entry = NULL; + mp_cmd_t *cmd; + if (mpctx->video_out && vo_config_count) + mpctx->video_out->control(VOCTRL_PAUSE, NULL); + while (!(cmd = mp_input_get_cmd(0, 1, 0))) { // wait for command + if (mpctx->video_out && vo_config_count) + mpctx->video_out->check_events(); + usec_sleep(20000); + } + switch (cmd->id) { case MP_CMD_LOADFILE: // prepare a tree entry with the new filename entry = play_tree_new(); @@ -3111,7 +3149,7 @@ while (player_idle_mode && !filename) { entry = parse_playlist_file(cmd->args[0].v.s); break; case MP_CMD_QUIT: - exit_player_with_rc(EXIT_QUIT, (cmd->nargs > 0)? cmd->args[0].v.i : 0); + exit_player_with_rc(EXIT_QUIT, (cmd->nargs > 0) ? cmd->args[0].v.i : 0); break; case MP_CMD_VO_FULLSCREEN: case MP_CMD_GET_PROPERTY: @@ -3119,42 +3157,45 @@ while (player_idle_mode && !filename) { case MP_CMD_STEP_PROPERTY: run_command(mpctx, cmd); break; - } + } - mp_cmd_free(cmd); + mp_cmd_free(cmd); - if (entry) { // user entered a command that gave a valid entry - if (mpctx->playtree) // the playtree is always a node with one child. let's clear it - play_tree_free_list(mpctx->playtree->child, 1); - else mpctx->playtree=play_tree_new(); // .. or make a brand new playtree + if (entry) { // user entered a command that gave a valid entry + if (mpctx->playtree) // the playtree is always a node with one child. let's clear it + play_tree_free_list(mpctx->playtree->child, 1); + else + mpctx->playtree = play_tree_new(); // .. or make a brand new playtree - if (!mpctx->playtree) continue; // couldn't make playtree! wait for next command + if (!mpctx->playtree) + continue; // couldn't make playtree! wait for next command - play_tree_set_child(mpctx->playtree, entry); + play_tree_set_child(mpctx->playtree, entry); - /* Make iterator start at the top the of tree. */ - mpctx->playtree_iter = play_tree_iter_new(mpctx->playtree, mconfig); - if (!mpctx->playtree_iter) continue; + /* Make iterator start at the top the of tree. */ + mpctx->playtree_iter = play_tree_iter_new(mpctx->playtree, mconfig); + if (!mpctx->playtree_iter) + continue; - // find the first real item in the tree - if (play_tree_iter_step(mpctx->playtree_iter,0,0) != PLAY_TREE_ITER_ENTRY) { - // no items! - play_tree_iter_free(mpctx->playtree_iter); - mpctx->playtree_iter = NULL; - continue; // wait for next command + // find the first real item in the tree + if (play_tree_iter_step(mpctx->playtree_iter, 0, 0) != PLAY_TREE_ITER_ENTRY) { + // no items! + play_tree_iter_free(mpctx->playtree_iter); + mpctx->playtree_iter = NULL; + continue; // wait for next command + } + filename = play_tree_iter_get_file(mpctx->playtree_iter, 1); } - filename = play_tree_iter_get_file(mpctx->playtree_iter, 1); } -} //--------------------------------------------------------------------------- if (mpctx->video_out && vo_config_count) mpctx->video_out->control(VOCTRL_RESUME, NULL); - if(filename) { - mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_Playing, - filename_recode(filename)); - if(use_filename_title && vo_wintitle == NULL) + if (filename) { + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_Playing, + filename_recode(filename)); + if (use_filename_title && vo_wintitle == NULL) vo_wintitle = strdup(mp_basename(filename)); } @@ -3171,582 +3212,614 @@ while (player_idle_mode && !filename) { //==================== Open VOB-Sub ============================ - current_module="vobsub"; + current_module = "vobsub"; load_vob_subtitle(filename, spudec_ifo, &vo_spudec, add_vob_subtitle); - if(vo_vobsub){ - initialized_flags|=INITIALIZED_VOBSUB; - vobsub_set_from_lang(vo_vobsub, dvdsub_lang); - mp_property_do("sub_forced_only", M_PROPERTY_SET, &forced_subs_only, mpctx); + if (vo_vobsub) { + initialized_flags |= INITIALIZED_VOBSUB; + vobsub_set_from_lang(vo_vobsub, dvdsub_lang); + mp_property_do("sub_forced_only", M_PROPERTY_SET, &forced_subs_only, mpctx); - // setup global sub numbering - mpctx->sub_counts[SUB_SOURCE_VOBSUB] = vobsub_get_indexes_count(vo_vobsub); + // setup global sub numbering + mpctx->sub_counts[SUB_SOURCE_VOBSUB] = vobsub_get_indexes_count(vo_vobsub); } //============ Open & Sync STREAM --- fork cache2 ==================== - mpctx->stream=NULL; - mpctx->demuxer=NULL; - if (mpctx->d_audio) { - //free_demuxer_stream(mpctx->d_audio); - mpctx->d_audio=NULL; - } - if (mpctx->d_video) { - //free_demuxer_stream(d_video); - mpctx->d_video=NULL; - } - mpctx->sh_audio=NULL; - mpctx->sh_video=NULL; - - current_module="open_stream"; - mpctx->stream=open_stream(filename,0,&mpctx->file_format); - if(!mpctx->stream) { // error... - mpctx->eof = libmpdemux_was_interrupted(PT_NEXT_ENTRY); - goto goto_next_file; - } - initialized_flags|=INITIALIZED_STREAM; + mpctx->stream = NULL; + mpctx->demuxer = NULL; + if (mpctx->d_audio) { + //free_demuxer_stream(mpctx->d_audio); + mpctx->d_audio = NULL; + } + if (mpctx->d_video) { + //free_demuxer_stream(d_video); + mpctx->d_video = NULL; + } + mpctx->sh_audio = NULL; + mpctx->sh_video = NULL; + + current_module = "open_stream"; + mpctx->stream = open_stream(filename, 0, &mpctx->file_format); + if (!mpctx->stream) { // error... + mpctx->eof = libmpdemux_was_interrupted(PT_NEXT_ENTRY); + goto goto_next_file; + } + initialized_flags |= INITIALIZED_STREAM; #ifdef CONFIG_GUI - if ( use_gui ) guiGetEvent( guiSetStream,(char *)mpctx->stream ); -#endif - - if(mpctx->file_format == DEMUXER_TYPE_PLAYLIST) { - play_tree_t* entry; - // Handle playlist - current_module="handle_playlist"; - mp_msg(MSGT_CPLAYER,MSGL_V,"Parsing playlist %s...\n", - filename_recode(filename)); - entry = parse_playtree(mpctx->stream,0); - mpctx->eof=playtree_add_playlist(entry); - goto goto_next_file; - } - mpctx->stream->start_pos+=seek_to_byte; - -if(stream_dump_type==5){ - unsigned char buf[4096]; - int len; - FILE *f; - current_module="dumpstream"; - stream_reset(mpctx->stream); - stream_seek(mpctx->stream,mpctx->stream->start_pos); - f=fopen(stream_dump_name,"wb"); - if(!f){ - mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_CantOpenDumpfile); - exit_player(EXIT_ERROR); - } - if (dvd_chapter > 1) { - int chapter = dvd_chapter - 1; - stream_control(mpctx->stream, STREAM_CTRL_SEEK_TO_CHAPTER, &chapter); - } - while(!mpctx->stream->eof && !async_quit_request){ - len=stream_read(mpctx->stream,buf,4096); - if(len>0) { - if(fwrite(buf,len,1,f) != 1) { - mp_msg(MSGT_MENCODER,MSGL_FATAL,MSGTR_ErrorWritingFile,stream_dump_name); - exit_player(EXIT_ERROR); - } - } - if(dvd_last_chapter > 0) { - int chapter = -1; - if (stream_control(mpctx->stream, STREAM_CTRL_GET_CURRENT_CHAPTER, - &chapter) == STREAM_OK && chapter + 1 > dvd_last_chapter) - break; - } - } - if(fclose(f)) { - mp_msg(MSGT_MENCODER,MSGL_FATAL,MSGTR_ErrorWritingFile,stream_dump_name); - exit_player(EXIT_ERROR); - } - mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_CoreDumped); - exit_player_with_rc(EXIT_EOF, 0); -} - -if(mpctx->stream->type==STREAMTYPE_BD){ - if(audio_lang && audio_id==-1) audio_id=bd_aid_from_lang(mpctx->stream,audio_lang); - if(dvdsub_lang && dvdsub_id==-1) dvdsub_id=bd_sid_from_lang(mpctx->stream,dvdsub_lang); -} + if (use_gui) + guiGetEvent(guiSetStream, (char *)mpctx->stream); +#endif + + if (mpctx->file_format == DEMUXER_TYPE_PLAYLIST) { + play_tree_t *entry; + // Handle playlist + current_module = "handle_playlist"; + mp_msg(MSGT_CPLAYER, MSGL_V, "Parsing playlist %s...\n", + filename_recode(filename)); + entry = parse_playtree(mpctx->stream, 0); + mpctx->eof = playtree_add_playlist(entry); + goto goto_next_file; + } + mpctx->stream->start_pos += seek_to_byte; + + if (stream_dump_type == 5) { + unsigned char buf[4096]; + int len; + FILE *f; + current_module = "dumpstream"; + stream_reset(mpctx->stream); + stream_seek(mpctx->stream, mpctx->stream->start_pos); + f = fopen(stream_dump_name, "wb"); + if (!f) { + mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_CantOpenDumpfile); + exit_player(EXIT_ERROR); + } + if (dvd_chapter > 1) { + int chapter = dvd_chapter - 1; + stream_control(mpctx->stream, STREAM_CTRL_SEEK_TO_CHAPTER, &chapter); + } + while (!mpctx->stream->eof && !async_quit_request) { + len = stream_read(mpctx->stream, buf, 4096); + if (len > 0) { + if (fwrite(buf, len, 1, f) != 1) { + mp_msg(MSGT_MENCODER, MSGL_FATAL, MSGTR_ErrorWritingFile, stream_dump_name); + exit_player(EXIT_ERROR); + } + } + if (dvd_last_chapter > 0) { + int chapter = -1; + if (stream_control(mpctx->stream, STREAM_CTRL_GET_CURRENT_CHAPTER, + &chapter) == STREAM_OK && chapter + 1 > dvd_last_chapter) + break; + } + } + if (fclose(f)) { + mp_msg(MSGT_MENCODER, MSGL_FATAL, MSGTR_ErrorWritingFile, stream_dump_name); + exit_player(EXIT_ERROR); + } + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_CoreDumped); + exit_player_with_rc(EXIT_EOF, 0); + } + + if (mpctx->stream->type == STREAMTYPE_BD) { + if (audio_lang && audio_id == -1) + audio_id = bd_aid_from_lang(mpctx->stream, audio_lang); + if (dvdsub_lang && dvdsub_id == -1) + dvdsub_id = bd_sid_from_lang(mpctx->stream, dvdsub_lang); + } #ifdef CONFIG_DVDREAD -if(mpctx->stream->type==STREAMTYPE_DVD){ - current_module="dvd lang->id"; - if(audio_lang && audio_id==-1) audio_id=dvd_aid_from_lang(mpctx->stream,audio_lang); - if(dvdsub_lang && dvdsub_id==-1) dvdsub_id=dvd_sid_from_lang(mpctx->stream,dvdsub_lang); - // setup global sub numbering - mpctx->sub_counts[SUB_SOURCE_DEMUX] = dvd_number_of_subs(mpctx->stream); - current_module=NULL; -} + if (mpctx->stream->type == STREAMTYPE_DVD) { + current_module = "dvd lang->id"; + if (audio_lang && audio_id == -1) + audio_id = dvd_aid_from_lang(mpctx->stream, audio_lang); + if (dvdsub_lang && dvdsub_id == -1) + dvdsub_id = dvd_sid_from_lang(mpctx->stream, dvdsub_lang); + // setup global sub numbering + mpctx->sub_counts[SUB_SOURCE_DEMUX] = dvd_number_of_subs(mpctx->stream); + current_module = NULL; + } #endif #ifdef CONFIG_DVDNAV -if(mpctx->stream->type==STREAMTYPE_DVDNAV){ - current_module="dvdnav lang->id"; - if(audio_lang && audio_id==-1) audio_id=mp_dvdnav_aid_from_lang(mpctx->stream,audio_lang); - dvdsub_lang_id = -3; - if(dvdsub_lang && dvdsub_id==-1) - dvdsub_lang_id=dvdsub_id=mp_dvdnav_sid_from_lang(mpctx->stream,dvdsub_lang); - // setup global sub numbering - mpctx->sub_counts[SUB_SOURCE_DEMUX] = mp_dvdnav_number_of_subs(mpctx->stream); - current_module=NULL; -} + if (mpctx->stream->type == STREAMTYPE_DVDNAV) { + current_module = "dvdnav lang->id"; + if (audio_lang && audio_id == -1) + audio_id = mp_dvdnav_aid_from_lang(mpctx->stream, audio_lang); + dvdsub_lang_id = -3; + if (dvdsub_lang && dvdsub_id == -1) + dvdsub_lang_id = dvdsub_id = mp_dvdnav_sid_from_lang(mpctx->stream, dvdsub_lang); + // setup global sub numbering + mpctx->sub_counts[SUB_SOURCE_DEMUX] = mp_dvdnav_number_of_subs(mpctx->stream); + current_module = NULL; + } #endif // CACHE2: initial prefill: 20% later: 5% (should be set by -cacheopts) goto_enable_cache: -if(stream_cache_size>0){ - int res; - current_module="enable_cache"; - res = stream_enable_cache(mpctx->stream,stream_cache_size*1024, - stream_cache_size*1024*(stream_cache_min_percent / 100.0), - stream_cache_size*1024*(stream_cache_seek_min_percent / 100.0)); - if(res == 0) - if((mpctx->eof = libmpdemux_was_interrupted(PT_NEXT_ENTRY))) goto goto_next_file; -} + if (stream_cache_size > 0) { + int res; + current_module = "enable_cache"; + res = stream_enable_cache(mpctx->stream, stream_cache_size * 1024, + stream_cache_size * 1024 * (stream_cache_min_percent / 100.0), + stream_cache_size * 1024 * (stream_cache_seek_min_percent / 100.0)); + if (res == 0) + if ((mpctx->eof = libmpdemux_was_interrupted(PT_NEXT_ENTRY))) + goto goto_next_file; + } //============ Open DEMUXERS --- DETECT file type ======================= -current_module="demux_open"; + current_module = "demux_open"; -mpctx->demuxer=demux_open(mpctx->stream,mpctx->file_format,audio_id,video_id,dvdsub_id,filename); + mpctx->demuxer = demux_open(mpctx->stream, mpctx->file_format, audio_id, video_id, dvdsub_id, filename); // HACK to get MOV Reference Files working -if (mpctx->demuxer && mpctx->demuxer->type==DEMUXER_TYPE_PLAYLIST) -{ - unsigned char* playlist_entry; - play_tree_t *list = NULL, *entry = NULL; + if (mpctx->demuxer && mpctx->demuxer->type == DEMUXER_TYPE_PLAYLIST) { + unsigned char *playlist_entry; + play_tree_t *list = NULL, *entry = NULL; - current_module="handle_demux_playlist"; - while (ds_get_packet(mpctx->demuxer->video,&playlist_entry)>0) - { - char *temp; - const char *bname; + current_module = "handle_demux_playlist"; + while (ds_get_packet(mpctx->demuxer->video, &playlist_entry) > 0) { + char *temp; + const char *bname; - mp_msg(MSGT_CPLAYER,MSGL_V,"Adding file %s to element entry.\n", - filename_recode(playlist_entry)); + mp_msg(MSGT_CPLAYER, MSGL_V, "Adding file %s to element entry.\n", + filename_recode(playlist_entry)); - bname=mp_basename(playlist_entry); - if ((strlen(bname)>10) && !strncmp(bname,"qt",2) && !strncmp(bname+3,"gateQT",6)) - continue; + bname = mp_basename(playlist_entry); + if ((strlen(bname) > 10) && !strncmp(bname, "qt", 2) && !strncmp(bname + 3, "gateQT", 6)) + continue; - if (!strcmp(playlist_entry,filename)) // ignoring self-reference - continue; + if (!strcmp(playlist_entry, filename)) // ignoring self-reference + continue; - entry = play_tree_new(); + entry = play_tree_new(); - if (filename && !strcmp(mp_basename(playlist_entry),playlist_entry)) // add reference path of current file - { - temp=malloc((strlen(filename)-strlen(mp_basename(filename))+strlen(playlist_entry)+1)); - if (temp) - { - strncpy(temp, filename, strlen(filename)-strlen(mp_basename(filename))); - temp[strlen(filename)-strlen(mp_basename(filename))]='\0'; - strcat(temp, playlist_entry); - if (!strcmp(temp, filename)) { - free(temp); - continue; - } - play_tree_add_file(entry,temp); - mp_msg(MSGT_CPLAYER,MSGL_V,"Resolving reference to %s.\n",temp); - free(temp); - } - } - else - play_tree_add_file(entry,playlist_entry); + if (filename && !strcmp(mp_basename(playlist_entry), playlist_entry)) { // add reference path of current file + temp = malloc((strlen(filename) - strlen(mp_basename(filename)) + strlen(playlist_entry) + 1)); + if (temp) { + strncpy(temp, filename, strlen(filename) - strlen(mp_basename(filename))); + temp[strlen(filename) - strlen(mp_basename(filename))] = '\0'; + strcat(temp, playlist_entry); + if (!strcmp(temp, filename)) { + free(temp); + continue; + } + play_tree_add_file(entry, temp); + mp_msg(MSGT_CPLAYER, MSGL_V, "Resolving reference to %s.\n", temp); + free(temp); + } + } else + play_tree_add_file(entry, playlist_entry); - if(!list) - list = entry; - else - play_tree_append_entry(list,entry); - } - free_demuxer(mpctx->demuxer); - mpctx->demuxer = NULL; + if (!list) + list = entry; + else + play_tree_append_entry(list, entry); + } + free_demuxer(mpctx->demuxer); + mpctx->demuxer = NULL; - if (list) - { - entry = play_tree_new(); - play_tree_set_child(entry,list); - mpctx->eof=playtree_add_playlist(entry); - goto goto_next_file; - } -} + if (list) { + entry = play_tree_new(); + play_tree_set_child(entry, list); + mpctx->eof = playtree_add_playlist(entry); + goto goto_next_file; + } + } -if(!mpctx->demuxer) - goto goto_next_file; -if(dvd_chapter>1) { - float pts; - if (demuxer_seek_chapter(mpctx->demuxer, dvd_chapter-1, 1, &pts, NULL, NULL) >= 0 && pts > -1.0) - seek(mpctx, pts, SEEK_ABSOLUTE); -} + if (!mpctx->demuxer) + goto goto_next_file; + if (dvd_chapter > 1) { + float pts; + if (demuxer_seek_chapter(mpctx->demuxer, dvd_chapter - 1, 1, &pts, NULL, NULL) >= 0 && pts > -1.0) + seek(mpctx, pts, SEEK_ABSOLUTE); + } -initialized_flags|=INITIALIZED_DEMUXER; + initialized_flags |= INITIALIZED_DEMUXER; #ifdef CONFIG_ASS -if (ass_enabled && ass_library) { - for (i = 0; i < mpctx->demuxer->num_attachments; ++i) { - demux_attachment_t* att = mpctx->demuxer->attachments + i; - if (extract_embedded_fonts && - att->name && att->type && att->data && att->data_size && - (strcmp(att->type, "application/x-truetype-font") == 0 || - strcmp(att->type, "application/x-font") == 0)) - ass_add_font(ass_library, att->name, att->data, att->data_size); - } -} + if (ass_enabled && ass_library) { + for (i = 0; i < mpctx->demuxer->num_attachments; ++i) { + demux_attachment_t *att = mpctx->demuxer->attachments + i; + if (extract_embedded_fonts && + att->name && att->type && att->data && att->data_size && + (strcmp(att->type, "application/x-truetype-font") == 0 || + strcmp(att->type, "application/x-font") == 0)) + ass_add_font(ass_library, att->name, att->data, att->data_size); + } + } #endif -current_module="demux_open2"; + current_module = "demux_open2"; -mpctx->d_audio=mpctx->demuxer->audio; -mpctx->d_video=mpctx->demuxer->video; -mpctx->d_sub=mpctx->demuxer->sub; + mpctx->d_audio = mpctx->demuxer->audio; + mpctx->d_video = mpctx->demuxer->video; + mpctx->d_sub = mpctx->demuxer->sub; -if (ts_prog) { - int tmp = ts_prog; - mp_property_do("switch_program", M_PROPERTY_SET, &tmp, mpctx); -} + if (ts_prog) { + int tmp = ts_prog; + mp_property_do("switch_program", M_PROPERTY_SET, &tmp, mpctx); + } // select audio stream -select_audio(mpctx->demuxer, audio_id, audio_lang); + select_audio(mpctx->demuxer, audio_id, audio_lang); // DUMP STREAMS: -if((stream_dump_type)&&(stream_dump_type<4)){ - FILE *f; - demux_stream_t *ds=NULL; - current_module="dump"; - // select stream to dump - switch(stream_dump_type){ - case 1: ds=mpctx->d_audio;break; - case 2: ds=mpctx->d_video;break; - case 3: ds=mpctx->d_sub;break; - } - if(!ds){ - mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_DumpSelectedStreamMissing); - exit_player(EXIT_ERROR); - } - // disable other streams: - if(mpctx->d_audio && mpctx->d_audio!=ds) {ds_free_packs(mpctx->d_audio); mpctx->d_audio->id=-2; } - if(mpctx->d_video && mpctx->d_video!=ds) {ds_free_packs(mpctx->d_video); mpctx->d_video->id=-2; } - if(mpctx->d_sub && mpctx->d_sub!=ds) {ds_free_packs(mpctx->d_sub); mpctx->d_sub->id=-2; } - // let's dump it! - f=fopen(stream_dump_name,"wb"); - if(!f){ - mp_msg(MSGT_CPLAYER,MSGL_FATAL,MSGTR_CantOpenDumpfile); - exit_player(EXIT_ERROR); - } - while(!ds->eof){ - unsigned char* start; - int in_size=ds_get_packet(ds,&start); - if( (mpctx->demuxer->file_format==DEMUXER_TYPE_AVI || mpctx->demuxer->file_format==DEMUXER_TYPE_ASF || mpctx->demuxer->file_format==DEMUXER_TYPE_MOV) - && stream_dump_type==2) fwrite(&in_size,1,4,f); - if(in_size>0) fwrite(start,in_size,1,f); - if(dvd_last_chapter>0) { - int cur_chapter = demuxer_get_current_chapter(mpctx->demuxer); - if(cur_chapter!=-1 && cur_chapter+1>dvd_last_chapter) - break; + if ((stream_dump_type) && (stream_dump_type < 4)) { + FILE *f; + demux_stream_t *ds = NULL; + current_module = "dump"; + // select stream to dump + switch (stream_dump_type) { + case 1: ds = mpctx->d_audio; + break; + case 2: ds = mpctx->d_video; + break; + case 3: ds = mpctx->d_sub; + break; + } + if (!ds) { + mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_DumpSelectedStreamMissing); + exit_player(EXIT_ERROR); + } + // disable other streams: + if (mpctx->d_audio && mpctx->d_audio != ds) { + ds_free_packs(mpctx->d_audio); + mpctx->d_audio->id = -2; + } + if (mpctx->d_video && mpctx->d_video != ds) { + ds_free_packs(mpctx->d_video); + mpctx->d_video->id = -2; + } + if (mpctx->d_sub && mpctx->d_sub != ds) { + ds_free_packs(mpctx->d_sub); + mpctx->d_sub->id = -2; + } + // let's dump it! + f = fopen(stream_dump_name, "wb"); + if (!f) { + mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_CantOpenDumpfile); + exit_player(EXIT_ERROR); + } + while (!ds->eof) { + unsigned char *start; + int in_size = ds_get_packet(ds, &start); + if ((mpctx->demuxer->file_format == DEMUXER_TYPE_AVI || mpctx->demuxer->file_format == DEMUXER_TYPE_ASF || mpctx->demuxer->file_format == DEMUXER_TYPE_MOV) + && stream_dump_type == 2) + fwrite(&in_size, 1, 4, f); + if (in_size > 0) + fwrite(start, in_size, 1, f); + if (dvd_last_chapter > 0) { + int cur_chapter = demuxer_get_current_chapter(mpctx->demuxer); + if (cur_chapter != -1 && cur_chapter + 1 > dvd_last_chapter) + break; + } + } + fclose(f); + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_CoreDumped); + exit_player_with_rc(EXIT_EOF, 0); } - } - fclose(f); - mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_CoreDumped); - exit_player_with_rc(EXIT_EOF, 0); -} - -mpctx->sh_audio=mpctx->d_audio->sh; -mpctx->sh_video=mpctx->d_video->sh; -if(mpctx->sh_video){ + mpctx->sh_audio = mpctx->d_audio->sh; + mpctx->sh_video = mpctx->d_video->sh; - current_module="video_read_properties"; - if(!video_read_properties(mpctx->sh_video)) { - mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CannotReadVideoProperties); - mpctx->sh_video=mpctx->d_video->sh=NULL; - } else { - mp_msg(MSGT_CPLAYER,MSGL_V,MSGTR_FilefmtFourccSizeFpsFtime, - mpctx->demuxer->file_format,mpctx->sh_video->format, mpctx->sh_video->disp_w,mpctx->sh_video->disp_h, - mpctx->sh_video->fps,mpctx->sh_video->frametime - ); - - /* need to set fps here for output encoders to pick it up in their init */ - if(force_fps){ - mpctx->sh_video->fps=force_fps; - mpctx->sh_video->frametime=1.0f/mpctx->sh_video->fps; - } - vo_fps = mpctx->sh_video->fps; + if (mpctx->sh_video) { + current_module = "video_read_properties"; + if (!video_read_properties(mpctx->sh_video)) { + mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_CannotReadVideoProperties); + mpctx->sh_video = mpctx->d_video->sh = NULL; + } else { + mp_msg(MSGT_CPLAYER, MSGL_V, MSGTR_FilefmtFourccSizeFpsFtime, + mpctx->demuxer->file_format, mpctx->sh_video->format, mpctx->sh_video->disp_w, mpctx->sh_video->disp_h, + mpctx->sh_video->fps, mpctx->sh_video->frametime + ); + + /* need to set fps here for output encoders to pick it up in their init */ + if (force_fps) { + mpctx->sh_video->fps = force_fps; + mpctx->sh_video->frametime = 1.0f / mpctx->sh_video->fps; + } + vo_fps = mpctx->sh_video->fps; - if(!mpctx->sh_video->fps && !force_fps && !correct_pts){ - mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_FPSnotspecified); - correct_pts = 1; + if (!mpctx->sh_video->fps && !force_fps && !correct_pts) { + mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_FPSnotspecified); + correct_pts = 1; + } + } } - } - -} -if(!mpctx->sh_video && !mpctx->sh_audio){ - mp_msg(MSGT_CPLAYER,MSGL_FATAL, MSGTR_NoStreamFound); + if (!mpctx->sh_video && !mpctx->sh_audio) { + mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_NoStreamFound); #ifdef CONFIG_DVBIN - if(mpctx->stream->type == STREAMTYPE_DVB) - { - int dir; - int v = mpctx->last_dvb_step; - if(v > 0) - dir = DVB_CHANNEL_HIGHER; - else - dir = DVB_CHANNEL_LOWER; + if (mpctx->stream->type == STREAMTYPE_DVB) { + int dir; + int v = mpctx->last_dvb_step; + if (v > 0) + dir = DVB_CHANNEL_HIGHER; + else + dir = DVB_CHANNEL_LOWER; - if(dvb_step_channel(mpctx->stream, dir)) - mpctx->eof = mpctx->dvbin_reopen = 1; - } + if (dvb_step_channel(mpctx->stream, dir)) + mpctx->eof = mpctx->dvbin_reopen = 1; + } #endif - goto goto_next_file; // exit_player(MSGTR_Exit_error); -} + goto goto_next_file; // exit_player(MSGTR_Exit_error); + } /* display clip info */ -demux_info_print(mpctx->demuxer); + demux_info_print(mpctx->demuxer); //================== Read SUBTITLES (DVD & TEXT) ========================== -if(vo_spudec==NULL && - (mpctx->stream->type==STREAMTYPE_DVD || mpctx->stream->type == STREAMTYPE_DVDNAV)){ - init_vo_spudec(); -} + if (vo_spudec == NULL && + (mpctx->stream->type == STREAMTYPE_DVD || mpctx->stream->type == STREAMTYPE_DVDNAV)) { + init_vo_spudec(); + } -if(1 || mpctx->sh_video) { + if (1 || mpctx->sh_video) { // after reading video params we should load subtitles because // we know fps so now we can adjust subtitle time to ~6 seconds AST // check .sub - double fps = mpctx->sh_video ? mpctx->sh_video->fps : 25; - current_module="read_subtitles_file"; - load_subtitles(filename, fps, add_subtitles); - if (mpctx->set_of_sub_size > 0) - mpctx->sub_counts[SUB_SOURCE_SUBS] = mpctx->set_of_sub_size; -} + double fps = mpctx->sh_video ? mpctx->sh_video->fps : 25; + current_module = "read_subtitles_file"; + load_subtitles(filename, fps, add_subtitles); + if (mpctx->set_of_sub_size > 0) + mpctx->sub_counts[SUB_SOURCE_SUBS] = mpctx->set_of_sub_size; + } -if (select_subtitle(mpctx)) { - if(subdata) - switch (stream_dump_type) { - case 3: list_sub_file(subdata); break; - case 4: dump_mpsub(subdata, mpctx->sh_video->fps); break; - case 6: dump_srt(subdata, mpctx->sh_video->fps); break; - case 7: dump_microdvd(subdata, mpctx->sh_video->fps); break; - case 8: dump_jacosub(subdata, mpctx->sh_video->fps); break; - case 9: dump_sami(subdata, mpctx->sh_video->fps); break; + if (select_subtitle(mpctx)) { + if (subdata) + switch (stream_dump_type) { + case 3: list_sub_file(subdata); + break; + case 4: dump_mpsub(subdata, mpctx->sh_video->fps); + break; + case 6: dump_srt(subdata, mpctx->sh_video->fps); + break; + case 7: dump_microdvd(subdata, mpctx->sh_video->fps); + break; + case 8: dump_jacosub(subdata, mpctx->sh_video->fps); + break; + case 9: dump_sami(subdata, mpctx->sh_video->fps); + break; + } } -} - print_file_properties(mpctx, filename); + print_file_properties(mpctx, filename); - // Adjust EDL positions with start_pts - if (edl_start_pts && start_pts) { - edl_record_ptr edl = edl_records; - while (edl) { - edl->start_sec += start_pts; - edl->stop_sec += start_pts; - edl = edl->next; - } - } + // Adjust EDL positions with start_pts + if (edl_start_pts && start_pts) { + edl_record_ptr edl = edl_records; + while (edl) { + edl->start_sec += start_pts; + edl->stop_sec += start_pts; + edl = edl->next; + } + } - if (mpctx->sh_video) - reinit_video_chain(); + if (mpctx->sh_video) + reinit_video_chain(); - if (mpctx->sh_video) { - if (vo_flags & 0x08 && vo_spudec) - spudec_set_hw_spu(vo_spudec, mpctx->video_out); + if (mpctx->sh_video) { + if (vo_flags & 0x08 && vo_spudec) + spudec_set_hw_spu(vo_spudec, mpctx->video_out); #ifdef CONFIG_FREETYPE - force_load_font = 1; + force_load_font = 1; #endif - } else if (!mpctx->sh_audio) - goto goto_next_file; + } else if (!mpctx->sh_audio) + goto goto_next_file; //================== MAIN: ========================== -current_module="main"; + current_module = "main"; - if(playing_msg) { - char* msg = property_expand_string(mpctx, playing_msg); - mp_msg(MSGT_CPLAYER,MSGL_INFO,"%s",msg); + if (playing_msg) { + char *msg = property_expand_string(mpctx, playing_msg); + mp_msg(MSGT_CPLAYER, MSGL_INFO, "%s", msg); free(msg); } - // Disable the term OSD in verbose mode -if(verbose) term_osd = 0; + if (verbose) + term_osd = 0; -{ -mpctx->num_buffered_frames=0; -mpctx->framestep_found=0; + { + mpctx->num_buffered_frames = 0; + mpctx->framestep_found = 0; // Make sure old OSD does not stay around, // e.g. with -fixed-vo and same-resolution files -clear_osd_msgs(); -update_osd_msg(); + clear_osd_msgs(); + update_osd_msg(); //================ SETUP AUDIO ========================== -if(mpctx->sh_audio){ - reinit_audio_chain(); - if (mpctx->sh_audio && mpctx->sh_audio->codec) - mp_msg(MSGT_IDENTIFY,MSGL_INFO, "ID_AUDIO_CODEC=%s\n", mpctx->sh_audio->codec->name); -} + if (mpctx->sh_audio) { + reinit_audio_chain(); + if (mpctx->sh_audio && mpctx->sh_audio->codec) + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_CODEC=%s\n", mpctx->sh_audio->codec->name); + } -current_module="av_init"; + current_module = "av_init"; -if(mpctx->sh_video){ - mpctx->sh_video->timer=0; - if (! ignore_start) - audio_delay += mpctx->sh_video->stream_delay; -} -if(mpctx->sh_audio){ - if (start_volume >= 0) - mixer_setvolume(&mpctx->mixer, start_volume, start_volume); - if (! ignore_start) - audio_delay -= mpctx->sh_audio->stream_delay; - mpctx->delay=-audio_delay; -} + if (mpctx->sh_video) { + mpctx->sh_video->timer = 0; + if (!ignore_start) + audio_delay += mpctx->sh_video->stream_delay; + } + if (mpctx->sh_audio) { + if (start_volume >= 0) + mixer_setvolume(&mpctx->mixer, start_volume, start_volume); + if (!ignore_start) + audio_delay -= mpctx->sh_audio->stream_delay; + mpctx->delay = -audio_delay; + } -if(!mpctx->sh_audio){ - mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_NoSound); - mp_msg(MSGT_CPLAYER,MSGL_V,"Freeing %d unused audio chunks.\n",mpctx->d_audio->packs); - ds_free_packs(mpctx->d_audio); // free buffered chunks - //mpctx->d_audio->id=-2; // do not read audio chunks - //uninit_player(INITIALIZED_AO); // close device -} -if(!mpctx->sh_video){ - mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_Video_NoVideo); - mp_msg(MSGT_CPLAYER,MSGL_V,"Freeing %d unused video chunks.\n",mpctx->d_video->packs); - ds_free_packs(mpctx->d_video); - mpctx->d_video->id=-2; - //if(!fixed_vo) uninit_player(INITIALIZED_VO); -} + if (!mpctx->sh_audio) { + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_NoSound); + mp_msg(MSGT_CPLAYER, MSGL_V, "Freeing %d unused audio chunks.\n", mpctx->d_audio->packs); + ds_free_packs(mpctx->d_audio); // free buffered chunks + //mpctx->d_audio->id=-2; // do not read audio chunks + //uninit_player(INITIALIZED_AO); // close device + } + if (!mpctx->sh_video) { + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_Video_NoVideo); + mp_msg(MSGT_CPLAYER, MSGL_V, "Freeing %d unused video chunks.\n", mpctx->d_video->packs); + ds_free_packs(mpctx->d_video); + mpctx->d_video->id = -2; + //if(!fixed_vo) uninit_player(INITIALIZED_VO); + } -if (!mpctx->sh_video && !mpctx->sh_audio) - goto goto_next_file; + if (!mpctx->sh_video && !mpctx->sh_audio) + goto goto_next_file; //if(demuxer->file_format!=DEMUXER_TYPE_AVI) pts_from_bps=0; // it must be 0 for mpeg/asf! -if(force_fps && mpctx->sh_video){ - vo_fps = mpctx->sh_video->fps=force_fps; - mpctx->sh_video->frametime=1.0f/mpctx->sh_video->fps; - mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_FPSforced,mpctx->sh_video->fps,mpctx->sh_video->frametime); -} + if (force_fps && mpctx->sh_video) { + vo_fps = mpctx->sh_video->fps = force_fps; + mpctx->sh_video->frametime = 1.0f / mpctx->sh_video->fps; + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_FPSforced, mpctx->sh_video->fps, mpctx->sh_video->frametime); + } #ifdef CONFIG_GUI -if ( use_gui ) { - if ( mpctx->sh_audio ) guiIntfStruct.AudioType=mpctx->sh_audio->channels; else guiIntfStruct.AudioType=0; - if ( !mpctx->sh_video && mpctx->sh_audio ) guiGetEvent( guiSetAudioOnly,(char *)1 ); else guiGetEvent( guiSetAudioOnly,(char *)0 ); - guiGetEvent( guiSetFileFormat,(char *)mpctx->demuxer->file_format ); - if ( guiGetEvent( guiSetValues,(char *)mpctx->sh_video ) ) goto goto_next_file; - guiGetEvent( guiSetDemuxer,(char *)mpctx->demuxer ); -} + if (use_gui) { + if (mpctx->sh_audio) + guiIntfStruct.AudioType = mpctx->sh_audio->channels; + else + guiIntfStruct.AudioType = 0; + if (!mpctx->sh_video && mpctx->sh_audio) + guiGetEvent(guiSetAudioOnly, (char *)1); + else + guiGetEvent(guiSetAudioOnly, (char *)0); + guiGetEvent(guiSetFileFormat, (char *)mpctx->demuxer->file_format); + if (guiGetEvent(guiSetValues, (char *)mpctx->sh_video)) + goto goto_next_file; + guiGetEvent(guiSetDemuxer, (char *)mpctx->demuxer); + } #endif -mp_input_set_section(NULL); + mp_input_set_section(NULL); //TODO: add desired (stream-based) sections here -if (mpctx->stream->type==STREAMTYPE_TV) mp_input_set_section("tv"); -if (mpctx->stream->type==STREAMTYPE_DVDNAV) mp_input_set_section("dvdnav"); + if (mpctx->stream->type == STREAMTYPE_TV) + mp_input_set_section("tv"); + if (mpctx->stream->type == STREAMTYPE_DVDNAV) + mp_input_set_section("dvdnav"); //==================== START PLAYING ======================= -if(mpctx->loop_times>1) mpctx->loop_times--; else -if(mpctx->loop_times==1) mpctx->loop_times = -1; - -mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_StartPlaying); - -total_time_usage_start=GetTimer(); -audio_time_usage=0; video_time_usage=0; vout_time_usage=0; -total_frame_cnt=0; drop_frame_cnt=0; // fix for multifile fps benchmark -play_n_frames=play_n_frames_mf; -mpctx->startup_decode_retry = DEFAULT_STARTUP_DECODE_RETRY; - -if(play_n_frames==0){ - mpctx->eof=PT_NEXT_ENTRY; goto goto_next_file; -} + if (mpctx->loop_times > 1) + mpctx->loop_times--; + else if (mpctx->loop_times == 1) + mpctx->loop_times = -1; + + mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_StartPlaying); + + total_time_usage_start = GetTimer(); + audio_time_usage = 0; + video_time_usage = 0; + vout_time_usage = 0; + total_frame_cnt = 0; + drop_frame_cnt = 0; // fix for multifile fps benchmark + play_n_frames = play_n_frames_mf; + mpctx->startup_decode_retry = DEFAULT_STARTUP_DECODE_RETRY; + + if (play_n_frames == 0) { + mpctx->eof = PT_NEXT_ENTRY; + goto goto_next_file; + } -if (seek_to_sec) { - seek(mpctx, seek_to_sec, SEEK_ABSOLUTE); - end_at.pos += seek_to_sec; -} + if (seek_to_sec) { + seek(mpctx, seek_to_sec, SEEK_ABSOLUTE); + end_at.pos += seek_to_sec; + } #ifdef CONFIG_DVDNAV -mp_dvdnav_context_free(mpctx); -if (mpctx->stream->type == STREAMTYPE_DVDNAV) { - mp_dvdnav_read_wait(mpctx->stream, 0, 1); - mp_dvdnav_cell_has_changed(mpctx->stream,1); -} + mp_dvdnav_context_free(mpctx); + if (mpctx->stream->type == STREAMTYPE_DVDNAV) { + mp_dvdnav_read_wait(mpctx->stream, 0, 1); + mp_dvdnav_cell_has_changed(mpctx->stream, 1); + } #endif -while(!mpctx->eof){ - float aq_sleep_time=0; + while (!mpctx->eof) { + float aq_sleep_time = 0; -if(dvd_last_chapter>0) { - int cur_chapter = demuxer_get_current_chapter(mpctx->demuxer); - if(cur_chapter!=-1 && cur_chapter+1>dvd_last_chapter) - goto goto_next_file; -} + if (dvd_last_chapter > 0) { + int cur_chapter = demuxer_get_current_chapter(mpctx->demuxer); + if (cur_chapter != -1 && cur_chapter + 1 > dvd_last_chapter) + goto goto_next_file; + } -if(!mpctx->sh_audio && mpctx->d_audio->sh) { - mpctx->sh_audio = mpctx->d_audio->sh; - mpctx->sh_audio->ds = mpctx->d_audio; - reinit_audio_chain(); -} + if (!mpctx->sh_audio && mpctx->d_audio->sh) { + mpctx->sh_audio = mpctx->d_audio->sh; + mpctx->sh_audio->ds = mpctx->d_audio; + reinit_audio_chain(); + } /*========================== PLAY AUDIO ============================*/ -if (mpctx->sh_audio) - if (!fill_audio_out_buffers()) - // at eof, all audio at least written to ao - if (!mpctx->sh_video) - mpctx->eof = PT_NEXT_ENTRY; - - -if(!mpctx->sh_video) { - // handle audio-only case: - double a_pos=0; - // sh_audio can be NULL due to video stream switching - // TODO: handle this better - if((!quiet || end_at.type == END_AT_TIME) && mpctx->sh_audio) - a_pos = playing_audio_pts(mpctx->sh_audio, mpctx->d_audio, mpctx->audio_out); - - if(!quiet) - print_status(a_pos, 0, 0); - - if(end_at.type == END_AT_TIME && end_at.pos < a_pos || - end_at.type == END_AT_SIZE && end_at.pos < stream_tell(mpctx->stream)) - mpctx->eof = PT_NEXT_ENTRY; - update_subtitles(NULL, a_pos, mpctx->d_sub, 0); - update_osd_msg(); - -} else { - int frame_time_remaining = 0; - int blit_frame = 1; - // skip timing after seek - int skip_timing = mpctx->startup_decode_retry > 0; + if (mpctx->sh_audio) + if (!fill_audio_out_buffers()) + // at eof, all audio at least written to ao + if (!mpctx->sh_video) + mpctx->eof = PT_NEXT_ENTRY; + + if (!mpctx->sh_video) { + // handle audio-only case: + double a_pos = 0; + // sh_audio can be NULL due to video stream switching + // TODO: handle this better + if ((!quiet || end_at.type == END_AT_TIME) && mpctx->sh_audio) + a_pos = playing_audio_pts(mpctx->sh_audio, mpctx->d_audio, mpctx->audio_out); + + if (!quiet) + print_status(a_pos, 0, 0); + + if (end_at.type == END_AT_TIME && end_at.pos < a_pos || + end_at.type == END_AT_SIZE && end_at.pos < stream_tell(mpctx->stream)) + mpctx->eof = PT_NEXT_ENTRY; + update_subtitles(NULL, a_pos, mpctx->d_sub, 0); + update_osd_msg(); + } else { + int frame_time_remaining = 0; + int blit_frame = 1; + // skip timing after seek + int skip_timing = mpctx->startup_decode_retry > 0; /*========================== PLAY VIDEO ============================*/ - vo_pts=mpctx->sh_video->timer*90000.0; - vo_fps=mpctx->sh_video->fps; - - if (!mpctx->num_buffered_frames) { - double frame_time = update_video(&blit_frame); - while (!blit_frame && mpctx->startup_decode_retry > 0) { - double delay = mpctx->delay; - // these initial decode failures are probably due to codec delay, - // ignore them and also their probably nonsense durations - update_video(&blit_frame); - mpctx->delay = delay; - mpctx->startup_decode_retry--; - } - mpctx->startup_decode_retry = 0; - mp_dbg(MSGT_AVSYNC,MSGL_DBG2,"*** ftime=%5.3f ***\n",frame_time); - if (mpctx->sh_video->vf_initialized < 0) { - mp_msg(MSGT_CPLAYER,MSGL_FATAL, MSGTR_NotInitializeVOPorVO); - mpctx->eof = 1; goto goto_next_file; - } - if (frame_time < 0) { - // if we have no more video, sleep some arbitrary time - frame_time = 1.0/20.0; - // only stop playing when audio is at end as well - if (!mpctx->sh_audio || mpctx->d_audio->eof) - mpctx->eof = 1; - } else { - // might return with !eof && !blit_frame if !correct_pts - mpctx->num_buffered_frames += blit_frame; - mpctx->time_frame += frame_time / playback_speed; // for nosound - } - } + vo_pts = mpctx->sh_video->timer * 90000.0; + vo_fps = mpctx->sh_video->fps; + + if (!mpctx->num_buffered_frames) { + double frame_time = update_video(&blit_frame); + while (!blit_frame && mpctx->startup_decode_retry > 0) { + double delay = mpctx->delay; + // these initial decode failures are probably due to codec delay, + // ignore them and also their probably nonsense durations + update_video(&blit_frame); + mpctx->delay = delay; + mpctx->startup_decode_retry--; + } + mpctx->startup_decode_retry = 0; + mp_dbg(MSGT_AVSYNC, MSGL_DBG2, "*** ftime=%5.3f ***\n", frame_time); + if (mpctx->sh_video->vf_initialized < 0) { + mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_NotInitializeVOPorVO); + mpctx->eof = 1; + goto goto_next_file; + } + if (frame_time < 0) { + // if we have no more video, sleep some arbitrary time + frame_time = 1.0 / 20.0; + // only stop playing when audio is at end as well + if (!mpctx->sh_audio || mpctx->d_audio->eof) + mpctx->eof = 1; + } else { + // might return with !eof && !blit_frame if !correct_pts + mpctx->num_buffered_frames += blit_frame; + mpctx->time_frame += frame_time / playback_speed; // for nosound + } + } // ========================================================================== @@ -3754,323 +3827,332 @@ if(!mpctx->sh_video) { // if(vo_config_count) mpctx->video_out->draw_osd(); #ifdef CONFIG_GUI - if(use_gui) guiEventHandling(); + if (use_gui) + guiEventHandling(); #endif - current_module="vo_check_events"; - if (vo_config_count) mpctx->video_out->check_events(); + current_module = "vo_check_events"; + if (vo_config_count) + mpctx->video_out->check_events(); #ifdef CONFIG_X11 - if (stop_xscreensaver) { - current_module = "stop_xscreensaver"; - xscreensaver_heartbeat(); - } + if (stop_xscreensaver) { + current_module = "stop_xscreensaver"; + xscreensaver_heartbeat(); + } #endif - if (heartbeat_cmd) { - static unsigned last_heartbeat; - unsigned now = GetTimerMS(); - if (now - last_heartbeat > 30000) { - last_heartbeat = now; - system(heartbeat_cmd); - } - } + if (heartbeat_cmd) { + static unsigned last_heartbeat; + unsigned now = GetTimerMS(); + if (now - last_heartbeat > 30000) { + last_heartbeat = now; + system(heartbeat_cmd); + } + } - if (!skip_timing) - frame_time_remaining = sleep_until_update(&mpctx->time_frame, &aq_sleep_time); + if (!skip_timing) + frame_time_remaining = sleep_until_update(&mpctx->time_frame, &aq_sleep_time); //====================== FLIP PAGE (VIDEO BLT): ========================= -if (!edl_needs_reset) { - current_module="flip_page"; - if (!frame_time_remaining && blit_frame) { - unsigned int t2=GetTimer(); + if (!edl_needs_reset) { + current_module = "flip_page"; + if (!frame_time_remaining && blit_frame) { + unsigned int t2 = GetTimer(); - if(vo_config_count) mpctx->video_out->flip_page(); - mpctx->num_buffered_frames--; + if (vo_config_count) + mpctx->video_out->flip_page(); + mpctx->num_buffered_frames--; - vout_time_usage += (GetTimer() - t2) * 0.000001; - } -} + vout_time_usage += (GetTimer() - t2) * 0.000001; + } + } //====================== A-V TIMESTAMP CORRECTION: ========================= - adjust_sync_and_print_status(frame_time_remaining, mpctx->time_frame); + adjust_sync_and_print_status(frame_time_remaining, mpctx->time_frame); //============================ Auto QUALITY ============================ /*Output quality adjustments:*/ -if(auto_quality>0){ - current_module="autoq"; + if (auto_quality > 0) { + current_module = "autoq"; // float total=0.000001f * (GetTimer()-aq_total_time); // if(output_quality<auto_quality && aq_sleep_time>0.05f*total) - if(output_quality<auto_quality && aq_sleep_time>0) - ++output_quality; - else + if (output_quality < auto_quality && aq_sleep_time > 0) + ++output_quality; + else // if(output_quality>0 && aq_sleep_time<-0.05f*total) - if(output_quality>1 && aq_sleep_time<0) - --output_quality; - else - if(output_quality>0 && aq_sleep_time<-0.050f) // 50ms - output_quality=0; + if (output_quality > 1 && aq_sleep_time < 0) + --output_quality; + else if (output_quality > 0 && aq_sleep_time < -0.050f) // 50ms + output_quality = 0; // printf("total: %8.6f sleep: %8.6f q: %d\n",(0.000001f*aq_total_time),aq_sleep_time,output_quality); - set_video_quality(mpctx->sh_video,output_quality); -} - - if (play_n_frames >= 0 && !frame_time_remaining && blit_frame) { - --play_n_frames; - if (play_n_frames <= 0) mpctx->eof = PT_NEXT_ENTRY; - } + set_video_quality(mpctx->sh_video, output_quality); + } - if (!frame_time_remaining && - ((end_at.type == END_AT_TIME && mpctx->sh_video->pts >= end_at.pos) || - (end_at.type == END_AT_SIZE && stream_tell(mpctx->stream) >= end_at.pos))) - mpctx->eof = PT_NEXT_ENTRY; + if (play_n_frames >= 0 && !frame_time_remaining && blit_frame) { + --play_n_frames; + if (play_n_frames <= 0) + mpctx->eof = PT_NEXT_ENTRY; + } -} // end if(mpctx->sh_video) + if (!frame_time_remaining && + ((end_at.type == END_AT_TIME && mpctx->sh_video->pts >= end_at.pos) || + (end_at.type == END_AT_SIZE && stream_tell(mpctx->stream) >= end_at.pos))) + mpctx->eof = PT_NEXT_ENTRY; + } // end if(mpctx->sh_video) #ifdef CONFIG_DVDNAV - if (mpctx->stream->type == STREAMTYPE_DVDNAV) { - nav_highlight_t hl; - mp_dvdnav_get_highlight (mpctx->stream, &hl); - if (!vo_spudec || !spudec_apply_palette_crop(vo_spudec, hl.palette, hl.sx, hl.sy, hl.ex, hl.ey)) { - osd_set_nav_box (hl.sx, hl.sy, hl.ex, hl.ey); - vo_osd_changed (OSDTYPE_DVDNAV); - } else { - osd_set_nav_box(0, 0, 0, 0); - vo_osd_changed(OSDTYPE_DVDNAV); - vo_osd_changed(OSDTYPE_SPU); - } - - if (mp_dvdnav_stream_has_changed(mpctx->stream)) { - double ar = -1.0; - if (mpctx->sh_video && - stream_control (mpctx->demuxer->stream, - STREAM_CTRL_GET_ASPECT_RATIO, &ar) - != STREAM_UNSUPPORTED) - mpctx->sh_video->stream_aspect = ar; - } - } + if (mpctx->stream->type == STREAMTYPE_DVDNAV) { + nav_highlight_t hl; + mp_dvdnav_get_highlight(mpctx->stream, &hl); + if (!vo_spudec || !spudec_apply_palette_crop(vo_spudec, hl.palette, hl.sx, hl.sy, hl.ex, hl.ey)) { + osd_set_nav_box(hl.sx, hl.sy, hl.ex, hl.ey); + vo_osd_changed(OSDTYPE_DVDNAV); + } else { + osd_set_nav_box(0, 0, 0, 0); + vo_osd_changed(OSDTYPE_DVDNAV); + vo_osd_changed(OSDTYPE_SPU); + } + + if (mp_dvdnav_stream_has_changed(mpctx->stream)) { + double ar = -1.0; + if (mpctx->sh_video && + stream_control(mpctx->demuxer->stream, + STREAM_CTRL_GET_ASPECT_RATIO, &ar) + != STREAM_UNSUPPORTED) + mpctx->sh_video->stream_aspect = ar; + } + } #endif //============================ Handle PAUSE =============================== - current_module="pause"; + current_module = "pause"; - if (mpctx->osd_function == OSD_PAUSE) { - mpctx->was_paused = 1; - pause_loop(); - } + if (mpctx->osd_function == OSD_PAUSE) { + mpctx->was_paused = 1; + pause_loop(); + } // handle -sstep -if(step_sec>0) { - mpctx->osd_function=OSD_FFW; - rel_seek_secs+=step_sec; -} + if (step_sec > 0) { + mpctx->osd_function = OSD_FFW; + rel_seek_secs += step_sec; + } - edl_update(mpctx); + edl_update(mpctx); //================= Keyboard events, SEEKing ==================== - current_module="key_events"; - -{ - mp_cmd_t* cmd; - int brk_cmd = 0; - while( !brk_cmd && (cmd = mp_input_get_cmd(0,0,0)) != NULL) { - brk_cmd = run_command(mpctx, cmd); - if (cmd->id == MP_CMD_EDL_LOADFILE) { - free(edl_filename); - edl_filename = strdup(cmd->args[0].v.s); - if (edl_filename) - edl_loadfile(); - else - mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_EdlOutOfMemFile, - cmd->args[0].v.s); - } - mp_cmd_free(cmd); - if (brk_cmd == 2) - goto goto_enable_cache; - } -} - mpctx->was_paused = 0; - - /* Looping. */ - if(mpctx->eof==1 && mpctx->loop_times>=0) { - mp_msg(MSGT_CPLAYER,MSGL_V,"loop_times = %d, eof = %d\n", mpctx->loop_times,mpctx->eof); - - if(mpctx->loop_times>1) mpctx->loop_times--; else - if(mpctx->loop_times==1) mpctx->loop_times=-1; - play_n_frames=play_n_frames_mf; - mpctx->eof=0; - abs_seek_pos=SEEK_ABSOLUTE; rel_seek_secs=seek_to_sec; - loop_seek = 1; - } - -if(rel_seek_secs || abs_seek_pos){ - if (seek(mpctx, rel_seek_secs, abs_seek_pos) >= 0) { - // Set OSD: - if(!loop_seek){ - if( !edl_decision ) - set_osd_bar(0,"Position",0,100,demuxer_get_percent_pos(mpctx->demuxer)); - } - } - - rel_seek_secs=0; - abs_seek_pos=0; - loop_seek=0; - edl_decision = 0; -} + current_module = "key_events"; + + { + mp_cmd_t *cmd; + int brk_cmd = 0; + while (!brk_cmd && (cmd = mp_input_get_cmd(0, 0, 0)) != NULL) { + brk_cmd = run_command(mpctx, cmd); + if (cmd->id == MP_CMD_EDL_LOADFILE) { + free(edl_filename); + edl_filename = strdup(cmd->args[0].v.s); + if (edl_filename) + edl_loadfile(); + else + mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_EdlOutOfMemFile, + cmd->args[0].v.s); + } + mp_cmd_free(cmd); + if (brk_cmd == 2) + goto goto_enable_cache; + } + } + mpctx->was_paused = 0; + + /* Looping. */ + if (mpctx->eof == 1 && mpctx->loop_times >= 0) { + mp_msg(MSGT_CPLAYER, MSGL_V, "loop_times = %d, eof = %d\n", mpctx->loop_times, mpctx->eof); + + if (mpctx->loop_times > 1) + mpctx->loop_times--; + else if (mpctx->loop_times == 1) + mpctx->loop_times = -1; + play_n_frames = play_n_frames_mf; + mpctx->eof = 0; + abs_seek_pos = SEEK_ABSOLUTE; + rel_seek_secs = seek_to_sec; + loop_seek = 1; + } + + if (rel_seek_secs || abs_seek_pos) { + if (seek(mpctx, rel_seek_secs, abs_seek_pos) >= 0) { + // Set OSD: + if (!loop_seek) { + if (!edl_decision) + set_osd_bar(0, "Position", 0, 100, demuxer_get_percent_pos(mpctx->demuxer)); + } + } + + rel_seek_secs = 0; + abs_seek_pos = 0; + loop_seek = 0; + edl_decision = 0; + } #ifdef CONFIG_GUI - if(use_gui){ - guiEventHandling(); - if(mpctx->demuxer->file_format==DEMUXER_TYPE_AVI && mpctx->sh_video && mpctx->sh_video->video.dwLength>2){ - // get pos from frame number / total frames - guiIntfStruct.Position=(float)mpctx->d_video->pack_no*100.0f/mpctx->sh_video->video.dwLength; - } else { - guiIntfStruct.Position=demuxer_get_percent_pos(mpctx->demuxer); - } - if ( mpctx->sh_video ) guiIntfStruct.TimeSec=mpctx->sh_video->pts; - else if ( mpctx->sh_audio ) guiIntfStruct.TimeSec=playing_audio_pts(mpctx->sh_audio, mpctx->d_audio, mpctx->audio_out); - guiIntfStruct.LengthInSec=demuxer_get_time_length(mpctx->demuxer); - guiGetEvent( guiReDraw,NULL ); - guiGetEvent( guiSetVolume,NULL ); - if(guiIntfStruct.Playing==0) break; // STOP - if(guiIntfStruct.Playing==2) mpctx->osd_function=OSD_PAUSE; - if ( guiIntfStruct.DiskChanged || guiIntfStruct.NewPlay ) goto goto_next_file; + if (use_gui) { + guiEventHandling(); + if (mpctx->demuxer->file_format == DEMUXER_TYPE_AVI && mpctx->sh_video && mpctx->sh_video->video.dwLength > 2) { + // get pos from frame number / total frames + guiIntfStruct.Position = (float)mpctx->d_video->pack_no * 100.0f / mpctx->sh_video->video.dwLength; + } else { + guiIntfStruct.Position = demuxer_get_percent_pos(mpctx->demuxer); + } + if (mpctx->sh_video) + guiIntfStruct.TimeSec = mpctx->sh_video->pts; + else if (mpctx->sh_audio) + guiIntfStruct.TimeSec = playing_audio_pts(mpctx->sh_audio, mpctx->d_audio, mpctx->audio_out); + guiIntfStruct.LengthInSec = demuxer_get_time_length(mpctx->demuxer); + guiGetEvent(guiReDraw, NULL); + guiGetEvent(guiSetVolume, NULL); + if (guiIntfStruct.Playing == 0) + break; // STOP + if (guiIntfStruct.Playing == 2) + mpctx->osd_function = OSD_PAUSE; + if (guiIntfStruct.DiskChanged || guiIntfStruct.NewPlay) + goto goto_next_file; #ifdef CONFIG_DVDREAD - if ( mpctx->stream->type == STREAMTYPE_DVD ) - { - dvd_priv_t * dvdp = mpctx->stream->priv; - guiIntfStruct.DVD.current_chapter=dvd_chapter_from_cell(dvdp,guiIntfStruct.DVD.current_title-1, dvdp->cur_cell)+1; - } + if (mpctx->stream->type == STREAMTYPE_DVD) { + dvd_priv_t *dvdp = mpctx->stream->priv; + guiIntfStruct.DVD.current_chapter = dvd_chapter_from_cell(dvdp, guiIntfStruct.DVD.current_title - 1, dvdp->cur_cell) + 1; + } #endif - } + } #endif /* CONFIG_GUI */ + } // while(!mpctx->eof) -} // while(!mpctx->eof) - -mp_msg(MSGT_GLOBAL,MSGL_V,"EOF code: %d \n",mpctx->eof); + mp_msg(MSGT_GLOBAL, MSGL_V, "EOF code: %d \n", mpctx->eof); #ifdef CONFIG_DVBIN -if(mpctx->dvbin_reopen) -{ - mpctx->eof = 0; - uninit_player(INITIALIZED_ALL-(INITIALIZED_GUI|INITIALIZED_STREAM|INITIALIZED_INPUT|INITIALIZED_GETCH2|(fixed_vo?INITIALIZED_VO:0))); - cache_uninit(mpctx->stream); - mpctx->dvbin_reopen = 0; - goto goto_enable_cache; -} + if (mpctx->dvbin_reopen) { + mpctx->eof = 0; + uninit_player(INITIALIZED_ALL - (INITIALIZED_GUI | INITIALIZED_STREAM | INITIALIZED_INPUT | INITIALIZED_GETCH2 | (fixed_vo ? INITIALIZED_VO : 0))); + cache_uninit(mpctx->stream); + mpctx->dvbin_reopen = 0; + goto goto_enable_cache; + } #endif -} + } goto_next_file: // don't jump here after ao/vo/getch initialization! -mp_msg(MSGT_CPLAYER,MSGL_INFO,"\n"); - -if(benchmark){ - double tot=video_time_usage+vout_time_usage+audio_time_usage; - double total_time_usage; - total_time_usage_start=GetTimer()-total_time_usage_start; - total_time_usage = (float)total_time_usage_start*0.000001; - mp_msg(MSGT_CPLAYER,MSGL_INFO,"\nBENCHMARKs: VC:%8.3fs VO:%8.3fs A:%8.3fs Sys:%8.3fs = %8.3fs\n", - video_time_usage,vout_time_usage,audio_time_usage, - total_time_usage-tot,total_time_usage); - if(total_time_usage>0.0) - mp_msg(MSGT_CPLAYER,MSGL_INFO,"BENCHMARK%%: VC:%8.4f%% VO:%8.4f%% A:%8.4f%% Sys:%8.4f%% = %8.4f%%\n", - 100.0*video_time_usage/total_time_usage, - 100.0*vout_time_usage/total_time_usage, - 100.0*audio_time_usage/total_time_usage, - 100.0*(total_time_usage-tot)/total_time_usage, - 100.0); - if(total_frame_cnt && frame_dropping) - mp_msg(MSGT_CPLAYER,MSGL_INFO,"BENCHMARKn: disp: %d (%3.2f fps) drop: %d (%d%%) total: %d (%3.2f fps)\n", - total_frame_cnt-drop_frame_cnt, - (total_time_usage>0.5)?((total_frame_cnt-drop_frame_cnt)/total_time_usage):0, - drop_frame_cnt, - 100*drop_frame_cnt/total_frame_cnt, - total_frame_cnt, - (total_time_usage>0.5)?(total_frame_cnt/total_time_usage):0); -} + mp_msg(MSGT_CPLAYER, MSGL_INFO, "\n"); + + if (benchmark) { + double tot = video_time_usage + vout_time_usage + audio_time_usage; + double total_time_usage; + total_time_usage_start = GetTimer() - total_time_usage_start; + total_time_usage = (float)total_time_usage_start * 0.000001; + mp_msg(MSGT_CPLAYER, MSGL_INFO, "\nBENCHMARKs: VC:%8.3fs VO:%8.3fs A:%8.3fs Sys:%8.3fs = %8.3fs\n", + video_time_usage, vout_time_usage, audio_time_usage, + total_time_usage - tot, total_time_usage); + if (total_time_usage > 0.0) + mp_msg(MSGT_CPLAYER, MSGL_INFO, "BENCHMARK%%: VC:%8.4f%% VO:%8.4f%% A:%8.4f%% Sys:%8.4f%% = %8.4f%%\n", + 100.0 * video_time_usage / total_time_usage, + 100.0 * vout_time_usage / total_time_usage, + 100.0 * audio_time_usage / total_time_usage, + 100.0 * (total_time_usage - tot) / total_time_usage, + 100.0); + if (total_frame_cnt && frame_dropping) + mp_msg(MSGT_CPLAYER, MSGL_INFO, "BENCHMARKn: disp: %d (%3.2f fps) drop: %d (%d%%) total: %d (%3.2f fps)\n", + total_frame_cnt - drop_frame_cnt, + (total_time_usage > 0.5) ? ((total_frame_cnt - drop_frame_cnt) / total_time_usage) : 0, + drop_frame_cnt, + 100 * drop_frame_cnt / total_frame_cnt, + total_frame_cnt, + (total_time_usage > 0.5) ? (total_frame_cnt / total_time_usage) : 0); + } // time to uninit all, except global stuff: -uninit_player(INITIALIZED_ALL-(INITIALIZED_GUI+INITIALIZED_INPUT+(fixed_vo?INITIALIZED_VO:0))); + uninit_player(INITIALIZED_ALL - (INITIALIZED_GUI + INITIALIZED_INPUT + (fixed_vo ? INITIALIZED_VO : 0))); -if(mpctx->set_of_sub_size > 0) { - current_module="sub_free"; - for(i = 0; i < mpctx->set_of_sub_size; ++i) { - sub_free(mpctx->set_of_subtitles[i]); + if (mpctx->set_of_sub_size > 0) { + current_module = "sub_free"; + for (i = 0; i < mpctx->set_of_sub_size; ++i) { + sub_free(mpctx->set_of_subtitles[i]); #ifdef CONFIG_ASS - if(mpctx->set_of_ass_tracks[i]) - ass_free_track( mpctx->set_of_ass_tracks[i] ); + if (mpctx->set_of_ass_tracks[i]) + ass_free_track(mpctx->set_of_ass_tracks[i]); #endif + } + mpctx->set_of_sub_size = 0; } - mpctx->set_of_sub_size = 0; -} -vo_sub_last = vo_sub=NULL; -subdata=NULL; + vo_sub_last = vo_sub = NULL; + subdata = NULL; #ifdef CONFIG_ASS -ass_track = NULL; -if(ass_library) - ass_clear_fonts(ass_library); + ass_track = NULL; + if (ass_library) + ass_clear_fonts(ass_library); #endif -if(mpctx->eof == PT_NEXT_ENTRY || mpctx->eof == PT_PREV_ENTRY) { - mpctx->eof = mpctx->eof == PT_NEXT_ENTRY ? 1 : -1; - if(play_tree_iter_step(mpctx->playtree_iter,mpctx->play_tree_step,0) == PLAY_TREE_ITER_ENTRY) { - mpctx->eof = 1; - } else { - play_tree_iter_free(mpctx->playtree_iter); - mpctx->playtree_iter = NULL; - } - mpctx->play_tree_step = 1; -} else if(mpctx->eof == PT_UP_NEXT || mpctx->eof == PT_UP_PREV) { - mpctx->eof = mpctx->eof == PT_UP_NEXT ? 1 : -1; - if(mpctx->playtree_iter) { - if(play_tree_iter_up_step(mpctx->playtree_iter,mpctx->eof,0) == PLAY_TREE_ITER_ENTRY) { + if (mpctx->eof == PT_NEXT_ENTRY || mpctx->eof == PT_PREV_ENTRY) { + mpctx->eof = mpctx->eof == PT_NEXT_ENTRY ? 1 : -1; + if (play_tree_iter_step(mpctx->playtree_iter, mpctx->play_tree_step, 0) == PLAY_TREE_ITER_ENTRY) { mpctx->eof = 1; } else { play_tree_iter_free(mpctx->playtree_iter); mpctx->playtree_iter = NULL; } + mpctx->play_tree_step = 1; + } else if (mpctx->eof == PT_UP_NEXT || mpctx->eof == PT_UP_PREV) { + mpctx->eof = mpctx->eof == PT_UP_NEXT ? 1 : -1; + if (mpctx->playtree_iter) { + if (play_tree_iter_up_step(mpctx->playtree_iter, mpctx->eof, 0) == PLAY_TREE_ITER_ENTRY) { + mpctx->eof = 1; + } else { + play_tree_iter_free(mpctx->playtree_iter); + mpctx->playtree_iter = NULL; + } + } + } else if (mpctx->eof == PT_STOP) { + play_tree_iter_free(mpctx->playtree_iter); + mpctx->playtree_iter = NULL; + } else { // NEXT PREV SRC + mpctx->eof = mpctx->eof == PT_PREV_SRC ? -1 : 1; } -} else if (mpctx->eof == PT_STOP) { - play_tree_iter_free(mpctx->playtree_iter); - mpctx->playtree_iter = NULL; -} else { // NEXT PREV SRC - mpctx->eof = mpctx->eof == PT_PREV_SRC ? -1 : 1; -} -if(mpctx->eof == 0) mpctx->eof = 1; + if (mpctx->eof == 0) + mpctx->eof = 1; -while(mpctx->playtree_iter != NULL) { - filename = play_tree_iter_get_file(mpctx->playtree_iter,mpctx->eof); - if(filename == NULL) { - if(play_tree_iter_step(mpctx->playtree_iter,mpctx->eof,0) != PLAY_TREE_ITER_ENTRY) { - play_tree_iter_free(mpctx->playtree_iter); - mpctx->playtree_iter = NULL; - } - } else - break; -} + while (mpctx->playtree_iter != NULL) { + filename = play_tree_iter_get_file(mpctx->playtree_iter, mpctx->eof); + if (filename == NULL) { + if (play_tree_iter_step(mpctx->playtree_iter, mpctx->eof, 0) != PLAY_TREE_ITER_ENTRY) { + play_tree_iter_free(mpctx->playtree_iter); + mpctx->playtree_iter = NULL; + } + } else + break; + } #ifdef CONFIG_GUI -if(use_gui && !mpctx->playtree_iter) { + if (use_gui && !mpctx->playtree_iter) { #ifdef CONFIG_DVDREAD - if(!guiIntfStruct.DiskChanged) + if (!guiIntfStruct.DiskChanged) #endif mplEnd(); -} + } #endif -if(use_gui || mpctx->playtree_iter != NULL || player_idle_mode){ - if(!mpctx->playtree_iter) filename = NULL; - mpctx->eof = 0; - goto play_next_file; -} - + if (use_gui || mpctx->playtree_iter != NULL || player_idle_mode) { + if (!mpctx->playtree_iter) + filename = NULL; + mpctx->eof = 0; + goto play_next_file; + } -exit_player_with_rc(EXIT_EOF, 0); + exit_player_with_rc(EXIT_EOF, 0); -return 1; + return 1; } + #endif /* DISABLE_MAIN */ -- 1.7.4.4
On Sat, 16 Apr 2011 00:02:51 +0200, Clément Bœsch wrote:
Direct use of uncrustify profile with mplayer.c
fun time to post this :) i assume it shows no diffs with diff -wb ? -compn
On Fri, Apr 15, 2011 at 07:23:42PM -0400, compn wrote: [...]
i assume it shows no diffs with diff -wb ?
Check git show -w 72d3ca8, you'll notice that some code like: if (foo) { became: if (foo) { But the diff is more readable with -w of course. -- Clément B.
On Sat, Apr 16, 2011 at 12:02:51AM +0200, Clément Bœsch wrote:
Direct use of uncrustify profile with mplayer.c
I thnk I mentioned it before: I'd really like to have a description e.g. in DOCS/tech/svn-howto how to verify that the binary has not changed. Maybe it can even be done with some helper-stuff in the Makefile. Manually verifying or everyone having to figure it out themselves just doesn't scale and just not doing it seems like a bad idea to me.
Reimar Döffinger wrote on Sat, 16 Apr 2011 15:41:33 +0200:
On Sat, Apr 16, 2011 at 12:02:51AM +0200, Clément Boesch wrote:
Direct use of uncrustify profile with mplayer.c
I thnk I mentioned it before: I'd really like to have a description e.g. in DOCS/tech/svn-howto how to verify that the binary has not changed. Maybe it can even be done with some helper-stuff in the Makefile.
I do (in short): make file.c mv file.o somewhere uncrustify file.c make file.c cmp file.o somewhere/file.o Something like this (with file.c backup) should be easily doable in the Makefile, but due to my experience in Makefile changes I don't feel like making a start on it. ;-) Ingo
On Sun, Apr 17, 2011 at 11:03:45AM +0200, Ingo Brückl wrote:
Reimar Döffinger wrote on Sat, 16 Apr 2011 15:41:33 +0200:
On Sat, Apr 16, 2011 at 12:02:51AM +0200, Clément Boesch wrote:
Direct use of uncrustify profile with mplayer.c
I thnk I mentioned it before: I'd really like to have a description e.g. in DOCS/tech/svn-howto how to verify that the binary has not changed. Maybe it can even be done with some helper-stuff in the Makefile.
I do (in short):
make file.c mv file.o somewhere uncrustify file.c make file.c cmp file.o somewhere/file.o
Something like this (with file.c backup) should be easily doable in the Makefile, but due to my experience in Makefile changes I don't feel like making a start on it. ;-)
Maybe something like this would do: Index: Makefile =================================================================== --- Makefile (revision 33269) +++ Makefile (working copy) @@ -820,6 +820,12 @@ codecs.conf.h: codec-cfg$(EXESUF) etc/codecs.conf ./$^ > $@ +checksums: $(MPLAYER_DEPS) $(MENCODER_DEPS) mplayer$(EXESUF) mencoder$(EXESUF) + md5sum $^ > checksums + +check_checksums: $(MPLAYER_DEPS) $(MENCODER_DEPS) mplayer$(EXESUF) mencoder$(EXESUF) + md5sum -c checksums + # ./configure must be rerun if it changed config.mak: configure @echo "############################################################" @@ -1112,7 +1118,7 @@ -include $(DEP_FILES) $(DRIVER_DEP_FILES) $(TESTS_DEP_FILES) $(TOOLS_DEP_FILES) $(DHAHELPER_DEPS_FILES) .PHONY: all doxygen *install* *tools drivers dhahelper* -.PHONY: checkheaders *clean tests +.PHONY: checkheaders *clean tests check_checksums # Disable suffix rules. Most of the builtin rules are suffix rules, # so this saves some time on slow systems.
On Sun, Apr 17, 2011 at 07:07:05PM +0200, Reimar Döffinger wrote:
On Sun, Apr 17, 2011 at 11:03:45AM +0200, Ingo Brückl wrote:
Reimar Döffinger wrote on Sat, 16 Apr 2011 15:41:33 +0200:
On Sat, Apr 16, 2011 at 12:02:51AM +0200, Clément Boesch wrote:
Direct use of uncrustify profile with mplayer.c
I thnk I mentioned it before: I'd really like to have a description e.g. in DOCS/tech/svn-howto how to verify that the binary has not changed. Maybe it can even be done with some helper-stuff in the Makefile.
I do (in short):
make file.c mv file.o somewhere uncrustify file.c make file.c cmp file.o somewhere/file.o
Something like this (with file.c backup) should be easily doable in the Makefile, but due to my experience in Makefile changes I don't feel like making a start on it. ;-)
Maybe something like this would do: Index: Makefile =================================================================== --- Makefile (revision 33269) +++ Makefile (working copy) @@ -820,6 +820,12 @@ codecs.conf.h: codec-cfg$(EXESUF) etc/codecs.conf ./$^ > $@
+checksums: $(MPLAYER_DEPS) $(MENCODER_DEPS) mplayer$(EXESUF) mencoder$(EXESUF) + md5sum $^ > checksums + +check_checksums: $(MPLAYER_DEPS) $(MENCODER_DEPS) mplayer$(EXESUF) mencoder$(EXESUF) + md5sum -c checksums +
Nicely done. But this will need some adjustments: for example I don't remember seeing md5sum on *BSD, but I guess it's not that important. Also, it may be necessary to mention the use of ./configure --extra-cflags=-DNDEBUG (maybe also something for MP_DEBUG?). -- Clément B.
On Sun, Apr 17, 2011 at 11:37:17PM +0200, Clément Bœsch wrote:
On Sun, Apr 17, 2011 at 07:07:05PM +0200, Reimar Döffinger wrote:
On Sun, Apr 17, 2011 at 11:03:45AM +0200, Ingo Brückl wrote:
Reimar Döffinger wrote on Sat, 16 Apr 2011 15:41:33 +0200:
On Sat, Apr 16, 2011 at 12:02:51AM +0200, Clément Boesch wrote:
Direct use of uncrustify profile with mplayer.c
I thnk I mentioned it before: I'd really like to have a description e.g. in DOCS/tech/svn-howto how to verify that the binary has not changed. Maybe it can even be done with some helper-stuff in the Makefile.
I do (in short):
make file.c mv file.o somewhere uncrustify file.c make file.c cmp file.o somewhere/file.o
Something like this (with file.c backup) should be easily doable in the Makefile, but due to my experience in Makefile changes I don't feel like making a start on it. ;-)
Maybe something like this would do: Index: Makefile =================================================================== --- Makefile (revision 33269) +++ Makefile (working copy) @@ -820,6 +820,12 @@ codecs.conf.h: codec-cfg$(EXESUF) etc/codecs.conf ./$^ > $@
+checksums: $(MPLAYER_DEPS) $(MENCODER_DEPS) mplayer$(EXESUF) mencoder$(EXESUF) + md5sum $^ > checksums + +check_checksums: $(MPLAYER_DEPS) $(MENCODER_DEPS) mplayer$(EXESUF) mencoder$(EXESUF) + md5sum -c checksums +
Nicely done. But this will need some adjustments: for example I don't remember seeing md5sum on *BSD, but I guess it's not that important. Also, it may be necessary to mention the use of ./configure --extra-cflags=-DNDEBUG (maybe also something for MP_DEBUG?).
Btw, I just run the test after the 5 patches, and binaries are changed just because of two changes in the last one: @@ -565,13 +547,12 @@ static void mp_dvdnav_context_free(MPContext *ctx) { if (ctx->nav_smpi) free_mp_image(ctx->nav_smpi); - ctx->nav_smpi = NULL; - free(ctx->nav_buffer); + ctx->nav_smpi = NULL; ctx->nav_buffer = NULL; ctx->nav_start = NULL; ctx->nav_in_size = 0; + free(ctx->nav_buffer); } And: -// free mplayer config - if (mconfig) + if (mconfig) { m_config_free(mconfig); - mconfig = NULL; + mconfig = NULL; + } Removing those chunks make check_checksums error-free. -- Clément B.
On Sun, Apr 17, 2011 at 11:42:43PM +0200, Clément Bœsch wrote:
Btw, I just run the test after the 5 patches, and binaries are changed just because of two changes in the last one:
@@ -565,13 +547,12 @@ static void mp_dvdnav_context_free(MPContext *ctx) { if (ctx->nav_smpi) free_mp_image(ctx->nav_smpi); - ctx->nav_smpi = NULL; - free(ctx->nav_buffer); + ctx->nav_smpi = NULL; ctx->nav_buffer = NULL; ctx->nav_start = NULL; ctx->nav_in_size = 0; + free(ctx->nav_buffer); }
This non-sense if fixed locally. Sorry. -- Clément B.
On Sun, Apr 17, 2011 at 07:07:05PM +0200, Reimar Döffinger wrote:
On Sun, Apr 17, 2011 at 11:03:45AM +0200, Ingo Brückl wrote:
Reimar Döffinger wrote on Sat, 16 Apr 2011 15:41:33 +0200:
On Sat, Apr 16, 2011 at 12:02:51AM +0200, Clément Boesch wrote:
Direct use of uncrustify profile with mplayer.c
I thnk I mentioned it before: I'd really like to have a description e.g. in DOCS/tech/svn-howto how to verify that the binary has not changed. Maybe it can even be done with some helper-stuff in the Makefile.
I do (in short):
make file.c mv file.o somewhere uncrustify file.c make file.c cmp file.o somewhere/file.o
Something like this (with file.c backup) should be easily doable in the Makefile, but due to my experience in Makefile changes I don't feel like making a start on it. ;-)
Maybe something like this would do: Index: Makefile =================================================================== --- Makefile (revision 33269) +++ Makefile (working copy) @@ -820,6 +820,12 @@ codecs.conf.h: codec-cfg$(EXESUF) etc/codecs.conf ./$^ > $@
+checksums: $(MPLAYER_DEPS) $(MENCODER_DEPS) mplayer$(EXESUF) mencoder$(EXESUF) + md5sum $^ > checksums + +check_checksums: $(MPLAYER_DEPS) $(MENCODER_DEPS) mplayer$(EXESUF) mencoder$(EXESUF) + md5sum -c checksums + # ./configure must be rerun if it changed config.mak: configure @echo "############################################################" @@ -1112,7 +1118,7 @@ -include $(DEP_FILES) $(DRIVER_DEP_FILES) $(TESTS_DEP_FILES) $(TOOLS_DEP_FILES) $(DHAHELPER_DEPS_FILES)
.PHONY: all doxygen *install* *tools drivers dhahelper* -.PHONY: checkheaders *clean tests +.PHONY: checkheaders *clean tests check_checksums
# Disable suffix rules. Most of the builtin rules are suffix rules, # so this saves some time on slow systems.
Do you mind committing this or sth similar? Even if it's not perfect it's pretty useful, and i'd like to get done with that bunch of cosmetic patches… -- Clément B.
On Sun, May 01, 2011 at 06:53:36PM +0200, Clément Bœsch wrote:
On Sun, Apr 17, 2011 at 07:07:05PM +0200, Reimar Döffinger wrote:
On Sun, Apr 17, 2011 at 11:03:45AM +0200, Ingo Brückl wrote:
Reimar Döffinger wrote on Sat, 16 Apr 2011 15:41:33 +0200:
On Sat, Apr 16, 2011 at 12:02:51AM +0200, Clément Boesch wrote:
Direct use of uncrustify profile with mplayer.c
I thnk I mentioned it before: I'd really like to have a description e.g. in DOCS/tech/svn-howto how to verify that the binary has not changed. Maybe it can even be done with some helper-stuff in the Makefile.
I do (in short):
make file.c mv file.o somewhere uncrustify file.c make file.c cmp file.o somewhere/file.o
Something like this (with file.c backup) should be easily doable in the Makefile, but due to my experience in Makefile changes I don't feel like making a start on it. ;-)
Maybe something like this would do: Index: Makefile =================================================================== --- Makefile (revision 33269) +++ Makefile (working copy) @@ -820,6 +820,12 @@ codecs.conf.h: codec-cfg$(EXESUF) etc/codecs.conf ./$^ > $@
+checksums: $(MPLAYER_DEPS) $(MENCODER_DEPS) mplayer$(EXESUF) mencoder$(EXESUF) + md5sum $^ > checksums + +check_checksums: $(MPLAYER_DEPS) $(MENCODER_DEPS) mplayer$(EXESUF) mencoder$(EXESUF) + md5sum -c checksums + # ./configure must be rerun if it changed config.mak: configure @echo "############################################################" @@ -1112,7 +1118,7 @@ -include $(DEP_FILES) $(DRIVER_DEP_FILES) $(TESTS_DEP_FILES) $(TOOLS_DEP_FILES) $(DHAHELPER_DEPS_FILES)
.PHONY: all doxygen *install* *tools drivers dhahelper* -.PHONY: checkheaders *clean tests +.PHONY: checkheaders *clean tests check_checksums
# Disable suffix rules. Most of the builtin rules are suffix rules, # so this saves some time on slow systems.
Do you mind committing this or sth similar? Even if it's not perfect it's pretty useful, and i'd like to get done with that bunch of cosmetic patches…
Sure, Diego can still flame me on -cvslog if it's bad :-)
On Sun, May 01, 2011 at 07:13:36PM +0200, Reimar Döffinger wrote:
[...] Maybe something like this would do: Index: Makefile =================================================================== --- Makefile (revision 33269) +++ Makefile (working copy) @@ -820,6 +820,12 @@ codecs.conf.h: codec-cfg$(EXESUF) etc/codecs.conf ./$^ > $@
+checksums: $(MPLAYER_DEPS) $(MENCODER_DEPS) mplayer$(EXESUF) mencoder$(EXESUF) + md5sum $^ > checksums + +check_checksums: $(MPLAYER_DEPS) $(MENCODER_DEPS) mplayer$(EXESUF) mencoder$(EXESUF) + md5sum -c checksums + # ./configure must be rerun if it changed config.mak: configure @echo "############################################################" @@ -1112,7 +1118,7 @@ -include $(DEP_FILES) $(DRIVER_DEP_FILES) $(TESTS_DEP_FILES) $(TOOLS_DEP_FILES) $(DHAHELPER_DEPS_FILES)
.PHONY: all doxygen *install* *tools drivers dhahelper* -.PHONY: checkheaders *clean tests +.PHONY: checkheaders *clean tests check_checksums
# Disable suffix rules. Most of the builtin rules are suffix rules, # so this saves some time on slow systems.
Do you mind committing this or sth similar? Even if it's not perfect it's pretty useful, and i'd like to get done with that bunch of cosmetic patches…
Sure, Diego can still flame me on -cvslog if it's bad :-)
Thank you :) -- Clément B.
On Sat, Apr 16, 2011 at 03:41:33PM +0200, Reimar Döffinger wrote:
On Sat, Apr 16, 2011 at 12:02:51AM +0200, Clément Bœsch wrote:
Direct use of uncrustify profile with mplayer.c
I thnk I mentioned it before: I'd really like to have a description e.g. in DOCS/tech/svn-howto how to verify that the binary has not changed. Maybe it can even be done with some helper-stuff in the Makefile. Manually verifying or everyone having to figure it out themselves just doesn't scale and just not doing it seems like a bad idea to me.
Indeed, I remember now, but can you give some precisions on what exactly you would like? Should we provide a way to test compilation and comparisons with all the possible CONFIG_? If so… how? Can you give an example of the helper usage you'd like? assert() can be avoided with -DNDEBUG, but how should we deal with the usage of __LINE__ for example? -- Clément B.
On Sun, Apr 17, 2011 at 06:35:21PM +0200, Clément Bœsch wrote:
On Sat, Apr 16, 2011 at 03:41:33PM +0200, Reimar Döffinger wrote:
On Sat, Apr 16, 2011 at 12:02:51AM +0200, Clément Bœsch wrote:
Direct use of uncrustify profile with mplayer.c
I thnk I mentioned it before: I'd really like to have a description e.g. in DOCS/tech/svn-howto how to verify that the binary has not changed. Maybe it can even be done with some helper-stuff in the Makefile. Manually verifying or everyone having to figure it out themselves just doesn't scale and just not doing it seems like a bad idea to me.
Indeed, I remember now, but can you give some precisions on what exactly you would like? Should we provide a way to test compilation and comparisons with all the possible CONFIG_? If so… how?
I don't think that will work out. Just an easy way for people to find where something might have gone in a cosmetic change and/or in general to verify a cosmetic change really is only that.
Can you give an example of the helper usage you'd like? assert() can be avoided with -DNDEBUG, but how should we deal with the usage of __LINE__ for example?
That I have no idea for right now.
Clément Boesch wrote on Sun, 17 Apr 2011 18:35:21 +0200:
Should we provide a way to test compilation and comparisons with all the possible CONFIG_?
Oh. Now I remember this issue. Ingo
On Sat, Apr 16, 2011 at 12:02:51AM +0200, Clément Bœsch wrote:
Direct use of uncrustify profile with mplayer.c --- mplayer.c | 4900 +++++++++++++++++++++++++++++++------------------------------ 1 files changed, 2491 insertions(+), 2409 deletions(-)
Patch updated and re-attached. I'll commit it as soon as any other dev agree with it. If you have anything against this, it's the moment. (make check_checksums OK of course) -- Clément B.
On Thu, May 05, 2011 at 12:34:35PM +0200, Clément Bœsch wrote:
On Sat, Apr 16, 2011 at 12:02:51AM +0200, Clément Bœsch wrote:
Direct use of uncrustify profile with mplayer.c --- mplayer.c | 4900 +++++++++++++++++++++++++++++++------------------------------ 1 files changed, 2491 insertions(+), 2409 deletions(-)
Patch updated and re-attached. I'll commit it as soon as any other dev agree with it. If you have anything against this, it's the moment.
(make check_checksums OK of course)
Doxygen comments were broken because of the uncrustify sp_cmt_cpp_start setting. It is now fixed, so patch re-attached. Sorry for the noise. A second uncrustify run does not make any change, and check_checksums still not reporting any issue. -- Clément B.
On Thu, May 05, 2011 at 01:17:33PM +0200, Clément Bœsch wrote:
On Thu, May 05, 2011 at 12:34:35PM +0200, Clément Bœsch wrote:
On Sat, Apr 16, 2011 at 12:02:51AM +0200, Clément Bœsch wrote:
Direct use of uncrustify profile with mplayer.c --- mplayer.c | 4900 +++++++++++++++++++++++++++++++------------------------------ 1 files changed, 2491 insertions(+), 2409 deletions(-)
Patch updated and re-attached. I'll commit it as soon as any other dev agree with it. If you have anything against this, it's the moment.
(make check_checksums OK of course)
Doxygen comments were broken because of the uncrustify sp_cmt_cpp_start setting. It is now fixed, so patch re-attached. Sorry for the noise.
A second uncrustify run does not make any change, and check_checksums still not reporting any issue.
-- Clément B.
From 3a4e9b0a7d0c116084d657d6474dc37dafe40d81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= <ubitux@gmail.com> Date: Thu, 5 May 2011 13:15:08 +0200 Subject: [PATCH] Prettify main MPlayer source file.
Direct use of uncrustify profile with mplayer.c
Since no one seems to object and we've waited to much for this, I'll commit this in 3 days. -- Clément B.
On Fri, May 06, 2011 at 03:34:42PM +0200, Clément Bœsch wrote:
On Thu, May 05, 2011 at 01:17:33PM +0200, Clément Bœsch wrote:
On Thu, May 05, 2011 at 12:34:35PM +0200, Clément Bœsch wrote:
On Sat, Apr 16, 2011 at 12:02:51AM +0200, Clément Bœsch wrote:
Direct use of uncrustify profile with mplayer.c --- mplayer.c | 4900 +++++++++++++++++++++++++++++++------------------------------ 1 files changed, 2491 insertions(+), 2409 deletions(-)
Patch updated and re-attached. I'll commit it as soon as any other dev agree with it. If you have anything against this, it's the moment.
(make check_checksums OK of course)
Doxygen comments were broken because of the uncrustify sp_cmt_cpp_start setting. It is now fixed, so patch re-attached. Sorry for the noise.
A second uncrustify run does not make any change, and check_checksums still not reporting any issue.
-- Clément B.
From 3a4e9b0a7d0c116084d657d6474dc37dafe40d81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= <ubitux@gmail.com> Date: Thu, 5 May 2011 13:15:08 +0200 Subject: [PATCH] Prettify main MPlayer source file.
Direct use of uncrustify profile with mplayer.c
Since no one seems to object and we've waited to much for this, I'll commit this in 3 days.
Checked with make checksums/check_checksums and applied. Request any cosmetic issues ASAP so I can put them in the last patch 5/5 and get done with it. -- Clément B.
--- mplayer.c | 72 +++++++++++++++++++++++++----------------------------------- 1 files changed, 30 insertions(+), 42 deletions(-) diff --git a/mplayer.c b/mplayer.c index 20ef389..2d1386d 100644 --- a/mplayer.c +++ b/mplayer.c @@ -1178,11 +1178,11 @@ void init_vo_spudec(void) } /** - * \brief append a formatted string - * \param buf buffer to print into - * \param pos position of terminating 0 in buf - * \param len maximum number of characters in buf, not including terminating 0 - * \param format printf format string + * @brief append a formatted string + * @param buf buffer to print into + * @param pos position of terminating 0 in buf + * @param len maximum number of characters in buf, not including terminating 0 + * @param format printf format string */ static void saddf(char *buf, unsigned *pos, int len, const char *format, ...) { @@ -1197,11 +1197,11 @@ static void saddf(char *buf, unsigned *pos, int len, const char *format, ...) } /** - * \brief append time in the hh:mm:ss.f format - * \param buf buffer to print into - * \param pos position of terminating 0 in buf - * \param len maximum number of characters in buf, not including terminating 0 - * \param time time value to convert/append + * @brief append time in the hh:mm:ss.f format + * @param buf buffer to print into + * @param pos position of terminating 0 in buf + * @param len maximum number of characters in buf, not including terminating 0 + * @param time time value to convert/append */ static void sadd_hhmmssf(char *buf, unsigned *pos, int len, float time) { @@ -1222,10 +1222,10 @@ static void sadd_hhmmssf(char *buf, unsigned *pos, int len, float time) } /** - * \brief print the status line - * \param a_pos audio position - * \param a_v A-V desynchronization - * \param corr amount out A-V synchronization + * @brief print the status line + * @param a_pos audio position + * @param a_v A-V desynchronization + * @param corr amount out A-V synchronization */ static void print_status(float a_pos, float a_v, float corr) { @@ -1316,10 +1316,10 @@ static void print_status(float a_pos, float a_v, float corr) } /** - * \brief build a chain of audio filters that converts the input format - * to the ao's format, taking into account the current playback_speed. - * \param sh_audio describes the requested input format of the chain. - * \param ao_data describes the requested output format of the chain. + * @brief build a chain of audio filters that converts the input format + * to the ao's format, taking into account the current playback_speed. + * @param sh_audio describes the requested input format of the chain. + * @param ao_data describes the requested output format of the chain. */ static int build_afilter_chain(sh_audio_t *sh_audio, ao_data_t *ao_data) { @@ -1373,13 +1373,11 @@ struct mp_osd_msg { static mp_osd_msg_t *osd_msg_stack; /** - * \brief Add a message on the OSD message stack - * - * If a message with the same id is already present in the stack - * it is pulled on top of the stack, otherwise a new message is created. + * @brief Add a message on the OSD message stack * + * If a message with the same id is already present in the stack + * it is pulled on top of the stack, otherwise a new message is created. */ - void set_osd_msg(int id, int level, int time, const char *fmt, ...) { mp_osd_msg_t *msg, *last = NULL; @@ -1412,12 +1410,10 @@ void set_osd_msg(int id, int level, int time, const char *fmt, ...) } /** - * \brief Remove a message from the OSD stack - * - * This function can be used to get rid of a message right away. + * @brief Remove a message from the OSD stack * + * This function can be used to get rid of a message right away. */ - void rm_osd_msg(int id) { mp_osd_msg_t *msg, *last = NULL; @@ -1437,10 +1433,8 @@ void rm_osd_msg(int id) } /** - * \brief Remove all messages from the OSD stack - * + * @brief Remove all messages from the OSD stack */ - static void clear_osd_msgs(void) { mp_osd_msg_t *msg = osd_msg_stack, *prev = NULL; @@ -1453,13 +1447,11 @@ static void clear_osd_msgs(void) } /** - * \brief Get the current message from the OSD stack. - * - * This function decrements the message timer and destroys the old ones. - * The message that should be displayed is returned (if any). + * @brief Get the current message from the OSD stack. * + * This function decrements the message timer and destroys the old ones. + * The message that should be displayed is returned (if any). */ - static mp_osd_msg_t *get_osd_msg(void) { mp_osd_msg_t *msg, *prev, *last = NULL; @@ -1519,12 +1511,10 @@ static mp_osd_msg_t *get_osd_msg(void) } /** - * \brief Display the OSD bar. + * @brief Display the OSD bar. * * Display the OSD bar or fall back on a simple message. - * */ - void set_osd_bar(int type, const char *name, double min, double max, double val) { if (osd_level < 1) @@ -1543,7 +1533,7 @@ void set_osd_bar(int type, const char *name, double min, double max, double val) } /** - * \brief Display text subtitles on the OSD + * @brief Display text subtitles on the OSD */ void set_osd_subtitle(subtitle *subs) { @@ -1565,14 +1555,12 @@ void set_osd_subtitle(subtitle *subs) } /** - * \brief Update the OSD message line. + * @brief Update the OSD message line. * * This function displays the current message on the vo OSD or on the term. * If the stack is empty and the OSD level is high enough the timer * is displayed (only on the vo OSD). - * */ - static void update_osd_msg(void) { mp_osd_msg_t *msg; -- 1.7.4.4
On Sat, Apr 16, 2011 at 12:02:52AM +0200, Clément Bœsch wrote:
--- mplayer.c | 72 +++++++++++++++++++++++++----------------------------------- 1 files changed, 30 insertions(+), 42 deletions(-)
OK I've been meaning to do something similar for a long time myself, thanks for beating me to it. Diego
On Sun, Apr 17, 2011 at 07:29:56PM +0200, Diego Biurrun wrote:
On Sat, Apr 16, 2011 at 12:02:52AM +0200, Clément Bœsch wrote:
--- mplayer.c | 72 +++++++++++++++++++++++++----------------------------------- 1 files changed, 30 insertions(+), 42 deletions(-)
OK
I've been meaning to do something similar for a long time myself, thanks for beating me to it.
Before I'll apply this, could you enlight me about the \file and \ingroup at the beginning of the file, and also OSDMsgStack/Command2Property later in the file? Should we keep that stuff? -- Clément B.
On Sun, May 01, 2011 at 02:40:17AM +0200, Clément Bœsch wrote:
On Sun, Apr 17, 2011 at 07:29:56PM +0200, Diego Biurrun wrote:
On Sat, Apr 16, 2011 at 12:02:52AM +0200, Clément Bœsch wrote:
--- mplayer.c | 72 +++++++++++++++++++++++++----------------------------------- 1 files changed, 30 insertions(+), 42 deletions(-)
OK
I've been meaning to do something similar for a long time myself, thanks for beating me to it.
Before I'll apply this, could you enlight me about the \file
Looks bogus to me.
and \ingroup at the beginning of the file, and also OSDMsgStack/Command2Property later in the file? Should we keep that stuff?
I have no idea. Diego
On Wed, May 04, 2011 at 05:20:39PM +0200, Diego Biurrun wrote:
On Sun, May 01, 2011 at 02:40:17AM +0200, Clément Bœsch wrote:
On Sun, Apr 17, 2011 at 07:29:56PM +0200, Diego Biurrun wrote:
On Sat, Apr 16, 2011 at 12:02:52AM +0200, Clément Bœsch wrote:
--- mplayer.c | 72 +++++++++++++++++++++++++----------------------------------- 1 files changed, 30 insertions(+), 42 deletions(-)
OK
I've been meaning to do something similar for a long time myself, thanks for beating me to it.
Before I'll apply this, could you enlight me about the \file
Looks bogus to me.
and \ingroup at the beginning of the file, and also OSDMsgStack/Command2Property later in the file? Should we keep that stuff?
I have no idea.
I'll send a patch to remove those weird cruft then. -- Clément B.
On Wed, May 04, 2011 at 05:23:45PM +0200, Clément Bœsch wrote:
On Wed, May 04, 2011 at 05:20:39PM +0200, Diego Biurrun wrote:
On Sun, May 01, 2011 at 02:40:17AM +0200, Clément Bœsch wrote:
On Sun, Apr 17, 2011 at 07:29:56PM +0200, Diego Biurrun wrote:
On Sat, Apr 16, 2011 at 12:02:52AM +0200, Clément Bœsch wrote:
--- mplayer.c | 72 +++++++++++++++++++++++++----------------------------------- 1 files changed, 30 insertions(+), 42 deletions(-)
OK
I've been meaning to do something similar for a long time myself, thanks for beating me to it.
Before I'll apply this, could you enlight me about the \file
Looks bogus to me.
and \ingroup at the beginning of the file, and also OSDMsgStack/Command2Property later in the file? Should we keep that stuff?
I have no idea.
I'll send a patch to remove those weird cruft then.
Applied directlty with various other changes after a small talk on IRC with Diego. -- Clément B.
Due to uncrustify and A.I. limitations, humans are still needed sometimes. --- mplayer.c | 283 +++++++++++++++++++++++++------------------------------------ 1 files changed, 114 insertions(+), 169 deletions(-) diff --git a/mplayer.c b/mplayer.c index 2d1386d..64e1990 100644 --- a/mplayer.c +++ b/mplayer.c @@ -453,16 +453,11 @@ char *get_metadata(metadata_t type) return strdup(mp_basename(filename)); case META_VIDEO_CODEC: - if (sh_video->format == 0x10000001) - return strdup("mpeg1"); - else if (sh_video->format == 0x10000002) - return strdup("mpeg2"); - else if (sh_video->format == 0x10000004) - return strdup("mpeg4"); - else if (sh_video->format == 0x10000005) - return strdup("h264"); - else if (sh_video->format >= 0x20202020) - return mp_asprintf("%.4s", (char *)&sh_video->format); + if (sh_video->format == 0x10000001) return strdup("mpeg1"); + else if (sh_video->format == 0x10000002) return strdup("mpeg2"); + else if (sh_video->format == 0x10000004) return strdup("mpeg4"); + else if (sh_video->format == 0x10000005) return strdup("h264"); + else if (sh_video->format >= 0x20202020) return mp_asprintf("%.4s", (char *)&sh_video->format); return mp_asprintf("0x%08X", sh_video->format); case META_VIDEO_BITRATE: @@ -483,26 +478,13 @@ char *get_metadata(metadata_t type) return mp_asprintf("%d Hz, %d ch.", sh_audio->samplerate, sh_audio->channels); /* check for valid demuxer */ - case META_INFO_TITLE: - return get_demuxer_info("Title"); - - case META_INFO_ARTIST: - return get_demuxer_info("Artist"); - - case META_INFO_ALBUM: - return get_demuxer_info("Album"); - - case META_INFO_YEAR: - return get_demuxer_info("Year"); - - case META_INFO_COMMENT: - return get_demuxer_info("Comment"); - - case META_INFO_TRACK: - return get_demuxer_info("Track"); - - case META_INFO_GENRE: - return get_demuxer_info("Genre"); + case META_INFO_TITLE: return get_demuxer_info("Title"); + case META_INFO_ARTIST: return get_demuxer_info("Artist"); + case META_INFO_ALBUM: return get_demuxer_info("Album"); + case META_INFO_YEAR: return get_demuxer_info("Year"); + case META_INFO_COMMENT: return get_demuxer_info("Comment"); + case META_INFO_TRACK: return get_demuxer_info("Track"); + case META_INFO_GENRE: return get_demuxer_info("Genre"); default: break; @@ -520,14 +502,14 @@ static void print_file_properties(const MPContext *mpctx, const char *filename) if (mpctx->sh_video) { /* Assume FOURCC if all bytes >= 0x20 (' ') */ if (mpctx->sh_video->format >= 0x20202020) - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FORMAT=%.4s\n", (char *)&mpctx->sh_video->format); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FORMAT=%.4s\n", (char *)&mpctx->sh_video->format); else mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FORMAT=0x%08X\n", mpctx->sh_video->format); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_BITRATE=%d\n", mpctx->sh_video->i_bps * 8); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_WIDTH=%d\n", mpctx->sh_video->disp_w); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_HEIGHT=%d\n", mpctx->sh_video->disp_h); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FPS=%5.3f\n", mpctx->sh_video->fps); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_ASPECT=%1.4f\n", mpctx->sh_video->aspect); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_BITRATE=%d\n", mpctx->sh_video->i_bps * 8); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_WIDTH=%d\n", mpctx->sh_video->disp_w); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_HEIGHT=%d\n", mpctx->sh_video->disp_h); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FPS=%5.3f\n", mpctx->sh_video->fps); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_ASPECT=%1.4f\n", mpctx->sh_video->aspect); video_start_pts = ds_get_next_pts(mpctx->d_video); } if (mpctx->sh_audio) { @@ -535,10 +517,10 @@ static void print_file_properties(const MPContext *mpctx, const char *filename) if (mpctx->sh_audio->format >= 0x20202020) mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_FORMAT=%.4s\n", (char *)&mpctx->sh_audio->format); else - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_FORMAT=%d\n", mpctx->sh_audio->format); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_BITRATE=%d\n", mpctx->sh_audio->i_bps * 8); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_RATE=%d\n", mpctx->sh_audio->samplerate); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_NCH=%d\n", mpctx->sh_audio->channels); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_FORMAT=%d\n", mpctx->sh_audio->format); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_BITRATE=%d\n", mpctx->sh_audio->i_bps * 8); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_RATE=%d\n", mpctx->sh_audio->samplerate); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_NCH=%d\n", mpctx->sh_audio->channels); start_pts = ds_get_next_pts(mpctx->d_audio); } if (video_start_pts != MP_NOPTS_VALUE) { @@ -565,13 +547,12 @@ static void mp_dvdnav_context_free(MPContext *ctx) { if (ctx->nav_smpi) free_mp_image(ctx->nav_smpi); - ctx->nav_smpi = NULL; - free(ctx->nav_buffer); + ctx->nav_smpi = NULL; ctx->nav_buffer = NULL; ctx->nav_start = NULL; ctx->nav_in_size = 0; + free(ctx->nav_buffer); } - #endif void uninit_player(unsigned int mask) @@ -725,10 +706,10 @@ void exit_player_with_rc(enum exit_reason how, int rc) current_module = "exit_player"; -// free mplayer config - if (mconfig) + if (mconfig) { m_config_free(mconfig); - mconfig = NULL; + mconfig = NULL; + } if (mpctx->playtree_iter) play_tree_iter_free(mpctx->playtree_iter); @@ -769,7 +750,7 @@ void exit_player(enum exit_reason how) static void child_sighandler(int x) { pid_t pid; - while ((pid = waitpid(-1, NULL, WNOHANG)) > 0) ; + while ((pid = waitpid(-1, NULL, WNOHANG)) > 0); } #endif @@ -1027,14 +1008,11 @@ static int playtree_add_playlist(play_tree_t *entry) { if (!entry) { entry = mpctx->playtree_iter->tree; - if (play_tree_iter_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) { + if (play_tree_iter_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) return PT_NEXT_ENTRY; - } - if (mpctx->playtree_iter->tree == entry) { // Loop with a single file - if (play_tree_iter_up_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) { + if (mpctx->playtree_iter->tree == entry) // Loop with a single file + if (play_tree_iter_up_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) return PT_NEXT_ENTRY; - } - } play_tree_remove(entry, 1, 1); return PT_NEXT_SRC; } @@ -1056,9 +1034,8 @@ void add_subtitles(char *filename, float fps, int noerr) ASS_Track *asst = 0; #endif - if (filename == NULL || mpctx->set_of_sub_size >= MAX_SUBTITLE_FILES) { + if (filename == NULL || mpctx->set_of_sub_size >= MAX_SUBTITLE_FILES) return; - } subd = sub_read_file(filename, fps); #ifdef CONFIG_ASS @@ -1600,24 +1577,23 @@ static void update_osd_msg(void) percentage_text[0] = 0; if (osd_fractions == 1) { - //print fractions as sub-second timestamp + // print fractions as sub-second timestamp snprintf(fractions_text, sizeof(fractions_text), ".%02d", (int)((mpctx->sh_video->pts - pts) * 100 + 0.5) % 100); } else if (osd_fractions == 2) { - //print fractions by estimating the frame count within the - //second - - //rounding or cutting off numbers after the decimal point - //causes problems because of float's precision and movies, - //whose first frame is not exactly at timestamp 0. Therefore, - //we add 0.2 and cut off at the decimal point, which proved - //as good heuristic + // print fractions by estimating the frame count within the + // second. + // Rounding or cutting off numbers after the decimal point + // causes problems because of float's precision and movies, + // whose first frame is not exactly at timestamp 0. Therefore, + // we add 0.2 and cut off at the decimal point, which proved + // as good heuristic. snprintf(fractions_text, sizeof(fractions_text), ".%02d", (int)((mpctx->sh_video->pts - pts) * mpctx->sh_video->fps + 0.2)); } else { - //do not print fractions + // do not print fractions fractions_text[0] = 0; } @@ -1662,9 +1638,8 @@ void reinit_audio_chain(void) if (!(initialized_flags & INITIALIZED_ACODEC)) { current_module = "init_audio_codec"; mp_msg(MSGT_CPLAYER, MSGL_INFO, "==========================================================================\n"); - if (!init_best_audio_codec(mpctx->sh_audio, audio_codec_list, audio_fm_list)) { + if (!init_best_audio_codec(mpctx->sh_audio, audio_codec_list, audio_fm_list)) goto init_error; - } initialized_flags |= INITIALIZED_ACODEC; mp_msg(MSGT_CPLAYER, MSGL_INFO, "==========================================================================\n"); } @@ -1775,8 +1750,9 @@ static int check_framedrop(double frame_time) ++drop_frame_cnt; ++dropped_frames; return frame_dropping; - } else + } else { dropped_frames = 0; + } } return 0; } @@ -1903,22 +1879,22 @@ static int select_subtitle(MPContext *mpctx) #ifndef FF_B_TYPE #define FF_B_TYPE 3 #endif -/// store decoded video image +// store decoded video image static mp_image_t *mp_dvdnav_copy_mpi(mp_image_t *to_mpi, mp_image_t *from_mpi) { mp_image_t *mpi; - /// Do not store B-frames + // Do not store B-frames if (from_mpi->pict_type == FF_B_TYPE) return to_mpi; if (to_mpi && to_mpi->w == from_mpi->w && to_mpi->h == from_mpi->h && - to_mpi->imgfmt == from_mpi->imgfmt) + to_mpi->imgfmt == from_mpi->imgfmt) { mpi = to_mpi; - else { + } else { if (to_mpi) free_mp_image(to_mpi); if (from_mpi->w == 0 || from_mpi->h == 0) @@ -1933,7 +1909,7 @@ static mp_image_t *mp_dvdnav_copy_mpi(mp_image_t *to_mpi, static void mp_dvdnav_reset_stream(MPContext *ctx) { if (ctx->sh_video) { - /// clear video pts + // clear video pts ctx->d_video->pts = 0.0f; ctx->sh_video->pts = 0.0f; ctx->sh_video->i_pts = 0.0f; @@ -1948,7 +1924,7 @@ static void mp_dvdnav_reset_stream(MPContext *ctx) } if (ctx->sh_audio) { - /// free audio packets and reset + // free audio packets and reset ds_free_packs(ctx->d_audio); audio_delay -= ctx->sh_audio->stream_delay; ctx->delay = -audio_delay; @@ -1966,11 +1942,11 @@ static void mp_dvdnav_reset_stream(MPContext *ctx) } } - /// clear all EOF related flags + // clear all EOF related flags ctx->d_video->eof = ctx->d_audio->eof = ctx->stream->eof = 0; } -/// Restore last decoded DVDNAV (still frame) +// Restore last decoded DVDNAV (still frame) static mp_image_t *mp_dvdnav_restore_smpi(int *in_size, unsigned char **start, mp_image_t *decoded_frame) @@ -1978,7 +1954,7 @@ static mp_image_t *mp_dvdnav_restore_smpi(int *in_size, if (mpctx->stream->type != STREAMTYPE_DVDNAV) return decoded_frame; - /// a change occured in dvdnav stream + // a change occured in dvdnav stream if (mp_dvdnav_cell_has_changed(mpctx->stream, 0)) { mp_dvdnav_read_wait(mpctx->stream, 1, 1); mp_dvdnav_context_free(mpctx); @@ -1990,11 +1966,11 @@ static mp_image_t *mp_dvdnav_restore_smpi(int *in_size, if (*in_size < 0) { float len; - /// Display still frame, if any + // Display still frame, if any if (mpctx->nav_smpi && !mpctx->nav_buffer) decoded_frame = mpctx->nav_smpi; - /// increment video frame : continue playing after still frame + // increment video frame : continue playing after still frame len = demuxer_get_time_length(mpctx->demuxer); if (mpctx->sh_video->pts >= len && mpctx->sh_video->pts > 0.0 && len > 0.0) { @@ -2014,7 +1990,7 @@ static mp_image_t *mp_dvdnav_restore_smpi(int *in_size, return decoded_frame; } -/// Save last decoded DVDNAV (still frame) +// Save last decoded DVDNAV (still frame) static void mp_dvdnav_save_smpi(int in_size, unsigned char *start, mp_image_t *decoded_frame) @@ -2283,7 +2259,7 @@ int reinit_video_chain(void) if (!fixed_vo || !(initialized_flags & INITIALIZED_VO)) { current_module = "preinit_libvo"; - //shouldn't we set dvideo->id=-2 when we fail? + // shouldn't we set dvideo->id=-2 when we fail? vo_config_count = 0; //if((mpctx->video_out->preinit(vo_subdevice))!=0){ if (!(mpctx->video_out = init_best_video_out(video_driver_list))) { @@ -2404,7 +2380,7 @@ static double update_video(int *blit_frame) in_size = video_read_frame(sh_video, &sh_video->next_frame_time, &start, force_fps); #ifdef CONFIG_DVDNAV - /// wait, still frame or EOF + // wait, still frame or EOF if (mpctx->stream->type == STREAMTYPE_DVDNAV && in_size < 0) { if (mp_dvdnav_is_eof(mpctx->stream)) return -1; @@ -2424,7 +2400,7 @@ static double update_video(int *blit_frame) #ifdef CONFIG_DVDNAV full_frame = 1; decoded_frame = mp_dvdnav_restore_smpi(&in_size, &start, decoded_frame); - /// still frame has been reached, no need to decode + // still frame has been reached, no need to decode if (in_size > 0 && !decoded_frame) #endif decoded_frame = decode_video(sh_video, start, in_size, drop_frame, @@ -2464,7 +2440,7 @@ static double update_video(int *blit_frame) update_osd_msg(); } #ifdef CONFIG_DVDNAV - /// save back last still frame for future display + // save back last still frame for future display mp_dvdnav_save_smpi(in_size, start, decoded_frame); #endif } while (!full_frame); @@ -2559,9 +2535,10 @@ static void pause_loop(void) set_osd_msg(OSD_MSG_PAUSE, 1, 0, MSGTR_Paused " %d%%", new_cache_fill); update_osd_msg(); - } else + } else { mp_msg(MSGT_CPLAYER, MSGL_STATUS, MSGTR_Paused " %d%%\r", new_cache_fill); + } old_cache_fill = new_cache_fill; } } @@ -2608,9 +2585,8 @@ static void edl_loadfile(void) // Execute EDL command for the current position if one exists static void edl_update(MPContext *mpctx) { - if (!edl_records) { + if (!edl_records) return; - } if (!mpctx->sh_video) { mp_msg(MSGT_CPLAYER, MSGL_ERR, MSGTR_EdlNOsh_video); @@ -2683,7 +2659,7 @@ static void edl_update(MPContext *mpctx) } // style & SEEK_ABSOLUTE == 0 means seek relative to current position, == 1 means absolute -// style & SEEK_FACTOR == 0 means amount in seconds, == 2 means fraction of file length +// style & SEEK_FACTOR == 0 means amount in seconds, == 2 means fraction of file length // return -1 if seek failed (non-seekable stream?), 0 otherwise static int seek(MPContext *mpctx, double amount, int style) { @@ -2746,10 +2722,7 @@ static int seek(MPContext *mpctx, double amount, int style) #ifndef DISABLE_MAIN int main(int argc, char *argv[]) { -// movie info: - -/* Flag indicating whether MPlayer should exit without playing anything. */ - int opt_exit = 0; + int opt_exit = 0; // Flag indicating whether MPlayer should exit without playing anything. int i; int gui_no_filename = 0; @@ -2784,9 +2757,9 @@ int main(int argc, char *argv[]) #endif mpctx->playtree = m_config_parse_mp_command_line(mconfig, argc, argv); - if (mpctx->playtree == NULL) + if (mpctx->playtree == NULL) { opt_exit = 1; - else { + } else { mpctx->playtree = play_tree_cleanup(mpctx->playtree); if (mpctx->playtree) { mpctx->playtree_iter = play_tree_iter_new(mpctx->playtree, mconfig); @@ -2958,8 +2931,8 @@ int main(int argc, char *argv[]) } } #ifdef CONFIG_GUI -// breaks DGA and SVGAlib and VESA drivers: --A'rpi -// and now ? -- Pontscho + // breaks DGA and SVGAlib and VESA drivers: --A'rpi + // and now ? -- Pontscho if (use_gui) setuid(getuid()); // strongly test, please check this. #endif @@ -2975,7 +2948,7 @@ int main(int argc, char *argv[]) // ========== Init keyboard FIFO (connection to libvo) ============ -// Init input system + // Init input system current_module = "init_input"; mp_input_init(); mp_input_add_key_fd(-1, 0, mplayer_get_key, NULL); @@ -2983,7 +2956,7 @@ int main(int argc, char *argv[]) mp_input_add_cmd_fd(0, USE_SELECT, MP_INPUT_SLAVE_CMD_FUNC, NULL); else if (!noconsolecontrols) mp_input_add_event_fd(0, getch2); -// Set the libstream interrupt callback + // Set the libstream interrupt callback stream_set_interrupt_callback(mp_input_check_interrupt); #ifdef CONFIG_MENU @@ -3009,7 +2982,7 @@ int main(int argc, char *argv[]) initialized_flags |= INITIALIZED_INPUT; current_module = NULL; - /// Catch signals + // Catch signals #ifndef __MINGW32__ signal(SIGCHLD, child_sighandler); #endif @@ -3067,8 +3040,8 @@ play_next_file: if (audio_driver_list) load_per_output_config(mconfig, PROFILE_CFG_AO, audio_driver_list[0]); -// We must enable getch2 here to be able to interrupt network connection -// or cache filling + // We must enable getch2 here to be able to interrupt network connection + // or cache filling if (!noconsolecontrols && !slave_mode) { if (initialized_flags & INITIALIZED_GETCH2) mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_Getch2InitializedTwice); @@ -3291,19 +3264,15 @@ play_next_file: } if (mpctx->stream->type == STREAMTYPE_BD) { - if (audio_lang && audio_id == -1) - audio_id = bd_aid_from_lang(mpctx->stream, audio_lang); - if (dvdsub_lang && dvdsub_id == -1) - dvdsub_id = bd_sid_from_lang(mpctx->stream, dvdsub_lang); + if (audio_lang && audio_id == -1) audio_id = bd_aid_from_lang(mpctx->stream, audio_lang); + if (dvdsub_lang && dvdsub_id == -1) dvdsub_id = bd_sid_from_lang(mpctx->stream, dvdsub_lang); } #ifdef CONFIG_DVDREAD if (mpctx->stream->type == STREAMTYPE_DVD) { current_module = "dvd lang->id"; - if (audio_lang && audio_id == -1) - audio_id = dvd_aid_from_lang(mpctx->stream, audio_lang); - if (dvdsub_lang && dvdsub_id == -1) - dvdsub_id = dvd_sid_from_lang(mpctx->stream, dvdsub_lang); + if (audio_lang && audio_id == -1) audio_id = dvd_aid_from_lang(mpctx->stream, audio_lang); + if (dvdsub_lang && dvdsub_id == -1) dvdsub_id = dvd_sid_from_lang(mpctx->stream, dvdsub_lang); // setup global sub numbering mpctx->sub_counts[SUB_SOURCE_DEMUX] = dvd_number_of_subs(mpctx->stream); current_module = NULL; @@ -3330,7 +3299,7 @@ goto_enable_cache: int res; current_module = "enable_cache"; res = stream_enable_cache(mpctx->stream, stream_cache_size * 1024, - stream_cache_size * 1024 * (stream_cache_min_percent / 100.0), + stream_cache_size * 1024 * (stream_cache_min_percent / 100.0), stream_cache_size * 1024 * (stream_cache_seek_min_percent / 100.0)); if (res == 0) if ((mpctx->eof = libmpdemux_was_interrupted(PT_NEXT_ENTRY))) @@ -3342,8 +3311,7 @@ goto_enable_cache: mpctx->demuxer = demux_open(mpctx->stream, mpctx->file_format, audio_id, video_id, dvdsub_id, filename); -// HACK to get MOV Reference Files working - + // HACK to get MOV Reference Files working if (mpctx->demuxer && mpctx->demuxer->type == DEMUXER_TYPE_PLAYLIST) { unsigned char *playlist_entry; play_tree_t *list = NULL, *entry = NULL; @@ -3431,40 +3399,28 @@ goto_enable_cache: int tmp = ts_prog; mp_property_do("switch_program", M_PROPERTY_SET, &tmp, mpctx); } -// select audio stream + // select audio stream select_audio(mpctx->demuxer, audio_id, audio_lang); -// DUMP STREAMS: + // DUMP STREAMS: if ((stream_dump_type) && (stream_dump_type < 4)) { FILE *f; demux_stream_t *ds = NULL; current_module = "dump"; // select stream to dump switch (stream_dump_type) { - case 1: ds = mpctx->d_audio; - break; - case 2: ds = mpctx->d_video; - break; - case 3: ds = mpctx->d_sub; - break; + case 1: ds = mpctx->d_audio; break; + case 2: ds = mpctx->d_video; break; + case 3: ds = mpctx->d_sub; break; } if (!ds) { mp_msg(MSGT_CPLAYER, MSGL_FATAL, MSGTR_DumpSelectedStreamMissing); exit_player(EXIT_ERROR); } // disable other streams: - if (mpctx->d_audio && mpctx->d_audio != ds) { - ds_free_packs(mpctx->d_audio); - mpctx->d_audio->id = -2; - } - if (mpctx->d_video && mpctx->d_video != ds) { - ds_free_packs(mpctx->d_video); - mpctx->d_video->id = -2; - } - if (mpctx->d_sub && mpctx->d_sub != ds) { - ds_free_packs(mpctx->d_sub); - mpctx->d_sub->id = -2; - } + if (mpctx->d_audio && mpctx->d_audio != ds) { ds_free_packs(mpctx->d_audio); mpctx->d_audio->id = -2; } + if (mpctx->d_video && mpctx->d_video != ds) { ds_free_packs(mpctx->d_video); mpctx->d_video->id = -2; } + if (mpctx->d_sub && mpctx->d_sub != ds) { ds_free_packs(mpctx->d_sub); mpctx->d_sub->id = -2; } // let's dump it! f = fopen(stream_dump_name, "wb"); if (!f) { @@ -3536,7 +3492,7 @@ goto_enable_cache: goto goto_next_file; // exit_player(MSGTR_Exit_error); } -/* display clip info */ + /* display clip info */ demux_info_print(mpctx->demuxer); //================== Read SUBTITLES (DVD & TEXT) ========================== @@ -3546,9 +3502,9 @@ goto_enable_cache: } if (1 || mpctx->sh_video) { -// after reading video params we should load subtitles because -// we know fps so now we can adjust subtitle time to ~6 seconds AST -// check .sub + // after reading video params we should load subtitles because + // we know fps so now we can adjust subtitle time to ~6 seconds AST + // check .sub double fps = mpctx->sh_video ? mpctx->sh_video->fps : 25; current_module = "read_subtitles_file"; load_subtitles(filename, fps, add_subtitles); @@ -3557,21 +3513,16 @@ goto_enable_cache: } if (select_subtitle(mpctx)) { - if (subdata) + if (subdata) { switch (stream_dump_type) { - case 3: list_sub_file(subdata); - break; - case 4: dump_mpsub(subdata, mpctx->sh_video->fps); - break; - case 6: dump_srt(subdata, mpctx->sh_video->fps); - break; - case 7: dump_microdvd(subdata, mpctx->sh_video->fps); - break; - case 8: dump_jacosub(subdata, mpctx->sh_video->fps); - break; - case 9: dump_sami(subdata, mpctx->sh_video->fps); - break; + case 3: list_sub_file(subdata); break; + case 4: dump_mpsub(subdata, mpctx->sh_video->fps); break; + case 6: dump_srt(subdata, mpctx->sh_video->fps); break; + case 7: dump_microdvd(subdata, mpctx->sh_video->fps); break; + case 8: dump_jacosub(subdata, mpctx->sh_video->fps); break; + case 9: dump_sami(subdata, mpctx->sh_video->fps); break; } + } } print_file_properties(mpctx, filename); @@ -3608,7 +3559,7 @@ goto_enable_cache: free(msg); } -// Disable the term OSD in verbose mode + // Disable the term OSD in verbose mode if (verbose) term_osd = 0; @@ -3616,8 +3567,8 @@ goto_enable_cache: mpctx->num_buffered_frames = 0; mpctx->framestep_found = 0; -// Make sure old OSD does not stay around, -// e.g. with -fixed-vo and same-resolution files + // Make sure old OSD does not stay around, + // e.g. with -fixed-vo and same-resolution files clear_osd_msgs(); update_osd_msg(); @@ -3687,11 +3638,9 @@ goto_enable_cache: #endif mp_input_set_section(NULL); -//TODO: add desired (stream-based) sections here - if (mpctx->stream->type == STREAMTYPE_TV) - mp_input_set_section("tv"); - if (mpctx->stream->type == STREAMTYPE_DVDNAV) - mp_input_set_section("dvdnav"); + //TODO: add desired (stream-based) sections here + if (mpctx->stream->type == STREAMTYPE_TV) mp_input_set_section("tv"); + if (mpctx->stream->type == STREAMTYPE_DVDNAV) mp_input_set_section("dvdnav"); //==================== START PLAYING ======================= @@ -3861,20 +3810,16 @@ goto_enable_cache: //============================ Auto QUALITY ============================ -/*Output quality adjustments:*/ + /* Output quality adjustments: */ if (auto_quality > 0) { current_module = "autoq"; -// float total=0.000001f * (GetTimer()-aq_total_time); -// if(output_quality<auto_quality && aq_sleep_time>0.05f*total) if (output_quality < auto_quality && aq_sleep_time > 0) ++output_quality; else -// if(output_quality>0 && aq_sleep_time<-0.05f*total) if (output_quality > 1 && aq_sleep_time < 0) --output_quality; else if (output_quality > 0 && aq_sleep_time < -0.050f) // 50ms output_quality = 0; -// printf("total: %8.6f sleep: %8.6f q: %d\n",(0.000001f*aq_total_time),aq_sleep_time,output_quality); set_video_quality(mpctx->sh_video, output_quality); } @@ -3923,7 +3868,7 @@ goto_enable_cache: pause_loop(); } -// handle -sstep + // handle -sstep if (step_sec > 0) { mpctx->osd_function = OSD_FFW; rel_seek_secs += step_sec; @@ -4045,9 +3990,9 @@ goto_next_file: // don't jump here after ao/vo/getch initialization! total_time_usage - tot, total_time_usage); if (total_time_usage > 0.0) mp_msg(MSGT_CPLAYER, MSGL_INFO, "BENCHMARK%%: VC:%8.4f%% VO:%8.4f%% A:%8.4f%% Sys:%8.4f%% = %8.4f%%\n", - 100.0 * video_time_usage / total_time_usage, - 100.0 * vout_time_usage / total_time_usage, - 100.0 * audio_time_usage / total_time_usage, + 100.0 * video_time_usage / total_time_usage, + 100.0 * vout_time_usage / total_time_usage, + 100.0 * audio_time_usage / total_time_usage, 100.0 * (total_time_usage - tot) / total_time_usage, 100.0); if (total_frame_cnt && frame_dropping) @@ -4060,7 +4005,7 @@ goto_next_file: // don't jump here after ao/vo/getch initialization! (total_time_usage > 0.5) ? (total_frame_cnt / total_time_usage) : 0); } -// time to uninit all, except global stuff: + // time to uninit all, except global stuff: uninit_player(INITIALIZED_ALL - (INITIALIZED_GUI + INITIALIZED_INPUT + (fixed_vo ? INITIALIZED_VO : 0))); if (mpctx->set_of_sub_size > 0) { @@ -4118,8 +4063,9 @@ goto_next_file: // don't jump here after ao/vo/getch initialization! play_tree_iter_free(mpctx->playtree_iter); mpctx->playtree_iter = NULL; } - } else + } else { break; + } } #ifdef CONFIG_GUI @@ -4139,7 +4085,6 @@ goto_next_file: // don't jump here after ao/vo/getch initialization! } exit_player_with_rc(EXIT_EOF, 0); - return 1; } -- 1.7.4.4
On Sat, Apr 16, 2011 at 12:02:53AM +0200, Clément Bœsch wrote:
Due to uncrustify and A.I. limitations, humans are still needed sometimes. --- mplayer.c | 283 +++++++++++++++++++++++++------------------------------------ 1 files changed, 114 insertions(+), 169 deletions(-)
Patch updated. No more functionnal changes, and more cosmetics, vertical align & stuff. It follows the uncrustify patch. -- Clément B.
On Thu, May 05, 2011 at 03:00:17PM +0200, Clément Bœsch wrote:
On Sat, Apr 16, 2011 at 12:02:53AM +0200, Clément Bœsch wrote:
Due to uncrustify and A.I. limitations, humans are still needed sometimes.
Patch updated. No more functionnal changes, and more cosmetics, vertical align & stuff. It follows the uncrustify patch.
--- a/mplayer.c +++ b/mplayer.c @@ -449,16 +449,11 @@ char *get_metadata(metadata_t type)
case META_VIDEO_CODEC: - if (sh_video->format == 0x10000001) - return strdup("mpeg1"); - else if (sh_video->format == 0x10000002) - return strdup("mpeg2"); - else if (sh_video->format == 0x10000004) - return strdup("mpeg4"); - else if (sh_video->format == 0x10000005) - return strdup("h264"); - else if (sh_video->format >= 0x20202020) - return mp_asprintf("%.4s", (char *)&sh_video->format); + if (sh_video->format == 0x10000001) return strdup("mpeg1"); + else if (sh_video->format == 0x10000002) return strdup("mpeg2"); + else if (sh_video->format == 0x10000004) return strdup("mpeg4"); + else if (sh_video->format == 0x10000005) return strdup("h264"); + else if (sh_video->format >= 0x20202020) return mp_asprintf("%.4s", (char *)&sh_video->format); return mp_asprintf("0x%08X", sh_video->format);
I prefer the former. I don't consider it a good idea to stray from the automatic indentation (too much).
@@ -479,26 +474,13 @@ char *get_metadata(metadata_t type)
/* check for valid demuxer */ - case META_INFO_TITLE: - return get_demuxer_info("Title"); - - case META_INFO_ARTIST: - return get_demuxer_info("Artist"); - - case META_INFO_ALBUM: - return get_demuxer_info("Album"); - - case META_INFO_YEAR: - return get_demuxer_info("Year"); - - case META_INFO_COMMENT: - return get_demuxer_info("Comment"); - - case META_INFO_TRACK: - return get_demuxer_info("Track"); - - case META_INFO_GENRE: - return get_demuxer_info("Genre"); + case META_INFO_TITLE: return get_demuxer_info("Title"); + case META_INFO_ARTIST: return get_demuxer_info("Artist"); + case META_INFO_ALBUM: return get_demuxer_info("Album"); + case META_INFO_YEAR: return get_demuxer_info("Year"); + case META_INFO_COMMENT: return get_demuxer_info("Comment"); + case META_INFO_TRACK: return get_demuxer_info("Track"); + case META_INFO_GENRE: return get_demuxer_info("Genre");
same
@@ -516,14 +498,14 @@ static void print_file_properties(const MPContext *mpctx, const char *filename) if (mpctx->sh_video) { /* Assume FOURCC if all bytes >= 0x20 (' ') */ if (mpctx->sh_video->format >= 0x20202020) - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FORMAT=%.4s\n", (char *)&mpctx->sh_video->format); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FORMAT=%.4s\n", (char *)&mpctx->sh_video->format); else mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FORMAT=0x%08X\n", mpctx->sh_video->format); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_BITRATE=%d\n", mpctx->sh_video->i_bps * 8); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_WIDTH=%d\n", mpctx->sh_video->disp_w); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_HEIGHT=%d\n", mpctx->sh_video->disp_h); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FPS=%5.3f\n", mpctx->sh_video->fps); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_ASPECT=%1.4f\n", mpctx->sh_video->aspect); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_BITRATE=%d\n", mpctx->sh_video->i_bps * 8); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_WIDTH=%d\n", mpctx->sh_video->disp_w); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_HEIGHT=%d\n", mpctx->sh_video->disp_h); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FPS=%5.3f\n", mpctx->sh_video->fps); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_ASPECT=%1.4f\n", mpctx->sh_video->aspect); video_start_pts = ds_get_next_pts(mpctx->d_video); } if (mpctx->sh_audio) { @@ -531,10 +513,10 @@ static void print_file_properties(const MPContext *mpctx, const char *filename) if (mpctx->sh_audio->format >= 0x20202020) mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_FORMAT=%.4s\n", (char *)&mpctx->sh_audio->format); else - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_FORMAT=%d\n", mpctx->sh_audio->format); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_BITRATE=%d\n", mpctx->sh_audio->i_bps * 8); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_RATE=%d\n", mpctx->sh_audio->samplerate); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_NCH=%d\n", mpctx->sh_audio->channels); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_FORMAT=%d\n", mpctx->sh_audio->format); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_BITRATE=%d\n", mpctx->sh_audio->i_bps * 8); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_RATE=%d\n", mpctx->sh_audio->samplerate); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_NCH=%d\n", mpctx->sh_audio->channels);
I don't see the point.
@@ -788,9 +769,8 @@ void exit_player(enum exit_reason how) static void child_sighandler(int x) { pid_t pid; - while ((pid = waitpid(-1, NULL, WNOHANG)) > 0) ; + while ((pid = waitpid(-1, NULL, WNOHANG)) > 0); }
This looks like a bug in uncrustify or the uncrustify configuration.
@@ -1046,14 +1026,11 @@ static int playtree_add_playlist(play_tree_t *entry) { if (!entry) { entry = mpctx->playtree_iter->tree; - if (play_tree_iter_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) { + if (play_tree_iter_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) return PT_NEXT_ENTRY; - } - if (mpctx->playtree_iter->tree == entry) { // Loop with a single file - if (play_tree_iter_up_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) { + if (mpctx->playtree_iter->tree == entry) // Loop with a single file + if (play_tree_iter_up_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) return PT_NEXT_ENTRY; - } - }
I think uncrustify has an option for this.
@@ -1927,9 +1903,9 @@ static mp_image_t *mp_dvdnav_copy_mpi(mp_image_t *to_mpi, if (to_mpi && to_mpi->w == from_mpi->w && to_mpi->h == from_mpi->h && - to_mpi->imgfmt == from_mpi->imgfmt) + to_mpi->imgfmt == from_mpi->imgfmt) { mpi = to_mpi; - else { + } else { if (to_mpi) free_mp_image(to_mpi); if (from_mpi->w == 0 || from_mpi->h == 0) @@ -2531,8 +2507,9 @@ static void pause_loop(void) if (term_osd && !mpctx->sh_video) { set_osd_msg(OSD_MSG_PAUSE, 1, 0, MSGTR_Paused); update_osd_msg(); - } else + } else { mp_msg(MSGT_CPLAYER, MSGL_STATUS, "\n"MSGTR_Paused "\r"); + } mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_PAUSED\n"); } #ifdef CONFIG_GUI @@ -2574,9 +2551,10 @@ static void pause_loop(void) set_osd_msg(OSD_MSG_PAUSE, 1, 0, MSGTR_Paused " %d%%", new_cache_fill); update_osd_msg(); - } else + } else { mp_msg(MSGT_CPLAYER, MSGL_STATUS, MSGTR_Paused " %d%%\r", new_cache_fill); + }
I see little point in doing this manually if uncrustify can achieve it.
@@ -3306,19 +3280,15 @@ play_next_file:
if (mpctx->stream->type == STREAMTYPE_BD) { - if (audio_lang && audio_id == -1) - audio_id = bd_aid_from_lang(mpctx->stream, audio_lang); - if (dvdsub_lang && dvdsub_id == -1) - dvdsub_id = bd_sid_from_lang(mpctx->stream, dvdsub_lang); + if (audio_lang && audio_id == -1) audio_id = bd_aid_from_lang(mpctx->stream, audio_lang); + if (dvdsub_lang && dvdsub_id == -1) dvdsub_id = bd_sid_from_lang(mpctx->stream, dvdsub_lang); }
#ifdef CONFIG_DVDREAD if (mpctx->stream->type == STREAMTYPE_DVD) { current_module = "dvd lang->id"; - if (audio_lang && audio_id == -1) - audio_id = dvd_aid_from_lang(mpctx->stream, audio_lang); - if (dvdsub_lang && dvdsub_id == -1) - dvdsub_id = dvd_sid_from_lang(mpctx->stream, dvdsub_lang); + if (audio_lang && audio_id == -1) audio_id = dvd_aid_from_lang(mpctx->stream, audio_lang); + if (dvdsub_lang && dvdsub_id == -1) dvdsub_id = dvd_sid_from_lang(mpctx->stream, dvdsub_lang);
I'd skip this as well.
@@ -3878,20 +3828,20 @@ goto_enable_cache:
//============================ Auto QUALITY ============================
-/*Output quality adjustments:*/ + /* Output quality adjustments: */ if (auto_quality > 0) { current_module = "autoq"; -// float total=0.000001f * (GetTimer()-aq_total_time); -// if(output_quality<auto_quality && aq_sleep_time>0.05f*total) + //float total=0.000001f * (GetTimer()-aq_total_time); + //if(output_quality<auto_quality && aq_sleep_time>0.05f*total) if (output_quality < auto_quality && aq_sleep_time > 0) ++output_quality; else -// if(output_quality>0 && aq_sleep_time<-0.05f*total) + //if(output_quality>0 && aq_sleep_time<-0.05f*total) if (output_quality > 1 && aq_sleep_time < 0) --output_quality; else if (output_quality > 0 && aq_sleep_time < -0.050f) // 50ms output_quality = 0; -// printf("total: %8.6f sleep: %8.6f q: %d\n",(0.000001f*aq_total_time),aq_sleep_time,output_quality); + //printf("total: %8.6f sleep: %8.6f q: %d\n",(0.000001f*aq_total_time),aq_sleep_time,output_quality); set_video_quality(mpctx->sh_video, output_quality);
The style in the commented-out code is messed up :-p Most of the rest like the comment adjustments etc. looks OK. Diego
On Thu, May 05, 2011 at 03:11:47PM +0200, Diego Biurrun wrote:
On Thu, May 05, 2011 at 03:00:17PM +0200, Clément Bœsch wrote:
On Sat, Apr 16, 2011 at 12:02:53AM +0200, Clément Bœsch wrote:
Due to uncrustify and A.I. limitations, humans are still needed sometimes.
Patch updated. No more functionnal changes, and more cosmetics, vertical align & stuff. It follows the uncrustify patch.
--- a/mplayer.c +++ b/mplayer.c @@ -449,16 +449,11 @@ char *get_metadata(metadata_t type)
case META_VIDEO_CODEC: - if (sh_video->format == 0x10000001) - return strdup("mpeg1"); - else if (sh_video->format == 0x10000002) - return strdup("mpeg2"); - else if (sh_video->format == 0x10000004) - return strdup("mpeg4"); - else if (sh_video->format == 0x10000005) - return strdup("h264"); - else if (sh_video->format >= 0x20202020) - return mp_asprintf("%.4s", (char *)&sh_video->format); + if (sh_video->format == 0x10000001) return strdup("mpeg1"); + else if (sh_video->format == 0x10000002) return strdup("mpeg2"); + else if (sh_video->format == 0x10000004) return strdup("mpeg4"); + else if (sh_video->format == 0x10000005) return strdup("h264"); + else if (sh_video->format >= 0x20202020) return mp_asprintf("%.4s", (char *)&sh_video->format); return mp_asprintf("0x%08X", sh_video->format);
I prefer the former. I don't consider it a good idea to stray from the automatic indentation (too much).
OK, too bad. I just tought the association was more obvious that way.
@@ -479,26 +474,13 @@ char *get_metadata(metadata_t type)
/* check for valid demuxer */ - case META_INFO_TITLE: - return get_demuxer_info("Title"); - - case META_INFO_ARTIST: - return get_demuxer_info("Artist"); - - case META_INFO_ALBUM: - return get_demuxer_info("Album"); - - case META_INFO_YEAR: - return get_demuxer_info("Year"); - - case META_INFO_COMMENT: - return get_demuxer_info("Comment"); - - case META_INFO_TRACK: - return get_demuxer_info("Track"); - - case META_INFO_GENRE: - return get_demuxer_info("Genre"); + case META_INFO_TITLE: return get_demuxer_info("Title"); + case META_INFO_ARTIST: return get_demuxer_info("Artist"); + case META_INFO_ALBUM: return get_demuxer_info("Album"); + case META_INFO_YEAR: return get_demuxer_info("Year"); + case META_INFO_COMMENT: return get_demuxer_info("Comment"); + case META_INFO_TRACK: return get_demuxer_info("Track"); + case META_INFO_GENRE: return get_demuxer_info("Genre");
same
@@ -516,14 +498,14 @@ static void print_file_properties(const MPContext *mpctx, const char *filename) if (mpctx->sh_video) { /* Assume FOURCC if all bytes >= 0x20 (' ') */ if (mpctx->sh_video->format >= 0x20202020) - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FORMAT=%.4s\n", (char *)&mpctx->sh_video->format); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FORMAT=%.4s\n", (char *)&mpctx->sh_video->format); else mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FORMAT=0x%08X\n", mpctx->sh_video->format); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_BITRATE=%d\n", mpctx->sh_video->i_bps * 8); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_WIDTH=%d\n", mpctx->sh_video->disp_w); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_HEIGHT=%d\n", mpctx->sh_video->disp_h); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FPS=%5.3f\n", mpctx->sh_video->fps); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_ASPECT=%1.4f\n", mpctx->sh_video->aspect); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_BITRATE=%d\n", mpctx->sh_video->i_bps * 8); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_WIDTH=%d\n", mpctx->sh_video->disp_w); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_HEIGHT=%d\n", mpctx->sh_video->disp_h); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FPS=%5.3f\n", mpctx->sh_video->fps); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_ASPECT=%1.4f\n", mpctx->sh_video->aspect); video_start_pts = ds_get_next_pts(mpctx->d_video); } if (mpctx->sh_audio) { @@ -531,10 +513,10 @@ static void print_file_properties(const MPContext *mpctx, const char *filename) if (mpctx->sh_audio->format >= 0x20202020) mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_FORMAT=%.4s\n", (char *)&mpctx->sh_audio->format); else - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_FORMAT=%d\n", mpctx->sh_audio->format); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_BITRATE=%d\n", mpctx->sh_audio->i_bps * 8); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_RATE=%d\n", mpctx->sh_audio->samplerate); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_NCH=%d\n", mpctx->sh_audio->channels); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_FORMAT=%d\n", mpctx->sh_audio->format); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_BITRATE=%d\n", mpctx->sh_audio->i_bps * 8); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_RATE=%d\n", mpctx->sh_audio->samplerate); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_NCH=%d\n", mpctx->sh_audio->channels);
I don't see the point.
It sticks more to the final output, and the values are aligned to we can dicern them more I guess.
@@ -788,9 +769,8 @@ void exit_player(enum exit_reason how) static void child_sighandler(int x) { pid_t pid; - while ((pid = waitpid(-1, NULL, WNOHANG)) > 0) ; + while ((pid = waitpid(-1, NULL, WNOHANG)) > 0); }
This looks like a bug in uncrustify or the uncrustify configuration.
Yep, but I wasn't able to find a correct workaround in the settings. Feel free to dig in it…
@@ -1046,14 +1026,11 @@ static int playtree_add_playlist(play_tree_t *entry) { if (!entry) { entry = mpctx->playtree_iter->tree; - if (play_tree_iter_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) { + if (play_tree_iter_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) return PT_NEXT_ENTRY; - } - if (mpctx->playtree_iter->tree == entry) { // Loop with a single file - if (play_tree_iter_up_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) { + if (mpctx->playtree_iter->tree == entry) // Loop with a single file + if (play_tree_iter_up_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) return PT_NEXT_ENTRY; - } - }
I think uncrustify has an option for this.
Yes under a warning section. We don't set it up because of some issue with defines.
@@ -1927,9 +1903,9 @@ static mp_image_t *mp_dvdnav_copy_mpi(mp_image_t *to_mpi, if (to_mpi && to_mpi->w == from_mpi->w && to_mpi->h == from_mpi->h && - to_mpi->imgfmt == from_mpi->imgfmt) + to_mpi->imgfmt == from_mpi->imgfmt) { mpi = to_mpi; - else { + } else { if (to_mpi) free_mp_image(to_mpi); if (from_mpi->w == 0 || from_mpi->h == 0) @@ -2531,8 +2507,9 @@ static void pause_loop(void) if (term_osd && !mpctx->sh_video) { set_osd_msg(OSD_MSG_PAUSE, 1, 0, MSGTR_Paused); update_osd_msg(); - } else + } else { mp_msg(MSGT_CPLAYER, MSGL_STATUS, "\n"MSGTR_Paused "\r"); + } mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_PAUSED\n"); } #ifdef CONFIG_GUI @@ -2574,9 +2551,10 @@ static void pause_loop(void) set_osd_msg(OSD_MSG_PAUSE, 1, 0, MSGTR_Paused " %d%%", new_cache_fill); update_osd_msg(); - } else + } else { mp_msg(MSGT_CPLAYER, MSGL_STATUS, MSGTR_Paused " %d%%\r", new_cache_fill); + }
I see little point in doing this manually if uncrustify can achieve it.
See above.
@@ -3306,19 +3280,15 @@ play_next_file:
if (mpctx->stream->type == STREAMTYPE_BD) { - if (audio_lang && audio_id == -1) - audio_id = bd_aid_from_lang(mpctx->stream, audio_lang); - if (dvdsub_lang && dvdsub_id == -1) - dvdsub_id = bd_sid_from_lang(mpctx->stream, dvdsub_lang); + if (audio_lang && audio_id == -1) audio_id = bd_aid_from_lang(mpctx->stream, audio_lang); + if (dvdsub_lang && dvdsub_id == -1) dvdsub_id = bd_sid_from_lang(mpctx->stream, dvdsub_lang); }
#ifdef CONFIG_DVDREAD if (mpctx->stream->type == STREAMTYPE_DVD) { current_module = "dvd lang->id"; - if (audio_lang && audio_id == -1) - audio_id = dvd_aid_from_lang(mpctx->stream, audio_lang); - if (dvdsub_lang && dvdsub_id == -1) - dvdsub_id = dvd_sid_from_lang(mpctx->stream, dvdsub_lang); + if (audio_lang && audio_id == -1) audio_id = dvd_aid_from_lang(mpctx->stream, audio_lang); + if (dvdsub_lang && dvdsub_id == -1) dvdsub_id = dvd_sid_from_lang(mpctx->stream, dvdsub_lang);
I'd skip this as well.
OK :(
@@ -3878,20 +3828,20 @@ goto_enable_cache:
//============================ Auto QUALITY ============================
-/*Output quality adjustments:*/ + /* Output quality adjustments: */ if (auto_quality > 0) { current_module = "autoq"; -// float total=0.000001f * (GetTimer()-aq_total_time); -// if(output_quality<auto_quality && aq_sleep_time>0.05f*total) + //float total=0.000001f * (GetTimer()-aq_total_time); + //if(output_quality<auto_quality && aq_sleep_time>0.05f*total) if (output_quality < auto_quality && aq_sleep_time > 0) ++output_quality; else -// if(output_quality>0 && aq_sleep_time<-0.05f*total) + //if(output_quality>0 && aq_sleep_time<-0.05f*total) if (output_quality > 1 && aq_sleep_time < 0) --output_quality; else if (output_quality > 0 && aq_sleep_time < -0.050f) // 50ms output_quality = 0; -// printf("total: %8.6f sleep: %8.6f q: %d\n",(0.000001f*aq_total_time),aq_sleep_time,output_quality); + //printf("total: %8.6f sleep: %8.6f q: %d\n",(0.000001f*aq_total_time),aq_sleep_time,output_quality); set_video_quality(mpctx->sh_video, output_quality);
The style in the commented-out code is messed up :-p
oh please :D
Most of the rest like the comment adjustments etc. looks OK.
OK -- Clément B.
tor 2011-05-05 klockan 15:20 +0200 skrev Clément Bœsch:
On Thu, May 05, 2011 at 03:11:47PM +0200, Diego Biurrun wrote:
On Thu, May 05, 2011 at 03:00:17PM +0200, Clément Bœsch wrote:
On Sat, Apr 16, 2011 at 12:02:53AM +0200, Clément Bœsch wrote:
Due to uncrustify and A.I. limitations, humans are still needed sometimes.
Patch updated. No more functionnal changes, and more cosmetics, vertical align & stuff. It follows the uncrustify patch.
--- a/mplayer.c +++ b/mplayer.c @@ -449,16 +449,11 @@ char *get_metadata(metadata_t type)
case META_VIDEO_CODEC: - if (sh_video->format == 0x10000001) - return strdup("mpeg1"); - else if (sh_video->format == 0x10000002) - return strdup("mpeg2"); - else if (sh_video->format == 0x10000004) - return strdup("mpeg4"); - else if (sh_video->format == 0x10000005) - return strdup("h264"); - else if (sh_video->format >= 0x20202020) - return mp_asprintf("%.4s", (char *)&sh_video->format); + if (sh_video->format == 0x10000001) return strdup("mpeg1"); + else if (sh_video->format == 0x10000002) return strdup("mpeg2"); + else if (sh_video->format == 0x10000004) return strdup("mpeg4"); + else if (sh_video->format == 0x10000005) return strdup("h264"); + else if (sh_video->format >= 0x20202020) return mp_asprintf("%.4s", (char *)&sh_video->format); return mp_asprintf("0x%08X", sh_video->format);
I prefer the former. I don't consider it a good idea to stray from the automatic indentation (too much).
OK, too bad. I just tought the association was more obvious that way.
I prefer the single line way. Also the way below. Clearer to the eye. Often, an if statment with a single statement, is also easiest to se if written on one line. Indented code is easier to read if indented code has a terminating symbol (like always use { }) and can easier get lines added/removed.
@@ -479,26 +474,13 @@ char *get_metadata(metadata_t type)
/* check for valid demuxer */ - case META_INFO_TITLE: - return get_demuxer_info("Title"); - - case META_INFO_ARTIST: - return get_demuxer_info("Artist"); - - case META_INFO_ALBUM: - return get_demuxer_info("Album"); - - case META_INFO_YEAR: - return get_demuxer_info("Year"); - - case META_INFO_COMMENT: - return get_demuxer_info("Comment"); - - case META_INFO_TRACK: - return get_demuxer_info("Track"); - - case META_INFO_GENRE: - return get_demuxer_info("Genre"); + case META_INFO_TITLE: return get_demuxer_info("Title"); + case META_INFO_ARTIST: return get_demuxer_info("Artist"); + case META_INFO_ALBUM: return get_demuxer_info("Album"); + case META_INFO_YEAR: return get_demuxer_info("Year"); + case META_INFO_COMMENT: return get_demuxer_info("Comment"); + case META_INFO_TRACK: return get_demuxer_info("Track"); + case META_INFO_GENRE: return get_demuxer_info("Genre");
same
@@ -516,14 +498,14 @@ static void print_file_properties(const MPContext *mpctx, const char *filename) if (mpctx->sh_video) { /* Assume FOURCC if all bytes >= 0x20 (' ') */ if (mpctx->sh_video->format >= 0x20202020) - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FORMAT=%.4s\n", (char *)&mpctx->sh_video->format); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FORMAT=%.4s\n", (char *)&mpctx->sh_video->format); else mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FORMAT=0x%08X\n", mpctx->sh_video->format); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_BITRATE=%d\n", mpctx->sh_video->i_bps * 8); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_WIDTH=%d\n", mpctx->sh_video->disp_w); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_HEIGHT=%d\n", mpctx->sh_video->disp_h); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FPS=%5.3f\n", mpctx->sh_video->fps); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_ASPECT=%1.4f\n", mpctx->sh_video->aspect); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_BITRATE=%d\n", mpctx->sh_video->i_bps * 8); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_WIDTH=%d\n", mpctx->sh_video->disp_w); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_HEIGHT=%d\n", mpctx->sh_video->disp_h); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_FPS=%5.3f\n", mpctx->sh_video->fps); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_ASPECT=%1.4f\n", mpctx->sh_video->aspect); video_start_pts = ds_get_next_pts(mpctx->d_video); } if (mpctx->sh_audio) { @@ -531,10 +513,10 @@ static void print_file_properties(const MPContext *mpctx, const char *filename) if (mpctx->sh_audio->format >= 0x20202020) mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_FORMAT=%.4s\n", (char *)&mpctx->sh_audio->format); else - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_FORMAT=%d\n", mpctx->sh_audio->format); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_BITRATE=%d\n", mpctx->sh_audio->i_bps * 8); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_RATE=%d\n", mpctx->sh_audio->samplerate); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_NCH=%d\n", mpctx->sh_audio->channels); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_FORMAT=%d\n", mpctx->sh_audio->format); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_BITRATE=%d\n", mpctx->sh_audio->i_bps * 8); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_RATE=%d\n", mpctx->sh_audio->samplerate); + mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_NCH=%d\n", mpctx->sh_audio->channels);
I don't see the point.
It sticks more to the final output, and the values are aligned to we can dicern them more I guess.
@@ -788,9 +769,8 @@ void exit_player(enum exit_reason how) static void child_sighandler(int x) { pid_t pid; - while ((pid = waitpid(-1, NULL, WNOHANG)) > 0) ; + while ((pid = waitpid(-1, NULL, WNOHANG)) > 0); }
This looks like a bug in uncrustify or the uncrustify configuration.
Yep, but I wasn't able to find a correct workaround in the settings. Feel free to dig in it…
@@ -1046,14 +1026,11 @@ static int playtree_add_playlist(play_tree_t *entry) { if (!entry) { entry = mpctx->playtree_iter->tree; - if (play_tree_iter_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) { + if (play_tree_iter_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) return PT_NEXT_ENTRY; - } - if (mpctx->playtree_iter->tree == entry) { // Loop with a single file - if (play_tree_iter_up_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) { + if (mpctx->playtree_iter->tree == entry) // Loop with a single file + if (play_tree_iter_up_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) return PT_NEXT_ENTRY; - } - }
I think uncrustify has an option for this.
Yes under a warning section. We don't set it up because of some issue with defines.
@@ -1927,9 +1903,9 @@ static mp_image_t *mp_dvdnav_copy_mpi(mp_image_t *to_mpi, if (to_mpi && to_mpi->w == from_mpi->w && to_mpi->h == from_mpi->h && - to_mpi->imgfmt == from_mpi->imgfmt) + to_mpi->imgfmt == from_mpi->imgfmt) { mpi = to_mpi; - else { + } else { if (to_mpi) free_mp_image(to_mpi); if (from_mpi->w == 0 || from_mpi->h == 0) @@ -2531,8 +2507,9 @@ static void pause_loop(void) if (term_osd && !mpctx->sh_video) { set_osd_msg(OSD_MSG_PAUSE, 1, 0, MSGTR_Paused); update_osd_msg(); - } else + } else { mp_msg(MSGT_CPLAYER, MSGL_STATUS, "\n"MSGTR_Paused "\r"); + } mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_PAUSED\n"); } #ifdef CONFIG_GUI @@ -2574,9 +2551,10 @@ static void pause_loop(void) set_osd_msg(OSD_MSG_PAUSE, 1, 0, MSGTR_Paused " %d%%", new_cache_fill); update_osd_msg(); - } else + } else { mp_msg(MSGT_CPLAYER, MSGL_STATUS, MSGTR_Paused " %d%%\r", new_cache_fill); + }
I see little point in doing this manually if uncrustify can achieve it.
See above.
@@ -3306,19 +3280,15 @@ play_next_file:
if (mpctx->stream->type == STREAMTYPE_BD) { - if (audio_lang && audio_id == -1) - audio_id = bd_aid_from_lang(mpctx->stream, audio_lang); - if (dvdsub_lang && dvdsub_id == -1) - dvdsub_id = bd_sid_from_lang(mpctx->stream, dvdsub_lang); + if (audio_lang && audio_id == -1) audio_id = bd_aid_from_lang(mpctx->stream, audio_lang); + if (dvdsub_lang && dvdsub_id == -1) dvdsub_id = bd_sid_from_lang(mpctx->stream, dvdsub_lang); }
#ifdef CONFIG_DVDREAD if (mpctx->stream->type == STREAMTYPE_DVD) { current_module = "dvd lang->id"; - if (audio_lang && audio_id == -1) - audio_id = dvd_aid_from_lang(mpctx->stream, audio_lang); - if (dvdsub_lang && dvdsub_id == -1) - dvdsub_id = dvd_sid_from_lang(mpctx->stream, dvdsub_lang); + if (audio_lang && audio_id == -1) audio_id = dvd_aid_from_lang(mpctx->stream, audio_lang); + if (dvdsub_lang && dvdsub_id == -1) dvdsub_id = dvd_sid_from_lang(mpctx->stream, dvdsub_lang);
I'd skip this as well.
OK :(
As I said above - for me it is much clearer when using a single line.
@@ -3878,20 +3828,20 @@ goto_enable_cache:
//============================ Auto QUALITY ============================
-/*Output quality adjustments:*/ + /* Output quality adjustments: */ if (auto_quality > 0) { current_module = "autoq"; -// float total=0.000001f * (GetTimer()-aq_total_time); -// if(output_quality<auto_quality && aq_sleep_time>0.05f*total) + //float total=0.000001f * (GetTimer()-aq_total_time); + //if(output_quality<auto_quality && aq_sleep_time>0.05f*total) if (output_quality < auto_quality && aq_sleep_time > 0) ++output_quality; else -// if(output_quality>0 && aq_sleep_time<-0.05f*total) + //if(output_quality>0 && aq_sleep_time<-0.05f*total) if (output_quality > 1 && aq_sleep_time < 0) --output_quality; else if (output_quality > 0 && aq_sleep_time < -0.050f) // 50ms output_quality = 0; -// printf("total: %8.6f sleep: %8.6f q: %d\n",(0.000001f*aq_total_time),aq_sleep_time,output_quality); + //printf("total: %8.6f sleep: %8.6f q: %d\n",(0.000001f*aq_total_time),aq_sleep_time,output_quality); set_video_quality(mpctx->sh_video, output_quality);
The style in the commented-out code is messed up :-p
oh please :D
Most of the rest like the comment adjustments etc. looks OK.
OK
On Thu, May 05, 2011 at 03:00:17PM +0200, Clément Bœsch wrote:
On Sat, Apr 16, 2011 at 12:02:53AM +0200, Clément Bœsch wrote:
Due to uncrustify and A.I. limitations, humans are still needed sometimes. --- mplayer.c | 283 +++++++++++++++++++++++++------------------------------------ 1 files changed, 114 insertions(+), 169 deletions(-)
Patch updated. No more functionnal changes, and more cosmetics, vertical align & stuff. It follows the uncrustify patch.
I think this is rather too much bikeshed material. The comment changes and removing {} for ifs shoudl be ok, most of the rest I'd rather drop to avoid wasting time bikeshedding.
@@ -788,9 +769,8 @@ void exit_player(enum exit_reason how) static void child_sighandler(int x) { pid_t pid; - while ((pid = waitpid(-1, NULL, WNOHANG)) > 0) ; + while ((pid = waitpid(-1, NULL, WNOHANG)) > 0);
I don't think that's an improvement, the sensible ways of doing it I know are
+ while ((pid = waitpid(-1, NULL, WNOHANG)) > 0) /* wait */; or + while ((pid = waitpid(-1, NULL, WNOHANG)) > 0) {}
to clarify it is intended. Though in this case the obvious way of writing it is do { pid = waitpid(-1, NULL, WNOHANG); } while (pid > 0);
- if (mpctx->playtree_iter->tree == entry) { // Loop with a single file - if (play_tree_iter_up_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) { + if (mpctx->playtree_iter->tree == entry) // Loop with a single file + if (play_tree_iter_up_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) return PT_NEXT_ENTRY; - } - }
Multi-level if without {} are a bit questionable. Better way: // Loop with a single file if (mpctx->playtree_iter->tree == entry && play_tree_iter_up_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) return PT_NEXT_ENTRY;
@@ -1784,8 +1759,9 @@ static int check_framedrop(double frame_time) ++drop_frame_cnt; ++dropped_frames; return frame_dropping; - } else + } else { dropped_frames = 0; + }
Why? That adds an extra line for no benefit IMO.
@@ -1927,9 +1903,9 @@ static mp_image_t *mp_dvdnav_copy_mpi(mp_image_t *to_mpi, if (to_mpi && to_mpi->w == from_mpi->w && to_mpi->h == from_mpi->h && - to_mpi->imgfmt == from_mpi->imgfmt) + to_mpi->imgfmt == from_mpi->imgfmt) { mpi = to_mpi; - else { + } else {
In contrast to this, which makes sense.
On Thu, May 05, 2011 at 06:49:58PM +0200, Reimar Döffinger wrote:
On Thu, May 05, 2011 at 03:00:17PM +0200, Clément Bœsch wrote:
On Sat, Apr 16, 2011 at 12:02:53AM +0200, Clément Bœsch wrote:
Due to uncrustify and A.I. limitations, humans are still needed sometimes. --- mplayer.c | 283 +++++++++++++++++++++++++------------------------------------ 1 files changed, 114 insertions(+), 169 deletions(-)
Patch updated. No more functionnal changes, and more cosmetics, vertical align & stuff. It follows the uncrustify patch.
I think this is rather too much bikeshed material. The comment changes and removing {} for ifs shoudl be ok, most of the rest I'd rather drop to avoid wasting time bikeshedding.
I wouldn't do it in a bunch of 10 cosmetic commits, but since we're at it…
@@ -788,9 +769,8 @@ void exit_player(enum exit_reason how) static void child_sighandler(int x) { pid_t pid; - while ((pid = waitpid(-1, NULL, WNOHANG)) > 0) ; + while ((pid = waitpid(-1, NULL, WNOHANG)) > 0);
I don't think that's an improvement, the sensible ways of doing it I know are
+ while ((pid = waitpid(-1, NULL, WNOHANG)) > 0) /* wait */; or + while ((pid = waitpid(-1, NULL, WNOHANG)) > 0) {}
to clarify it is intended. Though in this case the obvious way of writing it is do { pid = waitpid(-1, NULL, WNOHANG); } while (pid > 0);
I prefer that later form. Chunk dropped, I'll fix that this way.
- if (mpctx->playtree_iter->tree == entry) { // Loop with a single file - if (play_tree_iter_up_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) { + if (mpctx->playtree_iter->tree == entry) // Loop with a single file + if (play_tree_iter_up_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) return PT_NEXT_ENTRY; - } - }
Multi-level if without {} are a bit questionable. Better way:
// Loop with a single file if (mpctx->playtree_iter->tree == entry && play_tree_iter_up_step(mpctx->playtree_iter, 1, 0) != PLAY_TREE_ITER_ENTRY) return PT_NEXT_ENTRY;
OK, fixed locally.
@@ -1784,8 +1759,9 @@ static int check_framedrop(double frame_time) ++drop_frame_cnt; ++dropped_frames; return frame_dropping; - } else + } else { dropped_frames = 0; + }
Why? That adds an extra line for no benefit IMO.
Just for consistency with the whole if/else. -- Clément B.
On Thu, May 05, 2011 at 03:00:17PM +0200, Clément Bœsch wrote:
On Sat, Apr 16, 2011 at 12:02:53AM +0200, Clément Bœsch wrote:
Due to uncrustify and A.I. limitations, humans are still needed sometimes. --- mplayer.c | 283 +++++++++++++++++++++++++------------------------------------ 1 files changed, 114 insertions(+), 169 deletions(-)
Patch updated. No more functionnal changes, and more cosmetics, vertical align & stuff. It follows the uncrustify patch.
Applied without most of the proposed compact views because of the complains. Feel free to discuss them and ask me again thought :). I won't propose any more uncrustify and cosmetics patches, but feel free to propose ones. -- Clément B.
On Sat, Apr 16, 2011 at 12:02:49AM +0200, Clément Bœsch wrote:
@@ -188,16 +188,16 @@ int fixed_vo=0; // benchmark: double video_time_usage=0; double vout_time_usage=0; -static double audio_time_usage=0; -static int total_time_usage_start=0; -static int total_frame_cnt=0; -static int drop_frame_cnt=0; // total number of dropped frames +static double audio_time_usage; +static int total_time_usage_start; +static int total_frame_cnt; +static int drop_frame_cnt; // total number of dropped frames int benchmark=0;
Outside of functions "static" or not makes no difference concerning this aspect, so you should also remove it from the others.
On Fri, Apr 22, 2011 at 11:47:00AM +0200, Reimar Döffinger wrote:
On Sat, Apr 16, 2011 at 12:02:49AM +0200, Clément Bœsch wrote:
@@ -188,16 +188,16 @@ int fixed_vo=0; // benchmark: double video_time_usage=0; double vout_time_usage=0; -static double audio_time_usage=0; -static int total_time_usage_start=0; -static int total_frame_cnt=0; -static int drop_frame_cnt=0; // total number of dropped frames +static double audio_time_usage; +static int total_time_usage_start; +static int total_frame_cnt; +static int drop_frame_cnt; // total number of dropped frames int benchmark=0;
Outside of functions "static" or not makes no difference concerning this aspect, so you should also remove it from the others.
Mmmh indeed, that was stupid to ignore globals. I'll update the patch when the git mirror will be back (is it already?). Should I commit it directly if the make checkmd5sum is ok? -- Clément B.
On Sat, Apr 30, 2011 at 11:35:01PM +0200, Clément Bœsch wrote:
On Fri, Apr 22, 2011 at 11:47:00AM +0200, Reimar Döffinger wrote:
On Sat, Apr 16, 2011 at 12:02:49AM +0200, Clément Bœsch wrote:
@@ -188,16 +188,16 @@ int fixed_vo=0; // benchmark: double video_time_usage=0; double vout_time_usage=0; -static double audio_time_usage=0; -static int total_time_usage_start=0; -static int total_frame_cnt=0; -static int drop_frame_cnt=0; // total number of dropped frames +static double audio_time_usage; +static int total_time_usage_start; +static int total_frame_cnt; +static int drop_frame_cnt; // total number of dropped frames int benchmark=0;
Outside of functions "static" or not makes no difference concerning this aspect, so you should also remove it from the others.
Mmmh indeed, that was stupid to ignore globals. I'll update the patch when the git mirror will be back (is it already?).
Hm, I just enabled it again, but I have no idea if it is up-to-date actually...
Should I commit it directly if the make checkmd5sum is ok?
I guess that should be ok.
On Sat, Apr 30, 2011 at 11:58:13PM +0200, Reimar Döffinger wrote:
On Sat, Apr 30, 2011 at 11:35:01PM +0200, Clément Bœsch wrote:
On Fri, Apr 22, 2011 at 11:47:00AM +0200, Reimar Döffinger wrote:
On Sat, Apr 16, 2011 at 12:02:49AM +0200, Clément Bœsch wrote:
@@ -188,16 +188,16 @@ int fixed_vo=0; // benchmark: double video_time_usage=0; double vout_time_usage=0; -static double audio_time_usage=0; -static int total_time_usage_start=0; -static int total_frame_cnt=0; -static int drop_frame_cnt=0; // total number of dropped frames +static double audio_time_usage; +static int total_time_usage_start; +static int total_frame_cnt; +static int drop_frame_cnt; // total number of dropped frames int benchmark=0;
Outside of functions "static" or not makes no difference concerning this aspect, so you should also remove it from the others.
Mmmh indeed, that was stupid to ignore globals. I'll update the patch when the git mirror will be back (is it already?).
Hm, I just enabled it again, but I have no idea if it is up-to-date actually...
Thank you, it looks recent enough.
Should I commit it directly if the make checkmd5sum is ok?
I guess that should be ok.
Patch re-attached since the binary changed (with GCC at least); it looks globals are handled a bit differently. I'll commit this in a few days if no one object. -- Clément B.
On Sun, May 01, 2011 at 02:39:32PM +0200, Clément Bœsch wrote:
On Sat, Apr 30, 2011 at 11:58:13PM +0200, Reimar Döffinger wrote:
On Sat, Apr 30, 2011 at 11:35:01PM +0200, Clément Bœsch wrote:
On Fri, Apr 22, 2011 at 11:47:00AM +0200, Reimar Döffinger wrote:
On Sat, Apr 16, 2011 at 12:02:49AM +0200, Clément Bœsch wrote:
@@ -188,16 +188,16 @@ int fixed_vo=0; // benchmark: double video_time_usage=0; double vout_time_usage=0; -static double audio_time_usage=0; -static int total_time_usage_start=0; -static int total_frame_cnt=0; -static int drop_frame_cnt=0; // total number of dropped frames +static double audio_time_usage; +static int total_time_usage_start; +static int total_frame_cnt; +static int drop_frame_cnt; // total number of dropped frames int benchmark=0;
Outside of functions "static" or not makes no difference concerning this aspect, so you should also remove it from the others.
Mmmh indeed, that was stupid to ignore globals. I'll update the patch when the git mirror will be back (is it already?).
Hm, I just enabled it again, but I have no idea if it is up-to-date actually...
Thank you, it looks recent enough.
Tell me if you see issues. It is completely the way Michael set it up without any verification at least by me.
Should I commit it directly if the make checkmd5sum is ok?
I guess that should be ok.
Patch re-attached since the binary changed (with GCC at least); it looks globals are handled a bit differently. I'll commit this in a few days if no one object.
Fine, however I'd really prefer if you'd just directly apply changes like removing the nonsense //"MI2-Trailer.avi"; comment instead of having it messed in into such changes. (I am saying this because I see that sending a separate patch is unreasonable effort for it. Same applies to spelling mistakes and any simple comment improvements).
On Sun, May 01, 2011 at 06:25:25PM +0200, Reimar Döffinger wrote:
On Sun, May 01, 2011 at 02:39:32PM +0200, Clément Bœsch wrote:
On Sat, Apr 30, 2011 at 11:58:13PM +0200, Reimar Döffinger wrote:
On Sat, Apr 30, 2011 at 11:35:01PM +0200, Clément Bœsch wrote:
On Fri, Apr 22, 2011 at 11:47:00AM +0200, Reimar Döffinger wrote:
On Sat, Apr 16, 2011 at 12:02:49AM +0200, Clément Bœsch wrote:
@@ -188,16 +188,16 @@ int fixed_vo=0; // benchmark: double video_time_usage=0; double vout_time_usage=0; -static double audio_time_usage=0; -static int total_time_usage_start=0; -static int total_frame_cnt=0; -static int drop_frame_cnt=0; // total number of dropped frames +static double audio_time_usage; +static int total_time_usage_start; +static int total_frame_cnt; +static int drop_frame_cnt; // total number of dropped frames int benchmark=0;
Outside of functions "static" or not makes no difference concerning this aspect, so you should also remove it from the others.
Mmmh indeed, that was stupid to ignore globals. I'll update the patch when the git mirror will be back (is it already?).
Hm, I just enabled it again, but I have no idea if it is up-to-date actually...
Thank you, it looks recent enough.
Tell me if you see issues. It is completely the way Michael set it up without any verification at least by me.
Sure ok. It's just for RO usage anyway.
Should I commit it directly if the make checkmd5sum is ok?
I guess that should be ok.
Patch re-attached since the binary changed (with GCC at least); it looks globals are handled a bit differently. I'll commit this in a few days if no one object.
Fine, however I'd really prefer if you'd just directly apply changes like removing the nonsense //"MI2-Trailer.avi"; comment instead of having it messed in into such changes. (I am saying this because I see that sending a separate patch is unreasonable effort for it. Same applies to spelling mistakes and any simple comment improvements).
Right, ok :) I'll commit that stuff in the next hour then. -- Clément B.
On Sun, May 01, 2011 at 02:39:31PM +0200, Clément Bœsch wrote:
[...] From 04f39e9c2238cb4853069a913d85ac67817db0c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= <ubitux@gmail.com> Date: Fri, 15 Apr 2011 22:40:15 +0200 Subject: [PATCH 1/5] Remove some useless static and global zero initializations.
--- mplayer.c | 148 ++++++++++++++++++++++++++++++------------------------------ 1 files changed, 74 insertions(+), 74 deletions(-)
Applied. -- Clément B.
Le primidi 11 floréal, an CCXIX, Reimar Döffinger a écrit :
Mmmh indeed, that was stupid to ignore globals. I'll update the patch when the git mirror will be back (is it already?). Hm, I just enabled it again, but I have no idea if it is up-to-date actually...
It is stuck at what it was on April the 19th, and not compilable against current ffmpeg. If it is not too much work, I would really appreciate it it could be regularly updated again. We could use each our own git-svn copy, but this is very inefficient. Regards, -- Nicolas George
On Wed, May 04, 2011 at 05:06:43PM +0200, Nicolas George wrote:
Le primidi 11 floréal, an CCXIX, Reimar Döffinger a écrit :
Mmmh indeed, that was stupid to ignore globals. I'll update the patch when the git mirror will be back (is it already?). Hm, I just enabled it again, but I have no idea if it is up-to-date actually...
It is stuck at what it was on April the 19th, and not compilable against current ffmpeg.
If it is not too much work, I would really appreciate it it could be regularly updated again. We could use each our own git-svn copy, but this is very inefficient.
I annoyed Michael on IRC about that, but I guess he has better to do. Btw, I'll git svn clone the repo locally, and update the uncrustify patch tonight (if the git svn clone succeed). -- Clément B.
participants (7)
-
Clément Bœsch -
compn -
Dan Oscarsson -
Diego Biurrun -
Ingo Brückl -
Nicolas George -
Reimar Döffinger