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
of letting individual demuxers and stream readers do their nasty job
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25987 b3059339-0415-0410-9bf9-f77b7e298cf2
A better solution should be considered later, esp. for the many
broken demuxers that do not treat these flags correctly.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25911 b3059339-0415-0410-9bf9-f77b7e298cf2
Set new aspect ratio if needed (for example in cell change)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25859 b3059339-0415-0410-9bf9-f77b7e298cf2
Based on various patches from Otvos Attila
and MPlayer'ized by me.
N.B. Always use -vc ffmpeg12 with dvdnav://
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25852 b3059339-0415-0410-9bf9-f77b7e298cf2
These attachments are passed to libass after demuxer is opened.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25686 b3059339-0415-0410-9bf9-f77b7e298cf2
be called from a signal handler.
Instead only make the input system generate quit commands for the first
CTRL+C and otherwise do getch2_disable and exit.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25651 b3059339-0415-0410-9bf9-f77b7e298cf2
For history reason, fontconfig is auto-enabled when ass is enabled,
we keep this behavior and document it clearly.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25379 b3059339-0415-0410-9bf9-f77b7e298cf2
pause by checking mpctx directly. If there's any video update before the pause
then capture the frame or fallback to use last captured frame as pausing frame.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25054 b3059339-0415-0410-9bf9-f77b7e298cf2
must be zero when use a dvdsub_id greater than max sub id from demux.
To remove the implicit assumption, make it up here.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24962 b3059339-0415-0410-9bf9-f77b7e298cf2
Substract the delay caused by filter buffering when calculating
currently playing audio position. This matters for af_scaletempo which
buffers significant and varying amounts of data. For other current
filters the effect is normally insignificant.
Instead of the old time-based filter delay field (which was ignored)
this version stores the per-filter delay in units of bytes input read
without corresponding output. This allows the current scaletempo
behavior where other filters before and after it can see the same
nominal samplerate even though the real duration of the data varies;
in this case the other filters can not know the delay they're causing
in terms of real time.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24928 b3059339-0415-0410-9bf9-f77b7e298cf2
The samplerate requested from the audio out depended on the initial
value of playback speed on startup. Changing speed later at runtime
does not affect output samplerate; audio is always resampled instead.
Change the init code so that speed does not affect the samplerate
requested and behavior matches what you'd get by starting the file
with speed 1 and then changing it.
The previous behavior could be desirable when using a constant speed
value. However it means that if you start with a low speed and later
switch to normal speed then audio will be resampled to a low output
frequency. You can still use -srate to explicitly select the frequency.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24923 b3059339-0415-0410-9bf9-f77b7e298cf2
Remove the following arguments as redundant: in_channels, in_format,
out_minsize, out_maxsize. The first two always equal fields of the
sh_audio_t struct given as the first argument to the function. The
last two are unused after the allocation of sh_audio->a_out_buffer
was changed to be done on demand.
After the out_minsize and out_maxsize arguments are removed the
function preinit_audio_filters() is identical to init_audio_filters(),
so remove it and use the latter instead.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24922 b3059339-0415-0410-9bf9-f77b7e298cf2
Rewrite decode_audio to better deal with filters that handle input in
large blocks. It now always places output in sh_audio->a_out_buffer
(which was always given as a parameter before) and reallocates the
buffer if needed. After the changes filters can return arbitrarily
large blocks of data without some of it being lost. The new version
also allows simplifying some code.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24920 b3059339-0415-0410-9bf9-f77b7e298cf2
sh_video_t: void *video_out: only assigned to, never read. Remove.
sh_video_t: void *vfilter: change type to struct vf_instance_s *
sh_audio_t: void *afilter: change type to struct af_stream_s *
The latter two never hold different types so there's no reason to use
void *. Maybe they were originally defined that way because the
option of using pointers to incomplete struct types was missed (the
typedefs vf_instance_t and af_stream_t would require extra headers)?
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24919 b3059339-0415-0410-9bf9-f77b7e298cf2
Make behaviour more consistent with general volume control.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24337 b3059339-0415-0410-9bf9-f77b7e298cf2
against instead of directly #including the C file and replace the many extern
declarations by a proper header file.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24262 b3059339-0415-0410-9bf9-f77b7e298cf2
mplayer.c:316: warning: redundant redeclaration of 'vo_subdevice'
libvo/video_out.h:237: warning: previous declaration of 'vo_subdevice' was here
mplayer.c:317: warning: redundant redeclaration of 'ao_subdevice'
libao2/audio_out.h:44: warning: previous declaration of 'ao_subdevice' was here
mplayer.c:320: warning: redundant redeclaration of 'vo_flags'
libvo/video_out.h:189: warning: previous declaration of 'vo_flags' was here
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24184 b3059339-0415-0410-9bf9-f77b7e298cf2
Add an input/input.c fd type whose read function takes no arguments and
returns no value. If such a function reads key or command events it'll
add them to the queues itself. Use this type for terminal input which
was special-cased before. The event function for X11-based VOs will use
the same type later.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24152 b3059339-0415-0410-9bf9-f77b7e298cf2
Don't set osd_visible directly in seek code. It's usually set to the
same value by set_osd_bar() already. In the cases where set_osd_bar()
is not called or doesn't set it (seek is triggered by EDL or loop, or
there is no video output) it seems to make no difference.
This fixes a minor bug: if you set OSD level to disabled while the
progress bar was visible then doing seeks before it disappeared would
keep it visible but not change its value.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24112 b3059339-0415-0410-9bf9-f77b7e298cf2
Move timed hiding of OSD progress bar to the same place where OSD
messages are timed out.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24111 b3059339-0415-0410-9bf9-f77b7e298cf2
The default version of the sleep timer no longer has the code which
required adding a different #ifdef SYS_DARWIN version, so remove
the Darwin implementation.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24090 b3059339-0415-0410-9bf9-f77b7e298cf2
No need to mark stdin non-select()able in the mp_input_add_key_fd call
when no HAVE_POSIX_SELECT; input.c won't use select() on anything if
that is not defined.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24061 b3059339-0415-0410-9bf9-f77b7e298cf2
Step 8 (last): removing old globals from tv.c, tv.h,
fixing remaining references in cfg-common.h and mplayer.c
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23909 b3059339-0415-0410-9bf9-f77b7e298cf2
r23530 breaks policy: notification was not sent to mailing list,
agreements of other devs were not received.
Code also should be reviewed/cleaned up/fixed.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23593 b3059339-0415-0410-9bf9-f77b7e298cf2
When -loop is used as a per-file option it seeks back to the start of
the file from the end and tries to reset options to their original
values. This reset is not implemented properly: it simply sets the
option variables back without running any of the associated control
code. Implementing the option reset functionality properly would be a
significant amount of work and there is no clear need for it, so I'm
simply removing the broken version.
None of this affects the use of -loop as a global option. That case has
a separate implementation which always starts a new file from scratch
with default option values.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23567 b3059339-0415-0410-9bf9-f77b7e298cf2
modified patch from Otvos Attila oattila at chello dot hu
Module uses zvbi library for all low-level VBI operations (like I/O with vbi
device, converting vbi pages into usefull vbi_page stuctures, rendering them
into RGB32 images).
All teletext related stuff (except properties, slave commands and rendering
osd in text mode or RGB32 rendered teletext pages in spu mode) is implemented
in tvi_vbi.c
New properties:
teletext_page - switching between pages
teletext_mode - switch between on/off/opaque/transparent modes
teletext_format - (currently read-only) allows to get format info
(black/white,gray,text)
teletext_half_page - trivial zooming (displaying top/bottom half of teletext
page)
New slave commands:
teletext_add_dec - user interface for jumping to any page by editing page number
interactively
teletext_go_link - goes though links, specified on current page
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23530 b3059339-0415-0410-9bf9-f77b7e298cf2
allows to bind one input key to several slave commands (independently for each section)
as shown below:
RIGHT seek +10
RIGHT {tv} tv_step_channel 1
RIGHT {dvdnav} dvdnav 4
Currenlty only "tv" section added.
patch by Otvos Attila oattila at chello dot hu
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23497 b3059339-0415-0410-9bf9-f77b7e298cf2
Add missing '\n' to "pts value <= previous", change level to INFO
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23312 b3059339-0415-0410-9bf9-f77b7e298cf2
"implicit declaration of function ‘mplayer_put_key’" warnings
Based on Attila's suggestions.
Approved by Uoti and Ivan.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22841 b3059339-0415-0410-9bf9-f77b7e298cf2
as long as there are enough pts values for frames that the decoder
returns.
This should allow passing NAL units individually.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22516 b3059339-0415-0410-9bf9-f77b7e298cf2
The value is related to overall a/v sync and is not used by audio
demuxers or decoders.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22506 b3059339-0415-0410-9bf9-f77b7e298cf2
Manual seeks no longer shift -endpos position (hopefully no one
considered that a "feature").
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22356 b3059339-0415-0410-9bf9-f77b7e298cf2
Previously it affected every later seek (even in other files).
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22319 b3059339-0415-0410-9bf9-f77b7e298cf2
Move some global and static variables under a struct that can be given
as a parameter. Add a context argument to the property functions so that
they do not have to depend on global/static variables.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22298 b3059339-0415-0410-9bf9-f77b7e298cf2
by the demuxer is smaller. Should improve a bit problems with non-selectable
DVD/VOB subtitles.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22252 b3059339-0415-0410-9bf9-f77b7e298cf2
in non-ASS mode. The latter is common (old sub replaced by new) and
resulted in an incorrect frame where both appeared simultaneously.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22162 b3059339-0415-0410-9bf9-f77b7e298cf2
and adding and removing of lines in subtitle struct into subreader.c.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21845 b3059339-0415-0410-9bf9-f77b7e298cf2
USE_OSD was hardcoded to true in configure, manually turning it off
would break compilation, and most OSD-related code wasn't affected by it
anyway so it did nothing useful.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21177 b3059339-0415-0410-9bf9-f77b7e298cf2
USE_SUB was hardcoded to true in configure, manually turning it off
would break compilation, and there's no apparent reason why having all
subtitle code under #ifdefs (even working ones) would be worth the
clutter.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21156 b3059339-0415-0410-9bf9-f77b7e298cf2