1
mirror of https://github.com/mpv-player/mpv synced 2024-11-03 03:19:24 +01:00
Commit Graph

33669 Commits

Author SHA1 Message Date
wm4
1ce5ca5f26 options: get rid of some compatibility stuff
Doesn't make sense because we broke/are going to break compatibility
with everything anyway.

Remove mechanism for warning the user against disabled options.

Remove colorspace alternative option values.
2012-08-06 00:10:13 +02:00
wm4
94782e464d options: get rid of ambiguous option parsing
Options parsing used to be ambiguous, as in the splitting into option
and values pairs was ambiguous. Example:

    -option -something

It wasn't clear whether -option actually takes an argument or not. The
string "-something" could either be a separate option, or an argument
to "-option". The code had to call the option specific parser function
to resolve this.

This made everything complicated and didn't even have a real use. There
was only one case where this was actually used: string lists
(m_option_type_string_list) and options based on it. That is because
this option type actually turns a single option into a proxy for several
real arguments, e.g. "vf*" can handle "-vf-add" and "-vf-clr". Options
suffixed with "-clr" are the only options of this group which take no
arguments.

This is ambiguous only with the "old syntax" (as shown above). The "new"
option syntax always puts option name and value into same argument.
(E.g. "--option=--something" or "--option" "--something".)

Simplify the code by making it statically known whether an option takes
a parameter or not with the flag M_OPT_TYPE_OLD_SYNTAX_NO_PARAM. If it's
set, the option parser assumes the option takes no argument.

The only real ambiguity left, string list options that end on "-clr",
are special cased in the parser.

Remove some duplication of the logic in the command line parser by
moving all argument splitting logic into split_opt(). (It's arguable
whether that can be considered code duplication, but now the code is a
bit simpler anyway. This might be subjective.)

Remove the "ambiguous" parameter from all option parsing related code.

Make m_config unaware of the pre-parsing concept.

Make most CONF_NOCFG options also CONF_GLOBAL (except those explicitly
usable as per-file options.)
2012-08-05 23:51:49 +02:00
wm4
039a6194a4 options: remove CONF_TYPE_PRINT_INDIRECT
This was unused.
2012-08-05 16:50:49 +02:00
wm4
87ed789162 input.conf: put dvdnav commands under {dvdnav}
This means these key binding will basically not exist, unless dvdnav is
in use (at runtime).
2012-08-05 15:50:41 +02:00
wm4
a62b9cf7a3 osd: free buffer allocated with av_malloc with av_free
free() was used before, which could in theory lead to crashes if
the OSD buffer was freed or resized. (Whether using free() actually
works depends on what function libavutil's av_malloc() uses internally.
On Linux, it seems to use memalign(), which uses free() as counterpart
for deallocation, so the bug never triggered for me.)
2012-08-04 22:22:37 +02:00
wm4
f7e9c15c7b m_config: always reject setting global options in per-file mode
Now the command line parser sets the m_config object into file local
mode, so that m_config can check for this condition. Makes trying to
set global options from a profile fail.

Note: global options can be considered read-only by m_config, so maybe
      there should be an additional check for this. Reusing the file-
      local check is more practical for now, though.
2012-08-04 19:59:56 +02:00
wm4
70c455a596 m_options: get rid of CONF_NOSAVE
This was already treated like CONF_GLOBAL.

Profiles can actually be file-local, as long as the profile sets file
local options only. Allow them to do so.
2012-08-04 19:59:56 +02:00
wm4
6031b8e22c m_config: implement m_config_new in terms of m_config_simple
Also change m_config_simple() such that you need to register options
using m_config_register_options().
2012-08-04 19:59:56 +02:00
wm4
37c03f2c81 options: revert passing around talloc contexts
This reverts commit 48f0692ab9 "options: make option struct the talloc parent of options".

