decoder is used but the hardware does not support hardware MPEG audio).
Otherwise this will lead to a crash later on when the decode code tries to access
the audio filter chain.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29836 b3059339-0415-0410-9bf9-f77b7e298cf2
selecting the subtitle via -slang or -sid.
It is quite possible that removing it will cause other issues, though
I could not see any with the DVDs I had available for testing.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29827 b3059339-0415-0410-9bf9-f77b7e298cf2
Move av_log callback handling from vd_ffmpeg.c to a new file
av_log.c and install the callback immediately when starting the
program. Main functionality improvements of the new code:
- The old version only installed the callback when opening an FFmpeg
video decoder. If nothing had triggered that then av_log() messages
from other sources (libavformat, audio decoding, swscale usage)
bypassed MPlayer's output system completely. Now the callback is
always installed.
- Current av_log message severity levels are handled correctly. The
old code used MSGL_ERR for some messages that should be MSGL_V.
- Message type is now set for libavformat contexts
(MSGT_DEMUXER / MSGT_MUXER).
- The old code did "mp_msg_test(type, mp_level)" before actually
determining the type, so that it always used MSGT_FIXME. This led
to some messages being incorrectly dropped in case the user
had specified module-specific verbosity levels. The old check in
question was originally motivated by performance problems when
there were a lot of callbacks; however it's not clear whether the
part about it skipping the type determination was intentional (most
of the performance problems must have come from the way the
original code used snprintf) and in my tests current FFmpeg
libraries have not generated unreasonable amounts of callbacks
anyway.
As part of merging subtitle-in-terminal changes make
update_subtitles() only clear existing subtitles if called with the
reset argument, and not try to set new ones. Later calls should set
the needed new subtitles, and this change avoids some problems with
trying to set subtitles when mp_property_sub() in command.c gets
called from initialization code before full initialization.
This still needs some additional checking that subtitle selection via dvdnav works.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29732 b3059339-0415-0410-9bf9-f77b7e298cf2
This fixes a crash with e.g. auto-enabled subtitles and -novideo due to
command.c calling update_subtitles even without video and is a step
toward subtitle support for audio-only files.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29710 b3059339-0415-0410-9bf9-f77b7e298cf2
* vdpau: (22 commits)
VO: Prefer vo_vdpau over vo_xv again
vo_vdpau: Fix X event handling bugs
vo_vdpau: Fix memory corruption bug with MP_IMGTYPE_NUMBERED
core/VO: Allow VO drivers to add/modify frames
video_out.h: Cosmetics
VO interface: Remove obsolete draw_frame() from new interface
vo_vdpau: Support recovering from VDPAU display preemption
vo_vdpau: Support updating OSD while paused
vo_vdpau.c: Reindent control() switch statement
vo_vdpau: Allocate one large surface for EOSD content
vo_vdpau.c: cosmetics
vo_vdpau: reindent after GUI code removal
vo_vpdau: Clean up uninit logic
vo_vdpau: Make CHECK_ST macro safer
vo_vdpau: Move all remaining static/global variables to context
vo_vdpau: Move things to context struct
vo_vdpau: Make info struct const
vo_vdpau: Replace global function table with context variable
vo_vdpau: Move VDPAU interface pointers into one struct
vo_vdpau: Add template file for VDPAU functions
...
Add interfaces to allow VO drivers to add or remove frames from the
video stream and to alter timestamps. Currently this functionality
only works with in correct-pts mode. Use the new functionality in
vo_vdpau to properly support frame-adding deinterlace modes.
Frames added by the VDPAU deinterlacing code are now properly timed.
Before every second frame was always shown immediately (probably next
monitor refresh) after the previous one, even if you were watching
things in slow motion, and framestepping didn't stop at them at all.
When seeking the deinterlace algorithm is no longer fed a mix of
frames from old and new positions.
As a side effect of the changes a problem with resize events was also
fixed. Resizing calls video_to_output_surface() to render the frame at
the new resolution, but before this function also changed the list of
history frames, so resizing could give an image different from the
original one, and also corrupt next frames due to them seeing the
wrong history. Now the function has no such side effects. There are
more resize-related problems though that will be fixed in a later
commit.
The deint_mpi[] list of reserved frames is increased from 2 to 3
entries for reasons related to the above. Having 2 entries is enough
when you initially get a new frame in draw_image() because then you'll
have those two entries plus the new one for a total of 3 (the code
relied on the oldest mpi implicitly staying reserved for the duration
of the call even after usage count was decreased). However if you want
to be able to reproduce the rendering outside draw_image(), relying on
the explicitly reserved list only, then it needs to store 3 entries.
This should really be done via the NXCOMPAT PE flag, but looks like
binutils will not get support for it any time soon and not having this
security feature enabled is just ridiculous.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29683 b3059339-0415-0410-9bf9-f77b7e298cf2
current file name against full name to be added, not current file name
against new base path.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29637 b3059339-0415-0410-9bf9-f77b7e298cf2
file name strings that might come from arbitrary playlists, use PATH_MAX instead.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29636 b3059339-0415-0410-9bf9-f77b7e298cf2
dvbin.h #includes some system DVB headers that may be unavailable.
Fixes compilation with DVB disabled.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29474 b3059339-0415-0410-9bf9-f77b7e298cf2
The GUI is badly designed and too closely coupled to the internal
details of other code. The GUI code is in bad shape and unmaintained
for years. There is no indication that anyone would maintain it in the
future either. Even if someone did volunteer to implement a better
integrated GUI having the current code in the tree probably wouldn't
help much. So get rid of it.
instead of only depending on the stream.
This makes the value correctly 0 e.g. for AVI files without index.
Patch by Jason Tackaberry [tack urandom ca]
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29331 b3059339-0415-0410-9bf9-f77b7e298cf2
Code that was supposed to merge two timeline parts if the second one
started exactly where the first one stopped didn't work because it
mixed timestamps in different units (I had changed the units of some
variables after originally writing that code but forgotten to update
it). As a result of the bug there were unnecessary part switches, but
it was unlikely to cause any serious problems.
The uninit code called talloc_free(mpctx->chapters) but didn't clear
the pointer. As a result playing a file with ordered chapters and one
without almost certainly triggered an abort when closing the second
file. Fix by setting the pointer to NULL after freeing.
If there is no timestamp available for a video frame at all, use
timestamp from the previous frame (if any) instead of leaving it as
MP_NOPTS_VALUE. The main practical difference for playback is that
MP_NOPTS_VALUE caused timing to be reset, moving current video
position immediately to time of the next frame that had a timestamp
and thus likely advancing the video too fast. Now the next frame with
a timestamp will be shown at its proper position relative to the
previous timestamp.
Remove the "num_chapters" and "mode" parameters that aren't needed by
any callers. Change "float *seek_pts" to "double *". Allocate the
string returned via "chapter_name" with talloc.
Many VOs kept track of pause status, but reset the value when their
config() function was called. However it can be called while playback
stays in pause mode. Modify the VOs to not change anything in
config(). Also send the VO either VOCTRL_PAUSE or VOCTRL_RESUME when
the playback of a new file is starting to make sure they have the
right status.
Add basic support for Matroska ordered chapters. The switching between
segments is implemented as a general edit timeline that could also be
used for other purposes.
Some things still need improvement. In particular the current code
does not try to do any proper mapping between audio/video/subtitle
streams of different files and there should be options for better
control of how MPlayer searches other files for the required content.
Clean up the code and make the behavior more consistent. Before
bits of the OSD information were triggered in different places, and
various property commands that affect playback position only showed
the seek bar while the main seek command also triggered showing the
percentage in OSD text. Now only the seek and chapter commands trigger
all information and others nothing (which is consistent with most
property behavior).
When the new mode is active relative seeks are converted to absolute
ones (current video pts + relative seek amount) and forward/backward
flag before being sent to the demuxer. This mode is used if the
demuxer has set the accurate_seek field in the demuxer struct and
there is a video stream. At the moment the mkv and lavf demuxers
enable the flag.
This change is useful for later Matroska ordered chapter support (and
for more general timelime editing), but also fixes problems in
existing functionality. The main problem with the old mode, where
relative seeks are passed directly to the demuxer, is that the user
wants to seek relative to the currently displayed position but the
demuxer does not know what that position is. There can be an arbitrary
amount of buffering between the demuxer read position and what is
displayed on the screen. In some situations this makes small seeks
fail to move backward at all (especially visible at high playback
speed, when audio needs to be demuxed and decoded further ahead to
fill the output buffers after resampling).
Some container formats that can be used with the lavf demuxer do not
always have reliable timestamps that could be used for unambiguous
absolute seeking. However I made the demuxer always enable the new
mode because it already converted all seeks to absolute ones before
sending them to libavformat, so cases without reliable absolute seeks
were failing already and this should only improve the working cases.
Restore accidentally dropped '!' to fixed-vo test in
reinit_video_chain(). It could have caused some issues when switching
video streams. Probably nobody noticed because files with multiple
video streams are rare.
different behaviour is unlikely to make sense but it is better to handle
this in input.c instead of adding special cases to mplayer.c and being
able to override the default behaviour at least should not hurt.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28870 b3059339-0415-0410-9bf9-f77b7e298cf2
This allows printing the CPU information when verbose mode is
triggered on the command line.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28691 b3059339-0415-0410-9bf9-f77b7e298cf2
Print CPU information in verbose mode instead of by default.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28360 b3059339-0415-0410-9bf9-f77b7e298cf2
The libdvdread4 and libdvdnav directories, which are externals in the
svn repository, are at least for now not included in any form. I added
configure checks to automatically disable internal libdvdread and
libdvdnav if the corresponding directories are not present; if they're
added manually then things work the same as in svn.
Move the OSD drawing calls from filter_video() to higher-level code to
ensure that VOs will draw the OSD also in filter-added frames, which
are displayed without a separate call to filter_video().
Rewrite some of the -correct-pts frame generation code. The most
noticeable difference is that video timestamps which jump around but
do not go backwards more than 0.5 seconds will not affect overall
video playback speed. Only larger jumps are treated as timestamp
resets and increase the overall length of the video timeline. This
will hopefully give watchable results for videos which have broken
timestamps or which MPlayer does not demux or otherwise handle
properly.
Rewrite the -nocorrect-pts frame creation code. The new version always
updates the visible frame when seeking while pausing, and supports
filter-added frames. It can not time those properly though.
Now the handling of filter-added frames in MPlayer always uses the new
method independently of the value of correct-pts but MEncoder still
expects the old behavior. Add a global variable that is set under
MEncoder only and change the filters to choose behavior based on that
instead of the correct_pts option.
Handle timing out of OSD messages and set the OSD function symbol to
pause instead of play. The implementation is hackish and should be
cleaned up later with other pause loop changes.
Notable functionality changes:
* Timing change between any two frames is now accurately limited to
1/10 of their nominal distance. Previous code did not always use the
correct duration.
* The status line now keeps showing the same A-V sync value from one
video frame change to the next. Previously it kept recalculating
the value using a new audio position but the same video position
when the status line was updated between video frames. This
incorrectly showed the video losing sync with audio.
* The status line now displays actual measured A-V difference in
autosync mode too. The previous code displayed values that
completely ignored real timing in autosync mode, showing 0 A-V
difference even when video was significantly behind audio due to
inadequate decoding speed. The new behavior can make the shown A-V
values appear more unstable if the audio out has unreliable delay
measurements (the most likely reason to use autosync), but this is a
display change rather than a timing quality change.
* Autosync mode now tries to adjust timing by the amount of time
vo_flip() calls take, so the calls start earlier and finish at the
time the frame should be shown. Previously non-autosync mode
adjusted for this but autosync did not.
* The warning about the system being too slow to decode the video in
realtime is now displayed in autosync mode too.
This fixes the warning:
mplayer.c:381: warning: return discards qualifiers from pointer target type
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28294 b3059339-0415-0410-9bf9-f77b7e298cf2
When OSD contents change while paused, try to change the OSD drawn in
the currently visible frame. If such OSD updates are not supported
then advance by one frame and draw the OSD normally. Add some support
for OSD redrawing to vo xv.
The new xv code makes a copy of the original frame contents before
drawing the OSD if MPlayer is already paused when the frame is drawn.
If such a copy of the current frame exists then the frame contents can
be restored and a different OSD drawn on top of the same frame.
Screen is now updated immediately (doesn't always work without
correct-pts yet though). Doing audio unpause after the seek reset can
display errors.
Main loop code now checks for possible reasons to stop command
processing instead of relying on each command to also set an explicit
'break' flag.
Add separate pause_player() / unpause_player functions(), move some
pausing-related state into explicit variables and make commands while
paused not unpause. Not everything works properly while paused yet (no
screen updates etc).
This avoids a pointless indirection that only obscures what is really done.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27761 b3059339-0415-0410-9bf9-f77b7e298cf2
The mpctx->eof field was used to also store other reasons to stop
playing the current file besides EOF, and the code didn't properly
distinguish those from EOF. Rename the field to "stop_play" and clean
up some of the code accessing it. Properly separating EOF from other
reasons allows handling file switching better.
Before this commit buffered audio was always drained before moving to
the next file (the only exception when it was NOT drained when
stopping a file was when quitting the player completely). This added
an extra delay when manually moving to the next file as you had to
wait for the currently buffered audio to finish playing before the
next file would start. After this commit audio is only drained if the
file reaches EOF normally; otherwise audio is cut and the next file
starts immediately.
Replace all USE_ prefixes by CONFIG_ prefixes to indicate
options which are configurable.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27373 b3059339-0415-0410-9bf9-f77b7e298cf2
This is more portable and avoids generating the same random numbers
for a whole second (and on MinGW for some unexplainable reason for
almost 10 seconds).
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27353 b3059339-0415-0410-9bf9-f77b7e298cf2
Starting MPlayer with options such as "-demuxer help" that exit before
initializing OSD struct would crash at exit because of a reference to
mpctx->osd->sub_font in deinitialization code. Fix by checking that
mpctx->osd is not NULL.
Checking that osd->sub_font is not NULL was unnecessary because
free_font_desc(NULL) is safe.
The casts were left from the time when the type of sh_video->vfilter
was (unnecessarily) void *. Now that the field has the correct type
the casts are pointless.
This commit creates the struct and passes it to some functions that
needs to access OSD state but does not yet move much data from globals
to it.
vf_expand accesses the OSD state for rendering purposes outside of the
normal OSD draw time. The way this currently works is suboptimal, but
I did not attempt to clean it up now. To keep things working the same
way vf_expand needs to know the address of the state object to be able
to access the data even in the functions that should normally not need
it. For that purpose this commit adds a VFCTRL to tell vf_expand the
address of the object.
Mostly useful when used with -idle mode.
Patch by Mathieu Schroeter ( mathieu dot schroeter at gamesover dot ch )
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26909 b3059339-0415-0410-9bf9-f77b7e298cf2
desired subtitle track the least priority.
Selection of displayed subtitles by language (-slang) and default track
attribute is only performed if all other ways have failed. They are not
directly controllable by the user (especially default tracks), therefore they
should not override -sub, -vobsub and even auto-subs.
Based on a patch by Sergey Malkovsky (mplayer.win32_gmail_com).
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26752 b3059339-0415-0410-9bf9-f77b7e298cf2
between 10 and 55 ms (depending on OS version) is too inaccurate
for our needs.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26721 b3059339-0415-0410-9bf9-f77b7e298cf2
Start moving static variables to a context struct. Only autorepeat
state is moved to the struct in this commit.
mp_input_check_interrupt now requires the context variable. Change
stream functions to pass it. It's still stored in a static variable in
stream/.
Use the same mp_input_add_key_fd for all uses and add a context
argument to its callback that was before only in the event fd
callbacks. Instead of checking in input.c whether keys were inserted
to the keypress FIFO during the callback do the check in the callback
before returning and set return value accordingly.
Move the code calculating time delta since last query out of the
platform-specific drivers and into mplayer.c. The platform-specific
drivers now return absolute values only.
The way the code in timer-darwin.c uses doubles in wrapping arithmetic
looks questionable and this change might make problems in it more
visible.
The function exit_sighandler had a line
if(initialized_flags==0 && sig_count>1) exit(1);
rather than try to make this work without the variable I just removed
the line as it looks unlikely this condition would occur except very
rarely.
The playlist code is unsafe to use with potentially hostile sources.
It was disabled by default for local files but not for network streams.
Make sure it is not automatically triggered for network streams either.
Add casts to subconfig entries in option lists to avoid the excessive
amount of "initialization discards qualifiers from pointer target
type" warnings. Also add const to the type of mpctx_get_audio_out to
eliminate a warning and make it match the type in the header (svn
r25793 had added a const to the header but not mplayer.c). Make
libmenu_vfs a table of pointers to const to eliminate another warning
plus make the table itself const.
The global was used in the function cfg_include which handles the
-include option. Make the address available in that function by
creating a new dynamically allocated option in m_config_new that has
the address in the option's private data.
asxparser.c also used the global. Making it available through all ways
the code could get called required a number of relatively straightforward
changes to playtree and menu code.
Remove some #include lines from headers, some of those removals made
possible by using incomplete struct types instead of typedefs. Include
mp_osd.h in mplayer.c and command.c after removing it from mp_core.h.
Remove "#ifdef USE_ASS" around some "struct ass_track_s *" fields
which will now compile even without ASS support.
Name the field "sub_id" as it's not specific to DVD subs.
Remove some other unused extern declarations together with dvdsub_id
from demux_mkv.c and demux_lavf.c.
The stream code does not access many option variables directly, but it
does access some such as audio_id and network_bandwidth (and does that
without including proper headers for them). Add option pointer to the
stream struct to allow access to those variables. Remove the unused
(always NULL) and clumsy-looking char** options parameter in the
open_stream call and replace it with the option pointer. The parameter
is currently only set in the main open_stream() call in MPlayer.c and
not in any other locations that can open a stream.
In the long term it might be better to pass a more limited set of
values somehow, but this should do for now.
Pass it in function calls instead. There's no reasonable way to pass
it to exit_player() when used outside mplayer.c. However most of those
uses seem to be wrong (the code should not make the program exit) and
should be removed. For now just make exit_player() uses outside
mplayer.c simply call exit() without any shutdown code.
Remove the global and Add a corresponding field to the vo struct, plus
another which tells whether the LAST config call was successful.The
latter value which tells whether the VO should be properly configured
at the moment seems a better match for the semantics actually needed
in most places where the old value was used. The 'count' field with
the old semantics is not currently used by anything, but I'm leaving
it there for vo drivers which would need those semantics if converted
to use the struct.
Existing uses of the global outside old vo drivers are either converted
to use the struct field or moved inside the vo_xyz() calls (instead of
"if (vo_config_count) vo_flip_page(..." just call vo_flip_page which
will now do nothing if not configured). The removal of the check in
mpcommon.c/update_subtitles() is less trivial than the others, but I
think it shouldn't cause problems.
Will be used for common data between X11 VOs. The main reasons for
making it a separate struct rather than extra fields in the main VO
struct are that some field definitions need X headers and that the code
keeps basic X state such as the display connection over opening and
closing of individual VOs.
Give sh_audio_t, sh_video_t and sh_sub_t which before had typedef
names only a matching struct name (without _t) too.
Change the a_streams, v_streams and s_streams demuxer fields from
void * to struct sh_audio *, struct sh_video * and struct sh_sub *.
Remove a now unnecessary cast from mplayer.c.
First part of option restructuring. The aim is to move option values
from a huge number of separate globals to a single non-global struct.
This part adds some support for parsing option values into such struct
instances, and moves one example option (fixed-vo) to the struct.
Create new video driver API that has a per-instance context structure
and does not rely on keeping status in global or static variables.
Existing drivers are not yet converted to this API; instead there is a
wrapper which translates calls to them.
In the new API, an old API call vo_functions->xyz(args) is generally
replaced by vo_xyz(vo_instance, args).
The changes to keep the vesa, dxr2 and xover drivers compiling have
not been tested.
function. It also removes the compile-time dependency on input.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26358 b3059339-0415-0410-9bf9-f77b7e298cf2
command.c: Don't include libmpcodecs/mp_image.h, libmpdemux/matroska.h
mplayer.c: Don't include libmpdemux/matroska.h
matroska.h: Remove declaration of already removed function
demux_mkv_change_subs and stop including demuxer.h
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26313 b3059339-0415-0410-9bf9-f77b7e298cf2
The first default track is chosen for playback if language-based selection
failes. Additionally, for audio tracks, the first one is chosen if there are
no default tracks at all.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26301 b3059339-0415-0410-9bf9-f77b7e298cf2
The code is not really correct, but it is very little and works "well enough"
to be useful in my tests.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26260 b3059339-0415-0410-9bf9-f77b7e298cf2
option is specified. The problem is similar on Windows, so share the same
workaround for both systems.
patch by KO Myung-Hun, komh chollian net
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26059 b3059339-0415-0410-9bf9-f77b7e298cf2