This made things actually more complicated. It introduced a new
parameter to the option parse and copy functions, which was used
inconsistently. Some code passed a parent, some not. Morever, you have
to call m_option_free() anyway, because not all options actually
respect the talloc parent. There is also the question whether passing
NULL as parent is supposed to work, or if you still have to implement
m_config_free().

On the other hand, this simplifies nothing. I assume the intention was
being able to free all option values with a single talloc_free() call,
but the same goal can be reached by simply freeing the m_config struct.
(The m_config talloc destructor will free each option values.)

Get rid of the talloc parent context parameter. This essentially
reverts commit 48f0692ab9 ("options: make option struct the talloc parent of options").

In video_out.c, make the VO priv struct the talloc parent for the
m_config object, so that destroying the VO will free the options.

The ability to free the m_config struct and all its managed options was
introduced in commit 89a17bcda6.
2012-08-04 19:59:56 +02:00
wm4
ab63072b47 mplayer: make OSD stack a member of MPContext
This also requires that the OSD stack related functions carry a pointer
to MPContext.

Free the OSD stack items (mp_osd_msg) at exit by making MPContext the
talloc parent. (E.g. when exiting while something is still displayed on
the OSD.)
2012-08-04 19:59:56 +02:00
wm4
855449e67c mplayer: free return value of chapter_name() 2012-08-04 19:59:56 +02:00
wm4
9a2f4e10e7 mplayer: never exit mplayer from within the play loop
The only place exit_player() should be called is the main() function.
exit_player() should be the only function allowed to call exit(). This
makes it easier to guarantee proper deinitialization, and allows using
the --leak-report flag without showing false positives.

The quit slave command now sets a flag only. It uses the same mechanism
that's normally used to advance to the next file on the playlist, so the
rest of the playback path should be able to react to the quit command
quickly enough. That is, the player should react just as fast to quit
requests in practice as before this commit.

In reinit_audio_chain(), the player was actually exited if
init_audio_filters() failed. Reuse the normal error handling path to
handle this condition.
2012-08-04 19:59:56 +02:00
wm4
c7be71ae71 command, mplayer: free return value of demuxer_stream_lang() 2012-08-04 19:59:55 +02:00
wm4
a425777b96 mplayer: fix invalid memory access in print_stream()
This is a regression introduced by commit 9c02ae7e95.
2012-08-04 19:59:55 +02:00
wm4
714226b20c playlist: rename params_count field to num_params for consistency
Other (newer) parts of mplayer use this convention, so don't introduce
new conventions.
2012-08-04 19:59:55 +02:00
wm4
c7fe5f58e3 mplayer: rearrange misleading code
The print_timeline() function actually had contained some code that
changed the MPContext state. Since you wouldn't expect that from a
function named print, move that code out of the function. The
misleading code structure was introduced in commit 6f564fe82b.
2012-08-04 19:59:55 +02:00
wm4
a4f7a3df50 mplayer: fix idle mode regressions
Commit 89a17bcda6 simplified the idle loop to run any commands
mplayer receives, not just playlist related commands. Unfortunately, it
turns out many slave commands always assume the presence of a demuxer.
MPContext->demuxer is assumed not to be NULL. This made the player
crash when receiving slave commands like pause/unpause, chapter
control, subtitle selection.

We want mplayer being able to handle this. Any slave command or
property, as long as it's backed by a persistent setting, should be run
successfully, even if no file is being played. If the slave command
doesn't make sense in this state, it shouldn't crash the player.

Insert some NULL checks when accessing demuxers. If sh_video or
sh_audio are not NULL, assume demuxer can't be NULL.

(There actually aren't that many properties which need to be changed. If
it gets too complicated, we could employ alternative mechanisms instead,
such as explicitly marking safe properties with a flag.)
2012-08-04 19:56:23 +02:00
wm4
c0abc94a4b options: fix forgotten --sound => --audio rename 2012-08-03 13:25:57 +02:00
wm4
9c02ae7e95 demuxer: introduce a general stream struct
There are different C types for each stream type: sh_video for video,
sh_audio for audio, sh_sub for sub. There is no type that handles all
stream types in a generic way. Instead, there's a macro SH_COMMON, that
is used to define common fields for all 3 stream structs. Accessing
the common fields is hard if you want to be independent from the stream
type.

Introduce an actual generic stream struct (struct sh_stream), which is
supposed to unify all 3 stream types one day. Once all fields defined
by SH_COMMON have been moved into sh_stream, the transition is complete.

Move some fields into sh_stream, and rewrite osd_show_tracks to use
them.
2012-08-03 13:25:41 +02:00
wm4
d722f8fe61 command: make audio switching persistent across file switches
mp_property_audio switched the audio stream, but didn't store the newly
requested audio ID to MPOpts.audio_id, which is used by --aid. This
meant that the audio track would be reset when advancing to a new file.

Change that to make it consistent with subtitle selection. (Whether this
behavior is a good idea or not is a different question - maybe it's not
a good idea, because tracks are essentially random, and this will
disable default selection of tracks.)
2012-08-03 12:48:03 +02:00
wm4
e26b7314cf mplayer: fix output of audio/sub language in terminal output
The SH_COMMON lang field seems to be blatantly unreliable and is not
always set by demux_lavf (at least not with dvdnav:// ).

Also fix the same for the show_tracks_osd slave command.
2012-08-03 12:48:03 +02:00
wm4
e13c053665 mplayer: move file loading out of main()
The structure is now as follows:
- main():
    * basic initializations (e.g. init_libav() and more)
    * pre-parse command line (verbosity level, config file locations)
    * load config files (parse_cfgfiles())
    * parse command line, add files from the command line to playlist
      (m_config_parse_mp_command_line())
    * call:
        - handle_help_options():
            * check each help-related option
            * print help if requested
            * main() exits if help was requested
    * call function that works down the playlist:
        - play_files():
            * run idle loop (idle_loop()), until there are files in the
              playlist or an exit command was given (slave mode only)
            * actually load and play a file:
                - play_current_file():
                    * run all the dozens of functions to load the file
                      and initialize playback
                    * run a small loop that does normal playback, until
                      the file is done or a slave command terminates
                      playback
                      (each iteration, run_playloop() is called)
                    * uninitialize playback
            * determine next entry on the playlist to play
            * loop
    * call exit_player_with_rc() (there are many other places which
      use this function, though)
2012-08-03 12:48:02 +02:00
wm4
6f564fe82b mplayer: move things out of main()
The main() function used to be way too big, to the point that it was
unreadable (> 1000 lines).

Move random parts out of the main into new functions.
2012-08-03 07:56:32 +02:00
wm4
a78bb28ed6 sub: simplify code by always defining sub_cp 2012-08-03 06:53:10 +02:00
wm4
adde96a814 x11_common: remove some code duplication
This sin was committed in 2002.
2012-08-03 06:30:47 +02:00
wm4
b4d9647d18 mplayer: do not create X11 state in player frontend
This is about the vo_x11_init_state() call. It basically opens a X11
connection. It's called in the main() function once. It's not really
clear why this isn't done on VO creation instead. Maybe one reason was
that --no-fixed-vo used to be the default: when playing a new file, the
full VO state would be free'd and recreated. Keeping the X11 connection
possibly improved things, although the question is how. In summary,
there is no good reason to do this, and it only adds platform specific
details to the player frontend.

Do the X11 initialization in the respective VOs instead.
2012-08-03 05:55:02 +02:00
wm4
11648493db mplayer: move highly OS specific initialization code out of main()
The intention is to make the main() function smaller (which is at
about 1000 lines currently).

This commit also changes the order of some initializations, but that
should be safe.
2012-08-03 05:09:55 +02:00
wm4
4ced6d4e78 mplayer, stream_tv: move variable initialization
It's not clear why that was done in mplayer's main function.
2012-08-03 04:51:55 +02:00
mplayer-svn
548bae63e7 demux_audio: always enable parsing for audio streams
Generally enable parsing for audio streams.
The formats I know of that do not need it (e.g. raw audio) do
not have a parser anyway.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@35050 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: reimar
2012-08-03 03:50:35 +02:00
mplayer-svn
2e125e7984 subassconvert: order colour names alphabetically / better match W3 list
Order colour names alphabetically / better match W3 list.

Patch by Federico Kereki, fkereki gmail

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@35006 b3059339-0415-0410-9bf9-f77b7e298cf2

Add a few new CSS colors.

Patch by Federico Kereki, fkereki gmail

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@35007 b3059339-0415-0410-9bf9-f77b7e298cf2

Author: cehoyos
2012-08-03 03:47:09 +02:00
mplayer-svn
1432aa4131 tv: reduce code duplication
Reduce some code duplication.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34995 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: reimar
2012-08-03 03:44:44 +02:00
mplayer-svn
0b8540657a vf_unsharp: direct rendering fixes
unsharp: actually process the frame we got.

Previously it would always process the last frame
allocated, but that might be a different one than the
one first returned.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34975 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: reimar

Request a sufficiently large image for direct rendering.

Fixes broken video near the borders.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34979 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: ib
2012-08-03 03:38:45 +02:00
wm4
14b545eb2a vf_ass: use correct height when copying image
The target image can be larger than the image size the video filter was
configured for.

Based on mplayer-svn commit 34973.
2012-08-03 03:34:39 +02:00
mplayer-svn
f0965d8356 vf_ass: request a sufficiently large image for direct rendering
Request a sufficiently large image for direct rendering.

Due to alignment and similar, we might need a buffer
larger than the output of the ASS filter.
Fixes out of bound writes and/or broken video near the
borders.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34970 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: reimar
2012-08-03 03:34:39 +02:00
wm4
719d126023 bstr.h: fix compilation with C++ 2012-08-03 03:34:38 +02:00
mplayer-svn
772d93c81a configure: fix directx check on Cygwin
build: Fix vo directx configure check on Cygwin

  Without windows.h included syntax errors will
arise inside (some versions of) the ddraw.h header.

  The wine-based ddraw.h header was reported to not
have this problems.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34953 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: al
2012-08-03 03:34:38 +02:00
mplayer-svn
063f368398 mp3_hdr: cleanups
Return a spf value even when srate is NULL.

Based on patch by Benoît Thébaudeau [benoit thebaudeau advansee com]

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34916 b3059339-0415-0410-9bf9-f77b7e298cf2

Make some tables const.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34917 b3059339-0415-0410-9bf9-f77b7e298cf2

Use more appropriate types.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34918 b3059339-0415-0410-9bf9-f77b7e298cf2

Some minor simplifications.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34919 b3059339-0415-0410-9bf9-f77b7e298cf2

Cosmetics: fix up indentations, get rid of a few lost tabs.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34920 b3059339-0415-0410-9bf9-f77b7e298cf2

Remove unused code from mp_get_mp3_header.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34923 b3059339-0415-0410-9bf9-f77b7e298cf2

Author: reimar
2012-08-03 03:34:38 +02:00
mplayer-svn
d0525a0f59 demux_audio: fix calculation of audio length
Take start offset into account when calculating amount of audio data.

Patch by Benoît Thébaudeau [benoit thebaudeau advansee com]

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34915 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: reimar
2012-08-03 03:34:38 +02:00
mplayer-svn
ad8ef269cf demux_audio: avoid integer overflows
Add some additional checks to ensure subtractions do not overflow.

Patch by Benoît Thébaudeau [benoit thebaudeau advansee com].

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34914 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: reimar
2012-08-03 03:34:38 +02:00
mplayer-svn
2e2cb6c416 stream_pvr: fix buffer overflow
stream_pvr: Use sizeof() to get destination buffer size.
The code in lines 382/384 used the wrong constant.
Fixes bug #2066.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34895 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: reimar
2012-08-03 03:34:38 +02:00
mplayer-svn
254e291a66 configure: try linking in libmad test
Try linking when testing for libmad.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34880 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: cehoyos
2012-08-03 03:34:38 +02:00
mplayer-svn
882f538efb reorder_ch: support reordering 8 channels to AAC layout
This will allow us to encode 7.1 audio AAC.

7.1 audio not being really popular, instead of creating a new re_order
function, I'm using 2 functions for the re_ordering from

L R Ls Rs C LFE Rls Rrs   -->  C L R Ls Rs Rls Rrs LFE

Patch by Thierry Foucu [tfoucu gmail]

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34877 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: ranma

http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2012-April/070252.html
2012-08-03 03:34:38 +02:00
mplayer-svn
97f0ed25ed spudec: use more precise alpha handling for -spuaa 4
Use more precise alpha handling for -spuaa 4.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34874 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: reimar
2012-08-03 03:34:38 +02:00
mplayer-svn
3790146982 stream: detect prematurely closed connection
Detect prematurely closed connection.

Then we get a streaming_stopped status but we have
a end_pos and have not reached it yet, do not accept
it as EOF but instead try reconnection.
For example a forced restart of a webserver will usually
result in the connection being closed before EOF.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34873 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: reimar
2012-08-03 03:34:38 +02:00
mplayer-svn
0dc290269d av_sub, spudec: support multiple rectangles
av_sub: support multiple rectangles.

The "packet_t" structure is renamed with a prefix,
because it is used a public header.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34872 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: cigaes
2012-08-03 03:34:38 +02:00
mplayer-svn
7e87c0e76a stream: retry reconnecting several times
Retry reconnecting several times.

Also add a delay, otherwise a server closing any incoming
connection immediately would make MPlayer stop even if it happens
only for 1 second or so.
With this change, no server/network outage of any kind shorter
than 5 seconds should cause MPlayer to give up anymore.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34871 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: reimar
2012-08-03 03:34:38 +02:00
mplayer-svn
2d513fac33 vo_yuv4mpeg: support writing to stdout
yuv4mpeg: support writing to stdout instead of file.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34861 b3059339-0415-0410-9bf9-f77b7e298cf2

Allow using -vo yuv4mpeg for files with resolution changes.

Not all programs can read such files.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34862 b3059339-0415-0410-9bf9-f77b7e298cf2

vo_yuv4mpeg: flush userspace FILE buffers after each frame.

Potentially reduces delay when piping to stdout/fifo.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34879 b3059339-0415-0410-9bf9-f77b7e298cf2

Author: reimar
2012-08-03 02:53:21 +02:00
mplayer-svn
62df332dd5 demux_real: set aspect ratio
RM demuxer: set aspect from container video dimensions.

Fixes the sample from FFmpeg trac issue #785.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34850 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: reimar
2012-08-03 02:21:17 +02:00
mplayer-svn
12bab01104 ao_alsa: cleanup use of vsnprintf
vsnprintf always 0-terminates the string, so remove
extra code to do this explicitly.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34841 b3059339-0415-0410-9bf9-f77b7e298cf2
Author: reimar
2012-08-03 02:18:29 +02:00
mplayer-svn
ca2be52db5 ad_mad: cleanups
Remove unnecessary casts.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34827 b3059339-0415-0410-9bf9-f77b7e298cf2

Replace malloc+memset by calloc.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34828 b3059339-0415-0410-9bf9-f77b7e298cf2

libmad: set i_bps only if it is not already set.

Since that value is only based on the very first MP3 frame,
it is very likely to be much less accurate than any existing
value from a demuxer.

Patch by Benoît Thébaudeau.

Signed-off-by: "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34829 b3059339-0415-0410-9bf9-f77b7e298cf2

Author: reimar
2012-08-03 02:18:22 +02:00